ARM64 시스템 주요 레지스터

<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
  • 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 필요)

 

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다