On Wednesday 22 February 2023 10:55:54 Stefan Roese wrote: > Hi Pali, > > On 2/21/23 21:18, Pali Rohár wrote: > > Support for burning into the correct eMMC HW boot partition was broken and > > removed in commit 96be2f072768 ("mvebu: bubt: Drop dead code"). Reimplement > > this functionality and bring it back again. > > > > Fixes: 96be2f072768 ("mvebu: bubt: Drop dead code") > > Signed-off-by: Pali Rohár <p...@kernel.org> > > --- > > cmd/mvebu/bubt.c | 53 ++++++++++++++++++++++++++++++++++++++---- > > doc/mvebu/cmd/bubt.txt | 21 ++++++++++++----- > > 2 files changed, 63 insertions(+), 11 deletions(-) > > > > diff --git a/cmd/mvebu/bubt.c b/cmd/mvebu/bubt.c > > index 2bcdf145f64a..4bad9a69527c 100644 > > --- a/cmd/mvebu/bubt.c > > +++ b/cmd/mvebu/bubt.c > > @@ -189,6 +189,11 @@ static int mmc_burn_image(size_t image_size) > > #ifdef CONFIG_BLK > > struct blk_desc *blk_desc; > > #endif > > +#ifdef CONFIG_SUPPORT_EMMC_BOOT > > + u8 part; > > + u8 orig_part; > > +#endif > > + > > mmc = find_mmc_device(mmc_dev_num); > > if (!mmc) { > > printf("No SD/MMC/eMMC card found\n"); > > @@ -202,6 +207,38 @@ static int mmc_burn_image(size_t image_size) > > return err; > > } > > +#ifdef CONFIG_BLK > > + blk_desc = mmc_get_blk_desc(mmc); > > + if (!blk_desc) { > > + printf("Error - failed to obtain block descriptor\n"); > > + return -ENODEV; > > + } > > +#endif > > This #ifdef usage really gets out of hand IMHO. Yes I know, you did not > introduce it here. Still, perhaps some of this can be moved to using > IS_ENABLED or CONFIG_IS_ENABLED instead? > > And I just checked that "bubt" is not compiled for CONFIG_BLK not > defined. So please depend this file on CONFIG_BLK in Kconfig and remove > the non CONFIG_BLK code here.
bubt is used for at least 4 different mvebu platforms (AXP, A38x, A3720, A7K) and every one has slightly different code and configuration. I really do not know if all those configurations support CONFIG_BLK, so I decided to let it as it was before to eliminate possible issues. > Thanks, > Stefan > > > + > > +#ifdef CONFIG_SUPPORT_EMMC_BOOT > > +#ifdef CONFIG_BLK > > + orig_part = blk_desc->hwpart; > > +#else > > + orig_part = mmc->block_dev.hwpart; > > +#endif > > + > > + part = (mmc->part_config >> 3) & PART_ACCESS_MASK; > > + > > + if (part == 7) > > + part = 0; > > + > > +#ifdef CONFIG_BLK > > + err = blk_dselect_hwpart(blk_desc, part); > > +#else > > + err = mmc_switch_part(mmc, part); > > +#endif > > + > > + if (err) { > > + printf("Error - MMC partition switch failed\n"); > > + return err; > > + } > > +#endif > > + > > /* SD reserves LBA-0 for MBR and boots from LBA-1, > > * MMC/eMMC boots from LBA-0 > > */ > > @@ -211,11 +248,6 @@ static int mmc_burn_image(size_t image_size) > > if (image_size % mmc->write_bl_len) > > blk_count += 1; > > - blk_desc = mmc_get_blk_desc(mmc); > > - if (!blk_desc) { > > - printf("Error - failed to obtain block descriptor\n"); > > - return -ENODEV; > > - } > > blk_written = blk_dwrite(blk_desc, start_lba, blk_count, > > (void *)get_load_addr()); > > #else > > @@ -227,6 +259,17 @@ static int mmc_burn_image(size_t image_size) > > start_lba, blk_count, > > (void *)get_load_addr()); > > #endif /* CONFIG_BLK */ > > + > > +#ifdef CONFIG_SUPPORT_EMMC_BOOT > > +#ifdef CONFIG_BLK > > + err = blk_dselect_hwpart(blk_desc, orig_part); > > +#else > > + err = mmc_switch_part(mmc, orig_part); > > +#endif > > + if (err) > > + printf("Error - MMC failed to switch back to original > > partition\n"); > > +#endif > > + > > if (blk_written != blk_count) { > > printf("Error - written %#lx blocks\n", blk_written); > > return -ENOSPC; > > diff --git a/doc/mvebu/cmd/bubt.txt b/doc/mvebu/cmd/bubt.txt > > index 6051243f1165..1fe1f07dd187 100644 > > --- a/doc/mvebu/cmd/bubt.txt > > +++ b/doc/mvebu/cmd/bubt.txt > > @@ -14,8 +14,7 @@ Examples: > > Notes: > > - For the TFTP interface set serverip and ipaddr. > > -- To burn image to SD/eMMC device, the target is defined > > - by parameters CONFIG_SYS_MMC_ENV_DEV and CONFIG_SYS_MMC_ENV_PART. > > +- To burn image to SD/eMMC device, the target is defined by HW partition. > > Bubt command details (burn image step by-step) > > ---------------------------------------------- > > @@ -40,10 +39,20 @@ Notes: > > Number 0 is used for user data partition and should not be utilized for > > storing > > boot images and U-Boot environment in RAW mode since it will break file > > system > > structures usually located here. > > - The default boot partition is BOOT0. It is selected by the following > > parameter: > > - CONFIG_SYS_MMC_ENV_PART=1 > > - Valid values for this parameter are 1 for BOOT0 and 2 for BOOT1. > > - Please never use partition number 0 here! > > + > > + Currently configured boot partition can be printed by command: > > + # mmc partconf 0 > > + (search for BOOT_PARTITION_ACCESS output, number 7 is user data) > > + > > + Change it to BOOT0: > > + # mmc partconf 0 0 1 1 > > + > > + Change it to BOOT1: > > + # mmc partconf 0 0 2 2 > > + > > + Change it to user data: > > + # mmc partconf 0 0 7 0 > > + > > - The partition number is ignored if the target device is SD card. > > - The boot image offset starts at block 0 for eMMC and block 1 for SD > > devices. > > The block 0 on SD devices is left for MBR storage. > > Viele Grüße, > Stefan Roese > > -- > DENX Software Engineering GmbH, Managing Director: Erika Unter > HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany > Phone: (+49)-8142-66989-51 Fax: (+49)-8142-66989-80 Email: s...@denx.de