summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRosen Penev <rosenp@gmail.com>2024-09-04 11:15:28 -0700
committerHauke Mehrtens <hauke@hauke-m.de>2024-09-06 22:23:16 +0200
commit4b7e7046bab2885607726b4c6966d0e9c138628e (patch)
tree595992c54d7f40f7ef9b82c3b75e7319bee2d95e
parent42a763ef0460d634a0bd744214617a99255b5e3a (diff)
downloadopenwrt-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>
-rw-r--r--package/kernel/lantiq/ltq-ptm/Makefile2
-rw-r--r--package/kernel/lantiq/ltq-ptm/src/ifxmips_ptm_vdsl.c4
-rw-r--r--package/kernel/lantiq/ltq-ptm/src/ifxmips_ptm_vdsl.h2
-rw-r--r--package/kernel/lantiq/ltq-ptm/src/ifxmips_ptm_vr9.c37
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)