[U-Boot] [PATCH 1/4] imx: add cpu type for i.MX2 and i.MX3

Add cpu types for i.MX2/3.
Signed-off-by: Peng Fan Peng.Fan@freescale.com Cc: Stefano Babic sbabic@denx.de --- arch/arm/include/asm/arch-imx/cpu.h | 5 +++++ 1 file changed, 5 insertions(+)
diff --git a/arch/arm/include/asm/arch-imx/cpu.h b/arch/arm/include/asm/arch-imx/cpu.h index c7f9fff..71208aa 100644 --- a/arch/arm/include/asm/arch-imx/cpu.h +++ b/arch/arm/include/asm/arch-imx/cpu.h @@ -4,6 +4,11 @@ * SPDX-License-Identifier: GPL-2.0+ */
+#define MXC_CPU_MX23 0x23 +#define MXC_CPU_MX25 0x25 +#define MXC_CPU_MX28 0x28 +#define MXC_CPU_MX31 0x31 +#define MXC_CPU_MX35 0x35 #define MXC_CPU_MX51 0x51 #define MXC_CPU_MX53 0x53 #define MXC_CPU_MX6SL 0x60

Use new formula for get_cpu_rev, since we need to use this formula to do runtime check for all i.MXes.
Signed-off-by: Peng Fan Peng.Fan@freescale.com Cc: Stefano Babic sbabic@denx.de --- arch/arm/cpu/arm1136/mx31/generic.c | 2 +- arch/arm/include/asm/arch-mx31/sys_proto.h | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-)
diff --git a/arch/arm/cpu/arm1136/mx31/generic.c b/arch/arm/cpu/arm1136/mx31/generic.c index 060d46b..fe96670 100644 --- a/arch/arm/cpu/arm1136/mx31/generic.c +++ b/arch/arm/cpu/arm1136/mx31/generic.c @@ -175,7 +175,7 @@ u32 get_cpu_rev(void)
for (i = 0; i < ARRAY_SIZE(mx31_cpu_type); i++) if (srev == mx31_cpu_type[i].srev) - return mx31_cpu_type[i].v; + return mx31_cpu_type[i].v | (MXC_CPU_MX31 << 12);
return srev | 0x8000; } diff --git a/arch/arm/include/asm/arch-mx31/sys_proto.h b/arch/arm/include/asm/arch-mx31/sys_proto.h index b0dfcba..1626442 100644 --- a/arch/arm/include/asm/arch-mx31/sys_proto.h +++ b/arch/arm/include/asm/arch-mx31/sys_proto.h @@ -8,6 +8,8 @@ #ifndef _SYS_PROTO_H_ #define _SYS_PROTO_H_
+#include "../arch-imx/cpu.h" + struct mxc_weimcs { u32 upper; u32 lower;

