Skip to content

Commit

Permalink
ARM: mxs: detect SoC by checking CHIPID register
Browse files Browse the repository at this point in the history
Both imx23 and imx28 have CHIPID register at address 0x8001c310, which
can be used to identify the SoC.  This patch changes cpu_is_xxx and
__arch_decomp_setup to use this CHIPID register than machine type to
detect the chip between imx23 and imx28, so that we do not need to
change these functions whenever a new board/machine gets added.

Suggested-by: Wolfram Sang <w.sang@pengutronix.de>
Signed-off-by: Shawn Guo <shawn.guo@linaro.org>
Acked-by: Wolfram Sang <w.sang@pengutronix.de>
  • Loading branch information
Shawn Guo committed Jan 27, 2012
1 parent dcd6c92 commit 845da6b
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 20 deletions.
1 change: 1 addition & 0 deletions arch/arm/mach-mxs/include/mach/digctl.h
Original file line number Diff line number Diff line change
Expand Up @@ -18,4 +18,5 @@
#define HW_DIGCTL_CTRL 0x0
#define BP_DIGCTL_CTRL_SAIF_CLKMUX 10
#define BM_DIGCTL_CTRL_SAIF_CLKMUX (0x3 << 10)
#define HW_DIGCTL_CHIPID 0x310
#endif
29 changes: 16 additions & 13 deletions arch/arm/mach-mxs/include/mach/mxs.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,21 +23,9 @@
#include <linux/io.h>
#endif
#include <asm/mach-types.h>
#include <mach/digctl.h>
#include <mach/hardware.h>

/*
* MXS CPU types
*/
#define cpu_is_mx23() ( \
machine_is_mx23evk() || \
machine_is_stmp378x() || \
0)
#define cpu_is_mx28() ( \
machine_is_mx28evk() || \
machine_is_m28evk() || \
machine_is_tx28() || \
0)

/*
* IO addresses common to MXS-based
*/
Expand Down Expand Up @@ -109,6 +97,21 @@ static inline void __mxs_togl(u32 mask, void __iomem *reg)
{
__raw_writel(mask, reg + MXS_TOG_ADDR);
}

/*
* MXS CPU types
*/
#define MXS_CHIPID (MXS_IO_ADDRESS(MXS_DIGCTL_BASE_ADDR) + HW_DIGCTL_CHIPID)

static inline int cpu_is_mx23(void)
{
return ((__raw_readl(MXS_CHIPID) >> 16) == 0x3780);
}

static inline int cpu_is_mx28(void)
{
return ((__raw_readl(MXS_CHIPID) >> 16) == 0x2800);
}
#endif

#endif /* __MACH_MXS_H__ */
13 changes: 6 additions & 7 deletions arch/arm/mach-mxs/include/mach/uncompress.h
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,6 @@
#ifndef __MACH_MXS_UNCOMPRESS_H__
#define __MACH_MXS_UNCOMPRESS_H__

#include <asm/mach-types.h>

unsigned long mxs_duart_base;

#define MXS_DUART(x) (*(volatile unsigned long *)(mxs_duart_base + (x)))
Expand Down Expand Up @@ -55,16 +53,17 @@ static inline void flush(void)

#define MX23_DUART_BASE_ADDR 0x80070000
#define MX28_DUART_BASE_ADDR 0x80074000
#define MXS_DIGCTL_CHIPID 0x8001c310

static inline void __arch_decomp_setup(unsigned long arch_id)
{
switch (arch_id) {
case MACH_TYPE_MX23EVK:
u16 chipid = (*(volatile unsigned long *) MXS_DIGCTL_CHIPID) >> 16;

switch (chipid) {
case 0x3780:
mxs_duart_base = MX23_DUART_BASE_ADDR;
break;
case MACH_TYPE_MX28EVK:
case MACH_TYPE_M28EVK:
case MACH_TYPE_TX28:
case 0x2800:
mxs_duart_base = MX28_DUART_BASE_ADDR;
break;
default:
Expand Down

0 comments on commit 845da6b

Please sign in to comment.