在不同的ARMv8-A引导阶段要进行DDR初始化吗?

时间:2018-08-17 10:20:58

标签: initialization arm

我目前正在使用的Cortex-A53大约有3个启动阶段:

  • ARM受信任的固件(BL1,BL2,BL31)
  • U-boot(BL33)
  • Linux内核

到目前为止,我从串行端口打印中看到BL2初始化了DDRC和内存(我猜这是用于将BL31和BL33加载到RAM中)。以下是BL2的打印内容:

INFO:    calc_freq_div, Real-Freq=2400 Mbps
INFO:    ddr soft-rest...
INFO:    set_fabric_interleave_mask, 1 K
INFO:    ddr interleave disable
INFO:    ddrc0_init...
INFO:    ddr0 perf enable
INFO:    [ddr_0 BIST] success!
INFO:    ddr0 ecc disable
INFO:    ddrc0_init end...
INFO:    ddrc1 init...
INFO:    ddr1000 perf enable
INFO:    [ddr_1000 BIST] success!
INFO:    ddr1000 ecc disable
INFO:    ddrc init end...

我肯定知道系统至少具有8GiB RAM,范围从0x1:0000:00000x3:0000:0000(根据硬件规格和Linux空间)。我想从BL2的简单命令行循环中测试这些内存范围...但是看来我只能读取RAM地址的前256MiB + 640KiB(从0x1:0000:00000x1:100a:0000),如果我读取的内存地址超出此范围,则BL2会挂起。

读取内存位置的代码如下:

static inline uint32_t mmio_read_32(uintptr_t addr)
{
    return *(volatile uint32_t*)addr;
}

BL2中的DDRC / MEM初始化代码对我来说有点复杂,所以我暂时不打算深入了解这些内容。我当前的问题很简单:

  • 初始化DDRC / MEM时,是否可以告诉它只能访问部分内存?如何以及为什么?
  • 通常,DDRC / MEM初始化一次(在BL2),或者可以初始化多次(也在uboot和/或linux内核中)?

0 个答案:

没有答案