요약·해설과 원문, 전문 번역을 서로 분리했습니다. API 이름, symbol, source path는 원문 표기를 사용합니다.
1. 요약·해설
원문의 핵심 논리와 kernel programming 관점의 보충 설명입니다. 아래의 전문 번역과는 별도로 작성했습니다.
2. 영어 원문 전체
번역 기준이 된 Linux v6.18.37 원문입니다. 줄 번호는 이 버전의 파일 좌표입니다.
원문 전체 펼치기
==========================================================
Interface between kernel and boot loaders on Exynos boards
==========================================================
Author: Krzysztof Kozlowski
Date : 6 June 2015
The document tries to describe currently used interface between Linux kernel
and boot loaders on Samsung Exynos based boards. This is not a definition
of interface but rather a description of existing state, a reference
for information purpose only.
In the document "boot loader" means any of following: U-boot, proprietary
SBOOT or any other firmware for ARMv7 and ARMv8 initializing the board before
executing kernel.
1. Non-Secure mode
Address: sysram_ns_base_addr
============= ============================================ ==================
Offset Value Purpose
============= ============================================ ==================
0x08 exynos_cpu_resume_ns, mcpm_entry_point System suspend
0x0c 0x00000bad (Magic cookie) System suspend
0x1c exynos4_secondary_startup Secondary CPU boot
0x1c + 4*cpu exynos4_secondary_startup (Exynos4412) Secondary CPU boot
0x20 0xfcba0d10 (Magic cookie) AFTR
0x24 exynos_cpu_resume_ns AFTR
0x28 + 4*cpu 0x8 (Magic cookie, Exynos3250) AFTR
0x28 0x0 or last value during resume (Exynos542x) System suspend
============= ============================================ ==================
2. Secure mode
Address: sysram_base_addr
============= ============================================ ==================
Offset Value Purpose
============= ============================================ ==================
0x00 exynos4_secondary_startup Secondary CPU boot
0x04 exynos4_secondary_startup (Exynos542x) Secondary CPU boot
4*cpu exynos4_secondary_startup (Exynos4412) Secondary CPU boot
0x20 exynos_cpu_resume (Exynos4210 r1.0) AFTR
0x24 0xfcba0d10 (Magic cookie, Exynos4210 r1.0) AFTR
============= ============================================ ==================
Address: pmu_base_addr
============= ============================================ ==================
Offset Value Purpose
============= ============================================ ==================
0x0800 exynos_cpu_resume AFTR, suspend
0x0800 mcpm_entry_point (Exynos542x with MCPM) AFTR, suspend
0x0804 0xfcba0d10 (Magic cookie) AFTR
0x0804 0x00000bad (Magic cookie) System suspend
0x0814 exynos4_secondary_startup (Exynos4210 r1.1) Secondary CPU boot
0x0818 0xfcba0d10 (Magic cookie, Exynos4210 r1.1) AFTR
0x081C exynos_cpu_resume (Exynos4210 r1.1) AFTR
============= ============================================ ==================
3. Other (regardless of secure/non-secure mode)
Address: pmu_base_addr
============= =============================== ===============================
Offset Value Purpose
============= =============================== ===============================
0x0908 Non-zero Secondary CPU boot up indicator
on Exynos3250 and Exynos542x
============= =============================== ===============================
4. Glossary
AFTR - ARM Off Top Running, a low power mode, Cortex cores and many other
modules are power gated, except the TOP modules
MCPM - Multi-Cluster Power Management
3. 한국어 전문 번역
영어 원문의 문단 순서와 의미를 유지한 전체 번역입니다. 코드, 함수명, symbol과 URL은 원문 표기를 유지합니다.
문서의 목적과 부트 로더 범위
1-18이 문서는 Samsung Exynos 기반 보드에서 현재 사용되는 Linux 커널과 부트 로더 사이의 인터페이스를 설명합니다. 새로운 인터페이스를 정의하는 규격이 아니라, 기존 상태를 정보 제공 목적으로 정리한 참조 문서입니다.
여기서 "boot loader"는 커널을 실행하기 전에 보드를 초기화하는 U-boot, 독점 SBOOT, 또는 ARMv7·ARMv8용 기타 펌웨어를 모두 뜻합니다.
작성자는 Krzysztof Kozlowski이며 원문 문서 날짜는 `6 June 2015`(2015년 6월 6일)입니다.
비보안 모드
19-36비보안 모드에서는 `sysram_ns_base_addr`를 기준 주소로 사용합니다. 각 오프셋에는 시스템 일시 중단 복귀 지점, 보조 CPU 시작 지점, AFTR 복귀 지점 또는 상태를 식별하는 매직 쿠키가 기록됩니다.
| 오프셋 | 값 | 목적 |
|---|---|---|
| `0x08` | `exynos_cpu_resume_ns`, `mcpm_entry_point` | 시스템 일시 중단 |
| `0x0c` | `0x00000bad` (Magic cookie) | 시스템 일시 중단 |
| `0x1c` | `exynos4_secondary_startup` | 보조 CPU 부팅 |
| `0x1c + 4*cpu` | `exynos4_secondary_startup` (Exynos4412) | 보조 CPU 부팅 |
| `0x20` | `0xfcba0d10` (Magic cookie) | AFTR |
| `0x24` | `exynos_cpu_resume_ns` | AFTR |
| `0x28 + 4*cpu` | `0x8` (Magic cookie, Exynos3250) | AFTR |
| `0x28` | `0x0` 또는 복귀 중의 마지막 값 (Exynos542x) | 시스템 일시 중단 |
보안 모드
37-64보안 모드의 `sysram_base_addr` 영역에는 SoC 세대별 보조 CPU 시작 주소와 Exynos4210 r1.0의 AFTR 복귀 정보가 들어갑니다.
| 오프셋 | 값 | 목적 |
|---|---|---|
| `0x00` | `exynos4_secondary_startup` | 보조 CPU 부팅 |
| `0x04` | `exynos4_secondary_startup` (Exynos542x) | 보조 CPU 부팅 |
| `4*cpu` | `exynos4_secondary_startup` (Exynos4412) | 보조 CPU 부팅 |
| `0x20` | `exynos_cpu_resume` (Exynos4210 r1.0) | AFTR |
| `0x24` | `0xfcba0d10` (Magic cookie, Exynos4210 r1.0) | AFTR |
`pmu_base_addr`에서는 동일한 오프셋이 복귀 함수 또는 매직 쿠키를 가리킬 수 있으며, 정확한 의미는 SoC와 MCPM 사용 여부에 따라 달라집니다.
| 오프셋 | 값 | 목적 |
|---|---|---|
| `0x0800` | `exynos_cpu_resume` | AFTR, suspend |
| `0x0800` | `mcpm_entry_point` (MCPM을 사용하는 Exynos542x) | AFTR, 일시 중단 |
| `0x0804` | `0xfcba0d10` (Magic cookie) | AFTR |
| `0x0804` | `0x00000bad` (Magic cookie) | 시스템 일시 중단 |
| `0x0814` | `exynos4_secondary_startup` (Exynos4210 r1.1) | 보조 CPU 부팅 |
| `0x0818` | `0xfcba0d10` (Magic cookie, Exynos4210 r1.1) | AFTR |
| `0x081C` | `exynos_cpu_resume` (Exynos4210 r1.1) | AFTR |
보안 모드와 무관한 항목
65-76보안·비보안 모드와 관계없이 `pmu_base_addr + 0x0908`의 값이 0이 아니면 Exynos3250과 Exynos542x에서 보조 CPU가 부팅 중임을 나타냅니다.
| 오프셋 | 값 | 목적 |
|---|---|---|
| `0x0908` | Non-zero | Exynos3250 및 Exynos542x의 보조 CPU boot up indicator |
용어
77-81- AFTR - ARM Off Top Running. TOP 모듈을 제외한 Cortex 코어와 다수 모듈의 전원을 차단하는 저전력 모드입니다.
- MCPM - Multi-Cluster Power Management.
요약과 해설
bootloader-interface.rst:1-81Exynos 펌웨어와 커널은 SYSRAM 또는 PMU의 약속된 위치에 보조 CPU 시작 주소, 일시 중단 복귀 주소, AFTR 상태를 나타내는 값을 기록합니다. 보안 모드와 SoC 리비전에 따라 기준 주소와 오프셋이 달라지므로 표의 조합을 그대로 확인해야 합니다.
실행 모드와 SoC 리비전이 기준 주소를 결정하고, 해당 오프셋의 함수 주소 또는 매직 쿠키가 다음 동작을 지시합니다.