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.

[参考译文] RTOS/AM5728:ARM LPAE 和/或4GB 映射内存支持

Guru**** 2553450 points
Other Parts Discussed in Thread: AM5728, SYSBIOS, 66AK2H14

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/744238/rtos-am5728-arm-lpae-and-or-4gb-mapped-memory-support

器件型号:AM5728
Thread 中讨论的其他器件: SYSBIOS66AK2H14

工具/软件:TI-RTOS

您好!

是否可以访问连接到 TI-RTOS 程序中 AM5728处理器的全范围4GB DDR? 具体而言、是否可以将虚拟地址0x80000000至0xFFFFFFFF 映射到4GB DDR 的下半部分、将虚拟地址0x100000000至0x180000000映射到4GB DDR 的上半部分、并通过程序中的指针访问所有这些地址? 该特定范围不是必需的、但我希望能够在程序中一次访问所有4GB。

谢谢、

Matt Mckee

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

    请查看有关此主题的类似讨论以及此处提供的指导:
    e2e.ti.com/.../2740190

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

    您好、Rahul、

    我确实看到并读到了这一讨论。 遗憾的是、您在其中一个回复中提到的 DDR 诊断程序在尝试访问0xFFFFFFFF 以上的存储器地址时会崩溃、即使这些地址映射到0x200000000及以上并且在硬件配置后可通过 CCS 的存储器浏览器进行访问。 这假设您提到的 DDR 诊断程序是电路板支持库 diag/mem 中的程序。

    您是否有 LPAE 支持的示例形式?

    谢谢、

    Matt Mckee

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

    Matt、

    请参阅 AM572x 数据手册(SPRS953E)中表3-1下的脚注2:
    (2)在统一 L3存储器映射中、SDRAM 空间的最大值为2GB、可供所有 L3启动器使用、包括 MPU (MPU、
    GPU、DSP、IVA、DMA 等)。 通常、该空间在两个 EMIF 之间交错、以优化存储器性能。 如果是系统
    填充超过2GB 的物理存储器、该附加可寻址空间仅可由 MPU 通过较大的 Arm V7访问
    物理地址扩展(LPAE)。

    这与 AM572x 中的表3-1以及 AM572x Sitara 处理器技术参考手册(SPRUHZ6J)第398页的脚注一致。 请注意、所有处理内核均本地支持32位/4GB 寻址。 所有超过此限制的寻址都必须通过 MMU 或其他扩展寻址方法来处理。 因此、只有2GB 的 DDR3可直接访问、如 DM 中所示。 另一个2GB (安装最大允许值时)必须使用 LPAE 进行访问。

    当您在每个 EMIF 上仅配置1GB SDRAM 时、您是否会看到强大的存储器存取功能?  我们需要先验证这一点、然后再转向更复杂的配置。

    Tom

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

    您好、Tom、

    感谢您的回答。 当处理器在每个 EMIF 上配置为1GB SDRAM 时、总共可配置2GB SDRAM、因此我们可以看到强大的内存访问能力。 PDK 的电路板支持部分提供的 TI-RTOS 诊断示例'em'可以写入和读取全部这两个2GB。 0x80000000至0xFFFFFFFF。

    谢谢、

    Matt Mckee

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

    Matt、

    感谢您的耐心等待。  所有现成的示例代码都与每个 EMIF 上只有1GB 的现有 EVM 保持一致。  我们正在努力识别正确配置 LPAE 以访问扩展存储器空间的示例代码。

    Tom

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

    感谢您的持续更新。 我期待查看您找到的示例代码。

    谢谢、

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

    Matt、

    我们仍在处理此主题。

    Tom

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

    LPAE 通过 MMU 配置完成。 以下是 TI-RTOS 的参考详细信息。 在诊断情况下、可以对裸机执行类似的映射。
    software-dl.ti.com/.../Mmu.html

    最好了解您是否最终需要除诊断之外的 TI-RTOS 参考示例。 在大多数 TI 处理器 SDK RTOS 示例中、有.cfg 文件可用于设置 DDR 映射。

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

    如果您有一个 MMU 配置示例、其中可以寻址完整的4GB、这将是值得赞赏的。 此外、有关如何将 MMU 配置应用于裸机诊断的信息也非常有用。 据我所知、最新的 SDK mem 诊断程序不会在 AM65x EVM 上测试完整的4GB DDR4、因此此信息也很有用。

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

    我们为 AM654x 设置了裸机箱 MMU。 在任何电路板诊断示例中、应用程序都与 ti.csl.aa53fg 库链接、在该库中可以找到归档的 CSL_A53.c、来自 pdk_am65xx_1_0_2\packages/ti\csl\arch\a53\src。 函数 CSL_muStartup()设置 MMU。

    有两个 API 调用:
    CSL_muInitLevel1DESC()和 CSL_muInitLevel2DESC()。 前者使用1GB 块大小。 后者使用2MB 块大小。 我们完成了第一个2GB DDR:
    DESC = CSL_muInitLevel1DESC (0x8000000、&atttrs);
    gCSLa53Mmulevel1Table[2]=描述;
    DESC = CSL_muInitLevel1DESC (0xC0000000、attrs);
    gCSLa53Mmulevel1Table[3]=描述;

    地址是64位地址、您可以对下一个2GB DDR 执行相同的操作。

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

    您能否确认 AM572x SOC 上是否确实可以这样做? 据我所知、您提到的 CSL 代码的 A15版本为虚拟地址和物理地址参数获取32位空指针、并在函数中将它们转换为32位整数。 我认为这会阻止映射超过0xFFFF 的物理地址、这对于使用超过2GB 的 DDR 来说是必要的、因为超过2GB 的任何物理地址都从0x02 0000 0000 0000开始。

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

    从我看到的 SYSBIOS A15 MMU 中: software-dl.ti.com/.../Mmu.html

    无效
    MMU_setFirstLevelDesc (PTR virtualAddr、UINT64 phyAddr、MMU_DescriptionAttrs * atttrs);
    无效
    MMU_setSecondLevelDesc (ptr virtualAddr、uint64 phyAddr、MMU_DescriptionAttrs * attrs);

    它们是64位地址。

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

    新年快乐! 这是否适用于裸机代码? 如果没有、您能否检查 CSL 代码是否实际支持64位地址映射?

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

    这是 SYSBIOS 代码、不适用于裸机环境。 对于 AM572x、我查看了中的裸机 CSL 代码:TI\CSL\ARCH\a15\src\CSL_a15_startup.c
    CSL_a15InitMmuLongDesc ()

    CSL_a15SetMMUSecondLevelLongDesc ()

    使用的物理地址为32位。 我与我们的开发团队进行了核对。 对于裸机或 TI-RTOS 中的 Processor SDK RTOS 项目、我们从未需要执行64位操作。 您的 DDR 大小和地址范围是多少?

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

    DDR 大小为4GB、对于完整的4GB DDR 测试、我相信地址范围将是0x80000000至0xFFFFFFFF 和0x200000000至0x280000000。 由于虚拟地址范围仅为32位、我希望在硬件配置后使用 VA 0x0到0xFFFFFFFF (如果可能)。

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

    如果您为4GB DDR 创建虚拟地址(0x0至0xFFFFFFFF)、如何访问最初介于0x0至0x7fff_FFFF 之间的任何正常地址? 如果您想通过 API 将36位物理地址映射到32位 VA、CSL API 不使用36位指针、则有人告诉我 A15 GCC 编译器仅支持32位指针。 如果使用36位、它将不起作用。

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

    我假设我可以使用某种 MMU 表列来访问整个 DDR 系列、因为到目前为止所涉及的含义是在某些情况下可以访问4GB。 TI ARM 编译器是否支持36位指针? 即使是这样,由于32位 VA 范围的限制,我是否只能使用大于2GB 的 DDR 作为堆栈或堆空间?

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

    我们使用的 A15编译器为:gcc-arm-no-eabi-6-2017-q1-update/bin/arm-no-eabi-gcc。 当使用64位指针时,我们遇到了问题,因此 CSL MMU 代码只使用了32位指针。

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

    如果 RTOS 附带的 A15编译器不支持64位指针、您能不能建议我在 SYSBIOS 项目中使用大于2GB 的所有 DDR 填充的完整范围? 在4GB DDR 配置中,DDR >2GB 能否以任何方式使用,特别是与前2GB 同时使用?

    谢谢、
    Matt Mckee
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Matt、
    很抱歉耽误你的时间,我们很快就会发表我们的答复。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Matt、

    很抱歉耽误你的时间! 我们只有安装了2GB DDR 的 AM57x 板。 对于 CSL 软件、我们需要根据有关使用当前 CSL 库配置 LPAE 的 ARM 规格详细信息来研究可行性。 这将需要一段时间。

    我们还将检查其他组、它们可能具有采用类似 AM57x 芯片的4GB DDR、以及是否经过测试。

    我将在几天后更新您的状态。

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

    感谢耐心等待! 另一个组具有带4GB DDR 的 EVM、并使用 Linux 进行了测试、相关信息请访问 :processors.wiki.ti.com/.../Category:Processor_SDK_Linux_Automotive
    DRA7x 处理器与 AM57x 相同。 您可以看到软件下载链接、并查看 LPAE 的设置代码。

    对于 AM57x、Linux 与 DRA7x 类似、相关信息如下: www.ti.com/.../PROCESSOR-SDK-AM57X
    LPAE 和配置在 Linux 内核中完成。 内核中的 LPAE 支持由 Kconfig 符号 CONFIG_ARM_LPAE 启用。
    查找文件"arch/arm/kernel/setup.c"中调用的函数 early _mm_init(),该函数应提供有关 LPAE 设置方式的更多详细信息。

    LPAE 无法在 AM57x EVM 上进行测试、因为 DDR 的大小仅为2GB。 并且没有用于 LPAE 测试的 RTOS。 希望您能找到 Linux 中的代码信息并适应您的 DDR 测试卡。

    此致、Eric
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    让我来重述一下:DRA7x 处理器和 AM57x 来自相同的基本平台、有不同的 IP 和功能、但出于此帖子的目的、Eric 的评论是准确的。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Eric、Rogerio、

    感谢您的反馈。 PHYTEC 在 Linux 中支持 phyCORE-AM572x 的4GB DDR3、因此我们熟悉 LPAE 及其设置方式(至少在 Linux 中)。

    在 TI-RTOS 路线图中、是否计划为 DRA7x 处理器添加4GB DDR3支持? 这对我们非常有帮助、因为我们的客户在使用带有 TI-RTOS 的2GB DDR3时遇到了限制。

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

    抱歉、我们没有任何计划在 TI-RTOS 中支持 LPAE。

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

    你在干什么? 我是否可以建议:

    如您所知、目录的 AM57x EVM 本身不支持4GB 内存、但 DRA7xx EVM 的姊妹芯片支持4GB 内存。 因此、理论上您可以查看这是如何完成的、然后将代码的配置部分移植到 AM572x。

    EVM:
    www.ti.com/.../J6EVM5777

    软件:
    www.ti.com/.../PROCESSOR-SDK-DRA7X

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

    [引用用户="Matthew Mcke">是否可以访问 TI-RTOS 程序中连接到 AM5728处理器的全范围4GB DDR? 具体而言、是否可以将虚拟地址0x8000000000至0xFFFFFFFF 映射到4GB DDR 的下半部分、将虚拟地址0x100000000至0x180000000映射到4GB DDR 的上半部分、 并且所有这些地址都可以通过程序中的指针访问吗? Cortex-A15具有一个32位虚拟地址、MMU 可以使用 ti.sysbios.family.arm.a15.MMU 模块将其映射到40位物理地址。

    我没有带4GB DDR 的 AM5728板、但在配备了8GB 的 DDR3A 接口的 EVMK2H 的66AK2H14中的 Cortex-A15上进行了测试。 在测试中、SYS/BIOS Cortex-A15虚拟地址映射被设定为:

    a.该程序在 多核共享存储器(MSM)中运行、其中虚拟地址0x0C000000 -> 0x0C5FFFFF 映射到 MCMCSRAM 物理地址 0x000C000000 -> 0x000C5FFFFF

    b.虚拟地址0x10000000 -> 0xFFFFFFFF 用于构成3840MB 堆、映射到 DDR3A 物理地址0x0800000000 -> 0x08F0000000。

    c.一些其他虚拟地址< 0x10000000映射到 SYS/BIOS 所需的外设、例如计时器。

    测试程序执行了堆的大量分配、并使用测试模式填充了分配、然后验证了测试模式以检查是否可以使用所有堆:

    [ARM_A15_0]进入 MAIN ()
    测试迭代0、使用1个分配
    请求的 alloc_size=0xf0000000实际 alloc_size=0xf0000000 buffer=@
    
    @
    @
    
    @
    @10000000测试迭代1使用2个分配请求的迭代_size=0xC0000000实际 alloc_size=0x0000000实际 alloc_size=0x0000000实际 alloc_size=0x0000000=请求的 alloc_size= 0x0000000= 0x0000000=请求的 alloc_size= 0x0000000= 0x0000000_alloc_size= 0x0000000=请求的大小= 0x0000000_alloc_size= 0x0000000=请求的大小= 0x0000000_alloc_size= 0x0000000_size=请求的大小= 0x0000000_alloc_size= 0x0000000=请求的大小= 0x0000000_alloc_size
    Buffer=@f0000000
    测试迭代3、使用4个分配
    请求的 alloc_size=0x80000000实际 alloc_size=0x80000000缓冲区=@10000000
    请求的 alloc_size=0x30000000实际 alloc_size=0x30000000缓冲区=@90000000
    请求
    的 alloc_size=0x30000000实际 alloc_size=0x30000000缓冲区
    =@@c10000000实际大小= 0x0000000_complete_size =请求的大小= 0x0000000_alloc_size = 0x0000000请求的大小 

    AM5728上可能采用类似的方法来配置0x8000000以下的一些未使用虚拟地址、以映射到物理地址>= 0x100000000的 DDR 存储器。 一个问题是、您需要为程序所需的任何外设保留虚拟地址空间、尽管 MMU 可用于为物理地址提供不同的外设虚拟地址、但不确定驱动程序是否使用非默认虚拟地址。

    随附了我的测试程序、开发时使用:
    - CCS 8.3
    - GNU arm 编译器 v7.2.1
    -SYS/BIOS 6.75.1.05
    - XDCtools 3.51.1.18_core

    e2e.ti.com/.../66AK2H14_5F00_A15_5F00_3840M_5F00_heap.zip

    注意:当程序首次运行时、EVMK2H 引导模式被设置为"DSP no boot"、其中 xtcievmk2x_arm.gel 初始化 DDR 接口、 但 GEL 脚本仅将 DDR3A 配置为2GB、这会导致测试失败、因为堆的一部分被混叠到相同的物理地址、并且预期的测试模式未被读回。 将 EVMK2H 引导模式更改为"ARM SPI"并让 U-boot 将 DDR3初始化为8 GB、然后允许测试成功运行。

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

    感谢您的响应和示例代码。 我还没有时间处理它、但这确实让我在回顾该主题时可以尝试一下。 非常感谢。

    -Matt Mckee