diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2024-03-15 13:15:19 +0100 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2024-03-15 13:15:19 +0100 |
commit | 46149a0260cbe7ec86e7fabd83c6e68f1b900e54 (patch) | |
tree | a317ddfe8fe2d21bd5562d32622dc578508d617c /arch/arm/mach-imx/tzasc.c | |
parent | e4a37472999e8b8305cdcc77998514fae7c785d1 (diff) | |
parent | 4ff51eb1816dc3c79527c0dbc40f5c843ea74523 (diff) | |
download | barebox-46149a0260cbe7ec86e7fabd83c6e68f1b900e54.tar.gz barebox-46149a0260cbe7ec86e7fabd83c6e68f1b900e54.tar.xz |
Merge branch 'for-next/imx'
Diffstat (limited to 'arch/arm/mach-imx/tzasc.c')
-rw-r--r-- | arch/arm/mach-imx/tzasc.c | 47 |
1 files changed, 27 insertions, 20 deletions
diff --git a/arch/arm/mach-imx/tzasc.c b/arch/arm/mach-imx/tzasc.c index 9c71108c99..4cb4d7c5cf 100644 --- a/arch/arm/mach-imx/tzasc.c +++ b/arch/arm/mach-imx/tzasc.c @@ -1,44 +1,51 @@ // SPDX-License-Identifier: GPL-2.0-only +#include <mach/imx/generic.h> #include <mach/imx/tzasc.h> #include <linux/bitops.h> #include <mach/imx/imx8m-regs.h> #include <io.h> -#define GPR_TZASC_EN BIT(0) -#define GPR_TZASC_SWAP_ID BIT(1) -#define GPR_TZASC_EN_LOCK BIT(16) +#define GPR_TZASC_EN BIT(0) +#define GPR_TZASC_ID_SWAP_BYPASS BIT(1) +#define GPR_TZASC_EN_LOCK BIT(16) +#define GPR_TZASC_ID_SWAP_BYPASS_LOCK BIT(17) -static void enable_tzc380(bool bypass_id_swap) +#define MX8M_TZASC_REGION_ATTRIBUTES_0 (MX8M_TZASC_BASE_ADDR + 0x108) +#define MX8M_TZASC_REGION_ATTRIBUTES_0_SP GENMASK(31, 28) + +void imx8m_tzc380_init(void) { u32 __iomem *gpr = IOMEM(MX8M_IOMUXC_GPR_BASE_ADDR); /* Enable TZASC and lock setting */ setbits_le32(&gpr[10], GPR_TZASC_EN); setbits_le32(&gpr[10], GPR_TZASC_EN_LOCK); - if (bypass_id_swap) - setbits_le32(&gpr[10], BIT(1)); + + /* + * According to TRM, TZASC_ID_SWAP_BYPASS should be set in + * order to avoid AXI Bus errors when GPU is in use + */ + if (cpu_is_mx8mm() || cpu_is_mx8mn() || cpu_is_mx8mp()) + setbits_le32(&gpr[10], GPR_TZASC_ID_SWAP_BYPASS); + + /* + * imx8mn and imx8mp implements the lock bit for + * TZASC_ID_SWAP_BYPASS, enable it to lock settings + */ + if (cpu_is_mx8mn() || cpu_is_mx8mp()) + setbits_le32(&gpr[10], GPR_TZASC_ID_SWAP_BYPASS_LOCK); + /* * set Region 0 attribute to allow secure and non-secure * read/write permission. Found some masters like usb dwc3 * controllers can't work with secure memory. */ - writel(0xf0000000, MX8M_TZASC_BASE_ADDR + 0x108); -} - -void imx8mq_tzc380_init(void) -{ - enable_tzc380(false); -} - -void imx8mn_tzc380_init(void) __alias(imx8mm_tzc380_init); -void imx8mp_tzc380_init(void) __alias(imx8mm_tzc380_init); -void imx8mm_tzc380_init(void) -{ - enable_tzc380(true); + writel(MX8M_TZASC_REGION_ATTRIBUTES_0_SP, + MX8M_TZASC_REGION_ATTRIBUTES_0); } -bool tzc380_is_enabled(void) +bool imx8m_tzc380_is_enabled(void) { u32 __iomem *gpr = IOMEM(MX8M_IOMUXC_GPR_BASE_ADDR); |