diff options
Diffstat (limited to 'pc-bios/bios-pq/0005_kvm-bios-smp-mtrr-support.patch')
-rw-r--r-- | pc-bios/bios-pq/0005_kvm-bios-smp-mtrr-support.patch | 126 |
1 files changed, 0 insertions, 126 deletions
diff --git a/pc-bios/bios-pq/0005_kvm-bios-smp-mtrr-support.patch b/pc-bios/bios-pq/0005_kvm-bios-smp-mtrr-support.patch deleted file mode 100644 index ee867a0ac4..0000000000 --- a/pc-bios/bios-pq/0005_kvm-bios-smp-mtrr-support.patch +++ /dev/null @@ -1,126 +0,0 @@ -smp mtrr support (Avi Kivity) - -Signed-off-by: Avi Kivity <avi@qumranet.com> -Signed-off-by: Anthony Liguori <aliguori@us.ibm.com> - -Index: bochs/bios/rombios.h -=================================================================== ---- bochs.orig/bios/rombios.h -+++ bochs/bios/rombios.h -@@ -56,6 +56,7 @@ - #define ACPI_DATA_SIZE 0x00010000L - #define PM_IO_BASE 0xb000 - #define SMB_IO_BASE 0xb100 -+#define SMP_MSR_ADDR 0xf010 - - // Define the application NAME - #if defined(BX_QEMU) -Index: bochs/bios/rombios32.c -=================================================================== ---- bochs.orig/bios/rombios32.c -+++ bochs/bios/rombios32.c -@@ -472,6 +472,23 @@ void qemu_cfg_read(uint8_t *buf, int len - } - #endif - -+void init_smp_msrs(void) -+{ -+ *(uint32_t *)SMP_MSR_ADDR = 0; -+} -+ -+void wrmsr_smp(uint32_t index, uint64_t val) -+{ -+ static struct { uint32_t ecx, eax, edx; } *p = (void *)SMP_MSR_ADDR; -+ -+ wrmsr(index, val); -+ p->ecx = index; -+ p->eax = val; -+ p->edx = val >> 32; -+ ++p; -+ p->ecx = 0; -+} -+ - void uuid_probe(void) - { - #ifdef BX_QEMU -@@ -519,32 +536,32 @@ void setup_mtrr(void) - for (i = 0; i < 8; ++i) - if (ram_size >= 65536 * (i + 1)) - u.valb[i] = 6; -- wrmsr(MSR_MTRRfix64K_00000, u.val); -+ wrmsr_smp(MSR_MTRRfix64K_00000, u.val); - u.val = 0; - for (i = 0; i < 8; ++i) - if (ram_size >= 65536 * 8 + 16384 * (i + 1)) - u.valb[i] = 6; -- wrmsr(MSR_MTRRfix16K_80000, u.val); -- wrmsr(MSR_MTRRfix16K_A0000, 0); -- wrmsr(MSR_MTRRfix4K_C0000, 0); -- wrmsr(MSR_MTRRfix4K_C8000, 0); -- wrmsr(MSR_MTRRfix4K_D0000, 0); -- wrmsr(MSR_MTRRfix4K_D8000, 0); -- wrmsr(MSR_MTRRfix4K_E0000, 0); -- wrmsr(MSR_MTRRfix4K_E8000, 0); -- wrmsr(MSR_MTRRfix4K_F0000, 0); -- wrmsr(MSR_MTRRfix4K_F8000, 0); -+ wrmsr_smp(MSR_MTRRfix16K_80000, u.val); -+ wrmsr_smp(MSR_MTRRfix16K_A0000, 0); -+ wrmsr_smp(MSR_MTRRfix4K_C0000, 0); -+ wrmsr_smp(MSR_MTRRfix4K_C8000, 0); -+ wrmsr_smp(MSR_MTRRfix4K_D0000, 0); -+ wrmsr_smp(MSR_MTRRfix4K_D8000, 0); -+ wrmsr_smp(MSR_MTRRfix4K_E0000, 0); -+ wrmsr_smp(MSR_MTRRfix4K_E8000, 0); -+ wrmsr_smp(MSR_MTRRfix4K_F0000, 0); -+ wrmsr_smp(MSR_MTRRfix4K_F8000, 0); - vbase = 0; - --vcnt; /* leave one mtrr for VRAM */ - for (i = 0; i < vcnt && vbase < ram_size; ++i) { - vmask = (1ull << 40) - 1; - while (vbase + vmask + 1 > ram_size) - vmask >>= 1; -- wrmsr(MTRRphysBase_MSR(i), vbase | 6); -- wrmsr(MTRRphysMask_MSR(i), (~vmask & 0xfffffff000ull) | 0x800); -+ wrmsr_smp(MTRRphysBase_MSR(i), vbase | 6); -+ wrmsr_smp(MTRRphysMask_MSR(i), (~vmask & 0xfffffff000ull) | 0x800); - vbase += vmask + 1; - } -- wrmsr(MSR_MTRRdefType, 0xc00); -+ wrmsr_smp(MSR_MTRRdefType, 0xc00); - } - - void ram_probe(void) -@@ -2263,6 +2280,8 @@ void rombios32_init(uint32_t *s3_resume_ - qemu_cfg_port = qemu_cfg_port_probe(); - #endif - -+ init_smp_msrs(); -+ - ram_probe(); - - cpu_probe(); -Index: bochs/bios/rombios32start.S -=================================================================== ---- bochs.orig/bios/rombios32start.S -+++ bochs/bios/rombios32start.S -@@ -49,6 +49,18 @@ _start: - smp_ap_boot_code_start: - xor %ax, %ax - mov %ax, %ds -+ -+ mov $SMP_MSR_ADDR, %ebx -+11: -+ mov 0(%ebx), %ecx -+ test %ecx, %ecx -+ jz 12f -+ mov 4(%ebx), %eax -+ mov 8(%ebx), %edx -+ wrmsr -+ add $12, %ebx -+ jmp 11b -+12: - lock incw smp_cpus - 1: - hlt - - |