Tested-off-by: Nobuhiro Iwamatsu
Acked-by: Nobuhiro Iwamatsu
2012/6/27 Shimoda, Yoshihiro :
> The previous code had many similar definitions in each CPU.
>
> This patch borrows from the sh_eth driver of Linux kernel.
>
> Signed-off-by: Yoshihiro Shimoda
> ---
> drivers/net/sh_eth.c | 108 -
> drivers/net/sh_eth.h | 331
> +++---
> 2 files changed, 258 insertions(+), 181 deletions(-)
>
> diff --git a/drivers/net/sh_eth.c b/drivers/net/sh_eth.c
> index 262762d..7b429e8 100644
> --- a/drivers/net/sh_eth.c
> +++ b/drivers/net/sh_eth.c
> @@ -76,8 +76,8 @@ int sh_eth_send(struct eth_device *dev, void *packet, int
> len)
> port_info->tx_desc_cur->td0 = TD_TACT | TD_TFP;
>
> /* Restart the transmitter if disabled */
> - if (!(inl(EDTRR(port)) & EDTRR_TRNS))
> - outl(EDTRR_TRNS, EDTRR(port));
> + if (!(sh_eth_read(eth, EDTRR) & EDTRR_TRNS))
> + sh_eth_write(eth, EDTRR_TRNS, EDTRR);
>
> /* Wait until packet is transmitted */
> timeout = TIMEOUT_CNT;
> @@ -129,25 +129,24 @@ int sh_eth_recv(struct eth_device *dev)
> }
>
> /* Restart the receiver if disabled */
> - if (!(inl(EDRRR(port)) & EDRRR_R))
> - outl(EDRRR_R, EDRRR(port));
> + if (!(sh_eth_read(eth, EDRRR) & EDRRR_R))
> + sh_eth_write(eth, EDRRR_R, EDRRR);
>
> return len;
> }
>
> static int sh_eth_reset(struct sh_eth_dev *eth)
> {
> - int port = eth->port;
> #if defined(SH_ETH_TYPE_GETHER)
> int ret = 0, i;
>
> /* Start e-dmac transmitter and receiver */
> - outl(EDSR_ENALL, EDSR(port));
> + sh_eth_write(eth, EDSR_ENALL, EDSR);
>
> /* Perform a software reset and wait for it to complete */
> - outl(EDMR_SRST, EDMR(port));
> + sh_eth_write(eth, EDMR_SRST, EDMR);
> for (i = 0; i < TIMEOUT_CNT ; i++) {
> - if (!(inl(EDMR(port)) & EDMR_SRST))
> + if (!(sh_eth_read(eth, EDMR) & EDMR_SRST))
> break;
> udelay(1000);
> }
> @@ -159,9 +158,9 @@ static int sh_eth_reset(struct sh_eth_dev *eth)
>
> return ret;
> #else
> - outl(inl(EDMR(port)) | EDMR_SRST, EDMR(port));
> + sh_eth_write(eth, sh_eth_read(eth, EDMR) | EDMR_SRST, EDMR);
> udelay(3000);
> - outl(inl(EDMR(port)) & ~EDMR_SRST, EDMR(port));
> + sh_eth_write(eth, sh_eth_read(eth, EDMR) & ~EDMR_SRST, EDMR);
>
> return 0;
> #endif
> @@ -207,11 +206,11 @@ static int sh_eth_tx_desc_init(struct sh_eth_dev *eth)
>
> /* Point the controller to the tx descriptor list. Must use physical
> addresses */
> - outl(ADDR_TO_PHY(port_info->tx_desc_base), TDLAR(port));
> + sh_eth_write(eth, ADDR_TO_PHY(port_info->tx_desc_base), TDLAR);
> #if defined(SH_ETH_TYPE_GETHER)
> - outl(ADDR_TO_PHY(port_info->tx_desc_base), TDFAR(port));
> - outl(ADDR_TO_PHY(cur_tx_desc), TDFXR(port));
> - outl(0x01, TDFFR(port));/* Last discriptor bit */
> + sh_eth_write(eth, ADDR_TO_PHY(port_info->tx_desc_base), TDFAR);
> + sh_eth_write(eth, ADDR_TO_PHY(cur_tx_desc), TDFXR);
> + sh_eth_write(eth, 0x01, TDFFR);/* Last discriptor bit */
> #endif
>
> err:
> @@ -275,11 +274,11 @@ static int sh_eth_rx_desc_init(struct sh_eth_dev *eth)
> cur_rx_desc->rd0 |= RD_RDLE;
>
> /* Point the controller to the rx descriptor list */
> - outl(ADDR_TO_PHY(port_info->rx_desc_base), RDLAR(port));
> + sh_eth_write(eth, ADDR_TO_PHY(port_info->rx_desc_base), RDLAR);
> #if defined(SH_ETH_TYPE_GETHER)
> - outl(ADDR_TO_PHY(port_info->rx_desc_base), RDFAR(port));
> - outl(ADDR_TO_PHY(cur_rx_desc), RDFXR(port));
> - outl(RDFFR_RDLF, RDFFR(port));
> + sh_eth_write(eth, ADDR_TO_PHY(port_info->rx_desc_base), RDFAR);
> + sh_eth_write(eth, ADDR_TO_PHY(cur_rx_desc), RDFXR);
> + sh_eth_write(eth, RDFFR_RDLF, RDFFR);
> #endif
>
> return ret;
> @@ -364,38 +363,39 @@ static int sh_eth_config(struct sh_eth_dev *eth, bd_t
> *bd)
> struct phy_device *phy;
>
> /* Configure e-dmac registers */
> - outl((inl(EDMR(port)) & ~EMDR_DESC_R) | EDMR_EL, EDMR(port));
> - outl(0, EESIPR(port));
> - outl(0, TRSCER(port));
> - outl(0, TFTR(port));
> - outl((FIFO_SIZE_T | FIFO_SIZE_R), FDR(port));
> - outl(RMCR_RST, RMCR(port));
> + sh_eth_write(eth, (sh_eth_read(eth, EDMR) & ~EMDR_DESC_R) | EDMR_EL,
> + EDMR);
> + sh_eth_write(eth, 0, EESIPR);
> + sh_eth_write(eth, 0, TRSCER);
> + sh_eth_write(eth, 0, TFTR);
> + sh_eth_write(eth, (FIFO_SIZE_T | FIFO_SIZE_R), FDR);
> + sh_eth_write(eth, RMCR_RST, RMCR);
> #if defined(SH_ETH_TYPE_GETHER)
> - outl(0, RPADIR(port));
> + sh_eth_write(eth, 0, RPADIR);
> #endif
> - outl((FIFO_F_D_RFF | FIFO_F_D_RFD), FCFTR(port));
> + sh_e