Hi Andre, On 2 July 2017 at 18:59, Andre Przywara <andre.przyw...@arm.com> wrote: > The Ethernet MAC used in newer Allwinner SoCs (H3, A64, H5) is about to > get an upstream Linux driver very soon (it's already lurking in -next). > This one uses a slightly different binding from the original one used > by the U-Boot driver. > The differences to the old binding are: > - The "syscon" address is held in a separate node, referenced via a > phandle in the "syscon" property. > - The reference to the PHY is held in a property called "phy-handle", > not "phy". > - The PHY register is at offset 0x30 in the syscon device, not at 0. > - The internal PHY is activated when a capable SoC selects MII mode. > > Teach the U-Boot driver how to find its resources in a "new-style" DT, > so that we can use a Linux kernel compatible DT for U-Boot as well. > This keeps support for the old binding (for now?), to allow a smooth > transition. > > Signed-off-by: Andre Przywara <andre.przyw...@arm.com> > --- > drivers/net/sun8i_emac.c | 51 > +++++++++++++++++++++++++++++++++++++++++------- > 1 file changed, 44 insertions(+), 7 deletions(-) > > diff --git a/drivers/net/sun8i_emac.c b/drivers/net/sun8i_emac.c > index af77134..8320518 100644 > --- a/drivers/net/sun8i_emac.c > +++ b/drivers/net/sun8i_emac.c > @@ -278,7 +278,7 @@ static int sun8i_emac_set_syscon(struct emac_eth_dev > *priv) > int ret; > u32 reg; > > - reg = readl(priv->sysctl_reg); > + reg = readl(priv->sysctl_reg + 0x30); > > if (priv->variant == H3_EMAC) { > ret = sun8i_emac_set_syscon_ephy(priv, ®); > @@ -309,7 +309,7 @@ static int sun8i_emac_set_syscon(struct emac_eth_dev > *priv) > return -EINVAL; > } > > - writel(reg, priv->sysctl_reg); > + writel(reg, priv->sysctl_reg + 0x30); > > return 0; > } > @@ -733,17 +733,50 @@ static int sun8i_emac_eth_ofdata_to_platdata(struct > udevice *dev) > #endif > > pdata->iobase = devfdt_get_addr_name(dev, "emac"); > + if (pdata->iobase == FDT_ADDR_T_NONE) > + pdata->iobase = devfdt_get_addr(dev); > + if (pdata->iobase == FDT_ADDR_T_NONE) { > + debug("%s: Cannot find MAC base address\n", __func__); > + return -EINVAL; > + } > + > priv->sysctl_reg = devfdt_get_addr_name(dev, "syscon");
Can we use a syscon driver for this instead? Then there is syscon_get_first_range(). [...] Regards, Simon _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot