Module Name: src Committed By: kiyohara Date: Mon Jun 28 12:08:13 UTC 2010
Modified Files: src/sys/arch/ia64/ia64: cpu.c machdep.c Log Message: Move identifycpu() into cpu.c. Our cpu* says: cpu0 at mainbus0: ProcessorID 0, Id 0, Eid 0 cpu0: McKinley (1000.00-MHz Itanium 2) cpu0: Origin "GenuineIntel", Revision 7 cpu0: Features 0x1 To generate a diff of this commit: cvs rdiff -u -r1.8 -r1.9 src/sys/arch/ia64/ia64/cpu.c cvs rdiff -u -r1.23 -r1.24 src/sys/arch/ia64/ia64/machdep.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/ia64/ia64/cpu.c diff -u src/sys/arch/ia64/ia64/cpu.c:1.8 src/sys/arch/ia64/ia64/cpu.c:1.9 --- src/sys/arch/ia64/ia64/cpu.c:1.8 Mon May 17 11:46:19 2010 +++ src/sys/arch/ia64/ia64/cpu.c Mon Jun 28 12:08:13 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: cpu.c,v 1.8 2010/05/17 11:46:19 kiyohara Exp $ */ +/* $NetBSD: cpu.c,v 1.9 2010/06/28 12:08:13 kiyohara Exp $ */ /* * Copyright (c) 2006 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: cpu.c,v 1.8 2010/05/17 11:46:19 kiyohara Exp $"); +__KERNEL_RCSID(0, "$NetBSD: cpu.c,v 1.9 2010/06/28 12:08:13 kiyohara Exp $"); #include <sys/param.h> #include <sys/proc.h> @@ -41,17 +41,23 @@ #include <dev/acpi/acpica.h> #include <dev/acpi/acpivar.h> +#define MHz 1000000L +#define GHz (1000L * MHz) struct cpu_info cpu_info_primary __aligned(CACHE_LINE_SIZE); -static int cpu_match(device_t, cfdata_t, void *); -static void cpu_attach(device_t, device_t, void *); - struct cpu_softc { device_t sc_dev; /* device tree glue */ struct cpu_info *sc_info; /* pointer to CPU info */ }; +char cpu_model[64]; + +static int cpu_match(device_t, cfdata_t, void *); +static void cpu_attach(device_t, device_t, void *); + +static void identifycpu(struct cpu_softc *); + CFATTACH_DECL_NEW(cpu, sizeof(struct cpu_softc), cpu_match, cpu_attach, NULL, NULL); @@ -98,5 +104,79 @@ ci->ci_intrdepth = -1; /* need ? */ ci->ci_dev = self; + identifycpu(sc); + return; } + + +static void +identifycpu(struct cpu_softc *sc) +{ + uint64_t vendor[3]; + const char *family_name, *model_name; + uint64_t features, tmp; + int number, revision, model, family, archrev; + extern uint64_t processor_frequency; + + /* + * Assumes little-endian. + */ + vendor[0] = ia64_get_cpuid(0); + vendor[1] = ia64_get_cpuid(1); + vendor[2] = '\0'; + + tmp = ia64_get_cpuid(3); + number = (tmp >> 0) & 0xff; + revision = (tmp >> 8) & 0xff; + model = (tmp >> 16) & 0xff; + family = (tmp >> 24) & 0xff; + archrev = (tmp >> 32) & 0xff; + + family_name = model_name = "unknown"; + switch (family) { + case 0x07: + family_name = "Itanium"; + model_name = "Merced"; + break; + case 0x1f: + family_name = "Itanium 2"; + switch (model) { + case 0x00: + model_name = "McKinley"; + break; + case 0x01: + /* + * Deerfield is a low-voltage variant based on the + * Madison core. We need circumstantial evidence + * (i.e. the clock frequency) to identify those. + * Allow for roughly 1% error margin. + */ + tmp = processor_frequency >> 7; + if ((processor_frequency - tmp) < 1*GHz && + (processor_frequency + tmp) >= 1*GHz) + model_name = "Deerfield"; + else + model_name = "Madison"; + break; + case 0x02: + model_name = "Madison II"; + break; + } + break; + } + snprintf(cpu_model, sizeof(cpu_model), "%s", model_name); + + features = ia64_get_cpuid(4); + + aprint_normal_dev(sc->sc_dev, "%s (", model_name); + if (processor_frequency) { + aprint_normal("%ld.%02ld-MHz ", + (processor_frequency + 4999) / MHz, + ((processor_frequency + 4999) / (MHz/100)) % 100); + } + aprint_normal("%s)\n", family_name); + aprint_normal_dev(sc->sc_dev, "Origin \"%s\", Revision %d\n", + (char *)vendor, revision); + aprint_normal_dev(sc->sc_dev, "Features 0x%x\n", (uint32_t)features); +} Index: src/sys/arch/ia64/ia64/machdep.c diff -u src/sys/arch/ia64/ia64/machdep.c:1.23 src/sys/arch/ia64/ia64/machdep.c:1.24 --- src/sys/arch/ia64/ia64/machdep.c:1.23 Mon Feb 8 19:02:29 2010 +++ src/sys/arch/ia64/ia64/machdep.c Mon Jun 28 12:08:13 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: machdep.c,v 1.23 2010/02/08 19:02:29 joerg Exp $ */ +/* $NetBSD: machdep.c,v 1.24 2010/06/28 12:08:13 kiyohara Exp $ */ /*- * Copyright (c) 2003,2004 Marcel Moolenaar @@ -133,10 +133,7 @@ struct vm_map *phys_map = NULL; void *msgbufaddr; -int physmem; - -char cpu_model[64]; -char cpu_family[64]; +int physmem; vaddr_t kernstart, kernend; @@ -159,78 +156,6 @@ struct fpswa_iface *fpswa_iface; -#define Mhz 1000000L -#define Ghz (1000L*Mhz) - -static void -identifycpu(void) -{ - uint64_t vendor[3]; - const char *family_name, *model_name; - uint64_t features, tmp; - int number, revision, model, family, archrev; - - /* - * Assumes little-endian. - */ - vendor[0] = ia64_get_cpuid(0); - vendor[1] = ia64_get_cpuid(1); - vendor[2] = '\0'; - - tmp = ia64_get_cpuid(3); - number = (tmp >> 0) & 0xff; - revision = (tmp >> 8) & 0xff; - model = (tmp >> 16) & 0xff; - family = (tmp >> 24) & 0xff; - archrev = (tmp >> 32) & 0xff; - - family_name = model_name = "unknown"; - switch (family) { - case 0x07: - family_name = "Itanium"; - model_name = "Merced"; - break; - case 0x1f: - family_name = "Itanium 2"; - switch (model) { - case 0x00: - model_name = "McKinley"; - break; - case 0x01: - /* - * Deerfield is a low-voltage variant based on the - * Madison core. We need circumstantial evidence - * (i.e. the clock frequency) to identify those. - * Allow for roughly 1% error margin. - */ - tmp = processor_frequency >> 7; - if ((processor_frequency - tmp) < 1*Ghz && - (processor_frequency + tmp) >= 1*Ghz) - model_name = "Deerfield"; - else - model_name = "Madison"; - break; - case 0x02: - model_name = "Madison II"; - break; - } - break; - } - snprintf(cpu_family, sizeof(cpu_family), "%s", family_name); - snprintf(cpu_model, sizeof(cpu_model), "%s", model_name); - - features = ia64_get_cpuid(4); - - printf("CPU: %s (", model_name); - if (processor_frequency) { - printf("%ld.%02ld-MHz ", (processor_frequency + 4999) / Mhz, - ((processor_frequency + 4999) / (Mhz/100)) % 100); - } - printf("%s)\n", family_name); - printf(" Origin = \"%s\" Revision = %d\n", (char *) vendor, revision); - printf(" Features = 0x%x\n", (uint32_t) features); - -} /* * Machine-dependent startup code @@ -240,11 +165,6 @@ { vaddr_t minaddr, maxaddr; - /* - * Good {morning,afternoon,evening,night}. - */ - identifycpu(); - /* XXX: startrtclock(); */ #ifdef PERFMON perfmon_init();