Hello,
用EDMA传送数据在L2内存和DDR3之间,该段内存没有被cache使能。
这样的话,我就不用在数据从DDR搬到L2之前,对其cache_Inv无效,处理完,从L2搬到DDR,也不用cache_Wb.
因为该段L2本事没有cache。这样的理解是否正确?
如果在没有cache的内存段L2,使用cache_Inv,cache_Wb会出现什么样的结果?
非常感谢!
BRS,
Meng
Chris Meng:
Lingcon Meng
该段内存没有被cache使能。
请问你这里说的内存是L2对么?如果是,你的理解有些偏差。L2如果不配置为cache,硬件是是会自动做cache维护,不需要用户手动调用代码。如果你是要EDMA搬移的DDR段设置为非cache,那就不需要对DDR段做cache_inv/cache_wb的相关操作了。
Lingcon Meng:
回复 Chris Meng:
Hello Chirs,
非常感谢您的回复!
我说的是对L2,我现在搬移数据是从先从 DDR3搬移到 L2,算法开始运算,运算完成后,然后将计算结果再搬移到另一片DDR3.
并且该L2段没有被Cache,外存DDR3的范围位cache。
按您的解释:
1) DDR3–>L2 之前, L2 不需要cache_inv()操作。
直接EDMA搬移就可以。
2)
数据在L2运算完成后,计算结果从L2–>DDR3(EDMA操作)之后,需要做cache_wb()操作。
我的理解正确吗?
另外一个问题:
如果我直接通过EDMA,从一段DDR3外存(cache)搬移到另一片DDR3(Cache)外存,这样的情况,cache如何操作。
非常感谢!
BRS,
Meng
Lingcon Meng:
回复 Chris Meng:
Hello Chris,
非常感谢您的回复!
a)
重新看了一下解释,有点地方没太理解。
估计是我没有把问题描述清楚。
目前,我们的应用情况是,DDR3地址是cache的,L2是没有被cache。
数据流方向如下:
DDR3(cached)—>L2(no cached)—>DDR3(cached)
每一个阶段数据传送都是通过EDMA3完成。
依据以前对cache一致性理解。DDR3数据搬移到L2之前,如果L2是被cache使能,需要cache_Inv()数据
到L2的目标地址,又结合您的解释,我们的L2是没有Cache的,因此L2 cache_Inv()是完全不
需要的。
那么DDR3—>L2之前,DDR3(cached)还需要做操作吗?如果是,都要做哪些操作?
b)
另外数据通过EDMA 从 L2(no cached)—>DDR3(cached),根据您的解释是不需要任何回写操作的。
c)
数据通过EDMA3,直接从cached的DDR3到cached的DDR3,也就是说 数据通过EDMA3 从DDR3(cached)—>DDR3(cached),
通过你提供的查阅的文档可以获得答案。
非常感谢您给与的支持!
BRS,
Meng
Chris Meng:
回复 Lingcon Meng:
Lingcon Meng
a)
重新看了一下解释,有点地方没太理解。
估计是我没有把问题描述清楚。
目前,我们的应用情况是,DDR3地址是cache的,L2是没有被cache。
数据流方向如下:
DDR3(cached)—>L2(no cached)—>DDR3(cached)
每一个阶段数据传送都是通过EDMA3完成。
依据以前对cache一致性理解。DDR3数据搬移到L2之前,如果L2是被cache使能,需要cache_Inv()数据
什么叫L2是被cache使能的?L2可以配置为L2 RAM或者是L2 cache,你说的是哪种?
如果按照DDR3(cached)—>L2 RAM—>DDR3(cached)并且 每一个阶段数据传送都是通过EDMA3完成。对于DDR3(cached)—>L2 RAM,要保证DDR3上的数据是最新的,所以需要对DDR做cache写回。对于L2 RAM—>DDR3(cached),不需做任何cache操作,因为L2 RAM的自动被L1 cache的,而L1 cache的维护是系统自动完成的。
Lingcon Meng:
回复 Chris Meng:
Hello Chris,
非常感谢您的回复,我说的是L2 SRAM。
根据您的回复,DDR3(cached)—>L2 RAM—>DDR3(cached),数据搬移都是通过EDMA3完成,
只要在DDR3(cached)—>L2 RAM数据搬移之前,将DDR3的内容进行回写。
这样的回写,是通过L2WBAR(L2 Writeback Base Address Register )和 L2WWC( L2 Writeback Word Count Register )寄存来设置完成的吗?
回写的基地址是与EDMA3相关联的DDR3 所对应的地址?
还是DDR3 本身有相关的回写操作寄存器?
另外,cache无效时,无效的是L1或者L2的地址,还是无效的是其相关的DDR3的地址?
cache一致性这一块,个人感觉还是比较复杂的,原来自己接触的也比较少!
谢谢您的帮助。
BRS,
Meng