【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次,发文人进小黑屋喔~

评论