summaryrefslogtreecommitdiffstats
path: root/sys/i386
diff options
context:
space:
mode:
authorjkim <jkim@FreeBSD.org>2009-01-12 22:01:49 +0000
committerjkim <jkim@FreeBSD.org>2009-01-12 22:01:49 +0000
commit37d2c77dcc274c4ca6d12006a2b5860a0e80b516 (patch)
tree6b039c4e8dd51f9eb2b1226c7748fb427f49924f /sys/i386
parent51aa008d017c1e1c01a70ae31e72cdb70b27f7e5 (diff)
downloadFreeBSD-src-37d2c77dcc274c4ca6d12006a2b5860a0e80b516.zip
FreeBSD-src-37d2c77dcc274c4ca6d12006a2b5860a0e80b516.tar.gz
Add basic i386 support for VIA Nano processors.
Diffstat (limited to 'sys/i386')
-rw-r--r--sys/i386/i386/i686_mem.c12
-rw-r--r--sys/i386/i386/identcpu.c14
-rw-r--r--sys/i386/i386/initcpu.c1
3 files changed, 23 insertions, 4 deletions
diff --git a/sys/i386/i386/i686_mem.c b/sys/i386/i386/i686_mem.c
index ab9aadf..fc88be1 100644
--- a/sys/i386/i386/i686_mem.c
+++ b/sys/i386/i386/i686_mem.c
@@ -678,9 +678,17 @@ i686_mem_drvinit(void *unused)
return;
if ((cpu_id & 0xf00) != 0x600 && (cpu_id & 0xf00) != 0xf00)
return;
- if (cpu_vendor_id != CPU_VENDOR_INTEL &&
- cpu_vendor_id != CPU_VENDOR_AMD)
+ switch (cpu_vendor_id) {
+ case CPU_VENDOR_INTEL:
+ case CPU_VENDOR_AMD:
+ break;
+ case CPU_VENDOR_CENTAUR:
+ if (cpu_exthigh >= 0x80000008)
+ break;
+ /* FALLTHROUGH */
+ default:
return;
+ }
mem_range_softc.mr_op = &i686_mrops;
}
SYSINIT(i686memdev, SI_SUB_DRIVERS, SI_ORDER_FIRST, i686_mem_drvinit, NULL);
diff --git a/sys/i386/i386/identcpu.c b/sys/i386/i386/identcpu.c
index cf70af7..aa37776 100644
--- a/sys/i386/i386/identcpu.c
+++ b/sys/i386/i386/identcpu.c
@@ -606,6 +606,9 @@ printcpuinfo(void)
case 0x6d0:
strcpy(cpu_model, "VIA C7 Esther");
break;
+ case 0x6f0:
+ strcpy(cpu_model, "VIA Nano");
+ break;
default:
strcpy(cpu_model, "VIA/IDT Unknown");
}
@@ -856,6 +859,9 @@ printcpuinfo(void)
);
}
+ if (cpu_vendor_id == CPU_VENDOR_CENTAUR)
+ print_via_padlock_info();
+
if ((cpu_feature & CPUID_HTT) &&
cpu_vendor_id == CPU_VENDOR_AMD)
cpu_feature &= ~CPUID_HTT;
@@ -879,6 +885,11 @@ printcpuinfo(void)
I386_CPU_MODEL(cpu_id) >= 0x3))
tsc_is_invariant = 1;
break;
+ case CPU_VENDOR_CENTAUR:
+ if (I386_CPU_FAMILY(cpu_id) == 0x6 &&
+ I386_CPU_MODEL(cpu_id) >= 0xf)
+ tsc_is_invariant = 1;
+ break;
}
if (tsc_is_invariant)
printf("\n TSC: P-state invariant");
@@ -915,8 +926,6 @@ printcpuinfo(void)
printf("\n CPU cache: write-through mode");
#endif
}
- if (cpu_vendor_id == CPU_VENDOR_CENTAUR)
- print_via_padlock_info();
/* Avoid ugly blank lines: only print newline when we have to. */
if (*cpu_vendor || cpu_id)
@@ -1568,6 +1577,7 @@ print_via_padlock_info(void)
return;
case 0x6a0:
case 0x6d0:
+ case 0x6f0:
break;
default:
return;
diff --git a/sys/i386/i386/initcpu.c b/sys/i386/i386/initcpu.c
index 6deea08..e1c38ba 100644
--- a/sys/i386/i386/initcpu.c
+++ b/sys/i386/i386/initcpu.c
@@ -686,6 +686,7 @@ initializecpu(void)
/* fall through. */
case 0x6a0:
case 0x6d0:
+ case 0x6f0:
init_via();
break;
default:
OpenPOWER on IntegriCloud