1. 程式人生 > >閱讀GIC-500 Technical Reference Manual筆記

閱讀GIC-500 Technical Reference Manual筆記

GIC-500是ARM GICv3的一個實現,它只支援ARMv8核和實現了GIC Stream協議的GIC CPU Interface,比如Cortex-A53。

關於GIC有四份相關文件:《Cortex-A53 TRM》介紹了GIC CPU Interface;《ARMv8-A Architecture Profile》提供了GIC CPU Interface的細節;《GIC-500 TRM》介紹了GICv3的一個實現;《GICv3/4 Architecture Specification》介紹了GIC架構細節規範。

這四份文件可以分為兩部分:GIC CPU Interface和GIC本身。

1 Introduction

SGIs - Software Generated Interrupts

ITS - Interrupt Translation Service

LPIs - Locality-specific Peripheral Interrupts

SPIs - Shared Peripheral Interrupts

PPIs - Private Peripheral Interrupts

 1.1 About the GIC-500

GIC-500支援高達128核,只支援ARMv8架構的核和GIC Stream Protocol介面的GIC CPU介面,Physical interrupt signals,SGIs,從AXI4 slave埠產生的中斷,ITS提供ID轉換等功能

GIC-500從AXI4 Slave或者Physical interrupt inputs接收中斷,和CPU通過AXI4-Stream介面連線,通過AXI4 Slave埠被程式設計

GIC CPU interface屬於GIC一部分,但不屬於GIC-500,而更傾向於屬於ARMv8 core的一部分。

GIC-500的Distributor->Redistributor->Cluster->Core的拓撲結構

ARM架構通過MPIDR(Multiprocessor Affinity Register)暫存器給給每個CPU制定一個邏輯地址。

ARMv7支援三層,ARMv8支援四層,MPIDR有著明顯的分層結構,<Aff3>.<Aff2>.<Aff1>.<Aff0>

GIC-500只支援兩層,所以MPIDR的值只能是0.0.c.d,c是process層,d是core層GIC-500支援128 core或者32 processor,並且每processor不超過8 core

 1.3 Features

  • 支援高達128 core
  • affinity-level 1支援高達32 cluster
  • 每cluster高達8 core
  • 16個SGIs,ID0-ID15
  • 16個PPIs,ID16-ID31
  • 基於Affinity的可程式設計中斷路由
  • 中斷遮蔽和優先順序控制
  • 每中斷可配置32個優先順序

2 Functional Description

2.1 About the functions

ICB: Interrupt Control Block.

ICB State RAM是儲存SPIs、PPIs、SGIs各種配置的地方。同樣LPI State RAM和ITE State RAM是儲存LPIs和ITS設定的地方。

2.2 Interfaces

Figure 2-1可以看出GIC-500和外部的介面包括:AXI4 Slave Interface、AXI4 Master Interface、RAM Interfaces、Physical interrupt signals、GIC-500 Stream Protocal Interface

AXI4 Slave Interface:可以通過此介面對GIC-500所有部分程式設計,包括Distributor、Redistributor、ITS。同時也負責處理message-based中斷,也即通過寫AXI4 slave interface產生的中斷。message-based中斷可以產生SGI/LPI型別的中斷。

AXI4 Master Interface:GIC-500通過此介面訪問主記憶體,包括ITS的translation tables、ITS command queue、LPI配置表、LPI pending table等。

RAM Interfaces:和各種State RAM介面。

Physical interrupt signals:產生SPIs和PPIs型別中斷的訊號,可配置成level-sensitive、edge-triggered。

GIC-500 Stream Protocal Interface:用於傳送中斷給CPU核,並且從CPU接收啟用中斷的通知。

2.3 Operation

GIC-500可以分成三個主要部分:ITS(將外設message-based中斷翻譯成LPIs)、Distributor(接收Wire interrupts或者程式設計介面過來的中斷,然後根據優先順序傳送到CPU Interface)、Redistributor(每CPU核一個Redistributor,儲存每個核的PPIs/SGIs/:PIs狀態)。

GIC-500支援不同型別的中斷,主要包括:

SGIs - 是核間中斷,從一個核觸發傳送到另外核。一個核上觸發的中斷,並不影響其他核上同樣中斷號,並且每個核的SGI設定都是獨立的。可以通過System register或者GICD_SGIR觸發中斷,共16個獨立的SGIs,ID0-ID15

PPIs - 用於和CPU和緊耦合的外設,因此PPI僅傳送到相關的CPU核。一個核上觸發的PPI總段並不會影響其他核相同ID號的PPI,而且每個核的PPI設定也是相互獨立的。

