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

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.comSigned-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
parents d7bf56e0 4ad8766c
...@@ -1937,11 +1937,6 @@ static int am65_cpsw_init_cpts(struct am65_cpsw_common *common) ...@@ -1937,11 +1937,6 @@ static int am65_cpsw_init_cpts(struct am65_cpsw_common *common)
int ret = PTR_ERR(cpts); int ret = PTR_ERR(cpts);
of_node_put(node); of_node_put(node);
if (ret == -EOPNOTSUPP) {
dev_info(dev, "cpts disabled\n");
return 0;
}
dev_err(dev, "cpts create err %d\n", ret); dev_err(dev, "cpts create err %d\n", ret);
return ret; return ret;
} }
...@@ -2919,6 +2914,7 @@ static int am65_cpsw_nuss_probe(struct platform_device *pdev) ...@@ -2919,6 +2914,7 @@ static int am65_cpsw_nuss_probe(struct platform_device *pdev)
err_free_phylink: err_free_phylink:
am65_cpsw_nuss_phylink_cleanup(common); am65_cpsw_nuss_phylink_cleanup(common);
am65_cpts_release(common->cpts);
err_of_clear: err_of_clear:
of_platform_device_destroy(common->mdio_dev, NULL); of_platform_device_destroy(common->mdio_dev, NULL);
err_pm_clear: err_pm_clear:
...@@ -2947,6 +2943,7 @@ static int am65_cpsw_nuss_remove(struct platform_device *pdev) ...@@ -2947,6 +2943,7 @@ static int am65_cpsw_nuss_remove(struct platform_device *pdev)
*/ */
am65_cpsw_nuss_cleanup_ndev(common); am65_cpsw_nuss_cleanup_ndev(common);
am65_cpsw_nuss_phylink_cleanup(common); am65_cpsw_nuss_phylink_cleanup(common);
am65_cpts_release(common->cpts);
am65_cpsw_disable_serdes_phy(common); am65_cpsw_disable_serdes_phy(common);
of_platform_device_destroy(common->mdio_dev, NULL); of_platform_device_destroy(common->mdio_dev, NULL);
......
...@@ -1052,14 +1052,13 @@ static int am65_cpts_of_parse(struct am65_cpts *cpts, struct device_node *node) ...@@ -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); 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); ptp_clock_unregister(cpts->ptp_clock);
am65_cpts_disable(cpts); am65_cpts_disable(cpts);
clk_disable_unprepare(cpts->refclk); clk_disable_unprepare(cpts->refclk);
} }
EXPORT_SYMBOL_GPL(am65_cpts_release);
struct am65_cpts *am65_cpts_create(struct device *dev, void __iomem *regs, struct am65_cpts *am65_cpts_create(struct device *dev, void __iomem *regs,
struct device_node *node) struct device_node *node)
...@@ -1139,18 +1138,12 @@ struct am65_cpts *am65_cpts_create(struct device *dev, void __iomem *regs, ...@@ -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); 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, ret = devm_request_threaded_irq(dev, cpts->irq, NULL,
am65_cpts_interrupt, am65_cpts_interrupt,
IRQF_ONESHOT, dev_name(dev), cpts); IRQF_ONESHOT, dev_name(dev), cpts);
if (ret < 0) { if (ret < 0) {
dev_err(cpts->dev, "error attaching irq %d\n", ret); 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", 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, ...@@ -1159,6 +1152,8 @@ struct am65_cpts *am65_cpts_create(struct device *dev, void __iomem *regs,
return cpts; return cpts;
reset_ptpclk:
am65_cpts_release(cpts);
refclk_disable: refclk_disable:
clk_disable_unprepare(cpts->refclk); clk_disable_unprepare(cpts->refclk);
return ERR_PTR(ret); return ERR_PTR(ret);
......
...@@ -18,6 +18,7 @@ struct am65_cpts_estf_cfg { ...@@ -18,6 +18,7 @@ struct am65_cpts_estf_cfg {
}; };
#if IS_ENABLED(CONFIG_TI_K3_AM65_CPTS) #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 am65_cpts *am65_cpts_create(struct device *dev, void __iomem *regs,
struct device_node *node); struct device_node *node);
int am65_cpts_phc_index(struct am65_cpts *cpts); int am65_cpts_phc_index(struct am65_cpts *cpts);
...@@ -31,6 +32,10 @@ void am65_cpts_estf_disable(struct am65_cpts *cpts, int idx); ...@@ -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_suspend(struct am65_cpts *cpts);
void am65_cpts_resume(struct am65_cpts *cpts); void am65_cpts_resume(struct am65_cpts *cpts);
#else #else
static inline void am65_cpts_release(struct am65_cpts *cpts)
{
}
static inline struct am65_cpts *am65_cpts_create(struct device *dev, static inline struct am65_cpts *am65_cpts_create(struct device *dev,
void __iomem *regs, void __iomem *regs,
struct device_node *node) struct device_node *node)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment