← Interrupt 상세 목차DUJINLABS.COM

Hardware · Interrupt detailed manual 02 · Linux v6.18.37

2. GIC Distributor의 SPI routing과 group 설정을 읽는다

GICD_CTLR affinity routing, group enable, SPI priority, target route와 routing mode를 초기화 순서대로 확인합니다. RWP가 끝나기 전에 다음 programming을 진행하지 않습니다.

상세 표
2
검증 행
14
절차
4 checkpoints
기준
Arm GICv3 · Linux irqchip · Linux v6.18.37

CHAPTER 02

2. GIC Distributor의 SPI routing과 group 설정을 읽는다

GICD_CTLR affinity routing, group enable, SPI priority, target route와 routing mode를 초기화 순서대로 확인합니다. RWP가 끝나기 전에 다음 programming을 진행하지 않습니다.

ARE

GICv3 affinity routing을 켜면 GICD_IROUTER가 target PE를 지정합니다.

RWP

write pending이 0이 돼야 disable/config/enable 순서가 완료됩니다.

priority

숫자가 작을수록 높은 priority이며 구현한 상위 bit 수만 유효할 수 있습니다.

route-any

IRM을 쓰면 특정 affinity가 아닌 참여 PE 중 하나로 전달될 수 있습니다.

레지스터·번호·소유권 대조

항목소유자값의 의미정상 증거오류 해석
GICD_CTLRGICDARE와 group enable, RWP정책 bit와 RWP=0초기화 write 미완료
GICD_IIDR/PIDRGICDimplementer/revision사용 quirk와 일치다른 GIC release
GICD_IPRIORITYRGICDSPI priorityPMR보다 전달 가능mask priority
GICD_IROUTERGICDAff3:Aff0와 IRMonline target MPIDR와 일치존재하지 않는 PE route
GICD_CTLR RWPGICDregister write completion제한시간 내 0clock/power 또는 sequencing

실패 경계 판정

증상직전 통과우선 확인반증 시험판정
SPI가 CPU0에만 옴pending 생성IROUTER/IRMaffinity를 CPU1로 설정routing 경계
affinity write 효과 없음Linux 요청 성공RWP와 readbackmask 후 route 변경programming 순서
낮은 priority만 손실높은 IRQ 정상priority/PMR/BPRPMR 값을 단계 조정priority masking
부팅 초기에만 stormruntime 정상group/enable 초기값firmware와 kernel snapshot diffhandoff 초기화
특정 cluster route 실패같은 cluster 정상Aff2/Aff3와 redistributorMPIDR/IROUTER raw 비교affinity encoding
그림 1. 2. GIC Distributor의 SPI routing과 group 설정을 읽는다의 실행 순서왼쪽에서 오른쪽으로 실제 소유권과 관찰 지점이 이동합니다.
01 GICD disable
02 RWP wait
03 group/trigger/priority
04 IROUTER
05 enable bit
06 group enable
07 RWP wait
08 SPI delivery

실제 검증 절차

순서실행남길 증거판정 목적
1GICD_CTLR/IIDR/TYPER를 먼저 저장합니다.identity와 capability해석 기준
2SPI별 group, trigger, priority, route를 한 행에 둡니다.INTID ledger설정 일관성
3affinity 변경 전후 IROUTER readback과 RWP를 확인합니다.실제 적용 증거write 완료
4각 cluster CPU로 순환 route하며 interrupt count를 비교합니다.target별 deliverytopology 검증

주의GICD register programming은 일부 bit가 banked가 아니며 여러 CPU가 동시에 쓰면 race가 납니다. 초기화와 affinity 변경의 lock 범위를 확인합니다.

공개적으로 다시 확인할 수 있는 자료

공개되지 않은 vendor register나 integration별 offset을 추측해서 채우지 않았습니다. 아래 제조사 자료, architecture 문서와 Linux v6.18.37 원본에서 다시 확인할 수 있는 범위만 사용했습니다.