feat(nxp-mmc): add dynamic mapping

Dynamically add an MMU entry for the uSDHC controller.

Change-Id: Ifd21fcee79392a1432aa7444aec168105a95a002
Signed-off-by: Ghennadi Procopciuc <ghennadi.procopciuc@nxp.com>
diff --git a/drivers/imx/usdhc/imx_usdhc.c b/drivers/imx/usdhc/imx_usdhc.c
index f3eccb2..f6a27dc 100644
--- a/drivers/imx/usdhc/imx_usdhc.c
+++ b/drivers/imx/usdhc/imx_usdhc.c
@@ -15,6 +15,7 @@
 #include <drivers/delay_timer.h>
 #include <drivers/mmc.h>
 #include <lib/mmio.h>
+#include <lib/xlat_tables/xlat_tables_v2.h>
 
 #include <imx_usdhc.h>
 
@@ -395,12 +396,24 @@
 void imx_usdhc_init(imx_usdhc_params_t *params,
 		    struct mmc_device_info *mmc_dev_info)
 {
+	int ret __maybe_unused;
+
 	assert((params != 0) &&
 	       ((params->reg_base & MMC_BLOCK_MASK) == 0) &&
 	       ((params->bus_width == MMC_BUS_WIDTH_1) ||
 		(params->bus_width == MMC_BUS_WIDTH_4) ||
 		(params->bus_width == MMC_BUS_WIDTH_8)));
 
+#if PLAT_XLAT_TABLES_DYNAMIC
+	ret = mmap_add_dynamic_region(params->reg_base, params->reg_base,
+				      PAGE_SIZE,
+				      MT_DEVICE | MT_RW | MT_SECURE);
+	if (ret != 0) {
+		ERROR("Failed to map the uSDHC registers\n");
+		panic();
+	}
+#endif
+
 	memcpy(&imx_usdhc_params, params, sizeof(imx_usdhc_params_t));
 	mmc_init(&imx_usdhc_ops, params->clk_rate, params->bus_width,
 		 params->flags, mmc_dev_info);