ARM Generic Interrupt Controller (GIC)

https://developer.arm.com/documentation/ihi0069/latest/

GIC Registers

  • GICD: Distributor Registers
  • GICR: Redisbutor Registors
  • GITS: ITS registers

Reference

ARM Processor Modes

Processor Modes

ModeDescriptionCPSR M[4:0]
UserUser Task나 Application을 수항 할때의 동작모드로 모든 동작모드 중 유일하게 비특권 모드이다. User Mode는 메모리, I/O장치와 같은 시스템 자원을 사용하는데 제한을 두어 사용자의 실수를 방지한다. 다른 모드(SVC)로 이동하기 위한 방법으로는 소프트웨어 인터럽트를 발생시킨다.10000b
FIQ(Fast IRQ)2개의 인터럽트 소스 중 아주 빠르게 인터럽트를 처리할 수 있도록 구성된 모드이다. 빠른 처리를 위해서 Exception Vector에서도 최하단에 존재하고 별도의 레지스터를 소유한다.10001b
IRQ(Interrupt Request)일반적으로 사용되는 인터럽트로 외부 장치에서 요청되는 하드웨어적인 IRQ의 발생에 의해 ARM Core는 IRQ모드로 전환하고 인터럽트를 처리한다.10010b
SVC(Superviser)대부분의 시스템 자원을 자유롭게 관리할 수 있는 동작모드로 주로 커널이나 디바이스 드라이버를 처리할 때(System Call) 동작되는 모드이다.Reset 신호 입력 시 및 SWI가 발생하면 SVC Mode로 전환된다.10011b
Abort메모리에서 명령을 읽거나 데이터를 읽거나 쓸때 오류가 발생할 때 Abort Mode로 전환하여 오류를 처리한다. 커널등의 패닉시 Abort Mode로 전환되어 스택 내용이 전달됨을 알 수 있다.10111b
Undefined명령어를 읽어 실행하고자 하나 읽어온 명령이 디코더에 정의되어 있지 않은 명령인 경우 발생되는 오류를 처리하는 모드이다.11011b
SystemUser Mode와 동일한 Register를 사용하고 동일한 용도로 사용된다. User Mode와의 차이점은 특권을 갖고 있다는 것이다. (ex : OS Kernel)11111b

https://julrams.tistory.com/12

Link to original

Device Tree & Timer

  • device tree에서 timer property의 구조 확인하여 parsing 하였다.
    timer {
        interrupts = <0x01 0x0d 0x104 0x01 0x0e 0x104 0x01 0x0b 0x104 0x01 0x0a 0x104>;
        always-on;
        compatible = "arm,armv8-timer\0arm,armv7-timer";
    };
irqtypeirqirqflags
secure0x010x0d0x104
non-secure0x010x0e0x104
virtual0x010x0b0x104
hypervisor0x010x0a0x104

Reference

Footnotes

  1. https://doc.rust-lang.org/std/cell/struct.OnceCell.html