以SMMUv2為例,使用Trace32可視化操作SMMU的常用命令詳解

Trace32支持一系列的SMMU命令,可以幫助用戶更好地配置、查看和分析SMMU。換句話說,就是讓SMMU的配置變得可視化。
在添加SMMU實例之前,需要選擇一個CPU來激活該SMMU實例的相關命令。Trace32讓SMMU的配置可視化的本質是,操縱CPU讀取SMMU的寄存器,然后進行解碼顯示。
下面的代碼是一個最基本的示例,先選擇CPU type,然后添加SMMU實例:

SYStem.CPU CortexA53 ;for example, the ‘CortexA53’ CPU is SMMU-capable
SMMU.ADD ... ;you can now define an SMMU, e.g. an SMMU for a graphics processing unit (GPU)

當然也有一些SOC CPU將SMMU預定義成了一個組件,可以直接在SYStem.CONFIG窗口里看見。
Trace32支持MMU-400, MMU-401 ,MMU-500 和 MMU-600,其中MMU-500指的是ARM SMMU架構第二代,簡稱SMMUv2,MMU-600指的是ARM SMMU架構第三代,簡稱SMMUv3。
Trace32的SMMU 相關命令帶來的最大好處是,將SMMU的配置可視化,其中包括:
- SMMU相關配置寄存器,總結起來有三大部分:Stream mapping table相關寄存器;TCU相關寄存器(global);Context Bank相關寄存器。
- Pagetable的可視化,其中包括dump和list
- Stream mapping table的可視化。
下面我們以SMMUv2為例,解釋Trace32 SMMU相關指令的用法。讓Trace32顯示SMMU的stream mapping table(或稱Stream table),是一個最基本的做法,并且可以通過這個stream table打開SMMU其他配置功能窗口。
在這里插入圖片描述

  • A 為stream table的完整窗口.
  • B Each row stands for a stream map register group (SMRG). 比如在SMMUv2中的Stream mapping table里,最多支持128個entry,也就是SMR和S2CR等寄存器有128個,即reg.grp index可以是從0x0到0x7F。
  • C Index of a translation context bank. 通過S2CR寄存器可以指定當前這個stream entry指定的是哪個CB.
  • D Data from stream matching registers. 這部分信息來自SMR寄存器,通過這個寄存器可以知道傳入的stream id是否 match該entry。

下面筆者將總結Trace32常用的SMMU指令。

Trace32常用的SMMU指令

  • 一,SMMU實例創建: SMMU.ADD
    • <name>
    • <smmu_type>
    • <base_address>
  • 二,SMMU實例刪除:SMMU.Clear <name> 和 SMMU.RESet
  • 三,SMMU 寄存器可視化:SMMU.Register
    • SMMU.Register.Global
    • SMMU.Register.ContextBank
    • SMMU.Register.StreamMapRegGrp
  • 四,SMMU pagetable的可視化:SMMU.StreamMapRegGrp
    • SMMU.StreamMapRegGrp.ContextReg
    • SMMU.StreamMapRegGrp.Dump 和 SMMU.StreamMapRegGrp.list
  • 五,SMMU.StreamTable 或者 SMMU.StreamMapTable
    • stream matching的硬件邏輯
    • Trace32 stream matching 函數:SMMU.StreamID2SMRG()
    • Stream Table窗口 顯示字段詳解
  • 六,SMMU Global Faults 或者 Global Errors 的顯示

一,SMMU實例創建: SMMU.ADD

用于定義一個新的SMMU實例,Trace32最多支持添加20個SMMU 實例,

Format: SMMU.ADD "<name>" <smmu_type> <base_address>

它需要傳入三個參數:

為SMMU實例設置一個獨一無二的名字是必須的,名字不能超過9個字符長度,并且需要用雙引號括起來,但是這只針對于SMMU.ADD指令,在執行完SMMU.ADD后,之后對該實例操作的SMMU指令不需要使用雙引號。

<smmu_type>

用于指定SMMU的類型:<smmu_type>: MMU400 | MMU401 | MMU500 | MMU600

<base_address>

這是SMMU寄存器空間的基址,如果SMMU支持secure和non-secure兩種安全狀態,那么我們可以在這個基址前加上訪問類型的修飾符,比如表示以CPU secure狀態下去訪問,可以用AZSD: 或者 ZSD:,以CPU non-secure去訪問,則使用 NSD:, NUD:, HD:。需要注意的是Trace32訪問SMMU空間,是以CPU為主體進行訪問的,所以訪問類型不可以是AXI這種。

