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.

[参考译文] Linux/AM5728:U-boot 提供4GB DDR 测试

Guru**** 2614265 points
Other Parts Discussed in Thread: AM5728

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/651164/linux-am5728-4gb-ddr-test-from-u-boot

器件型号:AM5728

工具/软件:Linux

我想在 U-Boot 中添加一个内存测试命令、以支持对我们的系统进行一些测试、该系统使用 AM5728处理器和4GB DDR RAM。 U-Boot 的构建旨在识别整个存储器范围、bdinfo 命令输出以下内容:

=> bdinfo
arch_number = 0x00000000
BOOT_params = 0x80000100
DRAM 组= 0x00000000
->开始= 0x8000000
->大小= 0x7F000000
DRAM 组= 0x00000001
-> START = 0x00000000
->大小= 0x8000000
波特率= 115200bps
TLB addr = 0xFEFF0000
relocaddr = 0xFEF4A000
重新分配关闭= 0x7E74A000
IRQ_sp = 0xFDF25640
SP START = 0xFDF25630

我能够成功使用内置 mtest 命令以及我自己的自定义 U-Boot 命令来测试从0x8000 0000开始的内存(在 sp START 之前至少要低于1MB、以考虑堆栈增长)。 此地址范围仅涵盖大约2GB 或我的一半内存。 bdinfo 转储意味着另一个组从位置0开始、但尝试使用 mtest 命令访问该位置会导致崩溃。

如何访问另一半从 U-Boot 进行测试? 从 U-Boot 命令提示符的内置命令还是通过我自己的自定义命令中的代码?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    软件团队已收到通知。 他们将在这里作出回应。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Scott、

    上部2GB 仅可由 Cortex-A15 MPU 通过 LPAE 进行访问。 检查您是否已在 u-boot 中启用 plae、在这种情况下、您可以使用以下介绍的 mem 测试从 u-boot 访问高2GB:

    u-boot/doc/README.memory-test

    u-boot/common/memsize.c

    请注意、LPAE 默认仅在 Linux 内核中启用。

    另请参阅以下 e2e 线程:

    e2e.ti.com/.../588135
    e2e.ti.com/.../586776

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

    感谢您的回复、但遗憾的是、您引用的文件和链接中的信息不能帮助回答我的问题。

    我已通过确保 CONFIG_ARMV7_LPAE 设置为"y"( 如 e2e.ti.com/.../588135中所述)、验证了 U-Boot 构建是否启用了 LPAE。 您在这里发表的文章意味着这就是所需的全部内容、但我真正感兴趣的信息是如何在启用扩展地址空间后充分利用该空间。

    我还有一个 board.c 文件、用于初始化 RAM 的整个4GiB (如 e2e.ti.com/.../586776中所述)

    内容 u-boot/common/memsize.c 似乎使用32位寻址、这不允许我访问整个可用存储器范围(我认为存储器空间的一部分仍然映射到外设寄存器)。

    README.MEMORY 测试的内容似乎仅涵盖基本存储器测试、并不涉及任何与 LPAE 相关的内容。

    以下主题似乎与我感兴趣的主题相同、但从未解决。
    e2e.ti.com/.../567360

    略微重述我的问题:
    假设在 U-Boot 构建中启用了 LPAE、您能否提供显示如何访问2GiB 以外存储器的示例代码?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 user="Scott Jackson7">略微重述我的问题:
    假设在 U-Boot 构建中启用了 LPAE、您能否提供显示如何访问2GiB 以外存储器的示例代码?

    我找不到示例。 如果你有什么东西,我会跟你的小队核实,但由于圣诞节假期,他们会有延误。 第二个2GiB 半部分的起始地址应为0x02_0000_0000

    同时、您可以检查以下链接是否在"帮助"中:

    此致、
    帕维尔

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

    确保在 configs/am57xx_evm_defconfig 文件中启用了 LPAE。 我查看了最新的 SDK、默认情况下已启用

    CONFIG_ARMV7_LPAE=y

    我还注意到、在 include/configs/am57xx_evm.h 中、仅设置了该值

    #define CONFIG_NR_DRAM_Banks           2.

    在 include/configs/dra7xx_evm.h 中、除了此配置外、还设置了另外两个配置。

    #define CONFIG_VE_BIG_RAM
    #define CONFIG_NR_DRAM_Banks           2.
    #define CONFIG_MAX_MEM_MAPPED          0x8000000

    您能否修改 am57xx_evm.h 以包含这两个其他内容?

    我们引导至 Linux 并使用 memtester 来测试内存。 您能否做到这一点、而不是在 u-boot 中?

    Steve K.

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

    Steve、

    我仔细检查了我的 include、并确保我具有与上面所述相同的#define 语句。 现在的问题是、我不知道如何实际处理整个4GB 内存、因为我只有32位的寻址可以使用。 我想我需要临时调整 MMU 配置、但我不知道 U-Boot 中是否有现有的 API 调用来帮助实现这一目的、或有某种抽象层来帮助管理"je_big_RAM"。

    基本上、我避免在 Linux 中使用 memtester 有两个主要原因:

    1. Linux 为自己分配了一个大块内存(在当前配置中大约为1GB)、因此我只能测试大约75%的可用内存。
      1. U-Boot 还会为自身保留一些 DDR、但其占用空间要小得多、因此我可以测试几乎所有可用存储器是否存在问题
    2. 我的印象是、我在 Linux 用户空间中获得的地址是虚拟化的、与实际物理地址不同、因此我不一定知道我在使用哪个物理地址行。
      1. 这一点很重要、因为我想至少尝试使用如下算法验证我的所有地址和数据线路是否正常: 动态 RAM 测试
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您在上一帖子中引用的补丁集已应用到 u-boot 代码。 我仍在研究这一点。

    Steve K.