Hi Jacky, On Mon, 2024-11-18 at 18:47 +0800, Jacky Chou wrote: > Add a dummy read to ensure triggering mdio controller before starting > polling the status of mdio controller. > > Signed-off-by: Jacky Chou <jacky_chou@xxxxxxxxxxxxxx> > --- > drivers/net/mdio/mdio-aspeed.c | 2 ++ > 1 file changed, 2 insertions(+) > > diff --git a/drivers/net/mdio/mdio-aspeed.c b/drivers/net/mdio/mdio- > aspeed.c > index 4d5a115baf85..feae30bc3e78 100644 > --- a/drivers/net/mdio/mdio-aspeed.c > +++ b/drivers/net/mdio/mdio-aspeed.c > @@ -62,6 +62,8 @@ static int aspeed_mdio_op(struct mii_bus *bus, u8 > st, u8 op, u8 phyad, u8 regad, > | FIELD_PREP(ASPEED_MDIO_DATA_MIIRDATA, data); > > iowrite32(ctrl, ctx->base + ASPEED_MDIO_CTRL); > + /* Add dummy read to ensure triggering mdio controller */ > + (void)ioread32(ctx->base + ASPEED_MDIO_CTRL); Why do this when the same register is immediately read by readl_poll_timeout() below? If there is a reason, I'd like some more explanation in the comment you've added, discussing the details of the problem it's solving when taking into account the readl_poll_timeout() call. > > return readl_poll_timeout(ctx->base + ASPEED_MDIO_CTRL, ctrl, > !(ctrl & ASPEED_MDIO_CTRL_FIRE), Cheers, Andrew