On Fri, Jun 20, 2025 at 01:47:35PM +0100, Robin Murphy wrote: > Ah, I put that print at the top of the function - on second look now I > see that there's an awkward mix of per-lane and global data, and pwr_cnt > is actually the latter. Sure enough, moving the print past that check I > only see it once. Hi Robin, thanks for re-testing and no worries. > > However, I still don't think blindly enabling all the lanes is the right > thing to do either; I'd imagine something like the (untested) diff below > would be more appropriate. That would then seem to balance with what > power_off is doing. Thanks for the suggestion, I'll make sure to test it appropriately before sending v6. Thanks! Geraldo Nascimento > > Thanks, > Robin. > > ----->8----- > diff --git a/drivers/phy/rockchip/phy-rockchip-pcie.c b/drivers/phy/rockchip/phy-rockchip-pcie.c > index bd44af36c67a..a34a983db16c 100644 > --- a/drivers/phy/rockchip/phy-rockchip-pcie.c > +++ b/drivers/phy/rockchip/phy-rockchip-pcie.c > @@ -160,11 +160,8 @@ static int rockchip_pcie_phy_power_on(struct phy *phy) > > guard(mutex)(&rk_phy->pcie_mutex); > > - if (rk_phy->pwr_cnt++) { > - return 0; > - } > - > - err = reset_control_deassert(rk_phy->phy_rst); > + if (rk_phy->pwr_cnt++) > + err = reset_control_deassert(rk_phy->phy_rst); > if (err) { > dev_err(&phy->dev, "deassert phy_rst err %d\n", err); > rk_phy->pwr_cnt--; > @@ -181,6 +178,8 @@ static int rockchip_pcie_phy_power_on(struct phy *phy) > HIWORD_UPDATE(!PHY_LANE_IDLE_OFF, > PHY_LANE_IDLE_MASK, > PHY_LANE_IDLE_A_SHIFT + inst->index)); > + if (rk_phy->pwr_cnt) > + return 0; > > /* > * No documented timeout value for phy operation below, >