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.

[参考译文] AM6422:如何在 uboot2023.10 — 内联 ECC 下执行 ddrss 多位测试

Guru**** 2782615 points

Other Parts Discussed in Thread: AM6422

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1609299/am6422-how-to-do-ddrss-multi-bits-test-under-uboot2023-10---inline-ecc

器件型号: AM6422

尊敬的 TI 专家:

我们使用 AM6422 定制板。 我想进行内联 ECC ddrss 测试。  

  1. 我已启用符合 https://software-dl.ti.com/processor-sdk-linux-rt/esd/AM64X/11_02_08_02/exports/docs/linux/Foundational_Components /U-Boot/UG-DDRSS.html 的内联 ECC 

   2.并按照 https://git.ti.com/cgit/ti-u-boot/ti-u-boot/commit/?h=ti-u-boot-2023.04-next&id=af5609db6d1124e046cf623f80e00c3d27ff5fec 在 uboot 中编译 ddrss cmd。

当我进行 ddrss 测试时、1 位错误行为与发行说明中的描述相同。

=> ddrss ecc_err 82400000 1
Testing DDR ECC:
        ECC test: Disabling DDR ECC ...
        ECC test: addr 0x82400000, read data 0x0, written data 0x1, err pattern: 0x1, read after write data 0x1
        ECC test: Enabled DDR ECC ...
        ECC test: addr 0x82400000, read data 0x0
        ECC test: DDR ECC 1-bit error
        ECC test: 1-bit ECC err count: 1
        ECC test: 1-bit error in [0x2400000:0x2400008]
=> ddrss ecc_err 82400000 1
Testing DDR ECC:
        ECC test: Disabling DDR ECC ...
        ECC test: addr 0x82400000, read data 0x1, written data 0x0, err pattern: 0x1, read after write data 0x0
        ECC test: Enabled DDR ECC ...
        ECC test: addr 0x82400000, read data 0x0
=> 

但多位错误和多个单个位错误行为是不同的。  

=> ddrss ecc_err 82400000 3
Testing DDR ECC:
        ECC test: Disabling DDR ECC ...
        ECC test: addr 0x82400000, read data 0x0, written data 0x3, err pattern: 0x3, read after write data 0x3
        ECC test: Enabled DDR ECC ...

ERROR:   Unhandled External Abort received on 0x80000000 from EL2
ERROR:   exception reason=1 syndrome=0x92000210
Unhandled Exception from EL2
x0             = 0x0000000000000001
x1             = 0x0000000000000000
x2             = 0x000000000000000a
x3             = 0x0000000002800000
x4             = 0x0000000002800000
x5             = 0x00000000986724df
x6             = 0x0000000000000033
x7             = 0x000000000000000f
x8             = 0x0000000098672920
x9             = 0x00000000fffffff0
x10            = 0x0000000000000010
x11            = 0x0000000000000002
x12            = 0x0000000000000002
x13            = 0x0000000098672c10
x14            = 0x00000000ffffffff
x15            = 0x00000000986724df
x16            = 0x000000009a6ebed4
x17            = 0x0000000000000000
x18            = 0x0000000098686d90
x19            = 0x0000000000000004
x20            = 0x0000000082400000
x21            = 0x000000000000023f
x22            = 0x0000000000000000
x23            = 0x0000000000000003
x24            = 0x0000000000000000
x25            = 0x0000000000000000
x26            = 0x000000000f300134
x27            = 0x0000000000001a7f
x28            = 0x00000000986dd440
x29            = 0x0000000098672920
x30            = 0x000000009a6ec118
scr_el3        = 0x000000000000073d
sctlr_el3      = 0x0000000030cd183f
cptr_el3       = 0x0000000000000000
tcr_el3        = 0x0000000080803520
daif           = 0x00000000000002c0
mair_el3       = 0x00000000004404ff
spsr_el3       = 0x00000000600002c9
elr_el3        = 0x000000009a6ec118
ttbr0_el3      = 0x00000000701ce800
esr_el3        = 0x0000000092000210
far_el3        = 0x0000000082400000
spsr_el1       = 0x0000000000000000
elr_el1        = 0x0000000000000000
spsr_abt       = 0x0000000000000000
spsr_und       = 0x0000000000000000
spsr_irq       = 0x0000000000000000
spsr_fiq       = 0x0000000000000000
sctlr_el1      = 0x0000000030d00801
actlr_el1      = 0x0000000000000000
cpacr_el1      = 0x0000000000000000
csselr_el1     = 0x0000000000000000
sp_el1         = 0x0000000000000000
esr_el1        = 0x0000000000000000
ttbr0_el1      = 0x0000000000000000
ttbr1_el1      = 0x0000000000000000
mair_el1       = 0x0000000000000000
amair_el1      = 0x0000000000000000
tcr_el1        = 0x0000000000800080
tpidr_el1      = 0x0000000000000000
tpidr_el0      = 0x0000000000000000
tpidrro_el0    = 0x0000000000000000
par_el1        = 0x0000000000000000
mpidr_el1      = 0x0000000080000000
afsr0_el1      = 0x0000000000000000
afsr1_el1      = 0x0000000000000000
contextidr_el1 = 0x0000000000000000
vbar_el1       = 0x0000000000000000
cntp_ctl_el0   = 0x0000000000000000
cntp_cval_el0  = 0x0000000000000000
cntv_ctl_el0   = 0x0000000000000000
cntv_cval_el0  = 0x0000000000000000
cntkctl_el1    = 0x0000000000000000
sp_el0         = 0x00000000701cb400
isr_el1        = 0x0000000000000000
dacr32_el2     = 0x0000000000000000
ifsr32_el2     = 0x0000000000000000
cpuectlr_el1   = 0x0000000000000040
cpumerrsr_el1  = 0x00000000011c0316
l2merrsr_el1   = 0x0000000013082800
cpuactlr_el1   = 0x00001000090ca000
=> ddrss ecc_err 82400000 1
Testing DDR ECC:
        ECC test: Disabling DDR ECC ...
        ECC test: addr 0x82400000, read data 0x0, written data 0x1, err pattern: 0x1, read after write data 0x1
        ECC test: Enabled DDR ECC ...
        ECC test: addr 0x82400000, read data 0x0
        ECC test: DDR ECC 1-bit error
        ECC test: 1-bit ECC err count: 1
        ECC test: 1-bit error in [0x2400000:0x2400008]
