u-boot 内存读取很慢

RK3128 u-boot 测试内存速度 , 发现 memcpy 非常慢, 128MB 数据需要 5.036s (才 25MB/s)
后来用汇编直接从 DDR 读取数据, 也要 3.653s; 而往 DDR 写数据非常快, 128MB 只要 0.059s(2.1GB/s)
ddr cache 已经全开了, CPU 设置到了 1.2GHz

u-boot 代码从这个地址载的 https://bitbucket.org/T-Firefly/firenow-lollipop
DDR 配置文件用的是 RK3128_DDR3_300M_V2.05.bin

进内核后, 同样程序测试, 读取和 memcpy 就很快了, 可以到 2GB/s

请问大神, 如何解决

看看是不是DMA的关系

本帖最后由 xmwvv 于 2018-1-26 11:17 编辑

zhansb 发表于 2018-1-25 09:24
看看是不是DMA的关系

感谢回复
找到原因了, 是 cache 问题 (操作 sram 也是一样慢):

  1. cortex 多核 32 位 需要开启 ACTLR.SMP , mmu 和 cache 才起效. 参考 <<Cortex™-A7 MPCore™ Technical Reference Manual>>
  2. mmu 需要采用 writeback 方式
    ( cache-cp15.c 里开 writeback 会引起后面死机, 可能是相关部分需要 flush cache)

按上面正确开启 cache 后, 汇编读取 128MB 从 3.793 降到 0.085s, memcpy 128MB 从 5.171s 降到 0.332s!

{:4_122:}赞