diff options
author | Madhukar Pappireddy <madhukar.pappireddy@arm.com> | 2023-10-10 06:27:37 +0200 |
---|---|---|
committer | TrustedFirmware Code Review <review@review.trustedfirmware.org> | 2023-10-10 06:27:37 +0200 |
commit | 36b22f28f5449635af40918a27806c15a5e29a44 (patch) | |
tree | 3228fb397b25dffce3f4574de9bb16e961bc05fb /plat | |
parent | b06b509eb2b7f0f4dce1b4133500cf30aa0dcd4a (diff) | |
parent | 4827613c9a8db6238e9411b508ef20bda3113146 (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.c | 19 | ||||
-rw-r--r-- | plat/imx/imx8m/imx8mm/imx8mm_bl31_setup.c | 7 | ||||
-rw-r--r-- | plat/imx/imx8m/imx8mm/platform.mk | 1 | ||||
-rw-r--r-- | plat/imx/imx8m/imx8mn/imx8mn_bl31_setup.c | 14 | ||||
-rw-r--r-- | plat/imx/imx8m/imx8mn/include/platform_def.h | 4 | ||||
-rw-r--r-- | plat/imx/imx8m/imx8mn/platform.mk | 1 | ||||
-rw-r--r-- | plat/imx/imx8m/imx8mp/imx8mp_bl31_setup.c | 7 | ||||
-rw-r--r-- | plat/imx/imx8m/imx8mp/platform.mk | 1 | ||||
-rw-r--r-- | plat/imx/imx8m/include/imx8m_snvs.h | 12 |
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 |