[PATCH v2] net: fsl_mdio: Fix busy flag polling register

Markus Koch markus at notsyncing.net
Fri Jan 7 18:49:20 CET 2022


On 1/7/22 17:23, Camelia Alexandra Groza (OSS) wrote:
>> -----Original Message-----
>> From: U-Boot <u-boot-bounces at lists.denx.de> On Behalf Of Markus Koch
>> Sent: Tuesday, January 4, 2022 17:42
>> To: Ioana Ciornei <ioana.ciornei at nxp.com>; joe.hershberger at ni.com;
>> rfried.dev at gmail.com
>> Cc: Madalin Bucur (OSS) <madalin.bucur at oss.nxp.com>; Camelia Alexandra
>> Groza <camelia.groza at nxp.com>; u-boot at lists.denx.de; Markus Koch
>> <markus at notsyncing.net>
>> Subject: [PATCH v2] net: fsl_mdio: Fix busy flag polling register
>>
>> NXP's mEMAC reference manual, Chapter 6.5.5 "MDIO Ethernet
>> Management
>> Interface usage", specifies to poll the BSY (0) bit in the CFG/STAT
>> register to wait until a transaction has finished, not bit 31 in the
>> data register.
>>
>> In the Linux kernel, this has already been fixed in commit 26eee0210ad7
>> ("net/fsl: fix a bug in xgmac_mdio").
>>
>> Signed-off-by: Markus Koch <markus at notsyncing.net>
> 
> I am ok with the change for the mEMAC driver but MDIO_DATA_BSY is still
> used by the fsl_ls_mdio driver. The MDIO driver suffers from the same issue.
> 
> Please send a v3 and either patch both drivers or don't remove the define.
> Also, if removing the define, please mention it explicitly in the patch
> description.

I'll change the other driver as well.

There's also the fm/tgec_phy driver that uses the same construct, but it has
its own define for MDIO_DATA_BSY. Should I also change that? I think it
corresponds to Linux' xgmac_mdio.c which also uses the STAT_BSY register, but
I don't have a datasheet to verify the register definition.

Thanks,
Markus

> Thanks,
> Camelia
> 
>> ---
>>
>> Changed to use the mdio_stat register. Thanks, Ioana!
>>
>>   drivers/net/fm/memac_phy.c | 2 +-
>>   include/fsl_memac.h        | 1 -
>>   2 files changed, 1 insertion(+), 2 deletions(-)
>>
>> diff --git a/drivers/net/fm/memac_phy.c b/drivers/net/fm/memac_phy.c
>> index 72b500a6d1..3ddae97e09 100644
>> --- a/drivers/net/fm/memac_phy.c
>> +++ b/drivers/net/fm/memac_phy.c
>> @@ -64,7 +64,7 @@ static int memac_wait_until_done(struct
>> memac_mdio_controller *regs)
>>   {
>>   	unsigned int timeout = MAX_NUM_RETRIES;
>>
>> -	while ((memac_in_32(&regs->mdio_data) & MDIO_DATA_BSY) &&
>> timeout--)
>> +	while ((memac_in_32(&regs->mdio_stat) & MDIO_STAT_BSY) &&
>> timeout--)
>>   		;
>>
>>   	if (!timeout) {
>> diff --git a/include/fsl_memac.h b/include/fsl_memac.h
>> index d067f1511c..6ac1e558b9 100644
>> --- a/include/fsl_memac.h
>> +++ b/include/fsl_memac.h
>> @@ -254,7 +254,6 @@ struct memac_mdio_controller {
>>   #define MDIO_CTL_READ		(1 << 15)
>>
>>   #define MDIO_DATA(x)		(x & 0xffff)
>> -#define MDIO_DATA_BSY		(1 << 31)
>>
>>   struct fsl_enet_mac;
>>
>> --
>> 2.34.1
>


More information about the U-Boot mailing list