Commit af72261f authored by Xing Zheng's avatar Xing Zheng Committed by David S. Miller

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: default avatarXing Zheng <zhengxing@rock-chips.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent f4c9d3ee
...@@ -34,9 +34,9 @@ config EMAC_ROCKCHIP ...@@ -34,9 +34,9 @@ config EMAC_ROCKCHIP
select ARC_EMAC_CORE select ARC_EMAC_CORE
depends on OF_IRQ && OF_NET && REGULATOR && HAS_DMA depends on OF_IRQ && OF_NET && REGULATOR && HAS_DMA
---help--- ---help---
Support for Rockchip RK3066/RK3188 EMAC ethernet controllers. Support for Rockchip RK3036/RK3066/RK3188 EMAC ethernet controllers.
This selects Rockchip SoC glue layer support for the This selects Rockchip SoC glue layer support for the
emac device driver. This driver is used for RK3066/RK3188 emac device driver. This driver is used for RK3036/RK3066/RK3188
EMAC ethernet controller. EMAC ethernet controller.
endif # NET_VENDOR_ARC endif # NET_VENDOR_ARC
...@@ -67,6 +67,11 @@ static void emac_rockchip_set_mac_speed(void *priv, unsigned int speed) ...@@ -67,6 +67,11 @@ static void emac_rockchip_set_mac_speed(void *priv, unsigned int speed)
pr_err("unable to apply speed %u to grf (%d)\n", speed, err); pr_err("unable to apply speed %u to grf (%d)\n", speed, err);
} }
static const struct emac_rockchip_soc_data emac_rk3036_emac_data = {
.grf_offset = 0x140, .grf_mode_offset = 8,
.grf_speed_offset = 9, .need_div_macclk = 1,
};
static const struct emac_rockchip_soc_data emac_rk3066_emac_data = { static const struct emac_rockchip_soc_data emac_rk3066_emac_data = {
.grf_offset = 0x154, .grf_mode_offset = 0, .grf_offset = 0x154, .grf_mode_offset = 0,
.grf_speed_offset = 1, .need_div_macclk = 0, .grf_speed_offset = 1, .need_div_macclk = 0,
...@@ -78,6 +83,7 @@ static const struct emac_rockchip_soc_data emac_rk3188_emac_data = { ...@@ -78,6 +83,7 @@ static const struct emac_rockchip_soc_data emac_rk3188_emac_data = {
}; };
static const struct of_device_id emac_rockchip_dt_ids[] = { static const struct of_device_id emac_rockchip_dt_ids[] = {
{ .compatible = "rockchip,rk3036-emac", .data = &emac_rk3036_emac_data },
{ .compatible = "rockchip,rk3066-emac", .data = &emac_rk3066_emac_data }, { .compatible = "rockchip,rk3066-emac", .data = &emac_rk3066_emac_data },
{ .compatible = "rockchip,rk3188-emac", .data = &emac_rk3188_emac_data }, { .compatible = "rockchip,rk3188-emac", .data = &emac_rk3188_emac_data },
{ /* Sentinel */ } { /* Sentinel */ }
...@@ -110,7 +116,7 @@ static int emac_rockchip_probe(struct platform_device *pdev) ...@@ -110,7 +116,7 @@ static int emac_rockchip_probe(struct platform_device *pdev)
interface = of_get_phy_mode(dev->of_node); interface = of_get_phy_mode(dev->of_node);
/* RK3066 and RK3188 SoCs only support RMII */ /* RK3036/RK3066/RK3188 SoCs only support RMII */
if (interface != PHY_INTERFACE_MODE_RMII) { if (interface != PHY_INTERFACE_MODE_RMII) {
dev_err(dev, "unsupported phy interface mode %d\n", interface); dev_err(dev, "unsupported phy interface mode %d\n", interface);
err = -ENOTSUPP; err = -ENOTSUPP;
......
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