[PATCH] spi: mediatek: Enable irq when pdata is ready
Daniel Golle
daniel at makrotopia.org
Sat Dec 24 11:02:14 PST 2022
Hi Ricardo,
Hi Mark,
On Mon, Nov 28, 2022 at 05:28:51PM +0000, Mark Brown wrote:
> On Mon, 28 Nov 2022 12:00:01 +0100, Ricardo Ribalda wrote:
> > If the device does not come straight from reset, we might receive an IRQ
> > before we are ready to handle it.
> >
> > Fixes:
> >
> > [ 0.832328] Unable to handle kernel read from unreadable memory at virtual address 0000000000000010
> > [ 1.040343] Call trace:
> > [ 1.040347] mtk_spi_can_dma+0xc/0x40
> > ...
> > [ 1.262265] start_kernel+0x338/0x42c
> >
> > [...]
>
> Applied to
>
> https://git.kernel.org/pub/scm/linux/kernel/git/broonie/spi.git for-next
>
> Thanks!
>
> [1/1] spi: mediatek: Enable irq when pdata is ready
> commit: c6f7874687f7027d7c4b2f53ff6e4d22850f915d
>
Testing next-20221220 on the BananaPi BPi-R3 MT7986 board it turns
out that this commit is *causing* a kernel oops and strack trace output
actually quite similar to what is described in the commit message:
...
[ 2.074496] mtk-spi 1100a000.spi: spi-mem transfer timeout
[ 2.080064] spi-nor: probe of spi0.0 failed with error -110
[ 2.085830] Unable to handle kernel NULL pointer dereference at virtual address 0000000000000010
[ 2.094624] Mem abort info:
[ 2.097418] ESR = 0x0000000096000005
[ 2.101162] EC = 0x25: DABT (current EL), IL = 32 bits
[ 2.106466] SET = 0, FnV = 0
[ 2.109521] EA = 0, S1PTW = 0
[ 2.111511] mtk_soc_eth 15100000.ethernet eth0: mediatek frame engine at 0xffffffc00e280000, irq 121
[ 2.112653] FSC = 0x05: level 1 translation fault
[ 2.112659] Data abort info:
[ 2.121921] mtk_soc_eth 15100000.ethernet: generated random MAC address ba:0e:79:b6:0a:83
[ 2.126628] ISV = 0, ISS = 0x00000005
[ 2.126631] CM = 0, WnR = 0
[ 2.126635] [0000000000000010] user address but active_mm is swapper
[ 2.126724] Internal error: Oops: 0000000096000005 [#1] SMP
[ 2.130647] mtk_soc_eth 15100000.ethernet eth1: mediatek frame engine at 0xffffffc00e280000, irq 121
[ 2.137739] Modules linked in:
[ 2.137748] CPU: 0 PID: 0 Comm: swapper/0 Not tainted 6.1.0-next-20221220+ #0
[ 2.137753] Hardware name: Bananapi BPI-R3 (DT)
[ 2.137756] pstate: 600000c5 (nZCv daIF -PAN -UAO -TCO -DIT -SSBS BTYPE=--)
[ 2.142036] i2c_dev: i2c /dev entries driver
[ 2.144530] pc : mtk_spi_can_dma+0x0/0x2c
[ 2.144541] lr : mtk_spi_interrupt+0x60/0x350
[ 2.144545] sp : ffffffc008003ec0
[ 2.144547] x29: ffffffc008003ec0 x28: ffffffc008eb67c8 x27: 0000000000012400
[ 2.152967] NET: Registered PF_INET6 protocol family
[ 2.156435] x26: 0000000000000400 x25: 0000000000000076 x24: ffffff80072dac00
[ 2.156443] x23: 0000000000000000 x22: ffffffc008d33008 x21: 0000000000000000
[ 2.156450] x20: ffffff8007b67000 x19: ffffff8007b67880 x18: 0000000000000002
[ 2.156457] x17: ffffffc076e23000
[ 2.166540] Segment Routing with IPv6
[ 2.168599] x16: ffffffc008004000 x15: 0000000000004000
[ 2.168605] x14: 0000000000000000 x13: 00000000000001dd
[ 2.175768] In-situ OAM (IOAM) with IPv6
[ 2.180229] x12: 00000000000001dd
[ 2.187232] NET: Registered PF_PACKET protocol family
[ 2.191417] x11: 0000000000000040 x10: 0000000000000000
[ 2.195594] 8021q: 802.1Q VLAN Support v1.8
[ 2.199745] x9 : ffffffc076e23000
[ 2.216379] pstore: Using crash dump compression: deflate
[ 2.222225] x8 : 00000000f04bc9a3 x7 : 0000000000000000 x6 : 0000000000000002
[ 2.222233] x5 : 0000000000000003 x4 : 0000000000000001
[ 2.245403] mtk-pcie-gen3 11280000.pcie: host bridge /soc/pcie at 11280000 ranges:
[ 2.248702] x3 : ffffffc008672704
[ 2.248705] x2 : 0000000000000000 x1 : 0000000000000000 x0 : ffffff8007b67000
[ 2.253927] mtk-pcie-gen3 11280000.pcie: Parsing ranges property...
[ 2.257818]
[ 2.257820] Call trace:
[ 2.257822] mtk_spi_can_dma+0x0/0x2c
[ 2.257828] __handle_irq_event_percpu+0xa8/0x340
[ 2.257835] handle_irq_event+0x48/0xd0
[ 2.257840] handle_fasteoi_irq+0xa0/0x1dc
[ 2.261241] mtk-pcie-gen3 11280000.pcie: MEM 0x0020000000..0x002fffffff -> 0x0020000000
[ 2.266255] generic_handle_domain_irq+0x28/0x40
[ 2.266260] gic_handle_irq+0x4c/0x124
[ 2.357698] call_on_irq_stack+0x2c/0x40
[ 2.361612] do_interrupt_handler+0x78/0x84
[ 2.365783] el1_interrupt+0x30/0x4c
[ 2.369351] el1h_64_irq_handler+0x14/0x20
[ 2.373434] el1h_64_irq+0x64/0x68
[ 2.376825] arch_cpu_idle+0x14/0x20
[ 2.380389] default_idle_call+0x68/0xe0
[ 2.384302] do_idle+0xe8/0x140
[ 2.387434] cpu_startup_entry+0x24/0x30
[ 2.391345] rest_init+0x120/0x1a0
[ 2.394735] arch_post_acpi_subsys_init+0x0/0x8
[ 2.399254] start_kernel+0x68c/0x6ac
[ 2.402905] __primary_switched+0xb4/0xbc
[ 2.406909] Code: 17ffffd3 12003c23 12103c24 17ffffe7 (b9401041)
[ 2.412987] ---[ end trace 0000000000000000 ]---
[ 2.419401] pstore: backend (ramoops) writing error (-28)
[ 2.420889] mtk-pcie-gen3 11280000.pcie: set MEM trans window[0]: cpu_addr = 0x20000000, pci_addr = 0x20000000, size = 0x10000000
[ 2.424785] Kernel panic - not syncing: Oops: Fatal exception in interrupt
[ 2.424788] SMP: stopping secondary CPUs
[ 2.424794] Kernel Offset: disabled
[ 2.424796] CPU features: 0x00000,00000008,0000400b
[ 2.424799] Memory Limit: none
[ 2.460293] Rebooting in 1 seconds..
Reverting the above commit fixes the issue and results in normal boot:
[daniel at box linux.git]$ git revert c6f7874687f70
Auto-merging drivers/spi/spi-mt65xx.c
hint: Waiting for your editor to close the file...
[mt7986-wip a1aafac27c46d] Revert "spi: mediatek: Enable irq when pdata is ready"
1 file changed, 5 insertions(+), 7 deletions(-)
...
[ 1.045904] spi-nor spi0.0: w25q256 (32768 Kbytes)
[ 1.063603] 6 fixed-partitions partitions found on MTD device spi0.0
[ 1.070099] OF: Bad cell count for /soc/spi at 1100a000/flash at 0/partitions
[ 1.076799] OF: Bad cell count for /soc/spi at 1100a000/flash at 0/partitions
[ 1.084180] Creating 6 MTD partitions on "spi0.0":
[ 1.089011] 0x000000c00000-0x000002000000 : "fit"
[ 1.096514] 0x000000180000-0x000000c00000 : "recovery"
[ 1.103853] 0x000000100000-0x000000180000 : "fip"
[ 1.110685] 0x000000080000-0x000000100000 : "reserved2"
[ 1.118762] 0x000000040000-0x000000080000 : "u-boot-env"
[ 1.126593] 0x000000000000-0x000000040000 : "bl2"
...
Best regards
Daniel
More information about the Linux-mediatek
mailing list