CHAPTER 05
5. RISC-V INTC와 PLIC Linux domain을 계층으로 읽는다
local RISC-V interrupt controller가 external cause를 받고 PLIC chained handler가 claim ID를 child irqdomain hwirq로 전달한 뒤 driver handler와 complete로 돌아가는 흐름을 추적합니다.
root INTC
hart local cause를 Linux root domain에 매핑합니다.
chained handler
external cause의 parent IRQ에서 PLIC claim loop를 실행합니다.
child domain
PLIC source ID를 Linux virq와 irq_chip으로 연결합니다.
per-CPU handler
각 context의 claim MMIO와 enable shadow는 hart별 상태입니다.
레지스터·번호·소유권 대조
| 항목 | 소유자 | 값의 의미 | 정상 증거 | 오류 해석 |
|---|---|---|---|---|
| riscv INTC hwirq | root domain | external cause number | scause와 일치 | cause mapping |
| PLIC parent virq | Linux IRQ core | hart external interrupt | per-CPU chained entry | parent 연결 누락 |
| PLIC child hwirq | PLIC domain | claim source ID | firmware source와 일치 | off-by-one |
| child virq/desc | Linux IRQ core | driver action | request_irq action 존재 | mapping 없음 |
| complete callback | PLIC irq_chip | source ID writeback | handler 후 수행 | gateway 고정 |
실패 경계 판정
| 증상 | 직전 통과 | 우선 확인 | 반증 시험 | 판정 |
|---|---|---|---|---|
| trap은 오나 PLIC handler 없음 | scause external | parent domain/chained setup | root virq mapping | Linux hierarchy |
| claim ID 수신, action 없음 | PLIC handler | child mapping/action | irq_desc dump | driver request 경계 |
| action 실행, complete 없음 | driver handler return | irq_chip flow | eoi callback trace | flow handler 설정 |
| CPU마다 virq count 편중 | route/enable 정책 | per-hart context | enable/affinity 비교 | context 설정 |
| DT source와 hwirq 불일치 | device status | domain xlate | fwspec dump | firmware specifier |
실제 검증 절차
| 순서 | 실행 | 남길 증거 | 판정 목적 |
|---|---|---|---|
| 1 | scause→parent virq→claim ID→child virq를 한 행에 둡니다. | 번호 ledger | 계층 mapping |
| 2 | claim loop와 generic_handle_domain_irq를 trace합니다. | 호출 순서 | dispatch 확인 |
| 3 | driver request_irq 전후 child mapping을 비교합니다. | action 설치 시점 | lifecycle |
| 4 | CPU affinity/hotplug 중 per-context enable과 count를 검증합니다. | hart별 delivery | 상태 restore |
주의RISC-V external interrupt cause 번호와 PLIC source ID는 다른 번호 공간입니다.
공개적으로 다시 확인할 수 있는 자료
공개되지 않은 vendor register나 integration별 offset을 추측해서 채우지 않았습니다. 아래 제조사 자료, architecture 문서와 Linux v6.18.37 원본에서 다시 확인할 수 있는 범위만 사용했습니다.
RISC-V PLIC specification
gateway, priority, target context와 claim/complete
RISC-V AIA specification
APLIC, IMSIC, interrupt files와 virtualization
Linux SiFive PLIC driver
PLIC domain, enable, claim/complete와 chained handler
Linux RISC-V INTC
local interrupt cause와 root domain