diff options
author | Rosen Penev <rosenp@gmail.com> | 2024-09-04 11:15:28 -0700 |
---|---|---|
committer | Hauke Mehrtens <hauke@hauke-m.de> | 2024-09-06 22:23:16 +0200 |
commit | 4b7e7046bab2885607726b4c6966d0e9c138628e (patch) | |
tree | 595992c54d7f40f7ef9b82c3b75e7319bee2d95e | |
parent | 42a763ef0460d634a0bd744214617a99255b5e3a (diff) | |
download | openwrt-4b7e7046bab2885607726b4c6966d0e9c138628e.tar.gz openwrt-4b7e7046bab2885607726b4c6966d0e9c138628e.tar.bz2 openwrt-4b7e7046bab2885607726b4c6966d0e9c138628e.zip |
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 <rosenp@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/16262
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
4 files changed, 23 insertions, 22 deletions
diff --git a/package/kernel/lantiq/ltq-ptm/Makefile b/package/kernel/lantiq/ltq-ptm/Makefile index b726cb1560..03b1218874 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 <john@phrozen.org> 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 8a0ac331b7..6731904bba 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 90ed9d9021..19a86867be 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 b1660274d0..c0d16fe34f 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) |