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.

[参考译文] AM625:如何配置具有2个4GB DDR4芯片的 DDR4

Guru**** 2027820 points
Other Parts Discussed in Thread: SYSCONFIG, AM625, AM623
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1430787/am625-how-to-configure-ddr4-with-2-ddr4-chip-of-4gb

器件型号:AM625
主题中讨论的其他器件:SysConfigAM623

工具与软件:

您好!

我们将设计升级为使用2个 Micron 芯片 MT40A4G8NEA-062E:F、以使用8千兆字节的 DDR4

我在线使用了 SDK 09.02和 SysConfig 工具。

存储器频率(MHz) 800Mhz
数据总线宽度(每个器件) 8.
密度(每器件)(GB) 32.

芯片选择/等级 1.

我们的 DDR4芯片通过1个芯片选择进行连接。

1 -要访问8GB RAM、是否需要为芯片选择/等级选择2?

当前、引导加载程序 u-boot 仅具有8Gb 和16GB 密度。

在 SysConfig 中配置32GB 时、引导加载程序将冻结并显示以下跟踪。

U-Boot SPL 2023.04-00003-g2ac2a3ccc0-dirty (Oct 282024- 15:17:10+0000)
SYSFW ABI: 3.1(firmware rev 0x0009'9.2.7--v09.02.07 (Kool Koala)')
SPL initial stack usage: 13408bytes
I patch the bootloader u-boot to use 4GB only instead of 8GB, the patch is at the bottom of the thread.
2-您能否告诉我修补程序是否正确、您建议如何调试此问题?
3 -您能给我提供一个脚本吗、我可以在 Code Composer Studio 和 JTAG 探针中使用该脚本吗?
当前脚本 AddrMapCheck 返回:"Total DDR Capacity Detected = 2GBytes"
感谢您的帮助。
此致、
 
diff --git a/arch/arm/dts/k3-am625-r5-sk.dts b/arch/arm/dts/k3-am625-r5-sk.dts
index 87f6bfccda..2feb2f9490 100644
--- a/arch/arm/dts/k3-am625-r5-sk.dts
+++ b/arch/arm/dts/k3-am625-r5-sk.dts
@@ -15,8 +15,9 @@
/ {
memory@80000000 {
device_type = "memory";
- /* 2G RAM */
- reg = <0x00000000 0x80000000 0x00000000 0x80000000>;
+ /* 4G RAM */
+ reg = <0x00000000 0x80000000 0x00000000 0x80000000>,
+ <0x00000008 0x80000000 0x00000000 0x80000000>;
bootph-pre-ram;
};
};
diff --git a/arch/arm/dts/k3-am625-sk.dts b/arch/arm/dts/k3-am625-sk.dts
index acb37d03bd..5b126a877b 100644
--- a/arch/arm/dts/k3-am625-sk.dts
+++ b/arch/arm/dts/k3-am625-sk.dts
@@ -45,8 +45,9 @@

memory@80000000 {
device_type = "memory";
- /* 2G RAM */
- reg = <0x00000000 0x80000000 0x00000000 0x80000000>;
+ /* 4G RAM */
+ reg = <0x00000000 0x80000000 0x00000000 0x80000000>,
+ <0x00000008 0x80000000 0x00000000 0x80000000>;

};

diff --git a/arch/arm/dts/k3-am62x-sk-common.dtsi b/arch/arm/dts/k3-am62x-sk-common.dtsi
index a350fe2433..7a6580a7a9 100644
--- a/arch/arm/dts/k3-am62x-sk-common.dtsi
+++ b/arch/arm/dts/k3-am62x-sk-common.dtsi
@@ -30,8 +30,9 @@

memory@80000000 {
device_type = "memory";
- /* 2G RAM */
- reg = <0x00000000 0x80000000 0x00000000 0x80000000>;
+ /* 4G RAM */
+ reg = <0x00000000 0x80000000 0x00000000 0x80000000>,
+ <0x00000008 0x80000000 0x00000000 0x80000000>;

};

