linux/drivers
Douglas Anderson a48cb9c6ad wifi: ath10k: Don't touch the CE interrupt registers after power up
[ Upstream commit 170c75d43a ]

As talked about in commit d66d24ac30 ("ath10k: Keep track of which
interrupts fired, don't poll them"), if we access the copy engine
register at a bad time then ath10k can go boom. However, it's not
necessarily easy to know when it's safe to access them.

The ChromeOS test labs saw a crash that looked like this at
shutdown/reboot time (on a chromeos-5.15 kernel, but likely the
problem could also reproduce upstream):

Internal error: synchronous external abort: 96000010 [#1] PREEMPT SMP
...
CPU: 4 PID: 6168 Comm: reboot Not tainted 5.15.111-lockdep-19350-g1d624fe6758f #1 010b9b233ab055c27c6dc88efb0be2f4e9e86f51
Hardware name: Google Kingoftown (DT)
...
pc : ath10k_snoc_read32+0x50/0x74 [ath10k_snoc]
lr : ath10k_snoc_read32+0x24/0x74 [ath10k_snoc]
...
Call trace:
ath10k_snoc_read32+0x50/0x74 [ath10k_snoc ...]
ath10k_ce_disable_interrupt+0x190/0x65c [ath10k_core ...]
ath10k_ce_disable_interrupts+0x8c/0x120 [ath10k_core ...]
ath10k_snoc_hif_stop+0x78/0x660 [ath10k_snoc ...]
ath10k_core_stop+0x13c/0x1ec [ath10k_core ...]
ath10k_halt+0x398/0x5b0 [ath10k_core ...]
ath10k_stop+0xfc/0x1a8 [ath10k_core ...]
drv_stop+0x148/0x6b4 [mac80211 ...]
ieee80211_stop_device+0x70/0x80 [mac80211 ...]
ieee80211_do_stop+0x10d8/0x15b0 [mac80211 ...]
ieee80211_stop+0x144/0x1a0 [mac80211 ...]
__dev_close_many+0x1e8/0x2c0
dev_close_many+0x198/0x33c
dev_close+0x140/0x210
cfg80211_shutdown_all_interfaces+0xc8/0x1e0 [cfg80211 ...]
ieee80211_remove_interfaces+0x118/0x5c4 [mac80211 ...]
ieee80211_unregister_hw+0x64/0x1f4 [mac80211 ...]
ath10k_mac_unregister+0x4c/0xf0 [ath10k_core ...]
ath10k_core_unregister+0x80/0xb0 [ath10k_core ...]
ath10k_snoc_free_resources+0xb8/0x1ec [ath10k_snoc ...]
ath10k_snoc_shutdown+0x98/0xd0 [ath10k_snoc ...]
platform_shutdown+0x7c/0xa0
device_shutdown+0x3e0/0x58c
kernel_restart_prepare+0x68/0xa0
kernel_restart+0x28/0x7c

Though there's no known way to reproduce the problem, it makes sense
that it would be the same issue where we're trying to access copy
engine registers when it's not allowed.

Let's fix this by changing how we "disable" the interrupts. Instead of
tweaking the copy engine registers we'll just use disable_irq() and
enable_irq(). Then we'll configure the interrupts once at power up
time.

Tested-on: WCN3990 hw1.0 SNOC WLAN.HL.3.2.2.c10-00754-QCAHLSWMTPL-1

Signed-off-by: Douglas Anderson <dianders@chromium.org>
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
Link: https://lore.kernel.org/r/20230630151842.1.If764ede23c4e09a43a842771c2ddf99608f25f8e@changeid
Signed-off-by: Sasha Levin <sashal@kernel.org>
2023-11-28 17:19:38 +00:00
..
accel accel/habanalabs/gaudi2: Fix incorrect string length computation in gaudi2_psoc_razwi_get_engines() 2023-11-20 11:59:11 +01:00
accessibility
acpi ACPI: APEI: Fix AER info corruption when error status data has multiple sections 2023-11-28 17:19:37 +00:00
amba
android binder: fix memory leaks of spam and pending work 2023-10-05 12:48:08 +02:00
ata scsi: sd: Introduce manage_shutdown device flag 2023-10-27 10:00:19 +09:00
atm
auxdisplay
base regmap: prevent noinc writes from clobbering cache 2023-11-20 11:59:33 +01:00
bcma
block nbd: fix uaf in nbd_open 2023-11-20 11:59:36 +01:00
bluetooth Bluetooth: hci_bcm4377: Mark bcm4378/bcm4387 as BROKEN_LE_CODED 2023-11-08 11:56:22 +01:00
bus bus: ti-sysc: Fix SYSC_QUIRK_SWSUP_SIDLE_ACT handling for uart wake-up 2023-09-13 10:24:53 +03:00
cache riscv: RISCV_NONSTANDARD_CACHE_OPS shouldn't depend on RISCV_DMA_NONCOHERENT 2023-10-26 09:42:37 +02:00
cdrom
cdx
char hwrng: geode - fix accessing registers 2023-11-20 11:59:18 +01:00
clk clk: scmi: Free scmi_clk allocated when the clocks with invalid info are skipped 2023-11-20 11:59:16 +01:00
clocksource clocksource/drivers/timer-atmel-tcb: Fix initialization on SAM9 hardware 2023-11-28 17:19:36 +00:00
comedi Revert "comedi: add HAS_IOPORT dependencies" 2023-09-12 15:49:20 +02:00
connector Fix NULL pointer dereference in cn_filter() 2023-10-24 10:53:45 +02:00
counter First set of Counter fixes for 6.6 2023-10-02 13:13:15 +02:00
cpufreq cpufreq: tegra194: fix warning due to missing opp_put 2023-11-20 11:58:57 +01:00
cpuidle
crypto crypto: qat - fix deadlock in backlog processing 2023-11-20 11:59:23 +01:00
cxl cxl/hdm: Remove broken error path 2023-11-20 11:59:31 +01:00
dax
dca
devfreq PM / devfreq: rockchip-dfi: Make pmu regmap mandatory 2023-11-20 11:59:00 +01:00
dio
dma dmaengine: pxa_dma: Remove an erroneous BUG_ON() in pxad_free_desc() 2023-11-20 11:59:26 +01:00
dma-buf dma-buf: add dma_fence_timestamp helper 2023-10-05 11:05:58 +02:00
edac
eisa
extcon
firewire scsi: sd: Introduce manage_shutdown device flag 2023-10-27 10:00:19 +09:00
firmware firmware: tegra: Add suspend hook and reset BPMP IPC early on resume 2023-11-20 11:59:16 +01:00
fpga fpga: Fix memory leak for fpga_region_test_class_find() 2023-10-24 19:32:39 +02:00
fsi
gnss
gpio gpio: sim: initialize a managed pointer when declaring it 2023-11-20 11:59:04 +01:00
gpu drm/syncobj: fix DRM_SYNCOBJ_WAIT_FLAGS_WAIT_AVAILABLE 2023-11-20 11:59:37 +01:00
greybus
hid HID: logitech-hidpp: Move get_wireless_feature_index() check to hidpp_connect_event() 2023-11-20 11:59:22 +01:00
hsi
hte hte: tegra: Fix missing error code in tegra_hte_test_probe() 2023-11-20 11:59:08 +01:00
hv hyperv-next for v6.6 2023-09-04 11:26:29 -07:00
hwmon hwmon: (sch5627) Disallow write access if virtual registers are locked 2023-11-20 11:59:08 +01:00
hwspinlock
hwtracing coresight: tmc-etr: Disable warnings for allocation failures 2023-09-20 10:46:30 +01:00
i2c i2c: iproc: handle invalid slave state 2023-11-20 11:59:36 +01:00
i3c i3c: Fix potential refcount leak in i3c_master_register_new_i3c_devs 2023-11-20 11:59:29 +01:00
idle
iio iio: frequency: adf4350: Use device managed functions and fix power down issue. 2023-11-20 11:59:24 +01:00
infiniband IB/mlx5: Fix init stage error handling to avoid double free of same QP and UAF 2023-11-20 11:59:23 +01:00
input Input: synaptics-rmi4 - fix use after free in rmi_unregister_function() 2023-11-20 11:59:34 +01:00
interconnect interconnect: fix error handling in qnoc_probe() 2023-11-20 11:59:27 +01:00
iommu iommufd: Add iopt_area_alloc() 2023-11-20 11:59:17 +01:00
ipack
irqchip irqchip/sifive-plic: Fix syscore registration for multi-socket systems 2023-11-20 11:58:54 +01:00
isdn isdn: mISDN: hfcsusb: Spelling fix in comment 2023-10-23 09:39:46 +01:00
leds leds: trigger: ledtrig-cpu:: Fix 'output may be truncated' issue for 'cpu' 2023-11-20 11:59:24 +01:00
macintosh
mailbox mailbox: qcom-ipcc: fix incorrect num_chans counting 2023-09-05 10:11:01 -05:00
mcb mcb: remove is_added flag from mcb_device struct 2023-10-05 09:50:14 +02:00
md This push fixes a 6.5 regression in dm-crypt. 2023-10-10 10:47:35 -07:00
media media: cec: meson: always include meson sub-directory in Makefile 2023-11-20 11:59:33 +01:00
memory memory: tegra: Set BPMP msg flags to reset IPC channels 2023-11-20 11:59:17 +01:00
memstick
message
mfd mfd: arizona-spi: Set pdata.hpdet_channel for ACPI enumerated devs 2023-11-20 11:59:24 +01:00
misc misc: st_core: Do not call kfree_skb() under spin_lock_irqsave() 2023-11-20 11:59:26 +01:00
mmc Revert "mmc: core: Capture correct oemid-bits for eMMC cards" 2023-11-20 11:59:39 +01:00
most
mtd In the raw NAND subsystem, the major fix prevents using cached reads 2023-10-20 13:12:34 -07:00
mux
net wifi: ath10k: Don't touch the CE interrupt registers after power up 2023-11-28 17:19:38 +00:00
nfc
ntb
nubus
nvdimm nd_btt: Make BTT lanes preemptible 2023-11-20 11:59:19 +01:00
nvme nvme: fix error-handling for io_uring nvme-passthrough 2023-11-20 11:59:35 +01:00
nvmem nvmem: imx: correct nregs for i.MX6ULL 2023-10-16 21:00:08 +02:00
of of: overlay: Reorder struct fragment fields kerneldoc 2023-10-02 11:34:23 -05:00
opp
parisc
parport
pci ACPI: APEI: Fix AER info corruption when error status data has multiple sections 2023-11-28 17:19:37 +00:00
pcmcia pcmcia: ds: fix possible name leak in error path in pcmcia_device_add() 2023-11-20 11:59:31 +01:00
peci
perf arm64/arm: arm_pmuv3: perf: Don't truncate 64-bit registers 2023-11-20 11:59:38 +01:00
phy phy fixes for 6.6 2023-10-22 07:11:10 -10:00
pinctrl pinctrl: renesas: rzg2l: Make reverse order of enable() for disable() 2023-11-20 11:59:25 +01:00
platform platform/chrome: cros_ec_lpc: Separate host command and irq disable 2023-11-20 11:59:08 +01:00
pmdomain pmdomain: imx: scu-pd: correct DMA2 channel 2023-10-05 00:28:52 +02:00
pnp
power power: supply: core: Use blocking_notifier_call_chain to avoid RCU complaint 2023-11-08 11:56:20 +01:00
powercap powercap: intel_rapl: Fix invalid setting of Power Limit 4 2023-09-06 22:21:22 +02:00
pps
ps3
ptp ptp: ocp: Fix error handling in ptp_ocp_device_init 2023-10-02 07:19:22 +01:00
pwm pwm: brcmstb: Utilize appropriate clock APIs in suspend/resume 2023-11-20 11:59:34 +01:00
rapidio
ras
regulator regulator: qcom-rpmh: Fix smps4 regulator for pm8550ve 2023-11-20 11:59:07 +01:00
remoteproc remoteproc updates for v6.6 2023-09-04 15:12:26 -07:00
reset
rpmsg rpmsg updates for v6.6 2023-09-04 15:08:52 -07:00
rtc rtc: pcf85363: fix wrong mask/val parameters in regmap_update_bits call 2023-11-20 11:59:30 +01:00
s390 s390/ap: re-init AP queues on config on 2023-11-20 11:59:28 +01:00
sbus
scsi scsi: ibmvfc: Fix erroneous use of rtas_busy_delay with hcall return code 2023-11-20 11:59:19 +01:00
sh
siox
slimbus
soc soc: qcom: pmic_glink: fix connector type to be DisplayPort 2023-11-20 11:59:17 +01:00
soundwire soundwire: bus: Make IRQ handling conditionally built 2023-09-21 11:31:33 +02:00
spi spi: spi-zynq-qspi: add spi-mem to driver kconfig dependencies 2023-11-20 11:59:38 +01:00
spmi
ssb
staging media: cedrus: Fix clock/reset sequence 2023-11-20 11:59:32 +01:00
target scsi: target: core: Fix deadlock due to recursive locking 2023-09-27 10:55:29 -04:00
tc
tee ARM: SoC fixes for 6.6, part 2 2023-10-12 11:52:23 -07:00
thermal thermal: core: Don't update trip points inside the hysteresis range 2023-11-20 11:59:01 +01:00
thunderbolt thunderbolt: Fix for v6.6-rc7 2023-10-17 19:25:42 +02:00
tty tty: tty_jobctrl: fix pid memleak in disassociate_ctty() 2023-11-20 11:59:25 +01:00
ufs scsi: ufs: core: Leave space for '\0' in utf8 desc string 2023-11-20 11:59:22 +01:00
uio
usb usb: host: xhci-plat: fix possible kernel oops while resuming 2023-11-20 11:59:29 +01:00
vdpa vdpa/mlx5: Fix firmware error on creation of 1k VQs 2023-10-18 11:29:41 -04:00
vfio vfio/mdev: Fix a null-ptr-deref bug for mdev_unregister_parent() 2023-09-22 12:48:04 -06:00
vhost vhost: Allow null msg.size on VHOST_IOTLB_INVALIDATE 2023-10-18 11:29:56 -04:00
video fbdev: fsl-diu-fb: mark wr_reg_wa() static 2023-11-20 11:59:38 +01:00
virt virt: sevguest: Fix passing a stack buffer as a scatterlist target 2023-11-20 11:59:30 +01:00
virtio virtio_pci: fix the common cfg map size 2023-10-18 11:30:12 -04:00
vlynq
w1 w1: ds2482: Switch back to use struct i2c_driver's .probe() 2023-09-13 10:48:42 +02:00
watchdog watchdog: ixp4xx: Make sure restart always works 2023-11-20 11:59:34 +01:00
xen xen-pciback: Consider INTx disabled when MSI/MSI-X is enabled 2023-11-20 11:59:12 +01:00
zorro
Kconfig Merge patch series "Add non-coherent DMA support for AX45MP" 2023-09-08 11:24:34 -07:00
Makefile pmdomain: Rename the genpd subsystem to pmdomain 2023-09-13 11:09:21 +02:00