国产精品久久久久影院,成人午夜福利视频,国产精品久久久久高潮,国产精品 欧美 亚洲 制服,国产精品白浆无码流出

arm GIC介紹之一

發(fā)布者:自在自由最新更新時(shí)間:2024-11-08 來源: cnblogs關(guān)鍵字:arm  GIC 手機(jī)看文章 掃描二維碼
隨時(shí)隨地手機(jī)看文章

GIC是ARM架構(gòu)中及其重要的部分,本文只在公開ARM對(duì)應(yīng)資料基礎(chǔ)上,以MTK開發(fā)板為基礎(chǔ)整理。個(gè)人理解之后記錄,鞏固和加深認(rèn)識(shí),僅此而已,如果有錯(cuò)誤,歡迎指出。

 

1. GIC的概述

看過SOC架構(gòu)的同學(xué)知道,CPU接受外部的中斷處理請(qǐng)求,并進(jìn)行處理,其實(shí)是一個(gè)被動(dòng)接受的過程,這樣好處是既能

保證主任務(wù)的執(zhí)行效率,又能及時(shí)獲知外部的請(qǐng)求,從而處理重要的設(shè)備請(qǐng)求操作。

如圖:

 

  

 

GIC的全稱為general interrupt controller,主要作用可以歸結(jié)為:

接受硬件中斷信號(hào),并進(jìn)行簡(jiǎn)單處理,通過一定的設(shè)置策略,分給對(duì)應(yīng)的CPU進(jìn)行處理。

這樣的圖比較簡(jiǎn)單,可以看下在ARM完整的SOC結(jié)構(gòu)中,其位置是什么樣的:

 

這是ARM比較新的架構(gòu)圖,其中CORELINK CCI-500是片上互聯(lián)總線,也就是AMBA,在這總線上面掛了不同的設(shè)備。比如NIC-400設(shè)備,這可以理解為network interface設(shè)備,在這個(gè)設(shè)備上使用者可以再連接其它需要的器件。那么cpu,也就是cortex-72(大核)和cortex-53(小核)也是掛在總線上。上接GIC-500,也就是我們說的中斷控制器,這個(gè)圖其實(shí)是邏輯上的,實(shí)際中,GIC-500也是有線連接到CCI-500上,通過CCI-500和cpu連接交互,ARM的Distributor應(yīng)該是為表示cpu和GIC之間的關(guān)系,才將其邏輯圖表示成大家看到的。詳細(xì)的可以參考ARM的官方網(wǎng)站介紹。

 

2.硬件中斷的分類和GIC的組成

2.1 GIC_V2的介紹

我們知道了GIC的大致用途,那么它包含了那些部分,如果工作的,有什么特殊的地方呢。

OK,我們一個(gè)一個(gè)來。先來看下GIC的大致組成結(jié)構(gòu):


這是經(jīng)典的GIC V2圖,實(shí)際上大家能看到的經(jīng)典的圖也是這個(gè)。

2.1.1中斷源的分類

這里面把硬件中斷源分為了3類:

SPI:這是shared peripheral interrupt , 這是常見的外部設(shè)備中斷,也定義為共享中斷,比如按鍵觸發(fā)一個(gè)中斷,手機(jī)觸摸屏觸發(fā)的中斷,共享的意思是說

可以多個(gè)Cpu或者說Core處理,不限定特定的Cpu。一般定義的硬件中斷號(hào)范圍31~1019.

PPI:這里指的是private peripheral interrupt,16~31,私有中斷,為什么這樣說呢,這些中斷一般是發(fā)送給特定的Cpu的,比如每個(gè)Cpu有自己對(duì)應(yīng)的Physicaltimer,產(chǎn)生的中斷信號(hào)就發(fā)送給這個(gè)特定的cpu進(jìn)行處理。比如ARM_V8平臺(tái)上的:

 

在設(shè)備上,cat /proc/interrupts可以看到:


 

SGI:這個(gè)中斷有些同學(xué)遇到的比較少,software generatedinterrupt,軟件出發(fā)產(chǎn)生的中斷,中斷號(hào)范圍0~15,也就是最前的16個(gè)中斷。如果在X86平臺(tái)上做過開發(fā)工作的同學(xué)可能有影響,其實(shí)這就是相當(dāng)于IPI,簡(jiǎn)單的說Cpu_1要給Cpu_2發(fā)送特定信息,比如時(shí)間同步,全局進(jìn)程調(diào)度信息,就通過軟件中斷方式,目標(biāo)Cpu接受到這樣的中斷信息,可以獲取到信息是哪個(gè)Cpu發(fā)送過來的,具體的中斷ID是哪個(gè)數(shù)字,從而找到對(duì)應(yīng)處理方式進(jìn)行處理。比如MTK上的:


2.1.2 GIC的組成

這是硬件中斷的分類。

