linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 2/3] ep93xx: add /proc/cpuinfo extension
@ 2010-03-22 18:39 ` H Hartley Sweeten
  2010-03-23 15:35   ` Mika Westerberg
  2011-03-17  3:30   ` Martin Guy
  0 siblings, 2 replies; 7+ messages in thread
From: H Hartley Sweeten @ 2010-03-22 18:39 UTC (permalink / raw)
  To: linux-arm-kernel

Add a callback to mach-ep93xx for the /proc/cpuinfo extension.

This cpuinfo extension dumps the processor unique ID and Maverick
Key as well as the processor silicon revision and a number of
boot configuration options.

Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com>

---

This patch depends on ep93xx: added chip revision reading function

diff --git a/arch/arm/mach-ep93xx/core.c b/arch/arm/mach-ep93xx/core.c
index 90fb591..fe1eb7a 100644
--- a/arch/arm/mach-ep93xx/core.c
+++ b/arch/arm/mach-ep93xx/core.c
@@ -26,6 +26,7 @@
 #include <linux/io.h>
 #include <linux/gpio.h>
 #include <linux/leds.h>
+#include <linux/seq_file.h>
 #include <linux/termios.h>
 #include <linux/amba/bus.h>
 #include <linux/amba/serial.h>
@@ -618,6 +619,81 @@ void ep93xx_keypad_release_gpio(struct platform_device *pdev)
 EXPORT_SYMBOL(ep93xx_keypad_release_gpio);
 
 
+/*************************************************************************
+ * EP93xx proc/cpuinfo extension
+ *************************************************************************/
+#define EP93XX_SECURITY_REG(x)			(EP93XX_SECURITY_BASE + (x))
+#define EP93XX_SECURITY_SECFLG			EP93XX_SECURITY_REG(0x2400)
+#define EP93XX_SECURITY_FUSEFLG			EP93XX_SECURITY_REG(0x2410)
+#define EP93XX_SECURITY_UNIQID			EP93XX_SECURITY_REG(0x2440)
+#define EP93XX_SECURITY_UNIQCHK			EP93XX_SECURITY_REG(0x2450)
+#define EP93XX_SECURITY_UNIQVAL			EP93XX_SECURITY_REG(0x2460)
+#define EP93XX_SECURITY_SECID1			EP93XX_SECURITY_REG(0x2500)
+#define EP93XX_SECURITY_SECID2			EP93XX_SECURITY_REG(0x2504)
+#define EP93XX_SECURITY_SECCHK1			EP93XX_SECURITY_REG(0x2520)
+#define EP93XX_SECURITY_SECCHK2			EP93XX_SECURITY_REG(0x2524)
+#define EP93XX_SECURITY_UNIQID2			EP93XX_SECURITY_REG(0x2700)
+#define EP93XX_SECURITY_UNIQID3			EP93XX_SECURITY_REG(0x2704)
+#define EP93XX_SECURITY_UNIQID4			EP93XX_SECURITY_REG(0x2708)
+#define EP93XX_SECURITY_UNIQID5			EP93XX_SECURITY_REG(0x270c)
+
+static const char *ep93xx_rev[] = {
+	"A", "B", "C", "D0", "D1", "E0", "E1", "E2", "??"
+};
+
+void ep93xx_cpuinfo(struct seq_file *m, void *v)
+{
+	u32 val;
+
+	seq_puts(m, "\n");
+
+	/*
+	 * Fuse0 [63:40]	EP93XX_SECURITY_SECID1  [23: 0]
+	 * Fuse0 [39:32]	EP93XX_SECURITY_UNIQCHK [ 7: 0]
+	 * Fuse0 [31: 0]	EP93XX_SECURITY_UNIQID  [31: 0]
+	 *
+	 * Fuse1 [63:56]	EP93XX_SECURITY_FUSEFLG [ 7: 0]
+	 * Fuse1 [55:48]	EP93XX_SECURITY_SECCHK2 [ 7: 0]
+	 * Fuse1 [47:16]	EP93XX_SECURITY_SECID2  [31: 0]
+	 * Fuse1 [15: 8]	EP93XX_SECURITY_SECCHK1 [ 7: 0]
+	 * Fuse1 [ 7: 0]	EP93XX_SECURITY_SECID1  [31:24]
+	 *
+	 * Fuse2 [63:32]	EP93XX_SECURITY_UNIQID3 [31: 0]
+	 * Fuse2 [31: 0]	EP93XX_SECURITY_UNIQID2 [31: 0]
+	 *
+	 * Fuse3 [63:32]	EP93XX_SECURITY_UNIQID5 [31: 0]
+	 * Fuse3 [31: 0]	EP93XX_SECURITY_UNIQID4 [31: 0]
+	 *
+	 * See http://arm.cirrus.com/forum/viewtopic.php?p=1767
+	 */
+	seq_printf(m, "Unique ID\t: %8.8x\n",
+		__raw_readl(EP93XX_SECURITY_UNIQID));
+	seq_printf(m, "Maverick Key\t: %8.8x%8.8x%8.8x%6.6x %s\n",
+		__raw_readl(EP93XX_SECURITY_UNIQID2),
+		__raw_readl(EP93XX_SECURITY_UNIQID3),
+		__raw_readl(EP93XX_SECURITY_UNIQID4),
+		__raw_readl(EP93XX_SECURITY_UNIQID5) & 0x00ffffff,
+		__raw_readl(EP93XX_SECURITY_UNIQVAL) == 1 ? "OK" : "BAD");
+
+	/* See http://www.cirrus.com/en/pubs/appNote/AN273REV4.pdf */
+	val = ep93xx_chip_revision();
+	if (val > ARRAY_SIZE(ep93xx_rev))
+		val = ARRAY_SIZE(ep93xx_rev) - 1;
+	seq_printf(m, "Silicon Rev\t: %s\n", ep93xx_rev[val]);
+
+	val = __raw_readl(EP93XX_SYSCON_SYSCFG);
+	seq_printf(m, "Watchdog\t: %s\n",
+		(val & EP93XX_SYSCON_SYSCFG_LCSN1) ? "disabled" : "active");
+	seq_printf(m, "Reset duration\t: %s\n",
+		(val & EP93XX_SYSCON_SYSCFG_LCSN2) ? "disabled" : "active");
+	seq_printf(m, "Boot mode\t: %s %ssync %sternal %d-bit\n",
+		(val & EP93XX_SYSCON_SYSCFG_SBOOT) ? "serial" : "normal",
+		(val & EP93XX_SYSCON_SYSCFG_LASDO) ? "" : "a",
+		(val & EP93XX_SYSCON_SYSCFG_LEECLK) ? "in" : "ex",
+		ep93xx_boot_width());
+}
+
+
 extern void ep93xx_gpio_init(void);
 
 void __init ep93xx_init_devices(void)
diff --git a/arch/arm/mach-ep93xx/include/mach/platform.h b/arch/arm/mach-ep93xx/include/mach/platform.h
index c6dc14d..576676f 100644
--- a/arch/arm/mach-ep93xx/include/mach/platform.h
+++ b/arch/arm/mach-ep93xx/include/mach/platform.h
@@ -9,6 +9,7 @@ struct i2c_board_info;
 struct platform_device;
 struct ep93xxfb_mach_info;
 struct ep93xx_keypad_platform_data;
+struct seq_file;
 
 struct ep93xx_eth_data
 {
@@ -44,6 +45,9 @@ void ep93xx_register_keypad(struct ep93xx_keypad_platform_data *data);
 int ep93xx_keypad_acquire_gpio(struct platform_device *pdev);
 void ep93xx_keypad_release_gpio(struct platform_device *pdev);
 
+/* EP93xx /proc/cpuinfo extension */
+void ep93xx_cpuinfo(struct seq_file *m, void *v);
+
 void ep93xx_init_devices(void);
 extern struct sys_timer ep93xx_timer;
 

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH 2/3] ep93xx: add /proc/cpuinfo extension
  2010-03-22 18:39 ` [PATCH 2/3] ep93xx: add /proc/cpuinfo extension H Hartley Sweeten
