This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
您好、专家、
-1-
客户在其 TDA4板上使用的是 MT53E768M32D4DT 3GB DDR、软件为 SDK7.0。
它是双通道双列。 每个芯片为768MB (密度为6Gb)。 由于"ddrss_reg_control_tool"不支持6Gb 密度。 因此我们必须选择4Gb 密度
并将 DDR 大小配置为2GB。 借助新的 DDR 参数、电路板可引导至 SPL。 但它会卡在 u-boot 中。
问题是如何更改2GB 的内存映射?
-2-
我正在使用 TDA4VM EVM 来模拟此情况的4x512MB DDR。 它将在 u-boot 中挂起"enable_caches()"
请帮助检查 TDA4EVM 上的以下修改和引导日志。
diff --git a/arch/arm/dts/k3-j721e-som-p0.dtsi b/arch/arm/dts/k3-j721e-som-p0.dtsi
索引5d18642fe6.4e89df70db 100644
---- a/arch/arm/dts/k3-j721e-som-p0.dtsi
++ b/arch/arm/dts/k3-j721e-som-p0.dtsi
@@-10、9 + 10、9 @@
/{
内存@80000000{
DEVICE_TYPE ="存储器";
-/* 4G RAM */
- reg =<0x00000000 0x8000000 0x00000000 0x00000000 0x80000>、
-<0x00000008 0x8000000 0x00000000 0x80000000>;
+/* 2G RAM 2列4x512MB */
+ reg =<0x00000000 0x8000000 0x00000000 0x40000000>、
+<0x00000008 0x8000000 0x00000000 0x40000000>;
};
diff --git a/arch/arm/mach-k3/arm64-MM4.c b/arch/arm/mach-k3/arm64-MM4.c
索引95f830b7ff..809982abb6 100644
----阿尔克/阿尔马/马赫-克3/ARM64-MM4.c
++ b/arch/arm/mach-k3/arm64-MM4.c
@@-93、13 +93、13 @@ struct mm_region j721e_mem_map[NR_MMU_regions]={
}、{
virt = 0xbbc00000UL、
.phys = 0xbbc00000UL、
-.size = 0x44400000UL、
+.size = 0x04400000UL、
.attrs = PTE_BLOCK_MEMYPE (MT_NORMAL)|
PTE_BLOCK_INNER 共享
}、{
-.virt = 0x880000000UL、
+.virt = 0xc0000000UL、
.phys = 0x880000000UL、
-.size = 0x80000000UL、
+.size = 0x40000000UL、
.attrs = PTE_BLOCK_MEMYPE (MT_NORMAL)|
PTE_BLOCK_INNER 共享
diff --git a/board/ti/j721e/evm.c b/board/ti/j721e/evm.c
索引 d9846f3c46..2d1407336a 100644
-- A/board/ti/j721e/evm.c
++ b/board/ti/j721e/evm.c
@@-42、7 +42、7 @@ int board_init (void)
int dram_init (void)
{
#ifdef CONFIG_PHYS_64BIT
- gd->ram_size = 0x100000000;
+ gd->ram_size = 0x8000000;
其他
gd->ram_size = 0x8000000;
#endif
@@-65、14 +65、14 @@ int dram_init_banksize (void)
{
/*组0声明 DDR 低电平区域中可用的内存*/
gD->bD->bi_dram[0].start = CONFIG_SYS_SDRAM_base;
- gd->bd->bi_dram[0]。size = 0x8000000;
+ gd->bd->bi_dram[0].size = 0x40000000;
gd->ram_size = 0x8000000;
#ifdef CONFIG_PHYS_64BIT
/*组1声明 DDR 高电平区域中可用的内存*/
gD->bD->bi_dram[1].start = CONFIG_SYS_SDRAM_BASE1;
-gd->bd->bi_dram[1].size = 0x8000000000;
- gd->ram_size = 0x100000000;
+ gd->bd->bi_dram[1].size = 0x40000000;
+ gd->ram_size = 0x8000000;
#endif
------------------------------------------------------------------
U-Boot SPL 2020.01脏污(2020年10月23日- 11:40:11 +0800)
SYSFW ABI:3.0 (固件版本0x0014 '20.04.1-v2020.04a (极好的 LLA')
j721e_ddrss_probe (dev=41c87cec)
j721e_ddrss_ofdata_TO_priv( dev=41c87cec)
j721e_ddrss_power_on (ddrss=41cd7244)
LPDDR4_Probe:通过
LPDDR4_Init:通过
--> LPDDR4初始化正在进行... <<<--
j721e_LPDDR4_ack_freq_upd_req:接收到的频率变化请求:请求类型= 1、请求编号 = 0
j721e_LPDDR4_ack_freq_upd_req:接收到的频率变化请求:请求类型= 0、请求编号 = 1
j721e_LPDDR4_ack_freq_upd_req:接收到的频率变化请求:请求类型= 1、请求编号 = 2
j721e_LPDDR4_ack_freq_upd_req:接收到的频率变化请求:请求类型= 0、请求编号 = 3
j721e_LPDDR4_ack_freq_upd_req:接收到的频率变化请求:请求类型= 1、请求编号 = 4
j721e_LPDDR4_ack_freq_upd_req:接收到的频率变化请求:请求类型= 2、请求编号 = 5
j721e_LPDDR4_ack_freq_upd_req:接收到的频率变化请求:请求类型= 1、请求编号 = 6
j721e_LPDDR4_ack_freq_upd_req:接收到的频率变化请求:请求类型= 2、请求编号 = 7
j721e_LPDDR4_ack_freq_upd_req:接收到的频率变化请求:请求类型= 1、请求编号 = 8
j721e_LPDDR4_ack_freq_upd_req:接收到的频率变化请求:请求类型= 2、请求编号 = 9
LPDDR4_Start:通过
>>SPL:Board_init_r()
将 TLB 表从 ffc000更改为00000000
SPL_init
尝试从 MMC2引导
不支持的操作系统映像.. 尽管如此,还是跳
已加载-跳转到 U-Boot...
rproc_pre_probe:'r5f@5c00000':使用 FDT
k3_r5f_core_for_get_Memories
存储器 ATCM:总线地址0x840029dc、内存大小0x8000、cpu_addr 0x5c00000、dev_addr 0x0
内存 btcm:总线地址0x840029ec、内存大小0x8000、cpu_addr 0x5c10000、dev_addr 0x41010000
TI_sci_proc_request:proc_id = 6.
TI_sci_proc_get_status:proc_id = 6、boot_vector = 0xx、cfg_flags = 0x0、Ctrl_FLAGS = 0x200、STS = 0x0
TI_sci_proc_set_control:proc_id = 6、ctrl_set = 0x1、ctrl_clr = 0x0
TI_sci_proc_set_config:proc_id = 6、boot_vector = 0xx、cfg_set = 0x0、cfg_CLR = 0x200
TI_sci_proc_release:proc_id = 6
rproc_pre_probe:'r5f@5d00000':使用 FDT
k3_r5f_core_for_get_Memories
存储器 ATCM:总线地址0x84000ccc、存储器大小0x8000、CPU_addr 0x5d00000、DEV_addr 0x0
内存 btcm:总线地址0x84000cdc、内存大小0x8000、cpu_addr 0x5d10000、dev_addr 0x41010000
TI_sci_proc_request:proc_id = 7
TI_sci_proc_get_status:proc_id = 7、boot_vector = 0xx、cfg_flags = 0x0、Ctrl_FLAGS = 0x200、STS = 0x0
TI_sci_proc_set_control:proc_id = 7、ctrl_set = 0x1、ctrl_clr = 0x0
TI_sci_proc_set_config:proc_id = 7、boot_vector = 0xx、cfg_set = 0x0、cfg_CLR = 0x200
TI_sci_proc_release:proc_id = 7
rproc_pre_probe:'a72@0':使用 FDT
正在从 MMC 加载环境... ***警告-未找到 MMC 卡,使用默认环境
rproc_load:从地址0x88000000加载到大小为4254052字节的'r5f@5c00000'
TI_sci_proc_request:proc_id = 6.
TI_sci_proc_power_domain_on:dev_id = 245
k3_r5f_da_TO_va、num_MEMS = 2
===2 va = 0x5c00000、da = 0x0、DEV_addr = 0x0、大小= 0x6d8、mem_size = 0x8000
从 src 0x88000040加载地址0到0x5c00000 (1752字节)
k3_r5f_da_TO_va、num_MEMS = 2
===3 da =0xa1100000
从 src 0x88001000加载地址1到0xa1100000 (140字节)
k3_r5f_da_TO_va、num_MEMS = 2
===3 da =0xa1102000
从 src 0x88002000将地址2加载到0xa1102000 (0字节)
k3_r5f_da_TO_va、num_MEMS = 2
===3 da =0xa205e680
从 src 0x88002000加载地址3到0xa205e680 (2032784字节)
k3_r5f_da_TO_va、num_MEMS = 2
===3 da =0xa2250000
将地址4从 src 0x881f4000加载到0xa2250000 (0字节)
k3_r5f_da_TO_va、num_MEMS = 2
===3 da =0xa23a0000
从 src 0x881f4000加载地址5到0xa23a0000 (1361264字节)
k3_r5f_da_TO_va、num_MEMS = 2
===3 da =0xa24ec580
从 src 0x88340580将地址6加载到0xa24ec580 (839936字节)
k3_r5f_da_TO_va、num_MEMS = 2
===3 da =0xa267b280
从 src 0x8840d680将地址7加载到0xa267b280 (0字节)
TI_sci_proc_set_config:proc_id = 6、boot_vector = 0xx、cfg_set = 0x0、cfg_CLR = 0x0
TI_sci_proc_release:proc_id = 6
_rproc_ops_wrapper:正在启动 r5f@5c00000...
TI_sci_proc_request:proc_id = 6.
TI_sci_proc_set_control:proc_id = 6、ctrl_set = 0x0、ctrl_clr = 0x1
TI_sci_proc_release:proc_id = 6
Remoteproc 2已成功启动
**找不到文件/lib/firmware/j7-main-r5f0_1-fw **
_rproc_ops_wrapper:正在重置 r5f@5c00000...
**找不到文件/lib/firmware/j7-mcu-r5f0_0-fw **
rproc_load:从地址0x70000000加载到大小为512字节的'a72@0'
在 ARM64内核上启动 ATF...
_rproc_ops_wrapper:正在启动 a72@0...
正在关闭...
注意:BL31:v2.3 ():07.00.005-脏
注意:BL31:构建时间:2020年6月17日14:33:55
U-Boot SPL 2020.01脏污(2020年10月23日- 12:11:11 +0800)
SYSFW ABI:3.0 (固件版本0x0014 '20.04.1-v2020.04a (极好的 LLA')
重新定位之前使用的 SPL malloc() 0x3468字节(13KB)
>>SPL:Board_init_r()
将 TLB 表从 ff4000更改为100000000
SPL_init
检测到:J7X-base-CPB 修订版 E2
检测到:J7X-VSC8514-ETH 修订版 E2
尝试从 MMC2引导
跳转到 U-Boot
已加载-跳转到 U-Boot...
图像入口点:0x80800000
initcall:0000808a4b78
U-Boot 2020.01脏污(2020年10月23日- 12:11:11 +0800)
initcall:000080817344
U-Boot 代码:80800000 -> 808ED570 BSS:-> 8090B250
initcall:0000808174b0
initcall:000000008029e0
SoC:J721E SR1.0
initcall:000080817b90
型号:德州仪器 K3 J721E SoC
电路板:J721EX-PM1-SOM 修订版 E2
initcall:000080817490
DRAM:initcall:0000000080319c
initcall:000080817694
显示器长度:0010B250
RAM 大小:80000000
RAM 顶部:100000000
initcall:00008081713c
initcall:000080817150
将 TLB 表从 ff0000.0000更改为 ffc000
initcall:000080817578
initcall:000080817580
initcall:0000808172dc
在以下位置为 U-Boot 保留1068k:ffee4000
initcall:0000808172a0
在 fdec4000处为 malloc()保留32896k
initcall:000080817434
为电路板信息保留168字节、地址为:fdec3f58
initcall:000080817588
initcall:000080817264
为全局数据保留368个字节、地址为:fdec3de8
initcall:0000808171dc
将47776字节的 FDT 保留在:fdeb8348
initcall:000080817590
initcall:000080817598
initcall:0000808175b8
initcall:000080817710
initcall:0000808031c4
initcall:0000808175c4
RAM 配置:
组#0:8000000 1 GiB
组#1:880000000 1 GiB
DRAM:2GiB
initcall:0000808171b8
新的堆栈指针为:fdeb8330
initcall:0000808173f0
initcall:0000808175a0
initcall:0000808175a8
initcall:000080817378
重定位偏移为:7f6e4000
重新定位到 ffee4000、fdec3de8上的新 gd、fdeb8330上的 sp
initcall:00000000ffefb7e4
initcall:00000000ffefb7ec
initcall:0000000080817a18 (重定位为00000000ffefba18)
函数"0000000080817a18"是"initr_caches"
请帮您检查一下。
此致
Joe
您好、专家、
我尝试将 DRAM 配置为1GB 并在 EVM 上使用了 Bank#0、它可以引导到 u-boot 中。 完整日志可帮助您检查所附文件。
e2e.ti.com/.../1GB_5F00_Bank_2300_0.log
RAM 配置:
组#0:8000000 1 GiB
DRAM:1 GiB
-1-
此问题可能与0x8_8000_0000上的存储器映射有关。 存储器0x8_8000_0000能否映射到0xC000_0000?
-2-
如何在这种2GB DDR 上配置存储器映射?
512M32 (16Gbit) | |
通道 A、rank0 | x16位模式 x 1个裸片 |
通道 A、rank1 | x16位模式 x 1个裸片 |
通道 B、rank0 | x16位模式 x 1个裸片 |
通道 B、通道1 | x16位模式 x 1个裸片 |
此致
Joe
您好!
您需要更新设备树文件中的内存大小以及其他几个位置。 还需要更新 MMU 设置。 如果这不能解决问题、请告知我们。
1) 1)更新设备树内存大小。 例如、您将删除下面显示的第二个定义的2GB 内存部分、该部分位于 K3-j721e-som-p0.dtsi 中、仅启用2GB 而不是4GB。
memory@80000000 {
device_type = "memory";
/* 4G RAM */
reg = <0x00000000 0x80000000 0x00000000 0x80000000>;
<0x00000008 0x80000000 0x00000000 0x80000000>;
};
git.ti.com/.../k3-j721e-som-p0.dtsi
2) 2)更新传递给 Linux 的"ram_size"描述符。 请确保未定义 CONFIG_PHYS_64BIT、或者删除下面的预处理器语句、以便仅执行绿色代码。
git.ti.com/.../evm.c
int dram_init(void)
{
#ifdef CONFIG_PHYS_64BIT
gd->ram_size = 0x100000000;
#else
gd->ram_size = 0x80000000;
#endif
return 0;
}
int dram_init_banksize(void)
{
/* Bank 0 declares the memory available in the DDR low region */
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 declares the memory available in the DDR high region */
gd->bd->bi_dram[1].start = CONFIG_SYS_SDRAM_BASE1;
gd->bd->bi_dram[1].size = 0x80000000;
gd->ram_size = 0x100000000;
#endif
return 0;
}
3) 3)确保 MMU 不会尝试访问无效的存储器。 需要确认、但我认为您需要删除下面红色的行。
struct mm_region j721e_mem_map[NR_MMU_REGIONS] = {
{
.virt = 0x0UL,
.phys = 0x0UL,
.size = 0x80000000UL,
.attrs = PTE_BLOCK_MEMTYPE(MT_DEVICE_NGNRNE) |
PTE_BLOCK_NON_SHARE |
PTE_BLOCK_PXN | PTE_BLOCK_UXN
}, {
.virt = 0x80000000UL,
.phys = 0x80000000UL,
.size = 0x20000000UL,
.attrs = PTE_BLOCK_MEMTYPE(MT_NORMAL) |
PTE_BLOCK_INNER_SHARE
}, {
.virt = 0xa0000000UL,
.phys = 0xa0000000UL,
.size = 0x1bc00000UL,
.attrs = PTE_BLOCK_MEMTYPE(MT_NORMAL_NC) |
PTE_BLOCK_NON_SHARE
}, {
.virt = 0xbbc00000UL,
.phys = 0xbbc00000UL,
.size = 0x44400000UL,
.attrs = PTE_BLOCK_MEMTYPE(MT_NORMAL) |
PTE_BLOCK_INNER_SHARE
}, {
.virt = 0x880000000UL,
.phys = 0x880000000UL,
.size = 0x80000000UL,
.attrs = PTE_BLOCK_MEMTYPE(MT_NORMAL) |
PTE_BLOCK_INNER_SHARE
}, {
.virt = 0x500000000UL,
.phys = 0x500000000UL,
.size = 0x400000000UL,
.attrs = PTE_BLOCK_MEMTYPE(MT_DEVICE_NGNRNE) |
PTE_BLOCK_NON_SHARE |
PTE_BLOCK_PXN | PTE_BLOCK_UXN
}, {
.virt = 0x4d80000000UL,
.phys = 0x4d80000000UL,
.size = 0x0002000000UL,
.attrs = PTE_BLOCK_MEMTYPE(MT_NORMAL_NC) |
PTE_BLOCK_INNER_SHARE
}, {
/* List terminator */
0,
}
};
尊敬的 Kevin:
感谢你的帮助。 这些更改可以使客户电路板成功启动。
关于交错实验、我将通过电子邮件向您发送数据。
此致
Joe