diff mbox series

[6/6] nandbcb: read boot search count from fuse for imx8qxp

Message ID 20200505140404.27407-7-peng.fan@nxp.com
State New
Headers show
Series imx: nandbcb update | expand

Commit Message

Peng Fan May 5, 2020, 2:04 p.m. UTC
From: Han Xu <han.xu at nxp.com>

add support for imx8qxp to read boot search count from fuse in nandbcb

Signed-off-by: Han Xu <han.xu at nxp.com>
Signed-off-by: Peng Fan <peng.fan at nxp.com>
---
 arch/arm/mach-imx/cmd_nandbcb.c | 39 ++++++++++++++++++++++++++++++++++++++-
 1 file changed, 38 insertions(+), 1 deletion(-)

Comments

Stefano Babic May 11, 2020, 10:15 a.m. UTC | #1
> From: Han Xu <han.xu at nxp.com>
> add support for imx8qxp to read boot search count from fuse in nandbcb
> Signed-off-by: Han Xu <han.xu at nxp.com>
> Signed-off-by: Peng Fan <peng.fan at nxp.com>
Applied to u-boot-imx, master, thanks !

Best regards,
Stefano Babic
diff mbox series

Patch

diff --git a/arch/arm/mach-imx/cmd_nandbcb.c b/arch/arm/mach-imx/cmd_nandbcb.c
index ab12b1f1cf..94cae146ce 100644
--- a/arch/arm/mach-imx/cmd_nandbcb.c
+++ b/arch/arm/mach-imx/cmd_nandbcb.c
@@ -27,6 +27,7 @@ 
 #include <mxs_nand.h>
 #include <linux/mtd/mtd.h>
 #include <nand.h>
+#include <fuse.h>
 
 #include "../../../cmd/legacy-mtd-utils.h"
 
@@ -1260,6 +1261,35 @@  static bool check_fingerprint(void *data, int fingerprint)
 	return (*(int *)(data + off) == fingerprint);
 }
 
+static int fuse_to_search_count(u32 bank, u32 word, u32 mask, u32 off)
+{
+	int err;
+	u32 val;
+	int ret;
+
+	/* by default, the boot search count from fuse should be 2 */
+	err = fuse_read(bank, word, &val);
+	if (err)
+		return 2;
+
+	val = (val & mask) >> off;
+
+	switch (val) {
+		case 0:
+			ret = 2;
+			break;
+		case 1:
+		case 2:
+		case 3:
+			ret = 1 << val;
+			break;
+		default:
+			ret = 2;
+	}
+
+	return ret;
+}
+
 static int nandbcb_dump(struct boot_config *boot_cfg)
 {
 	int i;
@@ -1459,7 +1489,14 @@  static int do_nandbcb(cmd_tbl_t *cmdtp, int flag, int argc,
 		return CMD_RET_FAILURE;
 	}
 
-	/* TODO: set the boot search count if need to read from fuse */
+	if (plat_config.misc_flags & BT_SEARCH_CNT_FROM_FUSE) {
+		if (is_imx8qxp()) {
+			g_boot_search_count = fuse_to_search_count(0, 720,
+								   0xc0, 6);
+			printf("search count set to %d from fuse\n",
+			       g_boot_search_count);
+		}
+	}
 
 	cmd = argv[1];
 	--argc;