/*
* If there are MTRR registers, snarf them for validation.
*/
- if(!(m->cpuiddx & 0x1000))
+ if(!(m->cpuiddx & Mtrr))
return;
rdmsr(0x0FE, &m->mtrrcap);
checkmtrr();
apic->online = 1;
+ coherence();
lapicinit(apic);
lapiconline();
* The offsets are known in the AP bootstrap code.
*/
apbootp = (ulong*)(APBOOTSTRAP+0x08);
- *apbootp++ = (ulong)squidboy;
+ *apbootp++ = (ulong)squidboy; /* assembler jumps here eventually */
*apbootp++ = PADDR(pdb);
*apbootp = (ulong)apic;
/*
* Universal Startup Algorithm.
*/
- p = KADDR(0x467);
+ p = KADDR(0x467); /* warm-reset vector */
*p++ = PADDR(APBOOTSTRAP);
*p++ = PADDR(APBOOTSTRAP)>>8;
i = (PADDR(APBOOTSTRAP) & ~0xFFFF)/16;
print("mp: bad APBOOTSTRAP\n");
*p++ = i;
*p = i>>8;
+ coherence();
- nvramwrite(0x0F, 0x0A);
+ nvramwrite(0x0F, 0x0A); /* shutdown code: warm reset upon init ipi */
lapicstartap(apic, PADDR(APBOOTSTRAP));
for(i = 0; i < 1000; i++){
if(apic->online)
return;
}
apic->online = 1;
+
lapicinit(apic);
/*
int tbdf, vno, cap, cpu, ok64;
Pcidev *pci;
- if(getconf("*msi") == nil)
+ if(getconf("*nomsi") != nil)
return -1;
tbdf = v->tbdf;
if(tbdf == BUSUNKNOWN || BUSTYPE(tbdf) != BusPCI)