summaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-imx/imx51.c
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2010-10-11 13:01:08 +0200
committerSascha Hauer <s.hauer@pengutronix.de>2010-10-11 13:22:14 +0200
commitfbad06735b05004f474cc1cfa5fc8585ede3c87f (patch)
treef02711a5863112f484b4c43ebf4cf67bccaf683a /arch/arm/mach-imx/imx51.c
parentcdd5db42eff840323ed1bc9da8d0f0913614cddf (diff)
downloadbarebox-fbad06735b05004f474cc1cfa5fc8585ede3c87f.tar.gz
barebox-fbad06735b05004f474cc1cfa5fc8585ede3c87f.tar.xz
ARM i.MX: Add basic i.MX51 support
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'arch/arm/mach-imx/imx51.c')
-rw-r--r--arch/arm/mach-imx/imx51.c51
1 files changed, 51 insertions, 0 deletions
diff --git a/arch/arm/mach-imx/imx51.c b/arch/arm/mach-imx/imx51.c
index 8c4fc11a0c..075ed22f20 100644
--- a/arch/arm/mach-imx/imx51.c
+++ b/arch/arm/mach-imx/imx51.c
@@ -15,7 +15,10 @@
* MA 02111-1307 USA
*/
+#include <init.h>
#include <common.h>
+#include <asm/io.h>
+#include <mach/imx51-regs.h>
#include "gpio.h"
@@ -28,3 +31,51 @@ void *imx_gpio_base[] = {
int imx_gpio_count = ARRAY_SIZE(imx_gpio_base) * 32;
+#define SI_REV 0x48
+
+static u32 mx51_silicon_revision;
+static char *mx51_rev_string = "unknown";
+
+int imx_silicon_revision(void)
+{
+ return mx51_silicon_revision;
+}
+
+static int query_silicon_revision(void)
+{
+ void __iomem *rom = MX51_IROM_BASE_ADDR;
+ u32 rev;
+
+ rev = readl(rom + SI_REV);
+ switch (rev) {
+ case 0x1:
+ mx51_silicon_revision = MX51_CHIP_REV_1_0;
+ mx51_rev_string = "1.0";
+ break;
+ case 0x2:
+ mx51_silicon_revision = MX51_CHIP_REV_1_1;
+ mx51_rev_string = "1.1";
+ break;
+ case 0x10:
+ mx51_silicon_revision = MX51_CHIP_REV_2_0;
+ mx51_rev_string = "2.0";
+ break;
+ case 0x20:
+ mx51_silicon_revision = MX51_CHIP_REV_3_0;
+ mx51_rev_string = "3.0";
+ break;
+ default:
+ mx51_silicon_revision = 0;
+ }
+
+ return 0;
+}
+core_initcall(query_silicon_revision);
+
+static int imx51_print_silicon_rev(void)
+{
+ printf("detected i.MX51 rev %s\n", mx51_rev_string);
+
+ return 0;
+}
+device_initcall(imx51_print_silicon_rev);