public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
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


  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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox