From 4b7e7046bab2885607726b4c6966d0e9c138628e Mon Sep 17 00:00:00 2001 From: Rosen Penev Date: Wed, 4 Sep 2024 11:15:28 -0700 Subject: [PATCH] ltq-ptm: propagate reset errors to probe Instead of avoiding returning, propagate error so that the kernel infrastructure can handle it. Signed-off-by: Rosen Penev Link: https://github.com/openwrt/openwrt/pull/16262 Signed-off-by: Hauke Mehrtens --- package/kernel/lantiq/ltq-ptm/Makefile | 2 +- .../lantiq/ltq-ptm/src/ifxmips_ptm_vdsl.c | 4 +- .../lantiq/ltq-ptm/src/ifxmips_ptm_vdsl.h | 2 +- .../lantiq/ltq-ptm/src/ifxmips_ptm_vr9.c | 37 +++++++++---------- 4 files changed, 23 insertions(+), 22 deletions(-) diff --git a/package/kernel/lantiq/ltq-ptm/Makefile b/package/kernel/lantiq/ltq-ptm/Makefile index b726cb1560d..03b12188747 100644 --- a/package/kernel/lantiq/ltq-ptm/Makefile +++ b/package/kernel/lantiq/ltq-ptm/Makefile @@ -8,7 +8,7 @@ include $(TOPDIR)/rules.mk include $(INCLUDE_DIR)/kernel.mk PKG_NAME:=ltq-ptm -PKG_RELEASE:=3 +PKG_RELEASE:=4 PKG_MAINTAINER:=John Crispin PKG_LICENSE:=GPL-2.0+ diff --git a/package/kernel/lantiq/ltq-ptm/src/ifxmips_ptm_vdsl.c b/package/kernel/lantiq/ltq-ptm/src/ifxmips_ptm_vdsl.c index 8a0ac331b7f..6731904bba9 100644 --- a/package/kernel/lantiq/ltq-ptm/src/ifxmips_ptm_vdsl.c +++ b/package/kernel/lantiq/ltq-ptm/src/ifxmips_ptm_vdsl.c @@ -993,7 +993,9 @@ static int ltq_ptm_probe(struct platform_device *pdev) goto INIT_PRIV_DATA_FAIL; } - ifx_ptm_init_chip(pdev); + ret = ifx_ptm_init_chip(pdev); + if (ret) + goto INIT_PRIV_DATA_FAIL; ret = init_tables(); if ( ret != 0 ) { err("INIT_TABLES_FAIL"); diff --git a/package/kernel/lantiq/ltq-ptm/src/ifxmips_ptm_vdsl.h b/package/kernel/lantiq/ltq-ptm/src/ifxmips_ptm_vdsl.h index 90ed9d9021e..19a86867be1 100644 --- a/package/kernel/lantiq/ltq-ptm/src/ifxmips_ptm_vdsl.h +++ b/package/kernel/lantiq/ltq-ptm/src/ifxmips_ptm_vdsl.h @@ -112,7 +112,7 @@ extern unsigned int ifx_ptm_dbg_enable; extern void ifx_ptm_get_fw_ver(unsigned int *major, unsigned int *mid, unsigned int *minor); -extern void ifx_ptm_init_chip(struct platform_device *pdev); +extern int ifx_ptm_init_chip(struct platform_device *pdev); extern void ifx_ptm_uninit_chip(void); extern int ifx_pp32_start(int pp32); diff --git a/package/kernel/lantiq/ltq-ptm/src/ifxmips_ptm_vr9.c b/package/kernel/lantiq/ltq-ptm/src/ifxmips_ptm_vr9.c index b1660274d0a..c0d16fe34fe 100644 --- a/package/kernel/lantiq/ltq-ptm/src/ifxmips_ptm_vr9.c +++ b/package/kernel/lantiq/ltq-ptm/src/ifxmips_ptm_vr9.c @@ -54,7 +54,7 @@ static inline void init_pmu(void); static inline void uninit_pmu(void); -static inline void reset_ppe(struct platform_device *pdev); +static inline int reset_ppe(struct platform_device *pdev); static inline void init_pdma(void); static inline void init_mailbox(void); static inline void init_atm_tc(void); @@ -82,7 +82,7 @@ static inline void uninit_pmu(void) { } -static inline void reset_ppe(struct platform_device *pdev) +static inline int reset_ppe(struct platform_device *pdev) { struct device *dev = &pdev->dev; struct reset_control *dsp; @@ -90,25 +90,16 @@ static inline void reset_ppe(struct platform_device *pdev) struct reset_control *tc; dsp = devm_reset_control_get(dev, "dsp"); - if (IS_ERR(dsp)) { - if (PTR_ERR(dsp) != -EPROBE_DEFER) - dev_err(dev, "Failed to lookup dsp reset\n"); -// return PTR_ERR(dsp); - } + if (IS_ERR(dsp)) + return dev_err_probe(dev, PTR_ERR(dsp), "Failed to lookup dsp reset"); dfe = devm_reset_control_get(dev, "dfe"); - if (IS_ERR(dfe)) { - if (PTR_ERR(dfe) != -EPROBE_DEFER) - dev_err(dev, "Failed to lookup dfe reset\n"); -// return PTR_ERR(dfe); - } + if (IS_ERR(dfe)) + return dev_err_probe(dev, PTR_ERR(dfe), "Failed to lookup dfe reset"); tc = devm_reset_control_get(dev, "tc"); - if (IS_ERR(tc)) { - if (PTR_ERR(tc) != -EPROBE_DEFER) - dev_err(dev, "Failed to lookup tc reset\n"); -// return PTR_ERR(tc); - } + if (IS_ERR(tc)) + return dev_err_probe(dev, PTR_ERR(tc), "Failed to lookup tc reset"); reset_control_assert(dsp); udelay(1000); @@ -120,6 +111,8 @@ static inline void reset_ppe(struct platform_device *pdev) udelay(1000); *PP32_SRST |= 0x000303CF; udelay(1000); + + return 0; } static inline void init_pdma(void) @@ -263,11 +256,15 @@ void ifx_ptm_get_fw_ver(unsigned int *major, unsigned int *mid, unsigned int *mi } } -void ifx_ptm_init_chip(struct platform_device *pdev) +int ifx_ptm_init_chip(struct platform_device *pdev) { + int r; + init_pmu(); - reset_ppe(pdev); + r = reset_ppe(pdev); + if (r) + return r; init_pdma(); @@ -276,6 +273,8 @@ void ifx_ptm_init_chip(struct platform_device *pdev) init_atm_tc(); clear_share_buffer(); + + return 0; } void ifx_ptm_uninit_chip(void)