[U-Boot] [PATCH] arm: omap: Unify get_device_type() function

Sam Protsenko semen.protsenko at linaro.org
Wed May 31 16:51:39 UTC 2017


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 at 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

diff --git a/arch/arm/include/asm/arch-am33xx/cpu.h b/arch/arm/include/asm/arch-am33xx/cpu.h
index 8cae291ea0..e8d7d549e8 100644
--- a/arch/arm/include/asm/arch-am33xx/cpu.h
+++ b/arch/arm/include/asm/arch-am33xx/cpu.h
@@ -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
diff --git a/arch/arm/include/asm/arch-am33xx/omap.h b/arch/arm/include/asm/arch-am33xx/omap.h
index 3293caaca4..5a1b95c2c0 100644
--- a/arch/arm/include/asm/arch-am33xx/omap.h
+++ b/arch/arm/include/asm/arch-am33xx/omap.h
@@ -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
diff --git a/arch/arm/include/asm/arch-omap3/omap.h b/arch/arm/include/asm/arch-omap3/omap.h
index db763e49a3..8933f5489f 100644
--- a/arch/arm/include/asm/arch-omap3/omap.h
+++ b/arch/arm/include/asm/arch-omap3/omap.h
@@ -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__
diff --git a/arch/arm/include/asm/omap_am_common.h b/arch/arm/include/asm/omap_am_common.h
new file mode 100644
index 0000000000..70aa15b22c
--- /dev/null
+++ b/arch/arm/include/asm/omap_am_common.h
@@ -0,0 +1,21 @@
+/*
+ * Common definitions for OMAP/AM based boards.
+ *
+ * (C) Copyright 2017 Linaro Ltd.
+ * Sam Protsenko <semen.protsenko at 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_ */
diff --git a/arch/arm/include/asm/omap_common.h b/arch/arm/include/asm/omap_common.h
index c1a70b15d0..39eb3162af 100644
--- a/arch/arm/include/asm/omap_common.h
+++ b/arch/arm/include/asm/omap_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
diff --git a/arch/arm/mach-omap2/Makefile b/arch/arm/mach-omap2/Makefile
index aa3986dddb..d43085ca98 100644
--- a/arch/arm/mach-omap2/Makefile
+++ b/arch/arm/mach-omap2/Makefile
@@ -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
diff --git a/arch/arm/mach-omap2/am33xx/Makefile b/arch/arm/mach-omap2/am33xx/Makefile
index 05cc8a11c5..50dd9d84cc 100644
--- a/arch/arm/mach-omap2/am33xx/Makefile
+++ b/arch/arm/mach-omap2/am33xx/Makefile
@@ -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
 
diff --git a/arch/arm/mach-omap2/am33xx/board.c b/arch/arm/mach-omap2/am33xx/board.c
index a8b5d13238..26e3b4fe3b 100644
--- a/arch/arm/mach-omap2/am33xx/board.c
+++ b/arch/arm/mach-omap2/am33xx/board.c
@@ -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
diff --git a/arch/arm/mach-omap2/am33xx/hw_data.c b/arch/arm/mach-omap2/am33xx/hw_data.c
new file mode 100644
index 0000000000..63e55cff77
--- /dev/null
+++ b/arch/arm/mach-omap2/am33xx/hw_data.c
@@ -0,0 +1,19 @@
+/*
+ * HW data initialization for AM33xx.
+ *
+ * (C) Copyright 2017 Linaro Ltd.
+ * Sam Protsenko <semen.protsenko at 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
new file mode 100644
index 0000000000..c9a3af6584
--- /dev/null
+++ b/arch/arm/mach-omap2/am33xx/prcm-regs.c
@@ -0,0 +1,15 @@
+/*
+ * HW regs data for AM33xx.
+ *
+ * (C) Copyright 2017 Linaro Ltd.
+ * Sam Protsenko <semen.protsenko at 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 564bae6793..ea434aaf33 100644
--- a/arch/arm/mach-omap2/am33xx/sys_info.c
+++ b/arch/arm/mach-omap2/am33xx/sys_info.c
@@ -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)
diff --git a/arch/arm/mach-omap2/hwinit-common.c b/arch/arm/mach-omap2/hwinit-common.c
index c090442598..7f6db3cf37 100644
--- a/arch/arm/mach-omap2/hwinit-common.c
+++ b/arch/arm/mach-omap2/hwinit-common.c
@@ -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
diff --git a/arch/arm/mach-omap2/omap3/Makefile b/arch/arm/mach-omap2/omap3/Makefile
index 06cc9f2658..61a76b6f66 100644
--- a/arch/arm/mach-omap2/omap3/Makefile
+++ b/arch/arm/mach-omap2/omap3/Makefile
@@ -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
diff --git a/arch/arm/mach-omap2/omap3/board.c b/arch/arm/mach-omap2/omap3/board.c
index 01df579df2..fd3307bf59 100644
--- a/arch/arm/mach-omap2/omap3/board.c
+++ b/arch/arm/mach-omap2/omap3/board.c
@@ -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
diff --git a/arch/arm/mach-omap2/omap3/hw_data.c b/arch/arm/mach-omap2/omap3/hw_data.c
new file mode 100644
index 0000000000..53b220aec3
--- /dev/null
+++ b/arch/arm/mach-omap2/omap3/hw_data.c
@@ -0,0 +1,19 @@
+/*
+ * HW data initialization for OMAP3.
+ *
+ * (C) Copyright 2017 Linaro Ltd.
+ * Sam Protsenko <semen.protsenko at 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
new file mode 100644
index 0000000000..ca29ce9bda
--- /dev/null
+++ b/arch/arm/mach-omap2/omap3/prcm-regs.c
@@ -0,0 +1,15 @@
+/*
+ * HW regs data for OMAP3.
+ *
+ * (C) Copyright 2017 Linaro Ltd.
+ * Sam Protsenko <semen.protsenko at 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 7e6c2633f9..433337419f 100644
--- a/arch/arm/mach-omap2/omap3/sys_info.c
+++ b/arch/arm/mach-omap2/omap3/sys_info.c
@@ -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
diff --git a/arch/arm/mach-omap2/sysinfo-common.c b/arch/arm/mach-omap2/sysinfo-common.c
new file mode 100644
index 0000000000..1dc7051ab3
--- /dev/null
+++ b/arch/arm/mach-omap2/sysinfo-common.c
@@ -0,0 +1,21 @@
+/*
+ * System information routines for all OMAP based boards.
+ *
+ * (C) Copyright 2017 Linaro Ltd.
+ * Sam Protsenko <semen.protsenko at 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 517965c0f0..b8e355ea49 100644
--- a/board/ti/am335x/board.c
+++ b/board/ti/am335x/board.c
@@ -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>
-- 
2.11.0



More information about the U-Boot mailing list