SPIs - 用於不和特定CPU和緊耦合的外設,一個核上觸發的SPI中斷,同時也會啟用其他核上的中斷。但是也可以通過程式設計設定SPI到特定的核。GIC-500只允許一個核響應SPI中斷,SPI的設定是核間共享的。SPI可以被wire input或者AXI4 slave programming interface觸發。GIC-500支援高達960各終端,spi[991:32]。

LPIs - 多用於產生message-based型別中斷的外設,一個LPI同一時刻只能指向一個核。

Interrupt group:Group 0、Group 1 Secure、Group 1 Non-secure。

Interrupt triggering:Level-sensitive(這種型別的中斷會一直pending,直到被asserted)和Edge-triggered(上升沿觸發導致中斷變成pending狀態,直到被CPU interface activated時清pending位)。

Power Management:GIC-500不僅支援對應的核被關閉,同時自身也可以被關閉。通過GICR_WAKER暫存器來設定。

2.4 Clocking and resets

GIC-500僅有一個時鐘輸入clk,和一根reset訊號resetn。

3 Programmers Model

3.2 The GIC-500 register map

GICD - GIC Distributor register

GICR - GIC Redistributor register

GITS - GIC Interrupt Translation Service register

4 相關延伸

在每個平臺的實現中都會對中斷資源進行定義,這是一個GIC-500對應的中斷控制器設定:

/* 0-15:  SGI (software generated interrupts)
 * 16-31: PPI (private peripheral interrupts)
 * 32+:   SPI (shared peripheral interrupts)
 */

#define GIC_PPI_START 16
#define GIC_SPI_START 32

/*
 * software generated interrupts
 */
#define SGI0_INT                      (0)
#define SGI1_INT                    (1)
#define SGI2_INT                    (2)
#define SGI3_INT                    (3)
#define SGI4_INT                    (4)
#define SGI5_INT                    (5)
#define SGI6_INT                    (6)
#define SGI7_INT                    (7)
#define SGI8_INT                    (8)
#define SGI9_INT                    (9)
#define SGI10_INT                    (10)
#define SGI11_INT                    (11)
#define SGI12_INT                    (12)
#define SGI13_INT                    (13)
#define SGI14_INT                    (14)
#define SGI15_INT                    (15)

/*
 * private peripheral interrupts
 */
...
/*
 * shared peripheral interrupts
 */
#define WDT_INT                        (GIC_SPI_START+0)
...

#define NR_SOC_IRQS                 (GIC_SPI_START+77)

更深入的分析,就需要和Linux kernel中GIC相關程式碼結合了。

相關推薦

閱讀GIC-500 Technical Reference Manual筆記

GIC-500是ARM GICv3的一個實現,它只支援ARMv8核和實現了GIC Stream協議的GIC CPU Interface,比如Cortex-A53。 關於GIC有四份相關文件:《Cortex-A53 TRM》介紹了GIC CPU Interface;《ARMv8-A Architecture P

【資源共享】完整版RK3399芯片手冊《RK3399 Technical Reference Manual 1.4》

firefly arm rk3399 開發板 linux 【資源共享】完整版RK3399芯片手冊《RK3399 Technical Reference Manual 1.4》 完整資料總共824頁 詳細的寄存器與操作資料 下載地址:http://developer.t-firefly.co

閱讀z-stack組網,記錄筆記

事件處理 super tin 疑問 router delay result 設備 初始化 大概知道組網的流程,分別記錄協調器組成網絡和路由器或者終端節點加入網絡的過程。 在ZMain.c中int main( void )中 osal_init_system();---&g

IntelliTest(5) - The IntelliTest Reference Manual[譯]

pla 一起 unittest rdo 問題: man tell int evel ??有一套非常棒的工具集將大大提高我們的工作效率,選擇一個正確的工具和讓這個工具做它擅長的事情也是非常重要的。工具集越大,就越容易找到適合你當前工作的工具。 ??不管使用任何工具,為了讓它

MySQL 5.7 Reference Manual】15.4.2 Change Buffer(變更緩衝)

15.4.2 Change Buffer(變更緩衝)   The change buffer is a special data structure that caches changes to secondary index pages when affected pages are

MySQL 5.7 Reference Manual :: 4.5.4 mysqldump & mysql — Database Backup & Restore Program

MySQL :: MySQL 5.7 Reference Manual :: 4.5.4 mysqldump — A Database Backup Programhttps://dev.mysql.com/doc/refman/5.7/en/mysqldump.html mysqldump備份還原和mys

閱讀Vector原始碼記錄的一些筆記

