All of lore.kernel.org
 help / color / mirror / Atom feed
From: Rajesh Bhagat <rajesh.bhagat@nxp.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH 44/53] drivers: ifc: add support for for TFABOOT
Date: Wed,  3 Oct 2018 17:07:27 +0530	[thread overview]
Message-ID: <20181003113736.14981-45-rajesh.bhagat@nxp.com> (raw)
In-Reply-To: <20181003113736.14981-1-rajesh.bhagat@nxp.com>

From: Pankit Garg <pankit.garg@nxp.com>

Adds support for TFABOOT in IFC driver, requires to implement
the mappings at run time.

Defines init_early_memctl_regs and init_final_memctl_regs with
dynamic mapping for nor and nand boot.

Signed-off-by: Pankit Garg <pankit.garg@nxp.com>
Signed-off-by: Rajesh Bhagat <rajesh.bhagat@nxp.com>
---
 drivers/misc/fsl_ifc.c | 488 +++++++++++++++++++++++++++++------------
 include/fsl_ifc.h      |  17 ++
 2 files changed, 369 insertions(+), 136 deletions(-)

diff --git a/drivers/misc/fsl_ifc.c b/drivers/misc/fsl_ifc.c
index 7d66c3cf76..2e3b43356e 100644
--- a/drivers/misc/fsl_ifc.c
+++ b/drivers/misc/fsl_ifc.c
@@ -7,185 +7,401 @@
 #include <common.h>
 #include <fsl_ifc.h>
 
