Skip to content

Commit

Permalink
net: sun8i_emac: Support for H6 SoC
Browse files Browse the repository at this point in the history
Signed-off-by: Samuel Holland <samuel@sholland.org>
  • Loading branch information
smaeul committed Dec 12, 2019
1 parent 54cd3f2 commit f47d760
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 4 deletions.
8 changes: 8 additions & 0 deletions arch/arm/include/asm/arch-sunxi/clock_sun50i_h6.h
Expand Up @@ -312,6 +312,14 @@ struct sunxi_ccm_reg {
#define CCM_MMC_CTRL_OCLK_DLY(a) ((void) (a), 0)
#define CCM_MMC_CTRL_SCLK_DLY(a) ((void) (a), 0)

#define CCM_GMAC_CTRL_TX_CLK_SRC_MII 0x0
#define CCM_GMAC_CTRL_TX_CLK_SRC_EXT_RGMII 0x1
#define CCM_GMAC_CTRL_TX_CLK_SRC_INT_RGMII 0x2
#define CCM_GMAC_CTRL_GPIT_MII (0x0 << 2)
#define CCM_GMAC_CTRL_GPIT_RGMII (0x1 << 2)
#define CCM_GMAC_CTRL_RX_CLK_DELAY(x) ((x) << 5)
#define CCM_GMAC_CTRL_TX_CLK_DELAY(x) ((x) << 10)

#ifndef __ASSEMBLY__
void clock_set_pll1(unsigned int hz);
unsigned int clock_get_pll6(void);
Expand Down
2 changes: 2 additions & 0 deletions configs/pine_h64_defconfig
Expand Up @@ -4,6 +4,7 @@ CONFIG_NR_DRAM_BANKS=1
CONFIG_SPL=y
CONFIG_MACH_SUN50I_H6=y
CONFIG_SUNXI_DRAM_H6_LPDDR3=y
CONFIG_MACPWR="PD6"
CONFIG_MMC0_CD_PIN="PF6"
CONFIG_MMC_SUNXI_SLOT_EXTRA=2
CONFIG_USB3_VBUS_PIN="PL5"
Expand All @@ -14,5 +15,6 @@ CONFIG_USE_PREBOOT=y
# CONFIG_SPL_EFI_PARTITION is not set
CONFIG_DEFAULT_DEVICE_TREE="sun50i-h6-pine-h64"
CONFIG_SYS_RELOC_GD_ENV_ADDR=y
CONFIG_SUN8I_EMAC=y
CONFIG_USB_EHCI_HCD=y
CONFIG_USB_OHCI_HCD=y
14 changes: 10 additions & 4 deletions drivers/net/sun8i_emac.c
Expand Up @@ -106,6 +106,7 @@ enum emac_variant {
H3_EMAC,
A64_EMAC,
R40_GMAC,
H6_EMAC,
};

struct emac_dma_desc {
Expand Down Expand Up @@ -305,14 +306,16 @@ static int sun8i_emac_set_syscon(struct sun8i_eth_pdata *pdata,

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);
if (ret)
return ret;
}

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;

switch (priv->interface) {
Expand All @@ -324,7 +327,8 @@ static int sun8i_emac_set_syscon(struct sun8i_eth_pdata *pdata,
break;
case PHY_INTERFACE_MODE_RMII:
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;
break;
}
Expand Down Expand Up @@ -530,7 +534,7 @@ static int parse_phy_pins(struct udevice *dev)

if (priv->variant == H3_EMAC)
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);
else
sunxi_gpio_set_cfgpin(pin, SUN8I_IOMUX);
Expand Down Expand Up @@ -1027,6 +1031,8 @@ static const struct udevice_id sun8i_emac_eth_ids[] = {
.data = (uintptr_t)A83T_EMAC },
{.compatible = "allwinner,sun8i-r40-gmac",
.data = (uintptr_t)R40_GMAC },
{.compatible = "allwinner,sun50i-h6-emac",
.data = (uintptr_t)H6_EMAC },
{ }
};

Expand Down

0 comments on commit f47d760

Please sign in to comment.