Commit 5cf6c22b authored by Paolo Abeni's avatar Paolo Abeni
Browse files

Merge branch 'fix-cpts-release-action-in-am65-cpts-driver'



Siddharth Vadapalli says:

====================
Fix CPTS release action in am65-cpts driver

Delete unreachable code in am65_cpsw_init_cpts() function, which was
Reported-by: default avatarLeon 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.

v4:
https://lore.kernel.org/r/20230120044201.357950-1-s-vadapalli@ti.com/
v3:
https://lore.kernel.org/r/20230118095439.114222-1-s-vadapalli@ti.com/
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/
====================

Link: https://lore.kernel.org/r/20230120070731.383729-1-s-vadapalli@ti.com


Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
parents d7bf56e0 4ad8766c
Loading
Loading
Loading
Loading
+2 −5
Original line number Diff line number Diff line
@@ -1937,11 +1937,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;
	}
@@ -2919,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:
@@ -2947,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);
+5 −10
Original line number Diff line number Diff line
@@ -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);
+5 −0
Original line number Diff line number Diff line
@@ -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)