在多執行緒的情況下,ArrayList和LinkedList都是執行緒不安全的,Vector是執行緒安全的,ArrayList是基於陣列實現的,LinkedList是基於雙向連結串列實現,而Vector的實現也是基於陣列的,從資料結構來看,Vector和Arra

【MySQL 5.7 Reference Manual】15.4.2 Change Buffer(變更緩衝)

15.4.2 Change Buffer(變更緩衝)   The change buffer is a special data structure that caches changes to secondary index pages when affected pages are

如何閱讀學術著作和做讀書筆記

1、閱讀方法 首先要養成連線概念與經驗的閱讀習慣。讀書 必定要首先掌握作者的中心論點(當然有許多沒有形成中心概念的著作,甚或主要是經驗資訊堆積類的著作,有的價值不大,但有的是十分珍貴的參考書。我這裡關 心的不是參考書的編撰,而是學術專著的寫作),而為了精確地掌握一本書,也是

閱讀 深入理解JVM虛擬機器筆記

今日開始拜讀大作 深入理解JVM虛擬機器 在此做一些筆記記錄:        1.關於java執行時資料區域,其實遠不止堆和棧,在這裡粗淺的有個認知:                        1)程式計數器:一塊比較小的記憶體區域。位元組碼直譯器需要通過計數器去執行下一

The Unified Modeling Language Reference Manual

It is unnecessary to listen too much to UML language lawyers. There is no single right way to use it. It is one of many tools that a good developer uses. I

閱讀筆記之No-Reference Image Quality Assessment in the Spatial Domain

摘要: 本文提出了一種基於自然場景統計的通用性影象失真的無參考(NR)影象質量評估(IQA)模型(BRISQUE)。它是利用區域性歸一化亮度係數的場景統計模型來量化影象“自然度”損失,為了定量描述自然場景統計係數與失真程度的對映關係,引入非對稱廣義高斯分佈 (AGGD)來擬合係數與失真的對應關係

閱讀筆記之No-Reference Objective Image Sharpness Metric Based on the Notion of Just Noticeable Blur

摘要         本文提出了一種基於目標感知的無參考影象銳度/模糊度評價方法。與現有的無參考影象銳度/模糊度演算法不同,該演算法能夠預測影象不同區域的相對模糊度,且與人類視覺的主觀感知有較好的相關性。 前言 1.研究意義:   &

《Unity Manual閱讀筆記(二):Scripting

找尋Component或者GameObject總結: 找Component: gameObject.GetComponent<RigidBody>() 找子節點中的GameObject:

《代碼閱讀》讀書筆記(一)

需求 的人 一行 編碼 重要 流動 使用 分析 缺少 《代碼閱讀》讀書筆記(一) 《代碼閱讀》(《Code Reading The Open Source Perspective》)Diomidis Spinellis 著 ---------------------

kindle閱讀筆記17年3月

好的 對齊 商都 自己 不為 添加 nbsp 國家 唐詩 資治通鑒(1) (司馬光) - 您在位置 #30-31的標註 | 添加於 2017年3月27日星期一 上午12:25:15 夫事未有不生於微而成於著,聖人之慮遠,故能謹其微而治之,眾人之識近,故必待其著而後救之;

jdk源碼閱讀筆記之java集合框架(四)(LinkedList)

ray private array public 源碼閱讀 jdk源碼閱讀 oid color 解釋 關於LinkedList的分析,會從且僅從其添加(add)方法入手。 因為上一篇已經分析過ArrayList,相似的地方就不再敘述,關註點在LinkedList的特點。 屬

vue中$watch源碼閱讀筆記

vue 告訴 應該 最好 notify type 十分 msg 建立 項目中使用了vue,一直在比較computed和$watch的使用場景,今天周末抽時間看了下vue中$watch的源碼部分,也查閱了一些別人的文章,暫時把自己的筆記記錄於此,供以後查閱: 實現一個簡單的

《HTTP權威指南》--閱讀筆記(二)

cep ask 資源 phrase 格式 tel 位置 自動擴展 port URL的三部分: 1,方案 scheme 2,服務器位置 3,資源路徑 URL語法: <scheme>://<user>:<password>@&

夢斷代碼閱讀筆記之四

模塊 代碼 clas 堅持 大牛 方式 理解 spa 閱讀 第七章 OSAF的第一個“演示日”,看起來並不順暢的演示,但是卻是實現了以往沒有過的模塊,是工作人員們幾個月的心血。而這整個改變正是許多細節都發生改變的結果。用戶的錯誤理解卻真實反映出關註細節、無視上下文的閱讀方式