-void print_ifc_regs(void)
-{
-	int i, j;
-
-	printf("IFC Controller Registers\n");
-	for (i = 0; i < CONFIG_SYS_FSL_IFC_BANK_COUNT; i++) {
-		printf("CSPR%d:0x%08X\tAMASK%d:0x%08X\tCSOR%d:0x%08X\n",
-			i, get_ifc_cspr(i), i, get_ifc_amask(i),
-			i, get_ifc_csor(i));
-		for (j = 0; j < 4; j++)
-			printf("IFC_FTIM%d:0x%08X\n", j, get_ifc_ftim(i, j));
-	}
-}
-
-void init_early_memctl_regs(void)
-{
+struct ifc_regs ifc_cfg_default_boot[CONFIG_SYS_FSL_IFC_BANK_COUNT] = {
+        {
+		"cs0",
 #if defined(CONFIG_SYS_CSPR0) && defined(CONFIG_SYS_CSOR0)
-	set_ifc_ftim(IFC_CS0, IFC_FTIM0, CONFIG_SYS_CS0_FTIM0);
-	set_ifc_ftim(IFC_CS0, IFC_FTIM1, CONFIG_SYS_CS0_FTIM1);
-	set_ifc_ftim(IFC_CS0, IFC_FTIM2, CONFIG_SYS_CS0_FTIM2);
-	set_ifc_ftim(IFC_CS0, IFC_FTIM3, CONFIG_SYS_CS0_FTIM3);
-
-#ifndef CONFIG_A003399_NOR_WORKAROUND
+		CONFIG_SYS_CSPR0,
 #ifdef CONFIG_SYS_CSPR0_EXT
-	set_ifc_cspr_ext(IFC_CS0, CONFIG_SYS_CSPR0_EXT);
-#endif
+		CONFIG_SYS_CSPR0_EXT,
+#else
+		0,
+#endif
+#ifdef CONFIG_SYS_AMASK0
+		CONFIG_SYS_AMASK0,
+#else
+		0,
+#endif
+		CONFIG_SYS_CSOR0,
+		{
+			CONFIG_SYS_CS0_FTIM0,
+			CONFIG_SYS_CS0_FTIM1,
+			CONFIG_SYS_CS0_FTIM2,
+			CONFIG_SYS_CS0_FTIM3,
+		},
 #ifdef CONFIG_SYS_CSOR0_EXT
-	set_ifc_csor_ext(IFC_CS0, CONFIG_SYS_CSOR0_EXT);
+		CONFIG_SYS_CSOR0_EXT,
+#else
+		0,
+#endif
+#ifdef CONFIG_SYS_CSPR0_FINAL
+		CONFIG_SYS_CSPR0_FINAL,
+#else
+		0,
 #endif
-	set_ifc_cspr(IFC_CS0, CONFIG_SYS_CSPR0);
-	set_ifc_amask(IFC_CS0, CONFIG_SYS_AMASK0);
-	set_ifc_csor(IFC_CS0, CONFIG_SYS_CSOR0);
+#ifdef CONFIG_SYS_AMASK0_FINAL
+		CONFIG_SYS_AMASK0_FINAL,
+#else
+		0,
 #endif
 #endif
+	},
 
+#if CONFIG_SYS_FSL_IFC_BANK_COUNT >= 2
+	{
+		"cs1",
+#if defined(CONFIG_SYS_CSPR1) && defined(CONFIG_SYS_CSOR1)
+		CONFIG_SYS_CSPR1,
 #ifdef CONFIG_SYS_CSPR1_EXT
-	set_ifc_cspr_ext(IFC_CS1, CONFIG_SYS_CSPR1_EXT);
-#endif
+		CONFIG_SYS_CSPR1_EXT,
+#else
+		0,
+#endif
+#ifdef CONFIG_SYS_AMASK1
+		CONFIG_SYS_AMASK1,
+#else
+		0,
+#endif
+		CONFIG_SYS_CSOR1,
+		{
+			CONFIG_SYS_CS1_FTIM0,
+			CONFIG_SYS_CS1_FTIM1,
+			CONFIG_SYS_CS1_FTIM2,
+			CONFIG_SYS_CS1_FTIM3,
+		},
 #ifdef CONFIG_SYS_CSOR1_EXT
-	set_ifc_csor_ext(IFC_CS1, CONFIG_SYS_CSOR1_EXT);
+		CONFIG_SYS_CSOR1_EXT,
+#else
+		0,
 #endif
-#if defined(CONFIG_SYS_CSPR1) && defined(CONFIG_SYS_CSOR1)
-	set_ifc_ftim(IFC_CS1, IFC_FTIM0, CONFIG_SYS_CS1_FTIM0);
-	set_ifc_ftim(IFC_CS1, IFC_FTIM1, CONFIG_SYS_CS1_FTIM1);
-	set_ifc_ftim(IFC_CS1, IFC_FTIM2, CONFIG_SYS_CS1_FTIM2);
-	set_ifc_ftim(IFC_CS1, IFC_FTIM3, CONFIG_SYS_CS1_FTIM3);
-
-	set_ifc_csor(IFC_CS1, CONFIG_SYS_CSOR1);
-	set_ifc_amask(IFC_CS1, CONFIG_SYS_AMASK1);
-	set_ifc_cspr(IFC_CS1, CONFIG_SYS_CSPR1);
+#ifdef CONFIG_SYS_CSPR1_FINAL
+		CONFIG_SYS_CSPR1_FINAL,
+#else
+		0,
+#endif
+#ifdef CONFIG_SYS_AMASK1_FINAL
+		CONFIG_SYS_AMASK1_FINAL,
+#else
+		0,
+#endif
+#endif
+	},
 #endif
 
+#if CONFIG_SYS_FSL_IFC_BANK_COUNT >= 3
+	{
+		"cs2",
+#if defined(CONFIG_SYS_CSPR2) && defined(CONFIG_SYS_CSOR2)
+		CONFIG_SYS_CSPR2,
 #ifdef CONFIG_SYS_CSPR2_EXT
-	set_ifc_cspr_ext(IFC_CS2, CONFIG_SYS_CSPR2_EXT);
-#endif
+		CONFIG_SYS_CSPR2_EXT,
+#else
+		0,
+#endif
+#ifdef CONFIG_SYS_AMASK2
+		CONFIG_SYS_AMASK2,
+#else
+		0,
+#endif
+		CONFIG_SYS_CSOR2,
+		{
+			CONFIG_SYS_CS2_FTIM0,
+			CONFIG_SYS_CS2_FTIM1,
+			CONFIG_SYS_CS2_FTIM2,
+			CONFIG_SYS_CS2_FTIM3,
+		},
 #ifdef CONFIG_SYS_CSOR2_EXT
-	set_ifc_csor_ext(IFC_CS2, CONFIG_SYS_CSOR2_EXT);
+		CONFIG_SYS_CSOR2_EXT,
+#else
+		0,
+#endif
+#ifdef CONFIG_SYS_CSPR2_FINAL
+		CONFIG_SYS_CSPR2_FINAL,
+#else
+		0,
+#endif
+#ifdef CONFIG_SYS_AMASK2_FINAL
+		CONFIG_SYS_AMASK2_FINAL,
+#else
+		0,
 #endif
-#if defined(CONFIG_SYS_CSPR2) && defined(CONFIG_SYS_CSOR2)
-	set_ifc_ftim(IFC_CS2, IFC_FTIM0, CONFIG_SYS_CS2_FTIM0);
-	set_ifc_ftim(IFC_CS2, IFC_FTIM1, CONFIG_SYS_CS2_FTIM1);
-	set_ifc_ftim(IFC_CS2, IFC_FTIM2, CONFIG_SYS_CS2_FTIM2);
-	set_ifc_ftim(IFC_CS2, IFC_FTIM3, CONFIG_SYS_CS2_FTIM3);
-
-	set_ifc_csor(IFC_CS2, CONFIG_SYS_CSOR2);
-	set_ifc_amask(IFC_CS2, CONFIG_SYS_AMASK2);
-	set_ifc_cspr(IFC_CS2, CONFIG_SYS_CSPR2);
+#endif
+	},
 #endif
 
+#if CONFIG_SYS_FSL_IFC_BANK_COUNT >= 4
+	{
+		"cs3",
+#if defined(CONFIG_SYS_CSPR3) && defined(CONFIG_SYS_CSOR3)
+		CONFIG_SYS_CSPR3,
 #ifdef CONFIG_SYS_CSPR3_EXT
-	set_ifc_cspr_ext(IFC_CS3, CONFIG_SYS_CSPR3_EXT);
-#endif
+		CONFIG_SYS_CSPR3_EXT,
+#else
+		0,
+#endif
+#ifdef CONFIG_SYS_AMASK3
+		CONFIG_SYS_AMASK3,
+#else
+		0,
+#endif
+		CONFIG_SYS_CSOR3,
+		{
+			CONFIG_SYS_CS3_FTIM0,
+			CONFIG_SYS_CS3_FTIM1,
+			CONFIG_SYS_CS3_FTIM2,
+			CONFIG_SYS_CS3_FTIM3,
+		},
 #ifdef CONFIG_SYS_CSOR3_EXT
-	set_ifc_csor_ext(IFC_CS3, CONFIG_SYS_CSOR3_EXT);
+		CONFIG_SYS_CSOR3_EXT,
+#else
+		0,
 #endif
-#if defined(CONFIG_SYS_CSPR3) && defined(CONFIG_SYS_CSOR3)
-	set_ifc_ftim(IFC_CS3, IFC_FTIM0, CONFIG_SYS_CS3_FTIM0);
-	set_ifc_ftim(IFC_CS3, IFC_FTIM1, CONFIG_SYS_CS3_FTIM1);
-	set_ifc_ftim(IFC_CS3, IFC_FTIM2, CONFIG_SYS_CS3_FTIM2);
-	set_ifc_ftim(IFC_CS3, IFC_FTIM3, CONFIG_SYS_CS3_FTIM3);
-
-	set_ifc_cspr(IFC_CS3, CONFIG_SYS_CSPR3);
-	set_ifc_amask(IFC_CS3, CONFIG_SYS_AMASK3);
-	set_ifc_csor(IFC_CS3, CONFIG_SYS_CSOR3);
+#ifdef CONFIG_SYS_CSPR3_FINAL
+		CONFIG_SYS_CSPR3_FINAL,
+#else
+		0,
+#endif
+#ifdef CONFIG_SYS_AMASK3_FINAL
+		CONFIG_SYS_AMASK3_FINAL,
+#else
+		0,
+#endif
+#endif
+	},
 #endif
 
+#if CONFIG_SYS_FSL_IFC_BANK_COUNT >= 5
+	{
+		"cs4",
+#if defined(CONFIG_SYS_CSPR4) && defined(CONFIG_SYS_CSOR4)
+		CONFIG_SYS_CSPR4,
 #ifdef CONFIG_SYS_CSPR4_EXT
-	set_ifc_cspr_ext(IFC_CS4, CONFIG_SYS_CSPR4_EXT);
-#endif
+		CONFIG_SYS_CSPR4_EXT,
+#else
+		0,
+#endif
+#ifdef CONFIG_SYS_AMASK4
+		CONFIG_SYS_AMASK4,
+#else
+		0,
+#endif
+		CONFIG_SYS_CSOR4,
+		{
+			CONFIG_SYS_CS4_FTIM0,
+			CONFIG_SYS_CS4_FTIM1,
+			CONFIG_SYS_CS4_FTIM2,
+			CONFIG_SYS_CS4_FTIM3,
+		},
 #ifdef CONFIG_SYS_CSOR4_EXT
-	set_ifc_csor_ext(IFC_CS4, CONFIG_SYS_CSOR4_EXT);
+		CONFIG_SYS_CSOR4_EXT,
+#else
+		0,
 #endif
-#if defined(CONFIG_SYS_CSPR4) && defined(CONFIG_SYS_CSOR4)
-	set_ifc_ftim(IFC_CS4, IFC_FTIM0, CONFIG_SYS_CS4_FTIM0);
-	set_ifc_ftim(IFC_CS4, IFC_FTIM1, CONFIG_SYS_CS4_FTIM1);
-	set_ifc_ftim(IFC_CS4, IFC_FTIM2, CONFIG_SYS_CS4_FTIM2);
-	set_ifc_ftim(IFC_CS4, IFC_FTIM3, CONFIG_SYS_CS4_FTIM3);
-
-	set_ifc_cspr(IFC_CS4, CONFIG_SYS_CSPR4);
-	set_ifc_amask(IFC_CS4, CONFIG_SYS_AMASK4);
-	set_ifc_csor(IFC_CS4, CONFIG_SYS_CSOR4);
+#ifdef CONFIG_SYS_CSPR4_FINAL
+		CONFIG_SYS_CSPR4_FINAL,
+#else
+		0,
+#endif
+#ifdef CONFIG_SYS_AMASK4_FINAL
+		CONFIG_SYS_AMASK4_FINAL,
+#else
+		0,
+#endif
+#endif
+	},
 #endif
 
+#if CONFIG_SYS_FSL_IFC_BANK_COUNT >= 6
+	{
+		"cs5",
+#if defined(CONFIG_SYS_CSPR5) && defined(CONFIG_SYS_CSOR5)
+		CONFIG_SYS_CSPR5,
 #ifdef CONFIG_SYS_CSPR5_EXT
-	set_ifc_cspr_ext(IFC_CS5, CONFIG_SYS_CSPR5_EXT);
-#endif
+		CONFIG_SYS_CSPR5_EXT,
+#else
+		0,
+#endif
+#ifdef CONFIG_SYS_AMASK5
+		CONFIG_SYS_AMASK5,
+#else
+		0,
+#endif
+		CONFIG_SYS_CSOR5,
+		{
+			CONFIG_SYS_CS5_FTIM0,
+			CONFIG_SYS_CS5_FTIM1,
+			CONFIG_SYS_CS5_FTIM2,
+			CONFIG_SYS_CS5_FTIM3,
+		},
 #ifdef CONFIG_SYS_CSOR5_EXT
-	set_ifc_csor_ext(IFC_CS5, CONFIG_SYS_CSOR5_EXT);
+		CONFIG_SYS_CSOR5_EXT,
+#else
+		0,
 #endif
-#if defined(CONFIG_SYS_CSPR5) && defined(CONFIG_SYS_CSOR5)
-	set_ifc_ftim(IFC_CS5, IFC_FTIM0, CONFIG_SYS_CS5_FTIM0);
-	set_ifc_ftim(IFC_CS5, IFC_FTIM1, CONFIG_SYS_CS5_FTIM1);
-	set_ifc_ftim(IFC_CS5, IFC_FTIM2, CONFIG_SYS_CS5_FTIM2);
-	set_ifc_ftim(IFC_CS5, IFC_FTIM3, CONFIG_SYS_CS5_FTIM3);
-
-	set_ifc_cspr(IFC_CS5, CONFIG_SYS_CSPR5);
-	set_ifc_amask(IFC_CS5, CONFIG_SYS_AMASK5);
-	set_ifc_csor(IFC_CS5, CONFIG_SYS_CSOR5);
+#ifdef CONFIG_SYS_CSPR5_FINAL
+		CONFIG_SYS_CSPR5_FINAL,
+#else
+		0,
+#endif
+#ifdef CONFIG_SYS_AMASK5_FINAL
+		CONFIG_SYS_AMASK5_FINAL,
+#else
+		0,
+#endif
+#endif
+	},
 #endif
 
+#if CONFIG_SYS_FSL_IFC_BANK_COUNT >= 7
+	{
+		"cs6",
+#if defined(CONFIG_SYS_CSPR6) && defined(CONFIG_SYS_CSOR6)
+		CONFIG_SYS_CSPR6,
 #ifdef CONFIG_SYS_CSPR6_EXT
-	set_ifc_cspr_ext(IFC_CS6, CONFIG_SYS_CSPR6_EXT);
-#endif
+		CONFIG_SYS_CSPR6_EXT,
+#else
+		0,
+#endif
+#ifdef CONFIG_SYS_AMASK6
+		CONFIG_SYS_AMASK6,
+#else
+		0,
+#endif
+		CONFIG_SYS_CSOR6,
+		{
+			CONFIG_SYS_CS6_FTIM0,
+			CONFIG_SYS_CS6_FTIM1,
+			CONFIG_SYS_CS6_FTIM2,
+			CONFIG_SYS_CS6_FTIM3,
+		},
 #ifdef CONFIG_SYS_CSOR6_EXT
-	set_ifc_csor_ext(IFC_CS6, CONFIG_SYS_CSOR6_EXT);
+		CONFIG_SYS_CSOR6_EXT,
+#else
+		0,
 #endif
-#if defined(CONFIG_SYS_CSPR6) && defined(CONFIG_SYS_CSOR6)
-	set_ifc_ftim(IFC_CS6, IFC_FTIM0, CONFIG_SYS_CS6_FTIM0);
-	set_ifc_ftim(IFC_CS6, IFC_FTIM1, CONFIG_SYS_CS6_FTIM1);
-	set_ifc_ftim(IFC_CS6, IFC_FTIM2, CONFIG_SYS_CS6_FTIM2);
-	set_ifc_ftim(IFC_CS6, IFC_FTIM3, CONFIG_SYS_CS6_FTIM3);
-
-	set_ifc_cspr(IFC_CS6, CONFIG_SYS_CSPR6);
-	set_ifc_amask(IFC_CS6, CONFIG_SYS_AMASK6);
-	set_ifc_csor(IFC_CS6, CONFIG_SYS_CSOR6);
+#ifdef CONFIG_SYS_CSPR6_FINAL
+		CONFIG_SYS_CSPR6_FINAL,
+#else
+		0,
+#endif
+#ifdef CONFIG_SYS_AMASK6_FINAL
+		CONFIG_SYS_AMASK6_FINAL,
+#else
+		0,
+#endif
+#endif
+	},
 #endif
 
+#if CONFIG_SYS_FSL_IFC_BANK_COUNT >= 8
+	{
+		"cs7",
+#if defined(CONFIG_SYS_CSPR7) && defined(CONFIG_SYS_CSOR7)
+		CONFIG_SYS_CSPR7,
 #ifdef CONFIG_SYS_CSPR7_EXT
-	set_ifc_cspr_ext(IFC_CS7, CONFIG_SYS_CSPR7_EXT);
+		CONFIG_SYS_CSPR7_EXT,
+#else
+		0,
 #endif
-#ifdef CONFIG_SYS_CSOR7_EXT
-	set_ifc_csor_ext(IFC_CS7, CONFIG_SYS_CSOR7_EXT);
+#ifdef CONFIG_SYS_AMASK7
+		CONFIG_SYS_AMASK7,
+#else
+		0,
 #endif
-#if defined(CONFIG_SYS_CSPR7) && defined(CONFIG_SYS_CSOR7)
-	set_ifc_ftim(IFC_CS7, IFC_FTIM0, CONFIG_SYS_CS7_FTIM0);
-	set_ifc_ftim(IFC_CS7, IFC_FTIM1, CONFIG_SYS_CS7_FTIM1);
-	set_ifc_ftim(IFC_CS7, IFC_FTIM2, CONFIG_SYS_CS7_FTIM2);
-	set_ifc_ftim(IFC_CS7, IFC_FTIM3, CONFIG_SYS_CS7_FTIM3);
+		CONFIG_SYS_CSOR7,
+#ifdef CONFIG_SYS_CSOR7_EXT
+		CONFIG_SYS_CSOR7_EXT,
+#else
+		0,
+#endif
+		{
+			CONFIG_SYS_CS7_FTIM0,
+			CONFIG_SYS_CS7_FTIM1,
+			CONFIG_SYS_CS7_FTIM2,
+			CONFIG_SYS_CS7_FTIM3,
+		},
+#ifdef CONFIG_SYS_CSPR7_FINAL
+		CONFIG_SYS_CSPR7_FINAL,
+#else
+		0,
+#endif
+#ifdef CONFIG_SYS_AMASK7_FINAL
+		CONFIG_SYS_AMASK7_FINAL,
+#else
+		0,
+#endif
+#endif
+	},
+#endif
+};
 
-	set_ifc_cspr(IFC_CS7, CONFIG_SYS_CSPR7);
-	set_ifc_amask(IFC_CS7, CONFIG_SYS_AMASK7);
-	set_ifc_csor(IFC_CS7, CONFIG_SYS_CSOR7);
-#endif
+__weak void ifc_cfg_boot_info(struct ifc_regs_info *regs_info)
+{
+	regs_info->regs = ifc_cfg_default_boot;
+	regs_info->cs_size = CONFIG_SYS_FSL_IFC_BANK_COUNT;
+}
+
+void print_ifc_regs(void)
+{
+	int i, j;
+
+	printf("IFC Controller Registers\n");
+	for (i = 0; i < CONFIG_SYS_FSL_IFC_BANK_COUNT; i++) {
+		printf("CSPR%d:0x%08X\tAMASK%d:0x%08X\tCSOR%d:0x%08X\n",
+			i, get_ifc_cspr(i), i, get_ifc_amask(i),
+			i, get_ifc_csor(i));
+		for (j = 0; j < 4; j++)
+			printf("IFC_FTIM%d:0x%08X\n", j, get_ifc_ftim(i, j));
+	}
+}
+
+void init_early_memctl_regs(void)
+{
+	int i, j;
+	struct ifc_regs *regs;
+	struct ifc_regs_info regs_info = {0};
+
+	ifc_cfg_boot_info(&regs_info);
+	regs = regs_info.regs;
+
+	for (i = 0 ; i < regs_info.cs_size; i++) {
+		if (regs[i].pr && (regs[i].pr & CSPR_V)) {
+			/* skip setting cspr/csor_ext in below condition */
+			if (!(CONFIG_IS_ENABLED(A003399_NOR_WORKAROUND) && \
+				i == 0 && \
+				((regs[0].pr & CSPR_MSEL) == CSPR_MSEL_NOR))) {
+				if (regs[i].pr_ext)
+					set_ifc_cspr_ext(i, regs[i].pr_ext);
+				if (regs[i].or_ext)
+					set_ifc_csor_ext(i, regs[i].or_ext);
+			}
+
+			for (j = 0; j < ARRAY_SIZE(regs->ftim); j++)
+				set_ifc_ftim(i, j, regs[i].ftim[j]);
+
+			set_ifc_csor(i, regs[i].or);
+			set_ifc_amask(i, regs[i].amask);
+			set_ifc_cspr(i, regs[i].pr);
+		}
+	}
 }
 
 void init_final_memctl_regs(void)
 {
-#ifdef CONFIG_SYS_CSPR0_FINAL
-	set_ifc_cspr(IFC_CS0, CONFIG_SYS_CSPR0_FINAL);
-#endif
-#ifdef CONFIG_SYS_AMASK0_FINAL
-	set_ifc_amask(IFC_CS0, CONFIG_SYS_AMASK0);
-#endif
-#ifdef CONFIG_SYS_CSPR1_FINAL
-	set_ifc_cspr(IFC_CS1, CONFIG_SYS_CSPR1_FINAL);
-#endif
-#ifdef CONFIG_SYS_AMASK1_FINAL
-	set_ifc_amask(IFC_CS1, CONFIG_SYS_AMASK1_FINAL);
-#endif
-#ifdef CONFIG_SYS_CSPR2_FINAL
-	set_ifc_cspr(IFC_CS2, CONFIG_SYS_CSPR2_FINAL);
-#endif
-#ifdef CONFIG_SYS_AMASK2_FINAL
-	set_ifc_amask(IFC_CS2, CONFIG_SYS_AMASK2);
-#endif
-#ifdef CONFIG_SYS_CSPR3_FINAL
-	set_ifc_cspr(IFC_CS3, CONFIG_SYS_CSPR3_FINAL);
-#endif
-#ifdef CONFIG_SYS_AMASK3_FINAL
-	set_ifc_amask(IFC_CS3, CONFIG_SYS_AMASK3);
-#endif
+	int i;
+	struct ifc_regs *regs;
+	struct ifc_regs_info regs_info;
+
+	ifc_cfg_boot_info(&regs_info);
+	regs = regs_info.regs;
+
+	for (i = 0 ; i < regs_info.cs_size && i < ARRAY_SIZE(regs->ftim); i++) {
+		if (!(regs[i].pr_final & CSPR_V))
+			continue;
+		if (regs[i].pr_final)
+			set_ifc_cspr(i, regs[i].pr_final);
+		if (regs[i].amask_final)
+			set_ifc_amask(i, (i == 1) ? regs[i].amask_final :
+								regs[i].amask);
+	}
 }
diff --git a/include/fsl_ifc.h b/include/fsl_ifc.h
index 17697c7341..c42affcf1f 100644
--- a/include/fsl_ifc.h
+++ b/include/fsl_ifc.h
@@ -1031,6 +1031,23 @@ struct fsl_ifc {
 	struct fsl_ifc_runtime *rregs;
 };
 
+struct ifc_regs {
+	const char *name;
+	uint32_t pr;
+	uint32_t pr_ext;
+	uint32_t amask;
+	uint32_t or;
+	uint32_t ftim[4];
+	uint32_t or_ext;
+	uint32_t pr_final;
+	uint32_t amask_final;
+};
+
+struct ifc_regs_info {
+	struct ifc_regs *regs;
+	uint32_t cs_size;
+};
+
 #ifdef CONFIG_SYS_FSL_ERRATUM_IFC_A002769
 #undef CSPR_MSEL_NOR
 #define CSPR_MSEL_NOR	CSPR_MSEL_GPCM
-- 
2.17.1

  parent reply	other threads:[~2018-10-03 11:37 UTC|newest]

Thread overview: 76+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-10-03 11:36 [U-Boot] [PATCH 00/53] TF-A Boot support for NXP Chassis 2 platforms Rajesh Bhagat
2018-10-03 11:36 ` [U-Boot] [PATCH 01/53] move data structure out of cpu.h Rajesh Bhagat
2018-10-03 11:36 ` [U-Boot] [PATCH 02/53] env: allow flash and nand env driver to compile together Rajesh Bhagat
2018-10-03 11:36 ` [U-Boot] [PATCH 03/53] env: sf: define API to override sf environment address Rajesh Bhagat
2018-10-03 11:36 ` [U-Boot] [PATCH 04/53] env: nand: remove unnecessary env_ptr definition Rajesh Bhagat
2018-10-03 11:36 ` [U-Boot] [PATCH 05/53] armv8: layerscape: add TFABOOT config option Rajesh Bhagat
2018-10-03 11:36 ` [U-Boot] [PATCH 06/53] armv8: fsl-layerscape: identify boot source from PORSR register Rajesh Bhagat
2018-10-03 11:36 ` [U-Boot] [PATCH 07/53] armv8: ls1046ardb: Add TFABOOT defconfig Rajesh Bhagat
2018-10-03 16:12   ` York Sun
2018-10-04 11:29     ` Rajesh Bhagat
2018-10-03 11:36 ` [U-Boot] [PATCH 08/53] armv8: ls1046aqds: " Rajesh Bhagat
2018-10-03 11:36 ` [U-Boot] [PATCH 09/53] armv8: ls1046a: make environment address and size common Rajesh Bhagat
2018-10-03 16:13   ` York Sun
2018-10-04 11:29     ` Rajesh Bhagat
2018-10-03 11:36 ` [U-Boot] [PATCH 10/53] armv8: ls1043ardb: Add TFABOOT defconfig Rajesh Bhagat
2018-10-03 16:16   ` York Sun
2018-10-04 11:30     ` Rajesh Bhagat
2018-10-03 11:36 ` [U-Boot] [PATCH 11/53] armv8: ls1043aqds: " Rajesh Bhagat
2018-10-03 11:36 ` [U-Boot] [PATCH 12/53] armv8: ls1043a: make environment address and size common Rajesh Bhagat
2018-10-03 11:36 ` [U-Boot] [PATCH 13/53] armv8: ls1043aqds: define environment address for QSPI boot Rajesh Bhagat
2018-10-03 16:17   ` York Sun
2018-10-04 11:30     ` Rajesh Bhagat
2018-10-03 11:36 ` [U-Boot] [PATCH 14/53] armv8: ls1046aqds: " Rajesh Bhagat
2018-10-03 11:36 ` [U-Boot] [PATCH 15/53] net: fm: add TFABOOT support Rajesh Bhagat
2018-10-03 16:18   ` York Sun
2018-10-04 11:30     ` Rajesh Bhagat
2018-10-03 11:36 ` [U-Boot] [PATCH 16/53] drivers: qe: " Rajesh Bhagat
2018-10-03 16:19   ` York Sun
2018-10-04 11:30     ` Rajesh Bhagat
2018-10-03 11:37 ` [U-Boot] [PATCH 17/53] armv8: ls1046a: make FMAN address common Rajesh Bhagat
2018-10-03 11:37 ` [U-Boot] [PATCH 18/53] armv8: ls1043a: make FMAN and QE " Rajesh Bhagat
2018-10-03 16:21   ` York Sun
2018-10-04 11:30     ` Rajesh Bhagat
2018-10-03 11:37 ` [U-Boot] [PATCH 19/53] armv8: fsl-layerscape: bootcmd identification for TFABOOT Rajesh Bhagat
2018-10-03 16:24   ` York Sun
2018-10-04 11:30     ` Rajesh Bhagat
2018-10-03 11:37 ` [U-Boot] [PATCH 20/53] armv8: ls1046a: define BOOTCOMMAND " Rajesh Bhagat
2018-10-03 16:28   ` York Sun
2018-10-04 11:31     ` Rajesh Bhagat
2018-10-03 11:37 ` [U-Boot] [PATCH 21/53] armv8: ls1043a: " Rajesh Bhagat
2018-10-03 11:37 ` [U-Boot] [PATCH 22/53] armv8: ls1012ardb: Add TFABOOT defconfig Rajesh Bhagat
2018-10-03 11:37 ` [U-Boot] [PATCH 23/53] armv8: ls1012aqds: " Rajesh Bhagat
2018-10-03 11:37 ` [U-Boot] [PATCH 24/53] armv8: ls1012a: update environment address for TFABOOT Rajesh Bhagat
2018-10-03 11:37 ` [U-Boot] [PATCH 25/53] armv8: ls1012a: define BOOTCOMMAND " Rajesh Bhagat
2018-10-03 11:37 ` [U-Boot] [PATCH 26/53] armv8: layerscape: remove EL3 specific erratas " Rajesh Bhagat
2018-10-03 16:31   ` York Sun
2018-10-04 11:31     ` Rajesh Bhagat
2018-10-03 11:37 ` [U-Boot] [PATCH 27/53] armv8: sec_firmware: return job ring status as true in TFABOOT Rajesh Bhagat
2018-10-03 11:37 ` [U-Boot] [PATCH 28/53] armv8: layerscape: secure boot support for environment selection Rajesh Bhagat
2018-10-03 11:37 ` [U-Boot] [PATCH 29/53] armv8: layerscape: add SMC calls for DDR size and bank info Rajesh Bhagat
2018-10-03 16:33   ` York Sun
2018-10-04 11:31     ` Rajesh Bhagat
2018-10-03 11:37 ` [U-Boot] [PATCH 30/53] armv8: layerscape: skip OCRAM init for TFABOOT Rajesh Bhagat
2018-10-03 11:37 ` [U-Boot] [PATCH 31/53] armv8: ls1043ardb: Add TFABOOT defconfig for secure boot Rajesh Bhagat
2018-10-03 11:37 ` [U-Boot] [PATCH 32/53] armv8: ls1043aqds: " Rajesh Bhagat
2018-10-03 11:37 ` [U-Boot] [PATCH 33/53] armv8: ls1046ardb: " Rajesh Bhagat
2018-10-03 11:37 ` [U-Boot] [PATCH 34/53] armv8: ls1046aqds: " Rajesh Bhagat
2018-10-03 11:37 ` [U-Boot] [PATCH 35/53] armv8: ls1012ardb: " Rajesh Bhagat
2018-10-03 11:37 ` [U-Boot] [PATCH 36/53] armv8: ls1012aqds: " Rajesh Bhagat
2018-10-03 11:37 ` [U-Boot] [PATCH 37/53] armv8: ls1012ardb: Make U-Boot EL2 safe Rajesh Bhagat
2018-10-03 11:37 ` [U-Boot] [PATCH 38/53] armv8: ls1012aqds: " Rajesh Bhagat
2018-10-03 11:37 ` [U-Boot] [PATCH 39/53] armv8: layerscape: Enable routing SError exception Rajesh Bhagat
2018-10-03 11:37 ` [U-Boot] [PATCH 40/53] armv8: fsl-layerscape: change tlb base from OCRAM to DDR in EL < 3 Rajesh Bhagat
2018-10-03 11:37 ` [U-Boot] [PATCH 41/53] armv8: ls1012afrwy: correct environment offset Rajesh Bhagat
2018-10-03 11:37 ` [U-Boot] [PATCH 42/53] armv8: sec_firmware: change el2_to_aarch32 SMC ID Rajesh Bhagat
2018-10-03 11:37 ` [U-Boot] [PATCH 43/53] driver/ifc: replace __ilog2 with LOG2 macro Rajesh Bhagat
2018-10-03 11:37 ` Rajesh Bhagat [this message]
2018-10-03 11:37 ` [U-Boot] [PATCH 45/53] armv8: ls1046aqds: make IFC params common and dynamic Rajesh Bhagat
2018-10-03 11:37 ` [U-Boot] [PATCH 46/53] armv8: ls1043ardb: " Rajesh Bhagat
2018-10-03 11:37 ` [U-Boot] [PATCH 47/53] armv8: ls1043aqds: " Rajesh Bhagat
2018-10-03 11:37 ` [U-Boot] [PATCH 48/53] armv8: ls1012a: fix ls1012aqds secure boot compilation Rajesh Bhagat
2018-10-03 11:37 ` [U-Boot] [PATCH 49/53] armv8: fsl-layerscape: Update parsing boot source Rajesh Bhagat
2018-10-03 11:37 ` [U-Boot] [PATCH 50/53] armv8: ls1043aqds: add i2c QIXIS support for TFABOOT Rajesh Bhagat
2018-10-03 11:37 ` [U-Boot] [PATCH 51/53] armv8: ls1046aqds: " Rajesh Bhagat
2018-10-03 11:37 ` [U-Boot] [PATCH 52/53] armv8: fsl-layerscape: add support of MC framework for TFA Rajesh Bhagat
2018-10-03 11:37 ` [U-Boot] [PATCH 53/53] armv8: skip setenv if gd->env_addr is not default env Rajesh Bhagat

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20181003113736.14981-45-rajesh.bhagat@nxp.com \
    --to=rajesh.bhagat@nxp.com \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.