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.

[参考译文] TDA4VM:J721E 中的内联 ECC 错误处理

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1501116/tda4vm-in-line-ecc-error-handling-in-j721e

器件型号:TDA4VM

工具/软件:

尊敬的专家:  

启用 DRAM 内联 ECC 后、R5 u-boot 将提前初始写入 ECC 保护区域。

这将增加系统引导延迟(即使使用 BIST 模块初始写入)并且对用户体验不友好。  

为了减少引导延迟、我建议将 ECC 保护区域的初始写入行为从 R5 u-boot 阶段推迟到引导后阶段(例如、在 Linux 启动后)

在给定针对 ECC 受保护区域的 SoC RMW (读取-修改-写入)策略的情况下、这意味着、  

  1. 系统启动后、如果我初始将特定的 PATTEN 写入 ECC 保护区域(未在 R5 u-boot 中初始写入、以减少引导延迟)
  2. 由于 RMW、在写入操作之前将有读取操作、并且这种额外的读取操作将获得垃圾数据并生成 ECC 错误中断。  

我的权变措施解决方案是、 在系统启动后、在初始写 ECC 保护区域之前禁用 ECC 中断、然后在初始写操作后恢复 ECC 中断。

然后、我在 SDK 中执行以下实验  TI-PROCESSOR-SDK-LINUX-ADAS-j721e-EVM-10_01_00_04

在 R5 u-boot 阶段、  

  • 例程 TI、ECC-ENABLE ="true" 和 ss_cfg 寄存器范围  目标 k3-j721e-ddr.dtsi 才能启用  MSMC2DDR 桥中的内联 ECC 功能  
  • 配置 ECC 保护区0xC000-0000 ~ 0xD000-1000  
  • 然后、    使用特定 PATTEN 0x12345678死区的初始写入 DRAM 区域0xC000-0000 ~ 0xD000-0000
  • 也就是说、0xD000-0000 ~ 0xD000-1000受 ECC 保护、但不会初始写入。

在 A72 u-boot 阶段、  

=> MD.l 0xC0000000 0x4                                   // 0xC000-0000 ~ 0xD000-0000已被初始写入
c0000000:死牛肉12345678死牛肉12345678...xV4… XV4。
=> MD.l 0x029800a8 0x1                                   // DDRSS_V2A_INT_SET_REG、查找启用的 ECC 中断
029800a8:00000038                                      // 0x38表示启用了多个1位/1位/2位错误中断        
=> mw.l 0x029800ac 0x38 0x1                               // DDRSS_V2A_INT_CLR_REG、写入0x38以禁用 ECC 中断
=> MD.l 0x029800a8 0x1                                   // DDRSS_V2A_INT_SET_REG、现在 ECC 中断被禁用
029800a8:00000000

=> mw.l 0xd0000000 0x12345678 0x1000                        //尝试初始写入 ECC 保护区0xD000-0000 ~ 0xD000-1000
"错误"处理程序、ESR 0xbf000002                               //但发生意外异常
ELR:000000008081c158 LR:000000008081c150 (重新定位)
ELR: 000000008feda158 LR: 000000008feda150

x0:0000000000000faf x1:00000000d0000144
x2:0000000000000004 x3:000000008deb8e26
x4:0000000000000100 x5:0000000000000000
x6 : 000000008ff9065a x7 : 0000000000000044
x8:0000000000000010 x9:0000000000000000
X10:000000000000000d x11:0000000000000006
x12:000000008de799a8 X13:000000008de79b00
X14:000000000008 00000008 x15:000000008de79741
x16:000000008feda0d0 X17:0000000000000000
X18:000000008de9dda0 x19:00000000d0000000
x20:0000000000000004 x21:0000000000123456
x22:000000008deb6c10 x23:0000000000000004
x24:000000008ffd8294 x25:0000000000000000
X26:0000000000000000 X27:0000000000000000
X28:000000008deb8ea0 X29:000000008de797f0

