PMP 配置
PMP 寄存器只能在機(jī)器模式下編程。pmpaddrX 寄存器應(yīng)首先用受保護(hù)區(qū)域的基地址編程,右移兩位。然后,應(yīng)該使用正確配置的 64 位值對(duì)pmpcfgY 寄存器進(jìn)行編程,其中包含每個(gè)正確對(duì)齊的 8 位 pmpXcfg 字段。未使用的字段可以簡(jiǎn)單地寫(xiě)入 0,標(biāo)記它們未使用。
PMP 配置例子
以下示例顯示了僅機(jī)器模式的配置,其中 PMP 權(quán)限應(yīng)用于三個(gè)感興趣的區(qū)域,第四個(gè)區(qū)域覆蓋剩余的內(nèi)存映射?;叵胍幌?,較低編號(hào)的 pmpXcfg 和pmpaddrX 寄存器優(yōu)先于較高編號(hào)的區(qū)域。該規(guī)則允許更高編號(hào)的 PMP寄存器全面覆蓋整個(gè)內(nèi)存映射,同時(shí)允許編號(hào)較低的區(qū)域?qū)?quán)限應(yīng)用于特定的感興趣區(qū)域。以下示例顯示基地址 0x0 處的 64 KB 閃存區(qū)域、基地址0x2000_0000 處的 32 KB RAM 區(qū)域以及基地址 base 0x3000_0000 處的 4 KB外設(shè)區(qū)域。內(nèi)存映射的其余部分是保留空間。
PMP 訪問(wèn)場(chǎng)景
L、R、W 和 X 位僅在訪問(wèn)的所有字節(jié)都被該 PMP 條目覆蓋時(shí)確定訪問(wèn)是否成功。例如,如果 PMP 條目配置為匹配四字節(jié)范圍0xC–0xF,那么對(duì) 0x8–0xF 范圍的 8 字節(jié)訪問(wèn)將失敗,假設(shè) PMP 條目是與這些地址匹配的最高優(yōu)先級(jí)條目。
在鎖定位清零 (L=0) 的機(jī)器模式下運(yùn)行時(shí),如果 PMP 條目與訪問(wèn)的所有字節(jié)匹配,則訪問(wèn)成功。如果在機(jī)器模式下設(shè)置了鎖定位(L=1),則訪問(wèn)取決于為該區(qū)域設(shè)置的權(quán)限。同樣,在管理員模式或用戶模式下,訪問(wèn)權(quán)限取決于為該區(qū)域設(shè)置的權(quán)限。
失敗的讀取或?qū)懭朐L問(wèn)會(huì)生成加載或存儲(chǔ)訪問(wèn)異常,并且指令訪問(wèn)錯(cuò)誤會(huì)在失敗的指令獲取時(shí)發(fā)生。當(dāng)嘗試從沒(méi)有執(zhí)行權(quán)限的區(qū)域執(zhí)行時(shí)發(fā)生異常時(shí),錯(cuò)誤發(fā)生在獲取而不是分支上,因此mepc CSR 將反映目標(biāo)保護(hù)區(qū)的值,而不是分支的地址。
一條指令可能產(chǎn)生多個(gè)訪問(wèn),這可能不是相互原子的。如果一條指令產(chǎn)生的至少一次訪問(wèn)失敗,則將發(fā)生異常。一條指令的其他訪問(wèn)可能會(huì)成功,但會(huì)產(chǎn)生明顯的副作用。例如,對(duì)虛擬內(nèi)存的引用可以分解為多個(gè)訪問(wèn)。
在某些實(shí)現(xiàn)中,未對(duì)齊的加載、存儲(chǔ)和指令提取也可能被分解為多個(gè)訪問(wèn),其中一些可能在訪問(wèn)異常發(fā)生之前成功。特別是,通過(guò) PMP檢查的未對(duì)齊存儲(chǔ)的一部分可能變得可見(jiàn),即使另一部分未通過(guò) PMP 檢查。對(duì)于比 XLEN 位寬的浮點(diǎn)存儲(chǔ)(例如,RV32D 中的 FSD指令),即使存儲(chǔ)地址自然對(duì)齊。
-
內(nèi)核
+關(guān)注
關(guān)注
3文章
1361瀏覽量
40185 -
PMP
+關(guān)注
關(guān)注
0文章
45瀏覽量
18131 -
RISC
+關(guān)注
關(guān)注
6文章
461瀏覽量
83637 -
配置
+關(guān)注
關(guān)注
1文章
187瀏覽量
18341 -
sifive
+關(guān)注
關(guān)注
0文章
35瀏覽量
9450
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論