diff mbox

[U-Boot,3/4] imx: mxs: reimplement get_cpu_rev

Message ID 1439211227-28030-3-git-send-email-Peng.Fan@freescale.com
State Changes Requested
Delegated to: Stefano Babic
Headers show

Commit Message

Peng Fan Aug. 10, 2015, 12:53 p.m. UTC
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(-)

Comments

Stefano Babic Aug. 11, 2015, 10:45 a.m. UTC | #1
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:
> -			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,
> 

Reviewed-by: Stefano Babic <sbabic@denx.de>

Best regards,
Stefano Babic
diff mbox

Patch

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,