以下是一個具體的使用實例:

;define a new SMMU named "myGPU" for a graphics processing unit
SMMU.ADD "myGPU" MMU500 AZSD:0x50000000
;display the stream table of the SMMU named “myGPU”
SMMU.StreamTable myGPU

二,SMMU實例刪除:SMMU.Clear 和 SMMU.RESet

clear 和reset都可以刪除之前用SMMU.ADD創建的SMMU實例,不同的是,clear只能刪除指定的那一個,而reset可以刪除所有的實例。

三,SMMU 寄存器可視化:SMMU.Register

通過Trace32的 SMMU.Register指令,可以可視化SMMU里最主要的三部分寄存器:

  • TCU部分,也就是Global部分,用于控制全局的SMMU配置。
  • CB部分,用于配置Context bank相關的寄存器。
  • SMR部分,主要用于stream matching,包括SMR和S2CR。

這三部分寄存器的內容都可以通過Trace32命令顯示出來。

SMMU.Register.Global

用于顯示SMMU global寄存器,用法如下:

SMMU.Register.Global <name>

在這里插入圖片描述

SMMU.Register.ContextBank

用于顯示CB相關的寄存器,需要指定CB的index,MMU-400, MMU-401 and MMU-500 only.
用法如下:

SMMU.Register.ContextBank <name> <cbndx>
SMMU.Register.ContextBank myGPU 0x16

在這里插入圖片描述

SMMU.Register.StreamMapRegGrp

關于Stream mapping,也有兩個關鍵寄存器SMR和S2CR,需要指定Stream table entry的index,MMU-400, MMU-401 and MMU-500 only.
用法如下:

SMMU.StreamMapRegGrp.Register myGPU 0x06

在這里插入圖片描述
除了使用相關命令之外,還可以在打開的Streamtable窗口下,選中指定的Stream table entry后,直接右鍵打開菜單進行操作:
在這里插入圖片描述
在這里插入圖片描述

四,SMMU pagetable的可視化:SMMU.StreamMapRegGrp

通過SMMU.StreamMapRegGrp命令可以打開SMMU指定SMR index的pagetable。
我們先捋一下邏輯,如下圖所示,一筆帶有stream ID的transaction進入SMMU,首先在stream mapping table里進行stream matching,它會遍歷SMT里的所有SMR,逐一進行匹配,匹配成功后,比如匹配上SMR0,再通過S2CR0寄存器里先前指定好的CBNDX,選擇CB,而pagetable的基址就保存在CB的TTBR里。所以通過傳入SMR的index來可視化pagetable的本質是:讀取對應S2CR寄存器找到指定的CB,再從該CB里找到pagetable的基址進行解碼。
在這里插入圖片描述
SMMU.StreamMapRegGrp指令有三個選項:

  • SMMU.StreamMapRegGrp.ContextReg, Shows the registers of the context bank associated with the stage 1 and/or stage 2 translation.
  • SMMU.StreamMapRegGrp.Dump Dumps the page table associated with the stage 1 and/or stage 2 translation page wise.
  • SMMU.StreamMapRegGrp.list Lists the page table entries associated with the stage 1 and/or stage 2 translation in a compact format.

SMMU.StreamMapRegGrp.ContextReg

SMMU.StreamMapRegGrp.ContextReg和SMMU.Register.ContextBank 這兩個指令都可以將CB的配置寄存器顯示出來,但是也有一點不同:

  • SMMU.Register.ContextBank 傳入的參數是 CBNDX,CB的index,直接指定CB進行顯示。
  • SMMU.StreamMapRegGrp.ContextReg 傳入的參數是 SMRG_INDEX, stream table entry的index,正如我上文提到過,通過 SMRG_INDEX找到S2CR,然后讀取對應S2CR寄存器找到指定的CB,屬于間接訪問,并且還可以增加 /IntermediatePT 選項,來選擇顯示 stage1 還是 stage2的CB。
    在這里插入圖片描述

SMMU.StreamMapRegGrp.Dump 和 SMMU.StreamMapRegGrp.list

SMMU.StreamMapRegGrp.Dump 和 SMMU.StreamMapRegGrp.list這兩個指令,傳入smrg_index參數用來選擇stream table entry,并將該entry里指定的CB 的pagetable解碼出來。

