netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH net-next v3 0/2] Fix CPTS release action in am65-cpts driver
@ 2023-01-18  9:54 Siddharth Vadapalli
  2023-01-18  9:54 ` [PATCH net-next v3 1/2] net: ethernet: ti: am65-cpsw: Delete unreachable error handling code Siddharth Vadapalli
                   ` (3 more replies)
  0 siblings, 4 replies; 11+ messages in thread
From: Siddharth Vadapalli @ 2023-01-18  9:54 UTC (permalink / raw)
  To: davem, edumazet, kuba, linux, pabeni, rogerq, leon
  Cc: netdev, linux-kernel, linux-arm-kernel, vigneshr, srk, s-vadapalli

Delete unreachable code in am65_cpsw_init_cpts() function, which was
Reported-by: Leon Romanovsky <leon@kernel.org>
at:
https://lore.kernel.org/r/Y8aHwSnVK9+sAb24@unreal

Remove the devm action associated with am65_cpts_release() and invoke the
function directly on the cleanup and exit paths.

Changes from v2:
1. Drop Reviewed-by tag from Roger Quadros.
2. Add cleanup patch for deleting unreachable error handling code in
   am65_cpsw_init_cpts().
3. Drop am65_cpsw_cpts_cleanup() function and directly invoke
   am65_cpts_release().

Changes from v1:
1. Fix the build issue when "CONFIG_TI_K3_AM65_CPTS" is not set. This
   error was reported by kernel test robot <lkp@intel.com> at:
   https://lore.kernel.org/r/202301142105.lt733Lt3-lkp@intel.com/
2. Collect Reviewed-by tag from Roger Quadros.

v2:
https://lore.kernel.org/r/20230116044517.310461-1-s-vadapalli@ti.com/
v1:
https://lore.kernel.org/r/20230113104816.132815-1-s-vadapalli@ti.com/

Siddharth Vadapalli (2):
  net: ethernet: ti: am65-cpsw: Delete unreachable error handling code
  net: ethernet: ti: am65-cpsw/cpts: Fix CPTS release action

 drivers/net/ethernet/ti/am65-cpsw-nuss.c |  7 ++-----
 drivers/net/ethernet/ti/am65-cpts.c      | 15 +++++----------
 drivers/net/ethernet/ti/am65-cpts.h      |  5 +++++
 3 files changed, 12 insertions(+), 15 deletions(-)

-- 
2.25.1


^ permalink raw reply	[flat|nested] 11+ messages in thread

* [PATCH net-next v3 1/2] net: ethernet: ti: am65-cpsw: Delete unreachable error handling code
  2023-01-18  9:54 [PATCH net-next v3 0/2] Fix CPTS release action in am65-cpts driver Siddharth Vadapalli
@ 2023-01-18  9:54 ` Siddharth Vadapalli
  2023-01-18 11:30   ` Leon Romanovsky
  2023-01-18  9:54 ` [PATCH net-next v3 2/2] net: ethernet: ti: am65-cpsw/cpts: Fix CPTS release action Siddharth Vadapalli
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 11+ messages in thread
From: Siddharth Vadapalli @ 2023-01-18  9:54 UTC (permalink / raw)
  To: davem, edumazet, kuba, linux, pabeni, rogerq, leon
  Cc: netdev, linux-kernel, linux-arm-kernel, vigneshr, srk, s-vadapalli

The am65_cpts_create() function returns -EOPNOTSUPP only when the config
"CONFIG_TI_K3_AM65_CPTS" is disabled. Also, in the am65_cpsw_init_cpts()
function, am65_cpts_create() can only be invoked if the config
"CONFIG_TI_K3_AM65_CPTS" is enabled. Thus, the error handling code for the
case in which the return value of am65_cpts_create() is -EOPNOTSUPP, is
unreachable. Hence delete it.

Reported-by: Leon Romanovsky <leon@kernel.org>
Signed-off-by: Siddharth Vadapalli <s-vadapalli@ti.com>
---
 drivers/net/ethernet/ti/am65-cpsw-nuss.c | 5 -----
 1 file changed, 5 deletions(-)

diff --git a/drivers/net/ethernet/ti/am65-cpsw-nuss.c b/drivers/net/ethernet/ti/am65-cpsw-nuss.c
index 5cac98284184..7363e01e7579 100644
--- a/drivers/net/ethernet/ti/am65-cpsw-nuss.c
+++ b/drivers/net/ethernet/ti/am65-cpsw-nuss.c
@@ -1935,11 +1935,6 @@ static int am65_cpsw_init_cpts(struct am65_cpsw_common *common)
 		int ret = PTR_ERR(cpts);
 
 		of_node_put(node);
-		if (ret == -EOPNOTSUPP) {
-			dev_info(dev, "cpts disabled\n");
-			return 0;
-		}
-
 		dev_err(dev, "cpts create err %d\n", ret);
 		return ret;
 	}
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH net-next v3 2/2] net: ethernet: ti: am65-cpsw/cpts: Fix CPTS release action
  2023-01-18  9:54 [PATCH net-next v3 0/2] Fix CPTS release action in am65-cpts driver Siddharth Vadapalli
  2023-01-18  9:54 ` [PATCH net-next v3 1/2] net: ethernet: ti: am65-cpsw: Delete unreachable error handling code Siddharth Vadapalli
