* [U-Boot] [PATCH] net: mvgbe: extract common code for SMI wait
@ 2018-05-30 10:49 Chris Packham
2018-05-30 10:54 ` Stefan Roese
2018-06-08 21:06 ` Joe Hershberger
0 siblings, 2 replies; 3+ messages in thread
From: Chris Packham @ 2018-05-30 10:49 UTC (permalink / raw)
To: u-boot
Combine repeated code from smi_reg_read/smi_reg_write into a common
function smi_wait_ready.
Signed-off-by: Chris Packham <judge.packham@gmail.com>
---
drivers/net/mvgbe.c | 48 ++++++++++++++++++++++-----------------------
1 file changed, 24 insertions(+), 24 deletions(-)
diff --git a/drivers/net/mvgbe.c b/drivers/net/mvgbe.c
index 4e1aff6e3a86..ca91897fdd14 100644
--- a/drivers/net/mvgbe.c
+++ b/drivers/net/mvgbe.c
@@ -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);
--
2.17.0
^ permalink raw reply related [flat|nested] 3+ messages in thread
* [U-Boot] [PATCH] net: mvgbe: extract common code for SMI wait
2018-05-30 10:49 [U-Boot] [PATCH] net: mvgbe: extract common code for SMI wait Chris Packham
@ 2018-05-30 10:54 ` Stefan Roese
2018-06-08 21:06 ` Joe Hershberger
1 sibling, 0 replies; 3+ messages in thread
From: Stefan Roese @ 2018-05-30 10:54 UTC (permalink / raw)
To: u-boot
On 30.05.2018 12:49, Chris Packham wrote:
> Combine repeated code from smi_reg_read/smi_reg_write into a common
> function smi_wait_ready.
>
> Signed-off-by: Chris Packham <judge.packham@gmail.com>
Looks good, thanks.
Reviewed-by: Stefan Roese <sr@denx.de>
Thanks,
Stefan
^ permalink raw reply [flat|nested] 3+ messages in thread
* [U-Boot] [PATCH] net: mvgbe: extract common code for SMI wait
2018-05-30 10:49 [U-Boot] [PATCH] net: mvgbe: extract common code for SMI wait Chris Packham
2018-05-30 10:54 ` Stefan Roese
@ 2018-06-08 21:06 ` Joe Hershberger
1 sibling, 0 replies; 3+ messages in thread
From: Joe Hershberger @ 2018-06-08 21:06 UTC (permalink / raw)
To: u-boot
On Wed, May 30, 2018 at 5:49 AM, Chris Packham <judge.packham@gmail.com> wrote:
> Combine repeated code from smi_reg_read/smi_reg_write into a common
> function smi_wait_ready.
>
> Signed-off-by: Chris Packham <judge.packham@gmail.com>
> ---
>
> drivers/net/mvgbe.c | 48 ++++++++++++++++++++++-----------------------
> 1 file changed, 24 insertions(+), 24 deletions(-)
>
> diff --git a/drivers/net/mvgbe.c b/drivers/net/mvgbe.c
> index 4e1aff6e3a86..ca91897fdd14 100644
> --- a/drivers/net/mvgbe.c
> +++ b/drivers/net/mvgbe.c
> @@ -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);
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
> +
> + 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
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2018-06-08 21:06 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-05-30 10:49 [U-Boot] [PATCH] net: mvgbe: extract common code for SMI wait Chris Packham
2018-05-30 10:54 ` Stefan Roese
2018-06-08 21:06 ` Joe Hershberger
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.