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

Patrick DELAUNAY patrick.delaunay at foss.st.com
Wed Oct 16 19:59:55 CEST 2024


Hi,

On 10/12/24 05:01, Marek Vasut wrote:
> 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.


ok


>
>> 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.


Good point....

an improve place for MTD command

I will try to propose something for mtd command


and for the patch


Applied to u-boot-stm/master, thanks!

Regards
Patrick




More information about the U-Boot mailing list