[RFC 6/7] dm: implement get_dp_node for MMC devices

Heinrich Schuchardt heinrich.schuchardt at canonical.com
Sun Mar 26 19:27:42 CEST 2023


Generate an SD() or eMMC() node for MMC devices.

Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt at canonical.com>
---
 drivers/mmc/mmc-uclass.c | 25 +++++++++++++++++++++++++
 1 file changed, 25 insertions(+)

diff --git a/drivers/mmc/mmc-uclass.c b/drivers/mmc/mmc-uclass.c
index 01d9b0201f..4f85d80273 100644
--- a/drivers/mmc/mmc-uclass.c
+++ b/drivers/mmc/mmc-uclass.c
@@ -9,6 +9,7 @@
 
 #include <common.h>
 #include <bootdev.h>
+#include <efi_loader.h>
 #include <log.h>
 #include <mmc.h>
 #include <dm.h>
@@ -505,6 +506,27 @@ static int mmc_blk_probe(struct udevice *dev)
 	return 0;
 }
 
+#if CONFIG_IS_ENABLED(EFI_LOADER)
+struct efi_device_path *mmc_get_dp_node(struct udevice *dev)
+{
+	struct efi_device_path_sd_mmc_path *dp;
+	struct mmc *mmc = mmc_get_mmc_dev(dev);
+
+	dp = efi_alloc(sizeof(struct efi_device_path_sd_mmc_path));
+	if (!dp)
+		return NULL;
+
+	dp->dp.type	= DEVICE_PATH_TYPE_MESSAGING_DEVICE;
+	dp->dp.sub_type = IS_SD(mmc) ?
+			  DEVICE_PATH_SUB_TYPE_MSG_SD :
+			  DEVICE_PATH_SUB_TYPE_MSG_MMC;
+	dp->dp.length	= sizeof(*dp);
+	dp->slot_number	= dev_seq(dev);
+
+	return &dp->dp;
+}
+#endif
+
 #if CONFIG_IS_ENABLED(MMC_UHS_SUPPORT) || \
     CONFIG_IS_ENABLED(MMC_HS200_SUPPORT) || \
     CONFIG_IS_ENABLED(MMC_HS400_SUPPORT)
@@ -547,4 +569,7 @@ UCLASS_DRIVER(mmc) = {
 	.name		= "mmc",
 	.flags		= DM_UC_FLAG_SEQ_ALIAS,
 	.per_device_auto	= sizeof(struct mmc_uclass_priv),
+#if CONFIG_IS_ENABLED(EFI_LOADER)
+	.get_dp_node	= mmc_get_dp_node,
+#endif
 };
-- 
2.39.2



More information about the U-Boot mailing list