diff options
| author | David S. Miller <davem@sunset.davemloft.net> | 2006-03-08 20:18:19 -0500 |
|---|---|---|
| committer | David S. Miller <davem@sunset.davemloft.net> | 2006-03-20 04:14:25 -0500 |
| commit | 90a6646bf6a1ca821f32d5510e935855612904df (patch) | |
| tree | 035420e4ab615cb837b1246fc26c55e0b8d233b4 | |
| parent | 8935dced547afbf37d0fcfcac9a3556494e53104 (diff) | |
[SPARC64]: Fix system type in /proc/cpuinfo and remove bogus OBP check.
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>
| -rw-r--r-- | arch/sparc64/kernel/setup.c | 13 | ||||
| -rw-r--r-- | arch/sparc64/prom/init.c | 48 | ||||
| -rw-r--r-- | arch/sparc64/prom/misc.c | 18 | ||||
| -rw-r--r-- | include/asm-sparc64/oplib.h | 23 |
4 files changed, 12 insertions, 90 deletions
diff --git a/arch/sparc64/kernel/setup.c b/arch/sparc64/kernel/setup.c index 2a2a8a6cd17d..7ae4027a9192 100644 --- a/arch/sparc64/kernel/setup.c +++ b/arch/sparc64/kernel/setup.c | |||
| @@ -442,9 +442,8 @@ static int show_cpuinfo(struct seq_file *m, void *__unused) | |||
| 442 | seq_printf(m, | 442 | seq_printf(m, |
| 443 | "cpu\t\t: %s\n" | 443 | "cpu\t\t: %s\n" |
| 444 | "fpu\t\t: %s\n" | 444 | "fpu\t\t: %s\n" |
| 445 | "promlib\t\t: Version 3 Revision %d\n" | 445 | "prom\t\t: %s\n" |
| 446 | "prom\t\t: %d.%d.%d\n" | 446 | "type\t\t: %s\n" |
| 447 | "type\t\t: sun4u\n" | ||
| 448 | "ncpus probed\t: %d\n" | 447 | "ncpus probed\t: %d\n" |
| 449 | "ncpus active\t: %d\n" | 448 | "ncpus active\t: %d\n" |
| 450 | "D$ parity tl1\t: %u\n" | 449 | "D$ parity tl1\t: %u\n" |
| @@ -456,10 +455,10 @@ static int show_cpuinfo(struct seq_file *m, void *__unused) | |||
| 456 | , | 455 | , |
| 457 | sparc_cpu_type, | 456 | sparc_cpu_type, |
| 458 | sparc_fpu_type, | 457 | sparc_fpu_type, |
| 459 | prom_rev, | 458 | prom_version, |
| 460 | prom_prev >> 16, | 459 | ((tlb_type == hypervisor) ? |
| 461 | (prom_prev >> 8) & 0xff, | 460 | "sun4v" : |
| 462 | prom_prev & 0xff, | 461 | "sun4u"), |
| 463 | ncpus_probed, | 462 | ncpus_probed, |
| 464 | num_online_cpus(), | 463 | num_online_cpus(), |
| 465 | dcache_parity_tl1_occurred, | 464 | dcache_parity_tl1_occurred, |
diff --git a/arch/sparc64/prom/init.c b/arch/sparc64/prom/init.c index 095755e428a6..1c0db842a6f4 100644 --- a/arch/sparc64/prom/init.c +++ b/arch/sparc64/prom/init.c | |||
| @@ -14,8 +14,8 @@ | |||
| 14 | #include <asm/openprom.h> | 14 | #include <asm/openprom.h> |
| 15 | #include <asm/oplib.h> | 15 | #include <asm/oplib.h> |
| 16 | 16 | ||
| 17 | enum prom_major_version prom_vers; | 17 | /* OBP version string. */ |
| 18 | unsigned int prom_rev, prom_prev; | 18 | char prom_version[80]; |
| 19 | 19 | ||
| 20 | /* The root node of the prom device tree. */ | 20 | /* The root node of the prom device tree. */ |
| 21 | int prom_stdin, prom_stdout; | 21 | int prom_stdin, prom_stdout; |
| @@ -30,13 +30,7 @@ extern void prom_cif_init(void *, void *); | |||
| 30 | 30 | ||
| 31 | void __init prom_init(void *cif_handler, void *cif_stack) | 31 | void __init prom_init(void *cif_handler, void *cif_stack) |
| 32 | { | 32 | { |
| 33 | char buffer[80], *p; | ||
| 34 | int ints[3]; | ||
| 35 | int node; | 33 | int node; |
| 36 | int i = 0; | ||
| 37 | int bufadjust; | ||
| 38 | |||
| 39 | prom_vers = PROM_P1275; | ||
| 40 | 34 | ||
| 41 | prom_cif_init(cif_handler, cif_stack); | 35 | prom_cif_init(cif_handler, cif_stack); |
| 42 | 36 | ||
| @@ -51,44 +45,10 @@ void __init prom_init(void *cif_handler, void *cif_stack) | |||
| 51 | if (!node || node == -1) | 45 | if (!node || node == -1) |
| 52 | prom_halt(); | 46 | prom_halt(); |
| 53 | 47 | ||
| 54 | prom_getstring(node, "version", buffer, sizeof (buffer)); | 48 | prom_getstring(node, "version", prom_version, sizeof(prom_version)); |
| 55 | 49 | ||
| 56 | prom_printf("\n"); | 50 | prom_printf("\n"); |
| 57 | 51 | ||
| 58 | if (strncmp(buffer, "OBP ", 4)) | 52 | printk("PROMLIB: Sun IEEE Boot Prom '%s'\n", prom_version); |
| 59 | goto strange_version; | ||
| 60 | |||
| 61 | /* | ||
| 62 | * Version field is expected to be 'OBP xx.yy.zz date...' | ||
| 63 | * However, Sun can't stick to this format very well, so | ||
| 64 | * we need to check for 'OBP xx.yy.zz date...' and adjust | ||
| 65 | * accordingly. -spot | ||
| 66 | */ | ||
| 67 | |||
| 68 | if (strncmp(buffer, "OBP ", 5)) | ||
| 69 | bufadjust = 4; | ||
| 70 | else | ||
| 71 | bufadjust = 5; | ||
| 72 | |||
| 73 | p = buffer + bufadjust; | ||
| 74 | while (p && isdigit(*p) && i < 3) { | ||
| 75 | ints[i++] = simple_strtoul(p, NULL, 0); | ||
| 76 | if ((p = strchr(p, '.')) != NULL) | ||
| 77 | p++; | ||
| 78 | } | ||
| 79 | if (i != 3) | ||
| 80 | goto strange_version; | ||
| 81 | |||
| 82 | prom_rev = ints[1]; | ||
| 83 | prom_prev = (ints[0] << 16) | (ints[1] << 8) | ints[2]; | ||
| 84 | |||
| 85 | printk("PROMLIB: Sun IEEE Boot Prom %s\n", buffer + bufadjust); | ||
| 86 | printk("PROMLIB: Root node compatible: %s\n", prom_root_compatible); | 53 | printk("PROMLIB: Root node compatible: %s\n", prom_root_compatible); |
| 87 | |||
| 88 | /* Initialization successful. */ | ||
| 89 | return; | ||
| 90 | |||
| 91 | strange_version: | ||
| 92 | prom_printf ("Strange OBP version `%s'.\n", buffer); | ||
| 93 | prom_halt (); | ||
| 94 | } | 54 | } |
diff --git a/arch/sparc64/prom/misc.c b/arch/sparc64/prom/misc.c index 90df42141b19..577bde8b6647 100644 --- a/arch/sparc64/prom/misc.c +++ b/arch/sparc64/prom/misc.c | |||
| @@ -112,24 +112,6 @@ unsigned char prom_get_idprom(char *idbuf, int num_bytes) | |||
| 112 | return 0xff; | 112 | return 0xff; |
| 113 | } | 113 | } |
| 114 | 114 | ||
| 115 | /* Get the major prom version number. */ | ||
| 116 | int prom_version(void) | ||
| 117 | { | ||
| 118 | return PROM_P1275; | ||
| 119 | } | ||
| 120 | |||
| 121 | /* Get the prom plugin-revision. */ | ||
| 122 | int prom_getrev(void) | ||
| 123 | { | ||
| 124 | return prom_rev; | ||
| 125 | } | ||
| 126 | |||
| 127 | /* Get the prom firmware print revision. */ | ||
| 128 | int prom_getprev(void) | ||
| 129 | { | ||
| 130 | return prom_prev; | ||
| 131 | } | ||
| 132 | |||
| 133 | /* Install Linux trap table so PROM uses that instead of its own. */ | 115 | /* Install Linux trap table so PROM uses that instead of its own. */ |
| 134 | void prom_set_trap_table(unsigned long tba) | 116 | void prom_set_trap_table(unsigned long tba) |
| 135 | { | 117 | { |
diff --git a/include/asm-sparc64/oplib.h b/include/asm-sparc64/oplib.h index 84618f8a9e6e..c754676e13ef 100644 --- a/include/asm-sparc64/oplib.h +++ b/include/asm-sparc64/oplib.h | |||
| @@ -12,18 +12,8 @@ | |||
| 12 | #include <linux/config.h> | 12 | #include <linux/config.h> |
| 13 | #include <asm/openprom.h> | 13 | #include <asm/openprom.h> |
| 14 | 14 | ||
| 15 | /* Enumeration to describe the prom major version we have detected. */ | 15 | /* OBP version string. */ |
| 16 | enum prom_major_version { | 16 | extern char prom_version[]; |
| 17 | PROM_V0, /* Original sun4c V0 prom */ | ||
| 18 | PROM_V2, /* sun4c and early sun4m V2 prom */ | ||
| 19 | PROM_V3, /* sun4m and later, up to sun4d/sun4e machines V3 */ | ||
| 20 | PROM_P1275, /* IEEE compliant ISA based Sun PROM, only sun4u */ | ||
| 21 | PROM_AP1000, /* actually no prom at all */ | ||
| 22 | }; | ||
| 23 | |||
| 24 | extern enum prom_major_version prom_vers; | ||
| 25 | /* Revision, and firmware revision. */ | ||
| 26 | extern unsigned int prom_rev, prom_prev; | ||
| 27 | 17 | ||
| 28 | /* Root node of the prom device tree, this stays constant after | 18 | /* Root node of the prom device tree, this stays constant after |
| 29 | * initialization is complete. | 19 | * initialization is complete. |
| @@ -133,15 +123,6 @@ extern void prom_setcallback(callback_func_t func_ptr); | |||
| 133 | */ | 123 | */ |
| 134 | extern unsigned char prom_get_idprom(char *idp_buffer, int idpbuf_size); | 124 | extern unsigned char prom_get_idprom(char *idp_buffer, int idpbuf_size); |
| 135 | 125 | ||
| 136 | /* Get the prom major version. */ | ||
| 137 | extern int prom_version(void); | ||
| 138 | |||
| 139 | /* Get the prom plugin revision. */ | ||
| 140 | extern int prom_getrev(void); | ||
| 141 | |||
| 142 | /* Get the prom firmware revision. */ | ||
| 143 | extern int prom_getprev(void); | ||
| 144 | |||
| 145 | /* Character operations to/from the console.... */ | 126 | /* Character operations to/from the console.... */ |
| 146 | 127 | ||
| 147 | /* Non-blocking get character from console. */ | 128 | /* Non-blocking get character from console. */ |
