【SA8295P 源码分析】03 - SA8295P QNX Host上电开机流程分析

【SA8295P 源码分析】03 - SA8295P QNX Host上电开机流程分析

  • 一、阶段1 固件开机自检 (SM BIST):APPS PBL加载XBL后触发 INT_RESET进行Warm Reset
  • 二、阶段2 固件开机自检 (SM BIST):加载TZ,初始Hypervisor,启动QNX Kernel,加载并启动各子系统



系列文章汇总见:《【SA8295P 源码分析】00 - 系列文章链接汇总》
本文链接:《【SA8295P 源码分析】03 - SA8295P QNX Host 上电开机流程分析》


一、阶段1 固件开机自检 (SM BIST):APPS PBL加载XBL后触发 INT_RESET进行Warm Reset

在这里插入图片描述

  • 1 . 按下开机键,触发复位信号,高通®Kryo™CPU Gold core 0 核 心 CPU0 退出Reset状态,开始执行 APPS PBL
    初始化硬件(定时器、PRNG、时钟等等),启用caches 缓存和MMU,并根据BOOT PIN 配置检测引导设备:
    默认启动设备为:UFS Extern Storage外置存储
    默认启动选项:被EDL cookie覆盖 或 通过USB GPIO强制配置

  • 2a . APPS PBL 从引导设备bootdevice 加载并验证 XBL Loader 镜像(region #1)到 Boot IMEM 中。 (xbl_a分区中的xbl.elf 镜像)

  • 2b . APPS PBL 从引导设备bootdevice 加载并验证 XBL SDI 镜像(region #2)到 OCIMEM中(片上内部存储器 On-Chip Internal Memory

  • 2c . APPS PBL 从引导设备bootdevice 加载 XBL SEC镜像(region #0)到 Boot IMEM 中,(xbl_sec 分区中的 xbl_sec.mbn 镜像)
    XBL SEC 是一个QC签名的ELF代码段,用于锁定xPUs

  • 3 . XBL SEC跳到 XBL并将 CPU 控制 从 Secure EL3 安全等级3环境 切换到 Non-Secure EL1 非安全等级1环境

  • 4a . 在阶段1引导中,XBL执行SMSS MBIST 进行内存自检(Memory BIST)和 SMSS LBIST进行逻辑自检(Logic BIST),
    加载并验证SMSSCSM内存中的SMSS FW 固件,并Reset SMSS 触发SMSS 运行,
    然后APXBL Loader)将 CPU 控制权移交给SMSS(安全管理) (smss_a中的smss.elf镜像),并进入WFI 待机模式 (standby 模式 Wait For Interrupt)。
    此时,SMSS 将分别在APIMEMLLCCSMMUGEMNOC 这些区域上执行BIST 内存自检。

  • 5 . 自检完成后,在没有PMIC的情况下,整个芯片触发 INT_RESET,进行 Warm Reset 操作
    之所以进行 Warm Reset ,是保持供电,以便保持之前初始化过的一些 TCSR寄存器和 SMSS IMEM/registers的状态。


二、阶段2 固件开机自检 (SM BIST):加载TZ,初始Hypervisor,启动QNX Kernel,加载并启动各子系统


在这里插入图片描述

在阶段一中,整个芯片启动 INT_RESET,启动warm reset ,此时,APPS PBL 代码会重新跑一遍。
详细过程如下:

  • 2a . APPS PBL 从引导设备bootdevice 加载并验证 XBL Loader 镜像(region #1)到 Boot IMEM 中。 (xbl_a分区中的xbl.elf 镜像)

  • 2b . APPS PBL 从引导设备bootdevice 加载并验证 XBL SDI 镜像(region #2)到 OCIMEM中(片上内部存储器 On-Chip Internal Memory

  • 2c . APPS PBL 从引导设备bootdevice 加载 XBL SEC镜像(region #0)到 Boot IMEM 中,(secdata 分区中的 sec.dat
    XBL SEC 是一个QC签名的ELF代码段,用于锁定xPUs

  • 3 . XBL SECEL3模式下运行Security Configuration 启动SMSSsmss_a中的smss.elf镜像),然后跳转到 EL1 非安全环境 并运行XBL Loader

  • 4 . XBL Loader CPU控制权移交给 SMSS 并进入WFI 模式。
    SMSS将分别在DPUCameraCamNocNSPEthernet以太网、PCIe上执行BIST
    自检完毕后,将 CPU 控制权交回给 XBL Loader
    接着 XBL Loaders 继续正常的冷启动流程

  • 4b . XBL Loader 加载和校验 XBL Config 镜像到 BOOT IMEM 中 (xbl_config_a分区中的xbl_config.elf 镜像)

  • 4c . XBL Loader 加载Shrm 镜像到 Code RAM 中(shrm_a分区中的 shrm.elf 镜像)

  • 4d . XBL Loader 加载并验证 MISC 镜像到 BOOT IMEM

  • 4e . XBL Loader 从引导设备 boot device 加载并验证 AOP 镜像 到 AOP CodeRAM 中 (aop_a 分区中的 aop.mbn 镜像)

  • 4f . XBL Loader 触发 AOP 实时响应处理器 Reset ,开始 AOP CodeRAM 中跑 AOP代码

  • 4g . XBL Loader 加载并验证 QSEE 镜像到 pIMEM 中(tz_a 分区中的 tz.mbn

  • 4h . XBL Loader 加载并验证 QHEE 镜像(hyp_a 分区中的 mifs_hyp_la.img 镜像,用于 hypervisor 虚拟化)

  • 4i . XBL LoaderXBL 镜像中加载并验证 UEFI Segment 代码段

  • 4j . XBL Loader 从跳转到 XBL_SEC ,由 XBL_SECCPU 交到 QSEE (TrustZone)手中

  • 5 . QSEETZ)将CPU 转交到 QHEEhypervisor),高通Hypervisor 运行在 EL2 模式,QHEE 配置 SMMUs,并提供虚拟化服务

  • 6 . 高通 Hypervisor 执行 XBLcore 代码(位于 region #3 中),它是在 Non-sec EL1 非安全模式下运行的,
    UEFI 外围镜像加载器(UEFI peripheral image loader (PIL))挂载并运行 ABL firmware volume(FV)固件(abl_a中的 abl_fastboot.elf abl.elf),其中包含 FastbootLinux Loader 应用程序

  • 7 . Linux Loader 应用程序(位于abl.elf镜像)通过 verified boot 加载并验证 HLOS Kernel 镜像(对应 boot_a 中的 boot_la.img,它是 QNX Host Kernel 微内核),HLOS Kernel 运行在 Non-Sec EL1 模式下

  • 8 . HLOS PIL driver (QNX) 将所有子系统 Iris FWCamera FWAudio FWSensor FWTuring FWDeep Learning FW 的镜像加载到DDR,并相应的配置时钟和电源。HLOS PIL driver (QNX) 执行对QSEE (TrustZone)SCM 系统调用,以请求一个安全的 PIL driver,用于验证各子系统的镜像,然后 高通 Hypervisor 触发每个子系统进行 Reset 启动


注意,此时只是 QNX Host 启动起来了,运行在 EL1 环境中,IVI Android Guest 还没启动呢,GVM 是运行在 EL0 中的





你可能感兴趣的:(车芯,SA8295P,源码分析,SA8295P,QAM8295P)