0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀(guān)看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

介紹SMMU的相關(guān)知識(shí)

安芯教育科技 ? 來(lái)源:老秦談芯 ? 2023-02-15 09:48 ? 次閱讀

為了適應(yīng)大規(guī)模的SoC設(shè)計(jì),GIC-600被設(shè)計(jì)成分布式IP。所謂分布式,GIC-600由幾種組件構(gòu)成,每個(gè)組件可以跟其它相關(guān)模塊在物理設(shè)計(jì)上擺放在一起,并與其擁有共同的電源域;組件之間通過(guò)片上網(wǎng)絡(luò)(network on chip,簡(jiǎn)稱(chēng)NoC)通信,從而達(dá)到更好的時(shí)序。

SMMU即system memory management unit,在其他體系結(jié)構(gòu)中對(duì)應(yīng)的是IOMMU。先上圖,此圖節(jié)選自SMMU spec文檔,從圖中可以直觀(guān)看到SMMU的基本功能,其被放置在device的DMA master的前端,device與其采用AXI相連,SMMU直接連接片上總線(xiàn)。

MMU與SMMU位置相似,只不過(guò)MMU后邊的master是CPU。SMMU在此主要作用是將device發(fā)起的DMA請(qǐng)求中的IOVA虛擬地址轉(zhuǎn)換為系統(tǒng)物理地址進(jìn)行訪(fǎng)存。而MMU是將CPU看到的VA值轉(zhuǎn)換為系統(tǒng)物理地址,IOVA的值與CPU看到的VA可以相同也可以不同,如果說(shuō)IOVA值的類(lèi)型有一萬(wàn)種選擇,那么使用SMMU的方法就有一萬(wàn)種。

ARM體系結(jié)構(gòu)中,SMMU可以承載很多東西,包括:安全,虛擬化,pcie相關(guān)功能,SVA等等。

f0b98366-a879-11ed-bfe3-dac502259ad0.png

現(xiàn)在捋一下SMMU的基本使用場(chǎng)景:

1)擴(kuò)大設(shè)備DMA尋址范圍,一些legacy設(shè)備DMA尋址是32bit,無(wú)法訪(fǎng)問(wèn)高32bit地址,通過(guò)SMMU的轉(zhuǎn)換可以解決這個(gè)問(wèn)題。同樣的,當(dāng)系統(tǒng)無(wú)法提供大塊連續(xù)物理內(nèi)存時(shí),也可以通過(guò)SMMU轉(zhuǎn)換讓設(shè)備可以訪(fǎng)問(wèn)分散物理內(nèi)存

2)一個(gè)SMMU可以有多個(gè)master設(shè)備,每個(gè)設(shè)備所看到的物理地址范圍可通過(guò)SMMU進(jìn)行隔離和劃定,硬件提供了這種應(yīng)用的靈活性,具體策略需要軟件來(lái)實(shí)現(xiàn)。

3)ARM體系結(jié)構(gòu)中的安全域分為secure和normal域,secure具有更高的權(quán)限,理論上normal域的設(shè)備DMA無(wú)法訪(fǎng)問(wèn)劃分為secure的物理地址,但是這種訪(fǎng)問(wèn)控制機(jī)制是如何實(shí)現(xiàn)的呢?就是通過(guò)SMMU,它可以使設(shè)備DMA master發(fā)出的請(qǐng)求帶有secure域或Normal域的安全屬性。

SMMU之所以能完成上述功能,是因?yàn)槠鋬?nèi)部硬件結(jié)構(gòu)。

f0cf8e04-a879-11ed-bfe3-dac502259ad0.png

如上圖,SMMU大部分功能數(shù)據(jù)均存在于主存儲(chǔ)器中,在硬件上有基地址寄存器分別指向相應(yīng)的內(nèi)存區(qū)域,command queue提供了軟件配置SMMU的命令隊(duì)列,event queue用來(lái)存放SMMU工作產(chǎn)生的事件或錯(cuò)誤。STE基址寄存器指向了內(nèi)存中的一系列STE表,該表是用smmu設(shè)備master的streamid來(lái)索引的,位寬16位,steamid是deviceIP在設(shè)計(jì)時(shí)硬件設(shè)定好的,一個(gè)streamid唯一對(duì)應(yīng)一個(gè)STE表,理論上一個(gè)設(shè)備可以有多個(gè)streamid,因此一個(gè)設(shè)備可能有多個(gè)STE表,在不同的場(chǎng)景下,軟件可以靈活應(yīng)用,硬件提供了這種靈活性。

