diff options
author | Xing Zheng <zhengxing@rock-chips.com> | 2016-01-07 20:35:02 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2016-01-10 22:21:31 -0500 |
commit | af72261f33ee4958bb53e299746014f44e1134c4 (patch) | |
tree | 8ac27e4043ff95aa7da00cd1a1bfdac61ce0c057 | |
parent | f4c9d3ee0334fd9c6c8f2c3a8bd7d0841880e127 (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/Kconfig | 4 | ||||
-rw-r--r-- | drivers/net/ethernet/arc/emac_rockchip.c | 8 |
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 | ||
42 | endif # NET_VENDOR_ARC | 42 | endif # 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 | ||
70 | static 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 | |||
70 | static const struct emac_rockchip_soc_data emac_rk3066_emac_data = { | 75 | static 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 | ||
80 | static const struct of_device_id emac_rockchip_dt_ids[] = { | 85 | static 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; |