
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>