那么GIC控制器完成這樣的中斷信號(hào)收集和分發(fā)工作,也劃分了幾個(gè)功能部分,見上面第2個(gè)圖。包含2個(gè)部分:

 

Distributor和CPU interface.

Distributor:

The Distributor block performs interruptprioritization anddistribution to the CPU interface
blocks that connect to the processors in the system. The Distributor blockregisters are identified by the GICD_ prefix

The Distributor provides a programminginterface for:
? Globally enabling the forwarding of interrupts to the CPU interfaces.

? Enabling or disabling eachinterrupt.
? Setting the priority level of each interrupt.
? Setting the target processor list of each interrupt.
? Setting each peripheral interrupt to be level-sensitive oredge-triggered.
? Setting each interrupt as either Group 0 or Group 1.

CPU Interface:

Each CPU interface block provides theinterface for a processorthat is connected to the GIC. Each CPUinterfaceprovides

a programming interface for:
? enabling the signaling of interrupt requests to the processor
? acknowledging an interrupt
? indicating completion of the processing of an interrupt
? setting an interrupt priority mask for the processor
? defining the preemption policy for the processor
? determiningthe highest priority pending interrupt for the processor .

這是其英文解釋,其實(shí)總的來說:

Distributor,做為一個(gè)中斷路由的設(shè)備,主要完成工作:

對(duì)整個(gè)中斷控制器設(shè)備的使能等操作。

對(duì)每一個(gè)中斷的優(yōu)先級(jí)控制。

對(duì)每一個(gè)中斷的觸發(fā)方式設(shè)置。

對(duì)沒一個(gè)中斷的目標(biāo)發(fā)送CPU進(jìn)行設(shè)置,決定分發(fā)到哪個(gè)具體的CPU上進(jìn)行處理。

對(duì)中斷的去向,是到G0還是G1,這個(gè)是安全域的概念。我們后面補(bǔ)充GIC V3和V4的概念再展開說。

記錄每個(gè)中斷的狀態(tài),是否到來,是否處理中,是否處理完,是否在等待發(fā)送狀態(tài)等等。

那么,CPUInterface主要工作是:

使能和發(fā)送一個(gè)具體的中斷信號(hào)到特定對(duì)應(yīng)的CPU上,

確認(rèn)具體中斷已經(jīng)被CPU接受,處理,以及處理完成。

設(shè)置cpu能接受的中斷的優(yōu)先級(jí)別。以及對(duì)應(yīng)的基于級(jí)別的中斷搶斷等處理。

所以,從第二個(gè)圖來說。中斷信號(hào)先到Distributor,然后根據(jù)設(shè)定目標(biāo)CPU,送到CPU對(duì)應(yīng)的Interface上,在這里仲裁是否優(yōu)先級(jí)足夠高,

是否可以搶斷或者打斷當(dāng)前的終端處理等,如果可以,那么CPU Interface就發(fā)送一個(gè)物理的SIGNAL到CPU的IRQ接線上,CPU感知到中斷信號(hào),

從而轉(zhuǎn)到中斷模式進(jìn)行處理。

那么途中帶*號(hào)的IRQ和FIQ是什么意思呢?

FIQ是Fastinterrupt request,這是ARM上定義的一種中斷處理方式,某些終端需要快速處理完成,在這種情況下,CPU會(huì)簡(jiǎn)化操作,然后退出中斷。

那么從留向來說,途中是直接到CPU側(cè)的,沒有經(jīng)過Distributor?

是的,我們說過,Distributor可以被使能,等各種操作,那么當(dāng)其主功能暫時(shí)關(guān)閉了怎么辦呢,這就又了BYPASS功能,一個(gè)已將IRQ直接繞過它,

送到CPU側(cè),在某些情況下這可以作為一個(gè)喚醒的信號(hào)源去WAKE UP 對(duì)應(yīng)的CPU,或者可以設(shè)置成為X86上的NMI,也就是不可屏蔽中斷來處理。

2.2 GIC_V3的介紹

在現(xiàn)在市面上看到的手機(jī)或者其它設(shè)備產(chǎn)品中,既有老的V2版本的中斷控制器,也有比較新的V3結(jié)構(gòu)的,而且是在不斷向后演進(jìn),我們有必要依照新的V3的來說明,畢竟,這是后面的趨勢(shì),比如現(xiàn)在大家現(xiàn)在可以看到GIC_V4的介紹了。

好,我們切入正題,在之前介紹GIC_V2的基礎(chǔ)上我們擴(kuò)展下。


在上圖中,我們?cè)贕IC_V3的基礎(chǔ)上整理出這樣的結(jié)構(gòu)圖,其實(shí)主題結(jié)構(gòu)和V2是大致一樣的,但是我們會(huì)發(fā)現(xiàn),多了Redistributor這樣的組件,這是為啥呢?另外,我也也看到cpuinterface移到GIC外面了,為啥這樣表示邏輯圖呢?多出來的LPI這個(gè)中斷是做什么用的?

