diff --git a/sys/src/9/pc/devarch.c b/sys/src/9/pc/devarch.c index 2da6f5d55..595cbcb8b 100644 --- a/sys/src/9/pc/devarch.c +++ b/sys/src/9/pc/devarch.c @@ -749,7 +749,7 @@ cpuidentify(void) X86type *t, *tab; uintptr cr4; ulong regs[4]; - vlong mca, mct; + vlong mca, mct, pat; cpuid(Highstdfunc, regs); memmove(m->cpuidid, ®s[1], BY2WD); /* bx */ @@ -882,6 +882,13 @@ cpuidentify(void) rdmsr(0x01, &mct); } + /* IA32_PAT write combining */ + if((m->cpuiddx & Pat) != 0 && rdmsr(0x277, &pat) != -1){ + pat &= ~(255LL<<(PATWC*8)); + pat |= 1LL<<(PATWC*8); /* WC */ + wrmsr(0x277, pat); + } + if(m->cpuiddx & Mtrr) mtrrsync(); diff --git a/sys/src/9/pc/mem.h b/sys/src/9/pc/mem.h index 56649e305..ef646db7d 100644 --- a/sys/src/9/pc/mem.h +++ b/sys/src/9/pc/mem.h @@ -173,3 +173,5 @@ #define getpgcolor(a) 0 +/* PAT entry used for write combining */ +#define PATWC 7 diff --git a/sys/src/9/pc/mmu.c b/sys/src/9/pc/mmu.c index c0b13674a..614339295 100644 --- a/sys/src/9/pc/mmu.c +++ b/sys/src/9/pc/mmu.c @@ -66,11 +66,6 @@ static void memglobal(void); #define VPTX(va) (((ulong)(va))>>12) #define vpd (vpt+VPTX(VPT)) -enum { - /* PAT entry used for write combining */ - PATWC = 7, -}; - void mmuinit(void) { @@ -125,14 +120,6 @@ mmuinit(void) taskswitch(PADDR(m->pdb), (ulong)m + BY2PG); ltr(TSSSEL); - - /* IA32_PAT write combining */ - if((MACHP(0)->cpuiddx & Pat) != 0 - && rdmsr(0x277, &v) != -1){ - v &= ~(255LL<<(PATWC*8)); - v |= 1LL<<(PATWC*8); /* WC */ - wrmsr(0x277, v); - } } /* diff --git a/sys/src/9/pc64/mem.h b/sys/src/9/pc64/mem.h index 3a9bf9a1a..c6f9bba70 100644 --- a/sys/src/9/pc64/mem.h +++ b/sys/src/9/pc64/mem.h @@ -176,5 +176,8 @@ #define getpgcolor(a) 0 +/* PAT entry used for write combining */ +#define PATWC 7 + #define RMACH R15 /* m-> */ #define RUSER R14 /* up-> */ diff --git a/sys/src/9/pc64/mmu.c b/sys/src/9/pc64/mmu.c index f7c8bb7e5..970d0f262 100644 --- a/sys/src/9/pc64/mmu.c +++ b/sys/src/9/pc64/mmu.c @@ -38,9 +38,6 @@ enum { PDE = 0, MAPBITS = 8*sizeof(m->mmumap[0]), - - /* PAT entry used for write combining */ - PATWC = 7, }; static void @@ -133,14 +130,6 @@ mmuinit(void) wrmsr(Star, ((uvlong)UE32SEL << 48) | ((uvlong)KESEL << 32)); wrmsr(Lstar, (uvlong)syscallentry); wrmsr(Sfmask, 0x200); - - /* IA32_PAT write combining */ - if((MACHP(0)->cpuiddx & Pat) != 0 - && rdmsr(0x277, &v) != -1){ - v &= ~(255LL<<(PATWC*8)); - v |= 1LL<<(PATWC*8); /* WC */ - wrmsr(0x277, v); - } } /*