diff options
-rw-r--r-- | board/freescale/common/fsl_sys_rev.c | 12 | ||||
-rw-r--r-- | board/freescale/mx6sl_evk/mx6sl_evk.c | 15 | ||||
-rw-r--r-- | include/asm-arm/arch-mx6/mx6.h | 3 |
3 files changed, 20 insertions, 10 deletions
diff --git a/board/freescale/common/fsl_sys_rev.c b/board/freescale/common/fsl_sys_rev.c index 19a0347..953f422 100644 --- a/board/freescale/common/fsl_sys_rev.c +++ b/board/freescale/common/fsl_sys_rev.c @@ -20,7 +20,7 @@ #include <config.h> #include <common.h> #include <asm/io.h> -#if defined(CONFIG_MX6Q) || defined(CONFIG_MX6DL) +#if defined(CONFIG_MX6Q) || defined(CONFIG_MX6DL) || defined(CONFIG_MX6SL) #include <asm/arch/mx6.h> #endif @@ -30,7 +30,7 @@ unsigned int fsl_system_rev; -#if defined(CONFIG_MX6Q) || defined(CONFIG_MX6DL) +#if defined(CONFIG_MX6Q) || defined(CONFIG_MX6DL) || defined(CONFIG_MX6SL) /* * Set fsl_system_rev: * bit 0-7: Chip Revision ID @@ -68,8 +68,14 @@ void fsl_set_system_rev(void) * | 31 - 20 | 19 - 12 | 11 - 8 | 7 - 0 | * | resverd | CHIP ID | BD REV | SI REV | */ - u32 cpu_type = readl(ANATOP_BASE_ADDR + 0x260); u32 board_type = 0; + u32 cpu_type = readl(ANATOP_BASE_ADDR + 0x280); + + if ((cpu_type >> 16) == 0x60) + goto found; + + cpu_type = readl(ANATOP_BASE_ADDR + 0x260); +found: /* Chip Silicon ID */ fsl_system_rev = ((cpu_type >> 16) & 0xFF) << 12; /* Chip silicon major revision */ diff --git a/board/freescale/mx6sl_evk/mx6sl_evk.c b/board/freescale/mx6sl_evk/mx6sl_evk.c index e70d074..6cdcc0f 100644 --- a/board/freescale/mx6sl_evk/mx6sl_evk.c +++ b/board/freescale/mx6sl_evk/mx6sl_evk.c @@ -64,7 +64,6 @@ DECLARE_GLOBAL_DATA_PTR; -static u32 system_rev; static enum boot_device boot_dev; #define USB_OTG_PWR IMX_GPIO_NR(4, 0) @@ -112,10 +111,13 @@ enum boot_device get_boot_device(void) u32 get_board_rev(void) { - - system_rev = 0x60000 | BOARD_REV_3; /* means revB: EVK */ - - return system_rev; + /* + * If no fuse burned for board version (i.e., 0x0), + * then assume latest one - RevC + */ + if ((fsl_system_rev & BOARD_REV_MASK) == BOARD_REV_1) + fsl_system_rev |= BOARD_REV_4; + return fsl_system_rev; } int dram_init(void) @@ -1033,6 +1035,7 @@ int board_init(void) mxc_iomux_v3_init((void *)IOMUXC_BASE_ADDR); setup_boot_device(); + fsl_set_system_rev(); /* board id for linux */ gd->bd->bi_arch_number = MACH_TYPE_MX6SL_EVK; @@ -1069,7 +1072,7 @@ int board_late_init(void) int checkboard(void) { - printf("Board: MX6SoloLite-EVK:[ "); + printf("Board: MX6SoloLite-EVK (0x%x): [ ", fsl_system_rev); switch (__REG(SRC_BASE_ADDR + 0x8)) { case 0x0001: diff --git a/include/asm-arm/arch-mx6/mx6.h b/include/asm-arm/arch-mx6/mx6.h index 54eeddf..9fc1e7a 100644 --- a/include/asm-arm/arch-mx6/mx6.h +++ b/include/asm-arm/arch-mx6/mx6.h @@ -719,13 +719,14 @@ #define CHIP_REV_1_0 0x10 #define CHIP_REV_2_0 0x20 #define CHIP_REV_2_1 0x21 -#define CHIP_REV_UNKNOWN 0xff +#define CHIP_REV_MASK 0xff #define BOARD_REV_1 0x000 #define BOARD_REV_2 0x100 #define BOARD_REV_3 0x200 #define BOARD_REV_4 0x300 #define BOARD_REV_5 0x400 +#define BOARD_REV_MASK 0xf00 #define PLATFORM_ICGC 0x14 |