1
0
mirror of https://git.openwrt.org/openwrt/openwrt.git synced 2024-11-08 07:49:21 +01:00

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>
This commit is contained in:
Rosen Penev 2024-09-04 11:15:28 -07:00 committed by Hauke Mehrtens
parent 42a763ef04
commit 4b7e7046ba
4 changed files with 23 additions and 22 deletions

@ -8,7 +8,7 @@ include $(TOPDIR)/rules.mk
include $(INCLUDE_DIR)/kernel.mk include $(INCLUDE_DIR)/kernel.mk
PKG_NAME:=ltq-ptm PKG_NAME:=ltq-ptm
PKG_RELEASE:=3 PKG_RELEASE:=4
PKG_MAINTAINER:=John Crispin <john@phrozen.org> PKG_MAINTAINER:=John Crispin <john@phrozen.org>
PKG_LICENSE:=GPL-2.0+ PKG_LICENSE:=GPL-2.0+

@ -993,7 +993,9 @@ static int ltq_ptm_probe(struct platform_device *pdev)
goto INIT_PRIV_DATA_FAIL; 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(); ret = init_tables();
if ( ret != 0 ) { if ( ret != 0 ) {
err("INIT_TABLES_FAIL"); err("INIT_TABLES_FAIL");

@ -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_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 void ifx_ptm_uninit_chip(void);
extern int ifx_pp32_start(int pp32); extern int ifx_pp32_start(int pp32);

@ -54,7 +54,7 @@
static inline void init_pmu(void); static inline void init_pmu(void);
static inline void uninit_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_pdma(void);
static inline void init_mailbox(void); static inline void init_mailbox(void);
static inline void init_atm_tc(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 device *dev = &pdev->dev;
struct reset_control *dsp; struct reset_control *dsp;
@ -90,25 +90,16 @@ static inline void reset_ppe(struct platform_device *pdev)
struct reset_control *tc; struct reset_control *tc;
dsp = devm_reset_control_get(dev, "dsp"); dsp = devm_reset_control_get(dev, "dsp");
if (IS_ERR(dsp)) { if (IS_ERR(dsp))
if (PTR_ERR(dsp) != -EPROBE_DEFER) return dev_err_probe(dev, PTR_ERR(dsp), "Failed to lookup dsp reset");
dev_err(dev, "Failed to lookup dsp reset\n");
// return PTR_ERR(dsp);
}
dfe = devm_reset_control_get(dev, "dfe"); dfe = devm_reset_control_get(dev, "dfe");
if (IS_ERR(dfe)) { if (IS_ERR(dfe))
if (PTR_ERR(dfe) != -EPROBE_DEFER) return dev_err_probe(dev, PTR_ERR(dfe), "Failed to lookup dfe reset");
dev_err(dev, "Failed to lookup dfe reset\n");
// return PTR_ERR(dfe);
}
tc = devm_reset_control_get(dev, "tc"); tc = devm_reset_control_get(dev, "tc");
if (IS_ERR(tc)) { if (IS_ERR(tc))
if (PTR_ERR(tc) != -EPROBE_DEFER) return dev_err_probe(dev, PTR_ERR(tc), "Failed to lookup tc reset");
dev_err(dev, "Failed to lookup tc reset\n");
// return PTR_ERR(tc);
}
reset_control_assert(dsp); reset_control_assert(dsp);
udelay(1000); udelay(1000);
@ -120,6 +111,8 @@ static inline void reset_ppe(struct platform_device *pdev)
udelay(1000); udelay(1000);
*PP32_SRST |= 0x000303CF; *PP32_SRST |= 0x000303CF;
udelay(1000); udelay(1000);
return 0;
} }
static inline void init_pdma(void) 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(); init_pmu();
reset_ppe(pdev); r = reset_ppe(pdev);
if (r)
return r;
init_pdma(); init_pdma();
@ -276,6 +273,8 @@ void ifx_ptm_init_chip(struct platform_device *pdev)
init_atm_tc(); init_atm_tc();
clear_share_buffer(); clear_share_buffer();
return 0;
} }
void ifx_ptm_uninit_chip(void) void ifx_ptm_uninit_chip(void)