FPGA 소프트 로직에서 HPS 메모리 수에 이르는 캐시 일관된 액세스를 허용하려면 다음 항목이 있어야 합니다.
- MMU 페이지 테이블
- NOC 보안 설정
- CoreLink™ 레벨 2 캐시 컨트롤러 L2C-310 구성
- AXI 사이드밴드 신호: Axi_cache_security 브리지
- AxCache 및 AxUser
- AXPROT
MMU 페이지 테이블
MMU 페이지 테이블은 캐시 가능한 대상 메모리 영역을 정의할 수 있도록 설정되어야 하며, 보안 또는 비보안성입니다. MMU 페이지 테이블 할당 속성 및 보안 모드(신뢰 영역)에 대한 자세한 내용은 Linux 및 ARM 문서를 참조하십시오.
- 메모리는 쓰기 다시 쓰기 할당(WBWA)으로 표시되어야 합니다.
- Linux 사용자 공간 응용 프로그램 또는 커널에서 메모리에 액세스하려면 보안 모드가 안전하지 않아야 합니다.
- 보안은 ARM 보안 상태에서 실행되는 프로세스에 의해 메모리에 액세스하는 데 사용되어야 합니다(감독자 모드와 혼동하지 않음).
CP15: SDR:NS = 1인 경우 보안 모드가 활성화됩니다. 참고: NS 레지스터는 감독자 모드에서만 사용할 수 있습니다.
NOC 보안 설정
Arria® 10 SoC 네트워크 온 칩 iinterconnect(NOC)는 각 브리지와 상호 연결 전체에 방화벽으로 구성됩니다. HPS 브리지를 통한 액세스를 허용하려면
- 브리지를 통한 트랜잭션을 허용하도록 방화벽을 구성해야 합니다.
- 보안 액세스를 허용/허용하지 않도록 마스터 컨트롤을 설정해야 합니다.
- 마스터가 보안 액세스를 비활성화하도록 설정된 경우 모든 트랜잭션이 비보안 상태로 변경되어 일관성이 깨질 수 있습니다.
SoC EDS 소프트웨어 버전 16.0에서 생성된 U-부팅은 NOC 방화벽을 비활성화하지만 마스터를 설정하여 보안 액세스를 비활성화합니다.
FPGA2HPA 브리지를 통해 보안 액세스를 허용하려면:
레지스터 fpga2soc_ctrl 설정: allow_secure 1(기본값 = 0, 보안 허용되지 않음)
레벨 2 캐시 컨트롤러 구성
CoreLink™ 레벨 2 캐시 컨트롤러 L2C-310 구성
Aux Control 레지스터 비트 [22]: 공유 속성 재정의 활성화 비트 가 ON으로 설정되어 있는 것이 좋습니다. 이 설정은 MPU 코어 또는 ACP 포트에서 캐시할 수 없는 일부 액세스 권한을 캐시할 수 없는 비 할당 액세스로 변환하고 SDRAM에서 L2 캐시로 일관성의 지점을 이동하는 L2 캐시 컨트롤러의 최적화를 비활성화합니다. 마스터가 L3 또는 FPGA2SDRAM 브리지를 통해 SDRAM에 액세스할 경우 일관성이 변경되면 문제가 발생할 수 있습니다.
참조: CoreLink™ 레벨 2 캐시 컨트롤러 L2C-310, 개정: r3p3 기술 참조 설명서 (ARM DDI 0246H(ID080112)): 섹션 2.3.2 공유 가능한 속성.
위의 내용은 https://github.com/altera-opensource/u-boot-socfpga 사용 가능한 최신 u-boot-socfpga 버전에서 기본적으로 설정됩니다.
Qsys에서 AXI 사이드밴드 신호 구동: Axi_cache_security 브리지
Axi_cache_security 브리지는 AxCache/AxUser/AxProt 사이드밴드 신호를 올바른 값으로 구동하는 데 사용되어야 합니다. Axi_cache_security 브리지는 Arria 10 브리지 예시 https://www.altera.com/support/support-resources/design-examples.html에서 찾을 수 있습니다.
AxCache[3:0] 사이드밴드 신호
올바른 AxCache [3:0] 설정은 MMU 페이지 테이블 설정에 따라 달라집니다.
ARM® 아키텍처 참조 매뉴얼 ARMv7-A 및 ARMv7-R 에디션 (ARM DDI 0406C.c(ID051414)을 참조하십시오. A3.5 메모리 유형 및 속성 및 메모리 주문 모델 AxCache[1]는 일관된 액세스에 대해 1이어야 합니다.
참조: Cortex-A9™ MPCore® 개정: r3p0 기술 참조 설명서 (ARM DDI 0407G(ID072711)): 2.4 가속기 일관성 포트
AW®캐시[3:0]
[3] - 할당 가능한 쓰기
[2] - 할당 가능한 읽기
[1] - 캐시 가능
[0] - 버퍼러블
AW®CACHE에 대한 권장 초기 값[3:0]
awcache = 0xF; 4'b1111 쓰기 할당, 읽기 할당, 버퍼러블, 캐시 가능
arcache = 0xF; 4'b1111 쓰기 할당, 읽기 할당, 버퍼러블, 캐시 가능
참고: 이러한 설정은 사용 사례에 따라 변경되어야 합니다.
AxUser[4-0] 사이드밴드 신호
AxUser 신호는 추가 정보를 전달하는 데 사용되며 ACP 트랜잭션의 경우 내부 및 외부 캐시 가능한 정보를 전달하는 데 사용됩니다.
AW®사용자[3:0]
[0] - 일관된 액세스의 경우 공유 속성을 1로 설정해야 합니다.
[3:1] - SCU에서 ACP에 내부 캐시 정책이 없는 것으로 해석되지 않으며, 캐시가 독점 모드로 설정되어 있는 경우 사용하기 위해 L2 캐시 컨트롤러로 전달됩니다.
참조: Cortex-A9™ MPCore® 개정: r3p0 기술 참조 설명서 (ARM DDI 0407G(ID072711)): 2.4 가속기 일관성 포트,
AxUSER에 대한 권장 초기 값[4:0]
awuser = 0x1; 5'b000001
aruser = 0x1; 5'b000001
참고: Arria 10에서 AXI 공유 속성은 내부적으로 "1"에 연결됩니다.
AxProt[2:0] 사이드밴드 신호
AxProt는 트랜잭션의 보안 상태를 지정하며, 캐시 히트를 보장하기 위해 대상 메모리의 보안 상태와 일치해야 합니다.
AW®PROT[2:0]
[2] - 명령 가져오기
[1] - 비보안 액세스
[0] - 권한 있는 액세스
AxProt에 대한 제안 초기 값[2:0]
MMU 페이지 테이블 메모리 보안 설정 및 CPU 보안 설정 및 ACP 트랜잭션 보안 상태가 모두 일치해야 캐시가 타격을 받을 수 있습니다.
보안 상태의 CPU가 액세스하는 보안 메모리 위치에 대한 비보안 ACP 트랜잭션으로 인해 캐시가 누락되고 일관되지 않은 액세스가 발생합니다.
지원되는 시나리오 요약:
비보안
- MMU 페이지 테이블은 대상 메모리 영역을 안전하지 않은 것으로 정의하도록 설정되었습니다.
- 대상 영역에 대한 비보안 액세스를 허용하도록 NOC 방화벽이 설정됩니다.
- F2H 브리지는 대상 영역에 대한 보안 또는 비보안 액세스를 수행합니다.
보안
- MMU 페이지 테이블은 대상 메모리 영역을 안전한 것으로 정의하도록 설정되었습니다.
- NOC 방화벽은 대상 영역에 대한 안전한 액세스를 허용하도록 설정됩니다.
- F2H 브리지는 대상 영역에 대한 안전한 액세스를 수행합니다.