[PATCH v8 4/4] efi_vars: Implement SPI Flash store
Michal Simek
michal.simek at amd.com
Mon Feb 16 14:18:14 CET 2026
On 2/16/26 13:08, Ilias Apalodimas wrote:
> On Mon, 16 Feb 2026 at 13:39, Heinrich Schuchardt <xypron.glpk at gmx.de> wrote:
>>
>> Am 16. Februar 2026 08:24:19 MEZ schrieb Michal Simek <michal.simek at amd.com>:
>>>
>>>
>>> On 2/15/26 09:48, Heinrich Schuchardt wrote:
>>>> On 2/11/26 16:56, Michal Simek wrote:
>>>>> From: Shantur Rathore <i at shantur.com>
>>>>>
>>>>> Currently U-Boot uses ESP as storage for EFI variables.
>>>>> Devices with SPI Flash are used for storing environment with this
>>>>> commit we allow EFI variables to be stored on SPI Flash.
>>>>>
>>>>> https://github.com/rhboot/efivar
>>>>> is not updated to support this location that's why you can mimic it by
>>>>> running:
>>>>> dd if=/sys/firmware/efi/efivars/VarToFile-b2ac5fc9-92b7-4acd-aeac-11e818c3130c \
>>>>> of=/tmp/vars skip=4 bs=1
>>>>> flashcp /tmp/vars /dev/mtdX
>>>>>
>>>>> where mtdX should match location defined by
>>>>> CONFIG_EFI_VARIABLE_SF_OFFSET/CONFIG_EFI_VAR_BUF_SIZE.
>>>>>
>>>>> Signed-off-by: Shantur Rathore <i at shantur.com>
>>>>> Signed-off-by: Michal Simek <michal.simek at amd.com>
>>>>> Tested-by: Neil Armstrong <neil.armstrong at linaro.org> # on AML-S905D3-CC
>>>>> Acked-by: Ilias Apalodimas <ilias.apalodimas at linaro.org>
>>>>>
>>>>> ---
>>>>>
>>>>> Changes in v8:
>>>>> - Add missing EFI_VARIABLE_SF_STORE dependency to EFI_VARIABLE_SF_DEVICE_INDEX
>>>>>
>>>>> Changes in v7:
>>>>> - sed -i 's/efi_var_from/efi_var_from_storage/g'
>>>>>
>>>>> Changes in v6:
>>>>> - sed -i 's/efi_var_read/efi_var_from/g'
>>>>> - sed -i 's/efi_var_write/efi_var_to_storage/g'
>>>>>
>>>>> Changes in v4:
>>>>> - Extend Kconfig description
>>>>> - Extend commit message and describe efivar missing part
>>>>> - use unify methods for reading/writing variable
>>>>>
>>>>> Changes in v3:
>>>>> - Fixed compiler warnings.
>>>>>
>>>>> Changes in v2:
>>>>> - Refactored efi_var_file to move common parts out as requested
>>>>> - Changed ifdefs to use CONFIG_IS_DEFINED
>>>>> - Fixed typos
>>>>>
>>>>> lib/efi_loader/Kconfig | 35 +++++++++++++-
>>>>> lib/efi_loader/Makefile | 1 +
>>>>> lib/efi_loader/efi_var_sf.c | 92 +++++++++++++++++++++++++++++++++++++
>>>>> 3 files changed, 127 insertions(+), 1 deletion(-)
>>>>> create mode 100644 lib/efi_loader/efi_var_sf.c
>>>>>
>>>>> diff --git a/lib/efi_loader/Kconfig b/lib/efi_loader/Kconfig
>>>>> index 579eed658801..0f6f927ddaf1 100644
>>>>> --- a/lib/efi_loader/Kconfig
>>>>> +++ b/lib/efi_loader/Kconfig
>>>>> @@ -124,6 +124,24 @@ config EFI_VARIABLE_FILE_STORE
>>>>> Select this option if you want non-volatile UEFI variables to be
>>>>> stored as file /ubootefi.var on the EFI system partition.
>>>>> +config EFI_VARIABLE_SF_STORE
>>>>> + bool "Store non-volatile UEFI variables in SPI Flash"
>>>>> + depends on SPI_FLASH
>>>>> + help
>>>>> + Select this option if you want non-volatile UEFI variables to be
>>>>> + stored in SPI Flash.
>>>>> +
>>>>> + Define CONFIG_EFI_VARIABLE_SF_OFFSET as offset in SPI Flash to use as
>>>>> + the storage for variables. CONFIG_EFI_VAR_BUF_SIZE defines the space
>>>>> + needed.
>>>>> +
>>>>> + Note that SPI Flash devices have a limited number of program/erase
>>>>> + cycles. Frequent updates to UEFI variables may cause excessive wear
>>>>> + and can permanently damage the flash device, particularly on SPI NAND
>>>>> + or low-end SPI NOR parts without wear leveling. This option should be
>>>>> + used with care on such systems, and is not recommended for platforms
>>>>> + where UEFI variables are updated frequently.
>>>>> +
>>>>> config EFI_MM_COMM_TEE
>>>>> bool "UEFI variables storage service via the trusted world"
>>>>> depends on OPTEE
>>>>> @@ -153,7 +171,7 @@ endchoice
>>>>> config EFI_RT_VOLATILE_STORE
>>>>> bool "Allow variable runtime services in volatile storage (e.g RAM)"
>>>>> - depends on EFI_VARIABLE_FILE_STORE
>>>>> + depends on EFI_VARIABLE_FILE_STORE || EFI_VARIABLE_SF_STORE
>>>>
>>>> Hello Michal,
>>>>
>>>> If the backend store is SPI flash, we should not publish the variable "RTStorageVolatile" at runtime as currently defined.
>>>>
>>>> For the background see this commit for the efivar library:
>>>>
>>>> https://github.com/rhboot/efivar/commit/68daa04654acbe1bbaa17ebfc23c371b39e69c6b
>>>>
>>>> The first three patches look correct to me and I will add them to a merge request for efi-next.
>>>
>>> Do I read it that when I don't allow to select EFI_RT_VOLATILE_STORE you will be fine with the patch itself?
>>
>> This was my only concern.
>
> Thinking about it again, this is the right thing to do right now.
> efivar will try to create a file in the ESP if the speacial variables
> in linux are found. So we are better off disabling this option for SPI
> variables atm
I have sent v9 with removing EFI_RT_VOLATILE_STORE and we can deal with efivar
separately.
M
More information about the U-Boot
mailing list