=> ddrss ecc_err 82400008 1
Testing DDR ECC:
        ECC test: Disabling DDR ECC ...
        ECC test: addr 0x82400008, read data 0x0, written data 0x1, err pattern: 0x1, read after write data 0x1
        ECC test: Enabled DDR ECC ...

ERROR:   Unhandled External Abort received on 0x80000000 from EL2
ERROR:   exception reason=1 syndrome=0x92000210
Unhandled Exception from EL2
x0             = 0x0000000000000001
x1             = 0x0000000000000000
x2             = 0x000000000000000a
x3             = 0x0000000002800000
x4             = 0x0000000002800000
x5             = 0x00000000986724df
x6             = 0x0000000000000031
x7             = 0x000000000000000f
x8             = 0x0000000098672920
x9             = 0x00000000fffffff0
x10            = 0x0000000000000010
x11            = 0x0000000000000002
x12            = 0x0000000000000002
x13            = 0x0000000098672c10
x14            = 0x00000000ffffffff
x15            = 0x00000000986724df
x16            = 0x000000009a6ebed4
x17            = 0x0000000000000000
x18            = 0x0000000098686d90
x19            = 0x0000000000000004
x20            = 0x0000000082400008
x21            = 0x000000000000023f
x22            = 0x0000000000000000
x23            = 0x0000000000000001
x24            = 0x0000000000000000
x25            = 0x0000000000000000
x26            = 0x000000000f300134
x27            = 0x0000000000001a7f
x28            = 0x00000000986dd440
x29            = 0x0000000098672920
x30            = 0x000000009a6ec118
scr_el3        = 0x000000000000073d
sctlr_el3      = 0x0000000030cd183f
cptr_el3       = 0x0000000000000000
tcr_el3        = 0x0000000080803520
daif           = 0x00000000000002c0
mair_el3       = 0x00000000004404ff
spsr_el3       = 0x00000000600002c9
elr_el3        = 0x000000009a6ec118
ttbr0_el3      = 0x00000000701ce800
esr_el3        = 0x0000000092000210
far_el3        = 0x0000000082400008
spsr_el1       = 0x0000000000000000
elr_el1        = 0x0000000000000000
spsr_abt       = 0x0000000000000000
spsr_und       = 0x0000000000000000
spsr_irq       = 0x0000000000000000
spsr_fiq       = 0x0000000000000000
sctlr_el1      = 0x0000000030d00801
actlr_el1      = 0x0000000000000000
cpacr_el1      = 0x0000000000000000
csselr_el1     = 0x0000000000000000
sp_el1         = 0x0000000000000000
esr_el1        = 0x0000000000000000
ttbr0_el1      = 0x0000000000000000
ttbr1_el1      = 0x0000000000000000
mair_el1       = 0x0000000000000000
amair_el1      = 0x0000000000000000
tcr_el1        = 0x0000000000800080
tpidr_el1      = 0x0000000000000000
tpidr_el0      = 0x0000000000000000
tpidrro_el0    = 0x0000000000000000
par_el1        = 0x0000000000000000
mpidr_el1      = 0x0000000080000000
afsr0_el1      = 0x0000000000000000
afsr1_el1      = 0x0000000000000000
contextidr_el1 = 0x0000000000000000
vbar_el1       = 0x0000000000000000
cntp_ctl_el0   = 0x0000000000000000
cntp_cval_el0  = 0x0000000000000000
cntv_ctl_el0   = 0x0000000000000000
cntv_cval_el0  = 0x0000000000000000
cntkctl_el1    = 0x0000000000000000
sp_el0         = 0x00000000701cb400
isr_el1        = 0x0000000000000000
dacr32_el2     = 0x0000000000000000
ifsr32_el2     = 0x0000000000000000
cpuectlr_el1   = 0x0000000000000040
cpumerrsr_el1  = 0x00000000001c0356
l2merrsr_el1   = 0x0000000013082940
cpuactlr_el1   = 0x00001000090ca000

