aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorXing Zheng <zhengxing@rock-chips.com>2016-01-07 20:35:02 -0500
committerDavid S. Miller <davem@davemloft.net>2016-01-10 22:21:31 -0500
commitaf72261f33ee4958bb53e299746014f44e1134c4 (patch)
tree8ac27e4043ff95aa7da00cd1a1bfdac61ce0c057
parentf4c9d3ee0334fd9c6c8f2c3a8bd7d0841880e127 (diff)
net: ethernet: arc: Add support emac for RK3036
The RK3036's GRFs offset are different with RK3066/RK3188, and need to set mac TX/RX clock before probe emac. Signed-off-by: Xing Zheng <zhengxing@rock-chips.com> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--drivers/net/ethernet/arc/Kconfig4
-rw-r--r--drivers/net/ethernet/arc/emac_rockchip.c8
2 files changed, 9 insertions, 3 deletions
diff --git a/drivers/net/ethernet/arc/Kconfig b/drivers/net/ethernet/arc/Kconfig
index 52a6b16f57d2..689045186064 100644
--- a/drivers/net/ethernet/arc/Kconfig
+++ b/drivers/net/ethernet/arc/Kconfig
@@ -34,9 +34,9 @@ config EMAC_ROCKCHIP
34 select ARC_EMAC_CORE 34 select ARC_EMAC_CORE
35 depends on OF_IRQ && OF_NET && REGULATOR && HAS_DMA 35 depends on OF_IRQ && OF_NET && REGULATOR && HAS_DMA
36 ---help--- 36 ---help---
37 Support for Rockchip RK3066/RK3188 EMAC ethernet controllers. 37 Support for Rockchip RK3036/RK3066/RK3188 EMAC ethernet controllers.
38 This selects Rockchip SoC glue layer support for the 38 This selects Rockchip SoC glue layer support for the
39 emac device driver. This driver is used for RK3066/RK3188 39 emac device driver. This driver is used for RK3036/RK3066/RK3188
40 EMAC ethernet controller. 40 EMAC ethernet controller.
41 41
42endif # NET_VENDOR_ARC 42endif # NET_VENDOR_ARC
diff --git a/drivers/net/ethernet/arc/emac_rockchip.c b/drivers/net/ethernet/arc/emac_rockchip.c
index e951c8fab778..85e821ccfcd2 100644
--- a/drivers/net/ethernet/arc/emac_rockchip.c
+++ b/drivers/net/ethernet/arc/emac_rockchip.c
@@ -67,6 +67,11 @@ static void emac_rockchip_set_mac_speed(void *priv, unsigned int speed)
67 pr_err("unable to apply speed %u to grf (%d)\n", speed, err); 67 pr_err("unable to apply speed %u to grf (%d)\n", speed, err);
68} 68}
69 69
70static const struct emac_rockchip_soc_data emac_rk3036_emac_data = {
71 .grf_offset = 0x140, .grf_mode_offset = 8,
72 .grf_speed_offset = 9, .need_div_macclk = 1,
73};
74
70static const struct emac_rockchip_soc_data emac_rk3066_emac_data = { 75static const struct emac_rockchip_soc_data emac_rk3066_emac_data = {
71 .grf_offset = 0x154, .grf_mode_offset = 0, 76 .grf_offset = 0x154, .grf_mode_offset = 0,
72 .grf_speed_offset = 1, .need_div_macclk = 0, 77 .grf_speed_offset = 1, .need_div_macclk = 0,
@@ -78,6 +83,7 @@ static const struct emac_rockchip_soc_data emac_rk3188_emac_data = {
78}; 83};
79 84
80static const struct of_device_id emac_rockchip_dt_ids[] = { 85static const struct of_device_id emac_rockchip_dt_ids[] = {
86 { .compatible = "rockchip,rk3036-emac", .data = &emac_rk3036_emac_data },
81 { .compatible = "rockchip,rk3066-emac", .data = &emac_rk3066_emac_data }, 87 { .compatible = "rockchip,rk3066-emac", .data = &emac_rk3066_emac_data },
82 { .compatible = "rockchip,rk3188-emac", .data = &emac_rk3188_emac_data }, 88 { .compatible = "rockchip,rk3188-emac", .data = &emac_rk3188_emac_data },
83 { /* Sentinel */ } 89 { /* Sentinel */ }
@@ -110,7 +116,7 @@ static int emac_rockchip_probe(struct platform_device *pdev)
110 116
111 interface = of_get_phy_mode(dev->of_node); 117 interface = of_get_phy_mode(dev->of_node);
112 118
113 /* RK3066 and RK3188 SoCs only support RMII */ 119 /* RK3036/RK3066/RK3188 SoCs only support RMII */
114 if (interface != PHY_INTERFACE_MODE_RMII) { 120 if (interface != PHY_INTERFACE_MODE_RMII) {
115 dev_err(dev, "unsupported phy interface mode %d\n", interface); 121 dev_err(dev, "unsupported phy interface mode %d\n", interface);
116 err = -ENOTSUPP; 122 err = -ENOTSUPP;