[U-Boot] [PATCH 0/2] Fix get_device_type() problems

The comit 00bbe96ebabb ("arm: omap: Unify get_device_type() function") does not play nice with early errata workarounds and needs some fixes. And because it does not bring any practical improvements anyway (other than increasing the SPL size and introducing more lines of code), it's best to revert it for now.
The second patch in this series improves testing coverage and should prevent similar regressions in the future.
Siarhei Siamashka (2): Revert "arm: omap: Unify get_device_type() function" arm: Exercise v7_arch_cp15_set_acr even without errata fixups
arch/arm/cpu/armv7/start.S | 32 ++++++++++++-------------------- arch/arm/include/asm/arch-am33xx/cpu.h | 6 ++++++ arch/arm/include/asm/arch-am33xx/omap.h | 3 --- arch/arm/include/asm/arch-omap3/omap.h | 3 --- arch/arm/include/asm/arch-omap4/omap.h | 1 + arch/arm/include/asm/arch-omap5/omap.h | 1 + arch/arm/include/asm/omap_common.h | 11 +---------- arch/arm/mach-omap2/Makefile | 1 - arch/arm/mach-omap2/am33xx/Makefile | 2 -- arch/arm/mach-omap2/am33xx/board.c | 3 --- arch/arm/mach-omap2/am33xx/hw_data.c | 19 ------------------- arch/arm/mach-omap2/am33xx/prcm-regs.c | 15 --------------- arch/arm/mach-omap2/am33xx/sys_info.c | 10 ++++++++++ arch/arm/mach-omap2/hwinit-common.c | 9 +++++++++ arch/arm/mach-omap2/omap3/Makefile | 2 -- arch/arm/mach-omap2/omap3/board.c | 7 ------- arch/arm/mach-omap2/omap3/hw_data.c | 19 ------------------- arch/arm/mach-omap2/omap3/prcm-regs.c | 15 --------------- arch/arm/mach-omap2/omap3/sys_info.c | 9 ++++++++- arch/arm/mach-omap2/sysinfo-common.c | 21 --------------------- board/ti/am335x/board.c | 1 - board/ti/am43xx/board.c | 1 - 22 files changed, 48 insertions(+), 143 deletions(-) delete mode 100644 arch/arm/mach-omap2/am33xx/hw_data.c delete mode 100644 arch/arm/mach-omap2/am33xx/prcm-regs.c delete mode 100644 arch/arm/mach-omap2/omap3/hw_data.c delete mode 100644 arch/arm/mach-omap2/omap3/prcm-regs.c delete mode 100644 arch/arm/mach-omap2/sysinfo-common.c

