ZHCABB1B August 2021 – January 2023 AM68 , AM68A , AM69 , AM69A , DRA821U , DRA829V , TDA4VM
除了更新 DDRSS 寄存器,可能还需要更新 u-boot 中的其他源文件,以便系统按预期工作。
例如,定制电路板上可用存储器总大小与 TI EVM 相比可能不相同。SDK 中的默认软件使用 u-boot 全局数据和电路板信息结构,特别是 ram_size 变量,该变量应当配置为与 DDR 存储器的总大小相匹配,以及 bi_dram 结构的 start (开始)和 size (大小) 参数,他们将处理器相应的地址空间映射到 DDR 存储器区域。但是,这些参数并非根据寄存器设置或 Jacinto 7 DDRSS 寄存器配置工具的输出进行配置的。因此,必须更新这些变量,以确保当定制电路板的存储器比 EVM 的少时,系统不会尝试访问不可用的物理存储器;当定制电路板的存储器比 EVM 的多时,允许系统使用全部 DDR 存储器空间。
在默认的 SDK 源代码中,ram_size 和 bi_dram 结构变量在函数 dram_init 和 dram_init_banksize 中进行配置,这些函数位于相应的处理器板级配置文件中。下方提供了示例:
如下所示,函数 dram_init 对全局数据变量 ram_size 进行配置。应当在自定义代码中修改此函数,ram_size 应当配置为与可用的 DDR 存储器总大小相匹配。
int dram_init(void)
{
#ifdef CONFIG_PHYS_64BIT
gd->ram_size = 0x100000000;
#else
gd->ram_size = 0x80000000;
#endif
return 0;
}
如下所示,函数 dram_init_banksize 对全局数据变量 ram_size 以及电路板信息 bi_dram 进行配置。应当在自定义代码中修改此函数。变量 ram_size 应当配置为与可用的 DDR 存储器总大小相匹配。bi_dram 结构的 start (开始)和 size (大小)参数应当配置为与每个 DDR 段的可用存储器相匹配。对于 Jacinto 7 处理器,DDR 存储器分为低电平区域和高电平区域。低电平区域的寻址空间为 32 位,但大小限制在 2GB。在下面的例子中,4GB 分为低电平区域和高电平区域,使得每个区域被映射到 2GB。
int dram_init_banksize(void)
{
/* Bank 0 声明在 DDR 低电平区域中可用的存储器 */
gd->bd->bi_dram[0].start = CONFIG_SYS_SDRAM_BASE;
gd->bd->bi_dram[0].size = 0x80000000;
gd->ram_size = 0x80000000;
#ifdef CONFIG_PHYS_64BIT
/* Bank 1 声明在 DDR 高电平区域中可用的存储器 */
gd->bd->bi_dram[1].start = CONFIG_SYS_SDRAM_BASE1;
gd->bd->bi_dram[1].size = 0x80000000;
gd->ram_size = 0x100000000;
#endif
return 0;
}