Skip to content

U740 SoC的S7核使用LR SC指令时可能出现的问题

Luo Jia edited this page Dec 18, 2021 · 3 revisions

问题

运行

lr.d.sqrl a1, (a3)

的时候,U740的第0个核产生了错误(mcause=5),说明访存异常;但是misa表示S7核支持A扩展,检查参数a3的对齐正确。

解答

S7核的文档有以下的描述:

3.6 原子内存操作

针对内部内存区域,S7核支持RISC-V标准的原子(A)扩展。

保留加载(LR)和条件存储(SC)指令是特殊的原子指令,它们只在数据可缓存的预取被支持。 S7核并没有这样的数据缓存,所以LR和SC指令永远产生一个准确的访存异常。

S7小核上没有DCACHE,所以不存在LR/SC指令。另外,AMO系列指令是可用的。

解决方案

方案1:不使用spin::Mutex的实现,使用规范推荐的(RISC-V非特权指令规范,图9.2)Amoswap互斥操作实现。

方案2(绕过问题):不使用S7核做spin::Mutex锁操作,用U74核做锁操作。

(感谢TUNA技术群的@dramforever和@Sequencer)