kernel crash using fbtft / SPI on Orange Pi zero board, armbian

From: jon
Date: Fri Sep 15 2017 - 19:39:03 EST


I am trying to use an LCD connected via SPI on an Orange Pi zero board.
It works, for a while, then crashes.

armbian forum thread here:
https://forum.armbian.com/index.php?/topic/5067-orange-pi-zero-fbtft-unreliable/


root@orangepizero:~# uname -a
Linux orangepizero 3.4.113-sun8i #12 SMP PREEMPT Fri Sep 15 00:26:14 CEST 2017 armv7l armv7l armv7l GNU/Linux


The LCD initially works, but fbtft stops updating the LCD framebuffer
after a few mins use. The more frequent the framebuffer updates the
faster it is to lockup.

In this case advmame is running pacman, works for <2mins. advmame is
built from source on the ARM board itself. This source and the LCD
module itself work without issues on Raspberry Pi boards.

dmesg shows the following:

[ 113.076235] warning: process `advmame' used the deprecated sysctl system call with 8.1.2.
[ 361.030206] INFO: task kworker/u:0:5 blocked for more than 120 seconds.
[ 361.030258] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
[ 361.030303] kworker/u:0 D c061c3a4 0 5 2 0x00000000
[ 361.030452] [<c061c3a4>] (__schedule+0x574/0x7fc) from [<c061c6bc>] (schedule+0x90/0x94)
[ 361.030540] [<c061c6bc>] (schedule+0x90/0x94) from [<c061a5fc>] (schedule_timeout+0x2c/0x2bc)
[ 361.030629] [<c061a5fc>] (schedule_timeout+0x2c/0x2bc) from [<c061bb98>] (wait_for_common+0x120/0x168)
[ 361.030719] [<c061bb98>] (wait_for_common+0x120/0x168) from [<c061bc00>] (wait_for_completion+0x20/0x24)
[ 361.030817] [<c061bc00>] (wait_for_completion+0x20/0x24) from [<c03e944c>] (sunxi_spi_work+0x748/0x88c)
[ 361.030918] [<c03e944c>] (sunxi_spi_work+0x748/0x88c) from [<c00445a0>] (process_one_work+0x248/0x404)
[ 361.031011] [<c00445a0>] (process_one_work+0x248/0x404) from [<c00459d8>] (worker_thread+0x1b4/0x2d0)
[ 361.031105] [<c00459d8>] (worker_thread+0x1b4/0x2d0) from [<c0049cf0>] (kthread+0x94/0xa0)
[ 361.031201] [<c0049cf0>] (kthread+0x94/0xa0) from [<c000f1b0>] (kernel_thread_exit+0x0/0x8)
[ 361.031273] INFO: task kworker/1:1:25 blocked for more than 120 seconds.
[ 361.031313] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
[ 361.031355] kworker/1:1 D c061c3a4 0 25 2 0x00000000
[ 361.031466] [<c061c3a4>] (__schedule+0x574/0x7fc) from [<c061c6bc>] (schedule+0x90/0x94)
[ 361.031551] [<c061c6bc>] (schedule+0x90/0x94) from [<c061a5fc>] (schedule_timeout+0x2c/0x2bc)
[ 361.031637] [<c061a5fc>] (schedule_timeout+0x2c/0x2bc) from [<c061bb98>] (wait_for_common+0x120/0x168)
[ 361.031726] [<c061bb98>] (wait_for_common+0x120/0x168) from [<c061bc00>] (wait_for_completion+0x20/0x24)
[ 361.031816] [<c061bc00>] (wait_for_completion+0x20/0x24) from [<c03e62c4>] (spi_sync+0x84/0xa0)
[ 361.031958] [<c03e62c4>] (spi_sync+0x84/0xa0) from [<bf1ed34c>] (fbtft_write_spi+0xf0/0x104 [fbtft])
[ 361.032136] [<bf1ed34c>] (fbtft_write_spi+0xf0/0x104 [fbtft]) from [<bf1ed208>] (fbtft_write_vmem16_bus8+0x11c/0x138 [fbtft])
[ 361.032295] [<bf1ed208>] (fbtft_write_vmem16_bus8+0x11c/0x138 [fbtft]) from [<bf1ea918>] (fbtft_update_display+0x150/0x2fc [fbtft])
[ 361.032445] [<bf1ea918>] (fbtft_update_display+0x150/0x2fc [fbtft]) from [<bf1ea2a8>] (fbtft_deferred_io+0x110/0x11c [fbtft])
[ 361.032573] [<bf1ea2a8>] (fbtft_deferred_io+0x110/0x11c [fbtft]) from [<c038860c>] (fb_deferred_io_work+0x84/0xcc)
[ 361.032670] [<c038860c>] (fb_deferred_io_work+0x84/0xcc) from [<c00445a0>] (process_one_work+0x248/0x404)
[ 361.032760] [<c00445a0>] (process_one_work+0x248/0x404) from [<c00459d8>] (worker_thread+0x1b4/0x2d0)
[ 361.032850] [<c00459d8>] (worker_thread+0x1b4/0x2d0) from [<c0049cf0>] (kthread+0x94/0xa0)
[ 361.032940] [<c0049cf0>] (kthread+0x94/0xa0) from [<c000f1b0>] (kernel_thread_exit+0x0/0x8)
[ 361.033053] INFO: task advmame:1561 blocked for more than 120 seconds.
[ 361.033093] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
[ 361.033135] advmame D c061c3a4 0 1561 1517 0x00000000
[ 361.033246] [<c061c3a4>] (__schedule+0x574/0x7fc) from [<c061c6bc>] (schedule+0x90/0x94)
[ 361.033333] [<c061c6bc>] (schedule+0x90/0x94) from [<c061caac>] (schedule_preempt_disabled+0x30/0x40)
[ 361.033425] [<c061caac>] (schedule_preempt_disabled+0x30/0x40) from [<c061b290>] (__mutex_lock_slowpath+0x160/0x1a8)
[ 361.033518] [<c061b290>] (__mutex_lock_slowpath+0x160/0x1a8) from [<c061b33c>] (mutex_lock+0x64/0x7c)
[ 361.033607] [<c061b33c>] (mutex_lock+0x64/0x7c) from [<c03884f8>] (fb_deferred_io_mkwrite+0x2c/0xbc)
[ 361.033699] [<c03884f8>] (fb_deferred_io_mkwrite+0x2c/0xbc) from [<c00ff630>] (do_wp_page+0x224/0x7a4)
[ 361.033789] [<c00ff630>] (do_wp_page+0x224/0x7a4) from [<c0101210>] (handle_pte_fault+0x7b0/0x838)
[ 361.033874] [<c0101210>] (handle_pte_fault+0x7b0/0x838) from [<c0101390>] (handle_mm_fault+0xf8/0x134)
[ 361.033961] [<c0101390>] (handle_mm_fault+0xf8/0x134) from [<c001b180>] (do_page_fault+0x11c/0x344)
[ 361.034047] [<c001b180>] (do_page_fault+0x11c/0x344) from [<c00083a8>] (do_DataAbort+0x44/0xa8)
[ 361.034132] [<c00083a8>] (do_DataAbort+0x44/0xa8) from [<c000dcd8>] (__dabt_usr+0x38/0x40)
[ 361.034184] Exception stack(0xd719ffb0 to 0xd719fff8)
[ 361.034237] ffa0: 00000000 00000000 b5aa3000 0445f912
[ 361.034307] ffc0: 00000000 00000000 b5aa3000 00000000 00000001 0000000b 0000f800 0000001f
[ 361.034374] ffe0: 00000120 bef33fc8 fffffe00 0003d094 68000030 ffffffff

I am not a linux kernel hacker, just posting here to draw attention to
it :-)

Thanks,
Jon