【SemeDrive】【X9HP】【PTG4.3】在 ap1 打開 spi7 時鐘後出現 kernel panic

前言:需要在 ap1 domain(android)使用 spi7,根據資源劃分,spi7 是屬於 ap1 domain 的資源,但在 ap1 打開時鐘後出現了 kernel panic。以下描述此問題的分析及解決。


一、問題描述

1. 在 x9_high-plus_ms_native_ivi_serdes_virt_emmc_8g.dts 添加 spi6(物理 spi7 對應設備樹 spi6)子節點,在 x9_high_ms_ivi-clk-ctrl.dtsi 打開對應時鐘:



2. make dtb,替換固件

3. 系統啟動報錯:

key node: start native android!
[ 0.000000] Synchronous External Abort: synchronous external abort (0x96000010) at 0xffff000009d19000
[ 0.000000] Internal error: : 96000010 [#1] PREEMPT SMP
[ 0.000000] Modules linked in:
[ 0.000000] CPU: 0 PID: 0 Comm: swapper/0 Not tainted 4.14.61-03589-g400dce2-dirty #1
[ 0.000000] Hardware name: Semidrive kunlun x9 MS Board (DT)
[ 0.000000] task: ffff0000091e7880 task.stack: ffff0000091d0000
[ 0.000000] PC is at sdclk_mux_get_parent+0x3c/0xd0
[ 0.000000] LR is at sdclk_mux_get_parent+0x14/0xd0
[ 0.000000] pc : [<ffff0000085dcccc>] lr : [<ffff0000085dcca4>] pstate: 80000085
[ 0.000000] sp : ffff0000091d3c70
[ 0.000000] Process swapper/0 (pid: 0, stack limit = 0xffff0000091d0000)
[ 0.000000] Call trace:
[ 0.000000] Exception stack(0xffff0000091d3b30 to 0xffff0000091d3c70)
[ 0.000000] [<ffff0000085dcccc>] sdclk_mux_get_parent+0x3c/0xd0
[ 0.000000] [<ffff0000085db9dc>] sd_clk_composite_get_parent+0x2c/0x34
[ 0.000000] [<ffff0000085d2108>] clk_register+0x380/0x968
[ 0.000000] [<ffff0000085d26fc>] clk_hw_register+0xc/0x1c
[ 0.000000] [<ffff0000085db944>] sd_clk_hw_register_composite+0x208/0x274
[ 0.000000] [<ffff0000085dbe9c>] sd_clk_register_composite+0x20/0x38
[ 0.000000] [<ffff0000085dc9ac>] sdrv_register_out_composite+0x2b0/0x3d0

[ 0.000000] [<ffff00000910a8cc>] sdrv_ckgen_clk_init+0x16c/0x2a8
[ 0.000000] [<ffff000009108f40>] of_clk_init+0x13c/0x1f4
[ 0.000000] [<ffff0000090c45a4>] time_init+0x10/0x4c
[ 0.000000] [<ffff0000090c0770>] start_kernel+0x2ac/0x424
[ 0.000000] Code: 3868692b 8b0b094a d61f0140 f85a8268 (b9400108)
[ 0.000000] Unable to handle kernel paging request at virtual address 8001f6ccc004

二、問題分析

1. 根據函數調用棧可確定,系統剛起來,初始化時鐘時,在配置 register 時出現致命錯誤。錯誤類型:Unable to handle kernel paging request at virtual address 8001f6ccc004表明訪問了不可訪問的地址

    由於只替換了 dtb,並且在 start_kernel 時出錯,排除類似空指針內存越界等等常見問題,初步懷疑 SPI 時鐘非 ap1 domian 資源,因此在 ap1 初始化時鐘時出現非法訪問錯誤

2. 在晶片電路設計上,spi 的時鐘由 safety domain 提供,但在 PTG4.0 及之前的基線上,ap domain 可正常使用 safety 提供的時鐘,因此主要排查 PTG4.0 和 PTG4.3 的區別

3. 結合上一條博文《【SemeDrive】【X9H】【PTG4.3】將 spi6 資源調整至 safety 後出現 cpu 0 data abort》 的分析,ptg4.3 的 ssystem 的防火牆設置導致資源無法通過一些方法進行跨域訪問。


三、問題解決

ssystem 不開源,聯繫 FAE 替換為關掉防火牆的 ssystem.bin,即可正常初始化 spi 時鐘。關掉部分模塊防火牆的功能在 ptg4.4 以上版本提供。


總結:ssystem 的防火牆導致了  ap1 打開 spi7 時鐘後出現了 kernel panic,關掉 ssystem 的防火牆即可。

★博文內容均由個人提供,與平台無關,如有違法或侵權,請與網站管理員聯繫。

★文明上網,請理性發言。內容一周內被舉報5次,發文人進小黑屋喔~

評論