代码:d2800001 94029cfd 93407e82 aa1303e1 (d1000400)
//在预期处理程序中添加调试打印、DDRSS_V2A_INT_STAT_REG 读取零、未生成 ECC 中断
//这个例外来自哪里?     如何避免或处理它?
--> leonwang 添加 arch/arm/lib/interrupts_64.c do_error () 271:0x029800a4是:00000000 // DDRSS_V2A_INT_STAT_REG
--> leonwang 添加 arch/arm/lib/interrupts_64.c do_error () 272:0x02980150 is:00000018 // DDRSS_ECC_1B_ERR_CNT_REG
--> leonwang 添加 arch/arm/lib/interrupts_64.c do_error () 273:0x02980158 is:01400000 // DDRSS_ECC_1B_ERR_ADR_LOG_REG
--> leonwang add arch/arm/lib/interrupts_64.c do_error () 274:0x02980160 is:01400000 // DDRSS_ECC_2B_ERR_ADR_LOG_REG
正在重置 CPU...

正在重置...


下面是我的问题:

  1. 禁用 ECC 中断时、为什么初始写入会导致异常?   如何避免或处理此类异常?
  2. 有任何问题吗 的 ECC 错误处理示例代码  MSMC2DDR 桥接器 ?   

顺便说一下、我已经在 ti-processor-sdk-rtos-j721e-evm-10_01_00_04/sdl/examples/ecc 中找到了 ECC 错误处理示例代码  

但它利用 DDRSS 中的 ECC 实现、而不遵循 SDK 文档中的建议

将为 MSMC2DDR brige 提供 ECC 错误句柄示例代码:-)

我期待您的反馈。  

