[PATCH] cpsw_mdio.c: Use correct reg in cpsw_mdio_get_alive
Ulf Samuelsson
u-boot at emagii.com
Thu Feb 9 10:26:10 CET 2023
Den 2023-02-09 kl. 08:29, skrev Siddharth Vadapalli:
> Hello Ulf,
>
> On 07/02/23 13:55, Ulf Samuelsson wrote:
>> cpsw_mdio_get_alive reads the wrong register.
>> See page 2316 in SPRUH73Q AM335x TRM
>>
>> Signed-off-by: Ulf Samuelsson <ulf at emagii.com>
>> Cc: Joe Hershberger <joe.hershberger at ni.com>
>> Cc: Ramon Fried <rfried.dev at gmail.com>
>> ---
>> drivers/net/ti/cpsw_mdio.c | 6 +++---
>> 1 file changed, 3 insertions(+), 3 deletions(-)
>>
>> diff --git a/drivers/net/ti/cpsw_mdio.c b/drivers/net/ti/cpsw_mdio.c
>> index a5ba73b739..ac791faa81 100644
>> --- a/drivers/net/ti/cpsw_mdio.c
>> +++ b/drivers/net/ti/cpsw_mdio.c
>> @@ -51,7 +51,7 @@ struct cpsw_mdio_regs {
>> #define USERACCESS_PHY_REG_SHIFT (21)
>> #define USERACCESS_PHY_ADDR_SHIFT (16)
>> #define USERACCESS_DATA GENMASK(15, 0)
>> - } user[0];
>> + } user[2];
>> };
>>
>> #define CPSW_MDIO_DIV_DEF 0xff
>> @@ -366,8 +366,8 @@ u32 cpsw_mdio_get_alive(struct mii_dev *bus)
>> struct cpsw_mdio *mdio = bus->priv;
>> u32 val;
>>
>> - val = readl(&mdio->regs->control);
>> - return val & GENMASK(15, 0);
>> + val = readl(&mdio->regs->alive);
>> + return val & GENMASK(7, 0);
>
> Referring to the TRM for AM335x at [0], on page 2401, the MDIOALIVE register
> reports the presence of Ethernet PHYs up to ADDR 31. Also, the cpsw driver:
> drivers/net/ti/cpsw.c which uses the cpsw_mdio_get_alive() function, expects the
> return value to be a 16 bit value. Therefore, I believe that the GENMASK should
> retain the previous value of "GENMASK(15, 0)", while only the register being
> read needs to be changed from "control" to "alive". Please let me know if I
> misunderstood something regarding your implementation.
>
We had an unusual H/W where the PHY (actually a switch) was connected to
the second Ethernet port. All boards I have seen have the PHY connected
to the first port or have both ports connected.
IIRC correctly (this patch is > 2 years old),
we had bad data in the bits (15:8) and this is why only the 8 bits.
Only bits [1:0] are used anyway.
> [0] https://www.ti.com/lit/ug/spruh73q/spruh73q.pdf
>
> Regards,
> Siddharth.
>
>> }
>>
>> struct mii_dev *cpsw_mdio_init(const char *name, phys_addr_t mdio_base,
Best Regards
Ulf Samuelsson
More information about the U-Boot
mailing list