Re: [PATCH 3/3] Add details of UEFI interaction with /memory and /reserved-memory

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]



On Tue, 15 Sep 2020 at 20:06, Grant Likely <grant.likely@xxxxxxx> wrote:
>
> Output from discussion on EBBR issue:
> https://github.com/ARM-software/ebbr/issues/52
>
> When using the UEFI ABI for booting, the DT memory map is ignored and
> instead UEFI GetMemoryMap() is used to find system memory. Also, regions
> described in /reserved-memory need to also be added to the UEFI memory
> map to protect against overlapping allocations. The patch adds language
> to cover both of those cases.
>
> Signed-off-by: Grant Likely <grant.likely@xxxxxxx>
> Cc: Heinrich Schuchardt <xypron.glpk@xxxxxx>
> Cc: Ard Biesheuvel <ardb@xxxxxxxxxx>
> ---
>  source/chapter3-devicenodes.rst      | 26 +++++++++++++++++++++++---
>  source/chapter5-flattened-format.rst | 10 ++++++++++
>  source/references.rst                |  4 ++++
>  3 files changed, 37 insertions(+), 3 deletions(-)
>
> diff --git a/source/chapter3-devicenodes.rst b/source/chapter3-devicenodes.rst
> index 3043b8a..a78a742 100644
> --- a/source/chapter3-devicenodes.rst
> +++ b/source/chapter3-devicenodes.rst
> @@ -160,6 +160,12 @@ If the VLE storage attribute is supported, with VLE=0.
>  .. note:: All other standard properties (section
>     :ref:`sect-standard-properties`) are allowed but are optional.
>
> +``/memory`` node and UEFI
> +~~~~~~~~~~~~~~~~~~~~~~~~~~
> +
> +When booting via [UEFI]_, the system memory map is obtained via the
> +GetMemoryMap() UEFI boot time service as defined in [UEFI]_ § 7.2,
> +and if present, the OS must ignore any ``/memory`` nodes.
>
>  ``/memory`` Examples
>  ~~~~~~~~~~~~~~~~~~~~
> @@ -308,12 +314,12 @@ is ignored.
>     Usage legend: R=Required, O=Optional, OR=Optional but Recommended, SD=See Definition
>     =======================================================================================================
>
> -.. note:: All other standard properties (section
> -   :ref:`sect-standard-properties`) are allowed but are optional.
> -
>  The ``no-map`` and ``reusable`` properties are mutually exclusive and both must
>  not be used together in the same node.
>
> +Dynamic reserved memory regions must not be listed in the [UEFI]_ memory map
> +because they are allocated by the OS after exiting firmware boot services.
> +
>  Linux implementation notes:
>
>  - If a ``linux,cma-default`` property is present, then Linux will use the
> @@ -341,6 +347,20 @@ nodes by adding a ``memory-region`` property to the device node.
>     Usage legend: R=Required, O=Optional, OR=Optional but Recommended, SD=See Definition
>     =======================================================================================================
>
> +.. _sect-reserved-memory-uefi:
> +
> +``/reserved-memory`` and UEFI
> +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> +When booting via [UEFI]_, static ``/reserved-memory`` regions must
> +also be listed in the system memory map obtained via the GetMemoryMap()
> +UEFI boot time service as defined in [UEFI]_ § 7.2.
> +The reserved memory regions need to be included in the UEFI memory map to
> +protect against allocations by UEFI applications.
> +
> +Reserved regions with the ``no-map`` property must be listed in the memory
> +map with type ``EfiReservedMemoryType``.
> +All other reserved regions must be listed with type ``EfiBootServicesData``.
> +
>  ``/reserved-memory`` Example
>  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>
> diff --git a/source/chapter5-flattened-format.rst b/source/chapter5-flattened-format.rst
> index 28e5bd4..b1e2b8b 100644
> --- a/source/chapter5-flattened-format.rst
> +++ b/source/chapter5-flattened-format.rst
> @@ -234,6 +234,16 @@ reservation block as a whole, shall be located at an 8-byte aligned
>  offset from the beginning of the devicetree blob (see section
>  :ref:`sect-fdt-alignment`).
>
> +Memory Reservation Block and UEFI
> +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> +
> +As with the ``/reserved-memory`` node (section :ref:`sect-reserved-memory-uefi`),
> +when booting via [UEFI]_ entries in the Memory Reservation Block must also be
> +listed in the system memory map obtained via the GetMemoryMap() to protect against
> +allocations by UEFI applications.
> +The memory reservation block entries should be listed with type
> +``EfiBootServicesData``.
> +

Didn't we just agree this should be EfiReservedMemoryType ?

>  .. _sect-fdt-structure-block:
>
>  Structure Block
> diff --git a/source/references.rst b/source/references.rst
> index 961fa20..8400e96 100644
> --- a/source/references.rst
> +++ b/source/references.rst
> @@ -23,3 +23,7 @@
>  .. [EPAPR] *Power.org Standard for Embedded Power Architecture
>     Platform Requirements*, power.org, 2011,
>     https://www.power.org/documentation/power-org-standard-for-embedded-power-architecture-platform-requirements-epapr-v1-1-2/
> +
> +.. [UEFI] `Unified Extensable Firmware Interface Specification v2.8 Errata A
> +   <https://uefi.org/sites/default/files/resources/UEFI_Spec_2_8_A_Feb14.pdf>`_,
> +   February 2020, `UEFI Forum <http://www.uefi.org>`_
> --
> 2.20.1
>




[Index of Archives]     [Device Tree]     [Linux Driver Backports]     [Video for Linux]     [Linux USB Devel]     [Linux Audio Users]     [Photos]     [Yosemite Photos]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Yosemite Backpacking]

  Powered by Linux