summaryrefslogtreecommitdiff
path: root/plat
diff options
context:
space:
mode:
authorMadhukar Pappireddy <madhukar.pappireddy@arm.com>2023-10-10 06:27:37 +0200
committerTrustedFirmware Code Review <review@review.trustedfirmware.org>2023-10-10 06:27:37 +0200
commit36b22f28f5449635af40918a27806c15a5e29a44 (patch)
tree3228fb397b25dffce3f4574de9bb16e961bc05fb /plat
parentb06b509eb2b7f0f4dce1b4133500cf30aa0dcd4a (diff)
parent4827613c9a8db6238e9411b508ef20bda3113146 (diff)
Merge changes I9c2bf78a,Iaff5f1fa,I44686a36 into integration
* changes: fix(imx8m): map BL32 memory only if SPD_opteed or SPD_trusty is enabled feat(imx8mn): add workaround for errata ERR050362 feat(imx8m): enable snvs privileged registers access
Diffstat (limited to 'plat')
-rw-r--r--plat/imx/imx8m/imx8m_snvs.c19
-rw-r--r--plat/imx/imx8m/imx8mm/imx8mm_bl31_setup.c7
-rw-r--r--plat/imx/imx8m/imx8mm/platform.mk1
-rw-r--r--plat/imx/imx8m/imx8mn/imx8mn_bl31_setup.c14
-rw-r--r--plat/imx/imx8m/imx8mn/include/platform_def.h4
-rw-r--r--plat/imx/imx8m/imx8mn/platform.mk1
-rw-r--r--plat/imx/imx8m/imx8mp/imx8mp_bl31_setup.c7
-rw-r--r--plat/imx/imx8m/imx8mp/platform.mk1
-rw-r--r--plat/imx/imx8m/include/imx8m_snvs.h12
9 files changed, 66 insertions, 0 deletions
diff --git a/plat/imx/imx8m/imx8m_snvs.c b/plat/imx/imx8m/imx8m_snvs.c
new file mode 100644
index 000000000..7874a6869
--- /dev/null
+++ b/plat/imx/imx8m/imx8m_snvs.c
@@ -0,0 +1,19 @@
+/*
+ * Copyright 2022-2023 NXP
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#include <lib/mmio.h>
+#include <platform_def.h>
+
+#define SNVS_HPCOMR U(0x04)
+#define SNVS_NPSWA_EN BIT(31)
+
+void enable_snvs_privileged_access(void)
+{
+ unsigned int val;
+
+ val = mmio_read_32(IMX_SNVS_BASE + SNVS_HPCOMR);
+ mmio_write_32(IMX_SNVS_BASE + SNVS_HPCOMR, val | SNVS_NPSWA_EN);
+}
diff --git a/plat/imx/imx8m/imx8mm/imx8mm_bl31_setup.c b/plat/imx/imx8m/imx8mm/imx8mm_bl31_setup.c
index c8a3adf8f..dc9dd5949 100644
--- a/plat/imx/imx8m/imx8mm/imx8mm_bl31_setup.c
+++ b/plat/imx/imx8m/imx8mm/imx8mm_bl31_setup.c
@@ -29,6 +29,7 @@
#include <imx8m_caam.h>
#include <imx8m_ccm.h>
#include <imx8m_csu.h>
+#include <imx8m_snvs.h>
#include <plat_imx8.h>
#define TRUSTY_PARAMS_LEN_BYTES (4096*2)
@@ -187,6 +188,10 @@ void bl31_early_platform_setup2(u_register_t arg0, u_register_t arg1,
#endif
#endif
+#if !defined(SPD_opteed) && !defined(SPD_trusty)
+ enable_snvs_privileged_access();
+#endif
+
bl31_tzc380_setup();
}
@@ -208,8 +213,10 @@ void bl31_plat_arch_setup(void)
#if USE_COHERENT_MEM
MAP_COHERENT_MEM,
#endif
+#if defined(SPD_opteed) || defined(SPD_trusty)
/* Map TEE memory */
MAP_BL32_TOTAL,
+#endif
{0}
};
diff --git a/plat/imx/imx8m/imx8mm/platform.mk b/plat/imx/imx8m/imx8mm/platform.mk
index 6f6daf8d5..97f4f2488 100644
--- a/plat/imx/imx8m/imx8mm/platform.mk
+++ b/plat/imx/imx8m/imx8mm/platform.mk
@@ -39,6 +39,7 @@ BL31_SOURCES += plat/imx/common/imx8_helpers.S \
plat/imx/imx8m/imx8m_caam.c \
plat/imx/imx8m/imx8m_ccm.c \
plat/imx/imx8m/imx8m_psci_common.c \
+ plat/imx/imx8m/imx8m_snvs.c \
plat/imx/imx8m/imx8mm/imx8mm_bl31_setup.c \
plat/imx/imx8m/imx8mm/imx8mm_psci.c \
plat/imx/imx8m/imx8mm/gpc.c \
diff --git a/plat/imx/imx8m/imx8mn/imx8mn_bl31_setup.c b/plat/imx/imx8m/imx8mn/imx8mn_bl31_setup.c
index 147249ee5..f9e430bf9 100644
--- a/plat/imx/imx8m/imx8mn/imx8mn_bl31_setup.c
+++ b/plat/imx/imx8m/imx8mn/imx8mn_bl31_setup.c
@@ -27,6 +27,7 @@
#include <imx8m_caam.h>
#include <imx8m_ccm.h>
#include <imx8m_csu.h>
+#include <imx8m_snvs.h>
#include <platform_def.h>
#include <plat_imx8.h>
@@ -138,6 +139,13 @@ void bl31_early_platform_setup2(u_register_t arg0, u_register_t arg1,
imx_csu_init(csu_cfg);
+ /*
+ * Configure the force_incr programmable bit in GPV_5 of PL301_display, which fixes
+ * partial write issue. The AXI2AHB bridge is used for masters that access the TCM
+ * through system bus. Please refer to errata ERR050362 for more information.
+ */
+ mmio_setbits_32((GPV5_BASE_ADDR + FORCE_INCR_OFFSET), FORCE_INCR_BIT_MASK);
+
/* config the ocram memory range for secure access */
mmio_write_32(IMX_IOMUX_GPR_BASE + 0x2c, 0x4c1);
val = mmio_read_32(IMX_IOMUX_GPR_BASE + 0x2c);
@@ -184,6 +192,10 @@ void bl31_early_platform_setup2(u_register_t arg0, u_register_t arg1,
#endif
#endif
+#if !defined(SPD_opteed) && !defined(SPD_trusty)
+ enable_snvs_privileged_access();
+#endif
+
bl31_tzc380_setup();
}
@@ -205,8 +217,10 @@ void bl31_plat_arch_setup(void)
#if USE_COHERENT_MEM
MAP_COHERENT_MEM,
#endif
+#if defined(SPD_opteed) || defined(SPD_trusty)
/* Map TEE memory */
MAP_BL32_TOTAL,
+#endif
{0}
};
diff --git a/plat/imx/imx8m/imx8mn/include/platform_def.h b/plat/imx/imx8m/imx8mn/include/platform_def.h
index c75e25052..d5176dd17 100644
--- a/plat/imx/imx8m/imx8mn/include/platform_def.h
+++ b/plat/imx/imx8m/imx8mn/include/platform_def.h
@@ -141,6 +141,10 @@
#define COUNTER_FREQUENCY 8000000 /* 8MHz */
+#define GPV5_BASE_ADDR U(0x32500000)
+#define FORCE_INCR_OFFSET U(0x4044)
+#define FORCE_INCR_BIT_MASK U(0x2)
+
#define IMX_WDOG_B_RESET
#define GIC_MAP MAP_REGION_FLAT(IMX_GIC_BASE, IMX_GIC_SIZE, MT_DEVICE | MT_RW)
diff --git a/plat/imx/imx8m/imx8mn/platform.mk b/plat/imx/imx8m/imx8mn/platform.mk
index a6b43f213..e0826e29a 100644
--- a/plat/imx/imx8m/imx8mn/platform.mk
+++ b/plat/imx/imx8m/imx8mn/platform.mk
@@ -34,6 +34,7 @@ BL31_SOURCES += plat/imx/common/imx8_helpers.S \
plat/imx/imx8m/imx8m_ccm.c \
plat/imx/imx8m/imx8m_csu.c \
plat/imx/imx8m/imx8m_psci_common.c \
+ plat/imx/imx8m/imx8m_snvs.c \
plat/imx/imx8m/imx8mn/imx8mn_bl31_setup.c \
plat/imx/imx8m/imx8mn/imx8mn_psci.c \
plat/imx/imx8m/imx8mn/gpc.c \
diff --git a/plat/imx/imx8m/imx8mp/imx8mp_bl31_setup.c b/plat/imx/imx8m/imx8mp/imx8mp_bl31_setup.c
index b0a41c741..43fa06463 100644
--- a/plat/imx/imx8m/imx8mp/imx8mp_bl31_setup.c
+++ b/plat/imx/imx8m/imx8mp/imx8mp_bl31_setup.c
@@ -27,6 +27,7 @@
#include <imx8m_caam.h>
#include <imx8m_ccm.h>
#include <imx8m_csu.h>
+#include <imx8m_snvs.h>
#include <platform_def.h>
#include <plat_imx8.h>
@@ -180,6 +181,10 @@ void bl31_early_platform_setup2(u_register_t arg0, u_register_t arg1,
#endif
#endif
+#if !defined(SPD_opteed) && !defined(SPD_trusty)
+ enable_snvs_privileged_access();
+#endif
+
bl31_tzc380_setup();
}
@@ -201,8 +206,10 @@ void bl31_plat_arch_setup(void)
#if USE_COHERENT_MEM
MAP_COHERENT_MEM,
#endif
+#if defined(SPD_opteed) || defined(SPD_trusty)
/* Map TEE memory */
MAP_BL32_TOTAL,
+#endif
{0}
};
diff --git a/plat/imx/imx8m/imx8mp/platform.mk b/plat/imx/imx8m/imx8mp/platform.mk
index a8400a4f9..ce6907195 100644
--- a/plat/imx/imx8m/imx8mp/platform.mk
+++ b/plat/imx/imx8m/imx8mp/platform.mk
@@ -35,6 +35,7 @@ BL31_SOURCES += plat/imx/common/imx8_helpers.S \
plat/imx/imx8m/imx8m_ccm.c \
plat/imx/imx8m/imx8m_csu.c \
plat/imx/imx8m/imx8m_psci_common.c \
+ plat/imx/imx8m/imx8m_snvs.c \
plat/imx/imx8m/imx8mp/imx8mp_bl31_setup.c \
plat/imx/imx8m/imx8mp/imx8mp_psci.c \
plat/imx/imx8m/imx8mp/gpc.c \
diff --git a/plat/imx/imx8m/include/imx8m_snvs.h b/plat/imx/imx8m/include/imx8m_snvs.h
new file mode 100644
index 000000000..799e1d558
--- /dev/null
+++ b/plat/imx/imx8m/include/imx8m_snvs.h
@@ -0,0 +1,12 @@
+/*
+ * Copyright 2022-2023 NXP
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#ifndef IMX8M_SNVS_H
+#define IMX8M_SNVS_H
+
+void enable_snvs_privileged_access(void);
+
+#endif