2.2.2 GIC中斷

其實(shí),LPI解釋為L(zhǎng)PI (Locality-specific Peripheral Interrupt)。

所有的中斷類型可以分為:

SGI:software generated Interrupt

軟件觸發(fā)的中斷,這個(gè)和之前解釋的一致。

PPI:Private Peripheral Interrupt

私有中斷類型,這個(gè)和之前解釋的也是一致。但是PPI直接到Redistributor,繞過, 這是因?yàn)樵黾拥腞edistributor一個(gè)是為L(zhǎng)PI需要,特殊的中斷類型,既然PPI是各自CPU都有的,就沒必要再經(jīng)過之前的Distributor

來分發(fā)了,這樣也導(dǎo)致了其中的寄存器等也做了修改。我們后面介紹寄存器時(shí)候再說明。

SPI:SharedPeripheral InterruptDistributor

共享外圍硬件中斷,這個(gè)也是和GIC_V2解釋一樣的ID32-ID1019。

但是,多了LPI(Locality-specific Peripheral Interrupt)
LPIs are new in GICv3, and they are different to the other types of interruptin a number of ways . In particular, LPIs are always message-based interrupts,and their configuration is held in tables in memory rather than registers.

這是一個(gè)基于消息的中斷類型,是ARM為后續(xù)的SERVER等產(chǎn)品做的擴(kuò)展。


在傳統(tǒng)的GIC流程中如上圖,外圍設(shè)備的中斷觸發(fā)線是引出到GIC上的,這樣可以理解為一個(gè)物理的SIGNAL,比如一個(gè)高電平信號(hào),邊沿觸發(fā)信號(hào)。


但是實(shí)際上在現(xiàn)在GIC_V3中,中斷可以依照MESSAGEBASED方式來觸發(fā),外圍設(shè)備的終端信號(hào)先到INTERCONNECT(AMBA總線),然后片上總線再給GIC發(fā)送一個(gè)消息,這個(gè)作為一個(gè)IRQ來源,這就是基于消息的中斷的簡(jiǎn)單解釋,當(dāng)然這個(gè)需要總線,SOC等做調(diào)整適配,在這里我們不展開來說,有興趣的同學(xué)可以看看CCI-500等總線如何定義信號(hào)燈細(xì)節(jié)的。

我們這樣來表示下整個(gè)圖:


從ITS是Interrupt Translate service,如果我們只看圖右側(cè)的部分,X86上經(jīng)典的PCI總線,經(jīng)過一系列轉(zhuǎn)換發(fā)送一個(gè)中斷到X86的CPU上,從而處理。那么現(xiàn)在我要直接把這部分搬到arm,由于體系架構(gòu)不同,中斷控制器邏輯和流程都不一樣, X86對(duì)應(yīng)APIC-IO 和Local APIC這樣的終端控制邏輯。

但是我們可以這樣來處理:

  1. 我們?cè)黾右粋€(gè)ITS,在這里定義好特定的消息,包含消息從哪里來的,比如PCI-ROOT,具體的設(shè)備編號(hào),比如PCIe-endpoint對(duì)應(yīng)的設(shè)備,可能是個(gè)音頻設(shè)備,或者簡(jiǎn)單的按鍵,這都不是重點(diǎn)。關(guān)鍵是ITS可以根據(jù)定義好的配置,來把對(duì)PCI發(fā)來的中斷消息進(jìn)行轉(zhuǎn)換,比如轉(zhuǎn)換成IRQ_ID:8200終端

  2. 這樣就可以發(fā)送到Redistributor上進(jìn)行分發(fā)處理,和一般的IRQ類似,但是不經(jīng)過Distributor,其中斷也沒有Pending狀態(tài),如果處理不過來丟失了那就丟失了,不會(huì)特別的關(guān)注。

從現(xiàn)在我們看到的資料來說,還沒有看到LPI的具體應(yīng)用,但是ARM已經(jīng)在在很多方面為SERVER的架構(gòu)做了調(diào)整,這也是其中一個(gè),所以在這里會(huì)提示下,但不是我們介紹的重點(diǎn)。

 

2.2.2 GIC的組成

我們?cè)谏厦鎴D中,給出GIC_V3已經(jīng)之后對(duì)應(yīng)的邏輯圖,從中可以看到幾個(gè)部分:

 

Distributor

The Distributor registers arememory-mapped, and contain global settings that affect all PEs
connected to the interrupt controller. The Distributor provides a programminginterface for:
· Interrupt prioritization and distribution of SPIs.
· Enabling and disabling SPIs.
· Setting the priority level of each SPI.
· Routing information for each SPI.
· Setting each SPI to be level-sensitive or edge-triggered.
· Generating message-based SPIs.
· Controlling the active and pending state of SPIs.
· Controls to determine the programmers’ model that is used in each Securitystate (affinity routing or legacy).