@ 2010-03-23 15:35   ` Mika Westerberg
  2010-03-23 16:34     ` H Hartley Sweeten
  2010-03-23 16:45     ` H Hartley Sweeten
  2011-03-17  3:30   ` Martin Guy
  1 sibling, 2 replies; 7+ messages in thread
From: Mika Westerberg @ 2010-03-23 15:35 UTC (permalink / raw)
  To: linux-arm-kernel

Hi,

On Mon, Mar 22, 2010 at 01:39:00PM -0500, H Hartley Sweeten wrote:
> Add a callback to mach-ep93xx for the /proc/cpuinfo extension.
> 
> This cpuinfo extension dumps the processor unique ID and Maverick
> Key as well as the processor silicon revision and a number of
> boot configuration options.
> 
> Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com>
> 
> ---
> 
> This patch depends on ep93xx: added chip revision reading function
> 
> diff --git a/arch/arm/mach-ep93xx/core.c b/arch/arm/mach-ep93xx/core.c
> index 90fb591..fe1eb7a 100644
> --- a/arch/arm/mach-ep93xx/core.c
> +++ b/arch/arm/mach-ep93xx/core.c
> @@ -26,6 +26,7 @@
>  #include <linux/io.h>
>  #include <linux/gpio.h>
>  #include <linux/leds.h>
> +#include <linux/seq_file.h>
>  #include <linux/termios.h>
>  #include <linux/amba/bus.h>
>  #include <linux/amba/serial.h>
> @@ -618,6 +619,81 @@ void ep93xx_keypad_release_gpio(struct platform_device *pdev)
>  EXPORT_SYMBOL(ep93xx_keypad_release_gpio);
>  
>  
> +/*************************************************************************
> + * EP93xx proc/cpuinfo extension
> + *************************************************************************/
> +#define EP93XX_SECURITY_REG(x)			(EP93XX_SECURITY_BASE + (x))
> +#define EP93XX_SECURITY_SECFLG			EP93XX_SECURITY_REG(0x2400)
> +#define EP93XX_SECURITY_FUSEFLG			EP93XX_SECURITY_REG(0x2410)
> +#define EP93XX_SECURITY_UNIQID			EP93XX_SECURITY_REG(0x2440)
> +#define EP93XX_SECURITY_UNIQCHK			EP93XX_SECURITY_REG(0x2450)
> +#define EP93XX_SECURITY_UNIQVAL			EP93XX_SECURITY_REG(0x2460)
> +#define EP93XX_SECURITY_SECID1			EP93XX_SECURITY_REG(0x2500)
> +#define EP93XX_SECURITY_SECID2			EP93XX_SECURITY_REG(0x2504)
> +#define EP93XX_SECURITY_SECCHK1			EP93XX_SECURITY_REG(0x2520)
> +#define EP93XX_SECURITY_SECCHK2			EP93XX_SECURITY_REG(0x2524)
> +#define EP93XX_SECURITY_UNIQID2			EP93XX_SECURITY_REG(0x2700)
> +#define EP93XX_SECURITY_UNIQID3			EP93XX_SECURITY_REG(0x2704)
> +#define EP93XX_SECURITY_UNIQID4			EP93XX_SECURITY_REG(0x2708)
> +#define EP93XX_SECURITY_UNIQID5			EP93XX_SECURITY_REG(0x270c)
> +
> +static const char *ep93xx_rev[] = {
> +	"A", "B", "C", "D0", "D1", "E0", "E1", "E2", "??"
> +};
> +
> +void ep93xx_cpuinfo(struct seq_file *m, void *v)
> +{
> +	u32 val;
> +
> +	seq_puts(m, "\n");
> +
> +	/*
> +	 * Fuse0 [63:40]	EP93XX_SECURITY_SECID1  [23: 0]
> +	 * Fuse0 [39:32]	EP93XX_SECURITY_UNIQCHK [ 7: 0]
> +	 * Fuse0 [31: 0]	EP93XX_SECURITY_UNIQID  [31: 0]
> +	 *
> +	 * Fuse1 [63:56]	EP93XX_SECURITY_FUSEFLG [ 7: 0]
> +	 * Fuse1 [55:48]	EP93XX_SECURITY_SECCHK2 [ 7: 0]
> +	 * Fuse1 [47:16]	EP93XX_SECURITY_SECID2  [31: 0]
> +	 * Fuse1 [15: 8]	EP93XX_SECURITY_SECCHK1 [ 7: 0]
> +	 * Fuse1 [ 7: 0]	EP93XX_SECURITY_SECID1  [31:24]
> +	 *
> +	 * Fuse2 [63:32]	EP93XX_SECURITY_UNIQID3 [31: 0]
> +	 * Fuse2 [31: 0]	EP93XX_SECURITY_UNIQID2 [31: 0]
> +	 *
> +	 * Fuse3 [63:32]	EP93XX_SECURITY_UNIQID5 [31: 0]
> +	 * Fuse3 [31: 0]	EP93XX_SECURITY_UNIQID4 [31: 0]
> +	 *
> +	 * See http://arm.cirrus.com/forum/viewtopic.php?p=1767
> +	 */
> +	seq_printf(m, "Unique ID\t: %8.8x\n",
> +		__raw_readl(EP93XX_SECURITY_UNIQID));
> +	seq_printf(m, "Maverick Key\t: %8.8x%8.8x%8.8x%6.6x %s\n",
> +		__raw_readl(EP93XX_SECURITY_UNIQID2),
> +		__raw_readl(EP93XX_SECURITY_UNIQID3),
> +		__raw_readl(EP93XX_SECURITY_UNIQID4),
> +		__raw_readl(EP93XX_SECURITY_UNIQID5) & 0x00ffffff,
> +		__raw_readl(EP93XX_SECURITY_UNIQVAL) == 1 ? "OK" : "BAD");
> +
> +	/* See http://www.cirrus.com/en/pubs/appNote/AN273REV4.pdf */
> +	val = ep93xx_chip_revision();
> +	if (val > ARRAY_SIZE(ep93xx_rev))
> +		val = ARRAY_SIZE(ep93xx_rev) - 1;
> +	seq_printf(m, "Silicon Rev\t: %s\n", ep93xx_rev[val]);
> +
> +	val = __raw_readl(EP93XX_SYSCON_SYSCFG);
> +	seq_printf(m, "Watchdog\t: %s\n",
> +		(val & EP93XX_SYSCON_SYSCFG_LCSN1) ? "disabled" : "active");
> +	seq_printf(m, "Reset duration\t: %s\n",
> +		(val & EP93XX_SYSCON_SYSCFG_LCSN2) ? "disabled" : "active");
> +	seq_printf(m, "Boot mode\t: %s %ssync %sternal %d-bit\n",
> +		(val & EP93XX_SYSCON_SYSCFG_SBOOT) ? "serial" : "normal",
> +		(val & EP93XX_SYSCON_SYSCFG_LASDO) ? "" : "a",
> +		(val & EP93XX_SYSCON_SYSCFG_LEECLK) ? "in" : "ex",
> +		ep93xx_boot_width());
                ^^^^^^^^^^^^^^^^^
 
I got following compile error:

  CC      arch/arm/mach-ep93xx/core.o
arch/arm/mach-ep93xx/core.c: In function 'ep93xx_cpuinfo':
arch/arm/mach-ep93xx/core.c:707: error: implicit declaration of function 'ep93xx_boot_width'
make[1]: *** [arch/arm/mach-ep93xx/core.o] Error 1
make: *** [arch/arm/mach-ep93xx] Error 2

Should this function be included in the patch set also? I applied these on top of
latest mainline kernel.

Thanks,
MW 

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH 2/3] ep93xx: add /proc/cpuinfo extension
  2010-03-23 15:35   ` Mika Westerberg
@ 2010-03-23 16:34     ` H Hartley Sweeten
  2010-03-23 16:49       ` Mika Westerberg
  2010-03-23 16:45     ` H Hartley Sweeten
  1 sibling, 1 reply; 7+ messages in thread
