当前位置:   article > 正文

【ARM64 ATF 系列 3 -- ARM64 warm reset 与 cold reset】_bl31 warm reset

bl31 warm reset

ARM64 Reset

在这里插入图片描述
ARMv8-A支持两种复位,冷复位热复位两者主要区别是冷复位会将debug 功能模块也一同复位,热复位在默认情况则不会复位 debug 功 能模块
处理器收到复位信号后,依据处理器的具体实现进入所支持的 最高EL(可能是EL3/EL2,甚至EL1),SP寄存器也使用的是对应 EL下的寄存器
复位后程序起始执行地址是预先定义的,直接从这个预先定义的地址处开始执行。RVBAR_ELx 寄存器保存着这个预先定义的起始执行地址

1.1.1 reset 运行级别

Reset 时 PE 进入最高的异常级别,运行状态

  • Reset 后最高异常级别可以选用任何一种运行状态
  • cold reset 由输入信号配置, warm resetRMR_ELx.AA64 配置
  • 如果 reset 后最高异常级别选用 A64,则:
    • 选用 SP_ELx
    • Reset向量的执行地址由厂商定义,RVBAR 持有向量地址。

1.1.2 warm reset 寄存器

ARMv8 中只要配置 RMR_EL3 寄存器,系统就会进入warm reset,如下参考代码:

  ...
  ldr x1, =vector_table
  msr vbar_el3, x1
  ...

warm_reset:
    mov x0, xzr
    mov x0, #3
    msr rmr_el3, x0
    isb
    dsb sy
1:  wfi
    b 1b

  .balign 0x800
vector_table:
        b         .
        .balign 0x80
        b         .
        .balign 0x80
        b         .
        .balign 0x80
        b         .
        .balign 0x80
        b         .
        .balign 0x80
        b         .
        .balign 0x80
        b         .
        .balign 0x80
        b         .
        .balign 0x80
        bl   warm_reset
        b         .
        .balign 0x80
        b         .
        .balign 0x80
        b         .
        .balign 0x80
        b         .
        .balign 0x80
        b         .
        .balign 0x80
        b         .
        .balign 0x80
        b         .
        .balign 0x80
        b         .

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49

AARCH32 状态下 RMRCP15协处理器的寄存器,通过以下指令访问

MRC P15, 0, <Rt>, C12, C0, 2; Read RMR into Rt
MCR P15, 0, <Rt>, C12, C0, 2; Write Rt to RMR
  • 1
  • 2

RMRRMR_EL3 在32模式下的映射,写此寄存器将触发热复位

系统在 cold reset 过程中,可以在 ATF 中配置 RVBAR_EL3 来指定 CPUwarm reset vector 的地址,warm reset 的时候 cpu 执行的函数地址就来自于这个寄存器。那么Reset vector base addr不再局限于 00000000 / FFFF0000了。在实现 ARMv8 SoC的时候:通过 RVBARADDR signal 指定任意地址。

1.1.3 PSCI Suspend/Resume

系统进入 suspend 之后,会通过 PSCI 接口进入 ARM lib 库文件,然后进入bl32,系统从 UDR 出来之后,走的应该也是 warm reset,因为系统在 cold reset 的时候已经配置好了 RVBAR 寄存器了。

如果系统走的是cold reset,那么BL1->BL2->bl31_entrypoint

系统从 UDR 模式出来的时候,一般是在 ATF 中跳转到 kernel,不会在走 uboot流程:

  • 一方面是因为 uboot 的主要功能是启动加载 kernel,在 cold reset 的过程中完成了使命。
  • 另外一方面是因为 UDR 出来之后系统走的是 bl32_warm_entrypoint,在这个函数流程中不会进入uboot
声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
  

闽ICP备14008679号