CPU Interface

Each Redistributor is connected to aCPU interface. The CPU interface provides a programming interface for:
· General control and configuration to enable interrupt handling.
· Acknowledging an interrupt.
· Performing a priority drop and deactivation of interrupts.
· Setting an interrupt priority mask for the PE.
· Defining the preemption policy for the PE.
· Determining the highest priority pending interrupt for the PE

Redistribute (V3,V4)

For each connected PE there is aRedistributor. The Redistributors provides a programming interface for:
· Enabling and disabling SGIs and PPIs.
· Setting the priority level of SGIs and PPIs.
· Setting each PPI to be level-sensitive or edge-triggered.
· Assigning each SGI and PPI to an interrupt group.
· Controlling the state of SGIs and PPIs.
· Base address control for the data structures in memory that support theassociated interrupt properties and    pending state for LPIs.
· Power management support for the connected PE.

其實(shí)之前對(duì)應(yīng)的Distributor 和CPU Interface也還是一致的,但是Distributor不再處理PPI這樣的中斷,PPI直接送到Redistribute來處理,另外Redistribute也會(huì)處理LPI類型中斷,其它邏輯上和我們之前介紹的是相似的,在這里不再重復(fù)。

 

2.3 IRQ生命周期

從GIC角度來說,一個(gè)中斷可以分為幾個(gè)階段,對(duì)應(yīng)不同的狀態(tài):


當(dāng)GIC上配置的中斷,配置好之后,沒有其對(duì)應(yīng)的中斷到來,或者之前處理的中斷已經(jīng)完全結(jié)束了,這個(gè)可以表示為

Deactive狀態(tài)或者Inactive,如果中斷信號(hào)到來,GIC獲取到了,這個(gè)時(shí)候要經(jīng)過一系列的的判斷,然后送給對(duì)應(yīng)的CPU來處理,在CPU確認(rèn)該中斷并處理之前,狀態(tài)是Pending,如果CPU獲取到了該終端確認(rèn)要處理了,那么久變?yōu)锳ctive狀態(tài)。這個(gè)時(shí)候,對(duì)應(yīng)的GIC上終端信號(hào)線可能依舊有效,比如高電平觸發(fā)的終端信號(hào)還沒有被拉低,或者說又來一個(gè)同樣的終端,那就是Activeand Pending。

2.4 IRQ Group


在ARM中,新的架構(gòu)上引入了EX的概念,如果Ex0/1/2/3,以及安全域和非安全域,這個(gè)我會(huì)在補(bǔ)充個(gè)Topic:TRUSTZONE來說明,或者大家也查看資料來理解ARM的工作模式,比如FIQ/IRQ等傳統(tǒng)模式。只是現(xiàn)在ARM淡化了這樣模式,使用Ex,exception level 0/1/2/3,比如我們看到的ANDROID APP就是在Ex0,也就是USER空間,Ex1是我們常見的KERNEL空間。Ex2是對(duì)應(yīng)的Hypervisor,虛擬化對(duì)應(yīng)的空間,那么Ex3就是最好的權(quán)限和異常級(jí)別,這里可以由各個(gè)芯片廠家自己定義來添加對(duì)應(yīng)的如ATF底層功能。

另外還在CPU上劃分了SECURE 和NON-SECURE空間,這需要ARM對(duì)應(yīng)的控制寄存器等來進(jìn)行權(quán)限控制。

所以,IRQ的發(fā)到一個(gè)CPU上,還需要知道送到哪個(gè)Ex去處理,是送到KERNEL(Ex1)?還是安全域里面,這也在GIC里面進(jìn)行配置,然后一個(gè)IRQ到來了才會(huì)往對(duì)應(yīng)的寄存器里面發(fā)送。

OK,這概念比較抽象,我們?cè)诤竺嬖敿?xì)介紹GIC主要的寄存器和功能時(shí)候,會(huì)介紹,如果能理解對(duì)應(yīng)的寄存器和作用,那么GIC的組成和功能也就明白了。


關(guān)鍵字:arm  GIC 引用地址:arm GIC介紹之一

上一篇:ARM40-A5應(yīng)用——fbset與液晶屏參數(shù)的適配
下一篇:arm GIC介紹之四

小廣播
設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦

最新單片機(jī)文章

 
EEWorld訂閱號(hào)

 
EEWorld服務(wù)號(hào)

 
汽車開發(fā)圈

 
機(jī)器人開發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號(hào) 京ICP備10001474號(hào)-1 電信業(yè)務(wù)審批[2006]字第258號(hào)函 京公網(wǎng)安備 11010802033920號(hào) Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved