[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