|
@@ -0,0 +1,96 @@
|
|
|
|
+/*
|
|
|
|
+ * linux/arch/arm/mach-omap2/id.c
|
|
|
|
+ *
|
|
|
|
+ * OMAP2 CPU identification code
|
|
|
|
+ *
|
|
|
|
+ * Copyright (C) 2005 Nokia Corporation
|
|
|
|
+ * Written by Tony Lindgren <tony@atomide.com>
|
|
|
|
+ *
|
|
|
|
+ * Copyright (C) 2009-11 Texas Instruments
|
|
|
|
+ * Added OMAP4 support - Santosh Shilimkar <santosh.shilimkar@ti.com>
|
|
|
|
+ *
|
|
|
|
+ * This program is free software; you can redistribute it and/or modify
|
|
|
|
+ * it under the terms of the GNU General Public License version 2 as
|
|
|
|
+ * published by the Free Software Foundation.
|
|
|
|
+ */
|
|
|
|
+
|
|
|
|
+#include <linux/module.h>
|
|
|
|
+#include <linux/kernel.h>
|
|
|
|
+#include <linux/init.h>
|
|
|
|
+#include <linux/io.h>
|
|
|
|
+
|
|
|
|
+#include <asm/cputype.h>
|
|
|
|
+
|
|
|
|
+#include "common.h"
|
|
|
|
+
|
|
|
|
+#include "id.h"
|
|
|
|
+
|
|
|
|
+#include "soc.h"
|
|
|
|
+#include "control.h"
|
|
|
|
+
|
|
|
|
+#define OMAP4_SILICON_TYPE_STANDARD 0x01
|
|
|
|
+#define OMAP4_SILICON_TYPE_PERFORMANCE 0x02
|
|
|
|
+
|
|
|
|
+static unsigned int omap_revision;
|
|
|
|
+static const char *cpu_rev;
|
|
|
|
+u32 omap_features;
|
|
|
|
+
|
|
|
|
+unsigned int omap_rev(void)
|
|
|
|
+{
|
|
|
|
+ return omap_revision;
|
|
|
|
+}
|
|
|
|
+EXPORT_SYMBOL(omap_rev);
|
|
|
|
+
|
|
|
|
+int omap_type(void)
|
|
|
|
+{
|
|
|
|
+ u32 val = 0;
|
|
|
|
+
|
|
|
|
+ if (cpu_is_omap24xx()) {
|
|
|
|
+ val = omap_ctrl_readl(OMAP24XX_CONTROL_STATUS);
|
|
|
|
+ } else if (soc_is_am33xx()) {
|
|
|
|
+ val = omap_ctrl_readl(AM33XX_CONTROL_STATUS);
|
|
|
|
+ } else if (cpu_is_omap34xx()) {
|
|
|
|
+ val = omap_ctrl_readl(OMAP343X_CONTROL_STATUS);
|
|
|
|
+ } else if (cpu_is_omap44xx()) {
|
|
|
|
+ val = omap_ctrl_readl(OMAP4_CTRL_MODULE_CORE_STATUS);
|
|
|
|
+ } else if (soc_is_omap54xx()) {
|
|
|
|
+ val = omap_ctrl_readl(OMAP5XXX_CONTROL_STATUS);
|
|
|
|
+ val &= OMAP5_DEVICETYPE_MASK;
|
|
|
|
+ val >>= 6;
|
|
|
|
+ goto out;
|
|
|
|
+ } else {
|
|
|
|
+ pr_err("Cannot detect omap type!\n");
|
|
|
|
+ goto out;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ val &= OMAP2_DEVICETYPE_MASK;
|
|
|
|
+ val >>= 8;
|
|
|
|
+
|
|
|
|
+out:
|
|
|
|
+ return val;
|
|
|
|
+}
|
|
|
|
+EXPORT_SYMBOL(omap_type);
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+/*----------------------------------------------------------------------------*/
|
|
|
|
+
|
|
|
|
+#define OMAP_TAP_IDCODE 0x0204
|
|
|
|
+#define OMAP_TAP_DIE_ID_0 0x0218
|
|
|
|
+#define OMAP_TAP_DIE_ID_1 0x021C
|
|
|
|
+#define OMAP_TAP_DIE_ID_2 0x0220
|
|
|
|
+#define OMAP_TAP_DIE_ID_3 0x0224
|
|
|
|
+
|
|
|
|
+#define OMAP_TAP_DIE_ID_44XX_0 0x0200
|
|
|
|
+#define OMAP_TAP_DIE_ID_44XX_1 0x0208
|
|
|
|
+#define OMAP_TAP_DIE_ID_44XX_2 0x020c
|
|
|
|
+#define OMAP_TAP_DIE_ID_44XX_3 0x0210
|
|
|
|
+
|
|
|
|
+#define read_tap_reg(reg) __raw_readl(tap_base + (reg))
|
|
|
|
+
|
|
|
|
+struct omap_id {
|
|
|
|
+ u16 hawkeye; /* Silicon type (Hawkeye id) */
|
|
|
|
+ u8 dev; /* Device type from production_id reg */
|
|
|
|
+ u32 type; /* Combined type id copied to omap_revision */
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+/* Register values to detect the OMAP version */
|