Skip to contentSkip to conversation

Add support for initializing MMC

PATCH New tien.fong.chee at intel.com 2 participants 2 messages Dec 13, 2018 Char and misc drivers

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 Add support for initializing MMC

From: Tien Fong Chee <[email protected]>

Firmware loader would encounter problem if the MMC is accessed before initializing it. This patch would adding the support of initializing MMC before the MMC is accessed by firmware loader.

---
 drivers/misc/fs_loader.c |   33 ++++++++++++++++++++++++++++++++-
 1 files changed, 32 insertions(+), 1 deletions(-)
drivers/misc/fs_loader.c +32 -1
index 57a14a3..675f625 100644
@@ -12,6 +12,7 @@
 #include <linux/string.h>
 #include <mapmem.h>
 #include <malloc.h>
+#include <mmc.h>
 #include <spl.h>
 
 DECLARE_GLOBAL_DATA_PTR;
@@ -221,6 +222,7 @@ static int fs_loader_ofdata_to_platdata(struct udevice *dev)
 {
 	const char *fs_loader_path;
 	u32 phandlepart[2];
+	struct device_platdata *plat = NULL;
 
 	fs_loader_path = ofnode_get_chosen_prop("firmware-loader");
 
@@ -229,7 +231,6 @@ static int fs_loader_ofdata_to_platdata(struct udevice *dev)
 
 		fs_loader_node = ofnode_path(fs_loader_path);
 		if (ofnode_valid(fs_loader_node)) {
-			struct device_platdata *plat;
 			plat = dev->platdata;
 
 			if (!ofnode_read_u32_array(fs_loader_node,
@@ -247,6 +248,36 @@ static int fs_loader_ofdata_to_platdata(struct udevice *dev)
 		}
 	}
 
+#ifdef CONFIG_MMC
+	int ret;
+
+	ret = mmc_initialize(NULL);
+	if (ret) {
+		debug("MMC: could not initialize mmc. error: %d\n", ret);
+
+		return ret;
+	}
+
+	if (plat->phandlepart.phandle) {
+		ofnode node = ofnode_get_by_phandle(plat->phandlepart.phandle);
+
+		struct udevice *mmc_dev = NULL;
+
+		ret = device_get_global_by_ofnode(node, &mmc_dev);
+		if (!ret) {
+			struct mmc *mmc = mmc_get_mmc_dev(mmc_dev);
+
+			ret = mmc_init(mmc);
+			if (ret) {
+				debug("MMC: mmc init failed with error: %d\n",
+					ret);
+
+				return ret;
+			}
+		}
+	}
+#endif
+
 	return 0;
 }
 
Signature · 1 line
1.7.7.4
#1 lore raw

PATCH 1/1 Add support for initializing MMC

Quoted 45 lines · tien.fong.chee at intel.com

From: Tien Fong Chee <[email protected]>

Firmware loader would encounter problem if the MMC is accessed before initializing it. This patch would adding the support of initializing MMC before the MMC is accessed by firmware loader.

---
 drivers/misc/fs_loader.c |   33 ++++++++++++++++++++++++++++++++-

 1 files changed, 32 insertions(+), 1 deletions(-)
drivers/misc/fs_loader.c +1 -0
index 57a14a3..675f625 100644
@@ -12,6 +12,7 @@
  #include <linux/string.h>
  #include <mapmem.h>
  #include <malloc.h>
+#include <mmc.h>
  #include <spl.h>


 DECLARE_GLOBAL_DATA_PTR;

drivers/misc/fs_loader.c +1 -0
@@ -221,6 +222,7 @@ static int fs_loader_ofdata_to_platdata(struct
 udevice *dev)
  {
  	const char *fs_loader_path;
  	u32 phandlepart[2];
+	struct device_platdata *plat = NULL;


  fs_loader_path = ofnode_get_chosen_prop("firmware-loader");

drivers/misc/fs_loader.c +0 -0
@@ -229,7 +231,6 @@ static int fs_loader_ofdata_to_platdata(struct
 udevice *dev)


  fs_loader_node = ofnode_path(fs_loader_path); if (ofnode_valid(fs_loader_node)) {

drivers/misc/fs_loader.c +0 -1
-			struct device_platdata *plat;

  plat = dev->platdata;

  if (!ofnode_read_u32_array(fs_loader_node,

drivers/misc/fs_loader.c +0 -0
@@ -247,6 +248,36 @@ static int fs_loader_ofdata_to_platdata(struct
 udevice *dev)
  		}
  	}
Quoted 1 line

I just realized this portion of codes should be moved to polling function. I will send out another patch tomorrow.

Quoted 36 lines
drivers/misc/fs_loader.c +6 -0
+#ifdef CONFIG_MMC
+	int ret;
+
+	ret = mmc_initialize(NULL);
+	if (ret) {
+		debug("MMC: could not initialize mmc. error: %d\n",

ret);

drivers/misc/fs_loader.c +6 -0
+
+		return ret;
+	}
+
+	if (plat->phandlepart.phandle) {
+		ofnode node = ofnode_get_by_phandle(plat-
Quoted 1 line

phandlepart.phandle);

drivers/misc/fs_loader.c +10 -0
+
+		struct udevice *mmc_dev = NULL;
+
+		ret = device_get_global_by_ofnode(node, &mmc_dev);
+		if (!ret) {
+			struct mmc *mmc = mmc_get_mmc_dev(mmc_dev);
+
+			ret = mmc_init(mmc);
+			if (ret) {
+				debug("MMC: mmc init failed with

error: %d\n",

drivers/misc/fs_loader.c +8 -0
+					ret);
+
+				return ret;
+			}
+		}
+	}
+#endif
+

  return 0;
 }