On 10/08/2015 14:53, Peng Fan wrote:
Use new formula for get_cpu_rev, since we need to use this formula to do runtime check for all i.MXes.
Signed-off-by: Peng Fan Peng.Fan@freescale.com Cc: Stefano Babic sbabic@denx.de
arch/arm/cpu/arm1136/mx31/generic.c | 2 +- arch/arm/include/asm/arch-mx31/sys_proto.h | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-)
diff --git a/arch/arm/cpu/arm1136/mx31/generic.c b/arch/arm/cpu/arm1136/mx31/generic.c index 060d46b..fe96670 100644 --- a/arch/arm/cpu/arm1136/mx31/generic.c +++ b/arch/arm/cpu/arm1136/mx31/generic.c @@ -175,7 +175,7 @@ u32 get_cpu_rev(void)
for (i = 0; i < ARRAY_SIZE(mx31_cpu_type); i++) if (srev == mx31_cpu_type[i].srev)
return mx31_cpu_type[i].v;
return mx31_cpu_type[i].v | (MXC_CPU_MX31 << 12);
return srev | 0x8000;
} diff --git a/arch/arm/include/asm/arch-mx31/sys_proto.h b/arch/arm/include/asm/arch-mx31/sys_proto.h index b0dfcba..1626442 100644 --- a/arch/arm/include/asm/arch-mx31/sys_proto.h +++ b/arch/arm/include/asm/arch-mx31/sys_proto.h @@ -8,6 +8,8 @@ #ifndef _SYS_PROTO_H_ #define _SYS_PROTO_H_
+#include "../arch-imx/cpu.h"
struct mxc_weimcs { u32 upper; u32 lower;
Reviewed-by: Stefano Babic sbabic@denx.de
Best regards, Stefano Babic

Rewrite get_cpu_rev, from "static const char *get_cpu_rev(void)" to "u32 get_cpu_rev(void)". To align with get_cpu_rev of other i.MXes.
Also write get_imx_type to replace get_cpu_type, since we have macro named get_cpu_type.
Signed-off-by: Peng Fan Peng.Fan@freescale.com Cc: Stefano Babic sbabic@denx.de --- arch/arm/cpu/arm926ejs/mxs/mxs.c | 52 ++++++++++++++----------------- arch/arm/include/asm/arch-mxs/sys_proto.h | 1 + 2 files changed, 25 insertions(+), 28 deletions(-)
diff --git a/arch/arm/cpu/arm926ejs/mxs/mxs.c b/arch/arm/cpu/arm926ejs/mxs/mxs.c index ef130ae..30dbf5e 100644 --- a/arch/arm/cpu/arm926ejs/mxs/mxs.c +++ b/arch/arm/cpu/arm926ejs/mxs/mxs.c @@ -132,23 +132,7 @@ int arch_cpu_init(void) return 0; }
-#if defined(CONFIG_DISPLAY_CPUINFO) -static const char *get_cpu_type(void) -{ - struct mxs_digctl_regs *digctl_regs = - (struct mxs_digctl_regs *)MXS_DIGCTL_BASE; - - switch (readl(&digctl_regs->hw_digctl_chipid) & HW_DIGCTL_CHIPID_MASK) { - case HW_DIGCTL_CHIPID_MX23: - return "23"; - case HW_DIGCTL_CHIPID_MX28: - return "28"; - default: - return "??"; - } -} - -static const char *get_cpu_rev(void) +u32 get_cpu_rev(void) { struct mxs_digctl_regs *digctl_regs = (struct mxs_digctl_regs *)MXS_DIGCTL_BASE; @@ -158,38 +142,50 @@ static const char *get_cpu_rev(void) case HW_DIGCTL_CHIPID_MX23: switch (rev) { case 0x0: - return "1.0"; case 0x1: - return "1.1"; case 0x2: - return "1.2"; case 0x3: - return "1.3"; case 0x4: - return "1.4"; + return (MXC_CPU_MX23 << 12) | (rev + 0x10); default: - return "??"; + return 0; } case HW_DIGCTL_CHIPID_MX28: switch (rev) { case 0x1: - return "1.2"; + return (MXC_CPU_MX28 << 12) | 0x12; default: - return "??"; + return 0; } default: + return 0; + } +} + +#if defined(CONFIG_DISPLAY_CPUINFO) +const char *get_imx_type(u32 imxtype) +{ + switch (imxtype) { + case MXC_CPU_MX23: + return "23"; /* Quad-Plus version of the mx6 */ + case MXC_CPU_MX28: + return "28"; /* Dual-Plus version of the mx6 */ + default: return "??"; } }
int print_cpuinfo(void) { + u32 cpurev; struct mxs_spl_data *data = (struct mxs_spl_data *) ((CONFIG_SYS_TEXT_BASE - sizeof(struct mxs_spl_data)) & ~0xf);
- printf("CPU: Freescale i.MX%s rev%s at %d MHz\n", - get_cpu_type(), - get_cpu_rev(), + cpurev = get_cpu_rev(); + printf("CPU: Freescale i.MX%s rev%d.%d at %d MHz\n", + get_imx_type((cpurev & 0xFF000) >> 12), + (cpurev & 0x000F0) >> 4, + (cpurev & 0x0000F) >> 0, mxc_get_clock(MXC_ARM_CLK) / 1000000); printf("BOOT: %s\n", mxs_boot_modes[data->boot_mode_idx].mode); return 0; diff --git a/arch/arm/include/asm/arch-mxs/sys_proto.h b/arch/arm/include/asm/arch-mxs/sys_proto.h index 4678723..d6e9fdb 100644 --- a/arch/arm/include/asm/arch-mxs/sys_proto.h +++ b/arch/arm/include/asm/arch-mxs/sys_proto.h @@ -11,6 +11,7 @@ #define __SYS_PROTO_H__
#include <asm/imx-common/regs-common.h> +#include <../arch-imx/cpu.h>
int mxs_reset_block(struct mxs_register_32 *reg); int mxs_wait_mask_set(struct mxs_register_32 *reg,

On 10/08/2015 14:53, Peng Fan wrote:
Rewrite get_cpu_rev, from "static const char *get_cpu_rev(void)" to "u32 get_cpu_rev(void)". To align with get_cpu_rev of other i.MXes.
Also write get_imx_type to replace get_cpu_type, since we have macro named get_cpu_type.
Signed-off-by: Peng Fan Peng.Fan@freescale.com Cc: Stefano Babic sbabic@denx.de
arch/arm/cpu/arm926ejs/mxs/mxs.c | 52 ++++++++++++++----------------- arch/arm/include/asm/arch-mxs/sys_proto.h | 1 + 2 files changed, 25 insertions(+), 28 deletions(-)
diff --git a/arch/arm/cpu/arm926ejs/mxs/mxs.c b/arch/arm/cpu/arm926ejs/mxs/mxs.c index ef130ae..30dbf5e 100644 --- a/arch/arm/cpu/arm926ejs/mxs/mxs.c +++ b/arch/arm/cpu/arm926ejs/mxs/mxs.c @@ -132,23 +132,7 @@ int arch_cpu_init(void) return 0; }
-#if defined(CONFIG_DISPLAY_CPUINFO) -static const char *get_cpu_type(void) -{
- struct mxs_digctl_regs *digctl_regs =
(struct mxs_digctl_regs *)MXS_DIGCTL_BASE;
- switch (readl(&digctl_regs->hw_digctl_chipid) & HW_DIGCTL_CHIPID_MASK) {
- case HW_DIGCTL_CHIPID_MX23:
return "23";
- case HW_DIGCTL_CHIPID_MX28:
return "28";
- default:
return "??";
- }
-}
-static const char *get_cpu_rev(void) +u32 get_cpu_rev(void) { struct mxs_digctl_regs *digctl_regs = (struct mxs_digctl_regs *)MXS_DIGCTL_BASE; @@ -158,38 +142,50 @@ static const char *get_cpu_rev(void) case HW_DIGCTL_CHIPID_MX23: switch (rev) { case 0x0:
case 0x1:return "1.0";
case 0x2:return "1.1";
case 0x3:return "1.2";
case 0x4:return "1.3";
return "1.4";
default:return (MXC_CPU_MX23 << 12) | (rev + 0x10);
return "??";
} case HW_DIGCTL_CHIPID_MX28: switch (rev) { case 0x1:return 0;
return "1.2";
default:return (MXC_CPU_MX28 << 12) | 0x12;
return "??";
} default:return 0;
return 0;
- }
+}
+#if defined(CONFIG_DISPLAY_CPUINFO) +const char *get_imx_type(u32 imxtype) +{
- switch (imxtype) {
- case MXC_CPU_MX23:
return "23"; /* Quad-Plus version of the mx6 */
- case MXC_CPU_MX28:
return "28"; /* Dual-Plus version of the mx6 */
- default: return "??"; }
}
int print_cpuinfo(void) {
- u32 cpurev; struct mxs_spl_data *data = (struct mxs_spl_data *) ((CONFIG_SYS_TEXT_BASE - sizeof(struct mxs_spl_data)) & ~0xf);
- printf("CPU: Freescale i.MX%s rev%s at %d MHz\n",
get_cpu_type(),
get_cpu_rev(),
- cpurev = get_cpu_rev();
- printf("CPU: Freescale i.MX%s rev%d.%d at %d MHz\n",
get_imx_type((cpurev & 0xFF000) >> 12),
(cpurev & 0x000F0) >> 4,
mxc_get_clock(MXC_ARM_CLK) / 1000000); printf("BOOT: %s\n", mxs_boot_modes[data->boot_mode_idx].mode); return 0;(cpurev & 0x0000F) >> 0,
diff --git a/arch/arm/include/asm/arch-mxs/sys_proto.h b/arch/arm/include/asm/arch-mxs/sys_proto.h index 4678723..d6e9fdb 100644 --- a/arch/arm/include/asm/arch-mxs/sys_proto.h +++ b/arch/arm/include/asm/arch-mxs/sys_proto.h @@ -11,6 +11,7 @@ #define __SYS_PROTO_H__
#include <asm/imx-common/regs-common.h> +#include <../arch-imx/cpu.h>
int mxs_reset_block(struct mxs_register_32 *reg); int mxs_wait_mask_set(struct mxs_register_32 *reg,
Reviewed-by: Stefano Babic sbabic@denx.de
Best regards, Stefano Babic

Move most macro definitions and prototypes into "arch/arm/include/asm/imx-common/sys_proto.h" to avoid duplicated function prototypes and marco definitions for different i.MX SoCs.
This patch do not remove the sys_proto.h for different i.MX SoCs, because we need to modify lots of driver code and others. This patch remove duplicated macros and prototypes and incude "sys_proto.h" of imx-common for each sys_proto.h of different i.MX platforms. Then later we should avoid add stuff in sys_proto.h of each platform, and modify driver to include common sys_proto.h.
Signed-off-by: Peng Fan Peng.Fan@freescale.com Cc: Stefano Babic sbabic@denx.de --- arch/arm/include/asm/arch-mx31/sys_proto.h | 7 ++--- arch/arm/include/asm/arch-mx35/sys_proto.h | 12 ++++---- arch/arm/include/asm/arch-mx5/sys_proto.h | 22 +------------- arch/arm/include/asm/arch-mx6/sys_proto.h | 45 +---------------------------- arch/arm/include/asm/arch-mxs/sys_proto.h | 15 ++-------- arch/arm/include/asm/imx-common/sys_proto.h | 45 +++++++++++++++++++++++++++++ 6 files changed, 59 insertions(+), 87 deletions(-) create mode 100644 arch/arm/include/asm/imx-common/sys_proto.h
diff --git a/arch/arm/include/asm/arch-mx31/sys_proto.h b/arch/arm/include/asm/arch-mx31/sys_proto.h index 1626442..674b25c 100644 --- a/arch/arm/include/asm/arch-mx31/sys_proto.h +++ b/arch/arm/include/asm/arch-mx31/sys_proto.h @@ -5,10 +5,10 @@ * SPDX-License-Identifier: GPL-2.0+ */
-#ifndef _SYS_PROTO_H_ -#define _SYS_PROTO_H_ +#ifndef _MX31_SYS_PROTO_H_ +#define _MX31_SYS_PROTO_H_
-#include "../arch-imx/cpu.h" +#include <asm/imx-common/sys_proto.h>
struct mxc_weimcs { u32 upper; @@ -18,5 +18,4 @@ struct mxc_weimcs {
void mxc_setup_weimcs(int cs, const struct mxc_weimcs *weimcs); int mxc_mmc_init(bd_t *bis); -u32 get_cpu_rev(void); #endif diff --git a/arch/arm/include/asm/arch-mx35/sys_proto.h b/arch/arm/include/asm/arch-mx35/sys_proto.h index 35c0352..0979fda 100644 --- a/arch/arm/include/asm/arch-mx35/sys_proto.h +++ b/arch/arm/include/asm/arch-mx35/sys_proto.h @@ -5,12 +5,12 @@ * SPDX-License-Identifier: GPL-2.0+ */
-#ifndef _SYS_PROTO_H_ -#define _SYS_PROTO_H_ +#ifndef _MX35_SYS_PROTO_H_ +#define _MX35_SYS_PROTO_H_
-u32 get_cpu_rev(void); -void mx3_setup_sdram_bank(u32 start_address, u32 ddr2_config, - u32 row, u32 col, u32 dsize, u32 refresh); -#define is_soc_rev(rev) ((get_cpu_rev() & 0xFF) - rev) +#include <asm/imx-common/sys_proto.h> + +void mx3_setup_sdram_bank(u32 start_address, u32 ddr2_config, u32 row, + u32 col, u32 dsize, u32 refresh);
#endif diff --git a/arch/arm/include/asm/arch-mx5/sys_proto.h b/arch/arm/include/asm/arch-mx5/sys_proto.h index b06c77f..16c9b76 100644 --- a/arch/arm/include/asm/arch-mx5/sys_proto.h +++ b/arch/arm/include/asm/arch-mx5/sys_proto.h @@ -5,24 +5,4 @@ * SPDX-License-Identifier: GPL-2.0+ */
-#ifndef _SYS_PROTO_H_ -#define _SYS_PROTO_H_ - -#include "../arch-imx/cpu.h" - -#define is_soc_rev(rev) ((get_cpu_rev() & 0xFF) - rev) -u32 get_cpu_rev(void); -unsigned imx_ddr_size(void); -void sdelay(unsigned long); -void set_chipselect_size(int const); - -/* - * Initializes on-chip ethernet controllers. - * to override, implement board_eth_init() - */ - -int fecmxc_initialize(bd_t *bis); -u32 get_ahb_clk(void); -u32 get_periph_clk(void); - -#endif +#include <asm/imx-common/sys_proto.h> diff --git a/arch/arm/include/asm/arch-mx6/sys_proto.h b/arch/arm/include/asm/arch-mx6/sys_proto.h index eee8ca8..16c9b76 100644 --- a/arch/arm/include/asm/arch-mx6/sys_proto.h +++ b/arch/arm/include/asm/arch-mx6/sys_proto.h @@ -5,47 +5,4 @@ * SPDX-License-Identifier: GPL-2.0+ */
-#ifndef _SYS_PROTO_H_ -#define _SYS_PROTO_H_ - -#include <asm/imx-common/regs-common.h> -#include "../arch-imx/cpu.h" - -#define soc_rev() (get_cpu_rev() & 0xFF) -#define is_soc_rev(rev) (soc_rev() == rev) - -u32 get_nr_cpus(void); -u32 get_cpu_rev(void); -u32 get_cpu_speed_grade_hz(void); -u32 get_cpu_temp_grade(int *minc, int *maxc); - -/* returns MXC_CPU_ value */ -#define cpu_type(rev) (((rev) >> 12) & 0xff) - -/* both macros return/take MXC_CPU_ constants */ -#define get_cpu_type() (cpu_type(get_cpu_rev())) -#define is_cpu_type(cpu) (get_cpu_type() == cpu) - -const char *get_imx_type(u32 imxtype); -unsigned imx_ddr_size(void); -void set_chipselect_size(int const); - -#define is_mx6dqp() (is_cpu_type(MXC_CPU_MX6QP) || is_cpu_type(MXC_CPU_MX6DP)) - -/* - * Initializes on-chip ethernet controllers. - * to override, implement board_eth_init() - */ - -int fecmxc_initialize(bd_t *bis); -u32 get_ahb_clk(void); -u32 get_periph_clk(void); - -int mxs_reset_block(struct mxs_register_32 *reg); -int mxs_wait_mask_set(struct mxs_register_32 *reg, - uint32_t mask, - unsigned int timeout); -int mxs_wait_mask_clr(struct mxs_register_32 *reg, - uint32_t mask, - unsigned int timeout); -#endif +#include <asm/imx-common/sys_proto.h> diff --git a/arch/arm/include/asm/arch-mxs/sys_proto.h b/arch/arm/include/asm/arch-mxs/sys_proto.h index d6e9fdb..20ff101 100644 --- a/arch/arm/include/asm/arch-mxs/sys_proto.h +++ b/arch/arm/include/asm/arch-mxs/sys_proto.h @@ -7,19 +7,10 @@ * SPDX-License-Identifier: GPL-2.0+ */
-#ifndef __SYS_PROTO_H__ -#define __SYS_PROTO_H__ +#ifndef __MXS_SYS_PROTO_H__ +#define __MXS_SYS_PROTO_H__
-#include <asm/imx-common/regs-common.h> -#include <../arch-imx/cpu.h> - -int mxs_reset_block(struct mxs_register_32 *reg); -int mxs_wait_mask_set(struct mxs_register_32 *reg, - uint32_t mask, - unsigned int timeout); -int mxs_wait_mask_clr(struct mxs_register_32 *reg, - uint32_t mask, - unsigned int timeout); +#include <asm/imx-common/sys_proto.h>
int mxsmmc_initialize(bd_t *bis, int id, int (*wp)(int), int (*cd)(int));
diff --git a/arch/arm/include/asm/imx-common/sys_proto.h b/arch/arm/include/asm/imx-common/sys_proto.h new file mode 100644 index 0000000..706bca0 --- /dev/null +++ b/arch/arm/include/asm/imx-common/sys_proto.h @@ -0,0 +1,45 @@ +/* + * (C) Copyright 2009 + * Stefano Babic, DENX Software Engineering, sbabic@denx.de. + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +#ifndef _SYS_PROTO_H_ +#define _SYS_PROTO_H_ + +#include <asm/imx-common/regs-common.h> +#include "../arch-imx/cpu.h" + +#define soc_rev() (get_cpu_rev() & 0xFF) +#define is_soc_rev(rev) (soc_rev() == rev) + +/* returns MXC_CPU_ value */ +#define cpu_type(rev) (((rev) >> 12) & 0xff) +/* both macros return/take MXC_CPU_ constants */ +#define get_cpu_type() (cpu_type(get_cpu_rev())) +#define is_cpu_type(cpu) (get_cpu_type() == cpu) + +#define is_mx6dqp() (is_cpu_type(MXC_CPU_MX6QP) || is_cpu_type(MXC_CPU_MX6DP)) + +u32 get_nr_cpus(void); +u32 get_cpu_rev(void); +u32 get_cpu_speed_grade_hz(void); +u32 get_cpu_temp_grade(int *minc, int *maxc); +const char *get_imx_type(u32 imxtype); +u32 imx_ddr_size(void); +void sdelay(unsigned long); +void set_chipselect_size(int const); + +/* + * Initializes on-chip ethernet controllers. + * to override, implement board_eth_init() + */ +int fecmxc_initialize(bd_t *bis); +u32 get_ahb_clk(void); +u32 get_periph_clk(void); + +int mxs_reset_block(struct mxs_register_32 *reg); +int mxs_wait_mask_set(struct mxs_register_32 *reg, u32 mask, u32 timeout); +int mxs_wait_mask_clr(struct mxs_register_32 *reg, u32 mask, u32 timeout); +#endif

On 10/08/2015 14:53, Peng Fan wrote:
Move most macro definitions and prototypes into "arch/arm/include/asm/imx-common/sys_proto.h" to avoid duplicated function prototypes and marco definitions for different i.MX SoCs.
This patch do not remove the sys_proto.h for different i.MX SoCs, because we need to modify lots of driver code and others. This patch remove duplicated macros and prototypes and incude "sys_proto.h" of imx-common for each sys_proto.h of different i.MX platforms. Then later we should avoid add stuff in sys_proto.h of each platform, and modify driver to include common sys_proto.h.
Signed-off-by: Peng Fan Peng.Fan@freescale.com Cc: Stefano Babic sbabic@denx.de
arch/arm/include/asm/arch-mx31/sys_proto.h | 7 ++--- arch/arm/include/asm/arch-mx35/sys_proto.h | 12 ++++---- arch/arm/include/asm/arch-mx5/sys_proto.h | 22 +------------- arch/arm/include/asm/arch-mx6/sys_proto.h | 45 +---------------------------- arch/arm/include/asm/arch-mxs/sys_proto.h | 15 ++-------- arch/arm/include/asm/imx-common/sys_proto.h | 45 +++++++++++++++++++++++++++++ 6 files changed, 59 insertions(+), 87 deletions(-) create mode 100644 arch/arm/include/asm/imx-common/sys_proto.h
diff --git a/arch/arm/include/asm/arch-mx31/sys_proto.h b/arch/arm/include/asm/arch-mx31/sys_proto.h index 1626442..674b25c 100644 --- a/arch/arm/include/asm/arch-mx31/sys_proto.h +++ b/arch/arm/include/asm/arch-mx31/sys_proto.h @@ -5,10 +5,10 @@
- SPDX-License-Identifier: GPL-2.0+
*/
-#ifndef _SYS_PROTO_H_ -#define _SYS_PROTO_H_ +#ifndef _MX31_SYS_PROTO_H_ +#define _MX31_SYS_PROTO_H_
-#include "../arch-imx/cpu.h" +#include <asm/imx-common/sys_proto.h>
struct mxc_weimcs { u32 upper; @@ -18,5 +18,4 @@ struct mxc_weimcs {
void mxc_setup_weimcs(int cs, const struct mxc_weimcs *weimcs); int mxc_mmc_init(bd_t *bis); -u32 get_cpu_rev(void); #endif diff --git a/arch/arm/include/asm/arch-mx35/sys_proto.h b/arch/arm/include/asm/arch-mx35/sys_proto.h index 35c0352..0979fda 100644 --- a/arch/arm/include/asm/arch-mx35/sys_proto.h +++ b/arch/arm/include/asm/arch-mx35/sys_proto.h @@ -5,12 +5,12 @@
- SPDX-License-Identifier: GPL-2.0+
*/
-#ifndef _SYS_PROTO_H_ -#define _SYS_PROTO_H_ +#ifndef _MX35_SYS_PROTO_H_ +#define _MX35_SYS_PROTO_H_
-u32 get_cpu_rev(void); -void mx3_setup_sdram_bank(u32 start_address, u32 ddr2_config,
- u32 row, u32 col, u32 dsize, u32 refresh);
-#define is_soc_rev(rev) ((get_cpu_rev() & 0xFF) - rev) +#include <asm/imx-common/sys_proto.h>
+void mx3_setup_sdram_bank(u32 start_address, u32 ddr2_config, u32 row,
u32 col, u32 dsize, u32 refresh);
#endif diff --git a/arch/arm/include/asm/arch-mx5/sys_proto.h b/arch/arm/include/asm/arch-mx5/sys_proto.h index b06c77f..16c9b76 100644 --- a/arch/arm/include/asm/arch-mx5/sys_proto.h +++ b/arch/arm/include/asm/arch-mx5/sys_proto.h @@ -5,24 +5,4 @@
- SPDX-License-Identifier: GPL-2.0+
*/
-#ifndef _SYS_PROTO_H_ -#define _SYS_PROTO_H_
-#include "../arch-imx/cpu.h"
-#define is_soc_rev(rev) ((get_cpu_rev() & 0xFF) - rev) -u32 get_cpu_rev(void); -unsigned imx_ddr_size(void); -void sdelay(unsigned long); -void set_chipselect_size(int const);
-/*
- Initializes on-chip ethernet controllers.
- to override, implement board_eth_init()
- */
-int fecmxc_initialize(bd_t *bis); -u32 get_ahb_clk(void); -u32 get_periph_clk(void);
-#endif +#include <asm/imx-common/sys_proto.h> diff --git a/arch/arm/include/asm/arch-mx6/sys_proto.h b/arch/arm/include/asm/arch-mx6/sys_proto.h index eee8ca8..16c9b76 100644 --- a/arch/arm/include/asm/arch-mx6/sys_proto.h +++ b/arch/arm/include/asm/arch-mx6/sys_proto.h @@ -5,47 +5,4 @@
- SPDX-License-Identifier: GPL-2.0+
*/
-#ifndef _SYS_PROTO_H_ -#define _SYS_PROTO_H_
-#include <asm/imx-common/regs-common.h> -#include "../arch-imx/cpu.h"
-#define soc_rev() (get_cpu_rev() & 0xFF) -#define is_soc_rev(rev) (soc_rev() == rev)
-u32 get_nr_cpus(void); -u32 get_cpu_rev(void); -u32 get_cpu_speed_grade_hz(void); -u32 get_cpu_temp_grade(int *minc, int *maxc);
-/* returns MXC_CPU_ value */ -#define cpu_type(rev) (((rev) >> 12) & 0xff)
-/* both macros return/take MXC_CPU_ constants */ -#define get_cpu_type() (cpu_type(get_cpu_rev())) -#define is_cpu_type(cpu) (get_cpu_type() == cpu)
-const char *get_imx_type(u32 imxtype); -unsigned imx_ddr_size(void); -void set_chipselect_size(int const);
-#define is_mx6dqp() (is_cpu_type(MXC_CPU_MX6QP) || is_cpu_type(MXC_CPU_MX6DP))
-/*
- Initializes on-chip ethernet controllers.
- to override, implement board_eth_init()
- */
-int fecmxc_initialize(bd_t *bis); -u32 get_ahb_clk(void); -u32 get_periph_clk(void);
-int mxs_reset_block(struct mxs_register_32 *reg); -int mxs_wait_mask_set(struct mxs_register_32 *reg,
uint32_t mask,
unsigned int timeout);
-int mxs_wait_mask_clr(struct mxs_register_32 *reg,
uint32_t mask,
unsigned int timeout);
-#endif +#include <asm/imx-common/sys_proto.h> diff --git a/arch/arm/include/asm/arch-mxs/sys_proto.h b/arch/arm/include/asm/arch-mxs/sys_proto.h index d6e9fdb..20ff101 100644 --- a/arch/arm/include/asm/arch-mxs/sys_proto.h +++ b/arch/arm/include/asm/arch-mxs/sys_proto.h @@ -7,19 +7,10 @@
- SPDX-License-Identifier: GPL-2.0+
*/
-#ifndef __SYS_PROTO_H__ -#define __SYS_PROTO_H__ +#ifndef __MXS_SYS_PROTO_H__ +#define __MXS_SYS_PROTO_H__
-#include <asm/imx-common/regs-common.h> -#include <../arch-imx/cpu.h>
-int mxs_reset_block(struct mxs_register_32 *reg); -int mxs_wait_mask_set(struct mxs_register_32 *reg,
uint32_t mask,
unsigned int timeout);
-int mxs_wait_mask_clr(struct mxs_register_32 *reg,
uint32_t mask,
unsigned int timeout);
+#include <asm/imx-common/sys_proto.h>
int mxsmmc_initialize(bd_t *bis, int id, int (*wp)(int), int (*cd)(int));
diff --git a/arch/arm/include/asm/imx-common/sys_proto.h b/arch/arm/include/asm/imx-common/sys_proto.h new file mode 100644 index 0000000..706bca0 --- /dev/null +++ b/arch/arm/include/asm/imx-common/sys_proto.h @@ -0,0 +1,45 @@ +/*
- (C) Copyright 2009
- Stefano Babic, DENX Software Engineering, sbabic@denx.de.
- SPDX-License-Identifier: GPL-2.0+
- */
+#ifndef _SYS_PROTO_H_ +#define _SYS_PROTO_H_
+#include <asm/imx-common/regs-common.h> +#include "../arch-imx/cpu.h"
+#define soc_rev() (get_cpu_rev() & 0xFF) +#define is_soc_rev(rev) (soc_rev() == rev)
+/* returns MXC_CPU_ value */ +#define cpu_type(rev) (((rev) >> 12) & 0xff) +/* both macros return/take MXC_CPU_ constants */ +#define get_cpu_type() (cpu_type(get_cpu_rev())) +#define is_cpu_type(cpu) (get_cpu_type() == cpu)
+#define is_mx6dqp() (is_cpu_type(MXC_CPU_MX6QP) || is_cpu_type(MXC_CPU_MX6DP))
+u32 get_nr_cpus(void); +u32 get_cpu_rev(void); +u32 get_cpu_speed_grade_hz(void); +u32 get_cpu_temp_grade(int *minc, int *maxc); +const char *get_imx_type(u32 imxtype); +u32 imx_ddr_size(void); +void sdelay(unsigned long); +void set_chipselect_size(int const);
+/*
- Initializes on-chip ethernet controllers.
- to override, implement board_eth_init()
- */
+int fecmxc_initialize(bd_t *bis); +u32 get_ahb_clk(void); +u32 get_periph_clk(void);
+int mxs_reset_block(struct mxs_register_32 *reg); +int mxs_wait_mask_set(struct mxs_register_32 *reg, u32 mask, u32 timeout); +int mxs_wait_mask_clr(struct mxs_register_32 *reg, u32 mask, u32 timeout); +#endif
Reviewed-by: Stefano Babic sbabic@denx.de
Best regards, Stefano Babic

Hi Peng,
On 10/08/2015 14:53, Peng Fan wrote:
Move most macro definitions and prototypes into "arch/arm/include/asm/imx-common/sys_proto.h" to avoid duplicated function prototypes and marco definitions for different i.MX SoCs.
This patch do not remove the sys_proto.h for different i.MX SoCs, because we need to modify lots of driver code and others. This patch remove duplicated macros and prototypes and incude "sys_proto.h" of imx-common for each sys_proto.h of different i.MX platforms. Then later we should avoid add stuff in sys_proto.h of each platform, and modify driver to include common sys_proto.h.
Signed-off-by: Peng Fan Peng.Fan@freescale.com Cc: Stefano Babic sbabic@denx.de
arch/arm/include/asm/arch-mx31/sys_proto.h | 7 ++--- arch/arm/include/asm/arch-mx35/sys_proto.h | 12 ++++---- arch/arm/include/asm/arch-mx5/sys_proto.h | 22 +------------- arch/arm/include/asm/arch-mx6/sys_proto.h | 45 +---------------------------- arch/arm/include/asm/arch-mxs/sys_proto.h | 15 ++-------- arch/arm/include/asm/imx-common/sys_proto.h | 45 +++++++++++++++++++++++++++++ 6 files changed, 59 insertions(+), 87 deletions(-) create mode 100644 arch/arm/include/asm/imx-common/sys_proto.h
This breaks MX35 boards:
+In file included from include/asm/arch/sys_proto.h:11:0, + from arch/arm/cpu/arm1136/mx35/mx35_sdram.c:11: +arch/arm/include/asm/imx-common/sys_proto.h:38:23: error: unknown type name 'bd_t'
Reason is:
int fecmxc_initialize(bd_t *bis);
Can you check and resubmit ? Thanks !
diff --git a/arch/arm/include/asm/arch-mx31/sys_proto.h b/arch/arm/include/asm/arch-mx31/sys_proto.h index 1626442..674b25c 100644 --- a/arch/arm/include/asm/arch-mx31/sys_proto.h +++ b/arch/arm/include/asm/arch-mx31/sys_proto.h @@ -5,10 +5,10 @@
- SPDX-License-Identifier: GPL-2.0+
*/
-#ifndef _SYS_PROTO_H_ -#define _SYS_PROTO_H_ +#ifndef _MX31_SYS_PROTO_H_ +#define _MX31_SYS_PROTO_H_
-#include "../arch-imx/cpu.h" +#include <asm/imx-common/sys_proto.h>
struct mxc_weimcs { u32 upper; @@ -18,5 +18,4 @@ struct mxc_weimcs {
void mxc_setup_weimcs(int cs, const struct mxc_weimcs *weimcs); int mxc_mmc_init(bd_t *bis); -u32 get_cpu_rev(void); #endif diff --git a/arch/arm/include/asm/arch-mx35/sys_proto.h b/arch/arm/include/asm/arch-mx35/sys_proto.h index 35c0352..0979fda 100644 --- a/arch/arm/include/asm/arch-mx35/sys_proto.h +++ b/arch/arm/include/asm/arch-mx35/sys_proto.h @@ -5,12 +5,12 @@
- SPDX-License-Identifier: GPL-2.0+
*/
-#ifndef _SYS_PROTO_H_ -#define _SYS_PROTO_H_ +#ifndef _MX35_SYS_PROTO_H_ +#define _MX35_SYS_PROTO_H_
-u32 get_cpu_rev(void); -void mx3_setup_sdram_bank(u32 start_address, u32 ddr2_config,
- u32 row, u32 col, u32 dsize, u32 refresh);
-#define is_soc_rev(rev) ((get_cpu_rev() & 0xFF) - rev) +#include <asm/imx-common/sys_proto.h>
+void mx3_setup_sdram_bank(u32 start_address, u32 ddr2_config, u32 row,
u32 col, u32 dsize, u32 refresh);
#endif diff --git a/arch/arm/include/asm/arch-mx5/sys_proto.h b/arch/arm/include/asm/arch-mx5/sys_proto.h index b06c77f..16c9b76 100644 --- a/arch/arm/include/asm/arch-mx5/sys_proto.h +++ b/arch/arm/include/asm/arch-mx5/sys_proto.h @@ -5,24 +5,4 @@
- SPDX-License-Identifier: GPL-2.0+
*/
-#ifndef _SYS_PROTO_H_ -#define _SYS_PROTO_H_
-#include "../arch-imx/cpu.h"
-#define is_soc_rev(rev) ((get_cpu_rev() & 0xFF) - rev) -u32 get_cpu_rev(void); -unsigned imx_ddr_size(void); -void sdelay(unsigned long); -void set_chipselect_size(int const);
-/*
- Initializes on-chip ethernet controllers.
- to override, implement board_eth_init()
- */
-int fecmxc_initialize(bd_t *bis); -u32 get_ahb_clk(void); -u32 get_periph_clk(void);
-#endif +#include <asm/imx-common/sys_proto.h> diff --git a/arch/arm/include/asm/arch-mx6/sys_proto.h b/arch/arm/include/asm/arch-mx6/sys_proto.h index eee8ca8..16c9b76 100644 --- a/arch/arm/include/asm/arch-mx6/sys_proto.h +++ b/arch/arm/include/asm/arch-mx6/sys_proto.h @@ -5,47 +5,4 @@
- SPDX-License-Identifier: GPL-2.0+
*/
-#ifndef _SYS_PROTO_H_ -#define _SYS_PROTO_H_
-#include <asm/imx-common/regs-common.h> -#include "../arch-imx/cpu.h"
-#define soc_rev() (get_cpu_rev() & 0xFF) -#define is_soc_rev(rev) (soc_rev() == rev)
-u32 get_nr_cpus(void); -u32 get_cpu_rev(void); -u32 get_cpu_speed_grade_hz(void); -u32 get_cpu_temp_grade(int *minc, int *maxc);
-/* returns MXC_CPU_ value */ -#define cpu_type(rev) (((rev) >> 12) & 0xff)
-/* both macros return/take MXC_CPU_ constants */ -#define get_cpu_type() (cpu_type(get_cpu_rev())) -#define is_cpu_type(cpu) (get_cpu_type() == cpu)
-const char *get_imx_type(u32 imxtype); -unsigned imx_ddr_size(void); -void set_chipselect_size(int const);
-#define is_mx6dqp() (is_cpu_type(MXC_CPU_MX6QP) || is_cpu_type(MXC_CPU_MX6DP))
-/*
- Initializes on-chip ethernet controllers.
- to override, implement board_eth_init()
- */
-int fecmxc_initialize(bd_t *bis); -u32 get_ahb_clk(void); -u32 get_periph_clk(void);
-int mxs_reset_block(struct mxs_register_32 *reg); -int mxs_wait_mask_set(struct mxs_register_32 *reg,
uint32_t mask,
unsigned int timeout);
-int mxs_wait_mask_clr(struct mxs_register_32 *reg,
uint32_t mask,
unsigned int timeout);
-#endif +#include <asm/imx-common/sys_proto.h> diff --git a/arch/arm/include/asm/arch-mxs/sys_proto.h b/arch/arm/include/asm/arch-mxs/sys_proto.h index d6e9fdb..20ff101 100644 --- a/arch/arm/include/asm/arch-mxs/sys_proto.h +++ b/arch/arm/include/asm/arch-mxs/sys_proto.h @@ -7,19 +7,10 @@
- SPDX-License-Identifier: GPL-2.0+
*/
-#ifndef __SYS_PROTO_H__ -#define __SYS_PROTO_H__ +#ifndef __MXS_SYS_PROTO_H__ +#define __MXS_SYS_PROTO_H__
-#include <asm/imx-common/regs-common.h> -#include <../arch-imx/cpu.h>
-int mxs_reset_block(struct mxs_register_32 *reg); -int mxs_wait_mask_set(struct mxs_register_32 *reg,
uint32_t mask,
unsigned int timeout);
-int mxs_wait_mask_clr(struct mxs_register_32 *reg,
uint32_t mask,
unsigned int timeout);
+#include <asm/imx-common/sys_proto.h>
int mxsmmc_initialize(bd_t *bis, int id, int (*wp)(int), int (*cd)(int));
diff --git a/arch/arm/include/asm/imx-common/sys_proto.h b/arch/arm/include/asm/imx-common/sys_proto.h new file mode 100644 index 0000000..706bca0 --- /dev/null +++ b/arch/arm/include/asm/imx-common/sys_proto.h @@ -0,0 +1,45 @@ +/*
- (C) Copyright 2009
- Stefano Babic, DENX Software Engineering, sbabic@denx.de.
- SPDX-License-Identifier: GPL-2.0+
- */
+#ifndef _SYS_PROTO_H_ +#define _SYS_PROTO_H_
+#include <asm/imx-common/regs-common.h> +#include "../arch-imx/cpu.h"
+#define soc_rev() (get_cpu_rev() & 0xFF) +#define is_soc_rev(rev) (soc_rev() == rev)
+/* returns MXC_CPU_ value */ +#define cpu_type(rev) (((rev) >> 12) & 0xff) +/* both macros return/take MXC_CPU_ constants */ +#define get_cpu_type() (cpu_type(get_cpu_rev())) +#define is_cpu_type(cpu) (get_cpu_type() == cpu)
+#define is_mx6dqp() (is_cpu_type(MXC_CPU_MX6QP) || is_cpu_type(MXC_CPU_MX6DP))
+u32 get_nr_cpus(void); +u32 get_cpu_rev(void); +u32 get_cpu_speed_grade_hz(void); +u32 get_cpu_temp_grade(int *minc, int *maxc); +const char *get_imx_type(u32 imxtype); +u32 imx_ddr_size(void); +void sdelay(unsigned long); +void set_chipselect_size(int const);
+/*
- Initializes on-chip ethernet controllers.
- to override, implement board_eth_init()
- */
+int fecmxc_initialize(bd_t *bis); +u32 get_ahb_clk(void); +u32 get_periph_clk(void);
+int mxs_reset_block(struct mxs_register_32 *reg); +int mxs_wait_mask_set(struct mxs_register_32 *reg, u32 mask, u32 timeout); +int mxs_wait_mask_clr(struct mxs_register_32 *reg, u32 mask, u32 timeout); +#endif
Best regards, Stefano Babic

Hi Stefano, On Wed, Aug 12, 2015 at 05:49:15PM +0200, Stefano Babic wrote:
Hi Peng,
On 10/08/2015 14:53, Peng Fan wrote:
Move most macro definitions and prototypes into "arch/arm/include/asm/imx-common/sys_proto.h" to avoid duplicated function prototypes and marco definitions for different i.MX SoCs.
This patch do not remove the sys_proto.h for different i.MX SoCs, because we need to modify lots of driver code and others. This patch remove duplicated macros and prototypes and incude "sys_proto.h" of imx-common for each sys_proto.h of different i.MX platforms. Then later we should avoid add stuff in sys_proto.h of each platform, and modify driver to include common sys_proto.h.
Signed-off-by: Peng Fan Peng.Fan@freescale.com Cc: Stefano Babic sbabic@denx.de
arch/arm/include/asm/arch-mx31/sys_proto.h | 7 ++--- arch/arm/include/asm/arch-mx35/sys_proto.h | 12 ++++---- arch/arm/include/asm/arch-mx5/sys_proto.h | 22 +------------- arch/arm/include/asm/arch-mx6/sys_proto.h | 45 +---------------------------- arch/arm/include/asm/arch-mxs/sys_proto.h | 15 ++-------- arch/arm/include/asm/imx-common/sys_proto.h | 45 +++++++++++++++++++++++++++++ 6 files changed, 59 insertions(+), 87 deletions(-) create mode 100644 arch/arm/include/asm/imx-common/sys_proto.h
This breaks MX35 boards:
+In file included from include/asm/arch/sys_proto.h:11:0,
from arch/arm/cpu/arm1136/mx35/mx35_sdram.c:11:
+arch/arm/include/asm/imx-common/sys_proto.h:38:23: error: unknown type name 'bd_t'
Reason is:
int fecmxc_initialize(bd_t *bis);
Can you check and resubmit ? Thanks !
Oh. I'll check this. I missed to build mx35 target.
[...]
Regards, Peng. --

On 10/08/2015 14:53, Peng Fan wrote:
Add cpu types for i.MX2/3.
Signed-off-by: Peng Fan Peng.Fan@freescale.com Cc: Stefano Babic sbabic@denx.de
arch/arm/include/asm/arch-imx/cpu.h | 5 +++++ 1 file changed, 5 insertions(+)
diff --git a/arch/arm/include/asm/arch-imx/cpu.h b/arch/arm/include/asm/arch-imx/cpu.h index c7f9fff..71208aa 100644 --- a/arch/arm/include/asm/arch-imx/cpu.h +++ b/arch/arm/include/asm/arch-imx/cpu.h @@ -4,6 +4,11 @@
- SPDX-License-Identifier: GPL-2.0+
*/
+#define MXC_CPU_MX23 0x23 +#define MXC_CPU_MX25 0x25 +#define MXC_CPU_MX28 0x28 +#define MXC_CPU_MX31 0x31 +#define MXC_CPU_MX35 0x35 #define MXC_CPU_MX51 0x51 #define MXC_CPU_MX53 0x53 #define MXC_CPU_MX6SL 0x60
Reviewed-by: Stefano Babic sbabic@denx.de
Best regards, Stefano Babic
participants (3)
-
Peng Fan
-
Peng Fan
-
Stefano Babic