diff options
Diffstat (limited to 'arch/arm/mach-imx')
-rw-r--r-- | arch/arm/mach-imx/Kconfig | 10 | ||||
-rw-r--r-- | arch/arm/mach-imx/boot.c | 43 | ||||
-rw-r--r-- | arch/arm/mach-imx/esdctl-v4.c | 3 | ||||
-rw-r--r-- | arch/arm/mach-imx/esdctl.c | 3 | ||||
-rw-r--r-- | arch/arm/mach-imx/imx-bbu-external-nand.c | 3 | ||||
-rw-r--r-- | arch/arm/mach-imx/imx-bbu-internal.c | 3 | ||||
-rw-r--r-- | arch/arm/mach-imx/include/mach/habv4-imx6-gencsf.h | 2 | ||||
-rw-r--r-- | arch/arm/mach-imx/include/mach/habv4-imx8-gencsf.h | 2 | ||||
-rw-r--r-- | arch/arm/mach-imx/include/mach/iim.h | 3 | ||||
-rw-r--r-- | arch/arm/mach-imx/include/mach/imx25-regs.h | 3 | ||||
-rw-r--r-- | arch/arm/mach-imx/include/mach/imx31-regs.h | 3 | ||||
-rw-r--r-- | arch/arm/mach-imx/include/mach/imx35-regs.h | 3 | ||||
-rw-r--r-- | arch/arm/mach-imx/include/mach/imx6.h | 4 |
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) |