每個(gè)STE表存在一個(gè)指針指向CD表,CD表可以有多個(gè),是通過(guò)substreamid來(lái)索引的,substreamid位寬20位。CD表中有指針直接指向了SMMU進(jìn)行地址轉(zhuǎn)換用的頁(yè)表,這個(gè)頁(yè)表記錄了IOVA到PA的映射。CD表所指的頁(yè)表只提供了一級(jí)頁(yè)表轉(zhuǎn)換,STE表的其他域提供了二級(jí)頁(yè)表轉(zhuǎn)換,這個(gè)在后續(xù)章節(jié)遇到再詳細(xì)介紹。

以上是SMMU內(nèi)部結(jié)構(gòu)的靜態(tài)描述,那么它實(shí)際工作的過(guò)程是怎樣的?設(shè)備master發(fā)起一筆DMA請(qǐng)求,請(qǐng)求的總線(xiàn)信息中帶有streamid、subtreamid、iova等參數(shù),smmu硬件收到該請(qǐng)求會(huì)自動(dòng)通過(guò)streamid檢索到STE表,再通過(guò)substreamid檢索到這個(gè)STE表指向的CD表,從CD表中找到頁(yè)表基地址,開(kāi)始頁(yè)表查找過(guò)程,找到IOVA對(duì)應(yīng)的物理地址,再對(duì)這個(gè)物理地址發(fā)起一次DMA請(qǐng)求。

從這個(gè)過(guò)程可以看出SMMU在做地址轉(zhuǎn)換時(shí)有一定的overhead,因此SMMU硬件也提供了bypass模式,可以不進(jìn)行任何地址轉(zhuǎn)換,事實(shí)上目前linux kernel在默認(rèn)情況下的SMMU就是采用這種工作模式的。STE和CD表以及SMMU硬件工作過(guò)程中涉及到的參數(shù)較多,這里不一一說(shuō)明,抓大放小,我們期望能夠以最簡(jiǎn)捷的方式理解SMMU的工作機(jī)理。

為了提高頁(yè)表查找效率,SMMU與MMU相同,在其內(nèi)部設(shè)計(jì)有TLB緩存,用于緩存頁(yè)表項(xiàng),同時(shí)硬件提供了DVM 接口,接收從互聯(lián)總線(xiàn)上的TLBI廣播,當(dāng)CPU對(duì)頁(yè)表進(jìn)行更改后,同時(shí)需要清除MMU本地的相應(yīng)的頁(yè)表項(xiàng)緩存,該TLBI指令會(huì)通過(guò)DVM接口進(jìn)行廣播,ARM架構(gòu)要求SMMU接收到廣播的前置條件是MMU與SMMU同處于一個(gè)Inner shareable domain中,在接受到廣播后,SMMU硬件會(huì)自動(dòng)清除其內(nèi)部的TLB緩存對(duì)應(yīng)項(xiàng),達(dá)到與MMU同步的作用。該機(jī)制是ARM系統(tǒng)結(jié)構(gòu)下SVA(shared virtual addressing)的基礎(chǔ),即SMMU與MMU共享頁(yè)表,設(shè)備可以看到和CPU相同的VA,設(shè)備也就能“理解”各種進(jìn)程虛擬內(nèi)存的語(yǔ)義。

下面分享一個(gè)SMMU的實(shí)際使用場(chǎng)景的有趣例子。

f0ec7f82-a879-11ed-bfe3-dac502259ad0.png

上圖中engine是一個(gè)硬件運(yùn)算模塊,硬件設(shè)定其與SMMU之間的streamid有2個(gè),一個(gè)是read steam,另一個(gè)是write stream,因此SMMU對(duì)應(yīng)的STE表就有2個(gè),即DMA讀操作對(duì)應(yīng)一份頁(yè)表,該頁(yè)表與MMU對(duì)應(yīng)頁(yè)表相同,通過(guò)DVM接口進(jìn)行硬件同步,DMA寫(xiě)對(duì)應(yīng)另一份頁(yè)表,該頁(yè)表指向的物理地址為ARM的secure域內(nèi)存。Crypto engine通過(guò)對(duì)normal域的操作系統(tǒng)內(nèi)存數(shù)據(jù)進(jìn)行某種操作后輸出結(jié)果到secure域,這種機(jī)制既增強(qiáng)了安全性,又增加了系統(tǒng)的效率。步驟如下:

