On 08.01.2024 21:28, Sergey Shtylyov wrote: > On 1/5/24 11:23 AM, Claudiu wrote: > >> From: Claudiu Beznea <claudiu.beznea.uj@xxxxxxxxxxxxxx> >> >> As some IP variants switch to reset mode (and thus registers content is >> lost) when setting clocks (due to module standby functionality) to be able >> to implement runtime PM and save more power, set the IP's operating mode to >> reset at the end of the probe. Along with it, in the ndo_open API the IP >> will be switched to configuration, then operation mode. In the ndo_close >> API, the IP will be switched back to reset mode. This allows implementing >> runtime PM and, along with it, save more power when the IP is not used. >> >> Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@xxxxxxxxxxxxxx> >> --- >> >> Changes in v3: >> - fixed typos in patch description >> - in ravb_probe() switch the hardware to reset mode just after phy >> initialization >> >> Changes in v2: >> - none; this patch is new >> >> >> drivers/net/ethernet/renesas/ravb_main.c | 78 ++++++++++++++---------- >> 1 file changed, 46 insertions(+), 32 deletions(-) >> >> diff --git a/drivers/net/ethernet/renesas/ravb_main.c b/drivers/net/ethernet/renesas/ravb_main.c >> index 1cc1ecd8d6a8..434b4777de5e 100644 >> --- a/drivers/net/ethernet/renesas/ravb_main.c >> +++ b/drivers/net/ethernet/renesas/ravb_main.c > [...] >> @@ -2746,11 +2755,6 @@ static int ravb_probe(struct platform_device *pdev) >> ndev->netdev_ops = &ravb_netdev_ops; >> ndev->ethtool_ops = &ravb_ethtool_ops; >> >> - /* Set AVB config mode */ >> - error = ravb_set_config_mode(ndev); >> - if (error) >> - goto out_rpm_put; >> - >> error = ravb_compute_gti(ndev); >> if (error) >> goto out_rpm_put; >> @@ -2785,13 +2789,23 @@ static int ravb_probe(struct platform_device *pdev) >> eth_hw_addr_random(ndev); >> } >> >> + /* Set config mode as this is needed for PHY initialization. */ >> + error = ravb_set_opmode(ndev, CCC_OPC_CONFIG); > > Hm... don't you need this at laest before calling ravb_read_mac_address() > just above? I asked myself this, haven't experienced issues w/ it while working on this patch thus I kept it as is. In theory, yes, it should be above that call. I'll move it there. Thank you, Claudiu Beznea > >> + if (error) >> + goto out_rpm_put; >> + >> /* MDIO bus init */ >> error = ravb_mdio_init(priv); >> if (error) { >> dev_err(&pdev->dev, "failed to initialize MDIO\n"); >> - goto out_dma_free; >> + goto out_reset_mode; >> } >> >> + /* Undo previous switch to config opmode. */ >> + error = ravb_set_opmode(ndev, CCC_OPC_RESET); >> + if (error) >> + goto out_mdio_release; >> + >> netif_napi_add(ndev, &priv->napi[RAVB_BE], ravb_poll); >> if (info->nc_queues) >> netif_napi_add(ndev, &priv->napi[RAVB_NC], ravb_poll); > [...] > > MBR, Sergey