From: H Hartley Sweeten @ 2010-03-23 16:34 UTC (permalink / raw)
  To: linux-arm-kernel

On Tuesday, March 23, 2010 8:36 AM, Mika Westerberg wrote:
> On Mon, Mar 22, 2010 at 01:39:00PM -0500, H Hartley Sweeten wrote:
>> Add a callback to mach-ep93xx for the /proc/cpuinfo extension.
>> 
>> This cpuinfo extension dumps the processor unique ID and Maverick
>> Key as well as the processor silicon revision and a number of
>> boot configuration options.
>> 
>> Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com>
>> 
>> ---

[snip]

>> +	seq_printf(m, "Boot mode\t: %s %ssync %sternal %d-bit\n",
>> +		(val & EP93XX_SYSCON_SYSCFG_SBOOT) ? "serial" : "normal",
>> +		(val & EP93XX_SYSCON_SYSCFG_LASDO) ? "" : "a",
>> +		(val & EP93XX_SYSCON_SYSCFG_LEECLK) ? "in" : "ex",
>> +		ep93xx_boot_width());
>           ^^^^^^^^^^^^^^^^^
> 
> I got following compile error:
>
>  CC      arch/arm/mach-ep93xx/core.o
> arch/arm/mach-ep93xx/core.c: In function 'ep93xx_cpuinfo':
> arch/arm/mach-ep93xx/core.c:707: error: implicit declaration of function 'ep93xx_boot_width'
> make[1]: *** [arch/arm/mach-ep93xx/core.o] Error 1
> make: *** [arch/arm/mach-ep93xx] Error 2
>
> Should this function be included in the patch set also? I applied these on top of
> latest mainline kernel.