diff --git a/arch/arm/dts/k3-am62x-sk-ddr4-1600MTs.dtsi b/arch/arm/dts/k3-am62x-sk-ddr4-1600MTs.dtsi
index df01893669..0374f9a0b9 100644
--- a/arch/arm/dts/k3-am62x-sk-ddr4-1600MTs.dtsi
+++ b/arch/arm/dts/k3-am62x-sk-ddr4-1600MTs.dtsi
@@ -1,11 +1,11 @@
// SPDX-License-Identifier: GPL-2.0+
/*
* This file was generated with the
- * AM62x SysConfig DDR Subsystem Register Configuration Tool v0.10.01
- * Thu Apr 25 2024 15:57:40 GMT+0200 (Central European Summer Time)
+ * AM623/AM625 SysConfig DDR Configuration Tool for AM64x, AM625, AM623, AM62Ax, AM62Px v0.10.02
+ * Mon Oct 28 2024 14:33:57 GMT+0100 (heure normale d<E2><80><99>Europe centrale)
* DDR Type: DDR4
* Frequency = 800MHz (1600MTs)
- * Density: 8Gb
+ * Density: 32Gb
* Number of Ranks: 1
*/

@@ -13,7 +13,8 @@
#define DDRSS_PLL_FHS_CNT 6
#define DDRSS_PLL_FREQUENCY_1 400000000
#define DDRSS_PLL_FREQUENCY_2 400000000
-#define DDRSS_SDRAM_IDX 15
+#define DDRSS_SDRAM_IDX 17
+#define DDRSS_REGION_IDX 17


