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.

[参考译文] DM3730:L1 Dcache 和 L2EN=0时出现问题

Guru**** 2560390 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/613106/dm3730-issue-with-l1-dcache-with-l2en-0

器件型号:DM3730

因此、我启用了 MMU 和 Dcache (C-bit=1、M-bit=1和 L2EN=0)、并且设置了用于写回和完全访问的页表(AP=11b、TEX=000b、C=1、B=1、bit[1:0]=10b)。  如果我执行读取操作(将高速缓存线加载到 L1 Dcache 中)、然后对同一高速缓存执行单个字存储、我希望 L1高速缓存能够保存有效和脏数据。  如果我然后禁用 C 位并读取该位置、我希望从 SDRAM 中读取该值、该值应该是旧数据。  这不是我得到的。  在所有情况下(无论是否启用 L2)、L1 (和 L2)的行为都与它们处于写通状态类似、存储器始终会进入 SDRAM。

我认为确实需要启用 MMU 才能使用 L1 Dcache (尽管 TRM 未明确说明这一点)。  我想知道页面表 C 和 B 位是否确实是指示高速缓存作为写通或写回运行的位、或者是否还有其他一些我尚未发现的 cfg 位。  以下是我的断言所依据的相关页面:

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

    Cortex-A8 TRM 的具体含义是:
    infocenter.arm.com/.../DDI0344K_cortex_a8_r3p2_trm.pdf
    您能否具体说明其中的哪一部分需要进一步说明。

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

    我只是想确认我的理解、如果页表条目中的 C 和 B 位为11b、则缓存将作为写回操作、如果它们是10b、 缓存将作为写操作(TEX=000b)运行、并且我可以在控制寄存器中使用 C-bit=0操作 MMU M-bit=1。  我只是想证明我可以将数据写入 L1数据高速缓存、将其禁用、然后从 SDRAM 中读取旧数据。  所有这些都是通过 L2EN=0实现的。  当我清除 C 位=0时、CPU 锁定出现了一些问题(一些未处理的异常、因为此时我没有异常处理)。

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

    是的、您的理解似乎正确。

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

    我发现、如果我不在所有级别清理并使 dcache 无效、则 CPU 会锁定(不确定它是异常还是什么、我当时只是在 u-boot 中)。  因此、在禁用 C 位和 M 位之前、必须有一些未指定的要求来清理并使 dcache 无效。  规格中不清楚这种情况的原因。

    我想知道是否存在禁用(通过清除 C 位和 M 位)且加载从未完成的 Dcache 中存在命中的问题。  该规范指示不应发生这种情况、但尽管如此、仍有一些情况令人惊叹。  我试图在不进行清理的情况下使 Dcache 无效、但也被锁定。  我不知道 TI 人员是否会监控这些板。  这对我来说是尝试实施我的解决方案的一个难题。