This reverts commit 00bbe96ebabbc83777cd8d6c6fd2791c5c8cf619.
There were two major problems with this patch: 1. It made OMAP3530 devices non-bootable, as reported and investigated by Derald D. Woods in https://lists.denx.de/pipermail/u-boot/2017-August/302192.html 2. The SPL code size increased really a lot.
SPL size for omap3_beagle_defconfig build with GCC 6:
== before reverting == text data bss dec hex filename 49721 1505 203200 254426 3e1da spl/u-boot-spl
== after reverting == text data bss dec hex filename 49233 1501 203200 253934 3dfee spl/u-boot-spl
Signed-off-by: Siarhei Siamashka siarhei.siamashka@gmail.com Reported-by: Derald D. Woods woods.technical@gmail.com --- arch/arm/include/asm/arch-am33xx/cpu.h | 6 ++++++ arch/arm/include/asm/arch-am33xx/omap.h | 3 --- arch/arm/include/asm/arch-omap3/omap.h | 3 --- arch/arm/include/asm/arch-omap4/omap.h | 1 + arch/arm/include/asm/arch-omap5/omap.h | 1 + arch/arm/include/asm/omap_common.h | 11 +---------- arch/arm/mach-omap2/Makefile | 1 - arch/arm/mach-omap2/am33xx/Makefile | 2 -- arch/arm/mach-omap2/am33xx/board.c | 3 --- arch/arm/mach-omap2/am33xx/hw_data.c | 19 ------------------- arch/arm/mach-omap2/am33xx/prcm-regs.c | 15 --------------- arch/arm/mach-omap2/am33xx/sys_info.c | 10 ++++++++++ arch/arm/mach-omap2/hwinit-common.c | 9 +++++++++ arch/arm/mach-omap2/omap3/Makefile | 2 -- arch/arm/mach-omap2/omap3/board.c | 7 ------- arch/arm/mach-omap2/omap3/hw_data.c | 19 ------------------- arch/arm/mach-omap2/omap3/prcm-regs.c | 15 --------------- arch/arm/mach-omap2/omap3/sys_info.c | 9 ++++++++- arch/arm/mach-omap2/sysinfo-common.c | 21 --------------------- board/ti/am335x/board.c | 1 - board/ti/am43xx/board.c | 1 - 21 files changed, 36 insertions(+), 123 deletions(-) delete mode 100644 arch/arm/mach-omap2/am33xx/hw_data.c delete mode 100644 arch/arm/mach-omap2/am33xx/prcm-regs.c delete mode 100644 arch/arm/mach-omap2/omap3/hw_data.c delete mode 100644 arch/arm/mach-omap2/omap3/prcm-regs.c delete mode 100644 arch/arm/mach-omap2/sysinfo-common.c
diff --git a/arch/arm/include/asm/arch-am33xx/cpu.h b/arch/arm/include/asm/arch-am33xx/cpu.h index e8d7d54..8cae291 100644 --- a/arch/arm/include/asm/arch-am33xx/cpu.h +++ b/arch/arm/include/asm/arch-am33xx/cpu.h @@ -36,6 +36,12 @@ #define TCFG_RESET BIT(0) /* software reset */ #define TCFG_EMUFREE BIT(1) /* behaviour of tmr on debug */ #define TCFG_IDLEMOD_SHIFT (2) /* power management */ +/* device type */ +#define DEVICE_MASK (BIT(8) | BIT(9) | BIT(10)) +#define TST_DEVICE 0x0 +#define EMU_DEVICE 0x1 +#define HS_DEVICE 0x2 +#define GP_DEVICE 0x3
/* cpu-id for AM43XX AM33XX and TI81XX family */ #define AM437X 0xB98C diff --git a/arch/arm/include/asm/arch-am33xx/omap.h b/arch/arm/include/asm/arch-am33xx/omap.h index d2c5df8..0dafb9e 100644 --- a/arch/arm/include/asm/arch-am33xx/omap.h +++ b/arch/arm/include/asm/arch-am33xx/omap.h @@ -41,9 +41,6 @@ struct omap_boot_parameters { unsigned char boot_device; unsigned char reset_reason; }; - -#define DEVICE_TYPE_SHIFT 0x8 -#define DEVICE_TYPE_MASK (0x7 << DEVICE_TYPE_SHIFT) #endif
#endif diff --git a/arch/arm/include/asm/arch-omap3/omap.h b/arch/arm/include/asm/arch-omap3/omap.h index 8933f54..db763e4 100644 --- a/arch/arm/include/asm/arch-omap3/omap.h +++ b/arch/arm/include/asm/arch-omap3/omap.h @@ -91,9 +91,6 @@ struct s32ktimer { unsigned int s32k_cr; /* 0x10 */ };
-#define DEVICE_TYPE_SHIFT 0x8 -#define DEVICE_TYPE_MASK (0x7 << DEVICE_TYPE_SHIFT) - #endif /* __ASSEMBLY__ */
#ifndef __ASSEMBLY__ diff --git a/arch/arm/include/asm/arch-omap4/omap.h b/arch/arm/include/asm/arch-omap4/omap.h index 1a3ff7d..b86a776 100644 --- a/arch/arm/include/asm/arch-omap4/omap.h +++ b/arch/arm/include/asm/arch-omap4/omap.h @@ -100,6 +100,7 @@ struct s32ktimer {
#define DEVICE_TYPE_SHIFT (0x8) #define DEVICE_TYPE_MASK (0x7 << DEVICE_TYPE_SHIFT) +#define DEVICE_GP 0x3
#endif /* __ASSEMBLY__ */
diff --git a/arch/arm/include/asm/arch-omap5/omap.h b/arch/arm/include/asm/arch-omap5/omap.h index 2f005dd..8f31da1 100644 --- a/arch/arm/include/asm/arch-omap5/omap.h +++ b/arch/arm/include/asm/arch-omap5/omap.h @@ -127,6 +127,7 @@ struct s32ktimer {
#define DEVICE_TYPE_SHIFT 0x6 #define DEVICE_TYPE_MASK (0x7 << DEVICE_TYPE_SHIFT) +#define DEVICE_GP 0x3
/* Output impedance control */ #define ds_120_ohm 0x0 diff --git a/arch/arm/include/asm/omap_common.h b/arch/arm/include/asm/omap_common.h index ef5c481..6aaa1ba 100644 --- a/arch/arm/include/asm/omap_common.h +++ b/arch/arm/include/asm/omap_common.h @@ -484,7 +484,6 @@ struct omap_sys_ctrl_regs { u32 ctrl_core_sma_sw_1; };
-#if defined(CONFIG_OMAP44XX) || defined(CONFIG_OMAP54XX) struct dpll_params { u32 m; u32 n; @@ -517,7 +516,6 @@ struct dpll_regs { u32 cm_div_h23_dpll; u32 cm_div_h24_dpll; }; -#endif /* CONFIG_OMAP44XX || CONFIG_OMAP54XX */
struct dplls { const struct dpll_params *mpu; @@ -541,7 +539,6 @@ struct pmic_data { int (*pmic_write)(u8 sa, u8 reg_addr, u8 reg_data); };
-#if defined(CONFIG_OMAP44XX) || defined(CONFIG_OMAP54XX) enum { OPP_LOW, OPP_NOM, @@ -587,7 +584,6 @@ struct vcores_data { struct volts eve; struct volts iva; }; -#endif /* CONFIG_OMAP44XX || CONFIG_OMAP54XX */
extern struct prcm_regs const **prcm; extern struct prcm_regs const omap5_es1_prcm; @@ -599,8 +595,6 @@ extern struct dplls dra7xx_dplls; extern struct vcores_data const **omap_vcores; extern const u32 sys_clk_array[8]; extern struct omap_sys_ctrl_regs const **ctrl; -extern struct omap_sys_ctrl_regs const am33xx_ctrl; -extern struct omap_sys_ctrl_regs const omap3_ctrl; extern struct omap_sys_ctrl_regs const omap4_ctrl; extern struct omap_sys_ctrl_regs const omap5_ctrl; extern struct omap_sys_ctrl_regs const dra7xx_ctrl; @@ -617,7 +611,6 @@ const struct dpll_params *get_iva_dpll_params(struct dplls const *); const struct dpll_params *get_usb_dpll_params(struct dplls const *); const struct dpll_params *get_abe_dpll_params(struct dplls const *);
-#if defined(CONFIG_OMAP44XX) || defined(CONFIG_OMAP54XX) void do_enable_clocks(u32 const *clk_domains, u32 const *clk_modules_hw_auto, u32 const *clk_modules_explicit_en, @@ -626,7 +619,6 @@ void do_enable_clocks(u32 const *clk_domains, void do_disable_clocks(u32 const *clk_domains, u32 const *clk_modules_disable, u8 wait_for_disable); -#endif /* CONFIG_OMAP44XX || CONFIG_OMAP54XX */
void setup_post_dividers(u32 const base, const struct dpll_params *params); @@ -638,9 +630,7 @@ void enable_basic_uboot_clocks(void); void enable_usb_clocks(int index); void disable_usb_clocks(int index);
-#if defined(CONFIG_OMAP44XX) || defined(CONFIG_OMAP54XX) void scale_vcores(struct vcores_data const *); -#endif /* CONFIG_OMAP44XX || CONFIG_OMAP54XX */ int get_voltrail_opp(int rail_offset); u32 get_offset_code(u32 volt_offset, struct pmic_data *pmic); void do_scale_vcore(u32 vcore_reg, u32 volt_mv, struct pmic_data *pmic); @@ -771,6 +761,7 @@ static inline u8 is_dra72x(void) * silicon device type * Moving to common from cpu.h, since it is shared by various omap devices */ +#define DEVICE_MASK (BIT(8) | BIT(9) | BIT(10)) #define TST_DEVICE 0x0 #define EMU_DEVICE 0x1 #define HS_DEVICE 0x2 diff --git a/arch/arm/mach-omap2/Makefile b/arch/arm/mach-omap2/Makefile index d86643d..bf97b32 100644 --- a/arch/arm/mach-omap2/Makefile +++ b/arch/arm/mach-omap2/Makefile @@ -20,7 +20,6 @@ endif endif obj-y += utils.o
-obj-y += sysinfo-common.o ifneq ($(CONFIG_OMAP44XX)$(CONFIG_OMAP54XX),) obj-y += hwinit-common.o obj-y += clocks-common.o diff --git a/arch/arm/mach-omap2/am33xx/Makefile b/arch/arm/mach-omap2/am33xx/Makefile index 9d4f83c..13b13fd 100644 --- a/arch/arm/mach-omap2/am33xx/Makefile +++ b/arch/arm/mach-omap2/am33xx/Makefile @@ -21,8 +21,6 @@ endif obj-$(CONFIG_TI816X) += ti816x_emif4.o obj-y += board.o obj-y += mux.o -obj-y += prcm-regs.o -obj-y += hw_data.o obj-y += fdt.o
obj-$(CONFIG_CLOCK_SYNTHESIZER) += clk_synthesizer.o diff --git a/arch/arm/mach-omap2/am33xx/board.c b/arch/arm/mach-omap2/am33xx/board.c index 913a44a..905d7dd 100644 --- a/arch/arm/mach-omap2/am33xx/board.c +++ b/arch/arm/mach-omap2/am33xx/board.c @@ -26,7 +26,6 @@ #include <asm/io.h> #include <asm/emif.h> #include <asm/gpio.h> -#include <asm/omap_common.h> #include <i2c.h> #include <miiphy.h> #include <cpsw.h> @@ -362,7 +361,6 @@ void early_system_init(void) #ifdef CONFIG_SPL_BUILD void board_init_f(ulong dummy) { - hw_data_init(); early_system_init(); board_early_init_f(); sdram_init(); @@ -377,7 +375,6 @@ void board_init_f(ulong dummy)
int arch_cpu_init_dm(void) { - hw_data_init(); #ifndef CONFIG_SKIP_LOWLEVEL_INIT early_system_init(); #endif diff --git a/arch/arm/mach-omap2/am33xx/hw_data.c b/arch/arm/mach-omap2/am33xx/hw_data.c deleted file mode 100644 index 63e55cf..0000000 --- a/arch/arm/mach-omap2/am33xx/hw_data.c +++ /dev/null @@ -1,19 +0,0 @@ -/* - * HW data initialization for AM33xx. - * - * (C) Copyright 2017 Linaro Ltd. - * Sam Protsenko semen.protsenko@linaro.org - * - * SPDX-License-Identifier: GPL-2.0+ - */ - -#include <asm/arch/omap.h> -#include <asm/omap_common.h> - -struct omap_sys_ctrl_regs const **ctrl = - (struct omap_sys_ctrl_regs const **)OMAP_SRAM_SCRATCH_SYS_CTRL; - -void hw_data_init(void) -{ - *ctrl = &am33xx_ctrl; -} diff --git a/arch/arm/mach-omap2/am33xx/prcm-regs.c b/arch/arm/mach-omap2/am33xx/prcm-regs.c deleted file mode 100644 index c9a3af6..0000000 --- a/arch/arm/mach-omap2/am33xx/prcm-regs.c +++ /dev/null @@ -1,15 +0,0 @@ -/* - * HW regs data for AM33xx. - * - * (C) Copyright 2017 Linaro Ltd. - * Sam Protsenko semen.protsenko@linaro.org - * - * SPDX-License-Identifier: GPL-2.0+ - */ - -#include <asm/arch/hardware.h> -#include <asm/omap_common.h> - -struct omap_sys_ctrl_regs const am33xx_ctrl = { - .control_status = CTRL_BASE + 0x40, -}; diff --git a/arch/arm/mach-omap2/am33xx/sys_info.c b/arch/arm/mach-omap2/am33xx/sys_info.c index ea434aa..564bae6 100644 --- a/arch/arm/mach-omap2/am33xx/sys_info.c +++ b/arch/arm/mach-omap2/am33xx/sys_info.c @@ -51,6 +51,16 @@ u32 get_cpu_type(void) }
/** + * get_device_type(): tell if GP/HS/EMU/TST + */ +u32 get_device_type(void) +{ + int mode; + mode = readl(&cstat->statusreg) & (DEVICE_MASK); + return mode >>= 8; +} + +/** * get_sysboot_value(void) - return SYS_BOOT[4:0] */ u32 get_sysboot_value(void) diff --git a/arch/arm/mach-omap2/hwinit-common.c b/arch/arm/mach-omap2/hwinit-common.c index 7324d52..d005430 100644 --- a/arch/arm/mach-omap2/hwinit-common.c +++ b/arch/arm/mach-omap2/hwinit-common.c @@ -287,6 +287,15 @@ int checkboard(void) return 0; }
+/* + * get_device_type(): tell if GP/HS/EMU/TST + */ +u32 get_device_type(void) +{ + return (readl((*ctrl)->control_status) & + (DEVICE_TYPE_MASK)) >> DEVICE_TYPE_SHIFT; +} + #if defined(CONFIG_DISPLAY_CPUINFO) /* * Print CPU information diff --git a/arch/arm/mach-omap2/omap3/Makefile b/arch/arm/mach-omap2/omap3/Makefile index 61a76b6..06cc9f2 100644 --- a/arch/arm/mach-omap2/omap3/Makefile +++ b/arch/arm/mach-omap2/omap3/Makefile @@ -14,8 +14,6 @@ obj-y += board.o obj-y += boot.o obj-y += clock.o obj-y += sys_info.o -obj-y += prcm-regs.o -obj-y += hw_data.o ifdef CONFIG_SPL_BUILD obj-$(CONFIG_SPL_OMAP3_ID_NAND) += spl_id_nand.o endif diff --git a/arch/arm/mach-omap2/omap3/board.c b/arch/arm/mach-omap2/omap3/board.c index a61b933..d7c8c03 100644 --- a/arch/arm/mach-omap2/omap3/board.c +++ b/arch/arm/mach-omap2/omap3/board.c @@ -173,11 +173,6 @@ void try_unlock_memory(void) return; }
-void early_system_init(void) -{ - hw_data_init(); -} - /****************************************************************************** * Routine: s_init * Description: Does early system init of muxing and clocks. @@ -186,7 +181,6 @@ void early_system_init(void) void s_init(void) { watchdog_init(); - early_system_init();
try_unlock_memory();
@@ -210,7 +204,6 @@ void s_init(void) #ifdef CONFIG_SPL_BUILD void board_init_f(ulong dummy) { - early_system_init(); mem_init(); /* * Save the boot parameters passed from romcode. diff --git a/arch/arm/mach-omap2/omap3/hw_data.c b/arch/arm/mach-omap2/omap3/hw_data.c deleted file mode 100644 index 53b220a..0000000 --- a/arch/arm/mach-omap2/omap3/hw_data.c +++ /dev/null @@ -1,19 +0,0 @@ -/* - * HW data initialization for OMAP3. - * - * (C) Copyright 2017 Linaro Ltd. - * Sam Protsenko semen.protsenko@linaro.org - * - * SPDX-License-Identifier: GPL-2.0+ - */ - -#include <asm/arch/omap.h> -#include <asm/omap_common.h> - -struct omap_sys_ctrl_regs const **ctrl = - (struct omap_sys_ctrl_regs const **)OMAP_SRAM_SCRATCH_SYS_CTRL; - -void hw_data_init(void) -{ - *ctrl = &omap3_ctrl; -} diff --git a/arch/arm/mach-omap2/omap3/prcm-regs.c b/arch/arm/mach-omap2/omap3/prcm-regs.c deleted file mode 100644 index ca29ce9..0000000 --- a/arch/arm/mach-omap2/omap3/prcm-regs.c +++ /dev/null @@ -1,15 +0,0 @@ -/* - * HW regs data for OMAP3. - * - * (C) Copyright 2017 Linaro Ltd. - * Sam Protsenko semen.protsenko@linaro.org - * - * SPDX-License-Identifier: GPL-2.0+ - */ - -#include <asm/arch/omap.h> -#include <asm/omap_common.h> - -struct omap_sys_ctrl_regs const omap3_ctrl = { - .control_status = OMAP34XX_CTRL_BASE + 0x2F0, -}; diff --git a/arch/arm/mach-omap2/omap3/sys_info.c b/arch/arm/mach-omap2/omap3/sys_info.c index 155f5b2..7e6c263 100644 --- a/arch/arm/mach-omap2/omap3/sys_info.c +++ b/arch/arm/mach-omap2/omap3/sys_info.c @@ -17,7 +17,6 @@ #include <asm/arch/mem.h> /* get mem tables */ #include <asm/arch/sys_proto.h> #include <asm/bootm.h> -#include <asm/omap_common.h>
#include <i2c.h> #include <linux/compiler.h> @@ -237,6 +236,14 @@ u32 get_boot_type(void) return (readl(&ctrl_base->status) & SYSBOOT_MASK); }
+/************************************************************* + * get_device_type(): tell if GP/HS/EMU/TST + *************************************************************/ +u32 get_device_type(void) +{ + return ((readl(&ctrl_base->status) & (DEVICE_MASK)) >> 8); +} + #ifdef CONFIG_DISPLAY_CPUINFO /** * Print CPU information diff --git a/arch/arm/mach-omap2/sysinfo-common.c b/arch/arm/mach-omap2/sysinfo-common.c deleted file mode 100644 index 1dc7051..0000000 --- a/arch/arm/mach-omap2/sysinfo-common.c +++ /dev/null @@ -1,21 +0,0 @@ -/* - * System information routines for all OMAP based boards. - * - * (C) Copyright 2017 Linaro Ltd. - * Sam Protsenko semen.protsenko@linaro.org - * - * SPDX-License-Identifier: GPL-2.0+ - */ - -#include <asm/arch/omap.h> -#include <asm/io.h> -#include <asm/omap_common.h> - -/** - * Tell if device is GP/HS/EMU/TST. - */ -u32 get_device_type(void) -{ - return (readl((*ctrl)->control_status) & DEVICE_TYPE_MASK) >> - DEVICE_TYPE_SHIFT; -} diff --git a/board/ti/am335x/board.c b/board/ti/am335x/board.c index 0a16529..3f967c9 100644 --- a/board/ti/am335x/board.c +++ b/board/ti/am335x/board.c @@ -26,7 +26,6 @@ #include <asm/io.h> #include <asm/emif.h> #include <asm/gpio.h> -#include <asm/omap_common.h> #include <asm/omap_sec_common.h> #include <asm/omap_mmc.h> #include <i2c.h> diff --git a/board/ti/am43xx/board.c b/board/ti/am43xx/board.c index 933596d..18c027b 100644 --- a/board/ti/am43xx/board.c +++ b/board/ti/am43xx/board.c @@ -20,7 +20,6 @@ #include <asm/arch/ddr_defs.h> #include <asm/arch/gpio.h> #include <asm/emif.h> -#include <asm/omap_common.h> #include "../common/board_detect.h" #include "board.h" #include <power/pmic.h>

On Sun, Aug 13, 2017 at 05:25:19AM +0300, Siarhei Siamashka wrote:
This reverts commit 00bbe96ebabbc83777cd8d6c6fd2791c5c8cf619.
There were two major problems with this patch:
- It made OMAP3530 devices non-bootable, as reported and investigated by Derald D. Woods in https://lists.denx.de/pipermail/u-boot/2017-August/302192.html
- The SPL code size increased really a lot.
SPL size for omap3_beagle_defconfig build with GCC 6:
== before reverting == text data bss dec hex filename 49721 1505 203200 254426 3e1da spl/u-boot-spl
== after reverting == text data bss dec hex filename 49233 1501 203200 253934 3dfee spl/u-boot-spl
Signed-off-by: Siarhei Siamashka siarhei.siamashka@gmail.com Reported-by: Derald D. Woods woods.technical@gmail.com
But the problem is that every TI "OMAP" SoC has this functionality and needs it as well (off th top of my head I forget if this applies to keystone a well). The changes in 00bbe96ebabb came about because we need to call that function in other, iirc, fastboot-related code areas. I am open to further ways to re-work this so that get_device_type() is smaller, but not to going back to just the way it was before. Perhaps a larger comment block and #if/elif casing of the address, in the cases where it's always known at build time? Thanks!

By applying this patch, we are ensuring that the code paths responsible for applying errata workarounds are also exercised on CPU revisions, which actually don't need these workarounds.
Only CONFIG_ARM_ERRATA_621766, CONFIG_ARM_ERRATA_454179, CONFIG_ARM_ERRATA_725233 and CONFIG_ARM_ERRATA_430973 are covered by this patch (Cortex-A8).
This improves code coverage when testing U-Boot builds on newer hardware. In particular, the problematic commit 00bbe96ebabb ("arm: omap: Unify get_device_type() function") would break both BeageBoard and BeagleBoard XM rather than just older BeagleBoard.
As an additional bonus, we need fewer instructins and the SPL size is reduced.
Signed-off-by: Siarhei Siamashka siarhei.siamashka@gmail.com --- arch/arm/cpu/armv7/start.S | 32 ++++++++++++-------------------- 1 file changed, 12 insertions(+), 20 deletions(-)
diff --git a/arch/arm/cpu/armv7/start.S b/arch/arm/cpu/armv7/start.S index f06fd28..1442675 100644 --- a/arch/arm/cpu/armv7/start.S +++ b/arch/arm/cpu/armv7/start.S @@ -232,55 +232,47 @@ skip_errata_801819: #endif
#ifdef CONFIG_ARM_ERRATA_454179 + mrc p15, 0, r0, c1, c0, 1 @ Read ACR + cmp r2, #0x21 @ Only on < r2p1 - bge skip_errata_454179 + orrlt r0, r0, #(0x3 << 6) @ Set DBSM(BIT7) and IBE(BIT6) bits
- mrc p15, 0, r0, c1, c0, 1 @ Read ACR - orr r0, r0, #(0x3 << 6) @ Set DBSM(BIT7) and IBE(BIT6) bits push {r1-r5} @ Save the cpu info registers bl v7_arch_cp15_set_acr pop {r1-r5} @ Restore the cpu info - fall through - -skip_errata_454179: #endif
#ifdef CONFIG_ARM_ERRATA_430973 + mrc p15, 0, r0, c1, c0, 1 @ Read ACR + cmp r2, #0x21 @ Only on < r2p1 - bge skip_errata_430973 + orrlt r0, r0, #(0x1 << 6) @ Set IBE bit
- mrc p15, 0, r0, c1, c0, 1 @ Read ACR - orr r0, r0, #(0x1 << 6) @ Set IBE bit push {r1-r5} @ Save the cpu info registers bl v7_arch_cp15_set_acr pop {r1-r5} @ Restore the cpu info - fall through - -skip_errata_430973: #endif
#ifdef CONFIG_ARM_ERRATA_621766 + mrc p15, 0, r0, c1, c0, 1 @ Read ACR + cmp r2, #0x21 @ Only on < r2p1 - bge skip_errata_621766 + orrlt r0, r0, #(0x1 << 5) @ Set L1NEON bit
- mrc p15, 0, r0, c1, c0, 1 @ Read ACR - orr r0, r0, #(0x1 << 5) @ Set L1NEON bit push {r1-r5} @ Save the cpu info registers bl v7_arch_cp15_set_acr pop {r1-r5} @ Restore the cpu info - fall through - -skip_errata_621766: #endif
#ifdef CONFIG_ARM_ERRATA_725233 + mrc p15, 1, r0, c9, c0, 2 @ Read L2ACR + cmp r2, #0x21 @ Only on < r2p1 (Cortex A8) - bge skip_errata_725233 + orrlt r0, r0, #(0x1 << 27) @ L2 PLD data forwarding disable
- mrc p15, 1, r0, c9, c0, 2 @ Read L2ACR - orr r0, r0, #(0x1 << 27) @ L2 PLD data forwarding disable push {r1-r5} @ Save the cpu info registers bl v7_arch_cp15_set_l2aux_ctrl pop {r1-r5} @ Restore the cpu info - fall through - -skip_errata_725233: #endif
#ifdef CONFIG_ARM_ERRATA_852421

On Sun, Aug 13, 2017 at 05:25:20AM +0300, Siarhei Siamashka wrote:
By applying this patch, we are ensuring that the code paths responsible for applying errata workarounds are also exercised on CPU revisions, which actually don't need these workarounds.
Only CONFIG_ARM_ERRATA_621766, CONFIG_ARM_ERRATA_454179, CONFIG_ARM_ERRATA_725233 and CONFIG_ARM_ERRATA_430973 are covered by this patch (Cortex-A8).
This improves code coverage when testing U-Boot builds on newer hardware. In particular, the problematic commit 00bbe96ebabb ("arm: omap: Unify get_device_type() function") would break both BeageBoard and BeagleBoard XM rather than just older BeagleBoard.
As an additional bonus, we need fewer instructins and the SPL size is reduced.
Signed-off-by: Siarhei Siamashka siarhei.siamashka@gmail.com
Reviewed-by: Tom Rini trini@konsulko.com

On Sun, Aug 13, 2017 at 05:25:20AM +0300, Siarhei Siamashka wrote:
By applying this patch, we are ensuring that the code paths responsible for applying errata workarounds are also exercised on CPU revisions, which actually don't need these workarounds.
Only CONFIG_ARM_ERRATA_621766, CONFIG_ARM_ERRATA_454179, CONFIG_ARM_ERRATA_725233 and CONFIG_ARM_ERRATA_430973 are covered by this patch (Cortex-A8).
This improves code coverage when testing U-Boot builds on newer hardware. In particular, the problematic commit 00bbe96ebabb ("arm: omap: Unify get_device_type() function") would break both BeageBoard and BeagleBoard XM rather than just older BeagleBoard.
As an additional bonus, we need fewer instructins and the SPL size is reduced.
Signed-off-by: Siarhei Siamashka siarhei.siamashka@gmail.com Reviewed-by: Tom Rini trini@konsulko.com
Applied to u-boot/master, thanks!
participants (2)
-
Siarhei Siamashka
-
Tom Rini