Grr.. Left that piece out, sorry about that.

I will post the updated patch in a bit.

If you want to test this now, just put the following after the 
ep93xx_chip_revision() in core.c (and of course the proper prototype in
platform.h).

Regards,
Hartley

---

/**
 * ep93xx_boot_width() - returns the external bus width for the boot device
 */
int ep93xx_boot_width(void)
{
	u32 val;
	int width;

	val = __raw_readl(EP93XX_SYSCON_SYSCFG);
	if (val & EP93XX_SYSCON_SYSCFG_LASDO) {
		/* Sync boot */
		if (val & EP93XX_SYSCON_SYSCFG_LCSN7)
			width = 32;
		else
			width = 16;
	} else {
		/* Async boot */
		if (val & EP93XX_SYSCON_SYSCFG_LCSN7)
			width = 32;
		else if (val & EP93XX_SYSCON_SYSCFG_LCSN6)
			width = 16;
		else
			width = 8;
	}
	return width;
}

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH 2/3] ep93xx: add /proc/cpuinfo extension
  2010-03-23 15:35   ` Mika Westerberg
  2010-03-23 16:34     ` H Hartley Sweeten
@ 2010-03-23 16:45     ` H Hartley Sweeten
  1 sibling, 0 replies; 7+ messages in thread
From: H Hartley Sweeten @ 2010-03-23 16:45 UTC (permalink / raw)
  To: linux-arm-kernel

Add a callback to mach-ep93xx for the /proc/cpuinfo extension.

This cpuinfo extension dumps the processor unique ID and Maverick
Key as well as the processor silicon revision and a number of
boot configuration options.

Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com>

---

This patch depends on ep93xx: added chip revision reading function

V2: add missing ep93xx_boot_width function

diff --git a/arch/arm/mach-ep93xx/core.c b/arch/arm/mach-ep93xx/core.c
index 90fb591..999c152 100644
--- a/arch/arm/mach-ep93xx/core.c
+++ b/arch/arm/mach-ep93xx/core.c
@@ -26,6 +26,7 @@
 #include <linux/io.h>
 #include <linux/gpio.h>
 #include <linux/leds.h>
+#include <linux/seq_file.h>
 #include <linux/termios.h>
 #include <linux/amba/bus.h>
 #include <linux/amba/serial.h>
@@ -222,6 +223,33 @@ void ep93xx_devcfg_set_clear(unsigned int set_bits, unsigned int clear_bits)
 }
 EXPORT_SYMBOL(ep93xx_devcfg_set_clear);
 
+/**
+ * ep93xx_boot_width() - returns the external bus width for the boot device
+ */
+int ep93xx_boot_width(void)
+{
+	u32 val;
+	int width;
+
+	val = __raw_readl(EP93XX_SYSCON_SYSCFG);
+	if (val & EP93XX_SYSCON_SYSCFG_LASDO) {
+		/* Sync boot */
+		if (val & EP93XX_SYSCON_SYSCFG_LCSN7)
+			width = 32;
+		else
+			width = 16;
+	} else {
+		/* Async boot */
+		if (val & EP93XX_SYSCON_SYSCFG_LCSN7)
+			width = 32;
+		else if (val & EP93XX_SYSCON_SYSCFG_LCSN6)
+			width = 16;
+		else
+			width = 8;
+	}
+	return width;
+}
+
 
 /*************************************************************************
  * EP93xx peripheral handling
@@ -618,6 +646,81 @@ void ep93xx_keypad_release_gpio(struct platform_device *pdev)
 EXPORT_SYMBOL(ep93xx_keypad_release_gpio);
 
 
+/*************************************************************************
+ * EP93xx proc/cpuinfo extension
+ *************************************************************************/
+#define EP93XX_SECURITY_REG(x)			(EP93XX_SECURITY_BASE + (x))
+#define EP93XX_SECURITY_SECFLG			EP93XX_SECURITY_REG(0x2400)
+#define EP93XX_SECURITY_FUSEFLG			EP93XX_SECURITY_REG(0x2410)
+#define EP93XX_SECURITY_UNIQID			EP93XX_SECURITY_REG(0x2440)
+#define EP93XX_SECURITY_UNIQCHK			EP93XX_SECURITY_REG(0x2450)
+#define EP93XX_SECURITY_UNIQVAL			EP93XX_SECURITY_REG(0x2460)
+#define EP93XX_SECURITY_SECID1			EP93XX_SECURITY_REG(0x2500)
+#define EP93XX_SECURITY_SECID2			EP93XX_SECURITY_REG(0x2504)
+#define EP93XX_SECURITY_SECCHK1			EP93XX_SECURITY_REG(0x2520)
+#define EP93XX_SECURITY_SECCHK2			EP93XX_SECURITY_REG(0x2524)
+#define EP93XX_SECURITY_UNIQID2			EP93XX_SECURITY_REG(0x2700)
+#define EP93XX_SECURITY_UNIQID3			EP93XX_SECURITY_REG(0x2704)
+#define EP93XX_SECURITY_UNIQID4			EP93XX_SECURITY_REG(0x2708)
+#define EP93XX_SECURITY_UNIQID5			EP93XX_SECURITY_REG(0x270c)
+
+static const char *ep93xx_rev[] = {
+	"A", "B", "C", "D0", "D1", "E0", "E1", "E2", "??"
+};
+
+void ep93xx_cpuinfo(struct seq_file *m, void *v)
+{
+	u32 val;
+
+	seq_puts(m, "\n");
+
+	/*
+	 * Fuse0 [63:40]	EP93XX_SECURITY_SECID1  [23: 0]
+	 * Fuse0 [39:32]	EP93XX_SECURITY_UNIQCHK [ 7: 0]
+	 * Fuse0 [31: 0]	EP93XX_SECURITY_UNIQID  [31: 0]
+	 *
+	 * Fuse1 [63:56]	EP93XX_SECURITY_FUSEFLG [ 7: 0]
+	 * Fuse1 [55:48]	EP93XX_SECURITY_SECCHK2 [ 7: 0]
+	 * Fuse1 [47:16]	EP93XX_SECURITY_SECID2  [31: 0]
+	 * Fuse1 [15: 8]	EP93XX_SECURITY_SECCHK1 [ 7: 0]
+	 * Fuse1 [ 7: 0]	EP93XX_SECURITY_SECID1  [31:24]
+	 *
+	 * Fuse2 [63:32]	EP93XX_SECURITY_UNIQID3 [31: 0]
+	 * Fuse2 [31: 0]	EP93XX_SECURITY_UNIQID2 [31: 0]
+	 *
+	 * Fuse3 [63:32]	EP93XX_SECURITY_UNIQID5 [31: 0]
+	 * Fuse3 [31: 0]	EP93XX_SECURITY_UNIQID4 [31: 0]
+	 *
+	 * See http://arm.cirrus.com/forum/viewtopic.php?p=1767
+	 */
+	seq_printf(m, "Unique ID\t: %8.8x\n",
+		__raw_readl(EP93XX_SECURITY_UNIQID));
+	seq_printf(m, "Maverick Key\t: %8.8x%8.8x%8.8x%6.6x %s\n",
+		__raw_readl(EP93XX_SECURITY_UNIQID2),
+		__raw_readl(EP93XX_SECURITY_UNIQID3),
+		__raw_readl(EP93XX_SECURITY_UNIQID4),
+		__raw_readl(EP93XX_SECURITY_UNIQID5) & 0x00ffffff,
+		__raw_readl(EP93XX_SECURITY_UNIQVAL) == 1 ? "OK" : "BAD");
+
+	/* See http://www.cirrus.com/en/pubs/appNote/AN273REV4.pdf */
+	val = ep93xx_chip_revision();
+	if (val > ARRAY_SIZE(ep93xx_rev))
+		val = ARRAY_SIZE(ep93xx_rev) - 1;
+	seq_printf(m, "Silicon Rev\t: %s\n", ep93xx_rev[val]);
+
+	val = __raw_readl(EP93XX_SYSCON_SYSCFG);
+	seq_printf(m, "Watchdog\t: %s\n",
+		(val & EP93XX_SYSCON_SYSCFG_LCSN1) ? "disabled" : "active");
+	seq_printf(m, "Reset duration\t: %s\n",
+		(val & EP93XX_SYSCON_SYSCFG_LCSN2) ? "disabled" : "active");
+	seq_printf(m, "Boot mode\t: %s %ssync %sternal %d-bit\n",
+		(val & EP93XX_SYSCON_SYSCFG_SBOOT) ? "serial" : "normal",
+		(val & EP93XX_SYSCON_SYSCFG_LASDO) ? "" : "a",
+		(val & EP93XX_SYSCON_SYSCFG_LEECLK) ? "in" : "ex",
+		ep93xx_boot_width());
+}
+
+
 extern void ep93xx_gpio_init(void);
 
 void __init ep93xx_init_devices(void)
diff --git a/arch/arm/mach-ep93xx/include/mach/platform.h b/arch/arm/mach-ep93xx/include/mach/platform.h
index c6dc14d..5ca2fce 100644
--- a/arch/arm/mach-ep93xx/include/mach/platform.h
+++ b/arch/arm/mach-ep93xx/include/mach/platform.h
@@ -9,6 +9,7 @@ struct i2c_board_info;
 struct platform_device;
 struct ep93xxfb_mach_info;
 struct ep93xx_keypad_platform_data;
+struct seq_file;
 
 struct ep93xx_eth_data
 {
@@ -33,6 +34,8 @@ static inline void ep93xx_devcfg_clear_bits(unsigned int bits)
 	ep93xx_devcfg_set_clear(0x00, bits);
 }
 
+int ep93xx_boot_width(void);
+
 void ep93xx_register_eth(struct ep93xx_eth_data *data, int copy_addr);
 void ep93xx_register_i2c(struct i2c_gpio_platform_data *data,
 			 struct i2c_board_info *devices, int num);
@@ -44,6 +47,9 @@ void ep93xx_register_keypad(struct ep93xx_keypad_platform_data *data);
 int ep93xx_keypad_acquire_gpio(struct platform_device *pdev);
 void ep93xx_keypad_release_gpio(struct platform_device *pdev);
 
+/* EP93xx /proc/cpuinfo extension */
+void ep93xx_cpuinfo(struct seq_file *m, void *v);
+
 void ep93xx_init_devices(void);
 extern struct sys_timer ep93xx_timer;
 

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH 2/3] ep93xx: add /proc/cpuinfo extension
  2010-03-23 16:34     ` H Hartley Sweeten
