diff options
| author | Tom Rini <[email protected]> | 2022-04-11 15:59:45 -0400 |
|---|---|---|
| committer | Tom Rini <[email protected]> | 2022-04-11 15:59:45 -0400 |
| commit | 7486c2ef9d296ad34be1567b8d26f978e683bece (patch) | |
| tree | ea1d936131f54e322db5e52f1299fc0e9db29852 /common | |
| parent | 1583c87b1b813a04c95732ae8075d79b14a26eea (diff) | |
| parent | c3322a53f34f986ad9818df72707ebb59c9c8725 (diff) | |
Merge branch '2022-04-11-assorted-updates'
- Assorted fixes/updates including K3-J721s2 timer dts fix, assorted
crypto improvements, led-pwm driver, improve handling of mtd
partitions, align mkimage hash output buffers and backport a UBIFS
bugfix from Linux.
Diffstat (limited to 'common')
| -rw-r--r-- | common/spl/Kconfig | 3 | ||||
| -rw-r--r-- | common/spl/spl_mmc.c | 32 |
2 files changed, 30 insertions, 5 deletions
diff --git a/common/spl/Kconfig b/common/spl/Kconfig index a3a6f31aad6..ac61b25a066 100644 --- a/common/spl/Kconfig +++ b/common/spl/Kconfig @@ -668,7 +668,8 @@ config SYS_MMCSD_FS_BOOT_PARTITION default 1 help Partition on the MMC to load U-Boot from when the MMC is being - used in fs mode + used in fs mode. + Use -1 as a special value to use the first bootable partition. config SPL_MMC_TINY bool "Tiny MMC framework in SPL" diff --git a/common/spl/spl_mmc.c b/common/spl/spl_mmc.c index 1bb785a80f0..6116a68371a 100644 --- a/common/spl/spl_mmc.c +++ b/common/spl/spl_mmc.c @@ -280,16 +280,40 @@ static int spl_mmc_do_fs_boot(struct spl_image_info *spl_image, { int err = -ENOSYS; + __maybe_unused int partition = CONFIG_SYS_MMCSD_FS_BOOT_PARTITION; + +#if CONFIG_SYS_MMCSD_FS_BOOT_PARTITION == -1 + { + struct disk_partition info; + debug("Checking for the first MBR bootable partition\n"); + for (int type_part = 1; type_part <= DOS_ENTRY_NUMBERS; type_part++) { + err = part_get_info(mmc_get_blk_desc(mmc), type_part, &info); + if (err) + continue; + debug("Partition %d is of type %d and bootable=%d\n", type_part, info.sys_ind, info.bootable); + if (info.bootable != 0) { + debug("Partition %d is bootable, using it\n", type_part); + partition = type_part; + break; + } + } + printf("Using first bootable partition: %d\n", partition); + if (partition == CONFIG_SYS_MMCSD_FS_BOOT_PARTITION) { + return -ENOSYS; + } + } +#endif + #ifdef CONFIG_SPL_FS_FAT if (!spl_start_uboot()) { err = spl_load_image_fat_os(spl_image, bootdev, mmc_get_blk_desc(mmc), - CONFIG_SYS_MMCSD_FS_BOOT_PARTITION); + partition); if (!err) return err; } #ifdef CONFIG_SPL_FS_LOAD_PAYLOAD_NAME err = spl_load_image_fat(spl_image, bootdev, mmc_get_blk_desc(mmc), - CONFIG_SYS_MMCSD_FS_BOOT_PARTITION, + partition, filename); if (!err) return err; @@ -298,13 +322,13 @@ static int spl_mmc_do_fs_boot(struct spl_image_info *spl_image, #ifdef CONFIG_SPL_FS_EXT4 if (!spl_start_uboot()) { err = spl_load_image_ext_os(spl_image, bootdev, mmc_get_blk_desc(mmc), - CONFIG_SYS_MMCSD_FS_BOOT_PARTITION); + partition); if (!err) return err; } #ifdef CONFIG_SPL_FS_LOAD_PAYLOAD_NAME err = spl_load_image_ext(spl_image, bootdev, mmc_get_blk_desc(mmc), - CONFIG_SYS_MMCSD_FS_BOOT_PARTITION, + partition, filename); if (!err) return err; |
