Module Name:    src
Committed By:   kiyohara
Date:           Sun Jul  3 12:27:04 UTC 2016

Modified Files:
        src/sys/arch/arm/omap: omap2_obiovar.h omap2_reg.h omap3_scm.c

Log Message:
Print DeviceID in attach().  Also test OMAP35x/AM37x/DM37x.  And add 
omap_devid().
  Tested on OMAP3503, OMAP3530 and AM3703.


To generate a diff of this commit:
cvs rdiff -u -r1.4 -r1.5 src/sys/arch/arm/omap/omap2_obiovar.h \
    src/sys/arch/arm/omap/omap3_scm.c
cvs rdiff -u -r1.31 -r1.32 src/sys/arch/arm/omap/omap2_reg.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/arm/omap/omap2_obiovar.h
diff -u src/sys/arch/arm/omap/omap2_obiovar.h:1.4 src/sys/arch/arm/omap/omap2_obiovar.h:1.5
--- src/sys/arch/arm/omap/omap2_obiovar.h:1.4	Mon Apr 25 13:14:37 2016
+++ src/sys/arch/arm/omap/omap2_obiovar.h	Sun Jul  3 12:27:04 2016
@@ -1,4 +1,4 @@
-/* $NetBSD: omap2_obiovar.h,v 1.4 2016/04/25 13:14:37 kiyohara Exp $ */
+/* $NetBSD: omap2_obiovar.h,v 1.5 2016/07/03 12:27:04 kiyohara Exp $ */
 
 /*
  * Copyright (c) 2007 Microsoft
@@ -54,5 +54,6 @@ struct obio_softc {
 };
 
 uint32_t omap_chipid(void);
+uint32_t omap_devid(void);
 
 #endif /* _ARM_OMAP_OMAP2_OBIOVAR_H_ */
Index: src/sys/arch/arm/omap/omap3_scm.c
diff -u src/sys/arch/arm/omap/omap3_scm.c:1.4 src/sys/arch/arm/omap/omap3_scm.c:1.5
--- src/sys/arch/arm/omap/omap3_scm.c:1.4	Mon Apr 25 13:14:37 2016
+++ src/sys/arch/arm/omap/omap3_scm.c	Sun Jul  3 12:27:04 2016
@@ -1,4 +1,4 @@
-/* $NetBSD: omap3_scm.c,v 1.4 2016/04/25 13:14:37 kiyohara Exp $ */
+/* $NetBSD: omap3_scm.c,v 1.5 2016/07/03 12:27:04 kiyohara Exp $ */
 
 /*-
  * Copyright (c) 2013 Jared D. McNeill <jmcne...@invisible.ca>
@@ -26,7 +26,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: omap3_scm.c,v 1.4 2016/04/25 13:14:37 kiyohara Exp $");
+__KERNEL_RCSID(0, "$NetBSD: omap3_scm.c,v 1.5 2016/07/03 12:27:04 kiyohara Exp $");
 
 #include "opt_omap.h"
 
@@ -47,12 +47,14 @@ __KERNEL_RCSID(0, "$NetBSD: omap3_scm.c,
 
 #define SCM_BASE_3530			0x48002000
 #define SCM_SIZE_3530			0x1000
+#define SCM_CONTROL_IDCODE_3530		0x308204
 #define SCM_OFFSET_INTERFACE_3530	0
 #define SCM_OFFSET_GENERAL_3530		0x270
 
 #if defined(OMAP_3430) || defined(OMAP_3530)
 #define SCM_BASE		SCM_BASE_3530
 #define SCM_SIZE		SCM_SIZE_3530
+#define SCM_CONTROL_IDCODE	SCM_CONTROL_IDCODE_3530
 #define SCM_OFFSET_INTERFACE	SCM_OFFSET_INTERFACE_3530
 #define SCM_OFFSET_GENERAL	SCM_OFFSET_GENERAL_3530
 #endif
@@ -105,7 +107,8 @@ struct omap3_scm_softc {
 	bus_space_tag_t		sc_iot;
 	bus_space_handle_t	sc_ioh;
 
-	uint32_t		sc_cid;
+	uint32_t		sc_cid;	/* Chip Identification */
+	uint32_t		sc_did;	/* Device IDCODE */
 
 	/* GENERAL */
 	struct sysmon_envsys	*sc_sme;