@ 2023-01-18  9:54 ` Siddharth Vadapalli
  2023-01-18 11:29   ` Leon Romanovsky
                     ` (2 more replies)
  2023-01-18 21:24 ` [PATCH net-next v3 0/2] Fix CPTS release action in am65-cpts driver Tony Nguyen
  2023-01-19 10:27 ` Roger Quadros
  3 siblings, 3 replies; 11+ messages in thread
From: Siddharth Vadapalli @ 2023-01-18  9:54 UTC (permalink / raw)
  To: davem, edumazet, kuba, linux, pabeni, rogerq, leon
  Cc: netdev, linux-kernel, linux-arm-kernel, vigneshr, srk, s-vadapalli

The am65_cpts_release() function is registered as a devm_action in the
am65_cpts_create() function in am65-cpts driver. When the am65-cpsw driver
invokes am65_cpts_create(), am65_cpts_release() is added in the set of devm
actions associated with the am65-cpsw driver's device.

In the event of probe failure or probe deferral, the platform_drv_probe()
function invokes dev_pm_domain_detach() which powers off the CPSW and the
CPSW's CPTS hardware, both of which share the same power domain. Since the
am65_cpts_disable() function invoked by the am65_cpts_release() function
attempts to reset the CPTS hardware by writing to its registers, the CPTS
hardware is assumed to be powered on at this point. However, the hardware
is powered off before the devm actions are executed.

Fix this by getting rid of the devm action for am65_cpts_release() and
invoking it directly on the cleanup and exit paths.

Fixes: f6bd59526ca5 ("net: ethernet: ti: introduce am654 common platform time sync driver")
Signed-off-by: Siddharth Vadapalli <s-vadapalli@ti.com>
---
 drivers/net/ethernet/ti/am65-cpsw-nuss.c |  2 ++
 drivers/net/ethernet/ti/am65-cpts.c      | 15 +++++----------
 drivers/net/ethernet/ti/am65-cpts.h      |  5 +++++
 3 files changed, 12 insertions(+), 10 deletions(-)

diff --git a/drivers/net/ethernet/ti/am65-cpsw-nuss.c b/drivers/net/ethernet/ti/am65-cpsw-nuss.c
index 7363e01e7579..0861191bc1bc 100644
--- a/drivers/net/ethernet/ti/am65-cpsw-nuss.c
+++ b/drivers/net/ethernet/ti/am65-cpsw-nuss.c
@@ -2912,6 +2912,7 @@ static int am65_cpsw_nuss_probe(struct platform_device *pdev)
 
 err_free_phylink:
 	am65_cpsw_nuss_phylink_cleanup(common);
+	am65_cpts_release(common->cpts);
 err_of_clear:
 	of_platform_device_destroy(common->mdio_dev, NULL);
 err_pm_clear:
@@ -2940,6 +2941,7 @@ static int am65_cpsw_nuss_remove(struct platform_device *pdev)
 	 */
 	am65_cpsw_nuss_cleanup_ndev(common);
 	am65_cpsw_nuss_phylink_cleanup(common);
+	am65_cpts_release(common->cpts);
 	am65_cpsw_disable_serdes_phy(common);
 
 	of_platform_device_destroy(common->mdio_dev, NULL);
diff --git a/drivers/net/ethernet/ti/am65-cpts.c b/drivers/net/ethernet/ti/am65-cpts.c
index 9535396b28cd..a297890152d9 100644
--- a/drivers/net/ethernet/ti/am65-cpts.c
+++ b/drivers/net/ethernet/ti/am65-cpts.c
@@ -929,14 +929,13 @@ static int am65_cpts_of_parse(struct am65_cpts *cpts, struct device_node *node)
 	return cpts_of_mux_clk_setup(cpts, node);
 }
 
-static void am65_cpts_release(void *data)
+void am65_cpts_release(struct am65_cpts *cpts)
 {
-	struct am65_cpts *cpts = data;
-
 	ptp_clock_unregister(cpts->ptp_clock);
 	am65_cpts_disable(cpts);
 	clk_disable_unprepare(cpts->refclk);
 }
+EXPORT_SYMBOL_GPL(am65_cpts_release);
 
 struct am65_cpts *am65_cpts_create(struct device *dev, void __iomem *regs,
 				   struct device_node *node)
@@ -1014,18 +1013,12 @@ struct am65_cpts *am65_cpts_create(struct device *dev, void __iomem *regs,
 	}
 	cpts->phc_index = ptp_clock_index(cpts->ptp_clock);
 
-	ret = devm_add_action_or_reset(dev, am65_cpts_release, cpts);
-	if (ret) {
-		dev_err(dev, "failed to add ptpclk reset action %d", ret);
-		return ERR_PTR(ret);
-	}
-
 	ret = devm_request_threaded_irq(dev, cpts->irq, NULL,
 					am65_cpts_interrupt,
 					IRQF_ONESHOT, dev_name(dev), cpts);
 	if (ret < 0) {
 		dev_err(cpts->dev, "error attaching irq %d\n", ret);
-		return ERR_PTR(ret);
+		goto reset_ptpclk;
 	}
 
 	dev_info(dev, "CPTS ver 0x%08x, freq:%u, add_val:%u\n",
@@ -1034,6 +1027,8 @@ struct am65_cpts *am65_cpts_create(struct device *dev, void __iomem *regs,
 
 	return cpts;
 
+reset_ptpclk:
+	am65_cpts_release(cpts);
 refclk_disable:
 	clk_disable_unprepare(cpts->refclk);
 	return ERR_PTR(ret);
diff --git a/drivers/net/ethernet/ti/am65-cpts.h b/drivers/net/ethernet/ti/am65-cpts.h
index bd08f4b2edd2..6e14df0be113 100644
--- a/drivers/net/ethernet/ti/am65-cpts.h
+++ b/drivers/net/ethernet/ti/am65-cpts.h
@@ -18,6 +18,7 @@ struct am65_cpts_estf_cfg {
 };
 
 #if IS_ENABLED(CONFIG_TI_K3_AM65_CPTS)
+void am65_cpts_release(struct am65_cpts *cpts);
 struct am65_cpts *am65_cpts_create(struct device *dev, void __iomem *regs,
 				   struct device_node *node);
 int am65_cpts_phc_index(struct am65_cpts *cpts);
@@ -31,6 +32,10 @@ void am65_cpts_estf_disable(struct am65_cpts *cpts, int idx);
 void am65_cpts_suspend(struct am65_cpts *cpts);
 void am65_cpts_resume(struct am65_cpts *cpts);
 #else
+static inline void am65_cpts_release(struct am65_cpts *cpts)
+{
+}
+
 static inline struct am65_cpts *am65_cpts_create(struct device *dev,
 						 void __iomem *regs,
 						 struct device_node *node)
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* Re: [PATCH net-next v3 2/2] net: ethernet: ti: am65-cpsw/cpts: Fix CPTS release action
  2023-01-18  9:54 ` [PATCH net-next v3 2/2] net: ethernet: ti: am65-cpsw/cpts: Fix CPTS release action Siddharth Vadapalli
