summaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-imx
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm/mach-imx')
-rw-r--r--arch/arm/mach-imx/Kconfig10
-rw-r--r--arch/arm/mach-imx/boot.c43
-rw-r--r--arch/arm/mach-imx/esdctl-v4.c3
-rw-r--r--arch/arm/mach-imx/esdctl.c3
-rw-r--r--arch/arm/mach-imx/imx-bbu-external-nand.c3
-rw-r--r--arch/arm/mach-imx/imx-bbu-internal.c3
-rw-r--r--arch/arm/mach-imx/include/mach/habv4-imx6-gencsf.h2
-rw-r--r--arch/arm/mach-imx/include/mach/habv4-imx8-gencsf.h2
-rw-r--r--arch/arm/mach-imx/include/mach/iim.h3
-rw-r--r--arch/arm/mach-imx/include/mach/imx25-regs.h3
-rw-r--r--arch/arm/mach-imx/include/mach/imx31-regs.h3
-rw-r--r--arch/arm/mach-imx/include/mach/imx35-regs.h3
-rw-r--r--arch/arm/mach-imx/include/mach/imx6.h4
13 files changed, 51 insertions, 34 deletions
diff --git a/arch/arm/mach-imx/Kconfig b/arch/arm/mach-imx/Kconfig
index 072c659008..6dd5cb2aca 100644
--- a/arch/arm/mach-imx/Kconfig
+++ b/arch/arm/mach-imx/Kconfig
@@ -845,6 +845,16 @@ config HAB_CERTS_ENV
CONFIG_HABV4_CSF_CRT_PEM
CONFIG_HABV4_IMG_CRT_PEM
+config HABV4_SRK_INDEX
+ depends on HABV4
+ int "SRK index"
+ default 0
+ help
+ Select the Super Root Key used in the Command Sequence File to sign
+ the CSF binary. This should only be changed if a previous key was
+ revoked and another key needs to be used. For HABV4 the Index is in
+ the range from 0 to 3.
+
if HABV4 && !HAB_CERTS_ENV
config HABV4_TABLE_BIN
diff --git a/arch/arm/mach-imx/boot.c b/arch/arm/mach-imx/boot.c
index 7bce1c710c..ef868301cd 100644
--- a/arch/arm/mach-imx/boot.c
+++ b/arch/arm/mach-imx/boot.c
@@ -31,6 +31,7 @@
#include <mach/imx8mq-regs.h>
#include <mach/vf610-regs.h>
#include <mach/imx8mq.h>
+#include <mach/imx6.h>
static void
@@ -320,10 +321,13 @@ void imx53_boot_save_loc(void)
#define IMX6_SRC_SBMR1 0x04
#define IMX6_SRC_SBMR2 0x1c
+#define IMX6_SRC_GPR9 0x40
+#define IMX6_SRC_GPR10 0x44
#define IMX6_BMOD_SERIAL 0b01
#define IMX6_BMOD_RESERVED 0b11
#define IMX6_BMOD_FUSES 0b00
#define BT_FUSE_SEL BIT(4)
+#define GPR10_BOOT_FROM_GPR9 BIT(28)
static bool imx6_bootsource_reserved(uint32_t sbmr2)
{
@@ -342,6 +346,13 @@ static bool imx6_bootsource_serial(uint32_t sbmr2)
!(sbmr2 & BT_FUSE_SEL));
}
+static bool imx6_bootsource_serial_forced(uint32_t bootmode)
+{
+ if (cpu_mx6_is_mx6ul() || cpu_mx6_is_mx6ull())
+ return bootmode == 2;
+ return bootmode == 1;
+}
+
static int __imx6_bootsource_serial_rom(uint32_t r)
{
return FIELD_GET(BOOT_CFG4(2, 0), r);
@@ -388,37 +399,53 @@ static int imx6_boot_instance_mmc(uint32_t r)
return FIELD_GET(BOOT_CFG2(4, 3), r);
}
+static u32 imx6_get_src_boot_mode(void __iomem *src_base)
+{
+ if (readl(src_base + IMX6_SRC_GPR10) & GPR10_BOOT_FROM_GPR9)
+ return readl(src_base + IMX6_SRC_GPR9);
+
+ return readl(src_base + IMX6_SRC_SBMR1);
+}
+
void imx6_get_boot_source(enum bootsource *src, int *instance)
{
void __iomem *src_base = IOMEM(MX6_SRC_BASE_ADDR);
- uint32_t sbmr1 = readl(src_base + IMX6_SRC_SBMR1);
uint32_t sbmr2 = readl(src_base + IMX6_SRC_SBMR2);
+ uint32_t bootmode, bootsrc;
+
+ bootmode = imx6_get_src_boot_mode(src_base);
if (imx6_bootsource_reserved(sbmr2))
return;
- if (imx6_bootsource_serial(sbmr2)) {
+ bootsrc = imx53_bootsource_internal(bootmode);
+
+ if (imx6_bootsource_serial(sbmr2) ||
+ imx6_bootsource_serial_forced(bootsrc)) {
*src = BOOTSOURCE_SERIAL;
return;
}
- switch (imx53_bootsource_internal(sbmr1)) {
- case 2:
+ switch (bootsrc) {
+ case 1: /* only reachable for i.MX6UL(L) */
+ *src = BOOTSOURCE_SPI; /* Really: qspi */
+ return;
+ case 2: /* unreachable for i.MX6UL(L) */
*src = BOOTSOURCE_HD;
break;
case 3:
- *src = imx6_bootsource_serial_rom(sbmr1);
- *instance = imx6_boot_instance_serial_rom(sbmr1);
+ *src = imx6_bootsource_serial_rom(bootmode);
+ *instance = imx6_boot_instance_serial_rom(bootmode);
break;
case 4:
case 5:
case 6:
case 7:
*src = BOOTSOURCE_MMC;
- *instance = imx6_boot_instance_mmc(sbmr1);
+ *instance = imx6_boot_instance_mmc(bootmode);
break;
default:
- if (imx53_bootsource_nand(sbmr1))
+ if (imx53_bootsource_nand(bootmode))
*src = BOOTSOURCE_NAND;
break;
}
diff --git a/arch/arm/mach-imx/esdctl-v4.c b/arch/arm/mach-imx/esdctl-v4.c
index b32f56d622..d9f6e919a1 100644
--- a/arch/arm/mach-imx/esdctl-v4.c
+++ b/arch/arm/mach-imx/esdctl-v4.c
@@ -3,9 +3,6 @@
*
* Copyright (c) 2012 Sascha Hauer <s.hauer@pengutronix.de>, Pengutronix
*
- * See file CREDITS for list of people who contributed to this
- * project.
- *
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2
* as published by the Free Software Foundation.
diff --git a/arch/arm/mach-imx/esdctl.c b/arch/arm/mach-imx/esdctl.c
index 25e7c83ad9..5d595addb8 100644
--- a/arch/arm/mach-imx/esdctl.c
+++ b/arch/arm/mach-imx/esdctl.c
@@ -3,9 +3,6 @@
*
* Copyright (c) 2012 Sascha Hauer <s.hauer@pengutronix.de>, Pengutronix
*
- * See file CREDITS for list of people who contributed to this
- * project.
- *
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2
* as published by the Free Software Foundation.
diff --git a/arch/arm/mach-imx/imx-bbu-external-nand.c b/arch/arm/mach-imx/imx-bbu-external-nand.c
index fa43d2e8dc..8aa4f152a1 100644
--- a/arch/arm/mach-imx/imx-bbu-external-nand.c
+++ b/arch/arm/mach-imx/imx-bbu-external-nand.c
@@ -4,9 +4,6 @@
*
* Copyright (c) 2013 Sascha Hauer <s.hauer@pengutronix.de>, Pengutronix
*
- * See file CREDITS for list of people who contributed to this
- * project.
- *
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2
* as published by the Free Software Foundation.
diff --git a/arch/arm/mach-imx/imx-bbu-internal.c b/arch/arm/mach-imx/imx-bbu-internal.c
index f6f66364c0..a922470988 100644
--- a/arch/arm/mach-imx/imx-bbu-internal.c
+++ b/arch/arm/mach-imx/imx-bbu-internal.c
@@ -3,9 +3,6 @@
*
* Copyright (c) 2012 Sascha Hauer <s.hauer@pengutronix.de>, Pengutronix
*
- * See file CREDITS for list of people who contributed to this
- * project.
- *
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2
* as published by the Free Software Foundation.
diff --git a/arch/arm/mach-imx/include/mach/habv4-imx6-gencsf.h b/arch/arm/mach-imx/include/mach/habv4-imx6-gencsf.h
index 5818879609..2961b97b79 100644
--- a/arch/arm/mach-imx/include/mach/habv4-imx6-gencsf.h
+++ b/arch/arm/mach-imx/include/mach/habv4-imx6-gencsf.h
@@ -19,7 +19,7 @@ hab Engine = CAAM
hab [Install SRK]
hab File = CONFIG_HABV4_TABLE_BIN
hab # SRK index within SRK-Table 0..3
-hab Source index = 0
+hab Source index = CONFIG_HABV4_SRK_INDEX
hab [Install CSFK]
/* target key index in keystore 1 */
diff --git a/arch/arm/mach-imx/include/mach/habv4-imx8-gencsf.h b/arch/arm/mach-imx/include/mach/habv4-imx8-gencsf.h
index 34039ee590..9ed6893988 100644
--- a/arch/arm/mach-imx/include/mach/habv4-imx8-gencsf.h
+++ b/arch/arm/mach-imx/include/mach/habv4-imx8-gencsf.h
@@ -19,7 +19,7 @@ hab Engine = CAAM
hab [Install SRK]
hab File = CONFIG_HABV4_TABLE_BIN
hab # SRK index within SRK-Table 0..3
-hab Source index = 0
+hab Source index = CONFIG_HABV4_SRK_INDEX
hab [Install CSFK]
/* target key index in keystore 1 */
diff --git a/arch/arm/mach-imx/include/mach/iim.h b/arch/arm/mach-imx/include/mach/iim.h
index 2161809d4d..cc89b0d109 100644
--- a/arch/arm/mach-imx/include/mach/iim.h
+++ b/arch/arm/mach-imx/include/mach/iim.h
@@ -1,9 +1,6 @@
/*
* (c) 2009 Pengutronix, Sascha Hauer <s.hauer@pengutronix.de>
*
- * See file CREDITS for list of people who contributed to this
- * project.
- *
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of
diff --git a/arch/arm/mach-imx/include/mach/imx25-regs.h b/arch/arm/mach-imx/include/mach/imx25-regs.h
index 5974897a16..a5754c57db 100644
--- a/arch/arm/mach-imx/include/mach/imx25-regs.h
+++ b/arch/arm/mach-imx/include/mach/imx25-regs.h
@@ -1,9 +1,6 @@
/*
* (c) 2009 Pengutronix, Sascha Hauer <s.hauer@pengutronix.de>
*
- * See file CREDITS for list of people who contributed to this
- * project.
- *
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of
diff --git a/arch/arm/mach-imx/include/mach/imx31-regs.h b/arch/arm/mach-imx/include/mach/imx31-regs.h
index e491328694..3d6c91c503 100644
--- a/arch/arm/mach-imx/include/mach/imx31-regs.h
+++ b/arch/arm/mach-imx/include/mach/imx31-regs.h
@@ -1,9 +1,6 @@
/*
* (c) 2007 Pengutronix, Sascha Hauer <s.hauer@pengutronix.de>
*
- * See file CREDITS for list of people who contributed to this
- * project.
- *
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of
diff --git a/arch/arm/mach-imx/include/mach/imx35-regs.h b/arch/arm/mach-imx/include/mach/imx35-regs.h
index 48bf64386a..0a3f9273c7 100644
--- a/arch/arm/mach-imx/include/mach/imx35-regs.h
+++ b/arch/arm/mach-imx/include/mach/imx35-regs.h
@@ -1,9 +1,6 @@
/*
* (c) 2009 Pengutronix, Sascha Hauer <s.hauer@pengutronix.de>
*
- * See file CREDITS for list of people who contributed to this
- * project.
- *
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of
diff --git a/arch/arm/mach-imx/include/mach/imx6.h b/arch/arm/mach-imx/include/mach/imx6.h
index 5560774de9..b65cdaaf40 100644
--- a/arch/arm/mach-imx/include/mach/imx6.h
+++ b/arch/arm/mach-imx/include/mach/imx6.h
@@ -28,6 +28,7 @@ void __noreturn imx6_pm_stby_poweroff(struct poweroff_handler *handler);
static inline int scu_get_core_count(void)
{
+#if __LINUX_ARM_ARCH__ <= 7
unsigned long base;
unsigned int ncores;
@@ -35,6 +36,9 @@ static inline int scu_get_core_count(void)
ncores = readl(base + SCU_CONFIG);
return (ncores & 0x03) + 1;
+#else
+ return 0;
+#endif
}
#define SI_REV_CPUTYPE(s) (((s) >> 16) & 0xff)