Re: [PATCH 3/4] phy: cadence-torrent: Do not configure SERDES if it's already configured
From: Kishon Vijay Abraham I <hidden>
Date: 2021-03-30 09:58:24
Also in:
linux-devicetree, lkml
Hi Swapnil, On 18/03/21 3:25 pm, Swapnil Kashinath Jakhade wrote:
quoted
-----Original Message----- From: Kishon Vijay Abraham I <redacted> Sent: Wednesday, March 10, 2021 9:25 PM To: Kishon Vijay Abraham I <redacted>; Vinod Koul [off-list ref]; Rob Herring [off-list ref]; Philipp Zabel [off-list ref]; Swapnil Kashinath Jakhade [off-list ref] Cc: linux-kernel@vger.kernel.org; devicetree@vger.kernel.org; Lokesh Vutla [off-list ref]; linux-phy@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 <redacted> --- drivers/phy/cadence/phy-cadence-torrent.c | 32 ++++++++++++++++------- 1 file changed, 22 insertions(+), 10 deletions(-)diff --git a/drivers/phy/cadence/phy-cadence-torrent.cb/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(structplatform_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(structplatform_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, &already_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 <redacted>
Thanks Kishon
Thanks & regards, Swapnilquoted
- /* 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(structplatform_device *pdev) of_property_read_u32(child, "cdns,ssc-mode", &cdns_phy->phys[node].ssc_mode); - gphy = devm_phy_create(dev, child, &cdns_torrent_phy_ops); + if (!already_configured) + gphy = devm_phy_create(dev, child, &cdns_torrent_phy_ops); + else + gphy = devm_phy_create(dev, child, &noop_ops); if (IS_ERR(gphy)) { ret = PTR_ERR(gphy); goto put_child;@@ -2507,7 +2519,7 @@ static int cdns_torrent_phy_probe(structplatform_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
-- linux-phy mailing list linux-phy@lists.infradead.org https://lists.infradead.org/mailman/listinfo/linux-phy