<kernel v5.0>
ARM64 시스템 주요 레지스터
캐시
CTR_EL0(Cache Type Register – EL0)
캐시 타입을 알아오는 레지스터이다.
- DIC
- Instruction cache invalidation requirements for instruction to data coherence
- 0=PoU를 위해 명령 캐시의 invalidation이 필요하다.
- 1=PoU를 위해 명령 캐시의 invalidation이 필요하지 않다.
- IDC
- Data cache clean requirements for instruction to data coherence
- 0=PoU를 위해 데이터 캐시의 clean이 필요하다. 단 다음 조건 제외
- CLIDR_EL1.LoC == 0 or (CLIDR_EL1.LoUIS == 0 && CLIDR_EL1.LoUU == 0)
- 1=PoU를 위해 데이터 캐시의 clean이 필요하지 않다.
- CWG(Cache Writeback Granule)
- 0~1=CWG 정보를 제공하지 않는다.
- 2~9=Cache Writeback Granule로 2^n 워드를 초과하지 않는다.
- 10 이상=reserved
- ERG(Exclusives Reservation Granule)
- 0=ERG 정보를 제공하지 않는다.
- 1~9=Exclusives Reservation Granule로 2^n 워드를 초과하지 않는다.
- 10 이상=reserved
- DminLine
- 데이터 캐시 라인 사이즈로 2^n 워드
- L1Ip
- 레벨 1 명령 캐시 정책
- 0=VPIPT (ARMv8.2 이상에서 가능)
- 1=AIVIVT
- 2=VIPT
- 3=PIPT
- 레벨 1 명령 캐시 정책
- IminLine
- 데이터 캐시 라인 사이즈로 2^n 워드
예) Cortex-A72, CTR_EL0=0x8444_c004
- DIC=0
- IDC=0
- CWG=4(16 words)
- ERG=4(16 words)
- DminLine=4(16 words)
- L1Ip=3(PIPT)
- IminLine=4(16 words)
CLIDR_EL1(Cache Level ID Register – EL1)
구성된 레벨별 캐시 타입(명령 only, 데이터 only, 명령+데이터 분리, 명령+데이터 통합)을 구분하고 최상위 통합 캐시 레벨과 최상위 캐시 일관성 레벨을 알려주는 레지스터이다.
- ICB(Inner Cache Boundary)
- Inner 캐시 영역
- 예) ICB=2
- L2 캐시까지 Inner 캐시 영역이다.
- LoUU(Level of Unification Uniprocessor)
- Uni 프로세서 시스템에서 최상위 통합 캐시 레벨
- Uni 프로세서 시스템에서 PoU 개념과 동일하다.
- LoC(Level of Coherece)
- 최상위 캐시 일관성 레벨
- PoC 개념과 동일하다.
- LoUIS(Level of Inner Shareable)
- Inner 공유 영역내의 코어에서 최상위 통합 캐시 레벨
- SMP 시스템에서 PoU 개념과 동일하다.
- CType1 ~ CTytpe7
- 캐시 레벨 별 캐시 타입
- 0=no cache
- 1=명령 캐시만 존재
- 2=데이터 캐시만 존재
- 3=명령 캐시와 데이터 캐시 분리
- 4=명령 캐시와 데이터 통합 캐시
- 캐시 레벨 별 캐시 타입
예) Cortex-A72, CIDR_EL1=0xa20_0023
- ICB=0
- LoUU=2(L2 레벨)
- LoC=2(L2 레벨)
- LoUIS=2(L2 레벨)
- CT7 ~ CT3=0(L7 ~ L3 캐시 없음)
- CT2=4(L2 캐시가 통합 캐시)
- CT1=3(L1 캐시가 분리 캐시)
CPU Feature 식별
ID_AA64PFR0_EL1(AArch64 Processor Feature Register 0 – EL1)
AArch64 상태에 구현된 프로세서 feature를 알아오는 레지스터 0번이다.
- DIT(Data Independent Timing)
- 0=어떠한 명령도 constant 실행 시간을 보장하지 않는다.
- 1=명령의 constant 실행 시간을 보장한다.
- AMU(Activity Monitors Extension)
- 0=Activity Monitor 미구현
- 1=Activity Monitors Extension 버전 1 구현
- MPAM
- 0=MPAM Extension 미구현
- 1=MPAM Extension 구현
- SEL(Secure EL2)
- 0=Secure EL2 미구현
- 1=Secure EL2 미구현
- SVE(Scalable Vector Extension)
- 0=SVE 미구현
- 1=SVE 구현
- RAS
- 0=RAS Extension 미구현
- 1=RAS Extension 구현
- 2=ARMv8.4-RAS 구현
- GIC
- 0=GIC를 위한 System 레지스터 인터페이스 미구현
- 1=GIC를 위한 System 레지스터 인터페이스 구현
- ASIMD(Advanced SIMD)
- 0=Advanced SIMD 구현
- 1=Advanced SIMD 구현 + half-precision 실수 연산 추가
- 0xf=Advanced SIMD 미구현
- FP(Floating Point)
- 0=FP 구현
- 1=FP 구현 + half-precision 실수 연산 추가
- 0xf=FP 미구현
- EL3(Exception Level 3)
- 0=EL3 미구현
- 1=AArch64 에서만 EL3 구현
- 2=AArch32 및 AArch64 양쪽에서 EL3 구현
- EL2(Exception Level 2)
- 0=EL2 미구현
- 1=AArch64 에서만 EL2 구현
- 2=AArch32 및 AArch64 양쪽에서 EL2 구현
- EL2(Exception Level 2)
- 1=AArch64 에서만 EL1 구현
- 2=AArch32 및 AArch64 양쪽에서 EL1 구현
- EL0(Exception Level 0)
- 1=AArch64 에서만 EL0 구현
- 2=AArch32 및 AArch64 양쪽에서 EL0 구현
메모리 모델 기능
MMFR0_EL1 (Memory Model Feature Register 0 Register – EL1)
AArch64 상태에서 지원되는 메모리 모델을 알아오는 레지스터이다.
- TGran4
- 4K 페이지 변환 지원 여부
- 0b0000=지원, 0b1111=미지원
- TGran64
- 64K 페이지 변환 지원 여부
- 0b0000=지원, 0b1111=미지원
- TGran16
- 16K 페이지 변환 지원 여부
- 0b0000=미지원, 0b0001=지원
- BigEndEL0
- EL0에서 Mixed 엔디안 지원
- 0b0000=미지원
- 0b0001=지원 (SCTLR_EL1.E0E 비트로 엔디안 설정)
- SNSMem
- 시큐어와 non-시큐어 메모리 분리 지원 여부
- 0b0000=미지원
- 0b0001=지원
- BigEnd
- Mixed 엔디안 지원
- 0b0000=미지원
- 0b0001=지원 (SCTLR_ELx.E0E 비트로 엔디안 설정)
- ASIDBits
- ASID 지원 비트 수
- 0b0000=8bits
- 0b0010=16bits
- PARange
- 물리 주소 지원 범위
- 0b0000=32 bits, 4GB
- 0b0001=36 bits, 64GB
- 0b0010=40 bits, 1TB
- 0b0011=42 bits, 4TB
- 0b0100=44 bits, 16TB
- 0b0101=48 bits, 256TB
- 0b0110=52 bits, 4PB (ARMv8.2-LPA 필요)