@ 2023-01-18 11:29   ` Leon Romanovsky
  2023-01-19 13:06   ` Paolo Abeni
  2023-01-20  4:42   ` [PATCH net-next v4 " Siddharth Vadapalli
  2 siblings, 0 replies; 11+ messages in thread
From: Leon Romanovsky @ 2023-01-18 11:29 UTC (permalink / raw)
  To: Siddharth Vadapalli
  Cc: davem, edumazet, kuba, linux, pabeni, rogerq, netdev,
	linux-kernel, linux-arm-kernel, vigneshr, srk

On Wed, Jan 18, 2023 at 03:24:39PM +0530, Siddharth Vadapalli wrote:
> The am65_cpts_release() function is registered as a devm_action in the
> am65_cpts_create() function in am65-cpts driver. When the am65-cpsw driver
> invokes am65_cpts_create(), am65_cpts_release() is added in the set of devm
> actions associated with the am65-cpsw driver's device.
> 
> In the event of probe failure or probe deferral, the platform_drv_probe()
> function invokes dev_pm_domain_detach() which powers off the CPSW and the
> CPSW's CPTS hardware, both of which share the same power domain. Since the
> am65_cpts_disable() function invoked by the am65_cpts_release() function
> attempts to reset the CPTS hardware by writing to its registers, the CPTS
> hardware is assumed to be powered on at this point. However, the hardware
> is powered off before the devm actions are executed.
> 
> Fix this by getting rid of the devm action for am65_cpts_release() and
> invoking it directly on the cleanup and exit paths.
> 
> Fixes: f6bd59526ca5 ("net: ethernet: ti: introduce am654 common platform time sync driver")
> Signed-off-by: Siddharth Vadapalli <s-vadapalli@ti.com>
> ---
>  drivers/net/ethernet/ti/am65-cpsw-nuss.c |  2 ++
>  drivers/net/ethernet/ti/am65-cpts.c      | 15 +++++----------
>  drivers/net/ethernet/ti/am65-cpts.h      |  5 +++++
>  3 files changed, 12 insertions(+), 10 deletions(-)
> 

Thanks,
Reviewed-by: Leon Romanovsky <leonro@nvidia.com>

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH net-next v3 1/2] net: ethernet: ti: am65-cpsw: Delete unreachable error handling code
  2023-01-18  9:54 ` [PATCH net-next v3 1/2] net: ethernet: ti: am65-cpsw: Delete unreachable error handling code Siddharth Vadapalli
