[SPARC64]: Fix system type in /proc/cpuinfo and remove bogus OBP check.
David S. Miller [Thu, 9 Mar 2006 01:18:19 +0000 (17:18 -0800)]
Report 'sun4v' when appropriate in /proc/cpuinfo

Remove all the verifications of the OBP version string.  Just
make sure it's there, and report it raw in the bootup logs and
via /proc/cpuinfo.

Signed-off-by: David S. Miller <davem@davemloft.net>

arch/sparc64/kernel/setup.c
arch/sparc64/prom/init.c
arch/sparc64/prom/misc.c
include/asm-sparc64/oplib.h

index 2a2a8a6..7ae4027 100644 (file)
@@ -442,9 +442,8 @@ static int show_cpuinfo(struct seq_file *m, void *__unused)
        seq_printf(m, 
                   "cpu\t\t: %s\n"
                   "fpu\t\t: %s\n"
-                  "promlib\t\t: Version 3 Revision %d\n"
-                  "prom\t\t: %d.%d.%d\n"
-                  "type\t\t: sun4u\n"
+                  "prom\t\t: %s\n"
+                  "type\t\t: %s\n"
                   "ncpus probed\t: %d\n"
                   "ncpus active\t: %d\n"
                   "D$ parity tl1\t: %u\n"
@@ -456,10 +455,10 @@ static int show_cpuinfo(struct seq_file *m, void *__unused)
                   ,
                   sparc_cpu_type,
                   sparc_fpu_type,
-                  prom_rev,
-                  prom_prev >> 16,
-                  (prom_prev >> 8) & 0xff,
-                  prom_prev & 0xff,
+                  prom_version,
+                  ((tlb_type == hypervisor) ?
+                   "sun4v" :
+                   "sun4u"),
                   ncpus_probed,
                   num_online_cpus(),
                   dcache_parity_tl1_occurred,
index 095755e..1c0db84 100644 (file)
@@ -14,8 +14,8 @@
 #include <asm/openprom.h>
 #include <asm/oplib.h>
 
-enum prom_major_version prom_vers;
-unsigned int prom_rev, prom_prev;
+/* OBP version string. */
+char prom_version[80];
 
 /* The root node of the prom device tree. */
 int prom_stdin, prom_stdout;
@@ -30,13 +30,7 @@ extern void prom_cif_init(void *, void *);
 
 void __init prom_init(void *cif_handler, void *cif_stack)
 {
-       char buffer[80], *p;
-       int ints[3];
        int node;
-       int i = 0;
-       int bufadjust;
-
-       prom_vers = PROM_P1275;
 
        prom_cif_init(cif_handler, cif_stack);
 
@@ -51,44 +45,10 @@ void __init prom_init(void *cif_handler, void *cif_stack)
        if (!node || node == -1)
                prom_halt();
 
-       prom_getstring(node, "version", buffer, sizeof (buffer));
+       prom_getstring(node, "version", prom_version, sizeof(prom_version));
 
        prom_printf("\n");
 
-       if (strncmp(buffer, "OBP ", 4))
-               goto strange_version;
-
-       /*
-        * Version field is expected to be 'OBP xx.yy.zz date...'
-        * However, Sun can't stick to this format very well, so
-        * we need to check for 'OBP  xx.yy.zz date...' and adjust
-        * accordingly. -spot
-        */
-
-       if (strncmp(buffer, "OBP  ", 5))
-               bufadjust = 4;
-       else
-               bufadjust = 5;
-
-       p = buffer + bufadjust;
-       while (p && isdigit(*p) && i < 3) {
-               ints[i++] = simple_strtoul(p, NULL, 0);
-               if ((p = strchr(p, '.')) != NULL)
-                       p++;
-       }
-       if (i != 3)
-               goto strange_version;
-
-       prom_rev = ints[1];
-       prom_prev = (ints[0] << 16) | (ints[1] << 8) | ints[2];
-
-       printk("PROMLIB: Sun IEEE Boot Prom %s\n", buffer + bufadjust);
+       printk("PROMLIB: Sun IEEE Boot Prom '%s'\n", prom_version);
        printk("PROMLIB: Root node compatible: %s\n", prom_root_compatible);
-
-       /* Initialization successful. */
-       return;
-
-strange_version:
-       prom_printf ("Strange OBP version `%s'.\n", buffer);
-       prom_halt ();
 }
index 90df421..577bde8 100644 (file)
@@ -112,24 +112,6 @@ unsigned char prom_get_idprom(char *idbuf, int num_bytes)
        return 0xff;
 }
 
-/* Get the major prom version number. */
-int prom_version(void)
-{
-       return PROM_P1275;
-}
-
-/* Get the prom plugin-revision. */
-int prom_getrev(void)
-{
-       return prom_rev;
-}
-
-/* Get the prom firmware print revision. */
-int prom_getprev(void)
-{
-       return prom_prev;
-}
-
 /* Install Linux trap table so PROM uses that instead of its own. */
 void prom_set_trap_table(unsigned long tba)
 {
index 84618f8..c754676 100644 (file)
 #include <linux/config.h>
 #include <asm/openprom.h>
 
-/* Enumeration to describe the prom major version we have detected. */
-enum prom_major_version {
-       PROM_V0,      /* Original sun4c V0 prom */
-       PROM_V2,      /* sun4c and early sun4m V2 prom */
-       PROM_V3,      /* sun4m and later, up to sun4d/sun4e machines V3 */
-       PROM_P1275,   /* IEEE compliant ISA based Sun PROM, only sun4u */
-        PROM_AP1000,  /* actually no prom at all */
-};
-
-extern enum prom_major_version prom_vers;
-/* Revision, and firmware revision. */
-extern unsigned int prom_rev, prom_prev;
+/* OBP version string. */
+extern char prom_version[];
 
 /* Root node of the prom device tree, this stays constant after
  * initialization is complete.
@@ -133,15 +123,6 @@ extern void prom_setcallback(callback_func_t func_ptr);
  */
 extern unsigned char prom_get_idprom(char *idp_buffer, int idpbuf_size);
 
-/* Get the prom major version. */
-extern int prom_version(void);
-
-/* Get the prom plugin revision. */
-extern int prom_getrev(void);
-
-/* Get the prom firmware revision. */
-extern int prom_getprev(void);
-
 /* Character operations to/from the console.... */
 
 /* Non-blocking get character from console. */