[U-Boot] [PATCH 1/3] net: designware: socfpga: adapt to Gen5
Marek Vasut
marex at denx.de
Thu Jan 10 20:44:24 UTC 2019
On 1/10/19 9:42 PM, Simon Goldschmidt wrote:
>
>
> Am Do., 10. Jan. 2019, 21:38 hat Marek Vasut <marex at denx.de
> <mailto:marex at denx.de>> geschrieben:
>
> On 1/10/19 8:54 PM, Simon Goldschmidt wrote:
> > Hi Marek,
> >
> > Am 10.01.2019 um 20:49 schrieb Simon Goldschmidt:
> >> This driver was written for Arria10, but it applies to Gen5, too.
> >>
> >> The main difference is that Gen5 has 2 MACs (Arria10 has 3) and the
> >> syscon bits are encoded in the same register, thus an offset is
> needed.
> >>
> >> This offset is already read from the devicetree, but for Arria10
> it is
> >> always 0, which is probably why it has been ignored. By using this
> >> offset when writing the phy mode into the syscon regiter, we can use
> >> this driver to set the phy mode for both of the MACs on Gen5.
> >>
> >> Tested on socfpga_socrates (where the 2nd MAC is connected, so a
> shift
> >> offset is required).
> >>
> >> Signed-off-by: Simon Goldschmidt <simon.k.r.goldschmidt at gmail.com
> <mailto:simon.k.r.goldschmidt at gmail.com>>
> >> ---
> >>
> >> drivers/net/dwmac_socfpga.c | 14 +++++++++-----
> >> 1 file changed, 9 insertions(+), 5 deletions(-)
> >>
> >> diff --git a/drivers/net/dwmac_socfpga.c
> b/drivers/net/dwmac_socfpga.c
> >> index 08fc9677c4..309da69647 100644
> >> --- a/drivers/net/dwmac_socfpga.c
> >> +++ b/drivers/net/dwmac_socfpga.c
> >> @@ -27,6 +27,7 @@ struct dwmac_socfpga_platdata {
> >> struct dw_eth_pdata dw_eth_pdata;
> >> enum dwmac_type type;
> >> void *phy_intf;
> >> + u32 reg_shift;
> >> };
> >> static int dwmac_socfpga_ofdata_to_platdata(struct udevice *dev)
> >> @@ -63,6 +64,7 @@ static int dwmac_socfpga_ofdata_to_platdata(struct
> >> udevice *dev)
> >> }
> >> pdata->phy_intf = range + args.args[0];
> >> + pdata->reg_shift = args.args[1];
> >> /*
> >> * Sadly, the Altera DT bindings don't have SoC-specific
> >> compatibles,
> >> @@ -88,9 +90,11 @@ static int dwmac_socfpga_probe(struct udevice
> *dev)
> >> struct eth_pdata *edata = &pdata->dw_eth_pdata.eth_pdata;
> >> struct reset_ctl_bulk reset_bulk;
> >> int ret;
> >> - u8 modereg;
> >> + u32 modereg;
> >> + u32 modemask;
> >> - if (pdata->type == DWMAC_SOCFPGA_ARRIA10) {
> >> + if (pdata->type == DWMAC_SOCFPGA_ARRIA10 ||
> >> + pdata->type == DWMAC_SOCFPGA_GEN5) {
> >
> > I just checked: the Linux driver does not seem to have special
> handling
> > for Gen5/Arria10/Stratix10. Since Gen5 and Arria10 now both work
> and the
> > registers for Stratix10 seem the same as for Arria10, could we maybe
> > drop this special handling?
> >
> > That would mean we could drop this whole 'type' and the 'enum
> > dwmac_type'...
>
> I seem to remember the register layout for selecting the PHY mode on
> Gen5 and Arria10 was different, please check the datasheets. Of course,
> the less special-casing, the better.
>
>
> Yes, the register layout is different. But the reg_shift value takes
> care of that. Luckily, the bits have the same meaning even if the offset
> is different.
Fantastic
> What remains is the special case for Stratix10. Looking at the Linux
> driver and the register descriptions, I think we can drop the special
> cases, but someone would need to test it on Stratix10...
+CC Joyce.
--
Best regards,
Marek Vasut
More information about the U-Boot
mailing list