* [U-Boot] [PATCH 00/19] stm32mp1: update of stm32mp arch and stm32mp1 board
@ 2019-02-27 16:01 Patrick Delaunay
2019-02-27 16:01 ` [U-Boot] [PATCH 01/19] stm32mp1: add runtime information in environment Patrick Delaunay
` (18 more replies)
0 siblings, 19 replies; 20+ messages in thread
From: Patrick Delaunay @ 2019-02-27 16:01 UTC (permalink / raw)
To: u-boot
Need to be apply after the previous serie:
stm32mp1: add trusted boot with TF-A
http://patchwork.ozlabs.org/project/uboot/list/?series=91422
It is a first alignment on the delivery v2018.11-stm32mp-r2
available on GITHUB https://github.com/STMicroelectronics/u-boot
Patrick Delaunay (19):
stm32mp1: add runtime information in environment
stm32mp1: update boot mode management
stm32mp1: update print_cpuinfo()
stm32mp1: spl: add spl_display_print
stm32mp1: cosmetic cleanup Kconfig
stm32mp1: cosmetic: add comment on psci_migrate_info_type return value
stm32mp1: spl: hang with trace when DDR init failed
stm32mp1: update bootcmd
stm32mp1: activate FASTBOOT on eMMC
stm32mp1: support forced boot mode
stm32mp1: update memory layout
stm32mp1: activated some configuration
stm32mp1: add some syscon drivers for syscfg and etpzc
stm32mp1: add syscfg initialization
stm32mp1: align serial number on bootrom
stm32mp1: basic boot: SPL enable access to GPIOZ bank
stm32mp1: bsec: use device tree new compatible
stm32mp1: bsec: shadow all the upper OTP (no secure) during boot
stm32mp1: Replace OTP read by SHADOW read
arch/arm/Kconfig | 1 +
arch/arm/dts/stm32mp157-u-boot.dtsi | 4 +
arch/arm/dts/stm32mp157c-ed1-u-boot.dtsi | 5 +
arch/arm/dts/stm32mp157c.dtsi | 9 +-
arch/arm/mach-stm32mp/Kconfig | 12 +-
arch/arm/mach-stm32mp/bsec.c | 32 ++--
arch/arm/mach-stm32mp/cpu.c | 209 ++++++++++++++++++++++---
arch/arm/mach-stm32mp/include/mach/stm32.h | 19 ++-
arch/arm/mach-stm32mp/include/mach/sys_proto.h | 12 +-
arch/arm/mach-stm32mp/psci.c | 8 +-
arch/arm/mach-stm32mp/spl.c | 39 ++++-
arch/arm/mach-stm32mp/syscon.c | 9 +-
board/st/stm32mp1/stm32mp1.c | 200 ++++++++++++++++++++++-
configs/stm32mp15_basic_defconfig | 15 +-
configs/stm32mp15_trusted_defconfig | 15 +-
include/configs/stm32mp1.h | 60 +++++--
16 files changed, 571 insertions(+), 78 deletions(-)
--
2.7.4
^ permalink raw reply [flat|nested] 20+ messages in thread
* [U-Boot] [PATCH 01/19] stm32mp1: add runtime information in environment
2019-02-27 16:01 [U-Boot] [PATCH 00/19] stm32mp1: update of stm32mp arch and stm32mp1 board Patrick Delaunay
@ 2019-02-27 16:01 ` Patrick Delaunay
2019-02-27 16:01 ` [U-Boot] [PATCH 02/19] stm32mp1: update boot mode management Patrick Delaunay
` (17 subsequent siblings)
18 siblings, 0 replies; 20+ messages in thread
From: Patrick Delaunay @ 2019-02-27 16:01 UTC (permalink / raw)
To: u-boot
Set board name with the first dts compatible found in DT
code under CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG
The result with DEVICE_TREE=stm32mp157c-ev1 is:
STM32MP> env print
board=stm32mp1
board_name=stm32mp157c-ev1
Signed-off-by: Patrick Delaunay <patrick.delaunay@st.com>
---
arch/arm/Kconfig | 1 +
board/st/stm32mp1/stm32mp1.c | 24 +++++++++++++++++++-----
2 files changed, 20 insertions(+), 5 deletions(-)
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index 9e861c2..ec524f4 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -1364,6 +1364,7 @@ config ARCH_STM32MP
select SYSRESET
select SYS_THUMB_BUILD
imply CMD_DM
+ imply ENV_VARS_UBOOT_RUNTIME_CONFIG
help
Support for STM32MP SoC family developed by STMicroelectronics,
MPUs based on ARM cortex A core
diff --git a/board/st/stm32mp1/stm32mp1.c b/board/st/stm32mp1/stm32mp1.c
index 07d1add..48da459 100644
--- a/board/st/stm32mp1/stm32mp1.c
+++ b/board/st/stm32mp1/stm32mp1.c
@@ -220,11 +220,6 @@ int board_usb_cleanup(int index, enum usb_init_type init)
return 0;
}
-int board_late_init(void)
-{
- return 0;
-}
-
/* board dependent setup after realloc */
int board_init(void)
{
@@ -236,3 +231,22 @@ int board_init(void)
return 0;
}
+
+int board_late_init(void)
+{
+#ifdef CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG
+ const void *fdt_compat;
+ int fdt_compat_len;
+
+ fdt_compat = fdt_getprop(gd->fdt_blob, 0, "compatible",
+ &fdt_compat_len);
+ if (fdt_compat && fdt_compat_len) {
+ if (strncmp(fdt_compat, "st,", 3) != 0)
+ env_set("board_name", fdt_compat);
+ else
+ env_set("board_name", fdt_compat + 3);
+ }
+#endif
+
+ return 0;
+}
--
2.7.4
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [U-Boot] [PATCH 02/19] stm32mp1: update boot mode management
2019-02-27 16:01 [U-Boot] [PATCH 00/19] stm32mp1: update of stm32mp arch and stm32mp1 board Patrick Delaunay
2019-02-27 16:01 ` [U-Boot] [PATCH 01/19] stm32mp1: add runtime information in environment Patrick Delaunay
@ 2019-02-27 16:01 ` Patrick Delaunay
2019-02-27 16:01 ` [U-Boot] [PATCH 03/19] stm32mp1: update print_cpuinfo() Patrick Delaunay
` (16 subsequent siblings)
18 siblings, 0 replies; 20+ messages in thread
From: Patrick Delaunay @ 2019-02-27 16:01 UTC (permalink / raw)
To: u-boot
- export the function get_bootmode() and reused it in spl code
- manage uart instance by alias (prepare v4.19 binding)
- solve issue on nand instance
- restore console for uart boot
Signed-off-by: Patrick Delaunay <patrick.delaunay@st.com>
---
arch/arm/mach-stm32mp/cpu.c | 57 +++++++++++++++++++++-----
arch/arm/mach-stm32mp/include/mach/stm32.h | 3 --
arch/arm/mach-stm32mp/include/mach/sys_proto.h | 2 +
arch/arm/mach-stm32mp/spl.c | 18 +++++++-
4 files changed, 64 insertions(+), 16 deletions(-)
diff --git a/arch/arm/mach-stm32mp/cpu.c b/arch/arm/mach-stm32mp/cpu.c
index b96720f..753ff3e 100644
--- a/arch/arm/mach-stm32mp/cpu.c
+++ b/arch/arm/mach-stm32mp/cpu.c
@@ -129,14 +129,19 @@ static void dbgmcu_init(void)
}
#endif /* !defined(CONFIG_SPL) || defined(CONFIG_SPL_BUILD) */
-static u32 get_bootmode(void)
-{
- u32 boot_mode;
#if !defined(CONFIG_STM32MP1_TRUSTED) && \
(!defined(CONFIG_SPL) || defined(CONFIG_SPL_BUILD))
+/* get bootmode from ROM code boot context: saved in TAMP register */
+static void update_bootmode(void)
+{
+ u32 boot_mode;
u32 bootrom_itf = readl(BOOTROM_PARAM_ADDR);
u32 bootrom_device, bootrom_instance;
+ /* enable TAMP clock = RTCAPBEN */
+ writel(BIT(8), RCC_MP_APB5ENSETR);
+
+ /* read bootrom context */
bootrom_device =
(bootrom_itf & BOOTROM_MODE_MASK) >> BOOTROM_MODE_SHIFT;
bootrom_instance =
@@ -150,12 +155,14 @@ static u32 get_bootmode(void)
clrsetbits_le32(TAMP_BOOT_CONTEXT,
TAMP_BOOT_MODE_MASK,
boot_mode << TAMP_BOOT_MODE_SHIFT);
-#else
- /* read TAMP backup register */
- boot_mode = (readl(TAMP_BOOT_CONTEXT) & TAMP_BOOT_MODE_MASK) >>
- TAMP_BOOT_MODE_SHIFT;
+}
#endif
- return boot_mode;
+
+u32 get_bootmode(void)
+{
+ /* read bootmode from TAMP backup register */
+ return (readl(TAMP_BOOT_CONTEXT) & TAMP_BOOT_MODE_MASK) >>
+ TAMP_BOOT_MODE_SHIFT;
}
/*
@@ -172,10 +179,10 @@ int arch_cpu_init(void)
dbgmcu_init();
#ifndef CONFIG_STM32MP1_TRUSTED
security_init();
+ update_bootmode();
#endif
#endif
- /* get bootmode from BootRom context: saved in TAMP register */
boot_mode = get_bootmode();
if ((boot_mode & TAMP_BOOT_DEVICE_MASK) == BOOT_SERIAL_UART)
@@ -247,20 +254,48 @@ int print_cpuinfo(void)
static void setup_boot_mode(void)
{
+ const u32 serial_addr[] = {
+ STM32_USART1_BASE,
+ STM32_USART2_BASE,
+ STM32_USART3_BASE,
+ STM32_UART4_BASE,
+ STM32_UART5_BASE,
+ STM32_USART6_BASE,
+ STM32_UART7_BASE,
+ STM32_UART8_BASE
+ };
char cmd[60];
u32 boot_ctx = readl(TAMP_BOOT_CONTEXT);
u32 boot_mode =
(boot_ctx & TAMP_BOOT_MODE_MASK) >> TAMP_BOOT_MODE_SHIFT;
int instance = (boot_mode & TAMP_BOOT_INSTANCE_MASK) - 1;
+ struct udevice *dev;
+ int alias;
pr_debug("%s: boot_ctx=0x%x => boot_mode=%x, instance=%d\n",
__func__, boot_ctx, boot_mode, instance);
switch (boot_mode & TAMP_BOOT_DEVICE_MASK) {
case BOOT_SERIAL_UART:
- sprintf(cmd, "%d", instance);
- env_set("boot_device", "uart");
+ if (instance > ARRAY_SIZE(serial_addr))
+ break;
+ /* serial : search associated alias in devicetree */
+ sprintf(cmd, "serial@%x", serial_addr[instance]);
+ if (uclass_get_device_by_name(UCLASS_SERIAL, cmd, &dev))
+ break;
+ if (fdtdec_get_alias_seq(gd->fdt_blob, "serial",
+ dev_of_offset(dev), &alias))
+ break;
+ sprintf(cmd, "%d", alias);
+ env_set("boot_device", "serial");
env_set("boot_instance", cmd);
+
+ /* restore console on uart when not used */
+ if (gd->cur_serial_dev != dev) {
+ gd->flags &= ~(GD_FLG_SILENT |
+ GD_FLG_DISABLE_CONSOLE);
+ printf("serial boot with console enabled!\n");
+ }
break;
case BOOT_SERIAL_USB:
env_set("boot_device", "usb");
diff --git a/arch/arm/mach-stm32mp/include/mach/stm32.h b/arch/arm/mach-stm32mp/include/mach/stm32.h
index 85d783c..f2ab026 100644
--- a/arch/arm/mach-stm32mp/include/mach/stm32.h
+++ b/arch/arm/mach-stm32mp/include/mach/stm32.h
@@ -18,8 +18,6 @@
#define STM32_ETZPC_BASE 0x5C007000
#define STM32_TAMP_BASE 0x5C00A000
-#ifdef CONFIG_DEBUG_UART_BASE
-/* hardcoded value can be only used for DEBUG UART */
#define STM32_USART1_BASE 0x5C000000
#define STM32_USART2_BASE 0x4000E000
#define STM32_USART3_BASE 0x4000F000
@@ -28,7 +26,6 @@
#define STM32_USART6_BASE 0x44003000
#define STM32_UART7_BASE 0x40018000
#define STM32_UART8_BASE 0x40019000
-#endif
#define STM32_SYSRAM_BASE 0x2FFC0000
#define STM32_SYSRAM_SIZE SZ_256K
diff --git a/arch/arm/mach-stm32mp/include/mach/sys_proto.h b/arch/arm/mach-stm32mp/include/mach/sys_proto.h
index 41d4b40..8b426c0 100644
--- a/arch/arm/mach-stm32mp/include/mach/sys_proto.h
+++ b/arch/arm/mach-stm32mp/include/mach/sys_proto.h
@@ -13,3 +13,5 @@ u32 get_cpu_type(void);
/* return CPU_REV constants */
u32 get_cpu_rev(void);
+/* return boot mode */
+u32 get_bootmode(void);
diff --git a/arch/arm/mach-stm32mp/spl.c b/arch/arm/mach-stm32mp/spl.c
index 790973e..c6ae73d 100644
--- a/arch/arm/mach-stm32mp/spl.c
+++ b/arch/arm/mach-stm32mp/spl.c
@@ -12,8 +12,7 @@ u32 spl_boot_device(void)
{
u32 boot_mode;
- boot_mode = (readl(TAMP_BOOT_CONTEXT) & TAMP_BOOT_MODE_MASK) >>
- TAMP_BOOT_MODE_SHIFT;
+ boot_mode = get_bootmode();
switch (boot_mode) {
case BOOT_FLASH_SD_1:
@@ -22,6 +21,21 @@ u32 spl_boot_device(void)
case BOOT_FLASH_SD_2:
case BOOT_FLASH_EMMC_2:
return BOOT_DEVICE_MMC2;
+ case BOOT_SERIAL_UART_1:
+ case BOOT_SERIAL_UART_2:
+ case BOOT_SERIAL_UART_3:
+ case BOOT_SERIAL_UART_4:
+ case BOOT_SERIAL_UART_5:
+ case BOOT_SERIAL_UART_6:
+ case BOOT_SERIAL_UART_7:
+ case BOOT_SERIAL_UART_8:
+ return BOOT_DEVICE_UART;
+ case BOOT_SERIAL_USB_OTG:
+ return BOOT_DEVICE_USB;
+ case BOOT_FLASH_NAND_FMC:
+ return BOOT_DEVICE_NAND;
+ case BOOT_FLASH_NOR_QSPI:
+ return BOOT_DEVICE_SPI;
}
return BOOT_DEVICE_MMC1;
--
2.7.4
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [U-Boot] [PATCH 03/19] stm32mp1: update print_cpuinfo()
2019-02-27 16:01 [U-Boot] [PATCH 00/19] stm32mp1: update of stm32mp arch and stm32mp1 board Patrick Delaunay
2019-02-27 16:01 ` [U-Boot] [PATCH 01/19] stm32mp1: add runtime information in environment Patrick Delaunay
2019-02-27 16:01 ` [U-Boot] [PATCH 02/19] stm32mp1: update boot mode management Patrick Delaunay
@ 2019-02-27 16:01 ` Patrick Delaunay
2019-02-27 16:01 ` [U-Boot] [PATCH 04/19] stm32mp1: spl: add spl_display_print Patrick Delaunay
` (15 subsequent siblings)
18 siblings, 0 replies; 20+ messages in thread
From: Patrick Delaunay @ 2019-02-27 16:01 UTC (permalink / raw)
To: u-boot
Display CPU part number and package information.
Signed-off-by: Patrick Delaunay <patrick.delaunay@st.com>
---
arch/arm/mach-stm32mp/cpu.c | 102 +++++++++++++++++++++++--
arch/arm/mach-stm32mp/include/mach/sys_proto.h | 10 ++-
2 files changed, 104 insertions(+), 8 deletions(-)
diff --git a/arch/arm/mach-stm32mp/cpu.c b/arch/arm/mach-stm32mp/cpu.c
index 753ff3e..206b82e 100644
--- a/arch/arm/mach-stm32mp/cpu.c
+++ b/arch/arm/mach-stm32mp/cpu.c
@@ -55,9 +55,30 @@
#define BOOTROM_INSTANCE_SHIFT 16
/* BSEC OTP index */
+#define BSEC_OTP_RPN 1
#define BSEC_OTP_SERIAL 13
+#define BSEC_OTP_PKG 16
#define BSEC_OTP_MAC 57
+/* Device Part Number (RPN) = OTP_DATA1 lower 8 bits */
+#define RPN_SHIFT 0
+#define RPN_MASK GENMASK(7, 0)
+
+/* Package = bit 27:29 of OTP16
+ * - 100: LBGA448 (FFI) => AA = LFBGA 18x18mm 448 balls p. 0.8mm
+ * - 011: LBGA354 (LCI) => AB = LFBGA 16x16mm 359 balls p. 0.8mm
+ * - 010: TFBGA361 (FFC) => AC = TFBGA 12x12mm 361 balls p. 0.5mm
+ * - 001: TFBGA257 (LCC) => AD = TFBGA 10x10mm 257 balls p. 0.5mm
+ * - others: Reserved
+ */
+#define PKG_SHIFT 27
+#define PKG_MASK GENMASK(2, 0)
+
+#define PKG_AA_LBGA448 4
+#define PKG_AB_LBGA354 3
+#define PKG_AC_TFBGA361 2
+#define PKG_AD_TFBGA257 1
+
#if !defined(CONFIG_SPL) || defined(CONFIG_SPL_BUILD)
#ifndef CONFIG_STM32MP1_TRUSTED
static void security_init(void)
@@ -215,25 +236,94 @@ u32 get_cpu_rev(void)
return (read_idc() & DBGMCU_IDC_REV_ID_MASK) >> DBGMCU_IDC_REV_ID_SHIFT;
}
+static u32 get_otp(int index, int shift, int mask)
+{
+ int ret;
+ struct udevice *dev;
+ u32 otp = 0;
+
+ ret = uclass_get_device_by_driver(UCLASS_MISC,
+ DM_GET_DRIVER(stm32mp_bsec),
+ &dev);
+
+ if (!ret)
+ ret = misc_read(dev, STM32_BSEC_SHADOW(index),
+ &otp, sizeof(otp));
+
+ return (otp >> shift) & mask;
+}
+
+/* Get Device Part Number (RPN) from OTP */
+static u32 get_cpu_rpn(void)
+{
+ return get_otp(BSEC_OTP_RPN, RPN_SHIFT, RPN_MASK);
+}
+
u32 get_cpu_type(void)
{
- return (read_idc() & DBGMCU_IDC_DEV_ID_MASK) >> DBGMCU_IDC_DEV_ID_SHIFT;
+ u32 id;
+
+ id = (read_idc() & DBGMCU_IDC_DEV_ID_MASK) >> DBGMCU_IDC_DEV_ID_SHIFT;
+
+ return (id << 16) | get_cpu_rpn();
+}
+
+/* Get Package options from OTP */
+static u32 get_cpu_package(void)
+{
+ return get_otp(BSEC_OTP_PKG, PKG_SHIFT, PKG_MASK);
}
#if defined(CONFIG_DISPLAY_CPUINFO)
int print_cpuinfo(void)
{
- char *cpu_s, *cpu_r;
+ char *cpu_s, *cpu_r, *pkg;
+ /* MPUs Part Numbers */
switch (get_cpu_type()) {
- case CPU_STMP32MP15x:
- cpu_s = "15x";
+ case CPU_STM32MP157Cxx:
+ cpu_s = "157C";
+ break;
+ case CPU_STM32MP157Axx:
+ cpu_s = "157A";
+ break;
+ case CPU_STM32MP153Cxx:
+ cpu_s = "153C";
+ break;
+ case CPU_STM32MP153Axx:
+ cpu_s = "153A";
+ break;
+ case CPU_STM32MP151Cxx:
+ cpu_s = "151C";
+ break;
+ case CPU_STM32MP151Axx:
+ cpu_s = "151A";
+ break;
+ default:
+ cpu_s = "????";
+ break;
+ }
+
+ /* Package */
+ switch (get_cpu_package()) {
+ case PKG_AA_LBGA448:
+ pkg = "AA";
+ break;
+ case PKG_AB_LBGA354:
+ pkg = "AB";
+ break;
+ case PKG_AC_TFBGA361:
+ pkg = "AC";
+ break;
+ case PKG_AD_TFBGA257:
+ pkg = "AD";
break;
default:
- cpu_s = "?";
+ pkg = "??";
break;
}
+ /* REVISION */
switch (get_cpu_rev()) {
case CPU_REVA:
cpu_r = "A";
@@ -246,7 +336,7 @@ int print_cpuinfo(void)
break;
}
- printf("CPU: STM32MP%s.%s\n", cpu_s, cpu_r);
+ printf("CPU: STM32MP%s%s Rev.%s\n", cpu_s, pkg, cpu_r);
return 0;
}
diff --git a/arch/arm/mach-stm32mp/include/mach/sys_proto.h b/arch/arm/mach-stm32mp/include/mach/sys_proto.h
index 8b426c0..71a3ba7 100644
--- a/arch/arm/mach-stm32mp/include/mach/sys_proto.h
+++ b/arch/arm/mach-stm32mp/include/mach/sys_proto.h
@@ -3,9 +3,15 @@
* Copyright (C) 2015-2017, STMicroelectronics - All Rights Reserved
*/
-#define CPU_STMP32MP15x 0x500
+/* ID = Device Version (bit31:16) + Device Part Number (RPN) (bit15:0)*/
+#define CPU_STM32MP157Cxx 0x05000000
+#define CPU_STM32MP157Axx 0x05000001
+#define CPU_STM32MP153Cxx 0x05000024
+#define CPU_STM32MP153Axx 0x05000025
+#define CPU_STM32MP151Cxx 0x0500002E
+#define CPU_STM32MP151Axx 0x0500002F
-/* return CPU_STMP32MPxx constants */
+/* return CPU_STMP32MP...Xxx constants */
u32 get_cpu_type(void);
#define CPU_REVA 0x1000
--
2.7.4
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [U-Boot] [PATCH 04/19] stm32mp1: spl: add spl_display_print
2019-02-27 16:01 [U-Boot] [PATCH 00/19] stm32mp1: update of stm32mp arch and stm32mp1 board Patrick Delaunay
` (2 preceding siblings ...)
2019-02-27 16:01 ` [U-Boot] [PATCH 03/19] stm32mp1: update print_cpuinfo() Patrick Delaunay
@ 2019-02-27 16:01 ` Patrick Delaunay
2019-02-27 16:01 ` [U-Boot] [PATCH 05/19] stm32mp1: cosmetic cleanup Kconfig Patrick Delaunay
` (14 subsequent siblings)
18 siblings, 0 replies; 20+ messages in thread
From: Patrick Delaunay @ 2019-02-27 16:01 UTC (permalink / raw)
To: u-boot
SPL displays the board model from device tree.
Signed-off-by: Patrick Delaunay <patrick.delaunay@st.com>
---
arch/arm/mach-stm32mp/Kconfig | 1 +
arch/arm/mach-stm32mp/spl.c | 17 +++++++++++++++++
2 files changed, 18 insertions(+)
diff --git a/arch/arm/mach-stm32mp/Kconfig b/arch/arm/mach-stm32mp/Kconfig
index 3101d80..d70658a 100644
--- a/arch/arm/mach-stm32mp/Kconfig
+++ b/arch/arm/mach-stm32mp/Kconfig
@@ -18,6 +18,7 @@ config SPL
select SPL_SERIAL_SUPPORT
select SPL_SYSCON
select SPL_DRIVERS_MISC_SUPPORT
+ imply SPL_DISPLAY_PRINT
imply SPL_LIBDISK_SUPPORT
config SYS_SOC
diff --git a/arch/arm/mach-stm32mp/spl.c b/arch/arm/mach-stm32mp/spl.c
index c6ae73d..501e077 100644
--- a/arch/arm/mach-stm32mp/spl.c
+++ b/arch/arm/mach-stm32mp/spl.c
@@ -7,6 +7,8 @@
#include <dm.h>
#include <spl.h>
#include <asm/io.h>
+#include <asm/arch/sys_proto.h>
+#include <linux/libfdt.h>
u32 spl_boot_device(void)
{
@@ -58,6 +60,21 @@ int spl_boot_partition(const u32 boot_device)
}
}
+#ifdef CONFIG_SPL_DISPLAY_PRINT
+void spl_display_print(void)
+{
+ DECLARE_GLOBAL_DATA_PTR;
+ const char *model;
+
+ /* same code than show_board_info() but not compiled for SPL
+ * see CONFIG_DISPLAY_BOARDINFO & common/board_info.c
+ */
+ model = fdt_getprop(gd->fdt_blob, 0, "model", NULL);
+ if (model)
+ printf("Model: %s\n", model);
+}
+#endif
+
void board_init_f(ulong dummy)
{
struct udevice *dev;
--
2.7.4
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [U-Boot] [PATCH 05/19] stm32mp1: cosmetic cleanup Kconfig
2019-02-27 16:01 [U-Boot] [PATCH 00/19] stm32mp1: update of stm32mp arch and stm32mp1 board Patrick Delaunay
` (3 preceding siblings ...)
2019-02-27 16:01 ` [U-Boot] [PATCH 04/19] stm32mp1: spl: add spl_display_print Patrick Delaunay
@ 2019-02-27 16:01 ` Patrick Delaunay
2019-02-27 16:01 ` [U-Boot] [PATCH 06/19] stm32mp1: cosmetic: add comment on psci_migrate_info_type return value Patrick Delaunay
` (13 subsequent siblings)
18 siblings, 0 replies; 20+ messages in thread
From: Patrick Delaunay @ 2019-02-27 16:01 UTC (permalink / raw)
To: u-boot
Cosmetic cleanup in mach-stm32mp Kconfig
- remove duplicated SPL_DRIVERS_MISC_SUPPORT
- update help for TARGET_STM32MP1
- set value for NR_DRAM_BANKS
- remove one comment as DEBUG_UART is deactivated by default
- include board Kconfig at the end of the file
Signed-off-by: Patrick Delaunay <patrick.delaunay@st.com>
---
arch/arm/mach-stm32mp/Kconfig | 11 +++++++----
configs/stm32mp15_basic_defconfig | 1 -
configs/stm32mp15_trusted_defconfig | 1 -
3 files changed, 7 insertions(+), 6 deletions(-)
diff --git a/arch/arm/mach-stm32mp/Kconfig b/arch/arm/mach-stm32mp/Kconfig
index d70658a..73aa382 100644
--- a/arch/arm/mach-stm32mp/Kconfig
+++ b/arch/arm/mach-stm32mp/Kconfig
@@ -17,7 +17,6 @@ config SPL
select SPL_DM_RESET
select SPL_SERIAL_SUPPORT
select SPL_SYSCON
- select SPL_DRIVERS_MISC_SUPPORT
imply SPL_DISPLAY_PRINT
imply SPL_LIBDISK_SUPPORT
@@ -38,7 +37,9 @@ config TARGET_STM32MP1
imply SYSRESET_SYSCON if !STM32MP1_TRUSTED
help
target STMicroelectronics SOC STM32MP1 family
+ STM32MP157, STM32MP153 or STM32MP151
STMicroelectronics MPU with core ARMv7
+ dual core A7 for STM32MP157/3, monocore for STM32MP151
config STM32MP1_TRUSTED
bool "Support trusted boot with TF-A"
@@ -58,6 +59,9 @@ config SYS_TEXT_BASE
when DDR driver is used:
DDR + 1MB (0xC0100000)
+config NR_DRAM_BANKS
+ default 1
+
config SYS_MMCSD_RAW_MODE_U_BOOT_PARTITION_MMC2
hex "Partition on MMC2 to use to load U-Boot from"
depends on SYS_MMCSD_RAW_MODE_U_BOOT_USE_PARTITION
@@ -66,9 +70,6 @@ config SYS_MMCSD_RAW_MODE_U_BOOT_PARTITION_MMC2
Partition on the second MMC to load U-Boot from when the MMC is being
used in raw mode
-source "board/st/stm32mp1/Kconfig"
-
-# currently activated for debug / should be deactivated for real product
if DEBUG_UART
config DEBUG_UART_BOARD_INIT
@@ -83,4 +84,6 @@ config DEBUG_UART_CLOCK
default 64000000
endif
+source "board/st/stm32mp1/Kconfig"
+
endif
diff --git a/configs/stm32mp15_basic_defconfig b/configs/stm32mp15_basic_defconfig
index d20b2ab..b1d09fb 100644
--- a/configs/stm32mp15_basic_defconfig
+++ b/configs/stm32mp15_basic_defconfig
@@ -5,7 +5,6 @@ CONFIG_SPL_MMC_SUPPORT=y
CONFIG_SPL=y
CONFIG_TARGET_STM32MP1=y
CONFIG_DISTRO_DEFAULTS=y
-CONFIG_NR_DRAM_BANKS=1
CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_USE_PARTITION=y
CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_PARTITION=3
CONFIG_SPL_I2C_SUPPORT=y
diff --git a/configs/stm32mp15_trusted_defconfig b/configs/stm32mp15_trusted_defconfig
index 62ab010..9be7319 100644
--- a/configs/stm32mp15_trusted_defconfig
+++ b/configs/stm32mp15_trusted_defconfig
@@ -3,7 +3,6 @@ CONFIG_ARCH_STM32MP=y
CONFIG_SYS_MALLOC_F_LEN=0x2000
CONFIG_TARGET_STM32MP1=y
CONFIG_DISTRO_DEFAULTS=y
-CONFIG_NR_DRAM_BANKS=1
CONFIG_SYS_PROMPT="STM32MP> "
# CONFIG_CMD_BOOTD is not set
# CONFIG_CMD_ELF is not set
--
2.7.4
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [U-Boot] [PATCH 06/19] stm32mp1: cosmetic: add comment on psci_migrate_info_type return value
2019-02-27 16:01 [U-Boot] [PATCH 00/19] stm32mp1: update of stm32mp arch and stm32mp1 board Patrick Delaunay
` (4 preceding siblings ...)
2019-02-27 16:01 ` [U-Boot] [PATCH 05/19] stm32mp1: cosmetic cleanup Kconfig Patrick Delaunay
@ 2019-02-27 16:01 ` Patrick Delaunay
2019-02-27 16:01 ` [U-Boot] [PATCH 07/19] stm32mp1: spl: hang with trace when DDR init failed Patrick Delaunay
` (12 subsequent siblings)
18 siblings, 0 replies; 20+ messages in thread
From: Patrick Delaunay @ 2019-02-27 16:01 UTC (permalink / raw)
To: u-boot
Add explaination for the return value of psci_migrate_info_type:
2 = Trusted OS.
Signed-off-by: Patrick Delaunay <patrick.delaunay@st.com>
---
arch/arm/mach-stm32mp/psci.c | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/arch/arm/mach-stm32mp/psci.c b/arch/arm/mach-stm32mp/psci.c
index 6ed2482..c2dff38 100644
--- a/arch/arm/mach-stm32mp/psci.c
+++ b/arch/arm/mach-stm32mp/psci.c
@@ -103,7 +103,13 @@ int __secure psci_affinity_info(u32 function_id, u32 target_affinity,
int __secure psci_migrate_info_type(u32 function_id)
{
- /* Trusted OS is either not present or does not require migration */
+ /*
+ * in Power_State_Coordination_Interface_PDD_v1_1_DEN0022D.pdf
+ * return 2 = Trusted OS is either not present or does not require
+ * migration, system of this type does not require the caller
+ * to use the MIGRATE function.
+ * MIGRATE function calls return NOT_SUPPORTED.
+ */
return 2;
}
--
2.7.4
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [U-Boot] [PATCH 07/19] stm32mp1: spl: hang with trace when DDR init failed
2019-02-27 16:01 [U-Boot] [PATCH 00/19] stm32mp1: update of stm32mp arch and stm32mp1 board Patrick Delaunay
` (5 preceding siblings ...)
2019-02-27 16:01 ` [U-Boot] [PATCH 06/19] stm32mp1: cosmetic: add comment on psci_migrate_info_type return value Patrick Delaunay
@ 2019-02-27 16:01 ` Patrick Delaunay
2019-02-27 16:01 ` [U-Boot] [PATCH 08/19] stm32mp1: update bootcmd Patrick Delaunay
` (11 subsequent siblings)
18 siblings, 0 replies; 20+ messages in thread
From: Patrick Delaunay @ 2019-02-27 16:01 UTC (permalink / raw)
To: u-boot
When DDR initialization failed, print error message
and stop the SPL execution.
Signed-off-by: Patrick Delaunay <patrick.delaunay@st.com>
---
arch/arm/mach-stm32mp/spl.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/arch/arm/mach-stm32mp/spl.c b/arch/arm/mach-stm32mp/spl.c
index 501e077..a3b0d6f 100644
--- a/arch/arm/mach-stm32mp/spl.c
+++ b/arch/arm/mach-stm32mp/spl.c
@@ -111,7 +111,7 @@ void board_init_f(ulong dummy)
ret = uclass_get_device(UCLASS_RAM, 0, &dev);
if (ret) {
- debug("DRAM init failed: %d\n", ret);
- return;
+ printf("DRAM init failed: %d\n", ret);
+ hang();
}
}
--
2.7.4
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [U-Boot] [PATCH 08/19] stm32mp1: update bootcmd
2019-02-27 16:01 [U-Boot] [PATCH 00/19] stm32mp1: update of stm32mp arch and stm32mp1 board Patrick Delaunay
` (6 preceding siblings ...)
2019-02-27 16:01 ` [U-Boot] [PATCH 07/19] stm32mp1: spl: hang with trace when DDR init failed Patrick Delaunay
@ 2019-02-27 16:01 ` Patrick Delaunay
2019-02-27 16:01 ` [U-Boot] [PATCH 09/19] stm32mp1: activate FASTBOOT on eMMC Patrick Delaunay
` (10 subsequent siblings)
18 siblings, 0 replies; 20+ messages in thread
From: Patrick Delaunay @ 2019-02-27 16:01 UTC (permalink / raw)
To: u-boot
Clearly separate bootcmd for stm32mp1 board
(bootcmd_stm32mp) and preboot management.
That solve issue for fastboot continue command.
Signed-off-by: Patrick Delaunay <patrick.delaunay@st.com>
---
board/st/stm32mp1/stm32mp1.c | 1 +
configs/stm32mp15_basic_defconfig | 1 +
configs/stm32mp15_trusted_defconfig | 1 +
include/configs/stm32mp1.h | 37 +++++++++++++++++++++++++++----------
4 files changed, 30 insertions(+), 10 deletions(-)
diff --git a/board/st/stm32mp1/stm32mp1.c b/board/st/stm32mp1/stm32mp1.c
index 48da459..0d963c2 100644
--- a/board/st/stm32mp1/stm32mp1.c
+++ b/board/st/stm32mp1/stm32mp1.c
@@ -14,6 +14,7 @@
#include <usb.h>
#include <asm/arch/stm32.h>
#include <asm/io.h>
+#include <asm/gpio.h>
#include <power/regulator.h>
#include <usb/dwc2_udc.h>
diff --git a/configs/stm32mp15_basic_defconfig b/configs/stm32mp15_basic_defconfig
index b1d09fb..4ab29ee 100644
--- a/configs/stm32mp15_basic_defconfig
+++ b/configs/stm32mp15_basic_defconfig
@@ -5,6 +5,7 @@ CONFIG_SPL_MMC_SUPPORT=y
CONFIG_SPL=y
CONFIG_TARGET_STM32MP1=y
CONFIG_DISTRO_DEFAULTS=y
+CONFIG_BOOTCOMMAND="run bootcmd_stm32mp"
CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_USE_PARTITION=y
CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_PARTITION=3
CONFIG_SPL_I2C_SUPPORT=y
diff --git a/configs/stm32mp15_trusted_defconfig b/configs/stm32mp15_trusted_defconfig
index 9be7319..1bb3d0d 100644
--- a/configs/stm32mp15_trusted_defconfig
+++ b/configs/stm32mp15_trusted_defconfig
@@ -3,6 +3,7 @@ CONFIG_ARCH_STM32MP=y
CONFIG_SYS_MALLOC_F_LEN=0x2000
CONFIG_TARGET_STM32MP1=y
CONFIG_DISTRO_DEFAULTS=y
+CONFIG_BOOTCOMMAND="run bootcmd_stm32mp"
CONFIG_SYS_PROMPT="STM32MP> "
# CONFIG_CMD_BOOTD is not set
# CONFIG_CMD_ELF is not set
diff --git a/include/configs/stm32mp1.h b/include/configs/stm32mp1.h
index 4722672..48da1e3 100644
--- a/include/configs/stm32mp1.h
+++ b/include/configs/stm32mp1.h
@@ -10,8 +10,6 @@
#include <linux/sizes.h>
#include <asm/arch/stm32.h>
-#define CONFIG_PREBOOT
-
/*
* Number of clock ticks in 1 sec
*/
@@ -75,20 +73,38 @@
#define CONFIG_SYS_MMC_MAX_DEVICE 3
#define CONFIG_SUPPORT_EMMC_BOOT
-#if !defined(CONFIG_SPL) || !defined(CONFIG_SPL_BUILD)
+/*****************************************************************************/
+#ifdef CONFIG_DISTRO_DEFAULTS
+/*****************************************************************************/
+
+#if !defined(CONFIG_SPL_BUILD)
#define BOOT_TARGET_DEVICES(func) \
func(MMC, mmc, 1) \
func(MMC, mmc, 0) \
func(MMC, mmc, 2)
+/*
+ * bootcmd for stm32mp1:
+ * for serial/usb: execute the stm32prog command
+ * for mmc boot (eMMC, SD card), boot only on the same device
+ * for nand boot, boot with on ubifs partition on nand
+ * for nor boot, use the default order
+ */
+#define CONFIG_PREBOOT
-#include <config_distro_bootcmd.h>
+#define STM32MP_BOOTCMD "bootcmd_stm32mp=" \
+ "echo \"Boot over ${boot_device}${boot_instance}!\";" \
+ "if test ${boot_device} = serial || test ${boot_device} = usb;" \
+ "then stm32prog ${boot_device} ${boot_instance}; " \
+ "else " \
+ "if test ${boot_device} = mmc;" \
+ "then env set boot_targets \"mmc${boot_instance}\"; fi;" \
+ "if test ${boot_device} = nand;" \
+ "then env set boot_targets ubifs0; fi;" \
+ "run distro_bootcmd;" \
+ "fi;\0"
-#define STM32MP_PREBOOT \
- "echo \"Boot over ${boot_device}${boot_instance}!\"; " \
- "if test \"${boot_device}\" = \"mmc\"; then " \
- "env set boot_targets \"mmc${boot_instance}\"; "\
- "fi;"
+#include <config_distro_bootcmd.h>
#define CONFIG_EXTRA_ENV_SETTINGS \
"scriptaddr=0xC0000000\0" \
@@ -98,9 +114,10 @@
"ramdisk_addr_r=0xC4100000\0" \
"fdt_high=0xffffffff\0" \
"initrd_high=0xffffffff\0" \
- "preboot=" STM32MP_PREBOOT "\0" \
+ STM32MP_BOOTCMD \
BOOTENV
#endif /* ifndef CONFIG_SPL_BUILD */
+#endif /* ifdef CONFIG_DISTRO_DEFAULTS*/
#endif /* __CONFIG_H */
--
2.7.4
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [U-Boot] [PATCH 09/19] stm32mp1: activate FASTBOOT on eMMC
2019-02-27 16:01 [U-Boot] [PATCH 00/19] stm32mp1: update of stm32mp arch and stm32mp1 board Patrick Delaunay
` (7 preceding siblings ...)
2019-02-27 16:01 ` [U-Boot] [PATCH 08/19] stm32mp1: update bootcmd Patrick Delaunay
@ 2019-02-27 16:01 ` Patrick Delaunay
2019-02-27 16:01 ` [U-Boot] [PATCH 10/19] stm32mp1: support forced boot mode Patrick Delaunay
` (9 subsequent siblings)
18 siblings, 0 replies; 20+ messages in thread
From: Patrick Delaunay @ 2019-02-27 16:01 UTC (permalink / raw)
To: u-boot
activate Fastboot for eMMC on EV1 board (mmc1)
$> sudo apt-get install android-tools-adb android-tools-fastboot
$> fastboot -i 0x0483 getvar bootloader-version
Signed-off-by: Patrick Delaunay <patrick.delaunay@st.com>
---
configs/stm32mp15_basic_defconfig | 7 ++++++-
configs/stm32mp15_trusted_defconfig | 7 ++++++-
2 files changed, 12 insertions(+), 2 deletions(-)
diff --git a/configs/stm32mp15_basic_defconfig b/configs/stm32mp15_basic_defconfig
index 4ab29ee..2d6a164 100644
--- a/configs/stm32mp15_basic_defconfig
+++ b/configs/stm32mp15_basic_defconfig
@@ -33,6 +33,12 @@ CONFIG_CMD_EXT4_WRITE=y
# CONFIG_SPL_DOS_PARTITION is not set
CONFIG_DEFAULT_DEVICE_TREE="stm32mp157c-ev1"
CONFIG_STM32_ADC=y
+CONFIG_USB_FUNCTION_FASTBOOT=y
+CONFIG_FASTBOOT_BUF_ADDR=0xC0000000
+CONFIG_FASTBOOT_BUF_SIZE=0x02000000
+CONFIG_FASTBOOT_USB_DEV=1
+CONFIG_FASTBOOT_FLASH=y
+CONFIG_FASTBOOT_FLASH_MMC_DEV=1
CONFIG_DM_HWSPINLOCK=y
CONFIG_HWSPINLOCK_STM32=y
CONFIG_DM_I2C=y
@@ -64,4 +70,3 @@ CONFIG_USB_GADGET_MANUFACTURER="STMicroelectronics"
CONFIG_USB_GADGET_VENDOR_NUM=0x0483
CONFIG_USB_GADGET_PRODUCT_NUM=0x5720
CONFIG_USB_GADGET_DWC2_OTG=y
-CONFIG_USB_GADGET_DOWNLOAD=y
diff --git a/configs/stm32mp15_trusted_defconfig b/configs/stm32mp15_trusted_defconfig
index 1bb3d0d..7945e9f 100644
--- a/configs/stm32mp15_trusted_defconfig
+++ b/configs/stm32mp15_trusted_defconfig
@@ -26,6 +26,12 @@ CONFIG_CMD_REGULATOR=y
CONFIG_CMD_EXT4_WRITE=y
CONFIG_DEFAULT_DEVICE_TREE="stm32mp157c-ev1"
CONFIG_STM32_ADC=y
+CONFIG_USB_FUNCTION_FASTBOOT=y
+CONFIG_FASTBOOT_BUF_ADDR=0xC0000000
+CONFIG_FASTBOOT_BUF_SIZE=0x02000000
+CONFIG_FASTBOOT_USB_DEV=1
+CONFIG_FASTBOOT_FLASH=y
+CONFIG_FASTBOOT_FLASH_MMC_DEV=1
CONFIG_DM_HWSPINLOCK=y
CONFIG_HWSPINLOCK_STM32=y
CONFIG_DM_I2C=y
@@ -55,4 +61,3 @@ CONFIG_USB_GADGET_MANUFACTURER="STMicroelectronics"
CONFIG_USB_GADGET_VENDOR_NUM=0x0483
CONFIG_USB_GADGET_PRODUCT_NUM=0x5720
CONFIG_USB_GADGET_DWC2_OTG=y
-CONFIG_USB_GADGET_DOWNLOAD=y
--
2.7.4
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [U-Boot] [PATCH 10/19] stm32mp1: support forced boot mode
2019-02-27 16:01 [U-Boot] [PATCH 00/19] stm32mp1: update of stm32mp arch and stm32mp1 board Patrick Delaunay
` (8 preceding siblings ...)
2019-02-27 16:01 ` [U-Boot] [PATCH 09/19] stm32mp1: activate FASTBOOT on eMMC Patrick Delaunay
@ 2019-02-27 16:01 ` Patrick Delaunay
2019-02-27 16:01 ` [U-Boot] [PATCH 11/19] stm32mp1: update memory layout Patrick Delaunay
` (8 subsequent siblings)
18 siblings, 0 replies; 20+ messages in thread
From: Patrick Delaunay @ 2019-02-27 16:01 UTC (permalink / raw)
To: u-boot
The boot mode can be forced by key press
or by TAMP register, requested in kernel by syscon-reboot-mode
tamp: tamp at 5c00a000 {
compatible = "simple-bus", "syscon", "simple-mfd";
reg = <0x5c00a000 0x400>;
reboot-mode {
compatible = "syscon-reboot-mode";
offset = <0x150>; /* reg20 */
mask = <0xff>;
mode-normal = <0>;
mode-fastboot = <0x1>;
mode-recovery = <0x2>;
mode-stm32cubeprogrammer = <0x3>;
mode-ums_mmc0 = <0x10>;
mode-ums_mmc1 = <0x11>;
mode-ums_mmc2 = <0x12>;
};
};
Signed-off-by: Patrick Delaunay <patrick.delaunay@st.com>
---
arch/arm/dts/stm32mp157c-ed1-u-boot.dtsi | 5 +++
arch/arm/mach-stm32mp/cpu.c | 36 +++++++++++++++++++--
arch/arm/mach-stm32mp/include/mach/stm32.h | 11 +++++++
board/st/stm32mp1/stm32mp1.c | 51 ++++++++++++++++++++++++++++++
4 files changed, 100 insertions(+), 3 deletions(-)
diff --git a/arch/arm/dts/stm32mp157c-ed1-u-boot.dtsi b/arch/arm/dts/stm32mp157c-ed1-u-boot.dtsi
index 70bbf66..d22401c 100644
--- a/arch/arm/dts/stm32mp157c-ed1-u-boot.dtsi
+++ b/arch/arm/dts/stm32mp157c-ed1-u-boot.dtsi
@@ -14,6 +14,11 @@
i2c3 = &i2c4;
};
+ config {
+ st,fastboot-gpios = <&gpioa 13 GPIO_ACTIVE_LOW>;
+ st,stm32prog-gpios = <&gpioa 14 GPIO_ACTIVE_LOW>;
+ };
+
led {
compatible = "gpio-leds";
diff --git a/arch/arm/mach-stm32mp/cpu.c b/arch/arm/mach-stm32mp/cpu.c
index 206b82e..305ea6d 100644
--- a/arch/arm/mach-stm32mp/cpu.c
+++ b/arch/arm/mach-stm32mp/cpu.c
@@ -359,12 +359,12 @@ static void setup_boot_mode(void)
u32 boot_mode =
(boot_ctx & TAMP_BOOT_MODE_MASK) >> TAMP_BOOT_MODE_SHIFT;
int instance = (boot_mode & TAMP_BOOT_INSTANCE_MASK) - 1;
+ u32 forced_mode = (boot_ctx & TAMP_BOOT_FORCED_MASK);
struct udevice *dev;
int alias;
- pr_debug("%s: boot_ctx=0x%x => boot_mode=%x, instance=%d\n",
- __func__, boot_ctx, boot_mode, instance);
-
+ pr_debug("%s: boot_ctx=0x%x => boot_mode=%x, instance=%d forced=%x\n",
+ __func__, boot_ctx, boot_mode, instance, forced_mode);
switch (boot_mode & TAMP_BOOT_DEVICE_MASK) {
case BOOT_SERIAL_UART:
if (instance > ARRAY_SIZE(serial_addr))
@@ -409,6 +409,36 @@ static void setup_boot_mode(void)
pr_debug("unexpected boot mode = %x\n", boot_mode);
break;
}
+
+ switch (forced_mode) {
+ case BOOT_FASTBOOT:
+ printf("Enter fastboot!\n");
+ env_set("preboot", "env set preboot; fastboot 0");
+ break;
+ case BOOT_STM32PROG:
+ env_set("boot_device", "usb");
+ env_set("boot_instance", "0");
+ break;
+ case BOOT_UMS_MMC0:
+ case BOOT_UMS_MMC1:
+ case BOOT_UMS_MMC2:
+ printf("Enter UMS!\n");
+ instance = forced_mode - BOOT_UMS_MMC0;
+ sprintf(cmd, "env set preboot; ums 0 mmc %d", instance);
+ env_set("preboot", cmd);
+ break;
+ case BOOT_RECOVERY:
+ env_set("preboot", "env set preboot; run altbootcmd");
+ break;
+ case BOOT_NORMAL:
+ break;
+ default:
+ pr_debug("unexpected forced boot mode = %x\n", forced_mode);
+ break;
+ }
+
+ /* clear TAMP for next reboot */
+ clrsetbits_le32(TAMP_BOOT_CONTEXT, TAMP_BOOT_FORCED_MASK, BOOT_NORMAL);
}
/*
diff --git a/arch/arm/mach-stm32mp/include/mach/stm32.h b/arch/arm/mach-stm32mp/include/mach/stm32.h
index f2ab026..da23af0 100644
--- a/arch/arm/mach-stm32mp/include/mach/stm32.h
+++ b/arch/arm/mach-stm32mp/include/mach/stm32.h
@@ -92,6 +92,17 @@ enum boot_device {
#define TAMP_BOOT_MODE_SHIFT 8
#define TAMP_BOOT_DEVICE_MASK GENMASK(7, 4)
#define TAMP_BOOT_INSTANCE_MASK GENMASK(3, 0)
+#define TAMP_BOOT_FORCED_MASK GENMASK(7, 0)
+
+enum forced_boot_mode {
+ BOOT_NORMAL = 0x00,
+ BOOT_FASTBOOT = 0x01,
+ BOOT_RECOVERY = 0x02,
+ BOOT_STM32PROG = 0x03,
+ BOOT_UMS_MMC0 = 0x10,
+ BOOT_UMS_MMC1 = 0x11,
+ BOOT_UMS_MMC2 = 0x12,
+};
/* offset used for BSEC driver: misc_read and misc_write */
#define STM32_BSEC_SHADOW_OFFSET 0x0
diff --git a/board/st/stm32mp1/stm32mp1.c b/board/st/stm32mp1/stm32mp1.c
index 0d963c2..d13793e 100644
--- a/board/st/stm32mp1/stm32mp1.c
+++ b/board/st/stm32mp1/stm32mp1.c
@@ -67,6 +67,55 @@ int checkboard(void)
return 0;
}
+static void board_key_check(void)
+{
+#if defined(CONFIG_FASTBOOT) || defined(CONFIG_CMD_STM32PROG)
+ ofnode node;
+ struct gpio_desc gpio;
+ enum forced_boot_mode boot_mode = BOOT_NORMAL;
+
+ node = ofnode_path("/config");
+ if (!ofnode_valid(node)) {
+ debug("%s: no /config node?\n", __func__);
+ return;
+ }
+#ifdef CONFIG_FASTBOOT
+ if (gpio_request_by_name_nodev(node, "st,fastboot-gpios", 0,
+ &gpio, GPIOD_IS_IN)) {
+ debug("%s: could not find a /config/st,fastboot-gpios\n",
+ __func__);
+ } else {
+ if (dm_gpio_get_value(&gpio)) {
+ puts("Fastboot key pressed, ");
+ boot_mode = BOOT_FASTBOOT;
+ }
+
+ dm_gpio_free(NULL, &gpio);
+ }
+#endif
+#ifdef CONFIG_CMD_STM32PROG
+ if (gpio_request_by_name_nodev(node, "st,stm32prog-gpios", 0,
+ &gpio, GPIOD_IS_IN)) {
+ debug("%s: could not find a /config/st,stm32prog-gpios\n",
+ __func__);
+ } else {
+ if (dm_gpio_get_value(&gpio)) {
+ puts("STM32Programmer key pressed, ");
+ boot_mode = BOOT_STM32PROG;
+ }
+ dm_gpio_free(NULL, &gpio);
+ }
+#endif
+
+ if (boot_mode != BOOT_NORMAL) {
+ puts("entering download mode...\n");
+ clrsetbits_le32(TAMP_BOOT_CONTEXT,
+ TAMP_BOOT_FORCED_MASK,
+ boot_mode);
+ }
+#endif
+}
+
static struct dwc2_plat_otg_data stm32mp_otg_data = {
.usb_gusbcfg = STM32MP_GUSBCFG,
};
@@ -227,6 +276,8 @@ int board_init(void)
/* address of boot parameters */
gd->bd->bi_boot_params = STM32_DDR_BASE + 0x100;
+ board_key_check();
+
if (IS_ENABLED(CONFIG_LED))
led_default_state();
--
2.7.4
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [U-Boot] [PATCH 11/19] stm32mp1: update memory layout
2019-02-27 16:01 [U-Boot] [PATCH 00/19] stm32mp1: update of stm32mp arch and stm32mp1 board Patrick Delaunay
` (9 preceding siblings ...)
2019-02-27 16:01 ` [U-Boot] [PATCH 10/19] stm32mp1: support forced boot mode Patrick Delaunay
@ 2019-02-27 16:01 ` Patrick Delaunay
2019-02-27 16:01 ` [U-Boot] [PATCH 12/19] stm32mp1: activated some configuration Patrick Delaunay
` (7 subsequent siblings)
18 siblings, 0 replies; 20+ messages in thread
From: Patrick Delaunay @ 2019-02-27 16:01 UTC (permalink / raw)
To: u-boot
Update the memory layout to be aligned with other platform and avoid
overlap with 32MB Linux kernel (multiv7 image).
+ Kernel => 32MiB offset = 0xC2000000
and increase the bootm size to 32MiB
+ FDT => 64MiB offset = 0xc4000000
+ SCRIPT => 65Mib offset = 0xc4100000
+ PXESCRIPT => 66Mib offset = 0xc4200000
+ SPLASHIMAGE => 67Mib offset = 0xc4300000
+ RAMDISK => 68Mib offset = 0xc4400000
(not limited size)
In sources/boot/u-boot/doc/README.distro
+ kernel_addr_r: A size of 16MB for the kernel is likely adequate.
+ pxefile_addr_r: A size of 1MB for extlinux.conf is more than adequate.
+ fdt_addr_r: A size of 1MB for the FDT/DTB seems reasonable.
+ ramdisk_addr_r: It is recommended that this location be highest in RAM
out of fdt_addr_, kernel_addr_r, and ramdisk_addr_r,
so that the RAM disk can vary in size and use any
available RAM.
+ pxefile_addr_r: A size of 1MB for extlinux.conf is more than adequate.
+ scriptaddr: A size of 1MB for extlinux.conf is more than adequate.
For suggestions on memory locations for ARM systems, you must follow
the guidelines specified in Documentation/arm/Booting
in the Linux kernel tree.
And in sources/linux-stm32mp/Documentation/arm/Booting
The zImage may also be placed in system RAM and called there. The
kernel should be placed in the first 128MiB of RAM. It is recommended
that it is loaded above 32MiB in order to avoid the need to relocate
prior to decompression, which will make the boot process slightly
faster.
Signed-off-by: Patrick Delaunay <patrick.delaunay@st.com>
---
include/configs/stm32mp1.h | 19 ++++++++++++++-----
1 file changed, 14 insertions(+), 5 deletions(-)
diff --git a/include/configs/stm32mp1.h b/include/configs/stm32mp1.h
index 48da1e3..f2508f7 100644
--- a/include/configs/stm32mp1.h
+++ b/include/configs/stm32mp1.h
@@ -53,6 +53,9 @@
#define CONFIG_SETUP_MEMORY_TAGS
#define CONFIG_INITRD_TAG
+/* Extend size of kernel image for uncompression */
+#define CONFIG_SYS_BOOTM_LEN SZ_32M
+
/* SPL support */
#ifdef CONFIG_SPL
/* BOOTROM load address */
@@ -106,12 +109,18 @@
#include <config_distro_bootcmd.h>
+/*
+ * memory layout for 32M uncompressed/compressed kernel,
+ * 1M fdt, 1M script, 1M pxe and 1M for splashimage
+ * and the ramdisk at the end.
+ */
#define CONFIG_EXTRA_ENV_SETTINGS \
- "scriptaddr=0xC0000000\0" \
- "pxefile_addr_r=0xC0000000\0" \
- "kernel_addr_r=0xC1000000\0" \
- "fdt_addr_r=0xC4000000\0" \
- "ramdisk_addr_r=0xC4100000\0" \
+ "kernel_addr_r=0xc2000000\0" \
+ "fdt_addr_r=0xc4000000\0" \
+ "scriptaddr=0xc4100000\0" \
+ "pxefile_addr_r=0xc4200000\0" \
+ "splashimage=0xc4300000\0" \
+ "ramdisk_addr_r=0xc4400000\0" \
"fdt_high=0xffffffff\0" \
"initrd_high=0xffffffff\0" \
STM32MP_BOOTCMD \
--
2.7.4
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [U-Boot] [PATCH 12/19] stm32mp1: activated some configuration
2019-02-27 16:01 [U-Boot] [PATCH 00/19] stm32mp1: update of stm32mp arch and stm32mp1 board Patrick Delaunay
` (10 preceding siblings ...)
2019-02-27 16:01 ` [U-Boot] [PATCH 11/19] stm32mp1: update memory layout Patrick Delaunay
@ 2019-02-27 16:01 ` Patrick Delaunay
2019-02-27 16:01 ` [U-Boot] [PATCH 13/19] stm32mp1: add some syscon drivers for syscfg and etpzc Patrick Delaunay
` (6 subsequent siblings)
18 siblings, 0 replies; 20+ messages in thread
From: Patrick Delaunay @ 2019-02-27 16:01 UTC (permalink / raw)
To: u-boot
Add configuration useful for test
- FIT support
- MEMTEST
- DFU
- CACHE
- TIME
- TIMER
Signed-off-by: Patrick Delaunay <patrick.delaunay@st.com>
---
configs/stm32mp15_basic_defconfig | 6 ++++++
configs/stm32mp15_trusted_defconfig | 6 ++++++
include/configs/stm32mp1.h | 4 ++++
3 files changed, 16 insertions(+)
diff --git a/configs/stm32mp15_basic_defconfig b/configs/stm32mp15_basic_defconfig
index 2d6a164..fa27cad 100644
--- a/configs/stm32mp15_basic_defconfig
+++ b/configs/stm32mp15_basic_defconfig
@@ -5,6 +5,7 @@ CONFIG_SPL_MMC_SUPPORT=y
CONFIG_SPL=y
CONFIG_TARGET_STM32MP1=y
CONFIG_DISTRO_DEFAULTS=y
+CONFIG_FIT=y
CONFIG_BOOTCOMMAND="run bootcmd_stm32mp"
CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_USE_PARTITION=y
CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_PARTITION=3
@@ -18,8 +19,10 @@ CONFIG_SYS_PROMPT="STM32MP> "
# CONFIG_CMD_EXPORTENV is not set
# CONFIG_CMD_IMPORTENV is not set
CONFIG_CMD_MEMINFO=y
+CONFIG_CMD_MEMTEST=y
CONFIG_CMD_ADC=y
CONFIG_CMD_CLK=y
+CONFIG_CMD_DFU=y
CONFIG_CMD_FUSE=y
CONFIG_CMD_GPIO=y
CONFIG_CMD_GPT=y
@@ -27,6 +30,9 @@ CONFIG_CMD_I2C=y
CONFIG_CMD_MMC=y
CONFIG_CMD_USB=y
CONFIG_CMD_USB_MASS_STORAGE=y
+CONFIG_CMD_CACHE=y
+CONFIG_CMD_TIME=y
+CONFIG_CMD_TIMER=y
CONFIG_CMD_PMIC=y
CONFIG_CMD_REGULATOR=y
CONFIG_CMD_EXT4_WRITE=y
diff --git a/configs/stm32mp15_trusted_defconfig b/configs/stm32mp15_trusted_defconfig
index 7945e9f..447c1d9 100644
--- a/configs/stm32mp15_trusted_defconfig
+++ b/configs/stm32mp15_trusted_defconfig
@@ -3,6 +3,7 @@ CONFIG_ARCH_STM32MP=y
CONFIG_SYS_MALLOC_F_LEN=0x2000
CONFIG_TARGET_STM32MP1=y
CONFIG_DISTRO_DEFAULTS=y
+CONFIG_FIT=y
CONFIG_BOOTCOMMAND="run bootcmd_stm32mp"
CONFIG_SYS_PROMPT="STM32MP> "
# CONFIG_CMD_BOOTD is not set
@@ -12,8 +13,10 @@ CONFIG_SYS_PROMPT="STM32MP> "
# CONFIG_CMD_EXPORTENV is not set
# CONFIG_CMD_IMPORTENV is not set
CONFIG_CMD_MEMINFO=y
+CONFIG_CMD_MEMTEST=y
CONFIG_CMD_ADC=y
CONFIG_CMD_CLK=y
+CONFIG_CMD_DFU=y
CONFIG_CMD_FUSE=y
CONFIG_CMD_GPIO=y
CONFIG_CMD_GPT=y
@@ -21,6 +24,9 @@ CONFIG_CMD_I2C=y
CONFIG_CMD_MMC=y
CONFIG_CMD_USB=y
CONFIG_CMD_USB_MASS_STORAGE=y
+CONFIG_CMD_CACHE=y
+CONFIG_CMD_TIME=y
+CONFIG_CMD_TIMER=y
CONFIG_CMD_PMIC=y
CONFIG_CMD_REGULATOR=y
CONFIG_CMD_EXT4_WRITE=y
diff --git a/include/configs/stm32mp1.h b/include/configs/stm32mp1.h
index f2508f7..737dfd6 100644
--- a/include/configs/stm32mp1.h
+++ b/include/configs/stm32mp1.h
@@ -72,6 +72,10 @@
STM32_SYSRAM_SIZE)
#endif /* #ifdef CONFIG_SPL */
+#define CONFIG_SYS_MEMTEST_START STM32_DDR_BASE
+#define CONFIG_SYS_MEMTEST_END (CONFIG_SYS_MEMTEST_START + SZ_64M)
+#define CONFIG_SYS_MEMTEST_SCRATCH (CONFIG_SYS_MEMTEST_END + 4)
+
/*MMC SD*/
#define CONFIG_SYS_MMC_MAX_DEVICE 3
#define CONFIG_SUPPORT_EMMC_BOOT
--
2.7.4
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [U-Boot] [PATCH 13/19] stm32mp1: add some syscon drivers for syscfg and etpzc
2019-02-27 16:01 [U-Boot] [PATCH 00/19] stm32mp1: update of stm32mp arch and stm32mp1 board Patrick Delaunay
` (11 preceding siblings ...)
2019-02-27 16:01 ` [U-Boot] [PATCH 12/19] stm32mp1: activated some configuration Patrick Delaunay
@ 2019-02-27 16:01 ` Patrick Delaunay
2019-02-27 16:01 ` [U-Boot] [PATCH 14/19] stm32mp1: add syscfg initialization Patrick Delaunay
` (5 subsequent siblings)
18 siblings, 0 replies; 20+ messages in thread
From: Patrick Delaunay @ 2019-02-27 16:01 UTC (permalink / raw)
To: u-boot
Add SYSCON driver for syscfg and etpzc and reorder in alphabetics order
Signed-off-by: Patrick Delaunay <patrick.delaunay@st.com>
---
arch/arm/dts/stm32mp157c.dtsi | 2 +-
arch/arm/mach-stm32mp/include/mach/stm32.h | 4 +++-
arch/arm/mach-stm32mp/syscon.c | 9 +++++----
3 files changed, 9 insertions(+), 6 deletions(-)
diff --git a/arch/arm/dts/stm32mp157c.dtsi b/arch/arm/dts/stm32mp157c.dtsi
index 37cadfa..d1d0f90 100644
--- a/arch/arm/dts/stm32mp157c.dtsi
+++ b/arch/arm/dts/stm32mp157c.dtsi
@@ -754,7 +754,7 @@
};
syscfg: system-config at 50020000 {
- compatible = "st,stm32-syscfg", "syscon";
+ compatible = "st,stm32mp157-syscfg", "syscon";
reg = <0x50020000 0x400>;
};
diff --git a/arch/arm/mach-stm32mp/include/mach/stm32.h b/arch/arm/mach-stm32mp/include/mach/stm32.h
index da23af0..d153ac8 100644
--- a/arch/arm/mach-stm32mp/include/mach/stm32.h
+++ b/arch/arm/mach-stm32mp/include/mach/stm32.h
@@ -37,8 +37,10 @@
/* enumerated used to identify the SYSCON driver instance */
enum {
STM32MP_SYSCON_UNKNOWN,
- STM32MP_SYSCON_STGEN,
+ STM32MP_SYSCON_ETZPC,
STM32MP_SYSCON_PWR,
+ STM32MP_SYSCON_STGEN,
+ STM32MP_SYSCON_SYSCFG,
};
/*
diff --git a/arch/arm/mach-stm32mp/syscon.c b/arch/arm/mach-stm32mp/syscon.c
index eb7f435..242f834 100644
--- a/arch/arm/mach-stm32mp/syscon.c
+++ b/arch/arm/mach-stm32mp/syscon.c
@@ -9,10 +9,11 @@
#include <asm/arch/stm32.h>
static const struct udevice_id stm32mp_syscon_ids[] = {
- { .compatible = "st,stm32-stgen",
- .data = STM32MP_SYSCON_STGEN },
- { .compatible = "st,stm32mp1-pwr",
- .data = STM32MP_SYSCON_PWR },
+ { .compatible = "st,stm32mp1-etzpc", .data = STM32MP_SYSCON_ETZPC },
+ { .compatible = "st,stm32mp1-pwr", .data = STM32MP_SYSCON_PWR },
+ { .compatible = "st,stm32-stgen", .data = STM32MP_SYSCON_STGEN },
+ { .compatible = "st,stm32mp157-syscfg",
+ .data = STM32MP_SYSCON_SYSCFG },
{ }
};
--
2.7.4
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [U-Boot] [PATCH 14/19] stm32mp1: add syscfg initialization
2019-02-27 16:01 [U-Boot] [PATCH 00/19] stm32mp1: update of stm32mp arch and stm32mp1 board Patrick Delaunay
` (12 preceding siblings ...)
2019-02-27 16:01 ` [U-Boot] [PATCH 13/19] stm32mp1: add some syscon drivers for syscfg and etpzc Patrick Delaunay
@ 2019-02-27 16:01 ` Patrick Delaunay
2019-02-27 16:01 ` [U-Boot] [PATCH 15/19] stm32mp1: align serial number on bootrom Patrick Delaunay
` (4 subsequent siblings)
18 siblings, 0 replies; 20+ messages in thread
From: Patrick Delaunay @ 2019-02-27 16:01 UTC (permalink / raw)
To: u-boot
Initialize the system configuration for basic boot
- update interconnect setting
- disable pull-down for boot pin
- enable High Speed Low Voltage Pad mode for SPI, SDMMC, ETH, QSPI
- activate I/O compensation
Done by SSBL = TF-A for trusted boot
Signed-off-by: Patrick Delaunay <patrick.delaunay@st.com>
---
board/st/stm32mp1/stm32mp1.c | 130 ++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 129 insertions(+), 1 deletion(-)
diff --git a/board/st/stm32mp1/stm32mp1.c b/board/st/stm32mp1/stm32mp1.c
index d13793e..2829180 100644
--- a/board/st/stm32mp1/stm32mp1.c
+++ b/board/st/stm32mp1/stm32mp1.c
@@ -11,13 +11,47 @@
#include <misc.h>
#include <phy.h>
#include <reset.h>
+#include <syscon.h>
#include <usb.h>
-#include <asm/arch/stm32.h>
#include <asm/io.h>
#include <asm/gpio.h>
+#include <asm/arch/stm32.h>
#include <power/regulator.h>
#include <usb/dwc2_udc.h>
+/* SYSCFG registers */
+#define SYSCFG_BOOTR 0x00
+#define SYSCFG_PMCSETR 0x04
+#define SYSCFG_IOCTRLSETR 0x18
+#define SYSCFG_ICNR 0x1C
+#define SYSCFG_CMPCR 0x20
+#define SYSCFG_CMPENSETR 0x24
+#define SYSCFG_PMCCLRR 0x44
+
+#define SYSCFG_BOOTR_BOOT_MASK GENMASK(2, 0)
+#define SYSCFG_BOOTR_BOOTPD_SHIFT 4
+
+#define SYSCFG_IOCTRLSETR_HSLVEN_TRACE BIT(0)
+#define SYSCFG_IOCTRLSETR_HSLVEN_QUADSPI BIT(1)
+#define SYSCFG_IOCTRLSETR_HSLVEN_ETH BIT(2)
+#define SYSCFG_IOCTRLSETR_HSLVEN_SDMMC BIT(3)
+#define SYSCFG_IOCTRLSETR_HSLVEN_SPI BIT(4)
+
+#define SYSCFG_CMPCR_SW_CTRL BIT(1)
+#define SYSCFG_CMPCR_READY BIT(8)
+
+#define SYSCFG_CMPENSETR_MPU_EN BIT(0)
+
+#define SYSCFG_PMCSETR_ETH_CLK_SEL BIT(16)
+#define SYSCFG_PMCSETR_ETH_REF_CLK_SEL BIT(17)
+
+#define SYSCFG_PMCSETR_ETH_SELMII BIT(20)
+
+#define SYSCFG_PMCSETR_ETH_SEL_MASK GENMASK(23, 21)
+#define SYSCFG_PMCSETR_ETH_SEL_GMII_MII (0 << 21)
+#define SYSCFG_PMCSETR_ETH_SEL_RGMII (1 << 21)
+#define SYSCFG_PMCSETR_ETH_SEL_RMII (4 << 21)
+
/*
* Get a global data pointer
*/
@@ -270,6 +304,98 @@ int board_usb_cleanup(int index, enum usb_init_type init)
return 0;
}
+static void sysconf_init(void)
+{
+#ifndef CONFIG_STM32MP1_TRUSTED
+ u8 *syscfg;
+#ifdef CONFIG_DM_REGULATOR
+ struct udevice *pwr_dev;
+ struct udevice *pwr_reg;
+ struct udevice *dev;
+ int ret;
+ u32 otp = 0;
+#endif
+ u32 bootr;
+
+ syscfg = (u8 *)syscon_get_first_range(STM32MP_SYSCON_SYSCFG);
+
+ /* interconnect update : select master using the port 1 */
+ /* LTDC = AXI_M9 */
+ /* GPU = AXI_M8 */
+ /* today information is hardcoded in U-Boot */
+ writel(BIT(9), syscfg + SYSCFG_ICNR);
+
+ /* disable Pull-Down for boot pin connected to VDD */
+ bootr = readl(syscfg + SYSCFG_BOOTR);
+ bootr &= ~(SYSCFG_BOOTR_BOOT_MASK << SYSCFG_BOOTR_BOOTPD_SHIFT);
+ bootr |= (bootr & SYSCFG_BOOTR_BOOT_MASK) << SYSCFG_BOOTR_BOOTPD_SHIFT;
+ writel(bootr, syscfg + SYSCFG_BOOTR);
+
+#ifdef CONFIG_DM_REGULATOR
+ /* High Speed Low Voltage Pad mode Enable for SPI, SDMMC, ETH, QSPI
+ * and TRACE. Needed above ~50MHz and conditioned by AFMUX selection.
+ * The customer will have to disable this for low frequencies
+ * or if AFMUX is selected but the function not used, typically for
+ * TRACE. Otherwise, impact on power consumption.
+ *
+ * WARNING:
+ * enabling High Speed mode while VDD>2.7V
+ * with the OTP product_below_2v5 (OTP 18, BIT 13)
+ * erroneously set to 1 can damage the IC!
+ * => U-Boot set the register only if VDD < 2.7V (in DT)
+ * but this value need to be consistent with board design
+ */
+ ret = syscon_get_by_driver_data(STM32MP_SYSCON_PWR, &pwr_dev);
+ if (!ret) {
+ ret = uclass_get_device_by_driver(UCLASS_MISC,
+ DM_GET_DRIVER(stm32mp_bsec),
+ &dev);
+ if (ret) {
+ pr_err("Can't find stm32mp_bsec driver\n");
+ return;
+ }
+
+ ret = misc_read(dev, STM32_BSEC_SHADOW(18), &otp, 4);
+ if (!ret)
+ otp = otp & BIT(13);
+
+ /* get VDD = pwr-supply */
+ ret = device_get_supply_regulator(pwr_dev, "pwr-supply",
+ &pwr_reg);
+
+ /* check if VDD is Low Voltage */
+ if (!ret) {
+ if (regulator_get_value(pwr_reg) < 2700000) {
+ writel(SYSCFG_IOCTRLSETR_HSLVEN_TRACE |
+ SYSCFG_IOCTRLSETR_HSLVEN_QUADSPI |
+ SYSCFG_IOCTRLSETR_HSLVEN_ETH |
+ SYSCFG_IOCTRLSETR_HSLVEN_SDMMC |
+ SYSCFG_IOCTRLSETR_HSLVEN_SPI,
+ syscfg + SYSCFG_IOCTRLSETR);
+
+ if (!otp)
+ pr_err("product_below_2v5=0: HSLVEN protected by HW\n");
+ } else {
+ if (otp)
+ pr_err("product_below_2v5=1: HSLVEN update is destructive, no update as VDD>2.7V\n");
+ }
+ } else {
+ debug("VDD unknown");
+ }
+ }
+#endif
+
+ /* activate automatic I/O compensation
+ * warning: need to ensure CSI enabled and ready in clock driver
+ */
+ writel(SYSCFG_CMPENSETR_MPU_EN, syscfg + SYSCFG_CMPENSETR);
+
+ while (!(readl(syscfg + SYSCFG_CMPCR) & SYSCFG_CMPCR_READY))
+ ;
+ clrbits_le32(syscfg + SYSCFG_CMPCR, SYSCFG_CMPCR_SW_CTRL);
+#endif
+}
+
/* board dependent setup after realloc */
int board_init(void)
{
@@ -278,6 +404,8 @@ int board_init(void)
board_key_check();
+ sysconf_init();
+
if (IS_ENABLED(CONFIG_LED))
led_default_state();
--
2.7.4
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [U-Boot] [PATCH 15/19] stm32mp1: align serial number on bootrom
2019-02-27 16:01 [U-Boot] [PATCH 00/19] stm32mp1: update of stm32mp arch and stm32mp1 board Patrick Delaunay
` (13 preceding siblings ...)
2019-02-27 16:01 ` [U-Boot] [PATCH 14/19] stm32mp1: add syscfg initialization Patrick Delaunay
@ 2019-02-27 16:01 ` Patrick Delaunay
2019-02-27 16:01 ` [U-Boot] [PATCH 16/19] stm32mp1: basic boot: SPL enable access to GPIOZ bank Patrick Delaunay
` (3 subsequent siblings)
18 siblings, 0 replies; 20+ messages in thread
From: Patrick Delaunay @ 2019-02-27 16:01 UTC (permalink / raw)
To: u-boot
Always use upper case for serial number.
Signed-off-by: Patrick Delaunay <patrick.delaunay@st.com>
---
arch/arm/mach-stm32mp/cpu.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/arch/arm/mach-stm32mp/cpu.c b/arch/arm/mach-stm32mp/cpu.c
index 305ea6d..5d79bde 100644
--- a/arch/arm/mach-stm32mp/cpu.c
+++ b/arch/arm/mach-stm32mp/cpu.c
@@ -507,7 +507,7 @@ static int setup_serial_number(void)
if (ret < 0)
return ret;
- sprintf(serial_string, "%08x%08x%08x", otp[0], otp[1], otp[2]);
+ sprintf(serial_string, "%08X%08X%08X", otp[0], otp[1], otp[2]);
env_set("serial#", serial_string);
return 0;
--
2.7.4
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [U-Boot] [PATCH 16/19] stm32mp1: basic boot: SPL enable access to GPIOZ bank
2019-02-27 16:01 [U-Boot] [PATCH 00/19] stm32mp1: update of stm32mp arch and stm32mp1 board Patrick Delaunay
` (14 preceding siblings ...)
2019-02-27 16:01 ` [U-Boot] [PATCH 15/19] stm32mp1: align serial number on bootrom Patrick Delaunay
@ 2019-02-27 16:01 ` Patrick Delaunay
2019-02-27 16:01 ` [U-Boot] [PATCH 17/19] stm32mp1: bsec: use device tree new compatible Patrick Delaunay
` (2 subsequent siblings)
18 siblings, 0 replies; 20+ messages in thread
From: Patrick Delaunay @ 2019-02-27 16:01 UTC (permalink / raw)
To: u-boot
SPL need to set GPIOZ_SECCFGR = 0 to enable access to GPIOZ bank
(open security).
Signed-off-by: Patrick Delaunay <patrick.delaunay@st.com>
---
arch/arm/mach-stm32mp/cpu.c | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/arch/arm/mach-stm32mp/cpu.c b/arch/arm/mach-stm32mp/cpu.c
index 5d79bde..f39941e 100644
--- a/arch/arm/mach-stm32mp/cpu.c
+++ b/arch/arm/mach-stm32mp/cpu.c
@@ -18,6 +18,7 @@
#define RCC_DBGCFGR (STM32_RCC_BASE + 0x080C)
#define RCC_BDCR (STM32_RCC_BASE + 0x0140)
#define RCC_MP_APB5ENSETR (STM32_RCC_BASE + 0x0208)
+#define RCC_MP_AHB5ENSETR (STM32_RCC_BASE + 0x0210)
#define RCC_BDCR_VSWRST BIT(31)
#define RCC_BDCR_RTCSRC GENMASK(17, 16)
#define RCC_DBGCFGR_DBGCKEN BIT(8)
@@ -44,6 +45,9 @@
#define DBGMCU_IDC_REV_ID_MASK GENMASK(31, 16)
#define DBGMCU_IDC_REV_ID_SHIFT 16
+/* GPIOZ registers */
+#define GPIOZ_SECCFGR 0x54004030
+
/* boot interface from Bootrom
* - boot instance = bit 31:16
* - boot device = bit 15:0
@@ -135,6 +139,10 @@ static void security_init(void)
* Bit 16 ITAMP1E: RTC power domain supply monitoring
*/
writel(0x0, TAMP_CR1);
+
+ /* GPIOZ: deactivate the security */
+ writel(BIT(0), RCC_MP_AHB5ENSETR);
+ writel(0x0, GPIOZ_SECCFGR);
}
#endif /* CONFIG_STM32MP1_TRUSTED */
--
2.7.4
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [U-Boot] [PATCH 17/19] stm32mp1: bsec: use device tree new compatible
2019-02-27 16:01 [U-Boot] [PATCH 00/19] stm32mp1: update of stm32mp arch and stm32mp1 board Patrick Delaunay
` (15 preceding siblings ...)
2019-02-27 16:01 ` [U-Boot] [PATCH 16/19] stm32mp1: basic boot: SPL enable access to GPIOZ bank Patrick Delaunay
@ 2019-02-27 16:01 ` Patrick Delaunay
2019-02-27 16:01 ` [U-Boot] [PATCH 18/19] stm32mp1: bsec: shadow all the upper OTP (no secure) during boot Patrick Delaunay
2019-02-27 16:01 ` [U-Boot] [PATCH 19/19] stm32mp1: Replace OTP read by SHADOW read Patrick Delaunay
18 siblings, 0 replies; 20+ messages in thread
From: Patrick Delaunay @ 2019-02-27 16:01 UTC (permalink / raw)
To: u-boot
Update bsec driver to use the device tree provided by Kernel.
Signed-off-by: Patrick Delaunay <patrick.delaunay@st.com>
---
arch/arm/dts/stm32mp157-u-boot.dtsi | 4 ++++
arch/arm/dts/stm32mp157c.dtsi | 7 +++++++
arch/arm/mach-stm32mp/bsec.c | 12 +-----------
arch/arm/mach-stm32mp/include/mach/stm32.h | 1 -
4 files changed, 12 insertions(+), 12 deletions(-)
diff --git a/arch/arm/dts/stm32mp157-u-boot.dtsi b/arch/arm/dts/stm32mp157-u-boot.dtsi
index 90d13f3..2594702 100644
--- a/arch/arm/dts/stm32mp157-u-boot.dtsi
+++ b/arch/arm/dts/stm32mp157-u-boot.dtsi
@@ -39,6 +39,10 @@
};
};
+&bsec {
+ u-boot,dm-pre-reloc;
+};
+
&clk_hsi {
u-boot,dm-pre-reloc;
};
diff --git a/arch/arm/dts/stm32mp157c.dtsi b/arch/arm/dts/stm32mp157c.dtsi
index d1d0f90..50978ef 100644
--- a/arch/arm/dts/stm32mp157c.dtsi
+++ b/arch/arm/dts/stm32mp157c.dtsi
@@ -996,6 +996,13 @@
status = "disabled";
};
+ bsec: nvmem at 5c005000 {
+ compatible = "st,stm32mp15-bsec";
+ reg = <0x5c005000 0x400>;
+ #address-cells = <1>;
+ #size-cells = <1>;
+ };
+
i2c6: i2c at 5c009000 {
compatible = "st,stm32f7-i2c";
reg = <0x5c009000 0x400>;
diff --git a/arch/arm/mach-stm32mp/bsec.c b/arch/arm/mach-stm32mp/bsec.c
index 920a6c9..8c5a299 100644
--- a/arch/arm/mach-stm32mp/bsec.c
+++ b/arch/arm/mach-stm32mp/bsec.c
@@ -434,7 +434,7 @@ static int stm32mp_bsec_ofdata_to_platdata(struct udevice *dev)
}
static const struct udevice_id stm32mp_bsec_ids[] = {
- { .compatible = "st,stm32mp-bsec" },
+ { .compatible = "st,stm32mp15-bsec" },
{}
};
@@ -446,13 +446,3 @@ U_BOOT_DRIVER(stm32mp_bsec) = {
.platdata_auto_alloc_size = sizeof(struct stm32mp_bsec_platdata),
.ops = &stm32mp_bsec_ops,
};
-
-/* bsec IP is not present in device tee, manage IP address by platdata */
-static struct stm32mp_bsec_platdata stm32_bsec_platdata = {
- .base = STM32_BSEC_BASE,
-};
-
-U_BOOT_DEVICE(stm32mp_bsec) = {
- .name = "stm32mp_bsec",
- .platdata = &stm32_bsec_platdata,
-};
diff --git a/arch/arm/mach-stm32mp/include/mach/stm32.h b/arch/arm/mach-stm32mp/include/mach/stm32.h
index d153ac8..c526c88 100644
--- a/arch/arm/mach-stm32mp/include/mach/stm32.h
+++ b/arch/arm/mach-stm32mp/include/mach/stm32.h
@@ -13,7 +13,6 @@
#define STM32_RCC_BASE 0x50000000
#define STM32_PWR_BASE 0x50001000
#define STM32_DBGMCU_BASE 0x50081000
-#define STM32_BSEC_BASE 0x5C005000
#define STM32_TZC_BASE 0x5C006000
#define STM32_ETZPC_BASE 0x5C007000
#define STM32_TAMP_BASE 0x5C00A000
--
2.7.4
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [U-Boot] [PATCH 18/19] stm32mp1: bsec: shadow all the upper OTP (no secure) during boot
2019-02-27 16:01 [U-Boot] [PATCH 00/19] stm32mp1: update of stm32mp arch and stm32mp1 board Patrick Delaunay
` (16 preceding siblings ...)
2019-02-27 16:01 ` [U-Boot] [PATCH 17/19] stm32mp1: bsec: use device tree new compatible Patrick Delaunay
@ 2019-02-27 16:01 ` Patrick Delaunay
2019-02-27 16:01 ` [U-Boot] [PATCH 19/19] stm32mp1: Replace OTP read by SHADOW read Patrick Delaunay
18 siblings, 0 replies; 20+ messages in thread
From: Patrick Delaunay @ 2019-02-27 16:01 UTC (permalink / raw)
To: u-boot
Signed-off-by: Patrick Delaunay <patrick.delaunay@st.com>
---
arch/arm/mach-stm32mp/bsec.c | 20 +++++++++++++++++++-
1 file changed, 19 insertions(+), 1 deletion(-)
diff --git a/arch/arm/mach-stm32mp/bsec.c b/arch/arm/mach-stm32mp/bsec.c
index 8c5a299..9ed8d8c 100644
--- a/arch/arm/mach-stm32mp/bsec.c
+++ b/arch/arm/mach-stm32mp/bsec.c
@@ -171,7 +171,7 @@ static int bsec_shadow_register(u32 base, u32 otp)
ret = bsec_power_safmem(base, true);
if (ret)
return ret;
- power_up = 1;
+ power_up = true;
}
/* set BSEC_OTP_CTRL_OFF with the otp value*/
writel(otp | BSEC_READ, base + BSEC_OTP_CTRL_OFF);
@@ -433,6 +433,21 @@ static int stm32mp_bsec_ofdata_to_platdata(struct udevice *dev)
return 0;
}
+#ifndef CONFIG_STM32MP1_TRUSTED
+static int stm32mp_bsec_probe(struct udevice *dev)
+{
+ int otp;
+ struct stm32mp_bsec_platdata *plat = dev_get_platdata(dev);
+
+ /* update unlocked shadow for OTP cleared by the rom code */
+ for (otp = 57; otp <= BSEC_OTP_MAX_VALUE; otp++)
+ if (!bsec_read_SR_lock(plat->base, otp))
+ bsec_shadow_register(plat->base, otp);
+
+ return 0;
+}
+#endif
+
static const struct udevice_id stm32mp_bsec_ids[] = {
{ .compatible = "st,stm32mp15-bsec" },
{}
@@ -445,4 +460,7 @@ U_BOOT_DRIVER(stm32mp_bsec) = {
.ofdata_to_platdata = stm32mp_bsec_ofdata_to_platdata,
.platdata_auto_alloc_size = sizeof(struct stm32mp_bsec_platdata),
.ops = &stm32mp_bsec_ops,
+#ifndef CONFIG_STM32MP1_TRUSTED
+ .probe = stm32mp_bsec_probe,
+#endif
};
--
2.7.4
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [U-Boot] [PATCH 19/19] stm32mp1: Replace OTP read by SHADOW read
2019-02-27 16:01 [U-Boot] [PATCH 00/19] stm32mp1: update of stm32mp arch and stm32mp1 board Patrick Delaunay
` (17 preceding siblings ...)
2019-02-27 16:01 ` [U-Boot] [PATCH 18/19] stm32mp1: bsec: shadow all the upper OTP (no secure) during boot Patrick Delaunay
@ 2019-02-27 16:01 ` Patrick Delaunay
18 siblings, 0 replies; 20+ messages in thread
From: Patrick Delaunay @ 2019-02-27 16:01 UTC (permalink / raw)
To: u-boot
Replace STM32_BSEC_OTP() by STM32_BSEC_SHADOW() to
increase read performance.
Signed-off-by: Patrice Chotard <patrice.chotard@st.com>
Signed-off-by: Patrick Delaunay <patrick.delaunay@st.com>
---
arch/arm/mach-stm32mp/cpu.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/arch/arm/mach-stm32mp/cpu.c b/arch/arm/mach-stm32mp/cpu.c
index f39941e..7b4431c 100644
--- a/arch/arm/mach-stm32mp/cpu.c
+++ b/arch/arm/mach-stm32mp/cpu.c
@@ -472,7 +472,7 @@ static int setup_mac_address(void)
if (ret)
return ret;
- ret = misc_read(dev, BSEC_OTP_MAC * 4 + STM32_BSEC_OTP_OFFSET,
+ ret = misc_read(dev, STM32_BSEC_SHADOW(BSEC_OTP_MAC),
otp, sizeof(otp));
if (ret < 0)
return ret;
@@ -510,7 +510,7 @@ static int setup_serial_number(void)
if (ret)
return ret;
- ret = misc_read(dev, BSEC_OTP_SERIAL * 4 + STM32_BSEC_OTP_OFFSET,
+ ret = misc_read(dev, STM32_BSEC_SHADOW(BSEC_OTP_SERIAL),
otp, sizeof(otp));
if (ret < 0)
return ret;
--
2.7.4
^ permalink raw reply related [flat|nested] 20+ messages in thread
end of thread, other threads:[~2019-02-27 16:01 UTC | newest]
Thread overview: 20+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-02-27 16:01 [U-Boot] [PATCH 00/19] stm32mp1: update of stm32mp arch and stm32mp1 board Patrick Delaunay
2019-02-27 16:01 ` [U-Boot] [PATCH 01/19] stm32mp1: add runtime information in environment Patrick Delaunay
2019-02-27 16:01 ` [U-Boot] [PATCH 02/19] stm32mp1: update boot mode management Patrick Delaunay
2019-02-27 16:01 ` [U-Boot] [PATCH 03/19] stm32mp1: update print_cpuinfo() Patrick Delaunay
2019-02-27 16:01 ` [U-Boot] [PATCH 04/19] stm32mp1: spl: add spl_display_print Patrick Delaunay
2019-02-27 16:01 ` [U-Boot] [PATCH 05/19] stm32mp1: cosmetic cleanup Kconfig Patrick Delaunay
2019-02-27 16:01 ` [U-Boot] [PATCH 06/19] stm32mp1: cosmetic: add comment on psci_migrate_info_type return value Patrick Delaunay
2019-02-27 16:01 ` [U-Boot] [PATCH 07/19] stm32mp1: spl: hang with trace when DDR init failed Patrick Delaunay
2019-02-27 16:01 ` [U-Boot] [PATCH 08/19] stm32mp1: update bootcmd Patrick Delaunay
2019-02-27 16:01 ` [U-Boot] [PATCH 09/19] stm32mp1: activate FASTBOOT on eMMC Patrick Delaunay
2019-02-27 16:01 ` [U-Boot] [PATCH 10/19] stm32mp1: support forced boot mode Patrick Delaunay
2019-02-27 16:01 ` [U-Boot] [PATCH 11/19] stm32mp1: update memory layout Patrick Delaunay
2019-02-27 16:01 ` [U-Boot] [PATCH 12/19] stm32mp1: activated some configuration Patrick Delaunay
2019-02-27 16:01 ` [U-Boot] [PATCH 13/19] stm32mp1: add some syscon drivers for syscfg and etpzc Patrick Delaunay
2019-02-27 16:01 ` [U-Boot] [PATCH 14/19] stm32mp1: add syscfg initialization Patrick Delaunay
2019-02-27 16:01 ` [U-Boot] [PATCH 15/19] stm32mp1: align serial number on bootrom Patrick Delaunay
2019-02-27 16:01 ` [U-Boot] [PATCH 16/19] stm32mp1: basic boot: SPL enable access to GPIOZ bank Patrick Delaunay
2019-02-27 16:01 ` [U-Boot] [PATCH 17/19] stm32mp1: bsec: use device tree new compatible Patrick Delaunay
2019-02-27 16:01 ` [U-Boot] [PATCH 18/19] stm32mp1: bsec: shadow all the upper OTP (no secure) during boot Patrick Delaunay
2019-02-27 16:01 ` [U-Boot] [PATCH 19/19] stm32mp1: Replace OTP read by SHADOW read Patrick Delaunay
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.