diff --git a/plat/st/common/stm32mp_crypto_lib.c b/plat/st/common/stm32mp_crypto_lib.c
index 140fb8858c81433000fdccbd7e13ec2404fdabb6..7e086d6047546199d45b40b518a26500dbc28b80 100644
--- a/plat/st/common/stm32mp_crypto_lib.c
+++ b/plat/st/common/stm32mp_crypto_lib.c
@@ -82,7 +82,7 @@ static int crypto_verify_signature(void *data_ptr, unsigned int data_len,
 	}
 
 	result = mmap_add_dynamic_region(STM32MP_ROM_BASE, STM32MP_ROM_BASE,
-					 STM32MP_ROM_SIZE, MT_CODE | MT_SECURE);
+					 STM32MP_ROM_SIZE_2MB_ALIGNED, MT_CODE | MT_SECURE);
 	if (result != 0) {
 		return result;
 	}
@@ -110,7 +110,7 @@ static int crypto_verify_signature(void *data_ptr, unsigned int data_len,
 	}
 
 out:
-	mmap_remove_dynamic_region(STM32MP_ROM_BASE, STM32MP_ROM_SIZE);
+	mmap_remove_dynamic_region(STM32MP_ROM_BASE, STM32MP_ROM_SIZE_2MB_ALIGNED);
 	if (result != 0) {
 		stm32mp_delete_loaded_header();
 	}
diff --git a/plat/st/stm32mp1/bl2_plat_setup.c b/plat/st/stm32mp1/bl2_plat_setup.c
index 4986c61e4e4757cbfe57ebe15fe641bf72680ede..e0b9a2b8b62c7a782c48ebdab9030d4bcce5d3d4 100644
--- a/plat/st/stm32mp1/bl2_plat_setup.c
+++ b/plat/st/stm32mp1/bl2_plat_setup.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015-2020, ARM Limited and Contributors. All rights reserved.
+ * Copyright (c) 2015-2021, ARM Limited and Contributors. All rights reserved.
  *
  * SPDX-License-Identifier: BSD-3-Clause
  */
@@ -158,19 +158,6 @@ void bl2_el3_early_platform_setup(u_register_t arg0,
 	stm32mp_save_boot_ctx_address(arg0);
 }
 
-static int ddr_mapping_and_security(void)
-{
-	uint32_t ddr_size = dt_get_ddr_size();
-
-	if (ddr_size == 0U) {
-		return -EINVAL;
-	}
-
-	/* Map DDR for binary load, now with cacheable attribute */
-	return mmap_add_dynamic_region(STM32MP_DDR_BASE, STM32MP_DDR_BASE,
-				       ddr_size, MT_MEMORY | MT_RW | MT_SECURE);
-}
-
 void bl2_platform_setup(void)
 {
 	int ret;
@@ -208,7 +195,9 @@ void bl2_platform_setup(void)
 		}
 	}
 
-	ret = ddr_mapping_and_security();
+	/* Map DDR for binary load, now with cacheable attribute */
+	ret = mmap_add_dynamic_region(STM32MP_DDR_BASE, STM32MP_DDR_BASE,
+				      STM32MP_DDR_MAX_SIZE, MT_MEMORY | MT_RW | MT_SECURE);
 	if (ret < 0) {
 		ERROR("DDR mapping: error %d\n", ret);
 		panic();
diff --git a/plat/st/stm32mp1/stm32mp1_def.h b/plat/st/stm32mp1/stm32mp1_def.h
index 6ee54b4951656410210a1b17136814ba5b23f79d..5096d1c0bfb97fca10c0c27974a7df2066139193 100644
--- a/plat/st/stm32mp1/stm32mp1_def.h
+++ b/plat/st/stm32mp1/stm32mp1_def.h
@@ -71,6 +71,7 @@
  ******************************************************************************/
 #define STM32MP_ROM_BASE		U(0x00000000)
 #define STM32MP_ROM_SIZE		U(0x00020000)
+#define STM32MP_ROM_SIZE_2MB_ALIGNED	U(0x00200000)
 
 #define STM32MP_SYSRAM_BASE		U(0x2FFC0000)
 #define STM32MP_SYSRAM_SIZE		U(0x00040000)
@@ -169,21 +170,25 @@ enum ddr_type {
 #endif
 #endif /* STM32MP_USE_STM32IMAGE */
 
- /* BL2 and BL32/sp_min require finer granularity tables */
 #if defined(IMAGE_BL2)
- #if STM32MP_USB_PROGRAMMER
-  #define MAX_XLAT_TABLES			U(4)	/* 16 KB for mapping */
- #else
-  #define MAX_XLAT_TABLES			U(3)	/* 12 KB for mapping */
- #endif
-#elif defined(IMAGE_BL32)
- #if STM32MP_SP_MIN_IN_DDR
-  #define MAX_XLAT_TABLES			U(7)	/* 28 KB for mapping */
- #else
-  #define MAX_XLAT_TABLES			U(4)	/* 16 KB for mapping */
- #endif
+ #define STM32MP_DEFAULT_XLAT		U(2) /* 8 KB for mapping */
+#endif
+
+/* BL32/sp_min require finer granularity tables */
+#if defined(IMAGE_BL32)
+ #define STM32MP_DEFAULT_XLAT		U(4) /* 16 KB for mapping */
+#endif
+
+#if STM32MP_SP_MIN_IN_DDR && defined(IMAGE_BL32)
+ #define STM32MP_SP_MIN_IN_DDR_XLAT	U(3) /* 12KB for mapping
+					      * (BL32 data, BL32 DT, SCMI buffers)
+					      */
+#else
+ #define STM32MP_SP_MIN_IN_DDR_XLAT	U(0)
 #endif
 
+#define MAX_XLAT_TABLES			(STM32MP_DEFAULT_XLAT + \
+					 STM32MP_SP_MIN_IN_DDR_XLAT)
 /*
  * MAX_MMAP_REGIONS is usually:
  * BL stm32mp1_mmap size + mmap regions in *_plat_arch_setup