【SemeDrive】【X9H】【PTG4.3】将 spi6 资源调整至 safety 后出现 cpu 0 data abort

前言:X9HP ptg4.3 在将 spi6 资源调整至 safety 后出现 cpu 0 data abort

【问题详述】:
在将 spi6 资源从 ap 调整到 safety 后,调用 hal_spi_creat_handle() 函数时出现异常报告:cpu 0 data abort, synchronous external abort on write。

【过程分析】:

  1. 调整资源:根据文档《SemiDrive_基于Domain的资源分配指南_Rev0.5.pdf》修改代码。

  2. 开启 spi_hal 和 spi_demo:在 safety 中打开 SUPPORT_SPI_MASTER_DEMO 和 SUPPORT_SPI_MASTER_SDDRV 编译 spi_demo 命令。
  3. 确认问题:根据日志确认,在操作 spi6 的寄存器时,safety 出现了 cpu data abort。



  4. 分析 hal_spi_creat_handle 函数:该函数会遍历资源列表中的 spi,进行寄存器的 hw_init 操作。访问 spi6 寄存器导致系统崩溃,怀疑资源还没有真正调整到 safety。
    1. 在 ap1 设备树中使能 spi6 的时钟,启动时系统崩溃报 synchronous external abort,说明资源也不在 ap1 上,domain_res.h 的配置生效。
    2. 恢复默认的资源分配(spi6 在 ap1),调用 hal_spi_creat_handle,程序正常运行,说明 safety 的 spi 驱动和 hal 没问题。
    3. 分阶段定位问题:在 soc_init、control_pannel app 中都调用 hal_spi_creat_handle,前者正常,后者 cpu data abort,说明问题是在 dil2 之后出现的。
    4. 擦除 ap1 和 ap2 的所有固件(包括 preloader),症状和前述一样,说明问题和 ap1、ap2 无关。
    5. 排查 secure:在 boot_secure 函数前后分别调用 hal_spi_creat_handle,前者正常,后者 cpu data abort,说明问题的出现和 secure 的 ssystem 有关。
    6. 相同的配置在 ptg4.0 可行,在 ptg4.3 出错。怀疑 ptg4.3 的 ssystem 做了更改,替换 ptg4.0 的 ssystem.bin,访问 spi6 正常,但因版本不适配,两三秒后系统崩溃。
    7. 芯驰关闭 ssystem 防火墙后重编 ssystem,替换烧录到板子上,问题解决。




【解决方案】:


ptg4.3 开启了防火墙导致 safety 访问 spi6 失败,关闭防火墙并重新编译 ssystem 即可成功将 spi6 资源切换到 safety。




总结:X9HP ptg4.3 在将 spi6 资源调整至 safety 后出现 cpu 0 data abort 是防火墙导致的,关闭 secure 的防火墙就好了。

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

评论