1)normal域軟件發(fā)起SMC指令傳遞虛擬內(nèi)存地址VA和頁(yè)表基地址等參數(shù)到secure域軟件

2)secure域軟件用上述參數(shù)配置engine硬件,啟動(dòng)DMA

3)DMA通過(guò)SMMU read stream抓取normal域地址VA內(nèi)存數(shù)據(jù)進(jìn)行運(yùn)算

4)結(jié)果通過(guò)DMA write stream輸出到secure域內(nèi)存

5)Secure 域軟件返回此次操作狀態(tài)信息給normal域軟件

細(xì)心的讀者可能會(huì)發(fā)現(xiàn)上述過(guò)程存在一些問(wèn)題,比如該虛擬地址對(duì)應(yīng)頁(yè)面不在內(nèi)存中,被換出了,這時(shí)SMMU在查找相應(yīng)頁(yè)面時(shí)就無(wú)法進(jìn)行DMA操作,遇到這樣的頁(yè)表整個(gè)地址轉(zhuǎn)換過(guò)程會(huì)停下,相應(yīng)的錯(cuò)誤event會(huì)被SMMU硬件寫(xiě)到event queue中,此時(shí)需要secure域軟件處理該event,向normal域軟件請(qǐng)求處理,與處理Page fault過(guò)程類(lèi)似,完成后再重復(fù)上述步驟。




審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀(guān)點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • ARM
    ARM
    +關(guān)注

    關(guān)注

    134

    文章

    9097

    瀏覽量

    367607
  • SoC設(shè)計(jì)
    +關(guān)注

    關(guān)注

    1

    文章

    148

    瀏覽量

    18774
  • dma
    dma
    +關(guān)注

    關(guān)注

    3

    文章

    561

    瀏覽量

    100593
  • SVA
    SVA
    +關(guān)注

    關(guān)注

    1

    文章

    19

    瀏覽量

    10136

原文標(biāo)題:技術(shù)分享 | ARM系列 -- SMMU(一)

