* [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).