Format: SMMU.StreamMapRegGrp.Dump <args>
<args>: <name> <smrg_index> [<address> | <range> [<ttb_address>]] [/<option>]Format: SMMU.StreamMapRegGrp.list <args>
<args>: <name> <smrg_index> [<address> | <range> [<ttb_address>]] [/IntermediatePT]

SMMU.StreamMapRegGrp.Dump命令需要指定SMMU實例的名字以及Stream mapping table的index。如果沒有指定地址或者范圍,默認是dump所有的內容。其中還可以指定ttb_address,也就是Pagetable 的基址,如果沒有指定,那就從SMRG中抽取。intermediatePT 選項主要用于Stage2,對于stage1,它將被忽略。
在這里插入圖片描述

SMMU.StreamMapRegGrp.Dump myGPU 0x0C

也可以直接右鍵打開list和dump窗口:
在這里插入圖片描述
在這里插入圖片描述
以下是smmu Pagetable dump窗口顯示出的個字段釋義:
在這里插入圖片描述

五,SMMU.StreamTable 或者 SMMU.StreamMapTable

SMMU.StreamTable 或者 SMMU.StreamMapTable,二者是等同的,

Format: SMMU.StreamTable <args>
SMMU.StreamMapTable <args> (as an alias)
<args>: <name> [/StreamID <value>]
(for MMU-400, MMU-401 and MMU-500)

SMMU.StreamTable命令可以傳入 StreamID到Stream table里進行匹配,Trace32的Stream ID匹配邏輯是模擬真實的SMMU硬件邏輯做的。原理就是將該StreamID與所有StreamTable SMR寄存器里的ID和mask進行匹配,如果匹配成功,則會高亮該Stream table entry。
在這里插入圖片描述

;define a new SMMU named "myGPU" for a graphics processing unit
SMMU.ADD "myGPU" MMU500 AZSD:0x50000000
;open the window and highlight the matching SMRG in yellow
SMMU.StreamTable myGPU /StreamID 0x324A

在這里插入圖片描述

stream matching的硬件邏輯

這里簡單介紹一下stream matching的硬件邏輯,stream ID的匹配主要是根據 SMR寄存器里的三個字段:valid,id 和mask進行的。valid為1,說明該stream table entry有效,可以進行stream matching。比如傳入的stream ID為0x324A ,SMR.id = 0x24A, SMR.mask=0x7000,匹配是否會成功?
首先看 mask 字段,0x7000 = 0y0111_0000_0000_0000, 這說明 傳入的streamID的第12,13,14三個bit不會參與stream matching, 換言之,這三個bit會被忽略,stream ID 0x324A 將這三個bit忽略后,變成0x24A, 與SMR.id = 0x24A相同,所以匹配成功。
在這里插入圖片描述

Trace32 stream matching 函數:SMMU.StreamID2SMRG()

Trace32提供了一個 stream matching 函數:SMMU.StreamID2SMRG(name, stream_id),通過傳入SMMU實例的名字,以及需要匹配的stream ID,來查找是否有匹配成功的stream table entry。
1
SMMU.StreamID2SMRG()的返回值有三種情況:

  • 沒有匹配上,返回 -1
  • 匹配上了多個SMT entry,返回 -2
  • 有且只匹配上了一個,返回對應entry的index,比如有128個entry,那么返回值在0到127之間。
    在這里插入圖片描述

使用示例:

;open the window and highlight the matching SMRG in yellow
SMMU.StreamMapTable myGPU /StreamID 0x3464
;return the index of the SMRG as a decimal value
&index=SMMU.StreamID2SMRG("myGPU",0x3464)
;print the index as hex and decimal to the AREA window
PRINT "hex: 0x" CONVert.INTTOHEX(&index) " decimal: &index"
AREA.view

在這里插入圖片描述

Stream Table窗口 顯示字段詳解

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

六,SMMU Global Faults 或者 Global Errors 的顯示

如下圖所示,Trace32的SMMU.StreamTable窗口可以顯示 SMMU的 Global faults,其原理就是解碼SMMU_sGFSR寄存器,該寄存器里保存著各種Global faults的狀態信息。
SMMU.StreamID2SMRG()
關于 CB的錯誤信息,SMMU.StreamTable窗口里也有顯示,在state列中以一個紅色字母,比如 F,M或者S顯示:

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/82873.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/82873.shtml
英文地址,請注明出處:http://en.pswp.cn/web/82873.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