@ 2010-03-23 16:49       ` Mika Westerberg
  0 siblings, 0 replies; 7+ messages in thread
From: Mika Westerberg @ 2010-03-23 16:49 UTC (permalink / raw)
  To: linux-arm-kernel

On Tue, Mar 23, 2010 at 11:34:32AM -0500, H Hartley Sweeten wrote:
> On Tuesday, March 23, 2010 8:36 AM, Mika Westerberg wrote:
> > On Mon, Mar 22, 2010 at 01:39:00PM -0500, H Hartley Sweeten wrote:
> >> Add a callback to mach-ep93xx for the /proc/cpuinfo extension.
> >> 
> >> This cpuinfo extension dumps the processor unique ID and Maverick
> >> Key as well as the processor silicon revision and a number of
> >> boot configuration options.
> >> 
> >> Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com>
> >> 
> >> ---
> 
> [snip]
> 
> >> +	seq_printf(m, "Boot mode\t: %s %ssync %sternal %d-bit\n",
> >> +		(val & EP93XX_SYSCON_SYSCFG_SBOOT) ? "serial" : "normal",
> >> +		(val & EP93XX_SYSCON_SYSCFG_LASDO) ? "" : "a",
> >> +		(val & EP93XX_SYSCON_SYSCFG_LEECLK) ? "in" : "ex",
> >> +		ep93xx_boot_width());
> >           ^^^^^^^^^^^^^^^^^
> > 
> > I got following compile error:
> >
> >  CC      arch/arm/mach-ep93xx/core.o
> > arch/arm/mach-ep93xx/core.c: In function 'ep93xx_cpuinfo':
> > arch/arm/mach-ep93xx/core.c:707: error: implicit declaration of function 'ep93xx_boot_width'
> > make[1]: *** [arch/arm/mach-ep93xx/core.o] Error 1
> > make: *** [arch/arm/mach-ep93xx] Error 2
> >
> > Should this function be included in the patch set also? I applied these on top of
> > latest mainline kernel.
> 
> Grr.. Left that piece out, sorry about that.
> 
> I will post the updated patch in a bit.
> 
> If you want to test this now, just put the following after the 
> ep93xx_chip_revision() in core.c (and of course the proper prototype in
> platform.h).

Ok. Thanks.

With that function in place I get following on my TS-7260 board:

ts-7260:~# cat /proc/cpuinfo 
Processor       : ARM920T rev 0 (v4l)
BogoMIPS        : 49.76
Features        : swp half thumb crunch 
CPU implementer : 0x41
CPU architecture: 4T
CPU variant     : 0x1
CPU part        : 0x920
CPU revision    : 0

Hardware        : Technologic Systems TS-72xx SBC
Revision        : 0000
Serial          : 0000000000000000

Unique ID       : 920fef0b
Maverick Key    : 920fef0b58d363f79f0fa62c06a512 OK
Silicon Rev     : E2
Watchdog        : disabled
Reset duration  : disabled
Boot mode       : normal sync internal 16-bit

(Note that my bootloader doesn't pass the revision information).

Tested-by: Mika Westerberg <mika.westerberg@iki.fi>

Regards,
MW

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH 2/3] ep93xx: add /proc/cpuinfo extension
  2010-03-22 18:39 ` [PATCH 2/3] ep93xx: add /proc/cpuinfo extension H Hartley Sweeten
  2010-03-23 15:35   ` Mika Westerberg
@ 2011-03-17  3:30   ` Martin Guy
  2011-03-17 16:15     ` H Hartley Sweeten
  1 sibling, 1 reply; 7+ messages in thread
From: Martin Guy @ 2011-03-17  3:30 UTC (permalink / raw)
  To: linux-arm-kernel

Just spotted an off-by-one error in this patch, if of very minor and
unlikely effect.

On 22 March 2010 19:39, H Hartley Sweeten <hartleys@visionengravers.com> wrote:
> Add a callback to mach-ep93xx for the /proc/cpuinfo extension.
>
> This cpuinfo extension dumps the processor unique ID and Maverick
> Key as well as the processor silicon revision and a number of
> boot configuration options.
> ...
> diff --git a/arch/arm/mach-ep93xx/core.c b/arch/arm/mach-ep93xx/core.c
> index 90fb591..fe1eb7a 100644
> --- a/arch/arm/mach-ep93xx/core.c
> +++ b/arch/arm/mach-ep93xx/core.c
>...
> +static const char *ep93xx_rev[] = {
> + ? ? ? "A", "B", "C", "D0", "D1", "E0", "E1", "E2", "??"
> +};
>...
> + ? ? ? val = ep93xx_chip_revision();
> + ? ? ? if (val > ARRAY_SIZE(ep93xx_rev))
> + ? ? ? ? ? ? ? val = ARRAY_SIZE(ep93xx_rev) - 1;
> + ? ? ? seq_printf(m, "Silicon Rev\t: %s\n", ep93xx_rev[val]);

Shouldn't that be

+       if (val >= ARRAY_SIZE(ep93xx_rev))

?

    M
?

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH 2/3] ep93xx: add /proc/cpuinfo extension
  2011-03-17  3:30   ` Martin Guy
