net: mvgbe: extract common code for SMI wait
PATCH 1/1 net: mvgbe: extract common code for SMI wait
Combine repeated code from smi_reg_read/smi_reg_write into a common function smi_wait_ready.
---
drivers/net/mvgbe.c | 48 ++++++++++++++++++++++----------------------- 1 file changed, 24 insertions(+), 24 deletions(-)
drivers/net/mvgbe.c +24 -24
@@ -40,10 +40,26 @@ DECLARE_GLOBAL_DATA_PTR;#define MVGBE_SMI_REG (((struct mvgbe_registers *)MVGBE0_BASE)->smi)#if defined(CONFIG_PHYLIB ) || defined(CONFIG_MII ) || defined(CONFIG_CMD_MII ) +static int smi_wait_ready (struct mvgbe_device *dmvgbe) +{ +u32 timeout =MVGBE_PHY_SMI_TIMEOUT ; +u32 smi_reg; + +do { + smi_reg =MVGBE_REG_RD (MVGBE_SMI_REG ); +if (timeout-- ==0 ) { +printf ("Error: SMI busy timeout\n" ); +return -EFAULT ; + } + }while (smi_reg &MVGBE_PHY_SMI_BUSY_MASK ); + +return 0 ; +} +/* * smi_reg_read - miiphy_read callback function. * -* Returns 16bit phy register value, or 0xffff on error +* Returns 16bit phy register value, or -EFAULT on error */ static int smi_reg_read (struct mii_dev *bus,int phy_adr,int devad,int reg_ofs)
@@ -74,16 +90,9 @@ static int smi_reg_read(struct mii_dev *bus, int phy_adr, int devad,return -EFAULT ; } - timeout =MVGBE_PHY_SMI_TIMEOUT ;/* wait till the SMI is not busy */ -do { -/* read smi register */ - smi_reg =MVGBE_REG_RD (MVGBE_SMI_REG ); -if (timeout-- ==0 ) { -printf ("Err..(%s) SMI busy timeout\n" , __func__); -return -EFAULT ; - } - }while (smi_reg &MVGBE_PHY_SMI_BUSY_MASK ); +if (smi_wait_ready (dmvgbe) <0 ) +return -EFAULT ;/* fill the phy address and regiser offset and read opcode */ smi_reg = (phy_adr <<MVGBE_PHY_SMI_DEV_ADDR_OFFS )
@@ -119,10 +128,9 @@ static int smi_reg_read(struct mii_dev *bus, int phy_adr, int devad, }/* -* smi_reg_write - imiiphy_write callback function. +* smi_reg_write - miiphy_write callback function. * -* Returns 0 if write succeed, -EINVAL on bad parameters -* -ETIME on timeout +* Returns 0 if write succeed, -EFAULT on error */ static int smi_reg_write (struct mii_dev *bus,int phy_adr,int devad,int reg_ofs,u16 data)
@@ -131,7 +139,6 @@ static int smi_reg_write(struct mii_dev *bus, int phy_adr, int devad,struct mvgbe_device *dmvgbe =to_mvgbe (dev);struct mvgbe_registers *regs = dmvgbe->regs;u32 smi_reg; -u32 timeout;/* Phyadr write request*/ if (phy_adr == MV_PHY_ADR_REQUEST &&
@@ -147,19 +154,12 @@ static int smi_reg_write(struct mii_dev *bus, int phy_adr, int devad, }if (reg_ofs >PHYREG_MASK ) {printf ("Err..(%s) Invalid register offset\n" , __func__); -return -EINVAL ; +return -EFAULT ; }/* wait till the SMI is not busy */ - timeout =MVGBE_PHY_SMI_TIMEOUT ; -do { -/* read smi register */ - smi_reg =MVGBE_REG_RD (MVGBE_SMI_REG ); -if (timeout-- ==0 ) { -printf ("Err..(%s) SMI busy timeout\n" , __func__); -return -ETIME ; - } - }while (smi_reg &MVGBE_PHY_SMI_BUSY_MASK ); +if (smi_wait_ready (dmvgbe) <0 ) +return -EFAULT ;/* fill the phy addr and reg offset and write opcode and data */ smi_reg = (data <<MVGBE_PHY_SMI_DATA_OFFS );
Signature · 1 line
2.17.0
PATCH 1/1 net: mvgbe: extract common code for SMI wait
Quoted 4 lines · Chris Packham
Combine repeated code from smi_reg_read/smi_reg_write into a common function
smi_wait_ready.Signed-off-by Chris Packham <[email protected]>
Looks good, thanks.
Thanks,
Stefan
PATCH 1/1 net: mvgbe: extract common code for SMI wait
In reply to Chris PackhamQuoted 19 lines · Chris Packham
Combine repeated code from smi_reg_read/smi_reg_write into a common function
smi_wait_ready.Signed-off-by Chris Packham <[email protected]>---
drivers/net/mvgbe.c | 48 ++++++++++++++++++++++----------------------- 1 file changed, 24 insertions(+), 24 deletions(-)drivers/net/mvgbe.c +2
-0@@ -40,10 +40,26 @@ DECLARE_GLOBAL_DATA_PTR;#define MVGBE_SMI_REG (((struct mvgbe_registers *)MVGBE0_BASE)->smi)#if defined(CONFIG_PHYLIB ) || defined(CONFIG_MII ) || defined(CONFIG_CMD_MII ) +static int smi_wait_ready (struct mvgbe_device *dmvgbe) +{
drivers/net/mvgbe.c DECLARE_GLOBAL_DATA_PTR; · line 54
Quoted 10 lines
drivers/net/mvgbe.c +10
-0+u32 timeout =MVGBE_PHY_SMI_TIMEOUT ; +u32 smi_reg; + +do { + smi_reg =MVGBE_REG_RD (MVGBE_SMI_REG ); +if (timeout-- ==0 ) { +printf ("Error: SMI busy timeout\n" ); +return -EFAULT ; + } + }while (smi_reg &MVGBE_PHY_SMI_BUSY_MASK );
Please use wait_for_bit_le32(MVGBE_SMI_REG, MVGBE_PHY_SMI_BUSY_MASK, true, MVGBE_PHY_SMI_TIMEOUT_MS, false);
Convert the timeout to ms.
It's in include/wait_bit.h
Quoted 82 lines
drivers/net/mvgbe.c +12
-25+ +return 0 ; +} +/* * smi_reg_read - miiphy_read callback function. * -* Returns 16bit phy register value, or 0xffff on error +* Returns 16bit phy register value, or -EFAULT on error */ static int smi_reg_read (struct mii_dev *bus,int phy_adr,int devad,int reg_ofs)@@ -74,16 +90,9 @@ static int smi_reg_read(struct mii_dev *bus, int phy_adr, int devad,return -EFAULT ; } - timeout =MVGBE_PHY_SMI_TIMEOUT ;/* wait till the SMI is not busy */ -do { -/* read smi register */ - smi_reg =MVGBE_REG_RD (MVGBE_SMI_REG ); -if (timeout-- ==0 ) { -printf ("Err..(%s) SMI busy timeout\n" , __func__); -return -EFAULT ; - } - }while (smi_reg &MVGBE_PHY_SMI_BUSY_MASK ); +if (smi_wait_ready (dmvgbe) <0 ) +return -EFAULT ;/* fill the phy address and regiser offset and read opcode */ smi_reg = (phy_adr <<MVGBE_PHY_SMI_DEV_ADDR_OFFS )@@ -119,10 +128,9 @@ static int smi_reg_read(struct mii_dev *bus, int phy_adr, int devad, }/* -* smi_reg_write - imiiphy_write callback function. +* smi_reg_write - miiphy_write callback function. * -* Returns 0 if write succeed, -EINVAL on bad parameters -* -ETIME on timeout +* Returns 0 if write succeed, -EFAULT on error */ static int smi_reg_write (struct mii_dev *bus,int phy_adr,int devad,int reg_ofs,u16 data)@@ -131,7 +139,6 @@ static int smi_reg_write(struct mii_dev *bus, int phy_adr, int devad,struct mvgbe_device *dmvgbe =to_mvgbe (dev);struct mvgbe_registers *regs = dmvgbe->regs;u32 smi_reg; -u32 timeout;/* Phyadr write request*/ if (phy_adr == MV_PHY_ADR_REQUEST &&@@ -147,19 +154,12 @@ static int smi_reg_write(struct mii_dev *bus, int phy_adr, int devad, }if (reg_ofs >PHYREG_MASK ) {printf ("Err..(%s) Invalid register offset\n" , __func__); -return -EINVAL ; +return -EFAULT ; }/* wait till the SMI is not busy */ - timeout =MVGBE_PHY_SMI_TIMEOUT ; -do { -/* read smi register */ - smi_reg =MVGBE_REG_RD (MVGBE_SMI_REG ); -if (timeout-- ==0 ) { -printf ("Err..(%s) SMI busy timeout\n" , __func__); -return -ETIME ; - } - }while (smi_reg &MVGBE_PHY_SMI_BUSY_MASK ); +if (smi_wait_ready (dmvgbe) <0 ) +return -EFAULT ;/* fill the phy addr and reg offset and write opcode and data */ smi_reg = (data <<MVGBE_PHY_SMI_DATA_OFFS ); --2.17.0
_______________________________________________
U-Boot mailing list
U-Boot at lists.denx.de
https://lists.denx.de/listinfo/u-boot