文章目錄
- GICD_CTRL
- GICD_CTLR 寄存器結構
- RWP(Register Write Pending)
- E1NWF(Enable 1 of N Wakeup Functionality)
- DS(Disable Security)
- 親和性路由(Affinity Routing)
- ARE_NS
- ARE_S
- 中斷組使能
- EnableGrp1S
- EnableGrp1NS)
- EnableGrp0
GICD_CTRL
GICv3(通用中斷控制器版本3)是ARM架構下用于管理和處理中斷的關鍵組件之一。它包含了多個寄存器,用于配置和控制中斷的行為。其中,GICD_CTLR
(Distributor Control Register)是一個非常重要的寄存器,它用于啟用中斷和親和性路由設置。
下面是對GICD_CTLR
寄存器中一些關鍵位的詳細介紹:
GICD_CTLR 寄存器結構
GICD_CTLR
的格式取決于訪問的安全狀態以及系統支持的安全狀態數量,這由GICD_CTLR.DS
指定。當訪問為安全狀態,在支持兩種安全狀態的系統中,其結構如下:
RWP(Register Write Pending)
僅讀。指示是否有寄存器寫入操作正在進行。
0b0
:沒有寄存器寫入操作正在進行。之前對受影響寄存器字段的寫入操作的效果對GIC架構的所有邏輯組件(包括CPU接口)都是可見的。0b1
:寄存器寫入操作正在進行。之前對受影響寄存器字段的寫入操作的效果不能保證對所有GIC架構的邏輯組件(包括CPU接口)都是可見的,因為更改的效果仍在傳播中。
RWP
字段跟蹤以下內容的寫操作:
GICD_CTLR[2:0]
(組啟用位,僅限從1
到0
的轉變)GICD_CTLR[7:4]
(ARE
位,E1NWF
位和DS
位)GICD_ICENABLER<n>
E1NWF(Enable 1 of N Wakeup Functionality)
如果硬件實現該bit,它將有以下行為:
0b0
:處于睡眠狀態的PE(處理元素)不能被選為 1 of N中斷。0b1
:處于睡眠狀態的PE可以根據實現定義的控制被選為 1 of N中斷。
DS(Disable Security)
禁用安全性。
0b0
:不允許非安全訪問訪問和修改控制組0中斷的寄存器。0b1
:允許非安全訪問訪問和修改控制組0中斷的寄存器。
如果當GICD_CTLR.ARE_S == 1
時將DS從0寫為1,則對于單一安全狀態的GICD_CTLR.ARE
是RAO/WI。
如果分配器只支持單一安全狀態,此位是RAO/WI。
如果分配器支持兩種安全狀態,此位是否可編程或實現為RAZ/WI是由實現定義的。設置此字段為1時,所有對GICD_CTLR
的訪問都訪問單一安全狀態視圖,且所有位都是可訪問的。
設置為1后,只能通過硬件重置清除此字段。
如果在以下任何情況為真時將此位從0寫為1,則行為是不可預測的:
GICD_CTLR.ENABLEGRP0==1
。GICD_CTLR.ENABLEGRP1S==1
。GICD_CTLR.ENABLEGRP1NS==1
。- 一個或多個INTID處于激活或激活和掛起狀態。
親和性路由(Affinity Routing)
親和性路由(Affinity Routing)允許中斷被路由到特定的處理器上,從而提高系統的性能和效率。ARE_NS
和ARE_S
位分別控制非安全和安全狀態下的親和性路由功能。在修改這些設置之前,需要確保系統處于正確的狀態,否則可能會導致不可預測的行為。
以下是對這兩個位的詳細介紹:
ARE_NS
- 0b0:非安全狀態下禁用親和性路由。
- 0b1:非安全狀態下啟用親和性路由。
當安全狀態下的親和性路由被啟用時,這個字段是只讀/寫入忽略(RAO/WI)。從0變為1的ARE_NS
設置變化是不可預測的,除非GICD_CTLR.ENABLEGRP1_NON-SECURE == 0
。從1變為0的ARE_NS
設置變化也是不可預測的。如果沒有實現針對非安全狀態的GICv2向后兼容性,那么這個字段是只讀/寫入忽略(RAO/WI)。
ARE_S
- 0b0:安全狀態下禁用親和性路由。
- 0b1:安全狀態下啟用親和性路由。
從0變為1的ARE_S
設置變化是不可預測的,除非全部滿足以下條件:
GICD_CTLR.ENABLEGRP0 == 0
。GICD_CTLR.ENABLEGRP1S == 0
。GICD_CTLR.ENABLEGRP1NS == 0
。
從1變為0的ARE_S
設置變化也是不可預測的。
中斷組使能
在GICD_CTLR
(Distributor Control Register)寄存器中,有幾個位專門用來控制不同安全狀態下的中斷組的使能狀態。這些位包括EnableGrp1S
、EnableGrp1NS
和EnableGrp0
,它們分別控制安全組1、非安全組1和組0中斷的使能狀態。
以下是這些控制位的詳細介紹:
EnableGrp1S
Enable Secure Group 1 Interrupts
- 0b0:安全組1中斷被禁用。
- 0b1:安全組1中斷被啟用。
這個位允許控制器啟用或禁用安全組1的中斷。
當設置為1時,安全組1中的中斷可以被發送到處理器;
當設置為0時,這些中斷被阻止。
EnableGrp1NS)
Enable Non-Secure Group 1 Interrupts
- 0b0:非安全組1中斷被禁用。
- 0b1:非安全組1中斷被啟用。
這個位的功能與EnableGrp1S
相似,但它專門控制非安全狀態下的組1中斷。啟用這些中斷允許非安全環境的中斷傳遞給處理器。
EnableGrp0
Enable Group 0 Interrupts
- 0b0:組0中斷被禁用。
- 0b1:組0中斷被啟用。
組0中斷通常被用于處理安全相關的中斷。通過設置這個位,可以控制這類中斷是否能夠被分發和處理。