diff mbox series

[22/30] net: eepro100: Pass PCI BDF into bus_to_phys()/phys_to_bus()

Message ID 20200523163837.407592-22-marek.vasut+renesas@gmail.com
State New
Headers show
Series [01/30] net: eepro100: Remove EEPRO100_SROM_WRITE | expand

Commit Message

Marek Vasut May 23, 2020, 4:38 p.m. UTC
This is a trick in preparation for adding DM support. By passing in
the PCI BDF into the bus_to_phys()/phys_to_bus() macros and calling
that dev, we can substitute dev with udevice when DM support lands
and do minor adjustment to the macros to support both DM and non-DM
operation. No functional change.

Signed-off-by: Marek Vasut <marek.vasut+renesas at gmail.com>
---
 drivers/net/eepro100.c | 36 ++++++++++++++++++++++--------------
 1 file changed, 22 insertions(+), 14 deletions(-)

Comments

Ramon Fried May 23, 2020, 5:21 p.m. UTC | #1
On Sat, May 23, 2020 at 7:43 PM Marek Vasut <marek.vasut at gmail.com> wrote:
>
> This is a trick in preparation for adding DM support. By passing in
> the PCI BDF into the bus_to_phys()/phys_to_bus() macros and calling
> that dev, we can substitute dev with udevice when DM support lands
> and do minor adjustment to the macros to support both DM and non-DM
> operation. No functional change.
>
> Signed-off-by: Marek Vasut <marek.vasut+renesas at gmail.com>
> ---
>  drivers/net/eepro100.c | 36 ++++++++++++++++++++++--------------
>  1 file changed, 22 insertions(+), 14 deletions(-)
>
> diff --git a/drivers/net/eepro100.c b/drivers/net/eepro100.c
> index 4446251e11..532d7aa649 100644
> --- a/drivers/net/eepro100.c
> +++ b/drivers/net/eepro100.c
> @@ -202,11 +202,11 @@ static const char i82558_config_cmd[] = {
>  };
>
>  #if defined(CONFIG_E500)
> -#define bus_to_phys(a) (a)
> -#define phys_to_bus(a) (a)
> +#define bus_to_phys(dev, a)    (a)
> +#define phys_to_bus(dev, a)    (a)
>  #else
> -#define bus_to_phys(a) pci_mem_to_phys((pci_dev_t)dev->priv, a)
> -#define phys_to_bus(a) pci_phys_to_mem((pci_dev_t)dev->priv, a)
> +#define bus_to_phys(dev, a)    pci_mem_to_phys((dev), (a))
> +#define phys_to_bus(dev, a)    pci_phys_to_mem((dev), (a))
>  #endif
>
>  static int INW(struct eth_device *dev, u_long addr)
> @@ -352,7 +352,8 @@ static void init_rx_ring(struct eth_device *dev)
>                 rx_ring[i].control = (i == NUM_RX_DESC - 1) ?
>                                      cpu_to_le16 (RFD_CONTROL_S) : 0;
>                 rx_ring[i].link =
> -                       cpu_to_le32(phys_to_bus((u32)&rx_ring[(i + 1) %
> +                       cpu_to_le32(phys_to_bus((pci_dev_t)dev->priv,
> +                                               (u32)&rx_ring[(i + 1) %
>                                                 NUM_RX_DESC]));
>                 rx_ring[i].rx_buf_addr = 0xffffffff;
>                 rx_ring[i].count = cpu_to_le32(PKTSIZE_ALIGN << 16);
> @@ -401,7 +402,7 @@ static int eepro100_txcmd_send(struct eth_device *dev,
>         if (!wait_for_eepro100(dev))
>                 return -ETIMEDOUT;
>
> -       OUTL(dev, phys_to_bus((u32)desc), SCB_POINTER);
> +       OUTL(dev, phys_to_bus((pci_dev_t)dev->priv, (u32)desc), SCB_POINTER);
>         OUTW(dev, SCB_M | CU_START, SCB_CMD);
>
>         while (true) {
> @@ -562,7 +563,8 @@ static int eepro100_init(struct eth_device *dev, bd_t *bis)
>         }
>
>         /* RX ring cache was already flushed in init_rx_ring() */
> -       OUTL(dev, phys_to_bus((u32)&rx_ring[rx_next]), SCB_POINTER);
> +       OUTL(dev, phys_to_bus((pci_dev_t)dev->priv, (u32)&rx_ring[rx_next]),
> +            SCB_POINTER);
>         OUTW(dev, SCB_M | RUC_START, SCB_CMD);
>
>         /* Send the Configure frame */
> @@ -573,7 +575,8 @@ static int eepro100_init(struct eth_device *dev, bd_t *bis)
>         cfg_cmd->command = cpu_to_le16(CONFIG_SYS_CMD_SUSPEND |
>                                        CONFIG_SYS_CMD_CONFIGURE);
>         cfg_cmd->status = 0;
> -       cfg_cmd->link = cpu_to_le32(phys_to_bus((u32)&tx_ring[tx_next]));
> +       cfg_cmd->link = cpu_to_le32(phys_to_bus((pci_dev_t)dev->priv,
> +                                               (u32)&tx_ring[tx_next]));
>
>         memcpy(((struct descriptor *)cfg_cmd)->params, i82558_config_cmd,
>                sizeof(i82558_config_cmd));
> @@ -593,7 +596,8 @@ static int eepro100_init(struct eth_device *dev, bd_t *bis)
>         ias_cmd->command = cpu_to_le16(CONFIG_SYS_CMD_SUSPEND |
>                                        CONFIG_SYS_CMD_IAS);
>         ias_cmd->status = 0;
> -       ias_cmd->link = cpu_to_le32(phys_to_bus((u32)&tx_ring[tx_next]));
> +       ias_cmd->link = cpu_to_le32(phys_to_bus((pci_dev_t)dev->priv,
> +                                               (u32)&tx_ring[tx_next]));
>
>         memcpy(((struct descriptor *)ias_cmd)->params, dev->enetaddr, 6);
>
> @@ -629,9 +633,12 @@ static int eepro100_send(struct eth_device *dev, void *packet, int length)
>                                     TXCB_CMD_S | TXCB_CMD_EL);
>         desc->status = 0;
>         desc->count = cpu_to_le32(tx_threshold);
> -       desc->link = cpu_to_le32(phys_to_bus((u32)&tx_ring[tx_next]));
> -       desc->tx_desc_addr = cpu_to_le32(phys_to_bus((u32)&desc->tx_buf_addr0));
> -       desc->tx_buf_addr0 = cpu_to_le32(phys_to_bus((u_long)packet));
> +       desc->link = cpu_to_le32(phys_to_bus((pci_dev_t)dev->priv,
> +                                           (u32)&tx_ring[tx_next]));
> +       desc->tx_desc_addr = cpu_to_le32(phys_to_bus((pci_dev_t)dev->priv,
> +                                                    (u32)&desc->tx_buf_addr0));
> +       desc->tx_buf_addr0 = cpu_to_le32(phys_to_bus((pci_dev_t)dev->priv,
> +                                                    (u_long)packet));
>         desc->tx_buf_size0 = cpu_to_le32(length);
>
>         ret = eepro100_txcmd_send(dev, &tx_ring[tx_cur]);
> @@ -706,7 +713,8 @@ static int eepro100_recv(struct eth_device *dev)
>                 }
>
>                 /* RX ring cache was already flushed in init_rx_ring() */
> -               OUTL(dev, phys_to_bus((u32)&rx_ring[rx_next]), SCB_POINTER);
> +               OUTL(dev, phys_to_bus((pci_dev_t)dev->priv,
> +                                     (u32)&rx_ring[rx_next]), SCB_POINTER);
>                 OUTW(dev, SCB_M | RUC_START, SCB_CMD);
>         }
>
> @@ -785,7 +793,7 @@ int eepro100_initialize(bd_t *bis)
>
>                 sprintf(dev->name, "i82559#%d", card_number);
>                 dev->priv = (void *)devno; /* this have to come before bus_to_phys() */
> -               dev->iobase = bus_to_phys(iobase);
> +               dev->iobase = bus_to_phys(devno, iobase);
>                 dev->init = eepro100_init;
>                 dev->halt = eepro100_halt;
>                 dev->send = eepro100_send;
> --
> 2.25.1
>
Reviewed-By: Ramon Fried <rfried.dev at gmail.com>
diff mbox series

Patch

diff --git a/drivers/net/eepro100.c b/drivers/net/eepro100.c
index 4446251e11..532d7aa649 100644
--- a/drivers/net/eepro100.c
+++ b/drivers/net/eepro100.c
@@ -202,11 +202,11 @@  static const char i82558_config_cmd[] = {
 };
 
 #if defined(CONFIG_E500)
-#define bus_to_phys(a) (a)
-#define phys_to_bus(a) (a)
+#define bus_to_phys(dev, a)	(a)
+#define phys_to_bus(dev, a)	(a)
 #else
-#define bus_to_phys(a)	pci_mem_to_phys((pci_dev_t)dev->priv, a)
-#define phys_to_bus(a)	pci_phys_to_mem((pci_dev_t)dev->priv, a)
+#define bus_to_phys(dev, a)	pci_mem_to_phys((dev), (a))
+#define phys_to_bus(dev, a)	pci_phys_to_mem((dev), (a))
 #endif
 
 static int INW(struct eth_device *dev, u_long addr)
@@ -352,7 +352,8 @@  static void init_rx_ring(struct eth_device *dev)
 		rx_ring[i].control = (i == NUM_RX_DESC - 1) ?
 				     cpu_to_le16 (RFD_CONTROL_S) : 0;
 		rx_ring[i].link =
-			cpu_to_le32(phys_to_bus((u32)&rx_ring[(i + 1) %
+			cpu_to_le32(phys_to_bus((pci_dev_t)dev->priv,
+						(u32)&rx_ring[(i + 1) %
 						NUM_RX_DESC]));
 		rx_ring[i].rx_buf_addr = 0xffffffff;
 		rx_ring[i].count = cpu_to_le32(PKTSIZE_ALIGN << 16);
@@ -401,7 +402,7 @@  static int eepro100_txcmd_send(struct eth_device *dev,
 	if (!wait_for_eepro100(dev))
 		return -ETIMEDOUT;
 
-	OUTL(dev, phys_to_bus((u32)desc), SCB_POINTER);
+	OUTL(dev, phys_to_bus((pci_dev_t)dev->priv, (u32)desc), SCB_POINTER);
 	OUTW(dev, SCB_M | CU_START, SCB_CMD);
 
 	while (true) {
@@ -562,7 +563,8 @@  static int eepro100_init(struct eth_device *dev, bd_t *bis)
 	}
 
 	/* RX ring cache was already flushed in init_rx_ring() */
-	OUTL(dev, phys_to_bus((u32)&rx_ring[rx_next]), SCB_POINTER);
+	OUTL(dev, phys_to_bus((pci_dev_t)dev->priv, (u32)&rx_ring[rx_next]),
+	     SCB_POINTER);
 	OUTW(dev, SCB_M | RUC_START, SCB_CMD);
 
 	/* Send the Configure frame */
@@ -573,7 +575,8 @@  static int eepro100_init(struct eth_device *dev, bd_t *bis)
 	cfg_cmd->command = cpu_to_le16(CONFIG_SYS_CMD_SUSPEND |
 				       CONFIG_SYS_CMD_CONFIGURE);
 	cfg_cmd->status = 0;
-	cfg_cmd->link = cpu_to_le32(phys_to_bus((u32)&tx_ring[tx_next]));
+	cfg_cmd->link = cpu_to_le32(phys_to_bus((pci_dev_t)dev->priv,
+						(u32)&tx_ring[tx_next]));
 
 	memcpy(((struct descriptor *)cfg_cmd)->params, i82558_config_cmd,
 	       sizeof(i82558_config_cmd));
@@ -593,7 +596,8 @@  static int eepro100_init(struct eth_device *dev, bd_t *bis)
 	ias_cmd->command = cpu_to_le16(CONFIG_SYS_CMD_SUSPEND |
 				       CONFIG_SYS_CMD_IAS);
 	ias_cmd->status = 0;
-	ias_cmd->link = cpu_to_le32(phys_to_bus((u32)&tx_ring[tx_next]));
+	ias_cmd->link = cpu_to_le32(phys_to_bus((pci_dev_t)dev->priv,
+						(u32)&tx_ring[tx_next]));
 
 	memcpy(((struct descriptor *)ias_cmd)->params, dev->enetaddr, 6);
 
@@ -629,9 +633,12 @@  static int eepro100_send(struct eth_device *dev, void *packet, int length)
 				    TXCB_CMD_S | TXCB_CMD_EL);
 	desc->status = 0;
 	desc->count = cpu_to_le32(tx_threshold);
-	desc->link = cpu_to_le32(phys_to_bus((u32)&tx_ring[tx_next]));
-	desc->tx_desc_addr = cpu_to_le32(phys_to_bus((u32)&desc->tx_buf_addr0));
-	desc->tx_buf_addr0 = cpu_to_le32(phys_to_bus((u_long)packet));
+	desc->link = cpu_to_le32(phys_to_bus((pci_dev_t)dev->priv,
+					    (u32)&tx_ring[tx_next]));
+	desc->tx_desc_addr = cpu_to_le32(phys_to_bus((pci_dev_t)dev->priv,
+						     (u32)&desc->tx_buf_addr0));
+	desc->tx_buf_addr0 = cpu_to_le32(phys_to_bus((pci_dev_t)dev->priv,
+						     (u_long)packet));
 	desc->tx_buf_size0 = cpu_to_le32(length);
 
 	ret = eepro100_txcmd_send(dev, &tx_ring[tx_cur]);
@@ -706,7 +713,8 @@  static int eepro100_recv(struct eth_device *dev)
 		}
 
 		/* RX ring cache was already flushed in init_rx_ring() */
-		OUTL(dev, phys_to_bus((u32)&rx_ring[rx_next]), SCB_POINTER);
+		OUTL(dev, phys_to_bus((pci_dev_t)dev->priv,
+				      (u32)&rx_ring[rx_next]), SCB_POINTER);
 		OUTW(dev, SCB_M | RUC_START, SCB_CMD);
 	}
 
@@ -785,7 +793,7 @@  int eepro100_initialize(bd_t *bis)
 
 		sprintf(dev->name, "i82559#%d", card_number);
 		dev->priv = (void *)devno; /* this have to come before bus_to_phys() */
-		dev->iobase = bus_to_phys(iobase);
+		dev->iobase = bus_to_phys(devno, iobase);
 		dev->init = eepro100_init;
 		dev->halt = eepro100_halt;
 		dev->send = eepro100_send;