Documentation/arch/riscv/boot.rst

Source file repositories/reference/linux-study-clean/Documentation/arch/riscv/boot.rst

File Facts

System
Linux kernel
Corpus path
Documentation/arch/riscv/boot.rst
Extension
.rst
Size
6786 bytes
Lines
170
Domain
Support Tooling And Documentation
Bucket
Documentation
Inferred role
Support Tooling And Documentation: documentation
Status
atlas-only

Why This File Exists

Repository support layer: documentation, build tooling, samples, user-space helper tools, generated initramfs support, licenses, and validation utilities.

Dependency Surface

Detected Declarations

Annotated Snippet

.. SPDX-License-Identifier: GPL-2.0

===============================================
RISC-V Kernel Boot Requirements and Constraints
===============================================

:Author: Alexandre Ghiti <alexghiti@rivosinc.com>
:Date: 23 May 2023

This document describes what the RISC-V kernel expects from bootloaders and
firmware, and also the constraints that any developer must have in mind when
touching the early boot process. For the purposes of this document, the
``early boot process`` refers to any code that runs before the final virtual
mapping is set up.

Pre-kernel Requirements and Constraints
=======================================

The RISC-V kernel expects the following of bootloaders and platform firmware:

Register state
--------------

The RISC-V kernel expects:

  * ``$a0`` to contain the hartid of the current core.
  * ``$a1`` to contain the address of the devicetree in memory.

CSR state
---------

The RISC-V kernel expects:

  * ``$satp = 0``: the MMU, if present, must be disabled.

Reserved memory for resident firmware
-------------------------------------

The RISC-V kernel must not map any resident memory, or memory protected with
PMPs, in the direct mapping, so the firmware must correctly mark those regions
as per the devicetree specification and/or the UEFI specification.

Kernel location
---------------

The RISC-V kernel expects to be placed at a PMD boundary (2MB aligned for rv64
and 4MB aligned for rv32). Note that the EFI stub will physically relocate the
kernel if that's not the case.

Hardware description
--------------------

The firmware can pass either a devicetree or ACPI tables to the RISC-V kernel.

The devicetree is either passed directly to the kernel from the previous stage
using the ``$a1`` register, or when booting with UEFI, it can be passed using the
EFI configuration table.

The ACPI tables are passed to the kernel using the EFI configuration table. In
this case, a tiny devicetree is still created by the EFI stub. Please refer to
"EFI stub and devicetree" section below for details about this devicetree.

Kernel entry
------------

On SMP systems, there are 2 methods to enter the kernel:

- ``RISCV_BOOT_SPINWAIT``: the firmware releases all harts in the kernel, one hart
  wins a lottery and executes the early boot code while the other harts are
  parked waiting for the initialization to finish. This method is mostly used to

Annotation

Implementation Notes