@ 2023-01-18 11:30   ` Leon Romanovsky
  0 siblings, 0 replies; 11+ messages in thread
From: Leon Romanovsky @ 2023-01-18 11:30 UTC (permalink / raw)
  To: Siddharth Vadapalli
  Cc: davem, edumazet, kuba, linux, pabeni, rogerq, netdev,
	linux-kernel, linux-arm-kernel, vigneshr, srk

On Wed, Jan 18, 2023 at 03:24:38PM +0530, Siddharth Vadapalli wrote:
> The am65_cpts_create() function returns -EOPNOTSUPP only when the config
> "CONFIG_TI_K3_AM65_CPTS" is disabled. Also, in the am65_cpsw_init_cpts()
> function, am65_cpts_create() can only be invoked if the config
> "CONFIG_TI_K3_AM65_CPTS" is enabled. Thus, the error handling code for the
> case in which the return value of am65_cpts_create() is -EOPNOTSUPP, is
> unreachable. Hence delete it.
> 
> Reported-by: Leon Romanovsky <leon@kernel.org>
> Signed-off-by: Siddharth Vadapalli <s-vadapalli@ti.com>
> ---
>  drivers/net/ethernet/ti/am65-cpsw-nuss.c | 5 -----
>  1 file changed, 5 deletions(-)
> 

Thanks,
Reviewed-by: Leon Romanovsky <leonro@nvidia.com>

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH net-next v3 0/2] Fix CPTS release action in am65-cpts driver
  2023-01-18  9:54 [PATCH net-next v3 0/2] Fix CPTS release action in am65-cpts driver Siddharth Vadapalli
  2023-01-18  9:54 ` [PATCH net-next v3 1/2] net: ethernet: ti: am65-cpsw: Delete unreachable error handling code Siddharth Vadapalli
  2023-01-18  9:54 ` [PATCH net-next v3 2/2] net: ethernet: ti: am65-cpsw/cpts: Fix CPTS release action Siddharth Vadapalli
@ 2023-01-18 21:24 ` Tony Nguyen
  2023-01-19 10:27 ` Roger Quadros
  3 siblings, 0 replies; 11+ messages in thread
From: Tony Nguyen @ 2023-01-18 21:24 UTC (permalink / raw)
  To: Siddharth Vadapalli, davem, edumazet, kuba, linux, pabeni, rogerq, leon
  Cc: netdev, linux-kernel, linux-arm-kernel, vigneshr, srk

On 1/18/2023 1:54 AM, Siddharth Vadapalli wrote:
> Delete unreachable code in am65_cpsw_init_cpts() function, which was
> Reported-by: Leon Romanovsky <leon@kernel.org>
> at:
> https://lore.kernel.org/r/Y8aHwSnVK9+sAb24@unreal
> 
> Remove the devm action associated with am65_cpts_release() and invoke the
> function directly on the cleanup and exit paths.
> 
> Changes from v2:
> 1. Drop Reviewed-by tag from Roger Quadros.
> 2. Add cleanup patch for deleting unreachable error handling code in
>     am65_cpsw_init_cpts().
> 3. Drop am65_cpsw_cpts_cleanup() function and directly invoke
>     am65_cpts_release().
> 
> Changes from v1:
> 1. Fix the build issue when "CONFIG_TI_K3_AM65_CPTS" is not set. This
>     error was reported by kernel test robot <lkp@intel.com> at:
>     https://lore.kernel.org/r/202301142105.lt733Lt3-lkp@intel.com/
> 2. Collect Reviewed-by tag from Roger Quadros.
> 
> v2:
> https://lore.kernel.org/r/20230116044517.310461-1-s-vadapalli@ti.com/
> v1:
> https://lore.kernel.org/r/20230113104816.132815-1-s-vadapalli@ti.com/
> 
> Siddharth Vadapalli (2):
>    net: ethernet: ti: am65-cpsw: Delete unreachable error handling code
>    net: ethernet: ti: am65-cpsw/cpts: Fix CPTS release action
> 
>   drivers/net/ethernet/ti/am65-cpsw-nuss.c |  7 ++-----
>   drivers/net/ethernet/ti/am65-cpts.c      | 15 +++++----------
>   drivers/net/ethernet/ti/am65-cpts.h      |  5 +++++
>   3 files changed, 12 insertions(+), 15 deletions(-)

Seems reasonable to me.

Reviewed-by: Tony Nguyen <anthony.l.nguyen@intel.com>

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH net-next v3 0/2] Fix CPTS release action in am65-cpts driver
  2023-01-18  9:54 [PATCH net-next v3 0/2] Fix CPTS release action in am65-cpts driver Siddharth Vadapalli
                   ` (2 preceding siblings ...)
  2023-01-18 21:24 ` [PATCH net-next v3 0/2] Fix CPTS release action in am65-cpts driver Tony Nguyen
@ 2023-01-19 10:27 ` Roger Quadros
  3 siblings, 0 replies; 11+ messages in thread