#define DDRSS_CTL_0_DATA 0x00000A00
@@ -333,8 +334,8 @@
#define DDRSS_CTL_314_DATA 0x00000000
#define DDRSS_CTL_315_DATA 0x00000100
#define DDRSS_CTL_316_DATA 0x00000000
-#define DDRSS_CTL_317_DATA 0x00000101
-#define DDRSS_CTL_318_DATA 0x3FFF0000
+#define DDRSS_CTL_317_DATA 0xFFFFFEFF
+#define DDRSS_CTL_318_DATA 0xFFFF0000
#define DDRSS_CTL_319_DATA 0x000FFF00
#define DDRSS_CTL_320_DATA 0xFFFFFFFF
#define DDRSS_CTL_321_DATA 0x00FFFF00
@@ -516,7 +517,7 @@
#define DDRSS_PI_74_DATA 0x00000000
#define DDRSS_PI_75_DATA 0x00000005
#define DDRSS_PI_76_DATA 0x01000000
-#define DDRSS_PI_77_DATA 0x04010000
+#define DDRSS_PI_77_DATA 0x03FF0000
#define DDRSS_PI_78_DATA 0x00020000
#define DDRSS_PI_79_DATA 0x00010002
#define DDRSS_PI_80_DATA 0x00000001
diff --git a/drivers/ram/k3-ddrss/k3-ddrss.c b/drivers/ram/k3-ddrss/k3-ddrss.c
index 322e8e86de..e2cf90ec8e 100644
--- a/drivers/ram/k3-ddrss/k3-ddrss.c
+++ b/drivers/ram/k3-ddrss/k3-ddrss.c
@@ -786,7 +786,7 @@ static int k3_ddrss_probe(struct udevice *dev)
if (IS_ENABLED(CONFIG_SOC_K3_AM625) || IS_ENABLED(CONFIG_SOC_K3_AM642)) {
/* AM62x SIP supports only up to 512 MB SDRAM */
/* AM64x supports only up to 2 GB SDRAM */
- writel((((ilog2(ddrss->ddr_ram_size) - 16) << 5) | 0xF),
+ writel((((ilog2(ddrss->ddr_ram_size) - 16) << 5) | 0x1F),
ddrss->ddrss_ss_cfg + DDRSS_V2A_CTL_REG);
writel(0x0, ddrss->ddrss_ss_cfg + DDRSS_ECC_CTRL_REG);
}
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    对于未来的读者、此处讨论的概念是本主题的延续:
    https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1387864/am625-how-to-set-up-am625-4gb-ram-on-sdk-9-2

    您好、Alexis、

    我将把您的线程发送到我们的 DDR 硬件人员开始。 我们可能需要向几个不同的人回应您、以解决您的问题。 如果您在几个工作日内未收到其他回复、请随意 ping 该主题。

    此致、

    Nick

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    在 u-boot 中仅设置4GB 的8GB 存储空间时遇到问题。

    该问题与 SDK 09.02有关、因为 SDK 10.00中似乎不存在相同的修改。

    按照这种方式、我们会检查定制设计并确认仅选择1个芯片不允许 CPU 使用8GB DDR4、因此只能选择一组2GB 的芯片组。

    我将使用 u-boot mtest 命令测试内存、以确认4GB 可以正常工作。

    让我知道,一旦你有关于以前的问题的新闻。

    此致、

    Alexis。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Alexis、 您正在使用的 MT40A4G8NEA-062E:F 器件是双列器件。  每种封装为8位宽。  因此、SysConfig 工具应按如下方式配置:

    数据总线宽度(每个器件)  8.
    密度(每器件)(GB)  32.

    芯片选择/等级 2

    确保电路板将 CS0和 CS1信号同时连接到两个 DDR 封装。  如果需要的话、可以布置原理图的 DDR 部分。

    此致、

    James

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 James、Nick、

    我将等待我们的设计将固定为将 CS 1和2从 AM62x 连接到 DDR 封装。

    此时我只配置了4GB、直到我收到新的电路板。

    通过这种方式、您可以确认 SDK 10.00正确处理4GB RAM、因为即使引导加载程序 u-boot 看到2个2GB 的 内存组、在 Linux 下、我也只看到2GB 的 RAM。

    我在 Linux 设备树中检查存储器映射、它正在映射位于0x8000000和0880000000处的2组。

    我是否需要修补其他东西?

    此致、

    Alexis。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 James、Nick、

    当我更改器件树中的存储器区域时、我的行为不能与 SDK 08.06相同。

    当 u-boot 显示2个2GB 的组时、内核不会反映内核器件树中设置的存储器配置。

    我修改了文件 k3-am625-sk.dts 和 k3-am62x-sk-common.dtsi、并从 u-boot 手动加载器件树。

    我测试了以下配置:

       内存@8000000{
           device_type ="存储器";
           /* 1G RAM */
           REG =<0x00000000 0x80000000 0x00000000 0x40000000>;
       };

       内存@8000000{
           device_type ="存储器";
           /* 2G RAM */
           REG =<0x00000000 0x80000000 0x00000000 0x80000000>;
       };

       内存@8000000{
           device_type ="存储器";
           /* 4G RAM */
           REG =<0x00000000 0x80000000 0x00000000 0x80000000>

    <0x00000008 0x80000000 0x00000000 0x80000000>;
       };

    但内核中不考虑任何这种配置。

    cat /proc/meminfo 和 cat /proc/iomem 仍然为每种配置显示2GB RAM。

    内核器件树存储器寄存器的配置如下:

    CAT /proc/device-tree/memory@800000/reg |hexdump

    0000000 0000 0000 0080 0000 0000 0000 0080 0000

    0000010 0000 0800 0080 0000 0000 0000 0000

    您能告诉我如何配置内核设备树、以获得 sDK10中 Linux 下可用的4GB RAM 吗?

    此致、

    Alexis。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Alexis:

    我没有严格遵循此线程、也没有研究您遇到的问题、但我只想指出、由于 SDK10.0、内核 devicetree 中的存储器节点不再生效、因此内核中的存储器大小由 U-Boot devicetree 中的相应存储器节点决定。 U-Boot 初始化 DDR 后、它会将内核 dtb 加载到 DDR、然后将其存储器节点修改为与 U-Boot devicetre 中的设置相同、然后引导内核。

    请参阅以下 U-Boot 代码以供参考。

    https://git.ti.com/cgit/ti-u-boot/ti-u-boot/tree/arch/arm/mach-k3/am625_fdt.c?h=10.00.08#n54

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Bin、

    我沿着 u-boot 中的调用树跟踪、如果 设置了标志 arch_fixup_FDT_memory=y、则会调用您提到的函数。

    在我的 u-boot 配置中、设置了该标志、因此内核的器件树得到了很好的修改、并且在内核器件树源代码中忽略了段存储器。

    但我不明白为什么只有2GB 显示在 Linux 当 u-boot 显示4GB。

    您能给我更多的信息吗?

    您是否可以确认 u-boot 更新了设备树内存部分中的内存大小?

    因此、我通过禁用 arch_fixup_FDT_memory 来通过内核设备树直接管理内存、从而绕过该问题。 最好使用固定代码、而不是复制两个器件树中的内存部分。

    此致、

    Alexis。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Alexis:

    我明天不在办公室、但在我回到办公室后、我将查看此主题中的详细信息、以便更好地了解您遇到的问题、然后提供意见。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    大家好、Alxis、

    但我不明白为什么在 u-boot 显示4GB 时仅显示 Linux 中的2GB。

    您可以随附 SDK10.0 UART 控制台日志(包括 U-Boot 和内核引导消息)吗?