All of lore.kernel.org
 help / color / mirror / Atom feed
From: Nikita Kiryanov <nikita@compulab.co.il>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH 03/12] spl: mmc: refactor device location code to its own function
Date: Thu, 22 Oct 2015 15:01:11 +0300	[thread overview]
Message-ID: <1445515280-21389-4-git-send-email-nikita@compulab.co.il> (raw)
In-Reply-To: <1445515280-21389-1-git-send-email-nikita@compulab.co.il>

Simplify spl_mmc_load_image() code by moving the part that finds the mmc device
into its own function spl_mmc_find_device(), available in two flavors: DM and
non-DM.

This refactor fixes a bug in which an error in the device location sequence
does not necessarily aborts the rest of the code. With this refactor, we fail
the moment there is an error.

Signed-off-by: Nikita Kiryanov <nikita@compulab.co.il>
Cc: Igor Grinberg <grinberg@compulab.co.il>
Cc: Paul Kocialkowski <contact@paulk.fr>
Cc: Pantelis Antoniou <panto@antoniou-consulting.com>
Cc: Tom Rini <trini@konsulko.com>
Cc: Simon Glass <sjg@chromium.org>
---
 common/spl/spl_mmc.c | 77 +++++++++++++++++++++++++++++++++++++---------------
 1 file changed, 55 insertions(+), 22 deletions(-)

diff --git a/common/spl/spl_mmc.c b/common/spl/spl_mmc.c
index e831970..cfbda1a 100644
--- a/common/spl/spl_mmc.c
+++ b/common/spl/spl_mmc.c
@@ -11,6 +11,7 @@
 #include <spl.h>
 #include <linux/compiler.h>
 #include <asm/u-boot.h>
+#include <errno.h>
 #include <mmc.h>
 #include <image.h>
 
@@ -59,6 +60,58 @@ end:
 	return 0;
 }
 