@ 2011-03-17 16:15     ` H Hartley Sweeten
  0 siblings, 0 replies; 7+ messages in thread
From: H Hartley Sweeten @ 2011-03-17 16:15 UTC (permalink / raw)
  To: linux-arm-kernel

On Wednesday, March 16, 2011 8:30 PM, Martin Guy wrote:
>
> Just spotted an off-by-one error in this patch, if of very minor and
> unlikely effect.
>
> On 22 March 2010 19:39, H Hartley Sweeten <hartleys@visionengravers.com> wrote:

Cool.. I time traveled...

Actually, I submitted this last year.  I think Russell NAK'ed it at that time since
it modified the output of /proc/cpuinfo and he did not see a valid reason for it.

There is some discussion going on right now to add a "socinfo" to sysfs where this
information could be exposed.  When that gets worked out I will come up with a new
patch.

>> Add a callback to mach-ep93xx for the /proc/cpuinfo extension.
>>
>> This cpuinfo extension dumps the processor unique ID and Maverick
>> Key as well as the processor silicon revision and a number of
>> boot configuration options.
>> ...
>> diff --git a/arch/arm/mach-ep93xx/core.c b/arch/arm/mach-ep93xx/core.c
>> index 90fb591..fe1eb7a 100644
>> --- a/arch/arm/mach-ep93xx/core.c
>> +++ b/arch/arm/mach-ep93xx/core.c
>>...
>> +static const char *ep93xx_rev[] = {
>> + ? ? ? "A", "B", "C", "D0", "D1", "E0", "E1", "E2", "??"
>> +};
>>...
>> + ? ? ? val = ep93xx_chip_revision();
>> + ? ? ? if (val > ARRAY_SIZE(ep93xx_rev))
>> + ? ? ? ? ? ? ? val = ARRAY_SIZE(ep93xx_rev) - 1;
>> + ? ? ? seq_printf(m, "Silicon Rev\t: %s\n", ep93xx_rev[val]);
>
> Shouldn't that be
>
> +       if (val >= ARRAY_SIZE(ep93xx_rev))
>

Regardless, if I remember correctly, someone already pointed this out.  I'll
keep it in mind when I re-do this patch based on the "socinfo" stuff.

Thanks,
Hartley

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2011-03-17 16:15 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <AcrJ7vBVySpZbSYBQ1eQDb/9VrGf4Q==>
2010-03-22 18:39 ` [PATCH 2/3] ep93xx: add /proc/cpuinfo extension H Hartley Sweeten
2010-03-23 15:35   ` Mika Westerberg
2010-03-23 16:34     ` H Hartley Sweeten
2010-03-23 16:49       ` Mika Westerberg
2010-03-23 16:45     ` H Hartley Sweeten
2011-03-17  3:30   ` Martin Guy
2011-03-17 16:15     ` H Hartley Sweeten

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).