cancel
Showing results for 
Search instead for 
Did you mean: 

Custom u-boot environment

dhk112
Associate II

Hello everyone,

I am trying to migrate a project for the STM32MP151C from dunfell to kirkstone.

The versions of the main components I am using are the following:

Component

Version

tf-a-stm32mp

v2.6-stm32mp-r2.2

optee-os-stm32mp

v3.16.0-stm32mp-r2.2

u-boot-stm32mp

v2021.10-stm32mp-r2.2

linux-stm32mp

v5.15.145-stm32mp-r2.2

 

The project intends to have a custom u-boot environment. For this a patch is applied to modify CONFIG_EXTRA_ENV_SETTINGS in stm32mp15_common.h, like this:

#define FOO_USBFLASH_BOOTFS "foo_usbflash_bootfs=" \ "load usb 0:1 ${loadaddr} foo-image-bootfs-foo-core-stm32mp151c-foo.ext4;" \ "mmc write ${loadaddr} 2400 20000;" \ "mmc write ${loadaddr} 22400 20000;\0" #define CONFIG_EXTRA_ENV_SETTINGS \ STM32MP_MEM_LAYOUT \ STM32MP_BOOTCMD \ STM32MP_PARTS_DEFAULT \ BOOTENV \ FOO_USBFLASH_BOOTFS \ STM32MP_EXTRA \ STM32MP_BOARD_EXTRA_ENV

This approach worked perfectly fine in the old version of the project, but now when the system boots into u-boot I see that the custom u-boot environment is not present anymore.

I use the following flashlayout:

#Opt Id Name Type IP Offset Binary - 0x01 fsbl-boot Binary none 0x0 arm-trusted-firmware/tf-a-stm32mp151c-foo-uart.stm32 - 0x03 fip-boot FIP none 0x0 fip/fip-stm32mp151c-foo-optee.bin P 0x04 fsbl Binary mmc0 boot1 arm-trusted-firmware/tf-a-stm32mp151c-foo-emmc.stm32 P 0x05 fsbl2 Binary mmc0 boot2 arm-trusted-firmware/tf-a-stm32mp151c-foo-emmc.stm32 P 0x06 metadata1 Binary mmc0 0x00080000 arm-trusted-firmware/metadata.bin P 0x07 metadata2 Binary mmc0 0x00100000 arm-trusted-firmware/metadata.bin P 0x08 fip-a FIP mmc0 0x00180000 fip/fip-stm32mp151c-foo-optee.bin P 0x09 fip-b FIP mmc0 0x00580000 fip/fip-stm32mp151c-foo-optee.bin PED 0x0A u-boot-env Binary mmc0 0x00980000 none P 0x10 boot1 System mmc0 0x00A00000 pseudo.ext4 P 0x11 boot2 System mmc0 0x04A00000 pseudo.ext4 P 0x12 super1 FileSystem mmc0 0x08A00000 pseudo.ext4 P 0x13 super2 FileSystem mmc0 0x66600000 pseudo.ext4 P 0x14 data FileSystem mmc0 0xC4200000 pseudo.ext4

What additional settings are needed for my custom u-boot environment to work?

 

1 ACCEPTED SOLUTION

Accepted Solutions
dhk112
Associate II

I managed to figure this out myself.

So the goal was to have a compiled-in (default) u-boot environment.

It was a combination of two things:

1. Modification of CONFIG_EXTRA_ENV_SETTINGS

Apparently in the kirkstone version there are two header files where CONFIG_EXTRA_ENV_SETTINGS is defined:

  • stm32mp15_common.h
  • stm32mp15_st_common.h

Whereby in stm32mp15_st_common.h the following can be found:

 

#ifdef CONFIG_EXTRA_ENV_SETTINGS //... #undef CONFIG_EXTRA_ENV_SETTINGS #define CONFIG_EXTRA_ENV_SETTINGS

 

I don't get what the purpose is to undefine CONFIG_EXTRA_ENV_SETTINGS here, but the result is that the extra environment variables have to be put into 

  • stm32mp15_st_common.h

to take effect.

2. Configuration flags CONFIG_ENV_IN_*

There are multiple configuration flags in stm32mp15_defconfig which relate to where u-boot shall search for the environment. By default all of them are enabled:

  • CONFIG_ENV_IS_NOWHERE=y
  • CONFIG_ENV_IS_IN_MMC=y
  • CONFIG_ENV_IS_IN_SPI_FLASH=y
  • CONFIG_ENV_IS_IN_UBI=y

 To only have the compiled-in (default) environment I applied a patch like this:

 

CONFIG_ENV_IS_NOWHERE=y -CONFIG_ENV_IS_IN_MMC=y -CONFIG_ENV_IS_IN_SPI_FLASH=y -CONFIG_ENV_IS_IN_UBI=y +CONFIG_ENV_IS_IN_MMC=n +CONFIG_ENV_IS_IN_SPI_FLASH=n +CONFIG_ENV_IS_IN_UBI=n

 

Note: This should also be changed in stm32mp15_trusted_defconfig

View solution in original post

1 REPLY 1
dhk112
Associate II

I managed to figure this out myself.

So the goal was to have a compiled-in (default) u-boot environment.

It was a combination of two things:

1. Modification of CONFIG_EXTRA_ENV_SETTINGS

Apparently in the kirkstone version there are two header files where CONFIG_EXTRA_ENV_SETTINGS is defined:

  • stm32mp15_common.h
  • stm32mp15_st_common.h

Whereby in stm32mp15_st_common.h the following can be found:

 

#ifdef CONFIG_EXTRA_ENV_SETTINGS //... #undef CONFIG_EXTRA_ENV_SETTINGS #define CONFIG_EXTRA_ENV_SETTINGS

 

I don't get what the purpose is to undefine CONFIG_EXTRA_ENV_SETTINGS here, but the result is that the extra environment variables have to be put into 

  • stm32mp15_st_common.h

to take effect.

2. Configuration flags CONFIG_ENV_IN_*

There are multiple configuration flags in stm32mp15_defconfig which relate to where u-boot shall search for the environment. By default all of them are enabled:

  • CONFIG_ENV_IS_NOWHERE=y
  • CONFIG_ENV_IS_IN_MMC=y
  • CONFIG_ENV_IS_IN_SPI_FLASH=y
  • CONFIG_ENV_IS_IN_UBI=y

 To only have the compiled-in (default) environment I applied a patch like this:

 

CONFIG_ENV_IS_NOWHERE=y -CONFIG_ENV_IS_IN_MMC=y -CONFIG_ENV_IS_IN_SPI_FLASH=y -CONFIG_ENV_IS_IN_UBI=y +CONFIG_ENV_IS_IN_MMC=n +CONFIG_ENV_IS_IN_SPI_FLASH=n +CONFIG_ENV_IS_IN_UBI=n

 

Note: This should also be changed in stm32mp15_trusted_defconfig