[PATCH] ARM: stm32: Add script to install U-Boot from SD/eMMC to SPI NOR on DH STM32MP15xx DHSOM

Marek Vasut marex at denx.de
Sat Oct 12 05:01:54 CEST 2024


On 10/11/24 5:30 PM, Patrick DELAUNAY wrote:
> Hi,

Hi,

> On 9/30/24 21:23, Marek Vasut wrote:
>> Make the dh_update_sd_to_sf script generic, rename it to 
>> dh_update_sdmmc_to_sf
>> and implement two specific dh_update_sd_to_sf and dh_update_emmc_to_sf 
>> scripts
>> which load U-Boot from either SD or eMMC and install it into SPI NOR.
>>
>> Signed-off-by: Marek Vasut <marex at denx.de>
>> ---
>> Cc: Patrice Chotard <patrice.chotard at foss.st.com>
>> Cc: Patrick Delaunay <patrick.delaunay at foss.st.com>
>> Cc: Tom Rini <trini at konsulko.com>
>> Cc: u-boot at dh-electronics.com
>> Cc: u-boot at lists.denx.de
>> Cc: uboot-stm32 at st-md-mailman.stormreply.com
>> ---
>>   include/configs/stm32mp15_dh_dhsom.h | 16 +++++++++++++---
>>   1 file changed, 13 insertions(+), 3 deletions(-)
>>
>> diff --git a/include/configs/stm32mp15_dh_dhsom.h b/include/configs/ 
>> stm32mp15_dh_dhsom.h
>> index de39b19219d..fa759c938b3 100644
>> --- a/include/configs/stm32mp15_dh_dhsom.h
>> +++ b/include/configs/stm32mp15_dh_dhsom.h
>> @@ -38,16 +38,26 @@
>>           "setenv loadaddr1 && "                    \
>>           "setenv sblkcnt && "                    \
>>           "setenv ublkcnt\0"                    \
>> -    "dh_update_sd_to_sf=" /* Erase SPI NOR and install U-Boot from SD 
>> */ \
>> +    "dh_update_sdmmc_to_sf=" /* Erase SPI NOR and install U-Boot from 
>> SD/eMMC */ \
>>           "setexpr loadaddr1 ${loadaddr} + 0x1000000 && "        \
>> -        "load mmc 0:4 ${loadaddr1} /boot/u-boot-spl.stm32 && "    \
>> +        "load ${dh_update_iface} ${dh_update_dev} "        \
>> +            "${loadaddr1} /boot/u-boot-spl.stm32 && "    \
>>           "env set filesize1 ${filesize} && "            \
>> -        "load mmc 0:4 ${loadaddr} /boot/u-boot.itb && "        \
>> +        "load ${dh_update_iface} ${dh_update_dev} "        \
>> +            "${loadaddr} /boot/u-boot.itb && "        \
>>           "sf probe && sf erase 0 0x200000 && "            \
>>           "sf update ${loadaddr1} 0 ${filesize1} && "        \
>>           "sf update ${loadaddr1} 0x40000 ${filesize1} && "    \
>>           "sf update ${loadaddr} 0x80000 ${filesize} && "        \
>>           "env set filesize1 && env set loadaddr1\0"        \
>> +    "dh_update_sd_to_sf=" /* Erase SPI NOR and install U-Boot from SD 
>> */ \
>> +        "setenv dh_update_iface mmc && "            \
>> +        "setenv dh_update_dev 0:4 && "                \
>> +        "run dh_update_sdmmc_to_sf\0"                \
>> +    "dh_update_emmc_to_sf=" /* Erase SPI NOR and install U-Boot from 
>> eMMC */ \
>> +        "setenv dh_update_iface mmc && "            \
>> +        "setenv dh_update_dev 1:4 && "                \
>> +        "run dh_update_sdmmc_to_sf\0"                \
>>       "stdin=serial\0"                        \
>>       "stdout=serial\0"                        \
>>       "stderr=serial\0"                        \
>>
> 
> ok I will merge it as it
> 
> with 2 minor question
> 
> a)  it is strange to define interface variable for macro
>      but use only with "mmc" device with
> 
>> setenv dh_update_iface mmc
> 
> it can be simplified with
> 
> "load mmc ${dh_update_dev}
> 
> or it is to prepare other device then "mmc" .....

The later, I now also renamed the script in V2 to make it more obvious.

> b) you are using "sf" command and not "mtd" to udpate SPI NOR ?
> 
> 
> the MTD command allows to use the MTD partition name, defined in DT,
> so no need to know offset in script (and avoid "sf probe")
> 
> mtd erase fsbl1; mtd write fsbl1 ${loadaddr1} 0 ${filesize1} \
> mtd erase fsbl2; mtd write fsbl2 ${loadaddr1} 0 ${filesize1} \
> mtd erase uboot; mtd write uboot ${loadaddr} 0 ${filesize}
Can you also do 'sf update' alike operation with 'mtd' command? I don't 
think you can. The 'sf update' often does significantly speed up the SPI 
NOR update process, because SPI NOR erase operation is very slow, while 
SPI NOR read operation is fast, so if the update can read and then skip 
many blocks which are already in the SPI NOR and erase and write only 
the changed blocks, the update is often very fast too.


More information about the U-Boot mailing list