+#ifdef CONFIG_DM_MMC
+static int spl_mmc_find_device(struct mmc **mmc)
+{
+	struct udevice *dev;
+	int err;
+
+	err = mmc_initialize(NULL);
+	if (err) {
+#ifdef CONFIG_SPL_LIBCOMMON_SUPPORT
+		printf("spl: could not initialize mmc. error: %d\n", err);
+#endif
+		return err;
+	}
+
+	err = uclass_get_device(UCLASS_MMC, 0, &dev);
+	if (err) {
+#ifdef CONFIG_SPL_LIBCOMMON_SUPPORT
+		puts("spl: could not find mmc device. error: %d\n", err);
+#endif
+		return err;
+	}
+
+	*mmc = NULL;
+	*mmc = mmc_get_mmc_dev(dev);
+	return *mmc != NULL ? 0 : -ENODEV;
+}
+#else
+static int spl_mmc_find_device(struct mmc **mmc)
+{
+	int err;
+
+	err = mmc_initialize(gd->bd);
+	if (err) {
+#ifdef CONFIG_SPL_LIBCOMMON_SUPPORT
+		printf("spl: could not initialize mmc. error: %d\n", err);
+#endif
+		return err;
+	}
+
+	/* We register only one device. So, the dev id is always 0 */
+	*mmc = find_mmc_device(0);
+	if (!*mmc) {
+#ifdef CONFIG_SPL_LIBCOMMON_SUPPORT
+		puts("spl: mmc device not found\n");
+#endif
+		return -ENODEV;
+	}
+
+	return 0;
+}
+#endif
+
 #ifdef CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_PARTITION
 static int mmc_load_image_raw_partition(struct mmc *mmc, int partition)
 {
@@ -110,30 +163,10 @@ void spl_mmc_load_image(void)
 	int err = 0;
 	__maybe_unused int part;
 
-#ifdef CONFIG_DM_MMC
-	struct udevice *dev;
-
-	mmc_initialize(NULL);
-	err = uclass_get_device(UCLASS_MMC, 0, &dev);
-	mmc = NULL;
-	if (!err)
-		mmc = mmc_get_mmc_dev(dev);
-#else
-	mmc_initialize(gd->bd);
-
-	/* We register only one device. So, the dev id is always 0 */
-	mmc = find_mmc_device(0);
-	if (!mmc) {
-#ifdef CONFIG_SPL_LIBCOMMON_SUPPORT
-		puts("spl: mmc device not found\n");
-#endif
+	if (spl_mmc_find_device(&mmc))
 		hang();
-	}
-#endif
-
-	if (!err)
-		err = mmc_init(mmc);
 
+	err = mmc_init(mmc);
 	if (err) {
 #ifdef CONFIG_SPL_LIBCOMMON_SUPPORT
 		printf("spl: mmc init failed with error: %d\n", err);
-- 
1.9.1

  parent reply	other threads:[~2015-10-22 12:01 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-10-22 12:01 [U-Boot] [PATCH 00/12] SPL mmc refactor and alternate boot device feature Nikita Kiryanov
2015-10-22 12:01 ` [U-Boot] [PATCH 01/12] spl: nand: remove code duplication Nikita Kiryanov
2015-10-22 18:11   ` Scott Wood
2015-10-22 12:01 ` [U-Boot] [PATCH 02/12] spl: mmc: add break statements in spl_mmc_load_image() Nikita Kiryanov
2015-10-22 12:37   ` Hans de Goede
2015-10-22 13:08     ` Nikita Kiryanov
2015-10-22 13:23       ` Hans de Goede
2015-10-22 13:53         ` Nikita Kiryanov
2015-10-22 12:01 ` Nikita Kiryanov [this message]
2015-10-22 12:42   ` [U-Boot] [PATCH 03/12] spl: mmc: refactor device location code to its own function Hans de Goede
2015-10-22 14:15     ` Nikita Kiryanov
2015-10-22 12:01 ` [U-Boot] [PATCH 04/12] spl: mmc: remove #ifdef CONFIG_SPL_OS_BOOT check Nikita Kiryanov
2015-10-22 12:44   ` Hans de Goede
2015-10-22 12:01 ` [U-Boot] [PATCH 05/12] spl: mmc: get rid of #ifdef CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_PARTITION check Nikita Kiryanov
2015-10-22 12:47   ` Hans de Goede
2015-10-22 13:40     ` Nikita Kiryanov
2015-10-22 13:49       ` Tom Rini
2015-10-23  9:40         ` Nikita Kiryanov
2015-10-23 14:03           ` Hans de Goede
2015-10-23 14:11             ` Tom Rini
2015-10-22 12:01 ` [U-Boot] [PATCH 06/12] spl: mmc: move fs boot into its own function Nikita Kiryanov
2015-10-22 12:01 ` [U-Boot] [PATCH 07/12] spl: mmc: get rid of emmc boot code duplication Nikita Kiryanov
2015-10-22 12:01 ` [U-Boot] [PATCH 08/12] spl: change return values of spl_*_load_image() Nikita Kiryanov
2015-10-22 12:01 ` [U-Boot] [PATCH 09/12] common: spl: move image load to its own function Nikita Kiryanov
2015-10-22 12:01 ` [U-Boot] [PATCH 10/12] spl: add support for alternative boot device Nikita Kiryanov
2015-10-22 12:01 ` [U-Boot] [PATCH 11/12] spl: announce boot devices Nikita Kiryanov
2015-10-22 12:01 ` [U-Boot] [PATCH 12/12] arm: mx6: cm-fx6: define fallback boot devices for spl Nikita Kiryanov
2015-10-22 12:24 ` [U-Boot] [PATCH 00/12] SPL mmc refactor and alternate boot device feature Otavio Salvador
2015-10-23  9:46   ` Nikita Kiryanov

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=1445515280-21389-4-git-send-email-nikita@compulab.co.il \
    --to=nikita@compulab.co.il \
    --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.