From: Roger Quadros @ 2023-01-19 10:27 UTC (permalink / raw)
  To: Siddharth Vadapalli, davem, edumazet, kuba, linux, pabeni, leon
  Cc: netdev, linux-kernel, linux-arm-kernel, vigneshr, srk



On 18/01/2023 11:54, Siddharth Vadapalli wrote:
> Delete unreachable code in am65_cpsw_init_cpts() function, which was
> Reported-by: Leon Romanovsky <leon@kernel.org>
> at:
> https://lore.kernel.org/r/Y8aHwSnVK9+sAb24@unreal
> 
> Remove the devm action associated with am65_cpts_release() and invoke the
> function directly on the cleanup and exit paths.
> 
> Changes from v2:
> 1. Drop Reviewed-by tag from Roger Quadros.
> 2. Add cleanup patch for deleting unreachable error handling code in
>    am65_cpsw_init_cpts().
> 3. Drop am65_cpsw_cpts_cleanup() function and directly invoke
>    am65_cpts_release().
> 
> Changes from v1:
> 1. Fix the build issue when "CONFIG_TI_K3_AM65_CPTS" is not set. This
>    error was reported by kernel test robot <lkp@intel.com> at:
>    https://lore.kernel.org/r/202301142105.lt733Lt3-lkp@intel.com/
> 2. Collect Reviewed-by tag from Roger Quadros.
> 
> v2:
> https://lore.kernel.org/r/20230116044517.310461-1-s-vadapalli@ti.com/
> v1:
> https://lore.kernel.org/r/20230113104816.132815-1-s-vadapalli@ti.com/
> 
> Siddharth Vadapalli (2):
>   net: ethernet: ti: am65-cpsw: Delete unreachable error handling code
>   net: ethernet: ti: am65-cpsw/cpts: Fix CPTS release action
> 
>  drivers/net/ethernet/ti/am65-cpsw-nuss.c |  7 ++-----
>  drivers/net/ethernet/ti/am65-cpts.c      | 15 +++++----------
>  drivers/net/ethernet/ti/am65-cpts.h      |  5 +++++
>  3 files changed, 12 insertions(+), 15 deletions(-)
> 

