aarch64的TCR寄存器介绍
文章目錄
- 一、TCR寄存器
- (1)、T1SZ、T0SZ
- (2)、ORGN1、IRGN1、ORGN0、IRGN0
- (3)、SH1、SH0
- (4)、TG0/TG1 - Granule size
- (5)、IPS
- (6)、EPD1、EPD0
- (7)、TBI1、TBI0
- (8)、A1
- (10)、AS
- 二、示例展示
- 1、設置inner/outer cache的屬性(只寫模式/回寫模式/write allocate/No-write allocate)
★★★個人博客導讀首頁—點擊此處 ★★★
相關文章
1、ARM架構中MMU/TLB/Cache的一些概念和寄存器
2、ARMV8-aarch64的MMU學習筆記
一、TCR寄存器
在ARM Core中(aarch64),還有幾個相關的系統寄存器:
- TCR_EL1 banked
- TCR_EL2
- TCR_EL3
| ORGN1、IRGN1、ORGN0、IRGN0 | cache屬性** | outer/inner cableability的屬性(如直寫模式、回寫模式) |
| SH1、SH0 | cache的共享方式 | cache的共享屬性配置(如non-shareable, outer/inner shareable) |
| TG0/TG1 | Granule size | Granule size(其實就是頁面的大小,4k/16k/64k) |
| IPS | 物理地址size | 物理地址size,如32bit/36bit/40bit |
| EPD1、EPD0 | - | TTBR_EL1/TTBR_EL0的enable和disable |
| TBI1、TBI0 | - | top addr是ignore,還是用于MTE的計算 |
| A1 | - | ASID的選擇,是使用TTBR_EL1中的,還是使用TTBR_EL0中的 |
| AS | - | ASID是使用8bit,還是使用16bit |
(1)、T1SZ、T0SZ
- T1SZ, bits [21:16] 通過TTBR1尋址的內存區域的大小偏移量,也就是TTBR1基地址下的一級頁表的大小
- T0SZ, bits [5:0]
(2)、ORGN1、IRGN1、ORGN0、IRGN0
其實可以總結為這樣:
(3)、SH1、SH0
SH1, bits [29:28]
SH0, bits [13:12]
其實可以總結為這樣:
Shareable的很容易理解,就是某個地址的可能被別人使用。我們在定義某個頁屬性的時候會給出。Non-Shareable就是只有自己使用。當然,定義成Non-Shareable不表示別人不可以用。某個地址A如果在核1上映射成Shareable,核2映射成Non-Shareable,并且兩個核通過CCI400相連。那么核1在訪問A的時候,總線會去監聽核2,而核2訪問A的時候,總線直接訪問內存,不監聽核1。顯然這種做法是錯誤的。
對于Inner和Outer Shareable,有個簡單的的理解,就是認為他們都是一個東西。在最近的ARM A系列處理器上上,配置處理器RTL的時候,會選擇是不是把inner的傳輸送到ACE口上。當存在多個處理器簇或者需要雙向一致性的GPU時,就需要設成送到ACE端口。這樣,內部的操作,無論inner shareable還是outershareable,都會經由CCI廣播到別的ACE口上。
(4)、TG0/TG1 - Granule size
(5)、IPS
(6)、EPD1、EPD0
(7)、TBI1、TBI0
(8)、A1
(10)、AS
除了以上介紹的bit之外,剩余的bit都是特有功能使用或reserved的
二、示例展示
1、設置inner/outer cache的屬性(只寫模式/回寫模式/write allocate/No-write allocate)
如下代碼所示,設置
#define TCR_IRGN_WBWA ((UL(1) << 8) | (UL(1) << 24)) //使用TTBR0和使用TTBR1時后的inner cache的屬性設置#define TCR_ORGN_WBWA ((UL(1) << 10) | (UL(1) << 26)) //使用TTBR0和使用TTBR1時后的outer cache的屬性設置#define TCR_CACHE_FLAGS TCR_IRGN_WBWA | TCR_ORGN_WBWA // inner + outer cache的屬性值ENTRY(__cpu_setup) ....../** Set/prepare TCR and TTBR. We use 512GB (39-bit) address range for* both user and kernel.*/ldr x10, =TCR_TxSZ(VA_BITS) | TCR_CACHE_FLAGS | TCR_SMP_FLAGS | \TCR_TG_FLAGS | TCR_ASID16 | TCR_TBI0 | TCR_A1tcr_set_idmap_t0sz x10, x9......msr tcr_el1, x10ret // return to head.S ENDPROC(__cpu_setup)屬性設置了1,也就是回寫模式、write allocate模式
總結
以上是生活随笔為你收集整理的aarch64的TCR寄存器介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [ARM异常]-ARMV8-aarch6
- 下一篇: ARM架构中MMU/TLB/Cache的