Arm Linux Kernel Hacks

rousalome.egloos.com

포토로그 Kernel Crash


통계 위젯 (화이트)

240
557
422298


[Arm프로세서] GIC: GICR_IPRIORITYR<n> 레지스터 Arm: GIC

GICR_IPRIORITYR는 리디스트리뷰터에 존재하는 Interrupt Priority Registers의 약자입니다. 레지스터의 이름과 같이 리디스트리뷰터에서 관리하는 SGI나 PPI 인터럽트의 우선 순위를 정할 수 있습니다. 

레지스터 이름의 접미사인 <n>의 범위는 0~7입니다. 이 정보로 GICR_IPRIORITYR0~GICR_IPRIORITYR7 범위의 레지스터가 존재한다는 사실을 알 수 있습니다.

다음은 GICR_IPRIORITYR0<n> 레지스터에 설정되는 정보입니다.

GICR_IPRIORITYR0~GICR_IPRIORITYR3: SGI 인터럽트 우선순위 
GICR_IPRIORITYR4~GICR_IPRIORITYR7: PPI 인터럽트 우선순위

인터럽트의 우선 순위를 잘못 설정하면 인터럽트가 CPU interface로 포워딩되지 않으니, 이 점 유념합시다. 

[정보] 인터럽트 아이디와 인터럽트 소스

GIC에서는 인터럽트 아이디로 인터럽트의 소스를 관리합니다. 인터럽트 아이디 별 인터럽트의 소스는 다음과 같습니다.

0~15: SGI 인터럽트
16~31: PPI 인터럽트

GIC에서 제공하는 시스템 레지스터에서 인터럽트 아이디와 관련된 내용이 확인되면 위 내용을 떠올립시다.


GICR_IPRIORITYR<n> 레지스터의 비트 맵

이어서 GICR_IPRIORITYR<n> 레지스터의 비트 맵을 보겠습니다. 
 

그림 16.14 GICR_IPRIORITYR<n> 레지스터의 비트 맵

비트 맵을 보면 Priority_offset_0B~Priority_offset_3B가 확인됩니다. 각각 비트 필드는 8비트 단위로 구성됐습니다. GICR_IPRIORITYR<n>에서 n의 범위가 0~7 이므로 32(32 = 8 x 4)개 인터럽트 아이디에 해당되는 인터럽트의 우선 순위를 설정할 수 있습니다.

GICR_IPRIORITYR0~GICR_IPRIORITYR3 레지스터: 0~15 인터럽트 아이디에 해당되는 인터럽트를 설정
GICR_IPRIORITYR4~GICR_IPRIORITYR7 레지스터: 16~31 인터럽트 아이디에 해당되는 인터럽트를 설정

이번에는 비트맵의 의미를 알아 보기 전에 비트 맵의 사이즈를 먼저 점검하겠습니다. 비트 맵의 사이즈는 2진수로 8비트이니 10진수로 128입니다. 이 정보로 0~128 범위로 인터럽트의 우선순위를 정할 수 있습니다.


덧글

댓글 입력 영역