DSP

高通MSM8937/ MSM8953/MSM8940/MSM8920/MSM8917启动流程简介

2019-07-13 20:20发布

说明: 本文讲解了关于MSM8937 / MSM8953 MSM8940 / MSM8920 / MSM8917芯片组启动架构的概述 处理器启动地址 下面表格包括了MSM8937/MSM8953//MSM8940/MSM8920/MSM8917 芯片组包含的处理器. 处理器类型和启动地址. 子系统/处理器 处理器 启动地址 APPS
Applications
应用 Cortex-A53 0x00100000* RPM
Resource power Manager
资源功耗管理 Cortex-M3 0x00200000(子系统的视角) 0x0(系统的视角) Modem
基带 MSS_QDSP6 可配置的* WCNSS (Pronto) ARM9 0x0 or 0xFFFF0000 or 硬件重新映射* LPASS
低功耗音频子系统
(ADSP) LPASS_QDSP6 可配置的* LPASS   *系统和子系统视角中的引导地址没有变化 启动调用堆栈 TCM :Tightly-Coupled Memory,紧耦合内存 Some ARM SoCs have a so-called TCM (Tightly-Coupled Memory). This is usually just a few (4-64) KiB of RAM inside the ARM processor.  一些arm socs所谓的TCM(紧耦合的内存),通常是指ARM处理器内部的几个仅有(4 - 64)kb RAM CDT: Configuration Data Table,包含CDB0: platform info信息和CDB1: DDR配置参数。 PIL:Peripheral image loader 外围设备镜像加载器 HLOS: High-level operation system,高级操作系统,指包括Linux内核在内的整个Android系统 组成 基于处理器 加载自 执行在 功能 Application processor primary boot loader
(APPS PBL)
应用处理器PBL
芯片内部代码 Cortex-A53
(AArch32) NA APPS ROM §启动设备和接口检测
§紧急下载模式支持
§加载并验证SBL1镜像片段在L2TCM和RPM code RAM
Loads andauthenticates SBL1 ELF segments across L2TCMand RPM code RAM Secondary boot loader stage 1 (SBL1)
二级引导加载程序阶段1
sbl1.mbn Cortex-A53
(AArch32) eMMC L2 TCM
(分段1) L2 TCM 初始化内存子系统 (buses, DDR, clocks, and CDT)
§加载/鉴定TrustZone, DEVCFG, RPM_FW, APPS BL 镜像(lk), memory dump 通过 USB 2.0 和 Sahara
§看门狗调试保留, 比如, L2 刷新
§RAM dump到eMMC/SD的支持, USB driver 的支持, USB 充电,温度检测, PMIC driver 的支持, 配置 DDR, and 刷新 L1/L2/ETB到崩溃调试
§支持相关的配置 OCIMEM(不懂) - RPM code RAM
(分段2) RPM code RAM QSEE/TrustZone
tz.mbn Cortex-A53
(AArch64) eMMC LPDDR3 相当于 TZBSP
§建立安全运行环境,
§配置 xPU,
§支持 fuse driver
§验证一些子系统镜像
§添加异常复位调试功能 DEVCFG
devcfg.mbn Cortex-A53
(AArch64) eMMC LPDDR3 §OEM配置数据, 比如, xPU 配置
§PIL 加载镜像区 Debug policy1
(不知道是什么) Cortex-A53
(Aarch32) eMMC LPDDR3 商业安全设备上启用调试 Resource Power Manager Firmware (RPM_FW)
rpm.mbn Cortex-M3 eMMC RPM code RAM 资源功耗管理 APPSBL/boot manager and OS loader
emmc_appsboot.mbn Cortex-A532
(AArch32/
AArch64) eMMC LPDDR3 显示开机第一张图, 加载和验证kernel (实指linux kernel), and
提供使用UEFI HLOS-specific引导加载程序的功能 High-Level Operating System (HLOS)
boot.img
system.img
userdata.img
... Cortex-A53
(AArch32/AArch64) eMMC LPDDR3 Boots HLOS images, for example, A53 HLOS kernel image, WCNSS (Pronto) image, and so on. Modem Primary Boot Loader (Modem PBL)
芯片内部代码 MSS_QDSP6 NA Modem ROM
Qualcomm® Hexagon™ TCM
(data and stack) §创建 Hexagon TCM
§从LPDDR3拷贝MBA到Hexagon TCM, 然后在Hexagon TCM中鉴定MBA Modem Boot Authenticator (MBA)
NON-HLOS.bin MSS_QDSP6 eMMC Hexagon TCM §鉴定modem固件
§xPU protects the DDR regions for modem, and memory dump 1Debug policy固件是SBL可选择加载的固件. 更多信息参考Debug Policy Version 2 User Guide (80-NV396-72). 2LK boot loader starts in 32-bit.
启动流程 1. 系统上电 ,让MSM8937/MSM8953/MSM8940/MSM8920应用处理器CPU复位. 2. APPS PBL在Cortex-A53上运行, 加载并校验 SBL1 a.SBL1 segment 1 from the boot device to L2 (as TCM). b.SBL1 segment 2 (SDI equivalent) to RPM code RAM, then jumps to SBL1. 3. SBL1 segment 1 初始化DDR 并加载和校验以下内容: a.QSEE/TrustZone镜像从启动设备到DDR. b.DEVCFG镜像从启动设备到DDR. c.Debug Policy镜像从启动设备到DDR. d.HLOS APPSBL(lk)镜像从启动设备到DDR. e.RPM firmware镜像从启动设备到RPM code RAM.
4. SBL1将执行权交给QSEE/TrustZone. QSEE/TrustZone建立安全环境, 配置 xPU, 支持the fuse driver. a.SBL1运行在32位模式. QSEE/TrustZoneruns运行在64位模式. 因为64位模式转变, SBL1 为QSEE入口设置加载重新映射, 写入RMR register,然后触发热启动. QSEE这时运行在64位模式. 5. QSEE 通知RPM处理器来启动RPM固件执行. 6. QSEE 将执行权限交给HLOS APPSBL(lk)来初始化系统. a.The Linux APPS boot loader (HLOS APPSBL) 一开始仅执行在32位模式下. b.这种做法是通过EL3/Monitor模式,通过查看ELF头对于HLOS APPSBL, 这表明它使用32位指令集架构. EL3/Monitor改变为32-bit模式并使得HLOS APPSBL执行在32-bit模式. 7. HLOS APPSBL(lk)加载并校验HLOS kernel(Linux内核). LK通过在退出前使SCM调用安全监视器表明HLOS kernel64位模式. LK不像以前那样直接跳进内核. 8. HLOS kernel加载MBA到DDR通过PIL. 9. HLOS kernel带来Hexagon modem DSP重置. 10. Modem PBL然后继续它的启动过程. 11. HLOS kernel加载AMSS modem镜像到DDR通过PIL. 12. Modem PBL校验MBA然后跳转到它. 13. HLOS加载WCNSS (Pronto)镜像到DDR通过PIL. 14. HLOS使WCNSS (Pronto)镜像重置,因此Pronto镜像开始执行. 15. HLOS加载LPASS镜像到DDR通过PIL. 16. HLOS使得LPASS镜像重置,LPASS镜像开始执行.
注:本文大部分翻译自高通文档