Re: [PATCH 3/4] phy: cadence-torrent: Do not configure SERDES if it's already configured
Hi Swapnil, On 18/03/21 3:25 pm, Swapnil Kashinath Jakhade wrote: > > >> -Original Message- >> From: Kishon Vijay Abraham I >> Sent: Wednesday, March 10, 2021 9:25 PM >> To: Kishon Vijay Abraham I ; Vinod Koul >> ; Rob Herring ; Philipp Zabel >> ; Swapnil Kashinath Jakhade >> >> Cc: linux-kernel@vger.kernel.org; devicet...@vger.kernel.org; Lokesh Vutla >> ; linux-...@lists.infradead.org >> Subject: [PATCH 3/4] phy: cadence-torrent: Do not configure SERDES if it's >> already configured >> >> EXTERNAL MAIL >> >> >> Do not configure torrent SERDES if it's already configured. >> >> Signed-off-by: Kishon Vijay Abraham I >> --- >> drivers/phy/cadence/phy-cadence-torrent.c | 32 --- >> 1 file changed, 22 insertions(+), 10 deletions(-) >> >> diff --git a/drivers/phy/cadence/phy-cadence-torrent.c >> b/drivers/phy/cadence/phy-cadence-torrent.c >> index ab51c4bf7b30..5ee1657f5a1c 100644 >> --- a/drivers/phy/cadence/phy-cadence-torrent.c >> +++ b/drivers/phy/cadence/phy-cadence-torrent.c >> @@ -371,6 +371,10 @@ static const struct phy_ops cdns_torrent_phy_ops = >> { >> .owner = THIS_MODULE, >> }; >> >> +static const struct phy_ops noop_ops = { >> +.owner = THIS_MODULE, >> +}; >> + >> struct cdns_reg_pairs { >> u32 val; >> u32 off; >> @@ -2306,6 +2310,7 @@ static int cdns_torrent_phy_probe(struct >> platform_device *pdev) >> struct device_node *child; >> int ret, subnodes, node = 0, i; >> u32 total_num_lanes = 0; >> +int already_configured; >> u8 init_dp_regmap = 0; >> u32 phy_type; >> >> @@ -2344,16 +2349,20 @@ static int cdns_torrent_phy_probe(struct >> platform_device *pdev) >> if (ret) >> return ret; >> >> -ret = cdns_torrent_reset(cdns_phy); >> -if (ret) >> -goto clk_cleanup; >> +regmap_field_read(cdns_phy->phy_pma_cmn_ctrl_1, >> _configured); >> >> -ret = cdns_torrent_clk(cdns_phy); >> -if (ret) >> -goto clk_cleanup; >> +if (!already_configured) { >> +ret = cdns_torrent_reset(cdns_phy); >> +if (ret) >> +goto clk_cleanup; >> + >> +ret = cdns_torrent_clk(cdns_phy); >> +if (ret) >> +goto clk_cleanup; >> > Should if (!already_configured) be checked while calling > clk_disable_unprepare()? Both clk_unprepare() and clk_disable() checks for passed clk for ERR or NULL. So don't think it's necessary to have !already_configured check. > Otherwise, > Reviewed-by: Swapnil Jakhade Thanks Kishon > > Thanks & regards, > Swapnil > >> -/* Enable APB */ >> -reset_control_deassert(cdns_phy->apb_rst); >> +/* Enable APB */ >> +reset_control_deassert(cdns_phy->apb_rst); >> +} >> >> for_each_available_child_of_node(dev->of_node, child) { >> struct phy *gphy; >> @@ -2423,7 +2432,10 @@ static int cdns_torrent_phy_probe(struct >> platform_device *pdev) >> of_property_read_u32(child, "cdns,ssc-mode", >> _phy->phys[node].ssc_mode); >> >> -gphy = devm_phy_create(dev, child, >> _torrent_phy_ops); >> +if (!already_configured) >> +gphy = devm_phy_create(dev, child, >> _torrent_phy_ops); >> +else >> +gphy = devm_phy_create(dev, child, _ops); >> if (IS_ERR(gphy)) { >> ret = PTR_ERR(gphy); >> goto put_child; >> @@ -2507,7 +2519,7 @@ static int cdns_torrent_phy_probe(struct >> platform_device *pdev) >> goto put_lnk_rst; >> } >> >> -if (cdns_phy->nsubnodes > 1) { >> +if (cdns_phy->nsubnodes > 1 && !already_configured) { >> ret = cdns_torrent_phy_configure_multilink(cdns_phy); >> if (ret) >> goto put_lnk_rst; >> -- >> 2.17.1 >
RE: [PATCH 3/4] phy: cadence-torrent: Do not configure SERDES if it's already configured
> -Original Message- > From: Kishon Vijay Abraham I > Sent: Wednesday, March 10, 2021 9:25 PM > To: Kishon Vijay Abraham I ; Vinod Koul > ; Rob Herring ; Philipp Zabel > ; Swapnil Kashinath Jakhade > > Cc: linux-kernel@vger.kernel.org; devicet...@vger.kernel.org; Lokesh Vutla > ; linux-...@lists.infradead.org > Subject: [PATCH 3/4] phy: cadence-torrent: Do not configure SERDES if it's > already configured > > EXTERNAL MAIL > > > Do not configure torrent SERDES if it's already configured. > > Signed-off-by: Kishon Vijay Abraham I > --- > drivers/phy/cadence/phy-cadence-torrent.c | 32 --- > 1 file changed, 22 insertions(+), 10 deletions(-) > > diff --git a/drivers/phy/cadence/phy-cadence-torrent.c > b/drivers/phy/cadence/phy-cadence-torrent.c > index ab51c4bf7b30..5ee1657f5a1c 100644 > --- a/drivers/phy/cadence/phy-cadence-torrent.c > +++ b/drivers/phy/cadence/phy-cadence-torrent.c > @@ -371,6 +371,10 @@ static const struct phy_ops cdns_torrent_phy_ops = > { > .owner = THIS_MODULE, > }; > > +static const struct phy_ops noop_ops = { > + .owner = THIS_MODULE, > +}; > + > struct cdns_reg_pairs { > u32 val; > u32 off; > @@ -2306,6 +2310,7 @@ static int cdns_torrent_phy_probe(struct > platform_device *pdev) > struct device_node *child; > int ret, subnodes, node = 0, i; > u32 total_num_lanes = 0; > + int already_configured; > u8 init_dp_regmap = 0; > u32 phy_type; > > @@ -2344,16 +2349,20 @@ static int cdns_torrent_phy_probe(struct > platform_device *pdev) > if (ret) > return ret; > > - ret = cdns_torrent_reset(cdns_phy); > - if (ret) > - goto clk_cleanup; > + regmap_field_read(cdns_phy->phy_pma_cmn_ctrl_1, > _configured); > > - ret = cdns_torrent_clk(cdns_phy); > - if (ret) > - goto clk_cleanup; > + if (!already_configured) { > + ret = cdns_torrent_reset(cdns_phy); > + if (ret) > + goto clk_cleanup; > + > + ret = cdns_torrent_clk(cdns_phy); > + if (ret) > + goto clk_cleanup; > Should if (!already_configured) be checked while calling clk_disable_unprepare()? Otherwise, Reviewed-by: Swapnil Jakhade Thanks & regards, Swapnil > - /* Enable APB */ > - reset_control_deassert(cdns_phy->apb_rst); > + /* Enable APB */ > + reset_control_deassert(cdns_phy->apb_rst); > + } > > for_each_available_child_of_node(dev->of_node, child) { > struct phy *gphy; > @@ -2423,7 +2432,10 @@ static int cdns_torrent_phy_probe(struct > platform_device *pdev) > of_property_read_u32(child, "cdns,ssc-mode", >_phy->phys[node].ssc_mode); > > - gphy = devm_phy_create(dev, child, > _torrent_phy_ops); > + if (!already_configured) > + gphy = devm_phy_create(dev, child, > _torrent_phy_ops); > + else > + gphy = devm_phy_create(dev, child, _ops); > if (IS_ERR(gphy)) { > ret = PTR_ERR(gphy); > goto put_child; > @@ -2507,7 +2519,7 @@ static int cdns_torrent_phy_probe(struct > platform_device *pdev) > goto put_lnk_rst; > } > > - if (cdns_phy->nsubnodes > 1) { > + if (cdns_phy->nsubnodes > 1 && !already_configured) { > ret = cdns_torrent_phy_configure_multilink(cdns_phy); > if (ret) > goto put_lnk_rst; > -- > 2.17.1
[PATCH 3/4] phy: cadence-torrent: Do not configure SERDES if it's already configured
Do not configure torrent SERDES if it's already configured. Signed-off-by: Kishon Vijay Abraham I --- drivers/phy/cadence/phy-cadence-torrent.c | 32 --- 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/drivers/phy/cadence/phy-cadence-torrent.c b/drivers/phy/cadence/phy-cadence-torrent.c index ab51c4bf7b30..5ee1657f5a1c 100644 --- a/drivers/phy/cadence/phy-cadence-torrent.c +++ b/drivers/phy/cadence/phy-cadence-torrent.c @@ -371,6 +371,10 @@ static const struct phy_ops cdns_torrent_phy_ops = { .owner = THIS_MODULE, }; +static const struct phy_ops noop_ops = { + .owner = THIS_MODULE, +}; + struct cdns_reg_pairs { u32 val; u32 off; @@ -2306,6 +2310,7 @@ static int cdns_torrent_phy_probe(struct platform_device *pdev) struct device_node *child; int ret, subnodes, node = 0, i; u32 total_num_lanes = 0; + int already_configured; u8 init_dp_regmap = 0; u32 phy_type; @@ -2344,16 +2349,20 @@ static int cdns_torrent_phy_probe(struct platform_device *pdev) if (ret) return ret; - ret = cdns_torrent_reset(cdns_phy); - if (ret) - goto clk_cleanup; + regmap_field_read(cdns_phy->phy_pma_cmn_ctrl_1, _configured); - ret = cdns_torrent_clk(cdns_phy); - if (ret) - goto clk_cleanup; + if (!already_configured) { + ret = cdns_torrent_reset(cdns_phy); + if (ret) + goto clk_cleanup; + + ret = cdns_torrent_clk(cdns_phy); + if (ret) + goto clk_cleanup; - /* Enable APB */ - reset_control_deassert(cdns_phy->apb_rst); + /* Enable APB */ + reset_control_deassert(cdns_phy->apb_rst); + } for_each_available_child_of_node(dev->of_node, child) { struct phy *gphy; @@ -2423,7 +2432,10 @@ static int cdns_torrent_phy_probe(struct platform_device *pdev) of_property_read_u32(child, "cdns,ssc-mode", _phy->phys[node].ssc_mode); - gphy = devm_phy_create(dev, child, _torrent_phy_ops); + if (!already_configured) + gphy = devm_phy_create(dev, child, _torrent_phy_ops); + else + gphy = devm_phy_create(dev, child, _ops); if (IS_ERR(gphy)) { ret = PTR_ERR(gphy); goto put_child; @@ -2507,7 +2519,7 @@ static int cdns_torrent_phy_probe(struct platform_device *pdev) goto put_lnk_rst; } - if (cdns_phy->nsubnodes > 1) { + if (cdns_phy->nsubnodes > 1 && !already_configured) { ret = cdns_torrent_phy_configure_multilink(cdns_phy); if (ret) goto put_lnk_rst; -- 2.17.1