文章出處:【微信號(hào):Ithingedu,微信公眾號(hào):安芯教育科技】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    STM***F3的USART部分相關(guān)知識(shí)介紹

    本文介紹STM***F3的USART(串口)部分相關(guān)知識(shí)。
    發(fā)表于 01-05 06:18

    ARM系列之SMMU總線(xiàn)資料合集

    、SMMU的高級(jí)功能上篇我們介紹SMMU的基本結(jié)構(gòu)和用法,本篇講一下SMMU的高級(jí)功能。在ARM64體系結(jié)構(gòu)中,SMMU幾乎可以放在總線(xiàn)互
    發(fā)表于 04-11 15:58

    多個(gè)設(shè)備是否可以共用一個(gè)SMMU StreamID?

    Address(SVA)等場(chǎng)景。在這些使用場(chǎng)景中,SMMUv3是這樣使用的呢?SMMUv3的硬件設(shè)計(jì)方面比較靈活,但是軟件使用方面是有些限制的。本文不是介紹SMMUv3構(gòu)架或IP,而是站在
    發(fā)表于 11-07 15:36

    SMMU學(xué)習(xí)這一篇就夠了

    寄存器的介紹SMMU寄存器都是memory-map的SMMU里有兩套寄存器,一套是給安全master用的,一套是給非安全master用的。其實(shí)就相當(dāng)于有兩個(gè)SMMU了。如下我也列舉了
    發(fā)表于 02-23 17:11

    手機(jī)電池相關(guān)知識(shí)介紹

    手機(jī)電池相關(guān)知識(shí)介紹 一、手機(jī)電池的幾個(gè)重要概念 1、容量: 對(duì)一個(gè)手機(jī)電池來(lái)說(shuō)最重要的參數(shù)就是它所能儲(chǔ)存的電量大小,該詞用專(zhuān)業(yè)術(shù)語(yǔ)
    發(fā)表于 10-26 16:59 ?1872次閱讀

    導(dǎo)線(xiàn)連接器相關(guān)知識(shí)介紹

    導(dǎo)線(xiàn)連接器相關(guān)知識(shí)介紹      現(xiàn)代汽車(chē)由于電控器件的不斷增多,其連接導(dǎo)線(xiàn)的數(shù)量也不可避免地呈增大趨勢(shì),為保證導(dǎo)線(xiàn)連接的正確性
    發(fā)表于 11-27 10:08 ?1229次閱讀

    RRC和RB等LTE接口與承載相關(guān)基礎(chǔ)知識(shí)介紹

    本文介紹了LTE接口與承載相關(guān)基礎(chǔ)知識(shí),介紹了E-RAB在LTE系統(tǒng)中的位置和組成以及RB的功能和管理等知識(shí)。
    發(fā)表于 10-13 13:05 ?7次下載
    RRC和RB等LTE接口與承載<b class='flag-5'>相關(guān)</b>基礎(chǔ)<b class='flag-5'>知識(shí)</b><b class='flag-5'>介紹</b>

    復(fù)合管的相關(guān)知識(shí)介紹

    本文介紹了復(fù)合管的相關(guān)知識(shí)。
    發(fā)表于 11-23 14:58 ?12次下載
    復(fù)合管的<b class='flag-5'>相關(guān)</b><b class='flag-5'>知識(shí)</b>的<b class='flag-5'>介紹</b>

    arm smmu的原理

    1: arm smmu的原理 1.1: smmu 基本知識(shí) 如上圖所示,smmu 的作用和mmu 類(lèi)似,mmu作用是替cpu翻譯頁(yè)表將進(jìn)程的虛擬地址轉(zhuǎn)換成cpu可以識(shí)別的物理地址。同理
    的頭像 發(fā)表于 10-09 10:43 ?4413次閱讀
    arm <b class='flag-5'>smmu</b>的原理

    arm smmu的原理與smmu驅(qū)動(dòng)iommu框架

    如上圖所示,smmu 的作用和mmu 類(lèi)似,mmu作用是替cpu翻譯頁(yè)表將進(jìn)程的虛擬地址轉(zhuǎn)換成cpu可以識(shí)別的物理地址。同理,smmu的作用就是替設(shè)備將dma請(qǐng)求的地址,翻譯成設(shè)備真正能用的物理地址,但是當(dāng)smmu bypass
    的頭像 發(fā)表于 10-09 10:48 ?6231次閱讀
    arm <b class='flag-5'>smmu</b>的原理與<b class='flag-5'>smmu</b>驅(qū)動(dòng)iommu框架

    SMMU數(shù)據(jù)結(jié)構(gòu)格式

    就是SMMU Level 1 Stream Table Descriptor的數(shù)據(jù)格式,簡(jiǎn)稱(chēng) **Level1 STD** 。
    的頭像 發(fā)表于 04-28 11:48 ?954次閱讀

    SMMU數(shù)據(jù)結(jié)構(gòu)格式之Level 1 Stream Table Descriptor介紹

    上圖就是SMMU Level 1 Stream Table Descriptor的數(shù)據(jù)格式,簡(jiǎn)稱(chēng)Level1 STD。
    的頭像 發(fā)表于 05-06 14:44 ?1043次閱讀
    <b class='flag-5'>SMMU</b>數(shù)據(jù)結(jié)構(gòu)格式之Level 1 Stream Table Descriptor<b class='flag-5'>介紹</b>

    ARM SMMU Data structures概述

    ARM SMMU 是一種用于系統(tǒng)級(jí)內(nèi)存管理單元(MMU)的架構(gòu),它支持基于translation表中的地址映射和內(nèi)存屬性信息的地址轉(zhuǎn)換。
    的頭像 發(fā)表于 05-08 12:46 ?1011次閱讀
    ARM <b class='flag-5'>SMMU</b> Data structures概述

    ARM SMMU Data structures之Stream Table

    incoming transaction的StreamID可以找到一個(gè)STE。SMMU支持兩種Stream table格式,格式由Stream table base registers設(shè)置。
    的頭像 發(fā)表于 05-11 09:22 ?1363次閱讀
    ARM <b class='flag-5'>SMMU</b> Data structures之Stream Table

    SMMU VA-&gt;PA的轉(zhuǎn)換流程介紹

    如果SMMU全局禁用(例如,剛結(jié)束復(fù)位SMMU_CR0.SMMUEN == 0),則transaction將通過(guò)SMMU而不進(jìn)行任何地址轉(zhuǎn)換。
    的頭像 發(fā)表于 05-15 10:07 ?965次閱讀
    <b class='flag-5'>SMMU</b> VA-&gt;PA的轉(zhuǎn)換流程<b class='flag-5'>介紹</b>