您能否帮助检查多位错误和多个单位错误行为与版本说明所述的不同之处?

谢谢!

BR

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

    您好、

    您能否确认使用 SDK v11.02 软件包中提供的 U-Boot 版本?

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

    尊敬的 Bin:

    它不是 SDK v11.02 中的 U-Boot 版本。 这两个版本之间的内联 ECC 器件是否有任何巨大差异?

    如果我漏掉了有关启用内联 ECC 的任何配置或代码更改、您能帮我检查一下吗?

    下面是 u-boot 中的存储器映射、

    我的 DDR 大小为 512M。 我认为被测器件应超出 ECC 区域。 因为它是固定的加载/条目地址 0x9e800000。 因此、其余 DDR 大小为 0x80000000 ~ 0x9e7fffff(如果启用了内联 ECC、则此器件的 1/9 应保留为 ECC 数据存储)。 我认为所有 ECC 数据都存储在其余 DDR 的末尾。 我的理解是否正确?

    谢谢!

    BR

    xixiguo

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

    尊敬的 Xixiguo:

    这不是 SDK v11.02 中的 U-Boot 版本。 这两个版本之间的内联 ECC 器件是否有很大的不同?

    我需要知道您使用的 U-Boot 版本、以便我们在同一个代码库上进行通信。

    我认为所有 ECC 数据都存储在其余 DDR 的末尾。 我的理解是否正确?

    否、ECC 数据是内联的、每 512 字节数据后内联 64 字节 ECC 存储。

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

    尊敬的 Bin:

    我的 u-boot 版本是 u-boot2023.10、谢谢。

    不是、ECC 数据是内联的、每 512 字节数据后就会在线存储 64 字节 ECC。

    如果 512B 后跟 ECC 数据 64B、那么我们是否需要在访问存储器时考虑避免写入 ECC 数据区域? 或者、inline-ecc 是否会处理地址问题、我们可以正常连续访问存储器地址?

    BR

    xixiguo

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

    尊敬的 Xixiguo:

    或者 inline-ecc 是否能处理我们的地址问题、我们只需正常和连续地访问内存地址?

    是的、情况就是这样。 软件的总存储器大小是 DDR 总大小的 8/9。

    顺便说一下、我没有尝试在 AM64x EVM 上将 DDR 大小配置为 512MB、但我不确定如何进入 U-Boot cmdline 提示符、但如果您检查 k3-am642-evm.dts 或 k3-am642-sk.dtsi 中的保留存储器节点、则大多数保留存储器区域的地址都在 0xa000-0000 以上、超出 512MB 器件树。 我认为您不能在仅带 512MB DDR 的 AN64x 上运行 Linux、无论是否启用了 DDR ECC。

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

    尊敬的 Bin:

    我们修改了 tiboot3.bin 和 u-boot.img 的 dts、更改了存储器映射。 Linux 启动后我们没有使用 R5 内核。 因此、使用 0xa000-0000 以上的存储器区域未启用。

    如果我们可以在 u-boot2023.10 中启用内联 ECC、您能帮我们检查一下吗?

    BR

    xixiguo

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

    尊敬的 Xixiguo:

    我认为我们没有尝试为 AM64x 运行 512MB DDR、而是在 AM64x EVM 上尝试此操作、看看是否能够重现问题、然后我会进行调查。

    我有几个工作在管道,我将尝试进入这个测试可能在下个星期的中期。

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

    尊敬的 Xixiguo:

    很抱歉、我还没有时间在 EVM 上测试此问题、只想检查您是否仍需要此查询的支持?

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

    尊敬的 Bin:

    我仍然需要此问题的支持、谢谢!

    BR

    xixguo

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

    尊敬的 Xixiguo:

    听起来您已将 DDR ECC 函数移植到 U-Boot 2023.10。 您是否尝试过 SDK11.02 中提供的 U-Boot 来查看问题是否仍然存在?