將數據庫表導出為C#實體對象

數據庫方式 use 數據庫;declare TableName sysname 表名 declare Result varchar(max) /// <summary> /// TableName /// </summary> public class TableName {select Result Result /// <summary>/// CONVERT(NVARCHAR(500), ISNULL(ColN…

CSS 預處理器與工具

目錄 CSS 預處理器與工具1. Less主要特性 2. Sass/SCSS主要特性 3. Tailwind CSS主要特性 4. 其他工具PostCSSCSS Modules 5. 選擇建議 CSS 預處理器與工具 1. Less Less 是一個 CSS 預處理器&#xff0c;它擴展了 CSS 語言&#xff0c;添加了變量、嵌套規則、混合&#xff0…

this.$set() 的用法詳解(Vue響應式系統相關)

1. 什么是 this.$set()&#xff1f; this.$set(target, key, value) 是 Vue 2 中提供的一個方法&#xff0c;用于向響應式對象中動態添加屬性&#xff0c;確保新加的屬性同樣是響應式的。 2. 為什么需要它&#xff1f; Vue 2 的響應式系統基于 Object.defineProperty&#…

【HarmonyOS Next之旅】DevEco Studio使用指南(三十)

目錄 1 -> 部署云側工程 2 -> 通過CloudDev面板獲取云開發資源支持 3 -> 通用云開發模板 3.1 -> 適用范圍 3.2 -> 效果圖 4 -> 總結 1 -> 部署云側工程 可以選擇在云函數和云數據庫全部開發完成后&#xff0c;將整個云工程資源統一部署到AGC云端。…

如何配置nginx解決前端跨域請求問題

我們以一個簡單的例子模擬不同情況下產生的跨域問題以及解決方案。假設在http://127.0.0.1:8000的頁面調用接口 fetch(http://127.0.0.1:8003/api/data)常看到的錯誤“Access to fetch at ‘http://127.0.0.1:8003/api/data’ from origin ‘http://localhost:8000’ has been…

React Hooks 指南:何時使用 useEffect ?

在 React 的函數組件中&#xff0c;useEffect Hook 是一個強大且不可或缺的工具。它允許我們處理副作用 (side effects)——那些在組件渲染之外發生的操作。但是&#xff0c;什么時候才是使用 useEffect 的正確時機呢&#xff1f;讓我們深入探討一下&#xff01; 什么是副作用…

bat批量去掉本文件夾中的文件擴展名

本文本夾內 批量去掉本文件夾中的文件擴展名 假如你有一些文件&#xff0c;你想去掉他們的擴展名 有沒有方便的辦法呢 今天我們就分享一種辦法。 下面&#xff0c;就來看看吧。 首先我們新建一個記事本&#xff0c;把名字改為&#xff0c;批量去掉本文件夾中的文件擴展名.txt 然…

STM32標準庫-輸入捕獲

一、輸入捕獲 1.簡介 IC&#xff08;Input Capture&#xff09;輸入捕獲輸入 捕獲模式下&#xff0c;當通道輸入引腳出現指定電平跳變時&#xff0c;當前CNT的值將被鎖存到CCR中&#xff0c;可用于測量PWM波形的頻率、占空比、脈沖間隔、電平持續時間等參數 每個高級定時器和…

在linux系統上搭建git服務器(ssh協議)

1.在windows上生成RSA密鑰對 ssh-keygen -t rsa -b 2048 -C"git用戶名/郵箱地址" 命令執行后會在 C:\Users\${windows登錄賬戶}\.ssh 目錄下生成密鑰對 其中 id_rsa 為私鑰&#xff0c;id_rsa.pub 為公鑰 2.在 linux 系統上登記公鑰 vim ~/.ssh/authorized_keys…

RAG檢索系統的兩大核心利器——Embedding模型和Rerank模型

在RAG系統中&#xff0c;有兩個非常重要的模型一個是Embedding模型&#xff0c;另一個則是Rerank模型&#xff1b;這兩個模型在RAG中扮演著重要角色。 Embedding模型的作用是把數據向量化&#xff0c;通過降維的方式&#xff0c;使得可以通過歐式距離&#xff0c;余弦函數等計算…

