@@ -36,12 +36,6 @@
#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
@@ -41,6 +41,9 @@ 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
@@ -91,6 +91,9 @@ struct s32ktimer {
unsigned int s32k_cr; /* 0x10 */
};
+#define DEVICE_TYPE_SHIFT 0x8
+#define DEVICE_TYPE_MASK (0x7 << DEVICE_TYPE_SHIFT)
+
#endif /* __ASSEMBLY__ */
#ifndef __ASSEMBLY__
new file mode 100644
@@ -0,0 +1,21 @@
+/*
+ * Common definitions for OMAP/AM based boards.
+ *
+ * (C) Copyright 2017 Linaro Ltd.
+ * Sam Protsenko <semen.protsenko@linaro.org>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#ifndef _OMAP_AM_COMMON_H_
+#define _OMAP_AM_COMMON_H_
+
+/* Silicon device type */
+#define TST_DEVICE 0x0
+#define EMU_DEVICE 0x1
+#define HS_DEVICE 0x2
+#define GP_DEVICE 0x3
+
+void hw_data_init(void);
+
+#endif /* _OMAP_AM_COMMON_H_ */
@@ -12,6 +12,7 @@
#ifndef __ASSEMBLY__
#include <common.h>
+#include <asm/omap_am_common.h>
#define NUM_SYS_CLKS 7
@@ -595,6 +596,8 @@ 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;
@@ -602,8 +605,6 @@ extern struct omap_sys_ctrl_regs const dra7xx_ctrl;
extern struct pmic_data tps659038;
extern struct pmic_data lp8733;
-void hw_data_init(void);
-
const struct dpll_params *get_mpu_dpll_params(struct dplls const *);
const struct dpll_params *get_core_dpll_params(struct dplls const *);
const struct dpll_params *get_per_dpll_params(struct dplls const *);
@@ -745,17 +746,6 @@ static inline u8 is_dra72x(void)
#define DRA722_ES2_0 0x07220200
/*
- * 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
-#define GP_DEVICE 0x3
-
-
-/*
* SRAM scratch space entries
*/
#define OMAP_SRAM_SCRATCH_OMAP_REV SRAM_SCRATCH_SPACE_ADDR
@@ -20,6 +20,7 @@ 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
@@ -18,6 +18,8 @@ obj-y += ddr.o
obj-y += emif4.o
obj-y += board.o
obj-y += mux.o
+obj-y += prcm-regs.o
+obj-y += hw_data.o
obj-$(CONFIG_CLOCK_SYNTHESIZER) += clk_synthesizer.o
@@ -26,6 +26,7 @@
#include <asm/io.h>
#include <asm/emif.h>
#include <asm/gpio.h>
+#include <asm/omap_am_common.h>
#include <i2c.h>
#include <miiphy.h>
#include <cpsw.h>
@@ -326,6 +327,7 @@ 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();
@@ -340,6 +342,7 @@ void board_init_f(ulong dummy)
int arch_cpu_init_dm(void)
{
+ hw_data_init();
#ifndef CONFIG_SKIP_LOWLEVEL_INIT
early_system_init();
#endif
new file mode 100644
@@ -0,0 +1,19 @@
+/*
+ * 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;
+}
new file mode 100644
@@ -0,0 +1,15 @@
+/*
+ * 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,
+};
@@ -51,16 +51,6 @@ 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)
@@ -278,15 +278,6 @@ 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
@@ -14,6 +14,8 @@ 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
@@ -201,13 +201,25 @@ void s_init(void)
#endif
}
+void early_system_init(void)
+{
+ hw_data_init();
+}
+
#ifdef CONFIG_SPL_BUILD
void board_init_f(ulong dummy)
{
+ early_system_init();
mem_init();
}
#endif
+int arch_cpu_init_dm(void)
+{
+ early_system_init();
+ return 0;
+}
+
/*
* Routine: misc_init_r
* Description: A basic misc_init_r that just displays the die ID
new file mode 100644
@@ -0,0 +1,19 @@
+/*
+ * 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;
+}
new file mode 100644
@@ -0,0 +1,15 @@
+/*
+ * 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,
+};
@@ -17,6 +17,7 @@
#include <asm/arch/mem.h> /* get mem tables */
#include <asm/arch/sys_proto.h>
#include <asm/bootm.h>
+#include <asm/omap_am_common.h>
#include <i2c.h>
#include <linux/compiler.h>
@@ -236,14 +237,6 @@ 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
new file mode 100644
@@ -0,0 +1,21 @@
+/*
+ * 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;
+}
@@ -28,6 +28,7 @@
#include <asm/gpio.h>
#include <asm/omap_sec_common.h>
#include <asm/omap_mmc.h>
+#include <asm/omap_am_common.h>
#include <i2c.h>
#include <miiphy.h>
#include <cpsw.h>
Refactor OMAP3/4/5 code so that we have only one get_device_type() function for all platforms. Details: - Add ctrl variable for AM33xx and OMAP3 platforms (like it's done for OMAP4/5), so we can obtain status register in common way - For now ctrl structure for AM33xx/OMAP3 contains only status register address - Run hw_data_init() in order to assign ctrl to proper structure - Extract some definitions to omap_am_common.h, because including omap_common.h in am33xx board files breaks compilation Buildman script was run for all OMAP boards. Result output: arm: (for 38/616 boards) all +348.9 bss -6.2 data +3.5 rodata +300.0 spl/u-boot-spl:all +281.4 spl/u-boot-spl:data +2.2 spl/u-boot-spl:rodata +252.0 spl/u-boot-spl:text +27.2 text +51.7 (no errors to report) Tested on AM57x EVM. Signed-off-by: Sam Protsenko <semen.protsenko@linaro.org> --- 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/omap_am_common.h | 21 +++++++++++++++++++++ arch/arm/include/asm/omap_common.h | 16 +++------------- 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 | 12 ++++++++++++ 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 + 19 files changed, 141 insertions(+), 46 deletions(-) create mode 100644 arch/arm/include/asm/omap_am_common.h create mode 100644 arch/arm/mach-omap2/am33xx/hw_data.c create mode 100644 arch/arm/mach-omap2/am33xx/prcm-regs.c create mode 100644 arch/arm/mach-omap2/omap3/hw_data.c create mode 100644 arch/arm/mach-omap2/omap3/prcm-regs.c create mode 100644 arch/arm/mach-omap2/sysinfo-common.c