@@ -143,9 +146,28 @@ omap3_scm_attach(device_t parent, device
 {
 	struct omap3_scm_softc *sc = device_private(self);
 	struct obio_attach_args *obio = opaque;
+	bus_space_handle_t ioh;
 	uint32_t rev;
 	char buf[256];
-	const char *cid;
+	const char *cid, *did, *fmt;
+	const char *omap35x_fmt = "\177\020"
+	    "b\0TO_OUT\0"
+	    "b\1four_bit_mmc\0"
+	    "b\2CCP2_CSI1\0"
+	    "b\3CMADS_FL3G\0"
+	    "b\4NEON_VFPLite\0"
+	    "b\5ISP_disable\0"
+	    "f\6\2IVA2_MHz\0=\0 430\0=\2 266\0"
+	    "f\10\2ARM_MHz\0=\0 600\0=\1 400\0=\2 266\0"
+	    "f\12\2MPU_L2_cache_size\0=\0 0KB\0=\1 64KB\0=\2 128KB\0=\3 Full\0"
+	    "b\14IVA_disable_acc\0"
+	    "f\15\2SGX_scalable_control\0=\0Full\0=\1Half\0=\2not-present\0\0";
+	const char *amdm37x_fmt = "\177\020"
+	    "f\0\4Feature Tiering\0=\0All features aval\0=\1ISP not avail\0"
+	    "f\11\1MPU/IVA frequency\0=\0 800/600 MHz\0=\1 1000/800 MHz\0"
+	    "f\12\2MPU_L2_cache_size\0=\0 0KB\0=\2 128KB\0=\3 Full\0"
+	    "f\14\1IVA 2.2 subsystem\0=\0Full use\0=\1Not available\0"
+	    "f\15\2 2D/3D accelerator\0=\0Full use\0=\2HW not present\0";
 
 	aprint_naive("\n");
 
@@ -159,32 +181,83 @@ omap3_scm_attach(device_t parent, device
 		aprint_error(": couldn't map address space\n");
 		return;
 	}
+	if (bus_space_map(obio->obio_iot,
+	    obio->obio_addr + SCM_CONTROL_IDCODE, sizeof(uint32_t),
+	    0, &ioh) != 0) {
+		aprint_error(": couldn't map CONTROL_IDCODE space\n");
+		return;
+	}
+	sc->sc_did = bus_space_read_4(sc->sc_iot, ioh, 0);
+	bus_space_unmap(sc->sc_iot, ioh, sizeof(uint32_t));
 
 	rev = SCM_READ_REG(sc, CONTROL_REVISION);
 	aprint_normal(": rev. 0x%x\n", rev & 0xff);
 	sc->sc_cid = SCM_READ_REG(sc, CONTROL_OMAP_STATUS & 0xffff);
-	switch (sc->sc_cid) {
-	case CHIPID_OMAP3503:	cid = "OMAP3503";	break;
-	case CHIPID_OMAP3515:	cid = "OMAP3515";	break;
-	case CHIPID_OMAP3525:	cid = "OMAP3525";	break;
-	case CHIPID_OMAP3530:	cid = "OMAP3530";	break;
-	default:		cid = "unknwon";	break;
+	cid = did = fmt = NULL;
+	switch (sc->sc_did) {
+	case DEVID_OMAP35X_ES10:
+	case DEVID_OMAP35X_ES20:
+	case DEVID_OMAP35X_ES21:
+	case DEVID_OMAP35X_ES30:
+	case DEVID_OMAP35X_ES31:
+	case DEVID_OMAP35X_ES312:
+		switch (sc->sc_cid) {
+		case CHIPID_OMAP3503:	cid = "OMAP3503";	break;
+		case CHIPID_OMAP3515:	cid = "OMAP3515";	break;
+		case CHIPID_OMAP3525:	cid = "OMAP3525";	break;
+		case CHIPID_OMAP3530:	cid = "OMAP3530";	break;
+		}
+		switch (sc->sc_did) {
+		case DEVID_OMAP35X_ES10:	did = "ES1.0";	break;
+		case DEVID_OMAP35X_ES20:	did = "ES2.0";	break;
+		case DEVID_OMAP35X_ES21:	did = "ES2.1";	break;
+		case DEVID_OMAP35X_ES30:	did = "ES3.0";	break;
+		case DEVID_OMAP35X_ES31:	did = "ES3.1";	break;
+		case DEVID_OMAP35X_ES312:	did = "ES3.1.2";break;
+		}
+		fmt = omap35x_fmt;
+		break;
+
+	case DEVID_AMDM37X_ES10:
+	case DEVID_AMDM37X_ES11:
+	case DEVID_AMDM37X_ES12:
+		switch (sc->sc_cid) {
+		case CHIPID_OMAP3503:
+		case CHIPID_AM3703:
+			cid = "AM3703";
+			break;
+		case CHIPID_OMAP3515:
+		case CHIPID_AM3715:
+			cid = "AM3715";
+			break;
+		case CHIPID_OMAP3525:
+		case CHIPID_DM3725:
+			cid = "DM3525";
+			break;
+		case CHIPID_OMAP3530:
+		case CHIPID_DM3730:
+			cid = "DM3730";
+			break;
+		}
+		switch (sc->sc_did) {
+		case DEVID_AMDM37X_ES10:	did = "ES1.0";	break;
+		case DEVID_AMDM37X_ES11:	did = "ES1.1";	break;
+		case DEVID_AMDM37X_ES12:	did = "ES1.2";	break;
+		}
+		fmt = amdm37x_fmt;
+		break;
+	break;
+
+	default:
+		aprint_normal_dev(self,
+		    "unknwon ChipID/DeviceID found 0x%08x/0x%08x\n",
+		    sc->sc_cid, sc->sc_did);
+		break;
 	}
-	aprint_normal_dev(self, "%s: ", cid);
-	snprintb(buf, sizeof(buf), "\177\020"
-	    "b\0TO_OUT\0"
-	    "b\1four_bit_mmc\0"
-	    "b\2CCP2_CSI1\0"
-	    "b\3CMADS_FL3G\0"
-	    "b\4NEON_VFPLite\0"
-	    "b\5ISP_disable\0"
-	    "f\6\2IVA2_MHz\0=\0 430\0=\2 266\0"
-	    "f\10\2ARM_MHz\0=\0 600\0=\1 400\0=\2 266\0"
-	    "f\12\2MPU_L2_cache_size\0=\0 0KB\0=\1 64KB\0=\2 128KB\0=\3 Full\0"
-	    "b\14IVA_disable_acc\0"
-	    "f\15\2SGX_scalable_control\0=\0Full\0=\1Half\0=\2not-present\0\0",
-	    sc->sc_cid);
-	aprint_normal("%s\n", buf);
+	if (fmt != NULL)
+		snprintb(buf, sizeof(buf), fmt, sc->sc_cid);
+	if (did != NULL)
+		aprint_normal_dev(self, "%s %s: %s\n", cid, did, buf);
 
 	omap3_scm_sensor_attach(sc);
 }
@@ -266,3 +339,15 @@ omap_chipid(void)
 	sc = device_private(dev);
 	return sc->sc_cid;
 }
+
+uint32_t
+omap_devid(void)
+{
+	struct omap3_scm_softc *sc;
+	device_t dev;
+
+	dev = device_find_by_xname("omapscm0");
+	KASSERT(dev != NULL);
+	sc = device_private(dev);
+	return sc->sc_did;
+}

Index: src/sys/arch/arm/omap/omap2_reg.h
diff -u src/sys/arch/arm/omap/omap2_reg.h:1.31 src/sys/arch/arm/omap/omap2_reg.h:1.32
--- src/sys/arch/arm/omap/omap2_reg.h:1.31	Mon Apr 25 13:07:03 2016
+++ src/sys/arch/arm/omap/omap2_reg.h	Sun Jul  3 12:27:04 2016
@@ -1,4 +1,4 @@
-/* $NetBSD: omap2_reg.h,v 1.31 2016/04/25 13:07:03 kiyohara Exp $ */
+/* $NetBSD: omap2_reg.h,v 1.32 2016/07/03 12:27:04 kiyohara Exp $ */
 
 /*
  * Copyright (c) 2007 Microsoft
@@ -147,6 +147,22 @@
 #define CHIPID_OMAP3525		0x4c00
 #define CHIPID_OMAP3530		0x0c00
 
+#define DEVID_OMAP35X_ES10	0x0b6d602f
+#define DEVID_OMAP35X_ES20	0x1b7ae02f
+#define DEVID_OMAP35X_ES21	0x2b7ae02f
+#define DEVID_OMAP35X_ES30	0x3b7ae02f
+#define DEVID_OMAP35X_ES31	0x4b7ae02f
+#define DEVID_OMAP35X_ES312	0x7b7ae02f
+
+#define CHIPID_AM3703		0x5e00	/* or 0x5c00 */
+#define CHIPID_AM3715		0x1e00	/* or 0x1c00 */
+#define CHIPID_DM3725		0x4e00	/* or 0x4c00 */
+#define CHIPID_DM3730		0x0e00	/* or 0x0c00 */
+
+#define DEVID_AMDM37X_ES10	0x0b89102f
+#define DEVID_AMDM37X_ES11	0x1b89102f
+#define DEVID_AMDM37X_ES12	0x2b89102f
+
 /*
  * Clock Management registers base, offsets, and size
  */

Reply via email to