日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

aarch64的TCR寄存器介绍

發布時間:2025/3/21 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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、IRGN0cache屬性**outer/inner cableability的屬性(如直寫模式、回寫模式)
SH1、SH0cache的共享方式cache的共享屬性配置(如non-shareable, outer/inner shareable)
TG0/TG1Granule sizeGranule 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寄存器介绍的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。