linux/drivers/bus
Manivannan Sadhasivam bc95dbf550 bus: mhi: core: Fix race while handling SYS_ERR at power up
commit d651ce8e91 upstream.

During SYS_ERR condition, as a response to the MHI_RESET from host, some
devices tend to issue BHI interrupt without clearing the SYS_ERR state in
the device. This creates a race condition and causes a failure in booting
up the device.

The issue is seen on the Sierra Wireless EM9191 modem during SYS_ERR
handling in mhi_async_power_up(). Once the host detects that the device
is in SYS_ERR state, it issues MHI_RESET and waits for the device to
process the reset request. During this time, the device triggers the BHI
interrupt to the host without clearing SYS_ERR condition. So the host
starts handling the SYS_ERR condition again.

To fix this issue, let's register the IRQ handler only after handling the
SYS_ERR check to avoid getting spurious IRQs from the device.

Fixes: e18d4e9fa7 ("bus: mhi: core: Handle syserr during power_up")
Cc: stable@vger.kernel.org
Reported-by: Aleksander Morgado <aleksander@aleksander.es>
Tested-by: Aleksander Morgado <aleksander@aleksander.es>
Tested-by: Thomas Perrot <thomas.perrot@bootlin.com>
Signed-off-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
Link: https://lore.kernel.org/r/20211216081227.237749-8-manivannan.sadhasivam@linaro.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2022-01-27 11:02:58 +01:00
..
fsl-mc
mhi bus: mhi: core: Fix race while handling SYS_ERR at power up 2022-01-27 11:02:58 +01:00
arm-cci.c
arm-integrator-lm.c
brcmstb_gisb.c
bt1-apb.c
bt1-axi.c
da8xx-mstpri.c
hisi_lpc.c
imx-weim.c
intel-ixp4xx-eb.c
Kconfig
Makefile
mips_cdmm.c
moxtet.c
mvebu-mbus.c
omap_l3_noc.c
omap_l3_noc.h
omap_l3_smx.c
omap_l3_smx.h
omap-ocp2scp.c
qcom-ebi2.c
simple-pm-bus.c
sun50i-de2.c
sunxi-rsb.c bus: sunxi-rsb: Fix shutdown 2021-12-29 12:28:38 +01:00
tegra-aconnect.c
tegra-gmi.c
ti-pwmss.c
ti-sysc.c bus: ti-sysc: Fix variable set but not used warning for reinit_modules 2021-12-22 09:32:51 +01:00
ts-nbus.c
uniphier-system-bus.c
vexpress-config.c