Commit 4986b996 authored by Yoshihiro Shimoda's avatar Yoshihiro Shimoda Committed by David S. Miller

net: sh_eth: remove the SH_TSU_ADDR

The defination is hardcoded in this driver for some CPUs. This patch
modifies to get resource of TSU address from platform_device.
Signed-off-by: default avatarYoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 4a55530f
...@@ -145,8 +145,10 @@ static struct sh_eth_cpu_data sh_eth_my_cpu_data = { ...@@ -145,8 +145,10 @@ static struct sh_eth_cpu_data sh_eth_my_cpu_data = {
#define SH_ETH_HAS_TSU 1 #define SH_ETH_HAS_TSU 1
static void sh_eth_chip_reset(struct net_device *ndev) static void sh_eth_chip_reset(struct net_device *ndev)
{ {
struct sh_eth_private *mdp = netdev_priv(ndev);
/* reset device */ /* reset device */
writel(ARSTR_ARSTR, ARSTR); sh_eth_tsu_write(mdp, ARSTR_ARSTR, ARSTR);
mdelay(1); mdelay(1);
} }
...@@ -229,6 +231,7 @@ static struct sh_eth_cpu_data sh_eth_my_cpu_data = { ...@@ -229,6 +231,7 @@ static struct sh_eth_cpu_data sh_eth_my_cpu_data = {
.hw_swap = 1, .hw_swap = 1,
.no_trimd = 1, .no_trimd = 1,
.no_ade = 1, .no_ade = 1,
.tsu = 1,
}; };
#elif defined(CONFIG_CPU_SUBTYPE_SH7619) #elif defined(CONFIG_CPU_SUBTYPE_SH7619)
...@@ -246,6 +249,7 @@ static struct sh_eth_cpu_data sh_eth_my_cpu_data = { ...@@ -246,6 +249,7 @@ static struct sh_eth_cpu_data sh_eth_my_cpu_data = {
#define SH_ETH_HAS_TSU 1 #define SH_ETH_HAS_TSU 1
static struct sh_eth_cpu_data sh_eth_my_cpu_data = { static struct sh_eth_cpu_data sh_eth_my_cpu_data = {
.eesipr_value = DMAC_M_RFRMER | DMAC_M_ECI | 0x003fffff, .eesipr_value = DMAC_M_RFRMER | DMAC_M_ECI | 0x003fffff,
.tsu = 1,
}; };
#endif #endif
...@@ -1446,6 +1450,7 @@ static void sh_eth_set_multicast_list(struct net_device *ndev) ...@@ -1446,6 +1450,7 @@ static void sh_eth_set_multicast_list(struct net_device *ndev)
ECMR_MCT, ECMR); ECMR_MCT, ECMR);
} }
} }
#endif /* SH_ETH_HAS_TSU */
/* SuperH's TSU register init function */ /* SuperH's TSU register init function */
static void sh_eth_tsu_init(struct sh_eth_private *mdp) static void sh_eth_tsu_init(struct sh_eth_private *mdp)
...@@ -1475,7 +1480,6 @@ static void sh_eth_tsu_init(struct sh_eth_private *mdp) ...@@ -1475,7 +1480,6 @@ static void sh_eth_tsu_init(struct sh_eth_private *mdp)
sh_eth_tsu_write(mdp, 0, TSU_POST3); /* Disable CAM entry [16-23] */ sh_eth_tsu_write(mdp, 0, TSU_POST3); /* Disable CAM entry [16-23] */
sh_eth_tsu_write(mdp, 0, TSU_POST4); /* Disable CAM entry [24-31] */ sh_eth_tsu_write(mdp, 0, TSU_POST4); /* Disable CAM entry [24-31] */
} }
#endif /* SH_ETH_HAS_TSU */
/* MDIO bus release function */ /* MDIO bus release function */
static int sh_mdio_release(struct net_device *ndev) static int sh_mdio_release(struct net_device *ndev)
...@@ -1676,14 +1680,23 @@ static int sh_eth_drv_probe(struct platform_device *pdev) ...@@ -1676,14 +1680,23 @@ static int sh_eth_drv_probe(struct platform_device *pdev)
/* First device only init */ /* First device only init */
if (!devno) { if (!devno) {
if (mdp->cd->tsu) {
struct resource *rtsu;
rtsu = platform_get_resource(pdev, IORESOURCE_MEM, 1);
if (!rtsu) {
dev_err(&pdev->dev, "Not found TSU resource\n");
goto out_release;
}
mdp->tsu_addr = ioremap(rtsu->start,
resource_size(rtsu));
}
if (mdp->cd->chip_reset) if (mdp->cd->chip_reset)
mdp->cd->chip_reset(ndev); mdp->cd->chip_reset(ndev);
#if defined(SH_ETH_HAS_TSU) if (mdp->cd->tsu) {
/* TSU init (Init only)*/ /* TSU init (Init only)*/
mdp->tsu_addr = SH_TSU_ADDR; sh_eth_tsu_init(mdp);
sh_eth_tsu_init(mdp); }
#endif
} }
/* network device register */ /* network device register */
...@@ -1709,6 +1722,8 @@ static int sh_eth_drv_probe(struct platform_device *pdev) ...@@ -1709,6 +1722,8 @@ static int sh_eth_drv_probe(struct platform_device *pdev)
out_release: out_release:
/* net_dev free */ /* net_dev free */
if (mdp->tsu_addr)
iounmap(mdp->tsu_addr);
if (ndev) if (ndev)
free_netdev(ndev); free_netdev(ndev);
...@@ -1719,7 +1734,9 @@ static int sh_eth_drv_probe(struct platform_device *pdev) ...@@ -1719,7 +1734,9 @@ static int sh_eth_drv_probe(struct platform_device *pdev)
static int sh_eth_drv_remove(struct platform_device *pdev) static int sh_eth_drv_remove(struct platform_device *pdev)
{ {
struct net_device *ndev = platform_get_drvdata(pdev); struct net_device *ndev = platform_get_drvdata(pdev);
struct sh_eth_private *mdp = netdev_priv(ndev);
iounmap(mdp->tsu_addr);
sh_mdio_release(ndev); sh_mdio_release(ndev);
unregister_netdev(ndev); unregister_netdev(ndev);
pm_runtime_disable(&pdev->dev); pm_runtime_disable(&pdev->dev);
......
...@@ -207,6 +207,7 @@ static const u16 sh_eth_offset_gigabit[SH_ETH_MAX_REGISTER_OFFSET] = { ...@@ -207,6 +207,7 @@ static const u16 sh_eth_offset_gigabit[SH_ETH_MAX_REGISTER_OFFSET] = {
[CEECR] = 0x0770, [CEECR] = 0x0770,
[MAFCR] = 0x0778, [MAFCR] = 0x0778,
[ARSTR] = 0x0000,
[TSU_CTRST] = 0x0004, [TSU_CTRST] = 0x0004,
[TSU_FWEN0] = 0x0010, [TSU_FWEN0] = 0x0010,
[TSU_FWEN1] = 0x0014, [TSU_FWEN1] = 0x0014,
...@@ -328,6 +329,7 @@ static const u16 sh_eth_offset_fast_sh3_sh2[SH_ETH_MAX_REGISTER_OFFSET] = { ...@@ -328,6 +329,7 @@ static const u16 sh_eth_offset_fast_sh3_sh2[SH_ETH_MAX_REGISTER_OFFSET] = {
[TPAUSER] = 0x01c4, [TPAUSER] = 0x01c4,
[BCFR] = 0x01cc, [BCFR] = 0x01cc,
[ARSTR] = 0x0000,
[TSU_CTRST] = 0x0004, [TSU_CTRST] = 0x0004,
[TSU_FWEN0] = 0x0010, [TSU_FWEN0] = 0x0010,
[TSU_FWEN1] = 0x0014, [TSU_FWEN1] = 0x0014,
...@@ -371,21 +373,6 @@ static const u16 sh_eth_offset_fast_sh3_sh2[SH_ETH_MAX_REGISTER_OFFSET] = { ...@@ -371,21 +373,6 @@ static const u16 sh_eth_offset_fast_sh3_sh2[SH_ETH_MAX_REGISTER_OFFSET] = {
}; };
#if defined(CONFIG_CPU_SUBTYPE_SH7763)
/* This CPU register maps is very difference by other SH4 CPU */
/* Chip Base Address */
# define SH_TSU_ADDR 0xFEE01800
# define ARSTR SH_TSU_ADDR
#elif defined(CONFIG_CPU_SH4) /* #if defined(CONFIG_CPU_SUBTYPE_SH7763) */
#else /* #elif defined(CONFIG_CPU_SH4) */
/* This section is SH3 or SH2 */
#ifndef CONFIG_CPU_SUBTYPE_SH7619
/* Chip base address */
# define SH_TSU_ADDR 0xA7000804
# define ARSTR 0xA7000800
#endif
#endif /* CONFIG_CPU_SUBTYPE_SH7763 */
/* Driver's parameters */ /* Driver's parameters */
#if defined(CONFIG_CPU_SH4) #if defined(CONFIG_CPU_SH4)
#define SH4_SKB_RX_ALIGN 32 #define SH4_SKB_RX_ALIGN 32
...@@ -770,6 +757,7 @@ struct sh_eth_cpu_data { ...@@ -770,6 +757,7 @@ struct sh_eth_cpu_data {
unsigned mpr:1; /* EtherC have MPR */ unsigned mpr:1; /* EtherC have MPR */
unsigned tpauser:1; /* EtherC have TPAUSER */ unsigned tpauser:1; /* EtherC have TPAUSER */
unsigned bculr:1; /* EtherC have BCULR */ unsigned bculr:1; /* EtherC have BCULR */
unsigned tsu:1; /* EtherC have TSU */
unsigned hw_swap:1; /* E-DMAC have DE bit in EDMR */ unsigned hw_swap:1; /* E-DMAC have DE bit in EDMR */
unsigned rpadir:1; /* E-DMAC have RPADIR */ unsigned rpadir:1; /* E-DMAC have RPADIR */
unsigned no_trimd:1; /* E-DMAC DO NOT have TRIMD */ unsigned no_trimd:1; /* E-DMAC DO NOT have TRIMD */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment