提交 ae70644d 编写于 作者: Y Yoshihiro Shimoda 提交者: David S. Miller

net: sh_eth: use ioremap()

This patch also changes writel/readl to iowrite32/ioread32.
Signed-off-by: NYoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
Signed-off-by: NDavid S. Miller <davem@davemloft.net>
上级 fd734c6f
...@@ -155,18 +155,18 @@ static void sh_eth_chip_reset_giga(struct net_device *ndev) ...@@ -155,18 +155,18 @@ static void sh_eth_chip_reset_giga(struct net_device *ndev)
/* save MAHR and MALR */ /* save MAHR and MALR */
for (i = 0; i < 2; i++) { for (i = 0; i < 2; i++) {
malr[i] = readl(GIGA_MALR(i)); malr[i] = ioread32((void *)GIGA_MALR(i));
mahr[i] = readl(GIGA_MAHR(i)); mahr[i] = ioread32((void *)GIGA_MAHR(i));
} }
/* reset device */ /* reset device */
writel(ARSTR_ARSTR, SH_GIGA_ETH_BASE + 0x1800); iowrite32(ARSTR_ARSTR, (void *)(SH_GIGA_ETH_BASE + 0x1800));
mdelay(1); mdelay(1);
/* restore MAHR and MALR */ /* restore MAHR and MALR */
for (i = 0; i < 2; i++) { for (i = 0; i < 2; i++) {
writel(malr[i], GIGA_MALR(i)); iowrite32(malr[i], (void *)GIGA_MALR(i));
writel(mahr[i], GIGA_MAHR(i)); iowrite32(mahr[i], (void *)GIGA_MAHR(i));
} }
} }
...@@ -515,9 +515,9 @@ static unsigned long sh_eth_get_edtrr_trns(struct sh_eth_private *mdp) ...@@ -515,9 +515,9 @@ static unsigned long sh_eth_get_edtrr_trns(struct sh_eth_private *mdp)
} }
struct bb_info { struct bb_info {
void (*set_gate)(unsigned long addr); void (*set_gate)(void *addr);
struct mdiobb_ctrl ctrl; struct mdiobb_ctrl ctrl;
u32 addr; void *addr;
u32 mmd_msk;/* MMD */ u32 mmd_msk;/* MMD */
u32 mdo_msk; u32 mdo_msk;
u32 mdi_msk; u32 mdi_msk;
...@@ -525,21 +525,21 @@ struct bb_info { ...@@ -525,21 +525,21 @@ struct bb_info {
}; };
/* PHY bit set */ /* PHY bit set */
static void bb_set(u32 addr, u32 msk) static void bb_set(void *addr, u32 msk)
{ {
writel(readl(addr) | msk, addr); iowrite32(ioread32(addr) | msk, addr);
} }
/* PHY bit clear */ /* PHY bit clear */
static void bb_clr(u32 addr, u32 msk) static void bb_clr(void *addr, u32 msk)
{ {
writel((readl(addr) & ~msk), addr); iowrite32((ioread32(addr) & ~msk), addr);
} }
/* PHY bit read */ /* PHY bit read */
static int bb_read(u32 addr, u32 msk) static int bb_read(void *addr, u32 msk)
{ {
return (readl(addr) & msk) != 0; return (ioread32(addr) & msk) != 0;
} }
/* Data I/O pin control */ /* Data I/O pin control */
...@@ -1680,7 +1680,7 @@ static int sh_mdio_init(struct net_device *ndev, int id, ...@@ -1680,7 +1680,7 @@ static int sh_mdio_init(struct net_device *ndev, int id,
} }
/* bitbang init */ /* bitbang init */
bitbang->addr = ndev->base_addr + mdp->reg_offset[PIR]; bitbang->addr = mdp->addr + mdp->reg_offset[PIR];
bitbang->set_gate = pd->set_mdio_gate; bitbang->set_gate = pd->set_mdio_gate;
bitbang->mdi_msk = 0x08; bitbang->mdi_msk = 0x08;
bitbang->mdo_msk = 0x04; bitbang->mdo_msk = 0x04;
...@@ -1812,6 +1812,13 @@ static int sh_eth_drv_probe(struct platform_device *pdev) ...@@ -1812,6 +1812,13 @@ static int sh_eth_drv_probe(struct platform_device *pdev)
ether_setup(ndev); ether_setup(ndev);
mdp = netdev_priv(ndev); mdp = netdev_priv(ndev);
mdp->addr = ioremap(res->start, resource_size(res));
if (mdp->addr == NULL) {
ret = -ENOMEM;
dev_err(&pdev->dev, "ioremap failed.\n");
goto out_release;
}
spin_lock_init(&mdp->lock); spin_lock_init(&mdp->lock);
mdp->pdev = pdev; mdp->pdev = pdev;
pm_runtime_enable(&pdev->dev); pm_runtime_enable(&pdev->dev);
...@@ -1892,6 +1899,8 @@ static int sh_eth_drv_probe(struct platform_device *pdev) ...@@ -1892,6 +1899,8 @@ static int sh_eth_drv_probe(struct platform_device *pdev)
out_release: out_release:
/* net_dev free */ /* net_dev free */
if (mdp && mdp->addr)
iounmap(mdp->addr);
if (mdp && mdp->tsu_addr) if (mdp && mdp->tsu_addr)
iounmap(mdp->tsu_addr); iounmap(mdp->tsu_addr);
if (ndev) if (ndev)
...@@ -1910,6 +1919,7 @@ static int sh_eth_drv_remove(struct platform_device *pdev) ...@@ -1910,6 +1919,7 @@ static int sh_eth_drv_remove(struct platform_device *pdev)
sh_mdio_release(ndev); sh_mdio_release(ndev);
unregister_netdev(ndev); unregister_netdev(ndev);
pm_runtime_disable(&pdev->dev); pm_runtime_disable(&pdev->dev);
iounmap(mdp->addr);
free_netdev(ndev); free_netdev(ndev);
platform_set_drvdata(pdev, NULL); platform_set_drvdata(pdev, NULL);
......
...@@ -762,6 +762,7 @@ struct sh_eth_private { ...@@ -762,6 +762,7 @@ struct sh_eth_private {
struct platform_device *pdev; struct platform_device *pdev;
struct sh_eth_cpu_data *cd; struct sh_eth_cpu_data *cd;
const u16 *reg_offset; const u16 *reg_offset;
void __iomem *addr;
void __iomem *tsu_addr; void __iomem *tsu_addr;
dma_addr_t rx_desc_dma; dma_addr_t rx_desc_dma;
dma_addr_t tx_desc_dma; dma_addr_t tx_desc_dma;
...@@ -811,7 +812,7 @@ static inline void sh_eth_write(struct net_device *ndev, unsigned long data, ...@@ -811,7 +812,7 @@ static inline void sh_eth_write(struct net_device *ndev, unsigned long data,
{ {
struct sh_eth_private *mdp = netdev_priv(ndev); struct sh_eth_private *mdp = netdev_priv(ndev);
writel(data, ndev->base_addr + mdp->reg_offset[enum_index]); iowrite32(data, mdp->addr + mdp->reg_offset[enum_index]);
} }
static inline unsigned long sh_eth_read(struct net_device *ndev, static inline unsigned long sh_eth_read(struct net_device *ndev,
...@@ -819,19 +820,19 @@ static inline unsigned long sh_eth_read(struct net_device *ndev, ...@@ -819,19 +820,19 @@ static inline unsigned long sh_eth_read(struct net_device *ndev,
{ {
struct sh_eth_private *mdp = netdev_priv(ndev); struct sh_eth_private *mdp = netdev_priv(ndev);
return readl(ndev->base_addr + mdp->reg_offset[enum_index]); return ioread32(mdp->addr + mdp->reg_offset[enum_index]);
} }
static inline void sh_eth_tsu_write(struct sh_eth_private *mdp, static inline void sh_eth_tsu_write(struct sh_eth_private *mdp,
unsigned long data, int enum_index) unsigned long data, int enum_index)
{ {
writel(data, mdp->tsu_addr + mdp->reg_offset[enum_index]); iowrite32(data, mdp->tsu_addr + mdp->reg_offset[enum_index]);
} }
static inline unsigned long sh_eth_tsu_read(struct sh_eth_private *mdp, static inline unsigned long sh_eth_tsu_read(struct sh_eth_private *mdp,
int enum_index) int enum_index)
{ {
return readl(mdp->tsu_addr + mdp->reg_offset[enum_index]); return ioread32(mdp->tsu_addr + mdp->reg_offset[enum_index]);
} }
#endif /* #ifndef __SH_ETH_H__ */ #endif /* #ifndef __SH_ETH_H__ */
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册