谢谢。

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

    您好、

    我们的专家正在参加研讨会、请期待收到延迟的答复。

    此致、
    Sudheer

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

    您好、

    感谢您发送详细的电子邮件。   有一个概述链接可用、您可能已经看到:

    8.13.为 DDR 启用 TI 的内联 ECC—Processor SDK RTOS J721E

    在具体细节方面、将会让更熟悉 uboot 引导流程的人循环访问。   如果您发布 dtsi 修改、它可能会并行提供帮助。

    此致、

    KB

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

    尊敬的、KB:  

    感谢您的反馈。  

    请查看下面的红色修改:  

    R5 u-boot dts 文件、启用内联 ECC
    文件: TI-PROCESSOR-SDK-LINUX-ADAS-j721e-evm-10_01_00_04/board-support/ti-u-boot-2024.04+git/arch/arm/dts/k3-j721e-ddr.dtsi

    内存控制器@0298e000 {

    兼容="ti、j721e-ddrss";

    REG =<0x0 0x02990000 0x0 0x4000>、
    0x0 0x0114000 0x0 0x100>、
    <0x0 0x02980000 0x0 0x200>;
    reg-names ="cfg"、"Ctrl_MMR_lp4"、"ss_cfg"

    TI、ECC-ENABLE ="true";

    R5 u-boot DRAM 主机驱动程序、config ECC 保护区域及其初始部分
    文件: TI-PROCESSOR-SDK-LINUX-ADAS-j721e-evm-10_01_00_04/board-support/ti-u-boot-2024.04+git/drivers/ram/k3-ddrss/k3-ddrss.c

    静态 void k3_ddrss_lpddr4_ecc_init (struct k3_ddrss_desc *ddrss)

      ......

       k3_ddrss_set_ecc_range_r0 (base、0x40000000、0x10001000); // ECC 受保护的 DRAM 区域

                                                     //映射到0xC000-0000、+0x1000-1000

     ......

       k3_ddrss_preload_ecc_mem_region ((u64 *) 0xC0000000、0x10000000、0x12345678deadbeef);

                                                     //初始写入 DRAM 区域0xC000-0000、+0x1000-0000

                                                     //将0x1000 DRAM 区域初始写入推迟到 A72 u-boot

                                                     //但即使禁用了 ECC 中断、也会发生意外错误  

     ......

    }

    我想检查此"延迟初始写入"解决方案是否在 A72 u-boot 中有效。

    如果 ECC 错误处理流程可用并在 u-boot 中正常工作、则 我可以将其应用于 Linux。

    提前感谢您的支持!

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

    您好、

    在 u-boot k3-ddrss 驱动程序中、您是否可以尝试删除 k3_ddrss_lpddr4_ecc_init 中的 ECC_CK 启用 ?

    然后、在初始写入后将其重新添加到 u-boot 提示符中。

    此致、
    Jared

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

    您好、Jared、  

    感谢您的快速答复。  

    但是 建议在使用 DDR 之前设置 ECC_CK 。 (以及 RMW_EN)

    我不确定是否可以将 ECC_CK 启用从 R5 u-boot 阶段推迟到引导后阶段(例如、在 u-boot 或 Linux 启动之后)

    不管怎样、我明天去实验室试一下。

    谢谢。

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

    您好、

    您能尝试设置寄存器吗  EMIF_ew_ctlcfg_DDRSS_CTL_206 ECC_ENABLE  字段更改为1、以便启用 ECC、但不会检测或纠正错误?

    此致、
    Jared

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

    您好、Jared、  

    请检查下面的更新

    测试#01:将 ECC_CK 启用推迟到 A72 u-boot 提示符

    似乎可以在运行时启用 ECC_CK、但 ECC 错误中断未正常触发。  

    // 01. R5 u-boot config ECC 保护区0xD000-0000 ~ 0xD000-1000、但无初始写入、禁用 ECC_CK  
    // 02。 在初始写入之前检查 ECC 保护区域内容、由于禁用了 ECC_CK、无预期的 ECC 错误
    按任意键停止自动引导:0
    => MD.b 0xd00001e0 0x40
    d00001e0: 08 40 00 80 94 84 10 52 80 00 41 13 08 01 01 20 .@. R.A....
    d00001f0:81 1c 0A 00 08 88 04 00 01 0A 20 00 03 80 .......... ...
    d0000200:00 11 20 00 00 00 C1 18 12 01 00 00 90 19 20 ... ....
    d0000210:00 20 01 00 88 00 80 00 03 88 00 11 18 40 10 C2。 ....... @……
    // 03. 使用模式"A5"对 ECC 区域(0xD000-0000、+0x200)的一部分进行初始写入、然后检查内容
    => mw.b 0xd0000000 0xA5 0x200
    => MD.b 0xd00001e0 0x40
    d00001e0:A5 A5 A5 A5 A5 A5 A5 A5 A5 A5 A5 A5 A5 A5 A5 A5 A5 A5 第5条............
    d00001f0:A5 A5 A5 A5 A5 A5 A5 A5 A5 A5 A5 A5 A5 A5 A5 A5 A5 A5 第5条............
    d0000200:00 11 20 00 00 00 C1 18 12 01 00 00 90 19 20 ... ....
    d0000210:00 20 01 00 88 00 80 00 03 88 00 11 18 40 10 C2。 ....... @……
    // 04. 在 DDRSS_ECC_CTRL_REG 中启用 ECC_CK
    => MD.l 0x02980120 0x1
    02980120:00000013…
    => mw.l 0x02980120 0x17 0x1
    => MD.l 0x02980120 0x1
    02980120:00000017

    // 05。 再次检查 ECC 保护区
    => MD.b 0xd00001e0 0x20    // 初始写入区域(0xD000-0000、+0x200)、无 ECC 错误、如预期那样
    d00001e0:A5 A5 A5 A5 A5 A5 A5 A5 A5 A5 A5 A5 A5 A5 A5 A5 A5 A5 第5条............
    d00001f0:A5 A5 A5 A5 A5 A5 A5 A5 A5 A5 A5 A5 A5 A5 A5 A5 A5 A5 第5条............
    =>                     // 未写入的区域、不触发 ECC 错误、为什么!??
    d0000200:00 11 20 00 00 00 C1 18 12 01 00 00 90 19 20 ... ....
    d0000210:00 20 01 00 88 00 80 00 03 88 00 11 18 40 10 C2。 ....... @……

    //跳过... 继续按 Enter 键以执行序列读取更多 DRAM 区域、而不会触发 ECC 错误...
    =>
    d0000560:B1 14 20 00 80 29 03 18 06 40 00 11 03 24 18 00 ... …………@……………………………………
    d0000570:A9 00 18 10 38 01 00 32 38 08 00 20 90 00 00 ...8..28。 ...
    =>         //最后、在0xD000-0580上触发 ECC 错误;我在序列以上重试3次、始终在此地址失败、为什么?
    "同步中止"处理程序、ESR 0x96000210、far 0xd0000580
    ELR:00000000808bfa6c LR:00000000808bf964 (重新定位)
    ELR: 000000008ff7da6c LR : 000000008ff7d964
    x0:0000000000000009 x1:000000008de79738
    x2:00000000fffffffe x3:0000000000000020
    x4:0000000000000000 x5:000000008de79730
    x6:0000000000000030 x7:000000008de79680
    x8:00000000000000000000 x9:00000000ffffd8
    X10:000000000000000d x11:0000000000000006
    x12:000000008de799a8 X13:000000008de79b00
    X14:000000000008 00000008 x15:000000008de79730
    x16:000000008fed99f4 X17:0000000000000000
    x18:000000008de9dda0 x19:0000000000000010
    x20:0000000000000001 x21:0000000000000010
    x22:00000000d0000580 x23:000000008ffb31e9
    x24:000000008de79739 x25:0000000000000000
    X26:000000008de796e8 X27:0000000000000002
    X28:0000000000000001 X29:000000008de79680

    代码:794002c3 92403c63 78397b43 17fffffffee (394002c3)
    --> leonwang 添加 arch/arm/lib/interrupts_64.c do_sync () 215:0x029800a4是:00000030  // DDRSS_V2A_INT_STAT_REG
    --> leonwang add arch/arm/lib/interrupts_64.c do_sync () 216: 0x02980158 is : 01400016
    --> leonwang add arch/arm/lib/interrupts_64.c do_sync () 217:0x02980160 is:01400016

    测试#02:访问 DDRSS_CTL_206寄存器  

    => MD.l 0x02990338 0x1
    02990338: 02000fff .
    => mw.l 0x02990338 0x02010fff    //将 ECC_ENABLE 字段位[17-16]设置为1
    => MD.l 0x02990338 0x1
    02990338:02010fff

    注意:MSM2DDR 和 DDR 控制器均提供 ECC 功能、但只能启用一项 ECC 功能。

    指定  TI-PROCESSOR-SDK-LINUX-ADAS-j721e-EVM-10_01_00_04  似乎只有 MSM2DDR ECC 驱动程序在 r5-uboot 中可用。

    您建议使用 DDR 控制器 ECC 功能吗?  是否有可用的 u-boot 修补程序?  

    谢谢。

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

    尊敬的 Leon:

    您建议使用 DDR 控制器 ECC 功能吗?

    您应该使用 MSMC2DDR 控制器、因为它更优。

    是否有任何 u-boot 补丁可用?  [/报价]

    否、没有可用于此目的的 u-boot 补丁、因为这以前没有做过。

    我将单独进行一些测试、但在此期间您能回答我的问题吗? 这最终将如何改进您的系统? 您仍然必须先设置对 DDR 的初始写入、才能在需要 ECC 的 Linux 中正确执行任何操作、并且速度会变慢、因为它不使用 BIST。  

    此外、在 Linux 同时使用 DDR 时、您如何配置内存?

    此致、
    Jared

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

    您好、Jared、  

    让我澄清一下。  

    启用内联 ECC 功能后、在 R5 u-boot 阶段、对受 ECC 保护的 DRAM 进行额外的初始写入(即使使用 BIST)也将增加引导延迟。

    对引导延迟敏感的系统(例如汽车系统)不友好

    我的想法是将初始写入从 R5 u-boot 阶段推迟到 Linux-POST 阶段。

    这意味着 Linux 可以在短时间内启动(例如、屏幕亮起、摄像头打开)、 然后后台软件运行初始写入、但现在它不会影响用户体验。  

    我已经有了软件解决方案,可以在特定 DRAM 区域上进行后期写入,不会影响 Linux 内核。

    最后一个缺失部分是 ECC 保护区初始写入的 ECC 错误句柄(由 RMW 策略导致)  

    我可以收到您的电子邮件,或在私聊中讨论吗? 我可以向您分享更多详细信息。

    提前感谢您的支持:-)

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

    您好、

    我明白了。 我将继续测试,看看我能完成什么。

    如果您有 FAE、他们可以代表您在内部处理器论坛上发帖。

    此致、
    Jared

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

    您好、

    您当前正在测试不属于 DRAM 范围的内存。 如果运行 bdinfo、则可以查看 DRAM 存储器在寻址中的位置。

    => bdinfo
    boot_params = 0x0000000000000000
    DRAM bank   = 0x0000000000000000
    -> start    = 0x0000000080000000
    -> size     = 0x0000000080000000
    DRAM bank   = 0x0000000000000001
    -> start    = 0x0000000880000000
    -> size     = 0x0000000080000000
    flashstart  = 0x0000000000000000
    flashsize   = 0x0000000000000000
    flashoffset = 0x0000000000000000
    baudrate    = 115200 bps
    relocaddr   = 0x00000000ffebe000
    reloc off   = 0x000000007f6be000
    Build       = 64-bit
    current eth = ethernet@46000000port@1
    ethaddr     = 24:76:25:a5:73:11
    IP addr     = <NULL>
    fdt_blob    = 0x00000000fde79740
    new_fdt     = 0x00000000fde79740
    fdt_size    = 0x0000000000024660
    multi_dtb_fit= 0x0000000000000000
    lmb_dump_all:
     memory.cnt = 0x2 / max = 0x10
     memory[0]	[0x80000000-0xffffffff], 0x80000000 bytes flags: 0
     memory[1]	[0x880000000-0x8ffffffff], 0x80000000 bytes flags: 0
     reserved.cnt = 0x5 / max = 0x10
     reserved[0]	[0x9e800000-0xb7ffffff], 0x19800000 bytes flags: 4
     reserved[1]	[0xb8000000-0xd7ffffff], 0x20000000 bytes flags: 0
     reserved[2]	[0xd8000000-0xe5ffffff], 0x0e000000 bytes flags: 4
     reserved[3]	[0xfce75000-0xffffffff], 0x0318b000 bytes flags: 0
     reserved[4]	[0x880000000-0x8a6ffffff], 0x27000000 bytes flags: 4
    devicetree  = separate
    serial addr = 0x0000000002800000
     width      = 0x0000000000000000
     shift      = 0x0000000000000002
     offset     = 0x0000000000000000
     clock      = 0x0000000002dc6c00
    arch_number = 0x0000000000000000
    TLB addr    = 0x00000000fffe0000
    irq_sp      = 0x00000000fde79730
    sp start    = 0x00000000fde79730
    Early malloc usage: 3648 / 8000

    DRAM 落在以下范围内:0x8000000到0x900000000。 您是否可以将存储器设置在此范围内来运行测试?

    另请注意、看看 BIST 将设置的存储器、范围为0xe0000000 (8/9 * 0x1000000000)。

    您遇到的错误可能是由于您尝试访问无法访问的系统寄存器。

    此致、
    Jared

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

    您好、Jared、  

    感谢您的反馈

    我再次检查我的上一篇文章,发现我的第一篇文章的描述有拼写错误,我添加了一个额外的零起始地址...

    我已经纠正了它在我的第一篇文章, ECC 保护区应该是 0xC000-000 ~ 0xD000-1000, 对不起的误解...

    但我的测试命令序列是正确的、您可以在我的第一个帖子中检查日志。

    让我们重点看一下我的第一个测试后序列、 测试区域属于组0范围:

    感谢您的提醒。

    我不熟悉 BIST、为避免使用它、我 用 CPU 作为临时解决方案、编写一个函数来初始写入 ECC 保护区的一部分(0xC000-0000 ~ 0xD000-0000)。  左0xD000-0000 ~ 0xD000-1000区域未写入。  

    毕竟、我的最终用途根本不是在 u-boot 中运行 ECC 受保护区域的初始写入。

    static void k3_ddrss_preload_ecc_mem_region(u64 *addr, u64 size, u64 pattern)
    {
        u64 i = 0; 
        static u64 count = 0; 
        for (i = 0; i < (size / 8); i++) 
        {    
            if( count % 0x01000000 == 0)
                printf(".");
    
            addr[i] = pattern;
            count++;
        }    
    }
    
    static void k3_ddrss_lpddr4_ecc_init(struct k3_ddrss_desc *ddrss)
    {
        ... skip ...
        // init ecc area on low mem
        printf("---> leonwang add %s %d init write to cpu addr: 0xC000_0000 + 0x1000_0000\n", __FILE__, __LINE__);
        k3_ddrss_preload_ecc_mem_region( (u64 *)0xC0000000, 0x10000000, 0x12345678deadbeef);
        ... skip ...
    }

    现在技术障碍我是,如何处理 ECC 错误在初始写在 u-boot 提示符? (以及在 Linux-POST 阶段)

    u-boot 中没有 ECC 错误处理程序、一旦发生 ECC 错误、u-boot 将复位。 (我想处理 ECC 错误并让系统继续运行)

    我面前似乎有两个选项:

    1. 解决方法:忽略 ECC 错误、只需在初始写入期间暂时禁用 ECC 错误中断;
      1. 但在我的测试中、会发生意外的"同步中止"。 我仍然不知道如何避免或处理它
    2. 服务 ECC 中断:我研究了 J721E TDA4VM TRM、下面是几个与 ECC 相关的寄存器、但没有有关处理流的详细信息、例如:
      1. DDRSS_ECC_1B_ERR_ADR_LOG_REG、 我修补  DO_SYNC ()并在发生错误时转储它、那么 如何从寄存器内容解码错误地址?
      2. DDRSS_V2A_INT_STAT_REG、TRM 显示"写入1以清除状态 之后 中断已被处理"、那么如何处理 ECC 中断?

    你有什么建议吗?

    是否有任何 ECC 错误处理文档或示例代码可供参考?

    再次感谢您的支持:-)

    此致

    Leon

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

    尊敬的 Leon:

    有有关 ECC 处理的 RTOS SDK 文档: https://software-dl.ti.com/jacinto7/esd/processor-sdk-rtos-jacinto7/10_01_00_04/exports/docs/sdl/sdl_docs/userguide/j721e/modules/ecc.html 

    对于您的 Linux 映像、我启用 ECC 后也会看到同步中止。 只要我推迟 错误计数寄存器清除、ECC1BERR_EN、ECC2BERR_EN、ECCM1BERR_EN 和 ECC_CK、我就没有看到任何问题。

    在写入 Linux 中的初始存储器之前、是否可以尝试暂停设置以下寄存器?

    存储器地址 数据值 说明
    0x02980150 0x01 清除 ECC 计数
    0x029800A8 0x38 ECC1BERR_EN、ECC2BERR_EN 和 ECCM1BERR_EN
    0x02980120 0x17 ECC_CK

    另一种选择是尝试仅为 ECC 设置特定范围(并写入这部分)、而不是尝试整个 RAM。

    此致、
    Jared

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

    您好、Jared、  

    非常感谢您的建议!

    它的工作是推迟 ECC_CK 启用,直到在 Linux 提示符下完成对 ECC 保护区域的初始写入 :-)

    这应该是一个很好的权变措施解决方案、以避免在 Linux 内核中使用额外的 ECC 句柄。

    但一个问题是推迟 ECC_CK 不是典型用法、它违反了数据表中的建议。  

    您是否知道以前有人(客户)这样做?

    或者您预计会有任何潜在风险吗?

    提前感谢您的支持。

    此致、  
    Leon

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

    尊敬的 Leon:

    我不知道有人在做这件事。 我也不知道这种变化是否会增加风险。

    我会询问我们的一些其他专家是否有任何意见/知识、并返回给您。

    此致、
    Jared

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

    尊敬的 Leon:

    再说一次、我对客户以前这样做的情况一无所知。 我眼中的问题是 Linux 是从 DDR 执行的。 不建议以这种方式启用 ECC、因此产生的任何问题都必须自行调试。

    如果您正在尝试尽可能缩短启动时间、可以尝试 查看 RTOS 文档以了解更多解决方案: https://software-dl.ti.com/jacinto7/esd/processor-sdk-rtos-jacinto7/10_01_00_04/exports/docs/psdk_rtos/docs/user_guide/index.html 

    您还可以尝试仅将 DDR 的一部分设置为 ECC、从而减少 BIST 写入所需的时间。

    此致、
    Jared

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

    您好、Jared、  

    好的、我明白了。  非常感谢您的支持!

    此致、  

    Leon