stm32內存踩踏一例

1、問題描述 程序運行過程中&#xff0c;發現顯示的內容亂了&#xff0c;如下圖所示&#xff1a; 2、問題分析 此原因產生是由于將一個函數提前引起的&#xff0c;單步跟蹤檢查問題 運行過此函數后變量的地址改變了&#xff1f;被調函數能改變調用函數的變量地址&#xff1f…

Selenium的底層原理

Selenium 底層主要依賴于 WebDriver 協議&#xff08;即 W3C WebDriver 規范&#xff0c;早期也有 JSON Wire Protocol&#xff09;來實現對瀏覽器的遠程控制&#xff0c;其核心架構可以分為以下幾層&#xff1a; Selenium 客戶端&#xff08;Client Library&#xff09; 支持多…

前端高頻面試題2:瀏覽器/計算機網絡

本專欄相關鏈接 前端高頻面試題1&#xff1a;HTML/CSS 前端高頻面試題2&#xff1a;瀏覽器/計算機網絡 前端高頻面試題3&#xff1a;JavaScript 1.什么是強緩存、協商緩存&#xff1f; 強緩存&#xff1a; 當瀏覽器請求資源時&#xff0c;首先檢查本地緩存是否命中。如果命…

MATLAB-電偶極子所產出的電磁場仿真

% 清除工作區 clear all % 用戶輸入 a input(輸入點電荷的位置如[1,0,1;2,0,2]表示位置在(1,0,1),(2,0,2): ); Q input(輸入點電荷的電荷量&#xff0c;-表示電性&#xff0c;如[1,-1]: ); a1 input(電場線角度間隔: ); % 角度間隔 % 設置繪圖范圍 xmin min(a(:,1)) - 4;…

混合云數據庫連接問題:本地與云實例的兼容性挑戰

關鍵詞:混合云數據庫,混合云架構,數據庫連接問題,網絡策略,兼容性挑戰,權限沖突,防火墻,VPN,ExpressRoute,Direct Connect,SQL Server,MySQL,PostgreSQL,Azure SQL Database,AWS RDS 隨著企業數字化轉型的深入,混合云架構正成為主流選擇。它結合了本地數據中心…

pikachu靶場通關筆記16 CSRF關卡02-CSRF(POST)

目錄 一、CSRF原理 二、源碼分析 三、滲透實戰 1、構造CSRF鏈接 &#xff08;1&#xff09;登錄 &#xff08;2&#xff09;bp設置inception on &#xff08;3&#xff09;修改個人信息 &#xff08;4&#xff09;構造CSRF鏈接 2、模擬受害者登錄 3、誘導受害者點擊 …

CAD2025安裝教程與資源下載

軟件下載 軟件名稱&#xff1a;CAD2025軟件語言&#xff1a;簡體中文軟件大小&#xff1a;2.69G系統要求&#xff1a;Windows10或更高&#xff0c;32/ 64位操作系統硬件要求&#xff1a;CPU2GHz &#xff0c;RAM4G或更高下載鏈接&#xff1a; 鏈接&#xff1a;https://pan.qua…

SpringBoot離線應用的5種實現方式

在當今高度依賴網絡的環境中&#xff0c;離線應用的價值日益凸顯。無論是在網絡不穩定的區域運行的現場系統&#xff0c;還是需要在斷網環境下使用的企業內部應用&#xff0c;具備離線工作能力已成為許多應用的必備特性。 本文將介紹基于SpringBoot實現離線應用的5種不同方式。…

數據類型 -- 字符

在C中&#xff0c;字符型&#xff08;char&#xff09;用于存儲單個字符&#xff0c;如字母、數字、符號等。字符型是最基本的數據類型之一&#xff0c;常用于處理文本、字符數組&#xff08;字符串&#xff09;等場景。 1. 基本類型 ? char&#xff1a;標準字符類型&#x…

國標GB28181視頻平臺EasyGBS視頻實時監控系統打造換熱站全景可視化管理方案

一、方案背景? 在城市供熱體系中&#xff0c;換熱站作為連接熱源與用戶的核心樞紐&#xff0c;其運行穩定性直接影響供熱質量。面對供熱規模擴大與需求升級&#xff0c;傳統人工巡檢模式暴露出效率低、響應慢、監測不足等問題。基于GB28181協議的EasyGBS視頻實時監控系統&…