[U-Boot] [PATCH 1/3] net: designware: socfpga: adapt to Gen5
Marek Vasut
marex at denx.de
Thu Jan 10 20:38:28 UTC 2019
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>
>> ---
>>
>> 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.
--
Best regards,
Marek Vasut
More information about the U-Boot
mailing list