net: sun8i_emac: Add support for the H6 variant

The H6 EMAC is very similar to the H3 variant, except that it uses the
same pinmux as R40. Add support for it.

Signed-off-by: Samuel Holland <samuel@sholland.org>
Reviewed-by: Jagan Teki <jagan@amarulasolutions.com>
This commit is contained in:
Samuel Holland 2020-05-07 18:10:51 -05:00 committed by Jagan Teki
parent abdbefba2a
commit 99ac86187d

View File

@ -111,6 +111,7 @@ enum emac_variant {
H3_EMAC, H3_EMAC,
A64_EMAC, A64_EMAC,
R40_GMAC, R40_GMAC,
H6_EMAC,
}; };
struct emac_dma_desc { struct emac_dma_desc {
@ -310,14 +311,16 @@ static int sun8i_emac_set_syscon(struct sun8i_eth_pdata *pdata,
reg = readl(priv->sysctl_reg + 0x30); reg = readl(priv->sysctl_reg + 0x30);
if (priv->variant == H3_EMAC) { if (priv->variant == H3_EMAC || priv->variant == H6_EMAC) {
ret = sun8i_emac_set_syscon_ephy(priv, &reg); ret = sun8i_emac_set_syscon_ephy(priv, &reg);
if (ret) if (ret)
return ret; return ret;
} }
reg &= ~(SC_ETCS_MASK | SC_EPIT); reg &= ~(SC_ETCS_MASK | SC_EPIT);
if (priv->variant == H3_EMAC || priv->variant == A64_EMAC) if (priv->variant == H3_EMAC ||
priv->variant == A64_EMAC ||
priv->variant == H6_EMAC)
reg &= ~SC_RMII_EN; reg &= ~SC_RMII_EN;
switch (priv->interface) { switch (priv->interface) {
@ -329,7 +332,8 @@ static int sun8i_emac_set_syscon(struct sun8i_eth_pdata *pdata,
break; break;
case PHY_INTERFACE_MODE_RMII: case PHY_INTERFACE_MODE_RMII:
if (priv->variant == H3_EMAC || if (priv->variant == H3_EMAC ||
priv->variant == A64_EMAC) { priv->variant == A64_EMAC ||
priv->variant == H6_EMAC) {
reg |= SC_RMII_EN | SC_ETCS_EXT_GMII; reg |= SC_RMII_EN | SC_ETCS_EXT_GMII;
break; break;
} }
@ -535,7 +539,7 @@ static int parse_phy_pins(struct udevice *dev)
if (priv->variant == H3_EMAC) if (priv->variant == H3_EMAC)
sunxi_gpio_set_cfgpin(pin, SUN8I_IOMUX_H3); sunxi_gpio_set_cfgpin(pin, SUN8I_IOMUX_H3);
else if (priv->variant == R40_GMAC) else if (priv->variant == R40_GMAC || priv->variant == H6_EMAC)
sunxi_gpio_set_cfgpin(pin, SUN8I_IOMUX_R40); sunxi_gpio_set_cfgpin(pin, SUN8I_IOMUX_R40);
else else
sunxi_gpio_set_cfgpin(pin, SUN8I_IOMUX); sunxi_gpio_set_cfgpin(pin, SUN8I_IOMUX);
@ -1032,6 +1036,8 @@ static const struct udevice_id sun8i_emac_eth_ids[] = {
.data = (uintptr_t)A83T_EMAC }, .data = (uintptr_t)A83T_EMAC },
{.compatible = "allwinner,sun8i-r40-gmac", {.compatible = "allwinner,sun8i-r40-gmac",
.data = (uintptr_t)R40_GMAC }, .data = (uintptr_t)R40_GMAC },
{.compatible = "allwinner,sun50i-h6-emac",
.data = (uintptr_t)H6_EMAC },
{ } { }
}; };