From: "Pali Rohár" <pali@kernel.org>
To: Jaehoon Chung <jh80.chung@samsung.com>, Tom Rini <trini@konsulko.com>
Cc: u-boot@lists.denx.de
Subject: [PATCH v3 u-boot] mmc: spl: Make partition choice in default_spl_mmc_emmc_boot_partition() more explicit
Date: Sat, 8 Jul 2023 00:54:38 +0200 [thread overview]
Message-ID: <20230707225438.32334-1-pali@kernel.org> (raw)
In-Reply-To: <20230413211057.10975-2-pali@kernel.org>
To make eMMC partition choosing in default_spl_mmc_emmc_boot_partition()
function better understandable, rewrite it via explicit switch-case code
pattern.
Also indicate an error when eMMC EXT_CSD[179] register is configured by
user to value which is not suitable for eMMC booting and SPL do not know
how to interpret it.
Signed-off-by: Pali Rohár <pali@kernel.org>
---
Changes in v3:
* Instead of showing (verbose) warning, make them as errors and
propagate them back to caller.
* Add comment with explanation what happened and how to fix possible
misconfigured configuration.
Changes in v2:
* Disable showing warning on sama5d2_xplained due to size restrictions
---
This patch depends on another patch:
mmc: spl: Add comments for default_spl_mmc_emmc_boot_partition()
https://patchwork.ozlabs.org/project/uboot/patch/20230404202805.8523-1-pali@kernel.org/
---
common/spl/spl_mmc.c | 56 +++++++++++++++++++++++++++++++++++++-------
1 file changed, 48 insertions(+), 8 deletions(-)
diff --git a/common/spl/spl_mmc.c b/common/spl/spl_mmc.c
index f7a42a11477d..656363a3b51a 100644
--- a/common/spl/spl_mmc.c
+++ b/common/spl/spl_mmc.c
@@ -408,15 +408,46 @@ int default_spl_mmc_emmc_boot_partition(struct mmc *mmc)
*
* Note: See difference between EXT_CSD_EXTRACT_PARTITION_ACCESS
* and EXT_CSD_EXTRACT_BOOT_PART, specially about User area value.
- *
- * FIXME: When booting from this eMMC device is explicitly
- * disabled then we use User area for booting. This is incorrect.
- * Probably we should skip this eMMC device and select the next
- * one for booting. Or at least throw warning about this fallback.
*/
- part = EXT_CSD_EXTRACT_BOOT_PART(mmc->part_config);
- if (part == 7)
- part = 0;
+ if (mmc->part_config == MMCPART_NOAVAILABLE)
+ part = 0; /* If partitions are not supported then we have only User Area partition */
+ else {
+ switch(EXT_CSD_EXTRACT_BOOT_PART(mmc->part_config)) {
+ case 0: /* Booting from this eMMC device is disabled */
+ /*
+ * This eMMC device has disabled booting.
+ * This may happen because of misconfiguration of eMMC device or
+ * because user explicitly wanted to not boot from this eMMC device.
+ * eMMC boot configuration can be changed by "mmc partconf" command.
+ */
+ part = -ENXIO; /* negative value indicates error */
+ /* Note that error message is printed by caller of this function. */
+ break;
+ case 1: /* Boot partition 1 is used for booting */
+ part = 1;
+ break;
+ case 2: /* Boot partition 2 is used for booting */
+ part = 2;
+ break;
+ case 7: /* User area is used for booting */
+ part = 0;
+ break;
+ default: /* Other values are reserved */
+ /*
+ * This eMMC device has configured booting from reserved value.
+ * This may happen because of misconfiguration of eMMC device or
+ * because this is newer eMMC device than what U-Boot understand.
+ * If newer eMMC specification defines meaning for some reserved
+ * values then switch above should be updated for new cases.
+ * At this stage we do not know how to interpret this reserved
+ * value so return error.
+ * eMMC boot configuration can be changed by "mmc partconf" command.
+ */
+ part = -EINVAL; /* negative value indicates error */
+ /* Note that error message is printed by caller of this function. */
+ break;
+ }
+ }
#endif
return part;
}
@@ -471,6 +502,15 @@ int spl_mmc_load(struct spl_image_info *spl_image,
switch (boot_mode) {
case MMCSD_MODE_EMMCBOOT:
part = spl_mmc_emmc_boot_partition(mmc);
+ if (part < 0) {
+#ifdef CONFIG_SPL_LIBCOMMON_SUPPORT
+ if (part == -ENXIO)
+ puts("spl: mmc booting disabled\n");
+ else
+ puts("spl: mmc misconfigured\n");
+#endif
+ return part;
+ }
if (CONFIG_IS_ENABLED(MMC_TINY))
err = mmc_switch_part(mmc, part);
--
2.20.1
next prev parent reply other threads:[~2023-07-07 22:56 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <CGME20230703121637epcas1p38475ee827947796e877335866979abcb@epcas1p3.samsung.com>
2023-04-13 21:10 ` [PATCH u-boot 0/4] mmc: Explain and cleanup partition selection Pali Rohár
2023-04-13 21:10 ` [PATCH u-boot 1/4] mmc: spl: Make partition choice in default_spl_mmc_emmc_boot_partition() more explicit Pali Rohár
2023-07-06 17:35 ` [PATCH v2 u-boot] " Pali Rohár
2023-07-06 17:42 ` Tom Rini
2023-07-06 17:49 ` Pali Rohár
2023-07-06 17:52 ` Tom Rini
2023-07-07 16:46 ` Pali Rohár
2023-07-07 16:54 ` Tom Rini
2023-07-07 17:05 ` Pali Rohár
2023-07-07 17:10 ` Tom Rini
2023-07-07 17:56 ` Pali Rohár
2023-07-07 18:17 ` Tom Rini
2023-07-07 22:54 ` Pali Rohár [this message]
2023-07-07 23:43 ` [PATCH v3 " Tom Rini
2023-07-08 8:30 ` Pali Rohár
2023-07-08 15:28 ` Tom Rini
2023-07-09 13:08 ` Pali Rohár
2023-04-13 21:10 ` [PATCH u-boot 2/4] cmd: mvebu/bubt: Validate EXT_CSD[179] eMMC register in mmc_burn_image() Pali Rohár
2023-04-17 6:10 ` Stefan Roese
2023-04-17 7:05 ` Pali Rohár
2023-04-13 21:10 ` [PATCH u-boot 3/4] sunxi: eMMC: Add comments explaining mapping between bootpart and mmc_switch_part() Pali Rohár
2023-04-14 10:48 ` Andre Przywara
2023-04-13 21:10 ` [PATCH u-boot 4/4] board: purism: Use U-Boot mmc function for converting boot part to part access Pali Rohár
2023-04-16 15:00 ` Angus Ainslie
2023-07-03 12:16 ` [PATCH u-boot 0/4] mmc: Explain and cleanup partition selection Jaehoon Chung
2023-07-06 10:50 ` Pali Rohár
2023-07-06 17:39 ` Pali Rohár
2023-07-06 22:53 ` Jaehoon Chung
2023-07-06 22:57 ` Jaehoon Chung
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20230707225438.32334-1-pali@kernel.org \
--to=pali@kernel.org \
--cc=jh80.chung@samsung.com \
--cc=trini@konsulko.com \
--cc=u-boot@lists.denx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.