Reviewed-by: Roger Quadros <rogerq@kernel.org>

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH net-next v3 2/2] net: ethernet: ti: am65-cpsw/cpts: Fix CPTS release action
  2023-01-18  9:54 ` [PATCH net-next v3 2/2] net: ethernet: ti: am65-cpsw/cpts: Fix CPTS release action Siddharth Vadapalli
  2023-01-18 11:29   ` Leon Romanovsky
@ 2023-01-19 13:06   ` Paolo Abeni
  2023-01-20  4:42   ` [PATCH net-next v4 " Siddharth Vadapalli
  2 siblings, 0 replies; 11+ messages in thread
From: Paolo Abeni @ 2023-01-19 13:06 UTC (permalink / raw)
  To: Siddharth Vadapalli, davem, edumazet, kuba, linux, rogerq, leon
  Cc: netdev, linux-kernel, linux-arm-kernel, vigneshr, srk

Hi,

On Wed, 2023-01-18 at 15:24 +0530, Siddharth Vadapalli wrote:
> @@ -1014,18 +1013,12 @@ struct am65_cpts *am65_cpts_create(struct device *dev, void __iomem *regs,
>  	}
>  	cpts->phc_index = ptp_clock_index(cpts->ptp_clock);
>  
> -	ret = devm_add_action_or_reset(dev, am65_cpts_release, cpts);
> -	if (ret) {
> -		dev_err(dev, "failed to add ptpclk reset action %d", ret);
> -		return ERR_PTR(ret);
> -	}
> -
>  	ret = devm_request_threaded_irq(dev, cpts->irq, NULL,
>  					am65_cpts_interrupt,
>  					IRQF_ONESHOT, dev_name(dev), cpts);
>  	if (ret < 0) {
>  		dev_err(cpts->dev, "error attaching irq %d\n", ret);
> -		return ERR_PTR(ret);
> +		goto reset_ptpclk;
>  	}
>  
>  	dev_info(dev, "CPTS ver 0x%08x, freq:%u, add_val:%u\n",

This chunk does not apply cleanly to current net-next (context is
changed). Please rebase and re-spin (you can preserve/keep the already
acquire reviewed-by tags)

Thanks!

Paolo


^ permalink raw reply	[flat|nested] 11+ messages in thread

* [PATCH net-next v4 2/2] net: ethernet: ti: am65-cpsw/cpts: Fix CPTS release action
  2023-01-18  9:54 ` [PATCH net-next v3 2/2] net: ethernet: ti: am65-cpsw/cpts: Fix CPTS release action Siddharth Vadapalli
  2023-01-18 11:29   ` Leon Romanovsky
  2023-01-19 13:06   ` Paolo Abeni
@ 2023-01-20  4:42   ` Siddharth Vadapalli
  2023-01-20  5:48     ` Jakub Kicinski
  2 siblings, 1 reply; 11+ messages in thread
From: Siddharth Vadapalli @ 2023-01-20  4:42 UTC (permalink / raw)
  To: davem, edumazet, kuba, linux, pabeni, rogerq, leon
  Cc: leonro, anthony.l.nguyen, netdev, linux-kernel, linux-arm-kernel,
	vigneshr, srk, s-vadapalli

The am65_cpts_release() function is registered as a devm_action in the
am65_cpts_create() function in am65-cpts driver. When the am65-cpsw driver
invokes am65_cpts_create(), am65_cpts_release() is added in the set of devm
actions associated with the am65-cpsw driver's device.

In the event of probe failure or probe deferral, the platform_drv_probe()
function invokes dev_pm_domain_detach() which powers off the CPSW and the
CPSW's CPTS hardware, both of which share the same power domain. Since the
am65_cpts_disable() function invoked by the am65_cpts_release() function
attempts to reset the CPTS hardware by writing to its registers, the CPTS
hardware is assumed to be powered on at this point. However, the hardware
is powered off before the devm actions are executed.

Fix this by getting rid of the devm action for am65_cpts_release() and
invoking it directly on the cleanup and exit paths.

Fixes: f6bd59526ca5 ("net: ethernet: ti: introduce am654 common platform time sync driver")
Signed-off-by: Siddharth Vadapalli <s-vadapalli@ti.com>
Reviewed-by: Leon Romanovsky <leonro@nvidia.com>
Reviewed-by: Tony Nguyen <anthony.l.nguyen@intel.com>
Reviewed-by: Roger Quadros <rogerq@kernel.org>
---
Changes from v3:
1. Rebase patch on net-next commit: cff9b79e9ad5
2. Collect Reviewed-by tags from Leon Romanovsky, Tony Nguyen and
   Roger Quadros.

 drivers/net/ethernet/ti/am65-cpsw-nuss.c |  2 ++
 drivers/net/ethernet/ti/am65-cpts.c      | 15 +++++----------
 drivers/net/ethernet/ti/am65-cpts.h      |  5 +++++
 3 files changed, 12 insertions(+), 10 deletions(-)

diff --git a/drivers/net/ethernet/ti/am65-cpsw-nuss.c b/drivers/net/ethernet/ti/am65-cpsw-nuss.c
index fde4800cf81a..b23027874cc4 100644
--- a/drivers/net/ethernet/ti/am65-cpsw-nuss.c
+++ b/drivers/net/ethernet/ti/am65-cpsw-nuss.c
@@ -2914,6 +2914,7 @@ static int am65_cpsw_nuss_probe(struct platform_device *pdev)
 
 err_free_phylink:
 	am65_cpsw_nuss_phylink_cleanup(common);
+	am65_cpts_release(common->cpts);
 err_of_clear:
 	of_platform_device_destroy(common->mdio_dev, NULL);
 err_pm_clear:
@@ -2942,6 +2943,7 @@ static int am65_cpsw_nuss_remove(struct platform_device *pdev)
 	 */
 	am65_cpsw_nuss_cleanup_ndev(common);
 	am65_cpsw_nuss_phylink_cleanup(common);
+	am65_cpts_release(common->cpts);
 	am65_cpsw_disable_serdes_phy(common);
 
 	of_platform_device_destroy(common->mdio_dev, NULL);
diff --git a/drivers/net/ethernet/ti/am65-cpts.c b/drivers/net/ethernet/ti/am65-cpts.c
index bf0f74b20ba6..16ee9c29cb35 100644
--- a/drivers/net/ethernet/ti/am65-cpts.c
+++ b/drivers/net/ethernet/ti/am65-cpts.c
@@ -1052,14 +1052,13 @@ static int am65_cpts_of_parse(struct am65_cpts *cpts, struct device_node *node)
 	return cpts_of_mux_clk_setup(cpts, node);
 }
 
-static void am65_cpts_release(void *data)
+void am65_cpts_release(struct am65_cpts *cpts)
 {
-	struct am65_cpts *cpts = data;
-
 	ptp_clock_unregister(cpts->ptp_clock);
 	am65_cpts_disable(cpts);
 	clk_disable_unprepare(cpts->refclk);
 }
+EXPORT_SYMBOL_GPL(am65_cpts_release);
 
 struct am65_cpts *am65_cpts_create(struct device *dev, void __iomem *regs,
 				   struct device_node *node)
@@ -1139,18 +1138,12 @@ struct am65_cpts *am65_cpts_create(struct device *dev, void __iomem *regs,
 	}
 	cpts->phc_index = ptp_clock_index(cpts->ptp_clock);
 
-	ret = devm_add_action_or_reset(dev, am65_cpts_release, cpts);
-	if (ret) {
-		dev_err(dev, "failed to add ptpclk reset action %d", ret);
-		return ERR_PTR(ret);
-	}
-
 	ret = devm_request_threaded_irq(dev, cpts->irq, NULL,
 					am65_cpts_interrupt,
 					IRQF_ONESHOT, dev_name(dev), cpts);
 	if (ret < 0) {
 		dev_err(cpts->dev, "error attaching irq %d\n", ret);
-		return ERR_PTR(ret);
+		goto reset_ptpclk;
 	}
 
 	dev_info(dev, "CPTS ver 0x%08x, freq:%u, add_val:%u pps:%d\n",
@@ -1159,6 +1152,8 @@ struct am65_cpts *am65_cpts_create(struct device *dev, void __iomem *regs,
 
 	return cpts;
 
+reset_ptpclk:
+	am65_cpts_release(cpts);
 refclk_disable:
 	clk_disable_unprepare(cpts->refclk);
 	return ERR_PTR(ret);
diff --git a/drivers/net/ethernet/ti/am65-cpts.h b/drivers/net/ethernet/ti/am65-cpts.h
index bd08f4b2edd2..6e14df0be113 100644
--- a/drivers/net/ethernet/ti/am65-cpts.h
+++ b/drivers/net/ethernet/ti/am65-cpts.h
@@ -18,6 +18,7 @@ struct am65_cpts_estf_cfg {
 };
 
 #if IS_ENABLED(CONFIG_TI_K3_AM65_CPTS)
+void am65_cpts_release(struct am65_cpts *cpts);
 struct am65_cpts *am65_cpts_create(struct device *dev, void __iomem *regs,
 				   struct device_node *node);
 int am65_cpts_phc_index(struct am65_cpts *cpts);
@@ -31,6 +32,10 @@ void am65_cpts_estf_disable(struct am65_cpts *cpts, int idx);
 void am65_cpts_suspend(struct am65_cpts *cpts);
 void am65_cpts_resume(struct am65_cpts *cpts);
 #else
+static inline void am65_cpts_release(struct am65_cpts *cpts)
+{
+}
+
 static inline struct am65_cpts *am65_cpts_create(struct device *dev,
 						 void __iomem *regs,
 						 struct device_node *node)
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* Re: [PATCH net-next v4 2/2] net: ethernet: ti: am65-cpsw/cpts: Fix CPTS release action
  2023-01-20  4:42   ` [PATCH net-next v4 " Siddharth Vadapalli
@ 2023-01-20  5:48     ` Jakub Kicinski
  2023-01-20  5:52       ` Siddharth Vadapalli
  0 siblings, 1 reply; 11+ messages in thread
From: Jakub Kicinski @ 2023-01-20  5:48 UTC (permalink / raw)
  To: Siddharth Vadapalli
  Cc: davem, edumazet, linux, pabeni, rogerq, leon, leonro,
	anthony.l.nguyen, netdev, linux-kernel, linux-arm-kernel,
	vigneshr, srk

On Fri, 20 Jan 2023 10:12:01 +0530 Siddharth Vadapalli wrote:
> Changes from v3:
> 1. Rebase patch on net-next commit: cff9b79e9ad5
> 2. Collect Reviewed-by tags from Leon Romanovsky, Tony Nguyen and
>    Roger Quadros.

You need to repost the entire series, and please don't --in-reply-to,
just CC the people who commented.

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH net-next v4 2/2] net: ethernet: ti: am65-cpsw/cpts: Fix CPTS release action
  2023-01-20  5:48     ` Jakub Kicinski
@ 2023-01-20  5:52       ` Siddharth Vadapalli
  0 siblings, 0 replies; 11+ messages in thread
From: Siddharth Vadapalli @ 2023-01-20  5:52 UTC (permalink / raw)
  To: Jakub Kicinski
  Cc: davem, edumazet, linux, pabeni, rogerq, leon, leonro,
	anthony.l.nguyen, netdev, linux-kernel, linux-arm-kernel,
	vigneshr, srk, s-vadapalli

Hello Jakub,

On 20/01/23 11:18, Jakub Kicinski wrote:
> On Fri, 20 Jan 2023 10:12:01 +0530 Siddharth Vadapalli wrote:
>> Changes from v3:
>> 1. Rebase patch on net-next commit: cff9b79e9ad5
>> 2. Collect Reviewed-by tags from Leon Romanovsky, Tony Nguyen and
>>    Roger Quadros.
> 
> You need to repost the entire series, and please don't --in-reply-to,
> just CC the people who commented.

Sorry, I wasn't aware of this. Paolo asked me to re-spin, so I thought that I
had to use the "--in-reply-to" option. I will repost the series. Could you let
me know if v4 will be the right version for the series or should it be v5,
considering that the re-spin patch has v4 in subject.

Regards,
Siddharth.

^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2023-01-20  5:53 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-01-18  9:54 [PATCH net-next v3 0/2] Fix CPTS release action in am65-cpts driver Siddharth Vadapalli
2023-01-18  9:54 ` [PATCH net-next v3 1/2] net: ethernet: ti: am65-cpsw: Delete unreachable error handling code Siddharth Vadapalli
2023-01-18 11:30   ` Leon Romanovsky
2023-01-18  9:54 ` [PATCH net-next v3 2/2] net: ethernet: ti: am65-cpsw/cpts: Fix CPTS release action Siddharth Vadapalli
2023-01-18 11:29   ` Leon Romanovsky
2023-01-19 13:06   ` Paolo Abeni
2023-01-20  4:42   ` [PATCH net-next v4 " Siddharth Vadapalli
2023-01-20  5:48     ` Jakub Kicinski
2023-01-20  5:52       ` Siddharth Vadapalli
2023-01-18 21:24 ` [PATCH net-next v3 0/2] Fix CPTS release action in am65-cpts driver Tony Nguyen
2023-01-19 10:27 ` Roger Quadros

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).