diff options
-rw-r--r-- | arch/ia64/kernel/setup.c | 41 | ||||
-rw-r--r-- | include/asm-ia64/pal.h | 10 | ||||
-rw-r--r-- | include/asm-ia64/processor.h | 1 |
3 files changed, 42 insertions, 10 deletions
diff --git a/arch/ia64/kernel/setup.c b/arch/ia64/kernel/setup.c index 7ad0d9cc6db6..84f93c0f2c66 100644 --- a/arch/ia64/kernel/setup.c +++ b/arch/ia64/kernel/setup.c | |||
@@ -509,7 +509,7 @@ show_cpuinfo (struct seq_file *m, void *v) | |||
509 | { 1UL << 1, "spontaneous deferral"}, | 509 | { 1UL << 1, "spontaneous deferral"}, |
510 | { 1UL << 2, "16-byte atomic ops" } | 510 | { 1UL << 2, "16-byte atomic ops" } |
511 | }; | 511 | }; |
512 | char family[32], features[128], *cp, sep; | 512 | char features[128], *cp, sep; |
513 | struct cpuinfo_ia64 *c = v; | 513 | struct cpuinfo_ia64 *c = v; |
514 | unsigned long mask; | 514 | unsigned long mask; |
515 | unsigned long proc_freq; | 515 | unsigned long proc_freq; |
@@ -517,12 +517,6 @@ show_cpuinfo (struct seq_file *m, void *v) | |||
517 | 517 | ||
518 | mask = c->features; | 518 | mask = c->features; |
519 | 519 | ||
520 | switch (c->family) { | ||
521 | case 0x07: memcpy(family, "Itanium", 8); break; | ||
522 | case 0x1f: memcpy(family, "Itanium 2", 10); break; | ||
523 | default: sprintf(family, "%u", c->family); break; | ||
524 | } | ||
525 | |||
526 | /* build the feature string: */ | 520 | /* build the feature string: */ |
527 | memcpy(features, " standard", 10); | 521 | memcpy(features, " standard", 10); |
528 | cp = features; | 522 | cp = features; |
@@ -553,8 +547,9 @@ show_cpuinfo (struct seq_file *m, void *v) | |||
553 | "processor : %d\n" | 547 | "processor : %d\n" |
554 | "vendor : %s\n" | 548 | "vendor : %s\n" |
555 | "arch : IA-64\n" | 549 | "arch : IA-64\n" |
556 | "family : %s\n" | 550 | "family : %u\n" |
557 | "model : %u\n" | 551 | "model : %u\n" |
552 | "model name : %s\n" | ||
558 | "revision : %u\n" | 553 | "revision : %u\n" |
559 | "archrev : %u\n" | 554 | "archrev : %u\n" |
560 | "features :%s\n" /* don't change this---it _is_ right! */ | 555 | "features :%s\n" /* don't change this---it _is_ right! */ |
@@ -563,7 +558,8 @@ show_cpuinfo (struct seq_file *m, void *v) | |||
563 | "cpu MHz : %lu.%06lu\n" | 558 | "cpu MHz : %lu.%06lu\n" |
564 | "itc MHz : %lu.%06lu\n" | 559 | "itc MHz : %lu.%06lu\n" |
565 | "BogoMIPS : %lu.%02lu\n", | 560 | "BogoMIPS : %lu.%02lu\n", |
566 | cpunum, c->vendor, family, c->model, c->revision, c->archrev, | 561 | cpunum, c->vendor, c->family, c->model, |
562 | c->model_name, c->revision, c->archrev, | ||
567 | features, c->ppn, c->number, | 563 | features, c->ppn, c->number, |
568 | proc_freq / 1000, proc_freq % 1000, | 564 | proc_freq / 1000, proc_freq % 1000, |
569 | c->itc_freq / 1000000, c->itc_freq % 1000000, | 565 | c->itc_freq / 1000000, c->itc_freq % 1000000, |
@@ -611,6 +607,31 @@ struct seq_operations cpuinfo_op = { | |||
611 | .show = show_cpuinfo | 607 | .show = show_cpuinfo |
612 | }; | 608 | }; |
613 | 609 | ||
610 | static char brandname[128]; | ||
611 | |||
612 | static char * __cpuinit | ||
613 | get_model_name(__u8 family, __u8 model) | ||
614 | { | ||
615 | char brand[128]; | ||
616 | |||
617 | if (ia64_pal_get_brand_info(brand)) { | ||
618 | if (family == 0x7) | ||
619 | memcpy(brand, "Merced", 7); | ||
620 | else if (family == 0x1f) switch (model) { | ||
621 | case 0: memcpy(brand, "McKinley", 9); break; | ||
622 | case 1: memcpy(brand, "Madison", 8); break; | ||
623 | case 2: memcpy(brand, "Madison up to 9M cache", 23); break; | ||
624 | } else | ||
625 | memcpy(brand, "Unknown", 8); | ||
626 | } | ||
627 | if (brandname[0] == '\0') | ||
628 | return strcpy(brandname, brand); | ||
629 | else if (strcmp(brandname, brand) == 0) | ||
630 | return brandname; | ||
631 | else | ||
632 | return kstrdup(brand, GFP_KERNEL); | ||
633 | } | ||
634 | |||
614 | static void __cpuinit | 635 | static void __cpuinit |
615 | identify_cpu (struct cpuinfo_ia64 *c) | 636 | identify_cpu (struct cpuinfo_ia64 *c) |
616 | { | 637 | { |
@@ -640,7 +661,6 @@ identify_cpu (struct cpuinfo_ia64 *c) | |||
640 | pal_status_t status; | 661 | pal_status_t status; |
641 | unsigned long impl_va_msb = 50, phys_addr_size = 44; /* Itanium defaults */ | 662 | unsigned long impl_va_msb = 50, phys_addr_size = 44; /* Itanium defaults */ |
642 | int i; | 663 | int i; |
643 | |||
644 | for (i = 0; i < 5; ++i) | 664 | for (i = 0; i < 5; ++i) |
645 | cpuid.bits[i] = ia64_get_cpuid(i); | 665 | cpuid.bits[i] = ia64_get_cpuid(i); |
646 | 666 | ||
@@ -663,6 +683,7 @@ identify_cpu (struct cpuinfo_ia64 *c) | |||
663 | c->family = cpuid.field.family; | 683 | c->family = cpuid.field.family; |
664 | c->archrev = cpuid.field.archrev; | 684 | c->archrev = cpuid.field.archrev; |
665 | c->features = cpuid.field.features; | 685 | c->features = cpuid.field.features; |
686 | c->model_name = get_model_name(c->family, c->model); | ||
666 | 687 | ||
667 | status = ia64_pal_vm_summary(&vm1, &vm2); | 688 | status = ia64_pal_vm_summary(&vm1, &vm2); |
668 | if (status == PAL_STATUS_SUCCESS) { | 689 | if (status == PAL_STATUS_SUCCESS) { |
diff --git a/include/asm-ia64/pal.h b/include/asm-ia64/pal.h index 20a8d618c845..d1587e4f5759 100644 --- a/include/asm-ia64/pal.h +++ b/include/asm-ia64/pal.h | |||
@@ -78,6 +78,7 @@ | |||
78 | #define PAL_VM_TR_READ 261 /* read contents of translation register */ | 78 | #define PAL_VM_TR_READ 261 /* read contents of translation register */ |
79 | #define PAL_GET_PSTATE 262 /* get the current P-state */ | 79 | #define PAL_GET_PSTATE 262 /* get the current P-state */ |
80 | #define PAL_SET_PSTATE 263 /* set the P-state */ | 80 | #define PAL_SET_PSTATE 263 /* set the P-state */ |
81 | #define PAL_BRAND_INFO 274 /* Processor branding information */ | ||
81 | 82 | ||
82 | #ifndef __ASSEMBLY__ | 83 | #ifndef __ASSEMBLY__ |
83 | 84 | ||
@@ -1133,6 +1134,15 @@ ia64_pal_set_pstate (u64 pstate_index) | |||
1133 | return iprv.status; | 1134 | return iprv.status; |
1134 | } | 1135 | } |
1135 | 1136 | ||
1137 | /* Processor branding information*/ | ||
1138 | static inline s64 | ||
1139 | ia64_pal_get_brand_info (char *brand_info) | ||
1140 | { | ||
1141 | struct ia64_pal_retval iprv; | ||
1142 | PAL_CALL_STK(iprv, PAL_BRAND_INFO, 0, (u64)brand_info, 0); | ||
1143 | return iprv.status; | ||
1144 | } | ||
1145 | |||
1136 | /* Cause the processor to enter LIGHT HALT state, where prefetching and execution are | 1146 | /* Cause the processor to enter LIGHT HALT state, where prefetching and execution are |
1137 | * suspended, but cache and TLB coherency is maintained. | 1147 | * suspended, but cache and TLB coherency is maintained. |
1138 | */ | 1148 | */ |
diff --git a/include/asm-ia64/processor.h b/include/asm-ia64/processor.h index 265f4824db0e..ead68f8eb883 100644 --- a/include/asm-ia64/processor.h +++ b/include/asm-ia64/processor.h | |||
@@ -163,6 +163,7 @@ struct cpuinfo_ia64 { | |||
163 | __u8 family; | 163 | __u8 family; |
164 | __u8 archrev; | 164 | __u8 archrev; |
165 | char vendor[16]; | 165 | char vendor[16]; |
166 | char *model_name; | ||
166 | 167 | ||
167 | #ifdef CONFIG_NUMA | 168 | #ifdef CONFIG_NUMA |
168 | struct ia64_node_data *node_data; | 169 | struct ia64_node_data *node_data; |