From fcd5ace00b333ce31b11b02a2243dfbf39307f10 Mon Sep 17 00:00:00 2001 From: Eric Biederman Date: Thu, 14 Oct 2004 19:29:29 +0000 Subject: - Add new cvs code to cvs git-svn-id: svn://svn.coreboot.org/coreboot/trunk@1657 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1 --- src/cpu/amd/model_fxx/Config.lb | 10 + src/cpu/amd/model_fxx/apic_timer.c | 26 + src/cpu/amd/model_fxx/model_fxx_init.c | 369 +++++ src/cpu/amd/model_fxx/model_fxx_msr.h | 10 + src/cpu/amd/mtrr/Config.lb | 2 + src/cpu/amd/mtrr/amd_earlymtrr.c | 46 + src/cpu/amd/mtrr/amd_mtrr.c | 85 ++ src/cpu/amd/socket_940/Config.lb | 3 + src/cpu/amd/socket_940/chip.h | 4 + src/cpu/amd/socket_940/socket_940.c | 7 + src/cpu/intel/hyperthreading/Config.lb | 1 + src/cpu/intel/hyperthreading/intel_sibling.c | 74 + src/cpu/intel/microcode/Config.lb | 1 + src/cpu/intel/microcode/microcode.c | 111 ++ src/cpu/intel/model_6xx/Config.lb | 9 + src/cpu/intel/model_6xx/microcode_MU16810d.h | 140 ++ src/cpu/intel/model_6xx/microcode_MU16830c.h | 140 ++ src/cpu/intel/model_6xx/model_6xx_init.c | 61 + src/cpu/intel/model_f0x/Config.lb | 9 + src/cpu/intel/model_f0x/model_f0x_init.c | 55 + src/cpu/intel/model_f0x/multiplier.h | 55 + src/cpu/intel/model_f1x/Config.lb | 9 + src/cpu/intel/model_f1x/model_f1x_init.c | 55 + src/cpu/intel/model_f1x/multiplier.h | 55 + src/cpu/intel/model_f2x/Config.lb | 10 + src/cpu/intel/model_f2x/microcode_m02f2203.h | 513 +++++++ src/cpu/intel/model_f2x/microcode_m02f2410.h | 140 ++ src/cpu/intel/model_f2x/microcode_m02f2728.h | 513 +++++++ src/cpu/intel/model_f2x/microcode_m02f2734.h | 513 +++++++ src/cpu/intel/model_f2x/microcode_m02f2918.h | 513 +++++++ src/cpu/intel/model_f2x/model_f2x_init.c | 66 + src/cpu/intel/model_f3x/Config.lb | 10 + src/cpu/intel/model_f3x/microcode_M1DF340E.h | 1549 +++++++++++++++++++ src/cpu/intel/model_f3x/microcode_M1DF3413.h | 1554 ++++++++++++++++++++ src/cpu/intel/model_f3x/model_f3x_init.c | 59 + src/cpu/intel/slot_2/Config.lb | 3 + src/cpu/intel/slot_2/chip.h | 4 + src/cpu/intel/slot_2/slot_2.c | 7 + src/cpu/intel/socket_mPGA603/Config.lb | 6 + src/cpu/intel/socket_mPGA603/chip.h | 4 + .../intel/socket_mPGA603/socket_mPGA603_400Mhz.c | 7 + src/cpu/intel/socket_mPGA604_533Mhz/Config.lb | 4 + src/cpu/intel/socket_mPGA604_533Mhz/chip.h | 4 + .../socket_mPGA604_533Mhz/socket_mPGA604_533Mhz.c | 7 + src/cpu/intel/socket_mPGA604_800Mhz/Config.lb | 3 + src/cpu/intel/socket_mPGA604_800Mhz/chip.h | 4 + .../socket_mPGA604_800Mhz/socket_mPGA604_800Mhz.c | 7 + src/cpu/intel/thermal_monitoring/Config.lb | 3 + .../intel/thermal_monitoring/thermal_monitoring.h | 3 + src/cpu/x86/16bit/entry16.inc | 124 ++ src/cpu/x86/16bit/entry16.lds | 2 + src/cpu/x86/16bit/reset16.inc | 21 + src/cpu/x86/16bit/reset16.lds | 14 + src/cpu/x86/32bit/entry32.inc | 61 + src/cpu/x86/32bit/entry32.lds | 14 + src/cpu/x86/32bit/reset32.inc | 10 + src/cpu/x86/32bit/reset32.lds | 14 + src/cpu/x86/cache/Config.lb | 1 + src/cpu/x86/cache/cache.c | 10 + src/cpu/x86/fpu/Config.lb | 0 src/cpu/x86/fpu/enable_fpu.inc | 9 + src/cpu/x86/lapic/Config.lb | 3 + src/cpu/x86/lapic/boot_cpu.c | 10 + src/cpu/x86/lapic/lapic.c | 72 + src/cpu/x86/lapic/lapic_cpu_init.c | 316 ++++ src/cpu/x86/lapic/secondary.S | 53 + src/cpu/x86/mmx/Config.lb | 0 src/cpu/x86/mmx/disable_mmx.inc | 2 + src/cpu/x86/mmx/enable_mmx.inc | 6 + src/cpu/x86/mtrr/Config.lb | 1 + src/cpu/x86/mtrr/earlymtrr.c | 123 ++ src/cpu/x86/mtrr/mtrr.c | 378 +++++ src/cpu/x86/pae/Config.lb | 1 + src/cpu/x86/pae/pgtbl.c | 94 ++ src/cpu/x86/sse/Config.lb | 0 src/cpu/x86/sse/disable_sse.inc | 18 + src/cpu/x86/sse/enable_sse.inc | 14 + src/cpu/x86/tsc/Config.lb | 5 + src/cpu/x86/tsc/delay_tsc.c | 165 +++ 79 files changed, 8384 insertions(+) create mode 100644 src/cpu/amd/model_fxx/Config.lb create mode 100644 src/cpu/amd/model_fxx/apic_timer.c create mode 100644 src/cpu/amd/model_fxx/model_fxx_init.c create mode 100644 src/cpu/amd/model_fxx/model_fxx_msr.h create mode 100644 src/cpu/amd/mtrr/Config.lb create mode 100644 src/cpu/amd/mtrr/amd_earlymtrr.c create mode 100644 src/cpu/amd/mtrr/amd_mtrr.c create mode 100644 src/cpu/amd/socket_940/Config.lb create mode 100644 src/cpu/amd/socket_940/chip.h create mode 100644 src/cpu/amd/socket_940/socket_940.c create mode 100644 src/cpu/intel/hyperthreading/Config.lb create mode 100644 src/cpu/intel/hyperthreading/intel_sibling.c create mode 100644 src/cpu/intel/microcode/Config.lb create mode 100644 src/cpu/intel/microcode/microcode.c create mode 100644 src/cpu/intel/model_6xx/Config.lb create mode 100644 src/cpu/intel/model_6xx/microcode_MU16810d.h create mode 100644 src/cpu/intel/model_6xx/microcode_MU16830c.h create mode 100644 src/cpu/intel/model_6xx/model_6xx_init.c create mode 100644 src/cpu/intel/model_f0x/Config.lb create mode 100644 src/cpu/intel/model_f0x/model_f0x_init.c create mode 100644 src/cpu/intel/model_f0x/multiplier.h create mode 100644 src/cpu/intel/model_f1x/Config.lb create mode 100644 src/cpu/intel/model_f1x/model_f1x_init.c create mode 100644 src/cpu/intel/model_f1x/multiplier.h create mode 100644 src/cpu/intel/model_f2x/Config.lb create mode 100644 src/cpu/intel/model_f2x/microcode_m02f2203.h create mode 100644 src/cpu/intel/model_f2x/microcode_m02f2410.h create mode 100644 src/cpu/intel/model_f2x/microcode_m02f2728.h create mode 100644 src/cpu/intel/model_f2x/microcode_m02f2734.h create mode 100644 src/cpu/intel/model_f2x/microcode_m02f2918.h create mode 100644 src/cpu/intel/model_f2x/model_f2x_init.c create mode 100644 src/cpu/intel/model_f3x/Config.lb create mode 100644 src/cpu/intel/model_f3x/microcode_M1DF340E.h create mode 100644 src/cpu/intel/model_f3x/microcode_M1DF3413.h create mode 100644 src/cpu/intel/model_f3x/model_f3x_init.c create mode 100644 src/cpu/intel/slot_2/Config.lb create mode 100644 src/cpu/intel/slot_2/chip.h create mode 100644 src/cpu/intel/slot_2/slot_2.c create mode 100644 src/cpu/intel/socket_mPGA603/Config.lb create mode 100644 src/cpu/intel/socket_mPGA603/chip.h create mode 100644 src/cpu/intel/socket_mPGA603/socket_mPGA603_400Mhz.c create mode 100644 src/cpu/intel/socket_mPGA604_533Mhz/Config.lb create mode 100644 src/cpu/intel/socket_mPGA604_533Mhz/chip.h create mode 100644 src/cpu/intel/socket_mPGA604_533Mhz/socket_mPGA604_533Mhz.c create mode 100644 src/cpu/intel/socket_mPGA604_800Mhz/Config.lb create mode 100644 src/cpu/intel/socket_mPGA604_800Mhz/chip.h create mode 100644 src/cpu/intel/socket_mPGA604_800Mhz/socket_mPGA604_800Mhz.c create mode 100644 src/cpu/intel/thermal_monitoring/Config.lb create mode 100644 src/cpu/intel/thermal_monitoring/thermal_monitoring.h create mode 100644 src/cpu/x86/16bit/entry16.inc create mode 100644 src/cpu/x86/16bit/entry16.lds create mode 100644 src/cpu/x86/16bit/reset16.inc create mode 100644 src/cpu/x86/16bit/reset16.lds create mode 100644 src/cpu/x86/32bit/entry32.inc create mode 100644 src/cpu/x86/32bit/entry32.lds create mode 100644 src/cpu/x86/32bit/reset32.inc create mode 100644 src/cpu/x86/32bit/reset32.lds create mode 100644 src/cpu/x86/cache/Config.lb create mode 100644 src/cpu/x86/cache/cache.c create mode 100644 src/cpu/x86/fpu/Config.lb create mode 100644 src/cpu/x86/fpu/enable_fpu.inc create mode 100644 src/cpu/x86/lapic/Config.lb create mode 100644 src/cpu/x86/lapic/boot_cpu.c create mode 100644 src/cpu/x86/lapic/lapic.c create mode 100644 src/cpu/x86/lapic/lapic_cpu_init.c create mode 100644 src/cpu/x86/lapic/secondary.S create mode 100644 src/cpu/x86/mmx/Config.lb create mode 100644 src/cpu/x86/mmx/disable_mmx.inc create mode 100644 src/cpu/x86/mmx/enable_mmx.inc create mode 100644 src/cpu/x86/mtrr/Config.lb create mode 100644 src/cpu/x86/mtrr/earlymtrr.c create mode 100644 src/cpu/x86/mtrr/mtrr.c create mode 100644 src/cpu/x86/pae/Config.lb create mode 100644 src/cpu/x86/pae/pgtbl.c create mode 100644 src/cpu/x86/sse/Config.lb create mode 100644 src/cpu/x86/sse/disable_sse.inc create mode 100644 src/cpu/x86/sse/enable_sse.inc create mode 100644 src/cpu/x86/tsc/Config.lb create mode 100644 src/cpu/x86/tsc/delay_tsc.c (limited to 'src/cpu') diff --git a/src/cpu/amd/model_fxx/Config.lb b/src/cpu/amd/model_fxx/Config.lb new file mode 100644 index 0000000000..945cfea5a7 --- /dev/null +++ b/src/cpu/amd/model_fxx/Config.lb @@ -0,0 +1,10 @@ +dir /cpu/x86/tsc +dir /cpu/x86/fpu +dir /cpu/x86/mmx +dir /cpu/x86/sse +dir /cpu/x86/lapic +dir /cpu/x86/cache +dir /cpu/x86/pae +dir /cpu/amd/mtrr +driver model_fxx_init.o +object apic_timer.o diff --git a/src/cpu/amd/model_fxx/apic_timer.c b/src/cpu/amd/model_fxx/apic_timer.c new file mode 100644 index 0000000000..5a81f912c5 --- /dev/null +++ b/src/cpu/amd/model_fxx/apic_timer.c @@ -0,0 +1,26 @@ +#include +#include +#include +#include + +void init_timer(void) +{ + /* Set the apic timer to no interrupts and periodic mode */ + lapic_write(LAPIC_LVTT, (1 << 17)|(1<< 16)|(0 << 12)|(0 << 0)); + /* Set the divider to 1, no divider */ + lapic_write(LAPIC_TDCR, LAPIC_TDR_DIV_1); + /* Set the initial counter to 0xffffffff */ + lapic_write(LAPIC_TMICT, 0xffffffff); +} + +void udelay(unsigned usecs) +{ + uint32_t start, value, ticks; + /* Calculate the number of ticks to run, our FSB runs a 200Mhz */ + ticks = usecs * 200; + start = lapic_read(LAPIC_TMCCT); + do { + value = lapic_read(LAPIC_TMCCT); + } while((start - value) < ticks); + +} diff --git a/src/cpu/amd/model_fxx/model_fxx_init.c b/src/cpu/amd/model_fxx/model_fxx_init.c new file mode 100644 index 0000000000..e2c864f06a --- /dev/null +++ b/src/cpu/amd/model_fxx/model_fxx_init.c @@ -0,0 +1,369 @@ +/* Needed so the AMD K8 runs correctly. */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "../../../northbridge/amd/amdk8/amdk8.h" +#include "../../../northbridge/amd/amdk8/cpu_rev.c" +#include +#include +#include +#include +#include "model_fxx_msr.h" + +#define MCI_STATUS 0x401 + +static inline msr_t rdmsr_amd(unsigned index) +{ + msr_t result; + __asm__ __volatile__ ( + "rdmsr" + : "=a" (result.lo), "=d" (result.hi) + : "c" (index), "D" (0x9c5a203a) + ); + return result; +} + +static inline void wrmsr_amd(unsigned index, msr_t msr) +{ + __asm__ __volatile__ ( + "wrmsr" + : /* No outputs */ + : "c" (index), "a" (msr.lo), "d" (msr.hi), "D" (0x9c5a203a) + ); +} + + + +#define MTRR_COUNT 8 +#define ZERO_CHUNK_KB 0x800UL /* 2M */ +#define TOLM_KB 0x400000UL + +struct mtrr { + msr_t base; + msr_t mask; +}; +struct mtrr_state { + struct mtrr mtrrs[MTRR_COUNT]; + msr_t top_mem, top_mem2; + msr_t def_type; +}; + +static void save_mtrr_state(struct mtrr_state *state) +{ + int i; + for(i = 0; i < MTRR_COUNT; i++) { + state->mtrrs[i].base = rdmsr(MTRRphysBase_MSR(i)); + state->mtrrs[i].mask = rdmsr(MTRRphysMask_MSR(i)); + } + state->top_mem = rdmsr(TOP_MEM); + state->top_mem2 = rdmsr(TOP_MEM2); + state->def_type = rdmsr(MTRRdefType_MSR); +} + +static void restore_mtrr_state(struct mtrr_state *state) +{ + int i; + disable_cache(); + + for(i = 0; i < MTRR_COUNT; i++) { + wrmsr(MTRRphysBase_MSR(i), state->mtrrs[i].base); + wrmsr(MTRRphysMask_MSR(i), state->mtrrs[i].mask); + } + wrmsr(TOP_MEM, state->top_mem); + wrmsr(TOP_MEM2, state->top_mem2); + wrmsr(MTRRdefType_MSR, state->def_type); + + enable_cache(); +} + + +#if 0 +static void print_mtrr_state(struct mtrr_state *state) +{ + int i; + for(i = 0; i < MTRR_COUNT; i++) { + printk_debug("var mtrr %d: %08x%08x mask: %08x%08x\n", + i, + state->mtrrs[i].base.hi, state->mtrrs[i].base.lo, + state->mtrrs[i].mask.hi, state->mtrrs[i].mask.lo); + } + printk_debug("top_mem: %08x%08x\n", + state->top_mem.hi, state->top_mem.lo); + printk_debug("top_mem2: %08x%08x\n", + state->top_mem2.hi, state->top_mem2.lo); + printk_debug("def_type: %08x%08x\n", + state->def_type.hi, state->def_type.lo); +} +#endif + +static void set_init_ecc_mtrrs(void) +{ + msr_t msr; + int i; + disable_cache(); + + /* First clear all of the msrs to be safe */ + for(i = 0; i < MTRR_COUNT; i++) { + msr_t zero; + zero.lo = zero.hi = 0; + wrmsr(MTRRphysBase_MSR(i), zero); + wrmsr(MTRRphysMask_MSR(i), zero); + } + + /* Write back cache the first 1MB */ + msr.hi = 0x00000000; + msr.lo = 0x00000000 | MTRR_TYPE_WRBACK; + wrmsr(MTRRphysBase_MSR(0), msr); + msr.hi = 0x000000ff; + msr.lo = ~((CONFIG_LB_MEM_TOPK << 10) - 1) | 0x800; + wrmsr(MTRRphysMask_MSR(0), msr); + + /* Set the default type to write combining */ + msr.hi = 0x00000000; + msr.lo = 0xc00 | MTRR_TYPE_WRCOMB; + wrmsr(MTRRdefType_MSR, msr); + + /* Set TOP_MEM to 4G */ + msr.hi = 0x00000001; + msr.lo = 0x00000000; + wrmsr(TOP_MEM, msr); + + enable_cache(); +} + + +static void init_ecc_memory(void) +{ + unsigned long startk, begink, endk; + unsigned long basek; + struct mtrr_state mtrr_state; + device_t f1_dev, f2_dev, f3_dev; + int node_id; + int enable_scrubbing; + uint32_t dcl; + + /* For now there is a 1-1 mapping between node_id and cpu_id */ + node_id = lapicid(); + + f1_dev = dev_find_slot(0, PCI_DEVFN(0x18 + node_id, 1)); + if (!f1_dev) { + die("Cannot find cpu function 1\n"); + } + f2_dev = dev_find_slot(0, PCI_DEVFN(0x18 + node_id, 2)); + if (!f2_dev) { + die("Cannot find cpu function 2\n"); + } + f3_dev = dev_find_slot(0, PCI_DEVFN(0x18 + node_id, 3)); + if (!f3_dev) { + die("Cannot find cpu function 3\n"); + } + + /* See if we scrubbing should be enabled */ + enable_scrubbing = 1; + get_option(&enable_scrubbing, "hw_scrubber"); + + /* Enable cache scrubbing at the lowest possible rate */ + if (enable_scrubbing) { + pci_write_config32(f3_dev, SCRUB_CONTROL, + (SCRUB_84ms << 16) | (SCRUB_84ms << 8) | (SCRUB_NONE << 0)); + } else { + pci_write_config32(f3_dev, SCRUB_CONTROL, + (SCRUB_NONE << 16) | (SCRUB_NONE << 8) | (SCRUB_NONE << 0)); + printk_debug("Scrubbing Disabled\n"); + } + + + /* If ecc support is not enabled don't touch memory */ + dcl = pci_read_config32(f2_dev, DRAM_CONFIG_LOW); + if (!(dcl & DCL_DimmEccEn)) { + return; + } + + startk = (pci_read_config32(f1_dev, 0x40 + (node_id*8)) & 0xffff0000) >> 2; + endk = ((pci_read_config32(f1_dev, 0x44 + (node_id*8)) & 0xffff0000) >> 2) + 0x4000; + + /* Don't start too early */ + begink = startk; + if (begink < CONFIG_LB_MEM_TOPK) { + begink = CONFIG_LB_MEM_TOPK; + } + printk_debug("Clearing memory %uK - %uK: ", startk, endk); + + /* Save the normal state */ + save_mtrr_state(&mtrr_state); + + /* Switch to the init ecc state */ + set_init_ecc_mtrrs(); + disable_lapic(); + + /* Walk through 2M chunks and zero them */ + for(basek = begink; basek < endk; basek = ((basek + ZERO_CHUNK_KB) & ~(ZERO_CHUNK_KB - 1))) { + unsigned long limitk; + unsigned long size; + void *addr; + + /* Report every 64M */ + if ((basek % (64*1024)) == 0) { + /* Restore the normal state */ + map_2M_page(0); + restore_mtrr_state(&mtrr_state); + enable_lapic(); + + /* Print a status message */ + printk_debug("%c", (basek >= TOLM_KB)?'+':'-'); + + /* Return to the initialization state */ + set_init_ecc_mtrrs(); + disable_lapic(); + } + limitk = (basek + ZERO_CHUNK_KB) & ~(ZERO_CHUNK_KB - 1); + if (limitk > endk) { + limitk = endk; + } + size = (limitk - basek) << 10; + addr = map_2M_page(basek >> 11); + addr = (void *)(((uint32_t)addr) | ((basek & 0x7ff) << 10)); + if (addr == MAPPING_ERROR) { + continue; + } + + /* clear memory 2M (limitk - basek) */ + clear_memory(addr, size); + } + /* Restore the normal state */ + map_2M_page(0); + restore_mtrr_state(&mtrr_state); + enable_lapic(); + + /* Set the scrub base address registers */ + pci_write_config32(f3_dev, SCRUB_ADDR_LOW, startk << 10); + pci_write_config32(f3_dev, SCRUB_ADDR_HIGH, startk >> 22); + + /* Enable the scrubber? */ + if (enable_scrubbing) { + /* Enable scrubbing at the lowest possible rate */ + pci_write_config32(f3_dev, SCRUB_CONTROL, + (SCRUB_84ms << 16) | (SCRUB_84ms << 8) | (SCRUB_84ms << 0)); + } + + printk_debug(" done\n"); +} + +static inline void k8_errata(void) +{ + msr_t msr; + if (is_cpu_pre_c0()) { + /* Erratum 63... */ + msr = rdmsr(HWCR_MSR); + msr.lo |= (1 << 6); + wrmsr(HWCR_MSR, msr); + + /* Erratum 69... */ + msr = rdmsr_amd(BU_CFG_MSR); + msr.hi |= (1 << (45 - 32)); + wrmsr_amd(BU_CFG_MSR, msr); + + /* Erratum 81... */ + msr = rdmsr_amd(DC_CFG_MSR); + msr.lo |= (1 << 10); + wrmsr_amd(DC_CFG_MSR, msr); + + } + /* I can't touch this msr on early buggy cpus */ + if (!is_cpu_pre_b3()) { + + /* Erratum 89 ... */ + msr = rdmsr(NB_CFG_MSR); + msr.lo |= 1 << 3; + + if (!is_cpu_pre_c0()) { + /* Erratum 86 Disable data masking on C0 and + * later processor revs. + * FIXME this is only needed if ECC is enabled. + */ + msr.hi |= 1 << (36 - 32); + } + wrmsr(NB_CFG_MSR, msr); + } + + /* Erratum 97 ... */ + if (!is_cpu_pre_c0()) { + msr = rdmsr_amd(DC_CFG_MSR); + msr.lo |= 1 << 3; + wrmsr_amd(DC_CFG_MSR, msr); + } + + /* Erratum 94 ... */ + msr = rdmsr_amd(IC_CFG_MSR); + msr.lo |= 1 << 11; + wrmsr_amd(IC_CFG_MSR, msr); + + /* Erratum 91 prefetch miss is handled in the kernel */ +} + +void model_fxx_init(device_t dev) +{ + unsigned long mmio_basek, tomk; + unsigned long i; + msr_t msr; + + /* Turn on caching if we haven't already */ + x86_enable_cache(); + amd_setup_mtrrs(); + x86_mtrr_check(); + + disable_cache(); + + /* zero the machine check error status registers */ + msr.lo = 0; + msr.hi = 0; + for(i=0; i<5; i++) { + wrmsr(MCI_STATUS + (i*4),msr); + } + + k8_errata(); + + enable_cache(); + + /* Is this a bad location? In particular can another node prefecth + * data from this node before we have initialized it? + */ + init_ecc_memory(); + + /* Enable the local cpu apics */ + setup_lapic(); +} + +static struct device_operations cpu_dev_ops = { + .init = model_fxx_init, +}; +static struct cpu_device_id cpu_table[] = { + { X86_VENDOR_AMD, 0xf50 }, /* B3 */ + { X86_VENDOR_AMD, 0xf51 }, /* SH7-B3 */ + { X86_VENDOR_AMD, 0xf58 }, /* SH7-C0 */ + { X86_VENDOR_AMD, 0xf48 }, +#if 1 + { X86_VENDOR_AMD, 0xf5A }, /* SH7-CG */ + { X86_VENDOR_AMD, 0xf4A }, + { X86_VENDOR_AMD, 0xf7A }, + { X86_VENDOR_AMD, 0xfc0 }, /* DH7-CG */ + { X86_VENDOR_AMD, 0xfe0 }, + { X86_VENDOR_AMD, 0xff0 }, + { X86_VENDOR_AMD, 0xf82 }, /* CH7-CG */ + { X86_VENDOR_AMD, 0xfb2 }, +#endif + { 0, 0 }, +}; +static struct cpu_driver model_fxx __cpu_driver = { + .ops = &cpu_dev_ops, + .id_table = cpu_table, +}; diff --git a/src/cpu/amd/model_fxx/model_fxx_msr.h b/src/cpu/amd/model_fxx/model_fxx_msr.h new file mode 100644 index 0000000000..930054a9ba --- /dev/null +++ b/src/cpu/amd/model_fxx/model_fxx_msr.h @@ -0,0 +1,10 @@ +#ifndef CPU_AMD_MODEL_FXX_MSR_H +#define CPU_AMD_MODEL_FXX_MSR_H + +#define HWCR_MSR 0xC0010015 +#define NB_CFG_MSR 0xC001001f +#define IC_CFG_MSR 0xC0011021 +#define DC_CFG_MSR 0xC0011022 +#define BU_CFG_MSR 0xC0011023 + +#endif /* CPU_AMD_MODEL_FXX_MSR_H */ diff --git a/src/cpu/amd/mtrr/Config.lb b/src/cpu/amd/mtrr/Config.lb new file mode 100644 index 0000000000..eab703c6c0 --- /dev/null +++ b/src/cpu/amd/mtrr/Config.lb @@ -0,0 +1,2 @@ +dir /cpu/x86/mtrr +object amd_mtrr.c \ No newline at end of file diff --git a/src/cpu/amd/mtrr/amd_earlymtrr.c b/src/cpu/amd/mtrr/amd_earlymtrr.c new file mode 100644 index 0000000000..ca19a57faa --- /dev/null +++ b/src/cpu/amd/mtrr/amd_earlymtrr.c @@ -0,0 +1,46 @@ +#ifndef AMD_EARLYMTRR_C +#define AMD_EARLYMTRR_C +#include +#include +#include "cpu/x86/mtrr/earlymtrr.c" + + +static void amd_early_mtrr_init(void) +{ + static const unsigned long mtrr_msrs[] = { + /* fixed mtrr */ + 0x250, 0x258, 0x259, + 0x268, 0x269, 0x26A, + 0x26B, 0x26C, 0x26D, + 0x26E, 0x26F, + /* var mtrr */ + 0x200, 0x201, 0x202, 0x203, + 0x204, 0x205, 0x206, 0x207, + 0x208, 0x209, 0x20A, 0x20B, + 0x20C, 0x20D, 0x20E, 0x20F, + /* var iorr */ + 0xC0010016, 0xC0010017, 0xC0010018, 0xC0010019, + /* mem top */ + 0xC001001A, 0xC001001D, + /* NULL end of table */ + 0 + }; + msr_t msr; + + disable_cache(); + do_early_mtrr_init(mtrr_msrs); + + /* Enable memory access for 0 - 1MB using top_mem */ + msr.hi = 0; + msr.lo = (((CONFIG_LB_MEM_TOPK << 10) + TOP_MEM_MASK) & ~TOP_MEM_MASK); + wrmsr(TOP_MEM, msr); + + /* Enable the MTRRs in SYSCFG */ + msr = rdmsr(SYSCFG_MSR); + msr.lo |= SYSCFG_MSR_MtrrVarDramEn; + wrmsr(SYSCFG_MSR, msr); + + enable_cache(); +} + +#endif /* AMD_EARLYMTRR_C */ diff --git a/src/cpu/amd/mtrr/amd_mtrr.c b/src/cpu/amd/mtrr/amd_mtrr.c new file mode 100644 index 0000000000..7c8d50ae68 --- /dev/null +++ b/src/cpu/amd/mtrr/amd_mtrr.c @@ -0,0 +1,85 @@ +#include +#include +#include +#include +#include +#include + +static unsigned long resk(uint64_t value) +{ + unsigned long resultk; + if (value < (1ULL << 42)) { + resultk = value >> 10; + } + else { + resultk = 0xffffffff; + } + return resultk; +} + +void amd_setup_mtrrs(void) +{ + unsigned long mmio_basek, tomk; + unsigned long i; + device_t dev; + msr_t msr; + + x86_setup_mtrrs(); + + /* Except for the PCI MMIO hole just before 4GB there are no + * significant holes in the address space, so just account + * for those two and move on. + */ + mmio_basek = tomk = 0; + for(dev = all_devices; dev; dev = dev->next) { + struct resource *res, *last; + last = &dev->resource[dev->resources]; + for(res = &dev->resource[0]; res < last; res++) { + unsigned long topk; + if (!(res->flags & IORESOURCE_MEM) || + (!(res->flags & IORESOURCE_CACHEABLE))) { + continue; + } + topk = resk(res->base + res->size); + if (tomk < topk) { + tomk = topk; + } + if ((topk < 4*1024*1024) && (mmio_basek < topk)) { + mmio_basek = topk; + } + } + } + if (mmio_basek > tomk) { + mmio_basek = tomk; + } + /* Round mmio_basek down to the nearst size that will fit in TOP_MEM */ + mmio_basek = mmio_basek & ~TOP_MEM_MASK_KB; + /* Round tomk up to the next greater size that will fit in TOP_MEM */ + tomk = (tomk + TOP_MEM_MASK_KB) & ~TOP_MEM_MASK_KB; + + disable_cache(); + + /* Setup TOP_MEM */ + msr.hi = mmio_basek >> 22; + msr.lo = mmio_basek << 10; + wrmsr(TOP_MEM, msr); + + /* Setup TOP_MEM2 */ + msr.hi = tomk >> 22; + msr.lo = tomk << 10; + wrmsr(TOP_MEM2, msr); + + /* zero the IORR's before we enable to prevent + * undefined side effects. + */ + msr.lo = msr.hi = 0; + for(i = IORR_FIRST; i <= IORR_LAST; i++) { + wrmsr(i, msr); + } + + msr = rdmsr(SYSCFG_MSR); + msr.lo |= SYSCFG_MSR_MtrrVarDramEn | SYSCFG_MSR_TOM2En; + wrmsr(SYSCFG_MSR, msr); + + enable_cache(); +} diff --git a/src/cpu/amd/socket_940/Config.lb b/src/cpu/amd/socket_940/Config.lb new file mode 100644 index 0000000000..9f0e6c689a --- /dev/null +++ b/src/cpu/amd/socket_940/Config.lb @@ -0,0 +1,3 @@ +config chip.h +object socket_940.o +dir /cpu/amd/model_fxx diff --git a/src/cpu/amd/socket_940/chip.h b/src/cpu/amd/socket_940/chip.h new file mode 100644 index 0000000000..69002a27f1 --- /dev/null +++ b/src/cpu/amd/socket_940/chip.h @@ -0,0 +1,4 @@ +extern struct chip_control cpu_amd_socket_940_control; + +struct cpu_amd_socket_940_config { +}; diff --git a/src/cpu/amd/socket_940/socket_940.c b/src/cpu/amd/socket_940/socket_940.c new file mode 100644 index 0000000000..91bfc37ec8 --- /dev/null +++ b/src/cpu/amd/socket_940/socket_940.c @@ -0,0 +1,7 @@ +#include +#include "chip.h" + + +struct chip_control cpu_amd_socket_940_control = { + .name = "socket 940", +}; diff --git a/src/cpu/intel/hyperthreading/Config.lb b/src/cpu/intel/hyperthreading/Config.lb new file mode 100644 index 0000000000..dce4044835 --- /dev/null +++ b/src/cpu/intel/hyperthreading/Config.lb @@ -0,0 +1 @@ +object intel_sibling.o diff --git a/src/cpu/intel/hyperthreading/intel_sibling.c b/src/cpu/intel/hyperthreading/intel_sibling.c new file mode 100644 index 0000000000..001fea81b2 --- /dev/null +++ b/src/cpu/intel/hyperthreading/intel_sibling.c @@ -0,0 +1,74 @@ +#include +#include +#include +#include +#include +#include +#include + +static int first_time = 1; +static int disable_siblings = !CONFIG_LOGICAL_CPUS; + +void intel_sibling_init(device_t cpu) +{ + unsigned i, siblings; + struct cpuid_result result; + + /* On the bootstrap processor see if I want sibling cpus enabled */ + if (first_time) { + first_time = 0; + get_option(&disable_siblings, "hyper_threading"); + } + result = cpuid(1); + /* Is hypethreading supported */ + if (!(result.edx & (1 << 28))) { + return; + } + /* See how many sibling cpus we have */ + siblings = (result.ebx >> 16) & 0xff; + if (siblings < 1) { + siblings = 1; + } + +#if 1 + printk_debug("CPU: %u %d siblings\n", + cpu->path.u.apic.apic_id, + siblings); +#endif + + /* See if I am a sibling cpu */ + if (cpu->path.u.apic.apic_id & (siblings -1)) { + if (disable_siblings) { + cpu->enabled = 0; + } + return; + } + + /* I am the primary cpu start up my siblings */ + for(i = 1; i < siblings; i++) { + struct device_path cpu_path; + device_t new; + unsigned long count; + /* Build the cpu device path */ + cpu_path.type = DEVICE_PATH_APIC; + cpu_path.u.apic.apic_id = cpu->path.u.apic.apic_id + i; + + + /* Allocate the new cpu device structure */ + new = alloc_dev(cpu->bus, &cpu_path); + + if (!new) { + continue; + } + +#if 1 + printk_debug("CPU: %u has sibling %u\n", + cpu->path.u.apic.apic_id, + new->path.u.apic.apic_id); +#endif + /* Start the new cpu */ + start_cpu(new); + } + +} + diff --git a/src/cpu/intel/microcode/Config.lb b/src/cpu/intel/microcode/Config.lb new file mode 100644 index 0000000000..f19d210a58 --- /dev/null +++ b/src/cpu/intel/microcode/Config.lb @@ -0,0 +1 @@ +object microcode.o \ No newline at end of file diff --git a/src/cpu/intel/microcode/microcode.c b/src/cpu/intel/microcode/microcode.c new file mode 100644 index 0000000000..38739babe6 --- /dev/null +++ b/src/cpu/intel/microcode/microcode.c @@ -0,0 +1,111 @@ +/* microcode.c: Microcode update for PIII and later CPUS + */ + +#include +#include +#include +#include +#include + +struct microcode { + uint32_t hdrver; + uint32_t rev; + uint32_t date; + uint32_t sig; + + uint32_t cksum; + uint32_t ldrver; + uint32_t pf; + + uint32_t data_size; + uint32_t total_size; + + uint32_t reserved[3]; + uint32_t bits[1012]; +}; + + +static inline uint32_t read_microcode_rev(void) +{ + /* Some Intel Cpus can be very finicky about the + * cpuid sequence used. So this is implemented in + * assembly so that it works reliably. + */ + msr_t msr; + __asm__ volatile ( + "wrmsr\n\t" + "xorl %%eax, %%eax\n\t" + "xorl %%edx, %%edx\n\t" + "movl $0x8b, %%ecx\n\t" + "wrmsr\n\t" + "movl $0x01, %%eax\n\t" + "cpuid\n\t" + "movl $0x08b, %%ecx\n\t" + "rdmsr \n\t" + : /* outputs */ + "=a" (msr.lo), "=d" (msr.hi) + : /* inputs */ + : /* trashed */ + "ecx" + ); + return msr.hi; +} + +void intel_update_microcode(void *microcode_updates) +{ + unsigned int eax; + unsigned int pf, rev, sig; + unsigned int x86_model, x86_family; + struct microcode *m; + char *c; + msr_t msr; + + /* cpuid sets msr 0x8B iff a microcode update has been loaded. */ + msr.lo = 0; + msr.hi = 0; + wrmsr(0x8B, msr); + eax = cpuid_eax(1); + msr = rdmsr(0x8B); + rev = msr.hi; + x86_model = (eax >>4) & 0x0f; + x86_family = (eax >>8) & 0x0f; + sig = eax; + + pf = 0; + if ((x86_model >= 5)||(x86_family>6)) { + msr = rdmsr(0x17); + pf = 1 << ((msr.hi >> 18) & 7); + } + print_debug("microcode_info: sig = 0x"); + print_debug_hex32(sig); + print_debug(" pf=0x"); + print_debug_hex32(pf); + print_debug(" rev = 0x"); + print_debug_hex32(rev); + print_debug("\r\n"); + + m = microcode_updates; + for(c = microcode_updates; m->hdrver; m = (struct microcode *)c) { + if ((m->sig == sig) && (m->pf & pf)) { + unsigned int new_rev; + msr.lo = (unsigned long)(&m->bits) & 0xffffffff; + msr.hi = 0; + wrmsr(0x79, msr); + + /* Read back the new microcode version */ + new_rev = read_microcode_rev(); + + print_debug("microcode updated to revision: "); + print_debug_hex32(new_rev); + print_debug(" from revision "); + print_debug_hex32(rev); + print_debug("\r\n"); + break; + } + if (m->total_size) { + c += m->total_size; + } else { + c += 2048; + } + } +} diff --git a/src/cpu/intel/model_6xx/Config.lb b/src/cpu/intel/model_6xx/Config.lb new file mode 100644 index 0000000000..5b1fde1ba5 --- /dev/null +++ b/src/cpu/intel/model_6xx/Config.lb @@ -0,0 +1,9 @@ +dir /cpu/x86/tsc +dir /cpu/x86/mtrr +dir /cpu/x86/fpu +dir /cpu/x86/mmx +dir /cpu/x86/sse +dir /cpu/x86/lapic +dir /cpu/x86/cache +dir /cpu/intel/microcode +driver model_6xx_init.o diff --git a/src/cpu/intel/model_6xx/microcode_MU16810d.h b/src/cpu/intel/model_6xx/microcode_MU16810d.h new file mode 100644 index 0000000000..ce207efa76 --- /dev/null +++ b/src/cpu/intel/model_6xx/microcode_MU16810d.h @@ -0,0 +1,140 @@ + /* + Copyright Intel Corporation, 1995, 96, 97, 98, 99, 2000. + + These microcode updates are distributed for the sole purpose of + installation in the BIOS or Operating System of computer systems + which include an Intel P6 family microprocessor sold or distributed + to or by you. You are authorized to copy and install this material + on such systems. You are not authorized to use this material for + any other purpose. + */ + +/* MU16810d.inc */ + 0x00000001, 0x0000000d, 0x09211999, 0x00000681, + 0x31708166, 0x00000001, 0x00000001, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x710e5240, 0xab8bc2df, 0x6e652d5a, 0xcc16718b, + 0xaa5c7d1a, 0x43ac1ba0, 0xbdf8684e, 0x82565fa7, + 0x1d108edc, 0x96d2d5a2, 0x85f783a0, 0x16e4cba1, + 0xbc311213, 0xc36c45a2, 0x443b8d2b, 0xfdc5e9ce, + 0xbb6f8637, 0x47011b8b, 0xf3898e4a, 0xb3e90f68, + 0x60af6e3a, 0xff9d3de4, 0x9fb2333c, 0x5a1a39ce, + 0xffd75d72, 0xa60cc2c0, 0x5729267c, 0xfc6d2da7, + 0x8a2c8ae7, 0x71aba5ba, 0xb639ff31, 0x8d1642b8, + 0x3aa67efc, 0x9f786473, 0xaedec560, 0x1acb694f, + 0x97582a6f, 0x8dc17ea5, 0x19636cfe, 0xb5032243, + 0xc46f764f, 0x3a5d3833, 0xf3d1a2b9, 0xc22e59be, + 0x15e0b2f3, 0xe58eff24, 0xc679600d, 0x21a3a845, + 0xc11cc921, 0xed2f5061, 0x2d4db0d1, 0xcc0cc78f, + 0x80197c08, 0x20739d8a, 0xc92ec866, 0xacef343b, + 0x47c0913a, 0xee8a69e4, 0xa7b0157e, 0x4c3607a9, + 0xcc7ff7ea, 0xb0a36667, 0x41d1bcf0, 0xf54c42d2, + 0x946c590e, 0x6da18fe9, 0xf20df0e6, 0x984a2160, + 0x479becd3, 0xfb11dd36, 0xbb816653, 0x60c605c2, + 0xf52efe8b, 0x90a9f863, 0x69654bfa, 0xf0f03f7c, + 0xbf0498d5, 0x68708d82, 0xdab94924, 0x92371217, + 0x603feed7, 0xf0ff8329, 0x9c8769df, 0x6d40ab73, + 0xd8fd132a, 0x9335543f, 0x40fd3abb, 0xf25665a0, + 0x93fe56a6, 0x682a3b24, 0xf3a0f14a, 0x97e92084, + 0x4e8736a3, 0xf322db48, 0xb65de2ad, 0x6af68474, + 0xfd6dae0d, 0x953afb0e, 0x6ef22a82, 0xfa7a3d7b, + 0xb5fe683f, 0x647579c3, 0xd184e7db, 0x99ec7c97, + 0x66486a26, 0xf08c8290, 0x94eb3fce, 0x6305e16e, + 0xd61dd210, 0x9b8bdbba, 0x41a4b4f5, 0xfca38a75, + 0x9c55c7a4, 0x6a4b1f02, 0xf277077a, 0x900e3d03, + 0x4f173146, 0xf6fbf7c8, 0xb2636cb2, 0x6329a9d7, + 0xf2697eb4, 0x90f80f6f, 0x65de6167, 0xfc6cd065, + 0xb4326188, 0x67507c3a, 0xdf3179ff, 0x91207c0b, + 0x6408ad58, 0xf7e7d2fe, 0x999af7c0, 0x6a994828, + 0xdaecedf4, 0x93cba457, 0x4d924b31, 0xf12b5ae1, + 0x9563d541, 0x65bd28f8, 0xfa87a363, 0x983adc3d, + 0x45c4f64d, 0xfae3e1ef, 0xb2eb287f, 0x6050f699, + 0xfb28cfb6, 0x999b1d45, 0x65027980, 0xf4e507d0, + 0xbbd059b7, 0x64cb2688, 0xd29dff15, 0x90927c2c, + 0x6d52471a, 0xf64fc745, 0x9e4050ff, 0x68b66e3f, + 0xd0a1dd96, 0x9fe8a5a3, 0x454c936b, 0xf926115d, + 0x9bfb60ff, 0x604049aa, 0xf3509e5c, 0x9d6cf26f, + 0x4d777c5a, 0xfd7cd5ff, 0xb15d4f35, 0x6b1aa6e3, + 0xfa279f20, 0x94916fae, 0x9b04dbcc, 0x600defd9, + 0xf2977cd8, 0x65fa64be, 0x968feaee, 0xc11681af, + 0x66568af6, 0xa539a4ee, 0xcfed5cb1, 0x108445de, + 0xa603dfdd, 0xbf5ada02, 0x14b868c5, 0xb2d3b8d2, + 0xbabf3637, 0x0c25bfbc, 0xb7a4c247, 0xf2837e05, + 0x062ce963, 0xfcb65c46, 0xc6d190e7, 0x4dfce123, + 0xcb0bf4c7, 0x8bff9d9d, 0x6794e002, 0x2879661e, + 0xa5e93199, 0x77be4be8, 0x22fe3324, 0xb943e4ef, + 0x73463d52, 0x31471050, 0xb68fd63f, 0x84cad24f, + 0x343d922b, 0x42b9ab31, 0x88ee1549, 0xe913e2ab, + 0x4a127048, 0x5057f79f, 0x636eb512, 0x42e02f9c, + 0xd3a8b863, 0x9bc40609, 0x4a18edb5, 0x86a4bdaa, + 0x91819a4b, 0x12a11e17, 0x8a6d7f21, 0xf42998d9, + 0x132b6bbd, 0xe3239feb, 0xf52519d7, 0xada08128, + 0xe6febacf, 0x44e15a80, 0xa977610a, 0xf56a8665, + 0x4693b6f0, 0xb8386320, 0xfcf7d071, 0xb8a1128d, + 0xb2a45d18, 0x075a2095, 0x98ebde53, 0xe8762eaf, + 0x838ba96f, 0x4f0239d3, 0xf295395e, 0xb3c38631, + 0x7ea7a143, 0x157a4e43, 0x46f8173f, 0xfbc18d4a, + 0xc401e17a, 0xc4620358, 0xd2ab5437, 0xa01db06f, + 0x58ce91fc, 0x850de1a3, 0x9b542dba, 0xee77f038, + 0xddd3ced6, 0xc225d2ce, 0x63a3f765, 0x3342a06c, + 0x6a780c2f, 0xfaa925b2, 0x366ebeec, 0xbcc9abea, + 0xc7b3fa4e, 0xf4f1123d, 0x5198702c, 0x3e3458b7, + 0x0b1ce9a1, 0x51b1bd7f, 0x711e791e, 0x927d8bed, + 0x91dbaea9, 0x7eefbda9, 0x7a19edd9, 0xdf7b8dce, + 0x5bb40613, 0x0b0c1e0f, 0x85b82c98, 0x18da4dc1, + 0xc5fd78ac, 0x57c1e31d, 0x4c4001b5, 0xe31d2643, + 0xa6afbf58, 0xad200e68, 0xf0114ba4, 0xd6a620f2, + 0xc753a720, 0xac9022a0, 0x28a41f01, 0x22a4ba95, + 0xc00b7531, 0x23d42795, 0xcd836a86, 0x90262708, + 0x3292cad0, 0x40022e39, 0xc1581b0a, 0xe5101550, + 0x6538096b, 0x208c549d, 0x3ce2bf88, 0xa71df38e, + 0x3dec3685, 0xca3949f1, 0x79f3ad1b, 0x3ee8b300, + 0x9d305fc6, 0x7a2e5288, 0xbe81a2f2, 0x7ada0c06, + 0x191c7f01, 0x58dfcbd1, 0xc78dee72, 0x72364226, + 0x1866de12, 0x8d22305c, 0x943a0f0e, 0xc81967ff, + 0x4d55fb0f, 0xaf199be1, 0x90bbda61, 0x4e7c234f, + 0x90cfec16, 0x9b4bcf26, 0x21622023, 0x0926f0fa, + 0x1d504377, 0xa58db427, 0x8d93ce2b, 0x90bfe900, + 0x29e67397, 0x2c1261ed, 0x4ace9474, 0xd5c60282, + 0xe53fb300, 0x8a61a0ab, 0xa7aa0918, 0x4389d7c5, + 0xd09d605c, 0x6c5bedb5, 0xd6d54c51, 0x433dea21, + 0x7ad9e677, 0x813bff76, 0x5a162c75, 0x1ee0661f, + 0x9b6c2030, 0x8e8dc989, 0xcd4bc9fc, 0x4454675b, + 0x8d583c9c, 0xe3400094, 0x116ebb83, 0xe847bc9a, + 0x2a4622dd, 0x2a901e6f, 0xd789b1c0, 0x094e2bbb, + 0x056e563f, 0x9f17e606, 0x8bc79b8d, 0xd2c535c1, + 0x06a45a27, 0x9dc56771, 0xa06649e2, 0x5ff25ac8, + 0x6554961e, 0x98e583d9, 0x38ba93da, 0xdee1de18, + 0x037cb9d5, 0x6b17f195, 0x3431faaf, 0x13860a0d, + 0x28bca10d, 0x0a54c011, 0x9957cdb6, 0x3aa1f429, + 0x9d41b7b3, 0x9aea5be2, 0x60c7ce6b, 0x4cd1c10b, + 0x24ddddcd, 0xe28412ba, 0xa03a5466, 0xa1896879, + 0x59edcb87, 0x1b241765, 0x157bf161, 0xf219f950, + 0xe86ff526, 0x262005d9, 0x11769531, 0xbca15d95, + 0x28f5ef17, 0x1f27e725, 0xc32631d2, 0x07249e61, + 0x1ba851e3, 0x4f49b577, 0xe2a1df5e, 0x826fa7ff, + 0xc34e1e2e, 0x7fe26024, 0xbc19800f, 0x0d368dc9, + 0xe03da0c6, 0xadaa4f9c, 0x9ad1e43c, 0x96f84e44, + 0x0b6cd695, 0x1bb46971, 0x942d6e5b, 0x6316170d, + 0x3164509f, 0xc6659450, 0xb2a0370a, 0xabc208e8, + 0x6d479811, 0x3684bc0e, 0x80b7b101, 0xa50b7bb5, + 0x43d21233, 0xb423559d, 0xf41dcd16, 0xdfd3c276, + 0x3e586469, 0xd9b7630a, 0xb88f9e44, 0x0cda6f4d, + 0xe5bf5844, 0x8709f788, 0xdae37da6, 0x1fb41777, + 0x1d903f69, 0x34383b69, 0xd409ae70, 0xd1c99758, + 0xdedfd7a4, 0xa4bdf018, 0xf4058202, 0x8565d66f, + 0x5365aed9, 0xfa69742e, 0x2cfbfbcf, 0x88a00b60, + 0x506c0713, 0x2866475b, 0x3e1df573, 0xb86f7feb, + 0x31d23a7f, 0xc6320e6a, 0x3ebbc2a5, 0x83a1d4ef, + 0x15169f5f, 0x42a61753, 0x893e553e, 0x4ddbc66d, + 0x7449ec1f, 0x76f65d22, 0x0622e13b, 0x32986f89, + 0x21181b4b, 0x99a80c0a, 0xd6fe00b0, 0x282c0e81, + 0x9fc1cf88, 0x919b855d, 0x618257d8, 0x82c448b8, + 0xe22537a1, 0xa90de388, 0xba73b90c, 0xd765eeb0, + 0x62b2727e, 0xa08dfe20, 0x70b3c8c5, 0x3ef04007, + 0x9f73732b, 0x2201edd7, 0xb836219c, 0xf913af7c, + 0xf50f64ca, 0x93ac107a, 0xf509f84a, 0x6f6026f6, + 0xd9bb8eac, 0x4b268cfa, 0xa65a3fa6, 0x9837cb75, + 0x784fb835, 0x2060576d, 0xb1604cae, 0xb9da4116, + 0xab320cf2, 0x60a1b501, 0x0c73fa79, 0x8d5a6f1e, + 0x57688086, 0x218e4005, 0xca054e3d, 0xc1a3c3ec, diff --git a/src/cpu/intel/model_6xx/microcode_MU16830c.h b/src/cpu/intel/model_6xx/microcode_MU16830c.h new file mode 100644 index 0000000000..2724e7bae4 --- /dev/null +++ b/src/cpu/intel/model_6xx/microcode_MU16830c.h @@ -0,0 +1,140 @@ + /* + Copyright Intel Corporation, 1995, 96, 97, 98, 99, 2000. + + These microcode updates are distributed for the sole purpose of + installation in the BIOS or Operating System of computer systems + which include an Intel P6 family microprocessor sold or distributed + to or by you. You are authorized to copy and install this material + on such systems. You are not authorized to use this material for + any other purpose. + */ + +/* MU16830c.inc */ + 0x00000001, 0x0000000c, 0x01102000, 0x00000683, + 0xb1605bca, 0x00000001, 0x00000001, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x7d021266, 0xd3890df1, 0x08a3a61b, 0x3c9bd396, + 0x516b77d0, 0xf119ce39, 0xd63a44b0, 0x523efada, + 0x1a0c3ed7, 0x04711f21, 0x515f945e, 0xbb5f13ba, + 0x254eabfc, 0x5bd1e959, 0x67373898, 0x61605a8f, + 0x6ea7c5a9, 0x5e64a058, 0xc0a019ee, 0x56af4cfe, + 0x1acd6406, 0x4e7eb040, 0xf2ebd7ef, 0xc659db4f, + 0xfe77108b, 0xfdceb47b, 0xf0757eb8, 0xb1622949, + 0xdceb744b, 0x19e2ad26, 0xe9c745ab, 0xb385f196, + 0x9ecc3483, 0x0a126045, 0x5320d6be, 0x8557a583, + 0x7faf0073, 0x5ab281b4, 0x34dbbac6, 0x8a0bc7cd, + 0x52584248, 0x3c3ef309, 0x41403737, 0x8200991d, + 0x7e0dfb86, 0xea1e3a8f, 0x5b87ca8a, 0x004be481, + 0x74e9fd6f, 0x80d518d6, 0xf10672c8, 0x2b8936b5, + 0xd7092242, 0xbaa950a4, 0xaa6a2305, 0xeccbb48b, + 0x43f6b561, 0x8607570a, 0x6143ba7b, 0x4c534447, + 0x45d97f76, 0x0ccf7b83, 0xd89482bd, 0x32c46a60, + 0x6db7b842, 0x0f7ad008, 0x4ce4968c, 0x2af52761, + 0x26a2a653, 0x5806f996, 0xfe844901, 0x6164e754, + 0xaf9287ab, 0x1f495a8d, 0x6cd70b5e, 0x681df673, + 0xc94dc88f, 0x4b9650f8, 0xdfc826d9, 0xb5710e59, + 0x80ed0f08, 0x615ce9c2, 0x0864130d, 0xc604520e, + 0x9be149db, 0xeefb463f, 0x15b7e000, 0xc3bf13ab, + 0x29d75556, 0x99420678, 0x505b5858, 0x6dadaeae, + 0xf87f8f56, 0xe9be5867, 0xd772475a, 0x0a4642c0, + 0xc59b2b86, 0x9e0f0a7f, 0x4c54834f, 0xb39f1d7c, + 0xd52dac56, 0x1fdde74b, 0x60fddc1c, 0x367321f1, + 0x98a7c9bd, 0x9a7896d2, 0x8d1f200b, 0x7975e907, + 0x0e7d4411, 0x1671c027, 0x438550a2, 0x385dfc21, + 0xb26c638d, 0x9b43b0d2, 0x03a0512d, 0x6b195c14, + 0x9db53322, 0x78512b73, 0x86714a5b, 0x9b900bb3, + 0xdbd702f9, 0xcdb985cb, 0x1033fd1e, 0xc75ed099, + 0x8a8c99fc, 0x12c5b949, 0x913249a0, 0xbd40f4b1, + 0x87406189, 0x977927e0, 0x76915a37, 0x79ffa5f2, + 0x5e1812b8, 0x8e7eb819, 0x6bfc46a5, 0x8d80c798, + 0x56d5a7ec, 0x5904350a, 0x82a1b59a, 0x27c64a52, + 0x4effaac0, 0x8e1519ec, 0x29ffed29, 0x3eaccc55, + 0x823e79c1, 0xdb5f2295, 0xb6ab9c23, 0xb301f2c5, + 0xe17f14f3, 0xf4e8892a, 0x107c9db8, 0x6a8a8ff4, + 0xaf9df422, 0xb14bd8f4, 0x00fa2a4c, 0x15324701, + 0x95e86a3b, 0xf74566e1, 0x386a788f, 0x9333e875, + 0xdea61190, 0x307a5338, 0xd9cec152, 0xe77165da, + 0x54187a14, 0x9a7d99bf, 0x4b31e986, 0x7d7ed557, + 0x626bb548, 0x434c4a78, 0x562b1588, 0xe0d15f63, + 0x524473f7, 0x484459e1, 0xbe617125, 0xb96f7eb8, + 0xb86620f7, 0xcc1e09b1, 0x7ad3b154, 0xae1f697e, + 0x11d0bfb1, 0xb1218568, 0x83a44b34, 0xeecec8bc, + 0xa06b01d8, 0xccadf143, 0xe1f9702c, 0x1e7c3d0d, + 0xd907d836, 0x780b3a02, 0x9a5e81fa, 0x0015cf61, + 0xbd148c0c, 0x84a65389, 0x99e77502, 0x0d630a94, + 0xd7f97779, 0x75567907, 0xa859be05, 0x8baab7b7, + 0x4f1a8101, 0x9992f951, 0xdd918c8a, 0x12b3ca17, + 0x117358b4, 0xf27a4783, 0xe3363be6, 0x3847f05d, + 0xb642595a, 0x4fbb98ae, 0xd6259c55, 0x3c72ff94, + 0xa9c3e102, 0x256e26c1, 0x2faf190b, 0xaaa1d198, + 0x8e25fc06, 0x8aa6fc5d, 0x9b994d46, 0x15045f23, + 0x23813558, 0x0173ef1b, 0xe4198a76, 0x36aa0de4, + 0x341d7595, 0xe186740f, 0xec371375, 0x1a4cabbe, + 0x6241897f, 0x388bd888, 0x2542e1f7, 0x61620df5, + 0x209f9d94, 0xca90f89b, 0x286a3e92, 0xea1cc30f, + 0x838ba96f, 0x4f0239d3, 0xf295395e, 0xb3c38631, + 0x7ea7a143, 0x157a4e43, 0x46f8173f, 0xfbc18d4a, + 0xc401e17a, 0xc4620358, 0xd2ab5437, 0xa01db06f, + 0x58ce91fc, 0x850de1a3, 0x9b542dba, 0xee77f038, + 0xddd3ced6, 0xc225d2ce, 0x63a3f765, 0x3342a06c, + 0x6a780c2f, 0xfaa925b2, 0x366ebeec, 0xbcc9abea, + 0xc7b3fa4e, 0xf4f1123d, 0x5198702c, 0x3e3458b7, + 0x0b1ce9a1, 0x51b1bd7f, 0x711e791e, 0x927d8bed, + 0x91dbaea9, 0x7eefbda9, 0x7a19edd9, 0xdf7b8dce, + 0x5bb40613, 0x0b0c1e0f, 0x85b82c98, 0x18da4dc1, + 0xc5fd78ac, 0x57c1e31d, 0x4c4001b5, 0xe31d2643, + 0xa6afbf58, 0xad200e68, 0xf0114ba4, 0xd6a620f2, + 0xc753a720, 0xac9022a0, 0x28a41f01, 0x22a4ba95, + 0xc00b7531, 0x23d42795, 0xcd836a86, 0x90262708, + 0x3292cad0, 0x40022e39, 0xc1581b0a, 0xe5101550, + 0x6538096b, 0x208c549d, 0x3ce2bf88, 0xa71df38e, + 0x3dec3685, 0xca3949f1, 0x79f3ad1b, 0x3ee8b300, + 0x9d305fc6, 0x7a2e5288, 0xbe81a2f2, 0x7ada0c06, + 0x191c7f01, 0x58dfcbd1, 0xc78dee72, 0x72364226, + 0x1866de12, 0x8d22305c, 0x943a0f0e, 0xc81967ff, + 0x4d55fb0f, 0xaf199be1, 0x90bbda61, 0x4e7c234f, + 0x90cfec16, 0x9b4bcf26, 0x21622023, 0x0926f0fa, + 0x1d504377, 0xa58db427, 0x8d93ce2b, 0x90bfe900, + 0x29e67397, 0x2c1261ed, 0x4ace9474, 0xd5c60282, + 0xe53fb300, 0x8a61a0ab, 0xa7aa0918, 0x4389d7c5, + 0xd09d605c, 0x6c5bedb5, 0xd6d54c51, 0x433dea21, + 0x7ad9e677, 0x813bff76, 0x5a162c75, 0x1ee0661f, + 0x9b6c2030, 0x8e8dc989, 0xcd4bc9fc, 0x4454675b, + 0x8d583c9c, 0xe3400094, 0x116ebb83, 0xe847bc9a, + 0x2a4622dd, 0x2a901e6f, 0xd789b1c0, 0x094e2bbb, + 0x056e563f, 0x9f17e606, 0x8bc79b8d, 0xd2c535c1, + 0x06a45a27, 0x9dc56771, 0xa06649e2, 0x5ff25ac8, + 0x6554961e, 0x98e583d9, 0x38ba93da, 0xdee1de18, + 0x037cb9d5, 0x6b17f195, 0x3431faaf, 0x13860a0d, + 0x28bca10d, 0x0a54c011, 0x9957cdb6, 0x3aa1f429, + 0x9d41b7b3, 0x9aea5be2, 0x60c7ce6b, 0x4cd1c10b, + 0x24ddddcd, 0xe28412ba, 0xa03a5466, 0xa1896879, + 0x59edcb87, 0x1b241765, 0x157bf161, 0xf219f950, + 0xe86ff526, 0x262005d9, 0x11769531, 0xbca15d95, + 0x28f5ef17, 0x1f27e725, 0xc32631d2, 0x07249e61, + 0x1ba851e3, 0x4f49b577, 0xe2a1df5e, 0x826fa7ff, + 0xc34e1e2e, 0x7fe26024, 0xbc19800f, 0x0d368dc9, + 0xe03da0c6, 0xadaa4f9c, 0x9ad1e43c, 0x96f84e44, + 0x0b6cd695, 0x1bb46971, 0x942d6e5b, 0x6316170d, + 0x3164509f, 0xc6659450, 0xb2a0370a, 0xabc208e8, + 0x6d479811, 0x3684bc0e, 0x80b7b101, 0xa50b7bb5, + 0x43d21233, 0xb423559d, 0xf41dcd16, 0xdfd3c276, + 0x3e586469, 0xd9b7630a, 0xb88f9e44, 0x0cda6f4d, + 0xe5bf5844, 0x8709f788, 0xdae37da6, 0x1fb41777, + 0x1d903f69, 0x34383b69, 0xd409ae70, 0xd1c99758, + 0xdedfd7a4, 0xa4bdf018, 0xf4058202, 0x8565d66f, + 0x5365aed9, 0xfa69742e, 0x2cfbfbcf, 0x88a00b60, + 0x506c0713, 0x2866475b, 0x3e1df573, 0xb86f7feb, + 0x31d23a7f, 0xc6320e6a, 0x3ebbc2a5, 0x83a1d4ef, + 0x15169f5f, 0x42a61753, 0x893e553e, 0x4ddbc66d, + 0x7449ec1f, 0x76f65d22, 0x0622e13b, 0x32986f89, + 0x21181b4b, 0x99a80c0a, 0xd6fe00b0, 0x282c0e81, + 0x9fc1cf88, 0x919b855d, 0x618257d8, 0x82c448b8, + 0xe22537a1, 0xa90de388, 0xba73b90c, 0xd765eeb0, + 0x62b2727e, 0xa08dfe20, 0x70b3c8c5, 0x3ef04007, + 0x9f73732b, 0x2201edd7, 0xb836219c, 0xf913af7c, + 0xf50f64ca, 0x93ac107a, 0xf509f84a, 0x6f6026f6, + 0xd9bb8eac, 0x4b268cfa, 0xa65a3fa6, 0x9837cb75, + 0x784fb835, 0x2060576d, 0xb1604cae, 0xb9da4116, + 0xab320cf2, 0x60a1b501, 0x0c73fa79, 0x8d5a6f1e, + 0x57688086, 0x218e4005, 0xca054e3d, 0xc1a3c3ec, diff --git a/src/cpu/intel/model_6xx/model_6xx_init.c b/src/cpu/intel/model_6xx/model_6xx_init.c new file mode 100644 index 0000000000..95be3b701c --- /dev/null +++ b/src/cpu/intel/model_6xx/model_6xx_init.c @@ -0,0 +1,61 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +static uint32_t microcode_updates[] = { + /* WARNING - Intel has a new data structure that has variable length + * microcode update lengths. They are encoded in int 8 and 9. A + * dummy header of nulls must terminate the list. + */ +#include "microcode_MU16810d.h" +#include "microcode_MU16930c.h" + /* Dummy terminator */ + 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, +}; + + +static void model_f0x_init(device_t dev) +{ + /* Turn on caching if we haven't already */ + x86_enable_cache(); + x86_mtrr_check(); + + /* Update the microcode */ + intel_update_microcode(microcode_updates); + + /* Enable the local cpu apics */ + setup_lapic(); +}; + +static struct device_operations cpu_dev_ops = { + .init = model_f0x_init, +}; +static struct cpu_device_id cpu_table[] = { + { X86_VENDOR_INTEL, 0x0672 }, + { X86_VENDOR_INTEL, 0x0673 }, + { X86_VENDOR_INTEL, 0x0681 }, + { X86_VENDOR_INTEL, 0x0683 }, + { X86_VENDOR_INTEL, 0x0686 }, + { X86_VENDOR_INTEL, 0x06A0 }, + { X86_VENDOR_INTEL, 0x06A1 }, + { X86_VENDOR_INTEL, 0x06A4 }, + { 0, 0 }, +}; + +static struct cpu_driver driver __cpu_driver = { + .ops = &cpu_dev_ops, + .id_table = cpu_table, +}; diff --git a/src/cpu/intel/model_f0x/Config.lb b/src/cpu/intel/model_f0x/Config.lb new file mode 100644 index 0000000000..1e6126c3cc --- /dev/null +++ b/src/cpu/intel/model_f0x/Config.lb @@ -0,0 +1,9 @@ +dir /cpu/x86/tsc +dir /cpu/x86/mtrr +dir /cpu/x86/fpu +dir /cpu/x86/mmx +dir /cpu/x86/sse +dir /cpu/x86/lapic +dir /cpu/x86/cache +dir /cpu/intel/microcode +driver model_f0x_init.o diff --git a/src/cpu/intel/model_f0x/model_f0x_init.c b/src/cpu/intel/model_f0x/model_f0x_init.c new file mode 100644 index 0000000000..ef64688625 --- /dev/null +++ b/src/cpu/intel/model_f0x/model_f0x_init.c @@ -0,0 +1,55 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* 256KB cache */ +static uint32_t microcode_updates[] = { + /* WARNING - Intel has a new data structure that has variable length + * microcode update lengths. They are encoded in int 8 and 9. A + * dummy header of nulls must terminate the list. + */ + + /* Dummy terminator */ + 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, +}; + + +static void model_f0x_init(device_t dev) +{ + /* Turn on caching if we haven't already */ + x86_enable_cache(); + x86_setup_mtrrs(); + x86_mtrr_check(); + + /* Update the microcode */ + intel_update_microcode(microcode_updates); + + /* Enable the local cpu apics */ + setup_lapic(); +}; + +static struct device_operations cpu_dev_ops = { + .init = model_f0x_init, +}; +static struct cpu_device_id cpu_table[] = { + { X86_VENDOR_INTEL, 0x0f0A }, + { 0, 0 }, +}; + +static struct cpu_driver driver __cpu_driver = { + .ops = &cpu_dev_ops, + .id_table = cpu_table, +}; diff --git a/src/cpu/intel/model_f0x/multiplier.h b/src/cpu/intel/model_f0x/multiplier.h new file mode 100644 index 0000000000..e2f81362e8 --- /dev/null +++ b/src/cpu/intel/model_f0x/multiplier.h @@ -0,0 +1,55 @@ + +/* + ** NMI A20M IGNNE INTR + * X8 H H H H + * X9 H H H L projected + * X10 H H L H + * X11 H H L L + * X12 H L H H + * X13 H L H L + * X14 H L L H + * X15 H L L L + * X16 L H H H + * X17 L H H L + * X18 L H L H + * X19 L H L L + * X20 L L H H + * X21 L L H L projected + * X22 L L L H projected + * X23 L L L L projected + * + ** NMI INTR IGNNE A20M + * X8 H H H H + * X9 H L H H projected + * X10 H H L H + * X11 H L L H + * X12 H H H L + * X13 H L H L + * X14 H H L L + * X15 H L L L + * X16 L H H H + * X17 L L H H + * X18 L H L H + * X19 L L L H + * X20 L H H L + * X21 L L H L projected + * X22 L H L L projected + * X23 L L L L projected + */ + +#define XEON_X8 0xf +#define XEON_X9 0xb /* projected */ +#define XEON_X10 0xd +#define XEON_X11 0x9 +#define XEON_X12 0xe +#define XEON_X13 0xa +#define XEON_X14 0xc +#define XEON_X15 0x8 +#define XEON_X16 0x7 +#define XEON_X17 0x3 +#define XEON_X18 0x5 +#define XEON_X19 0x1 +#define XEON_X20 0x6 +#define XEON_X21 0x2 /* projected */ +#define XEON_X22 0x4 /* projected */ +#define XEON_X23 0x0 /* projected */ diff --git a/src/cpu/intel/model_f1x/Config.lb b/src/cpu/intel/model_f1x/Config.lb new file mode 100644 index 0000000000..d318ee538d --- /dev/null +++ b/src/cpu/intel/model_f1x/Config.lb @@ -0,0 +1,9 @@ +dir /cpu/x86/tsc +dir /cpu/x86/mtrr +dir /cpu/x86/fpu +dir /cpu/x86/mmx +dir /cpu/x86/sse +dir /cpu/x86/lapic +dir /cpu/x86/cache +dir /cpu/intel/microcode +driver model_f1x_init.o diff --git a/src/cpu/intel/model_f1x/model_f1x_init.c b/src/cpu/intel/model_f1x/model_f1x_init.c new file mode 100644 index 0000000000..4045345d35 --- /dev/null +++ b/src/cpu/intel/model_f1x/model_f1x_init.c @@ -0,0 +1,55 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* 256KB cache */ +static uint32_t microcode_updates[] = { + /* WARNING - Intel has a new data structure that has variable length + * microcode update lengths. They are encoded in int 8 and 9. A + * dummy header of nulls must terminate the list. + */ + + /* Dummy terminator */ + 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, +}; + + +static void model_f1x_init(device_t dev) +{ + /* Turn on caching if we haven't already */ + x86_enable_cache(); + x86_setup_mtrrs(); + x86_mtrr_check(); + + /* Update the microcode */ + intel_update_microcode(microcode_updates); + + /* Enable the local cpu apics */ + setup_lapic(); +}; + +static struct device_operations cpu_dev_ops = { + .init = model_f1x_init, +}; +static struct cpu_device_id cpu_table[] = { + { X86_VENDOR_INTEL, 0x0f12 }, + { 0, 0 }, +}; + +static struct cpu_driver driver __cpu_driver = { + .ops = &cpu_dev_ops, + .id_table = cpu_table, +}; diff --git a/src/cpu/intel/model_f1x/multiplier.h b/src/cpu/intel/model_f1x/multiplier.h new file mode 100644 index 0000000000..e2f81362e8 --- /dev/null +++ b/src/cpu/intel/model_f1x/multiplier.h @@ -0,0 +1,55 @@ + +/* + ** NMI A20M IGNNE INTR + * X8 H H H H + * X9 H H H L projected + * X10 H H L H + * X11 H H L L + * X12 H L H H + * X13 H L H L + * X14 H L L H + * X15 H L L L + * X16 L H H H + * X17 L H H L + * X18 L H L H + * X19 L H L L + * X20 L L H H + * X21 L L H L projected + * X22 L L L H projected + * X23 L L L L projected + * + ** NMI INTR IGNNE A20M + * X8 H H H H + * X9 H L H H projected + * X10 H H L H + * X11 H L L H + * X12 H H H L + * X13 H L H L + * X14 H H L L + * X15 H L L L + * X16 L H H H + * X17 L L H H + * X18 L H L H + * X19 L L L H + * X20 L H H L + * X21 L L H L projected + * X22 L H L L projected + * X23 L L L L projected + */ + +#define XEON_X8 0xf +#define XEON_X9 0xb /* projected */ +#define XEON_X10 0xd +#define XEON_X11 0x9 +#define XEON_X12 0xe +#define XEON_X13 0xa +#define XEON_X14 0xc +#define XEON_X15 0x8 +#define XEON_X16 0x7 +#define XEON_X17 0x3 +#define XEON_X18 0x5 +#define XEON_X19 0x1 +#define XEON_X20 0x6 +#define XEON_X21 0x2 /* projected */ +#define XEON_X22 0x4 /* projected */ +#define XEON_X23 0x0 /* projected */ diff --git a/src/cpu/intel/model_f2x/Config.lb b/src/cpu/intel/model_f2x/Config.lb new file mode 100644 index 0000000000..76544328e6 --- /dev/null +++ b/src/cpu/intel/model_f2x/Config.lb @@ -0,0 +1,10 @@ +dir /cpu/x86/tsc +dir /cpu/x86/mtrr +dir /cpu/x86/fpu +dir /cpu/x86/mmx +dir /cpu/x86/sse +dir /cpu/x86/lapic +dir /cpu/x86/cache +dir /cpu/intel/microcode +dir /cpu/intel/hyperthreading +driver model_f1x_init.o diff --git a/src/cpu/intel/model_f2x/microcode_m02f2203.h b/src/cpu/intel/model_f2x/microcode_m02f2203.h new file mode 100644 index 0000000000..45de5d1d52 --- /dev/null +++ b/src/cpu/intel/model_f2x/microcode_m02f2203.h @@ -0,0 +1,513 @@ + /* from file m02f2203.txt */ + 0x000000001, // Header Version + 0x000000003, // Patch ID + 0x004062002, // DATE + 0x000000f22, // CPUID + 0x0664ee8e8, // Checksum + 0x000000001, // Loader Version + 0x000000002, // Platform ID + 0x000000000, // reserved + 0x000000000, // reserved + 0x000000000, // reserved + 0x000000000, // reserved + 0x000000000, // reserved + 0x0377de33f, + 0x01d618b92, + 0x0e61cc8ec, + 0x025bdbc5c, + 0x0ebb0b548, + 0x06ee11a02, + 0x0d14e18de, + 0x0f5e03a4f, + 0x04981631f, + 0x0b0df6b8b, + 0x03c8008c2, + 0x0f5a0a36b, + 0x08cd685ec, + 0x0e145d134, + 0x037a27f9f, + 0x022dcc294, + 0x0601d7784, + 0x03d5e32a8, + 0x0a492144c, + 0x06657dae6, + 0x0a4ce4415, + 0x074e3598c, + 0x01789ba2b, + 0x0e3834a55, + 0x0c2231988, + 0x0aa27a4ae, + 0x0114d2424, + 0x07589cecd, + 0x0caadbccf, + 0x0e0303485, + 0x0120df375, + 0x01e6bc5a7, + 0x028b214f7, + 0x02afafb93, + 0x069f91ee7, + 0x0aa458dd2, + 0x01725310e, + 0x08e031806, + 0x06fc04854, + 0x004d60f22, + 0x0c3f9a443, + 0x06a08d56a, + 0x0ccf7ad29, + 0x082c4a0da, + 0x0a42aa3a5, + 0x0b6bf9b3c, + 0x0d3a51840, + 0x0f9199ece, + 0x04efeca48, + 0x0a6bfccea, + 0x0a8059c00, + 0x0cf20feb3, + 0x09fa06479, + 0x0ba0445a1, + 0x0d99299fe, + 0x018070156, + 0x0343b5abc, + 0x0dbfc936f, + 0x0b7d1da3c, + 0x0c1e0163e, + 0x0d6959470, + 0x0226de13d, + 0x02e139add, + 0x05f43064b, + 0x0ce983b01, + 0x0bc342c48, + 0x0d9ec8404, + 0x09f1f147a, + 0x0c522f601, + 0x0941685c6, + 0x07a4e3e91, + 0x06f634c7e, + 0x0024bf95c, + 0x0b0d57cc0, + 0x0431f0d06, + 0x015609941, + 0x0b1f48eb8, + 0x01fd617e1, + 0x055a096fb, + 0x0e0295335, + 0x058f91fce, + 0x0a36f4c53, + 0x065590ba8, + 0x0d6a57716, + 0x0cf117678, + 0x0438bd8a6, + 0x0ac42c261, + 0x098d06a30, + 0x00d38a2c0, + 0x057a732a7, + 0x0ca0d4460, + 0x0a4e557cc, + 0x03e6f9c5d, + 0x0fdef3103, + 0x0ed9104f4, + 0x02a2ced76, + 0x0869c87f6, + 0x01e710fdf, + 0x04ef40d17, + 0x054bf6b84, + 0x046606228, + 0x010615915, + 0x05735682e, + 0x03480da05, + 0x0c07bc8ac, + 0x01012738e, + 0x0e3465cf3, + 0x081341a97, + 0x0934e1282, + 0x075ec3f41, + 0x0c5ea60c5, + 0x05c0afb0c, + 0x07731f128, + 0x02bc1c468, + 0x07ef85ad1, + 0x07a4f9311, + 0x00fe965b0, + 0x040bc930f, + 0x023e38027, + 0x0f9624477, + 0x0b65c0735, + 0x030e0d716, + 0x0e2c53914, + 0x0ba8abecc, + 0x0619d1103, + 0x0bd77536b, + 0x09ae818fa, + 0x0bc595a04, + 0x064cc8c46, + 0x0a555a73b, + 0x052e27c72, + 0x0c241a051, + 0x0bda999c7, + 0x054fbcbad, + 0x06781bb03, + 0x08bbf9806, + 0x07bd81ab5, + 0x0978054d9, + 0x00d2d4198, + 0x08be28922, + 0x0d4b1067e, + 0x09dbb52bd, + 0x03ddf0f34, + 0x075cca964, + 0x037dc6270, + 0x09dc8a692, + 0x080fc4514, + 0x054c9a832, + 0x084ddbc69, + 0x00ac3d725, + 0x009d8381e, + 0x0891aac6f, + 0x0dcd35e28, + 0x09ed405a3, + 0x0c099862e, + 0x0701e616f, + 0x0d1e4f9f7, + 0x0252690fc, + 0x0109f0ec8, + 0x0c2894c0b, + 0x0f528565d, + 0x0ec8dd34a, + 0x0961e7f8a, + 0x0a9ce0635, + 0x09bcffe26, + 0x067e08a77, + 0x00d1e13b5, + 0x0f102b8f9, + 0x0c46f8884, + 0x0e876ee7f, + 0x094a8de36, + 0x0449d3555, + 0x0cf6dfbbc, + 0x08740a116, + 0x0e9e838fe, + 0x0c8870163, + 0x012dd5605, + 0x0ab15f930, + 0x00b38c94c, + 0x0f2a70faf, + 0x0acd8acb3, + 0x0e5f84145, + 0x0b3721d0a, + 0x007c8afce, + 0x000fd2e3a, + 0x0c54c4695, + 0x02194cdbf, + 0x0fd5feb3f, + 0x05dedb9eb, + 0x0ad01df81, + 0x06bba699b, + 0x01cd736aa, + 0x005b4b6e7, + 0x0f170db07, + 0x0823a9983, + 0x04886461f, + 0x07a7f266b, + 0x0232b1209, + 0x08e48c22b, + 0x0dd54eda3, + 0x074eb5922, + 0x0bffddb2a, + 0x0d6d3a551, + 0x0a00c66ea, + 0x0feaa9c65, + 0x069b3f0f1, + 0x0467dcf38, + 0x0be819529, + 0x04ec7cd2f, + 0x0b77e3247, + 0x0ceaa22b5, + 0x08e51809b, + 0x0265fd218, + 0x0c70e0091, + 0x09642d9ef, + 0x0ee020d62, + 0x0770832d0, + 0x05085caf9, + 0x062f5c49e, + 0x0081af519, + 0x065607fde, + 0x0097386eb, + 0x0718f2e33, + 0x05f2f72ac, + 0x0460b4d33, + 0x084f73cbd, + 0x0de490896, + 0x0960e980a, + 0x051939fbc, + 0x0edb15e28, + 0x017c027ec, + 0x09012a039, + 0x0db29ee45, + 0x04b29253f, + 0x04802bbaf, + 0x006b1acfc, + 0x0972749b5, + 0x05b4906f7, + 0x0247eb936, + 0x0bbcd86c5, + 0x0d076e120, + 0x042a724d6, + 0x09fcb4abc, + 0x00dbb0214, + 0x006fc5700, + 0x00066d96c, + 0x0e7f787bf, + 0x0f40260c8, + 0x0f6b9aec7, + 0x063bc2fc7, + 0x054731138, + 0x0855aff40, + 0x08e90936c, + 0x01c248914, + 0x085e9a734, + 0x0b95428ac, + 0x07ace1ea4, + 0x0d2a00b9b, + 0x0c8d010ae, + 0x0bc486961, + 0x0bc247ea5, + 0x0e5ecce2c, + 0x0b04d8d96, + 0x056492f0e, + 0x017d42ee8, + 0x088e4f602, + 0x018309b49, + 0x00fbeaae6, + 0x02104532c, + 0x0fcd354b7, + 0x0bf05a589, + 0x0848d50d0, + 0x060c00a26, + 0x0ed5b1a58, + 0x08e6f15e5, + 0x0a2fd3ba9, + 0x0bd11eb0f, + 0x0a13c8c73, + 0x03e314454, + 0x0a55a2e36, + 0x05624ec02, + 0x07cdadfcb, + 0x0c404b866, + 0x0cf27534f, + 0x0ade78324, + 0x0153bc559, + 0x0388f0fe2, + 0x0d84a69f5, + 0x03f3ea295, + 0x0a425162a, + 0x02b00dfb7, + 0x0ad9c000f, + 0x027dc1459, + 0x08a2a224b, + 0x0b3628846, + 0x0e68a8168, + 0x085800f6d, + 0x04bc08c07, + 0x05930d67c, + 0x064f9bb38, + 0x09e1a5f6a, + 0x05b59e3af, + 0x0b65baf5b, + 0x00c33aab0, + 0x0da3458c6, + 0x0ab574a23, + 0x0b5f15e34, + 0x0e9caf076, + 0x0c9f740c3, + 0x0c6adc9f5, + 0x0f046920f, + 0x0a49b2ca7, + 0x0083b3f30, + 0x0d17f0742, + 0x00abea9b1, + 0x0d7a83756, + 0x0276d235b, + 0x07b2461d5, + 0x0e78d4341, + 0x0474a3a2b, + 0x0620402f1, + 0x0ad29ce1b, + 0x0a73bc19f, + 0x0c20ecdc6, + 0x0bf8bdae0, + 0x0457c7d70, + 0x083dc0fc0, + 0x0707b6a23, + 0x0bb2fc9c5, + 0x02ea50b16, + 0x0b3dba5ee, + 0x0b8ca98e7, + 0x0555e3750, + 0x0caa69ccd, + 0x040f84ca1, + 0x0f8fa5205, + 0x04aaea9d1, + 0x0410bc48b, + 0x094f8e471, + 0x085fdf713, + 0x0025fe222, + 0x038a1044f, + 0x0dacdbbef, + 0x0b5015882, + 0x056ab6bb5, + 0x0b2152d43, + 0x0fdf7db82, + 0x02e36515e, + 0x0ad01b0e5, + 0x067d3f0b2, + 0x015a14ce8, + 0x029abb6f6, + 0x0a0c632b9, + 0x03c6ce83e, + 0x06446e87c, + 0x014505c45, + 0x046ce3802, + 0x088d6fb38, + 0x020f7fc23, + 0x06a83fe4a, + 0x01f7f37f7, + 0x090a9a5fb, + 0x040e0adf0, + 0x0814e5c1e, + 0x078cc452c, + 0x037648002, + 0x05988959e, + 0x0bbaa19fd, + 0x0c121b46f, + 0x0ce92151e, + 0x0edf5b014, + 0x0fe0d20b0, + 0x04893118b, + 0x00378e532, + 0x0548a7cda, + 0x00b7d8b2c, + 0x0efc71f0f, + 0x06132e9ab, + 0x0cef71af6, + 0x065bc1c9e, + 0x0c6aaf262, + 0x0af387a4f, + 0x00cf65fd4, + 0x0c04ec9cf, + 0x0d2c2efb1, + 0x0192f4d47, + 0x06ac59280, + 0x0d49ab94e, + 0x0052d901c, + 0x07c2f1090, + 0x0b21ead2e, + 0x042710177, + 0x05967e722, + 0x0dedd9459, + 0x0e270eff1, + 0x04bf447cd, + 0x0027dd494, + 0x045d7ddaa, + 0x074400df4, + 0x01912fd71, + 0x0947c18ec, + 0x0faf5298d, + 0x01de16144, + 0x0627c2e4a, + 0x0fae7b523, + 0x06edc73b2, + 0x0af4fdf41, + 0x06c3ab948, + 0x083e9d603, + 0x0a57f809c, + 0x0404f32a3, + 0x018206e38, + 0x0daf619d4, + 0x04fe5e6ab, + 0x0c1b989dc, + 0x0576e7bb1, + 0x094290c71, + 0x071e9a429, + 0x00e3b7a76, + 0x0f87f203a, + 0x0c8328af9, + 0x0225c8b85, + 0x0ae9152e4, + 0x0be5098a9, + 0x0022c34bc, + 0x0a2428231, + 0x01516ddab, + 0x048521134, + 0x04f0831ea, + 0x0f0cf7c5f, + 0x0be4c22bd, + 0x0a26fe115, + 0x0cf27284a, + 0x0cf0452e6, + 0x071ae625c, + 0x0208f6eb3, + 0x0aef04760, + 0x063ae718b, + 0x026609177, + 0x0c920ab17, + 0x006a839de, + 0x0a51b4ed2, + 0x075e98487, + 0x04344aa11, + 0x0405a801e, + 0x027b38539, + 0x0357cd7b9, + 0x042c92121, + 0x0df67217c, + 0x08be79011, + 0x0cb3c12d6, + 0x05f67e891, + 0x062716f33, + 0x06b816be3, + 0x076dd3151, + 0x077a9f91e, + 0x0568feafa, + 0x0e8f975bf, + 0x0da317523, + 0x071259d6d, + 0x08fa429cb, + 0x0a15c62f1, + 0x0699b4747, + 0x09aac9b7e, + 0x05fcc2aff, + 0x07345e53c, + 0x0a1017201, + 0x02312089e, + 0x0bf6321de, + 0x029253d28, + 0x0846a0aa5, + 0x0e4c32754, + 0x0b2757cc1, + 0x019684827, + 0x082b4de7d, + 0x0651855d0, + 0x04dc73308, + 0x0ba6e7198, + 0x07e5f0058, + 0x01979bd22, + 0x0f101b11c, + 0x078cf5a53, + 0x0421158de, + 0x0ec657dd4, + 0x09d27f154, + 0x0dcd23639, + 0x09f574023, + 0x0d0b67fc9, + 0x08e62bb83, + 0x0c7e731de, + 0x01af9743f, + 0x0b8a9b5de, + 0x0bc7cce1e, + 0x042959190, + 0x0a0c932e5, + 0x0baa1e41e, + 0x04902b20c, + 0x05aadd04b, + 0x0135baf90, + 0x0ac599606, diff --git a/src/cpu/intel/model_f2x/microcode_m02f2410.h b/src/cpu/intel/model_f2x/microcode_m02f2410.h new file mode 100644 index 0000000000..c25c0ec8e5 --- /dev/null +++ b/src/cpu/intel/model_f2x/microcode_m02f2410.h @@ -0,0 +1,140 @@ + + /* Intel xeon sig f24 pf 2 from m02f2410.txt */ + 0x000000001, /* Header Version */ + 0x000000010, /* Patch ID */ + 0x007192002, /* DATE */ + 0x000000f24, /* CPUID */ + 0x0789bb8d7, /* Checksum */ + 0x000000001, /* Loader Version */ + 0x000000002, /* Platform ID */ + 0x000000000, /* reserved */ + 0x000000000, /* reserved */ + 0x000000000, /* reserved */ + 0x000000000, /* reserved */ + 0x000000000, /* reserved */ + 0x0ffffffe9, 0x05715f121, 0x0440ce2fa, 0x0d5d090eb, + 0x070b3e977, 0x092320e8c, 0x04f989906, 0x036907442, + 0x0cc4b12e2, 0x0b456a6ae, 0x00ad5bcf7, 0x0e9f0a425, + 0x070b932d2, 0x0e66202c9, 0x0350f8d4b, 0x0d560a828, + 0x0763e8420, 0x04595b38a, 0x0a66d6637, 0x0e2adc7be, + 0x0c5d9515e, 0x07d6d08cd, 0x0c930e826, 0x0528d413f, + 0x0ce5ac17a, 0x086b9646b, 0x0e7845b29, 0x00c56e922, + 0x0ad8a85f2, 0x08e9d478d, 0x0d6faa7f5, 0x0da7ac699, + 0x010859ceb, 0x00c7c1cd8, 0x0fd7bc59d, 0x0b847dddd, + 0x0e545057b, 0x05af340d6, 0x01e2f8c45, 0x026c9c8c6, + 0x08b6ea51c, 0x075280c65, 0x0eb953366, 0x06400e75d, + 0x0fe0be614, 0x04b47f2ca, 0x0ac119100, 0x02f973c6e, + 0x0e3600377, 0x0e234bd6c, 0x06010f6fb, 0x0497c113b, + 0x010824bec, 0x0e897a508, 0x00de50694, 0x08202b8a6, + 0x07d2c657d, 0x0a82cd03c, 0x060947d1b, 0x0de88dfb8, + 0x0be799b59, 0x0cfdfd29e, 0x03d9ac639, 0x0fb674628, + 0x041988eba, 0x0700ebe34, 0x0019565b3, 0x0d3be034d, + 0x04366d795, 0x087f1131c, 0x01f2d001d, 0x063db664a, + 0x09a846727, 0x00b4b7370, 0x044941cd5, 0x0f5974d99, + 0x0fcd2d1a4, 0x0f4a458ea, 0x04edc79ff, 0x02eb36b1d, + 0x02b1bf369, 0x0fbe64d3d, 0x0c15f0935, 0x0c6ba263b, + 0x064320f87, 0x0ab342765, 0x054316d17, 0x09ee930d7, + 0x024a1a577, 0x0340dad94, 0x03c48afa2, 0x090373ff8, + 0x097f5be99, 0x0ba7bca44, 0x0ca4dae6c, 0x06e46a894, + 0x060f0f843, 0x07cdc8649, 0x03314dbd3, 0x0948e0f5c, + 0x0e29fe95c, 0x0afe80cef, 0x0864ea1b7, 0x075578a0f, + 0x00a908830, 0x0d354ef34, 0x0e57a2d1f, 0x09568c18b, + 0x0da0d7051, 0x0c32910d9, 0x03592ce94, 0x0e5b78410, + 0x0a08bf5b4, 0x068862085, 0x0f0147e1e, 0x0e676dfdd, + 0x0083b0d3f, 0x0a8594085, 0x00427d952, 0x008433d45, + 0x064bc994d, 0x04aef1348, 0x056121cb5, 0x0dea1295b, + 0x082edfc21, 0x0dee5f488, 0x0d7aa494b, 0x01b1a908c, + 0x00aa4ec23, 0x0b00cb03d, 0x07935f381, 0x0d7d03c6d, + 0x0f1acd28d, 0x0c3552afc, 0x06019f316, 0x0a2e40e1d, + 0x02c0e8a2d, 0x07d5097ae, 0x0e4e79555, 0x0fb3b4469, + 0x0d03ad54a, 0x0c1f2dab9, 0x036d22f7d, 0x015720655, + 0x00eb840e2, 0x063fc319a, 0x0fc99b4fc, 0x096aba0a6, + 0x0c264ca2d, 0x0937b3bf1, 0x03f15de0f, 0x0389dc588, + 0x01f58b599, 0x094de6fa9, 0x09cfb142f, 0x0cba182e0, + 0x0adde1620, 0x0e12e4fbe, 0x07a0fa14f, 0x0f464c742, + 0x0d65b2240, 0x0537e32c2, 0x0fae621a1, 0x0c814bdfd, + 0x027cd2a15, 0x0ca48efbf, 0x0f2befd43, 0x0125f5190, + 0x04fd50b0f, 0x051fe985e, 0x03acab851, 0x0f3f43b0f, + 0x06752ff24, 0x0cb6e48c3, 0x00c7b4e8f, 0x04cde4d0d, + 0x063f612e2, 0x0ae429cb5, 0x048175667, 0x0ad4c222b, + 0x065cfbc13, 0x0dc5c7f7a, 0x01c4ca18c, 0x09dd9940f, + 0x05df52ad4, 0x026dc7a9d, 0x040c2ef10, 0x0eee8cccd, + 0x0733f9d40, 0x0b0b2d287, 0x02c63d214, 0x0280a8a8c, + 0x07d79140b, 0x02bbad4bc, 0x013d77277, 0x0b3b27d18, + 0x051c9fc03, 0x0cceb6183, 0x0b3d40b0a, 0x06db2dea2, + 0x0e20c32de, 0x09f1a1bef, 0x049904f2a, 0x0c785676a, + 0x05193462d, 0x0db728f55, 0x06e011412, 0x0a29fde6f, + 0x02db8336e, 0x030cd1f0b, 0x0facf0b4e, 0x0f7594816, + 0x0ae3aaa8f, 0x0bd281afd, 0x03bee7d6a, 0x00f4aa235, + 0x00239def7, 0x00a27a699, 0x0f4593d2a, 0x0ccba9e40, + 0x044139d91, 0x0c92b308d, 0x033a788e1, 0x065cdf1cb, + 0x03193eac8, 0x0f4d29608, 0x048df9a08, 0x084f4666b, + 0x032dd3402, 0x08577079a, 0x07d86e147, 0x0a3ebdcf8, + 0x01671b672, 0x0617cf22c, 0x0cabc0826, 0x0d97544af, + 0x0de1246a0, 0x0a0f7a0e2, 0x0ba17cc9a, 0x0225d62c9, + 0x034777700, 0x07d2b36f8, 0x0144da38f, 0x0cab82ce4, + 0x00ec7f553, 0x0b9500f28, 0x0601b48d4, 0x06c23042d, + 0x096d63b58, 0x0e0465458, 0x04210e46c, 0x0fa8a12c5, + 0x0260b6716, 0x09eaacd55, 0x01ae1fb31, 0x0d8b61299, + 0x03608653c, 0x07af8888b, 0x064962804, 0x0e88d60cc, + 0x083784b2a, 0x0df50de8d, 0x072d79fec, 0x04cf109f8, + 0x0d19f7b44, 0x0323ce9f5, 0x0bc30d1f0, 0x0fdf68aa7, + 0x0105c51c7, 0x0c82d9c10, 0x070caaa5d, 0x04f9e40b5, + 0x00df8d32c, 0x0e8ac017d, 0x0c0ce9e3a, 0x0e3e614fa, + 0x03d09d4ac, 0x0d728b0de, 0x0bfbb6ac2, 0x098944bc0, + 0x09966a062, 0x07825e582, 0x0a48ae982, 0x0c63e9f3f, + 0x01e964e46, 0x08fa03130, 0x065bab214, 0x059ed2c27, + 0x0e171d297, 0x06bbcf48f, 0x0ec6d44a8, 0x0ef452345, + 0x03beeeccf, 0x0e6b61e6c, 0x039ff1edd, 0x031ab1a3c, + 0x03c4823bd, 0x0f046d111, 0x0dc77d7ab, 0x089e45e10, + 0x0acb472d8, 0x0bf7f62f2, 0x0e0f89ec4, 0x0b8722c2c, + 0x05277f745, 0x0090cc66f, 0x0c7615dbb, 0x0f019f628, + 0x06d9d1d6f, 0x0a3a11844, 0x06f4ed58c, 0x070ea5292, + 0x0b629584b, 0x081914eb0, 0x0619d1ef6, 0x08124cf57, + 0x0ea8fc589, 0x02cb0f8aa, 0x07be467a0, 0x0b61a2958, + 0x0d5586daa, 0x0abe9f60d, 0x0693ebd44, 0x02129bc82, + 0x04dc303e6, 0x079b717ef, 0x0ce04087f, 0x0f2bedb88, + 0x053c57df0, 0x0c62d43cb, 0x0a2721d91, 0x04d1315ad, + 0x06e398fb8, 0x09cd1c3c6, 0x04e887872, 0x08f3caf22, + 0x0a514e19a, 0x0ddd376ad, 0x09cf2fe8c, 0x0adde0e06, + 0x049fd5014, 0x00eac54c5, 0x054dbe117, 0x0cc227f52, + 0x0f1764002, 0x0f6bedffd, 0x06da0a736, 0x010cbac3b, + 0x0cf5ad71f, 0x03e647786, 0x09b675662, 0x0bfc85a6e, + 0x08c125ae4, 0x08ad8df36, 0x0f1f6eef0, 0x06e8e868c, + 0x09657d971, 0x0cd72893d, 0x0940b4748, 0x0d7020293, + 0x04e0a55b1, 0x0c65a6b72, 0x06231f2c5, 0x0f7fac755, + 0x02d36efd8, 0x019cf2803, 0x02066d5f8, 0x0914eda50, + 0x06121bdbd, 0x09bbd2fb6, 0x097b7a60e, 0x01241a2cc, + 0x09aaa0715, 0x06a44b718, 0x05ebb4d17, 0x0f1dc871f, + 0x04986b486, 0x0892bf0dc, 0x0e6b6062a, 0x0228745a9, + 0x05035cfe0, 0x0d4fa406b, 0x033a99806, 0x080a510f2, + 0x053310cbe, 0x0d4fb73af, 0x0200e09ce, 0x0c7b5f89a, + 0x06c5c857a, 0x0f736be54, 0x0d642ff8f, 0x0ec3f5f37, + 0x0748990cf, 0x0e5057b8a, 0x0911e4cd8, 0x00e8af6f3, + 0x0bec81837, 0x01d06db6d, 0x073c9dd43, 0x0a2405d52, + 0x01ee426b1, 0x013e87a88, 0x045e00e1a, 0x08e2a1ba3, + 0x0efeee771, 0x07db9f1ba, 0x0333b019c, 0x0e00c9308, + 0x00622f689, 0x081bba9be, 0x0fd316ec0, 0x0da2def1f, + 0x06a4945ea, 0x0f6359ec5, 0x0630bfba5, 0x0adff9610, + 0x0dd7c3d15, 0x03e728968, 0x0d74b8b49, 0x06dc94b9a, + 0x0b20f2765, 0x08041988e, 0x0272b5abc, 0x0f15cfd0d, + 0x00d729960, 0x01a2fae9a, 0x0cf3296e9, 0x03a290b05, + 0x0c3a504a6, 0x04aa31032, 0x0aadd73fd, 0x0a6790636, + 0x0f319a07f, 0x095d2d576, 0x06a61931a, 0x0ed892f8d, + 0x04ba30258, 0x0e5919b8a, 0x084f10bc5, 0x074cc3282, + 0x087890780, 0x068732cb2, 0x0f78ad447, 0x0e69573dc, + 0x0728beb36, 0x051c802a4, 0x0758de776, 0x05c6df037, + 0x06a06fb25, 0x0c4c4cf40, 0x045e58b0a, 0x0922d0480, + 0x07b51d9bb, 0x07d139ed7, 0x0f1216146, 0x0314b1efe, + 0x0084d7b08, 0x0844af3b6, 0x009e49a61, 0x0434a53b3, + 0x0b89bc367, 0x0ba0a92af, 0x0e56fe08d, 0x0310df486, + 0x04a9a69c4, 0x013a49875, 0x0bcecb5eb, 0x090098676, + 0x063a186b1, 0x07895a3a8, 0x0e2e74740, 0x0206610f0, + 0x01af249de, 0x0c86caf13, 0x0a0a09f28, 0x0daaefe51, + 0x06b74fab4, 0x0799a8893, 0x071dcc3db, 0x08e91b678, + 0x04fd05c58, 0x0d39f1956, 0x041d21e8f, 0x09214fe12, + 0x0d26d7c81, 0x0d1b4991c, 0x009917277, 0x0de60e0b1, + 0x0d535ce21, 0x09090fe6b, 0x0d2236db5, 0x0784808bd, + 0x013e6fbcb, 0x0ecb1bb25, 0x02c066d8c, 0x0dbd93a4a, + 0x09be0ff4b, 0x050460f00, 0x0e27da386, 0x0424b85d6, + diff --git a/src/cpu/intel/model_f2x/microcode_m02f2728.h b/src/cpu/intel/model_f2x/microcode_m02f2728.h new file mode 100644 index 0000000000..95b91b1d6c --- /dev/null +++ b/src/cpu/intel/model_f2x/microcode_m02f2728.h @@ -0,0 +1,513 @@ + /* Intel xeon sig f24 pf 2 from m02f2410.txt */ + 0x000000001, // Header Version + 0x000000028, // Patch ID + 0x007222002, // DATE + 0x000000f27, // CPUID + 0x0f0564209, // Checksum + 0x000000001, // Loader Version + 0x000000002, // Platform ID + 0x000000000, // reserved + 0x000000000, // reserved + 0x000000000, // reserved + 0x000000000, // reserved + 0x000000000, // reserved + 0x0ffffffe9, + 0x00000005e, + 0x096f907f6, + 0x0aa368f02, + 0x0886f064e, + 0x0f3432dcb, + 0x08547bcf9, + 0x047ce518c, + 0x05643cca7, + 0x06c326791, + 0x00bf0c84b, + 0x065106a54, + 0x037adae8e, + 0x0ad3b82de, + 0x0c6fef325, + 0x004d82707, + 0x0f81ec787, + 0x070c19727, + 0x02c850ed8, + 0x0775f0391, + 0x001a07b67, + 0x0f401b1de, + 0x0634e9243, + 0x019ebd8d8, + 0x0ec29bcab, + 0x08568583e, + 0x075a2b1df, + 0x0c36370a9, + 0x0413f1c33, + 0x09353f364, + 0x072af0d33, + 0x032404eba, + 0x0d5f0e2a6, + 0x08ee2cd85, + 0x008b703c4, + 0x0680b6df3, + 0x09825683b, + 0x08ddf0c2a, + 0x095ccad64, + 0x0a64dda9a, + 0x099c3fe4d, + 0x0d5758d64, + 0x077f917da, + 0x0c2724189, + 0x0ada57e8a, + 0x0cd2d1775, + 0x06ddbd0bd, + 0x0bbfa6ac0, + 0x059f16bd3, + 0x0c40b7e58, + 0x0bb6fa16b, + 0x02dd33465, + 0x00f604b3b, + 0x0904a64dc, + 0x049d0a13b, + 0x0ce8336d0, + 0x008a51a53, + 0x03343c245, + 0x0a3b41126, + 0x0ca84e4f6, + 0x0ff466927, + 0x0048f403d, + 0x0bd8f63b7, + 0x07faaef40, + 0x019e43bc4, + 0x078154a50, + 0x0f016c616, + 0x0cb8ca8c6, + 0x09ebc8695, + 0x0be6a5a56, + 0x0fdf3edbe, + 0x07d8cb85d, + 0x0ae97a6e3, + 0x030c58e42, + 0x0075cba54, + 0x01076d2b3, + 0x0a3f12c69, + 0x01cc3acc4, + 0x01648fa92, + 0x0775e436e, + 0x08a72b6e1, + 0x0b6d0de93, + 0x04954b5b1, + 0x0ec6bdf39, + 0x0e1da2ed4, + 0x034f40f66, + 0x0660b428b, + 0x0b8bd391d, + 0x037d77876, + 0x04140076c, + 0x0e5b747a4, + 0x0f3f2fb37, + 0x072b5a1f8, + 0x05fbbe341, + 0x011ff256a, + 0x0dd64b0d7, + 0x016680f3a, + 0x08b5f61e7, + 0x0a2ee9221, + 0x0152bd2af, + 0x04ba620ec, + 0x06c1d443e, + 0x0b0d80763, + 0x089c1e517, + 0x091d63a95, + 0x08e8b921f, + 0x0908ed827, + 0x0fcb35cba, + 0x054d947ff, + 0x08a0c2b74, + 0x0bd45bd3a, + 0x09364ac39, + 0x09dac3b16, + 0x04235e676, + 0x06ef32ba4, + 0x0cd856fd9, + 0x0077b5cdd, + 0x06adee885, + 0x02f47aeb7, + 0x09916e84c, + 0x0794e79e2, + 0x0576d097f, + 0x040bfedce, + 0x0486c40a7, + 0x04563c59f, + 0x0f056c288, + 0x0e4a101e9, + 0x0d51220b8, + 0x05e1603f1, + 0x07733c794, + 0x0ca42178b, + 0x07df5fe7c, + 0x0a29bc8ae, + 0x0eed467f2, + 0x056cdac4e, + 0x085cb92ec, + 0x07a82e6b0, + 0x0c99ae145, + 0x089800cff, + 0x0b5cef343, + 0x0dfea9f1c, + 0x04d452eb6, + 0x0cfb04b69, + 0x07fe696ca, + 0x0b8b23891, + 0x03ff137d5, + 0x025cfdefc, + 0x0e9bb892d, + 0x0573d5587, + 0x098af70b7, + 0x0df739670, + 0x0cad744f2, + 0x0051f787a, + 0x05509563e, + 0x0c4cb60a3, + 0x053c595fb, + 0x0d11bd8b6, + 0x0a0ecec2f, + 0x0d3f35fc5, + 0x0ba12228a, + 0x050b3f0fd, + 0x0f8df7f14, + 0x0f059aea7, + 0x0ac62b793, + 0x0aa51f0fc, + 0x02c88ed46, + 0x02a7d6824, + 0x0418fd185, + 0x061e40fa0, + 0x007ae6581, + 0x0593247f5, + 0x0f81245ce, + 0x037620f69, + 0x0fc9d05e6, + 0x0652dc4d7, + 0x072c382f4, + 0x03ee90cda, + 0x04504c157, + 0x08e72df55, + 0x0fc8b1af4, + 0x037ff6f45, + 0x00cc513cf, + 0x054787a8b, + 0x0bbf92833, + 0x00f099745, + 0x005e0b452, + 0x05fd3a676, + 0x00e292c39, + 0x0d5403793, + 0x00543c6a6, + 0x0c1d89a05, + 0x082bad4d2, + 0x0d4a2f975, + 0x06057fe9c, + 0x00af202f2, + 0x00d358945, + 0x04e2c7453, + 0x080a635da, + 0x03c3edd1a, + 0x093adc35c, + 0x0ab8df389, + 0x031326689, + 0x02f653bea, + 0x086dfac6e, + 0x0b9b20ae2, + 0x037a3dc51, + 0x06bf9b64a, + 0x00a13a704, + 0x0712c6691, + 0x0c21b67f7, + 0x04233c993, + 0x0da705da3, + 0x0a0a68cbd, + 0x0f16816e1, + 0x0950e94f5, + 0x0f187809d, + 0x047b19692, + 0x0aadceb2c, + 0x0b52f1bcb, + 0x0d1bbcc3e, + 0x0f8c485ce, + 0x0c98e5b58, + 0x095faaf79, + 0x00b409dbe, + 0x06c0f1a8f, + 0x0ed84cbaf, + 0x090e2bfe1, + 0x016c9e73a, + 0x01f63849f, + 0x02251a57b, + 0x0eaa24cd0, + 0x06e6a6b5c, + 0x0ff10e11f, + 0x050f60b43, + 0x0134005ef, + 0x06f5d4e4b, + 0x047bf86e1, + 0x047e3ead3, + 0x086485bfc, + 0x0b0f95efa, + 0x0fe6d4562, + 0x07f927c86, + 0x02968f7af, + 0x0cdff3fd7, + 0x0dc857293, + 0x0bb140fae, + 0x0ab2d163e, + 0x05c47b64e, + 0x06c2af8db, + 0x0df38b67d, + 0x0f450c2c6, + 0x00ddb889f, + 0x0c1de1cbd, + 0x0098124d7, + 0x008bb90bb, + 0x0991008fd, + 0x0173c07db, + 0x06233f455, + 0x00fbd1de5, + 0x0d34c0d63, + 0x065c89419, + 0x0c3755799, + 0x0cce3e5fe, + 0x055e6fb5d, + 0x0c924feaa, + 0x0beb5f6a9, + 0x0a0b88522, + 0x0aa953166, + 0x0e90da187, + 0x04e013df5, + 0x0e79a5f7a, + 0x0ebd33690, + 0x0d34d6e03, + 0x0622aecac, + 0x0c4b8334e, + 0x060264bf1, + 0x0a47bba13, + 0x0ced31b68, + 0x05b59af47, + 0x0dc7029b5, + 0x0174d857a, + 0x05c9369aa, + 0x0e9ead1ca, + 0x058eda3c2, + 0x08388c276, + 0x019fbca67, + 0x0af66a53d, + 0x0f162693b, + 0x0672f5bc6, + 0x0dfb03404, + 0x0d42ed4da, + 0x0bf862d14, + 0x04b9f17c2, + 0x00d5f3a0a, + 0x07f0cd537, + 0x0b5c46a98, + 0x05d41d38d, + 0x0f64a219c, + 0x0f5b59e15, + 0x02cd134d8, + 0x0966c8661, + 0x0504fb339, + 0x02edeeb3d, + 0x08385aa21, + 0x06afa7bf9, + 0x07d6f2a81, + 0x0c35be851, + 0x026f51ef8, + 0x0db447baf, + 0x074beb6fc, + 0x092e561b4, + 0x0c0a38a59, + 0x0c5d3f32b, + 0x05cf96828, + 0x029793aaf, + 0x0e461b280, + 0x0a64c77d6, + 0x08f160a3a, + 0x0c4221b60, + 0x0a81c972f, + 0x0461638ce, + 0x0d5d9b0df, + 0x0d153775e, + 0x0f8588f2f, + 0x0cf3bbdc6, + 0x0b4ae2e08, + 0x0f06d37ca, + 0x0422e04a9, + 0x056ae9418, + 0x0a03745c5, + 0x033f5b799, + 0x0ed11ecbe, + 0x0d9552be7, + 0x057a4addf, + 0x0db3b60d4, + 0x082ac7181, + 0x086e671ff, + 0x08c614373, + 0x092be4ccc, + 0x03813576e, + 0x0c41ade20, + 0x0ec37b698, + 0x007ee48be, + 0x035ee922b, + 0x0dee912df, + 0x0f358e19c, + 0x057339b4e, + 0x037e97394, + 0x0d6a3882d, + 0x04e4e6bf6, + 0x0f42dd2d3, + 0x02e073e4a, + 0x0aabc06fa, + 0x0694c9886, + 0x0003b29a9, + 0x002b2de3d, + 0x0ab86db67, + 0x030868d97, + 0x0b223fb7f, + 0x05506cbb5, + 0x0f80fe1b5, + 0x0ea2798ed, + 0x08fb3392e, + 0x0f05fbbc9, + 0x0ba81fa3a, + 0x0314aa3f2, + 0x0b65900f9, + 0x00a4ae3df, + 0x04af0aa61, + 0x05d6f941f, + 0x07f3f9ca0, + 0x03740f88c, + 0x048d28c54, + 0x0c5720e9f, + 0x079b1da77, + 0x041663d91, + 0x018fe7617, + 0x0e85d9785, + 0x086127c77, + 0x095ff39e8, + 0x02d725dd4, + 0x0427bf370, + 0x0c5498ac7, + 0x02f3e312c, + 0x08fc079d7, + 0x0913754e6, + 0x0048796dc, + 0x08c4981b6, + 0x002c4aec8, + 0x07d2b809b, + 0x09730d177, + 0x0aeb7606c, + 0x004e82b37, + 0x08aa09ee7, + 0x04e913d85, + 0x0a7bbfc36, + 0x04aea998d, + 0x0878be408, + 0x0a97f1576, + 0x014a306c4, + 0x071874f1e, + 0x0d39352ee, + 0x0014ee496, + 0x05efc521d, + 0x015625553, + 0x03541f36d, + 0x02eda2872, + 0x074784483, + 0x0c83d481b, + 0x0ebd08496, + 0x06c99f041, + 0x0059a1da5, + 0x0589f0792, + 0x0222201de, + 0x0ca209b2c, + 0x02f11fad4, + 0x048da2638, + 0x04c197f69, + 0x0eb1dc551, + 0x05905d2ee, + 0x00fc62715, + 0x07c1e2170, + 0x0983adf75, + 0x03f75fcf1, + 0x039253d5a, + 0x063d7005a, + 0x0078b84ff, + 0x01cede3c5, + 0x0451cb497, + 0x0475d396a, + 0x08df12dd0, + 0x0d177deaa, + 0x0cf044d07, + 0x0071ad974, + 0x0fdbf72c0, + 0x05d242e8d, + 0x0371d0ace, + 0x05f2e3894, + 0x09799c488, + 0x07a9ca254, + 0x03753e005, + 0x08feda5b2, + 0x011090521, + 0x02a09d3b8, + 0x091600588, + 0x06a148114, + 0x08995f3e9, + 0x0e48c6736, + 0x026a1e9d3, + 0x007966973, + 0x04fed433b, + 0x0932dbb4c, + 0x078323c3c, + 0x044cfad34, + 0x0cc9b3589, + 0x0c618aec8, + 0x05cfbae87, + 0x008bd8afb, + 0x0627537f5, + 0x08ec1f9c2, + 0x01599f101, + 0x0fbdc5c6c, + 0x0fa2a1299, + 0x0fd795bb4, + 0x01c7b1099, + 0x0fb48425b, + 0x09e8cfbab, + 0x0a0daba12, + 0x0b58dc099, + 0x0aeb5c98e, + 0x0b135dacd, + 0x0479b5fee, + 0x044176521, + 0x02ec945c3, + 0x06676039a, + 0x0404b94c4, + 0x07a2af612, + 0x049a25c93, + 0x0b68d6368, + 0x0e1ff29fa, + 0x0ce0cfd3a, + 0x0441ba46d, + 0x0f31a0b4d, + 0x07ce7423e, + 0x00ebb707c, + 0x0a20be4ee, + 0x0d72dff27, + 0x01e8ea782, + 0x0880ca3af, + 0x0e7f73ae6, + 0x04c66c3b8, + 0x03fca28af, + 0x0f4eae9a2, + 0x04f8411d8, + 0x05c04699f, + 0x0be3c49b0, + 0x066f562cf, + 0x0b62e6c85, + 0x08c0ad586, + 0x058e6a6ae, diff --git a/src/cpu/intel/model_f2x/microcode_m02f2734.h b/src/cpu/intel/model_f2x/microcode_m02f2734.h new file mode 100644 index 0000000000..305f83cb80 --- /dev/null +++ b/src/cpu/intel/model_f2x/microcode_m02f2734.h @@ -0,0 +1,513 @@ + /* Intel xeon sig f27 pf 2 from m02f2734.txt */ + 0x000000001, // Header Version + 0x000000034, // Patch ID + 0x011062002, // DATE + 0x000000f27, // CPUID + 0x01e25abf5, // Checksum + 0x000000001, // Loader Version + 0x000000002, // Platform ID + 0x000000000, // reserved + 0x000000000, // reserved + 0x000000000, // reserved + 0x000000000, // reserved + 0x000000000, // reserved + 0x0ffffffe9, + 0x00000005e, + 0x096f952a6, + 0x0aa368f02, + 0x053d271e6, + 0x0f8286513, + 0x0484b4e9a, + 0x09e0c09c2, + 0x003b11314, + 0x0dfb67c98, + 0x0a2957d16, + 0x0f07f25de, + 0x0b84a2555, + 0x072ec8b35, + 0x03445c734, + 0x07744f543, + 0x0c3da0cc0, + 0x0eb36172d, + 0x08b2cf574, + 0x029c867a2, + 0x0e79dfaf0, + 0x054714bb5, + 0x0524dfb69, + 0x00df65433, + 0x00b95ec14, + 0x03dc09ca2, + 0x0584ba068, + 0x02aa558ce, + 0x08cd679c8, + 0x03b2609d0, + 0x0a06306d1, + 0x080bfa93a, + 0x0482678d8, + 0x00cdf1ce6, + 0x05ec4e912, + 0x08a19f7a6, + 0x076f215be, + 0x0577d92c2, + 0x0479cd4ba, + 0x063d1f415, + 0x05af98bc5, + 0x08889bb4f, + 0x08e70943d, + 0x0b5528299, + 0x0fd63e347, + 0x0836fcfd0, + 0x04951a701, + 0x0f4613cdb, + 0x0aa7c2f52, + 0x0a0e290c7, + 0x0f646a80b, + 0x0da5b5a03, + 0x093517b47, + 0x0553d99d1, + 0x0afac198e, + 0x0486b6c6b, + 0x04efa01d8, + 0x0dc6ce226, + 0x0dac3a149, + 0x09b7cf27f, + 0x06c6246a0, + 0x0b6055a39, + 0x0b68cc841, + 0x087b6adee, + 0x01c36edb4, + 0x03ee76d20, + 0x0dbffab67, + 0x0ed12fda6, + 0x0c1aff2f2, + 0x0c110932f, + 0x00933ccfe, + 0x058fa2281, + 0x0285d5ec1, + 0x0d05b216a, + 0x076315645, + 0x0570c5c8f, + 0x06cc52f1c, + 0x0aa977e52, + 0x0066f4e03, + 0x0812bfd2c, + 0x0bfbfd7a9, + 0x070828199, + 0x060182af7, + 0x02a04e000, + 0x030f413b7, + 0x0327cef32, + 0x0ac73aa51, + 0x07c418d9f, + 0x0f493ce0e, + 0x06c14258d, + 0x0a5e2755e, + 0x0d39f994a, + 0x0ee638b08, + 0x055d50476, + 0x09b7afc5c, + 0x05da2ed13, + 0x0b75bf9f4, + 0x02606c01d, + 0x08a1d00eb, + 0x00f73428f, + 0x0b29c4fb4, + 0x0ac13e554, + 0x0a7648fe0, + 0x0be56837b, + 0x0d34fa9ff, + 0x059c855a2, + 0x07d3cc7d7, + 0x0b5b0cb50, + 0x0e6626c0b, + 0x0f07010b7, + 0x0d8054587, + 0x001a5327a, + 0x03ceae28b, + 0x0a3bf737f, + 0x03d1a37e7, + 0x06ce48d1d, + 0x0c9d91222, + 0x042f28fae, + 0x0e8dff3e4, + 0x0fd6898d0, + 0x0e772ab47, + 0x0be452c12, + 0x0f188ee09, + 0x008edb79c, + 0x0ad4d48fb, + 0x05cb75d1d, + 0x0251f4e02, + 0x06b7bb6e3, + 0x0cada2f09, + 0x0536d74eb, + 0x0acfa627a, + 0x051e2ffd2, + 0x0e4655767, + 0x0311dbbec, + 0x01011b68a, + 0x06f6e8deb, + 0x04298665d, + 0x0c0522b3c, + 0x02c3a19dc, + 0x02c48f2ae, + 0x049bca621, + 0x0b6a747fe, + 0x0a1606c81, + 0x09b2a5318, + 0x00ac114c3, + 0x0b5b35aa0, + 0x03f4ee00d, + 0x08b427e75, + 0x0b539fcd3, + 0x0a99fba84, + 0x0821fc647, + 0x0e0ac6d6e, + 0x0912f6f88, + 0x0f2009cd8, + 0x0b32330b3, + 0x0d0b80514, + 0x06f25f157, + 0x0dba2f463, + 0x088ef17d1, + 0x0147c5f21, + 0x06e29cd75, + 0x0ec14e5d1, + 0x0dcfffd24, + 0x0ccc2c510, + 0x0e5e40798, + 0x0b24814e1, + 0x0af0cdaf2, + 0x0825cf5e2, + 0x012acac6b, + 0x0439c5f36, + 0x00c533619, + 0x08e776e71, + 0x0319b44f5, + 0x019c0b404, + 0x054111b2a, + 0x06a767513, + 0x0b16944ef, + 0x030ef18ce, + 0x085df0862, + 0x00737ff49, + 0x077fe06f2, + 0x0b2de0d2f, + 0x071625e95, + 0x0c722c5a2, + 0x003b401a9, + 0x0e8b030b4, + 0x07f9e62ab, + 0x0bff8c966, + 0x0726bfeca, + 0x06adf3831, + 0x0ab85067e, + 0x05167e87a, + 0x0b06ad00c, + 0x0dd974309, + 0x05704880d, + 0x0b7279a43, + 0x038aeda19, + 0x052f5a31f, + 0x0d66d79e2, + 0x083dad3db, + 0x0a138d066, + 0x00b4674d4, + 0x007e7dd7a, + 0x07f5c70c7, + 0x04aade5f0, + 0x04fcd220f, + 0x02ae8ab6f, + 0x06fb11f68, + 0x0bf134ecc, + 0x071d3125c, + 0x03cc3f6ba, + 0x092809507, + 0x0b4a9b236, + 0x097a2ef5f, + 0x0e20e5f23, + 0x05610bfa9, + 0x0ad16eba9, + 0x05207dfba, + 0x00caa3d20, + 0x0c57cccba, + 0x07983d15d, + 0x009ced949, + 0x0ec698959, + 0x053a4b153, + 0x063c74107, + 0x0acf58270, + 0x0bc2982cd, + 0x042bf9c41, + 0x026aff8b4, + 0x09832bd6e, + 0x034e98158, + 0x0434f0f43, + 0x0cb80ccda, + 0x0d81471b6, + 0x0bd176071, + 0x0ab13735c, + 0x04e80e2c1, + 0x0cf7815f0, + 0x0b4e6ae37, + 0x01a90c457, + 0x079426d6f, + 0x0a4ac1e2c, + 0x0f76de77b, + 0x01808cd61, + 0x0d72ea071, + 0x01f02af0e, + 0x09613b531, + 0x0e83f2e9a, + 0x099a5262a, + 0x00e8a756d, + 0x0bc229ac4, + 0x02cb1af6b, + 0x08a8720d6, + 0x0c84d2c77, + 0x08547ad96, + 0x0eb794e72, + 0x0b51119ea, + 0x01c0121ea, + 0x09f8ae83b, + 0x016459999, + 0x05c17deaf, + 0x0278a3e3b, + 0x0f2bbb704, + 0x054df1a00, + 0x0521ef94e, + 0x0d40de734, + 0x0ca5badee, + 0x0a2fe3027, + 0x02ffe3ada, + 0x01df00fb9, + 0x05feb168c, + 0x081674308, + 0x099713c0e, + 0x056aae017, + 0x0e62e68f3, + 0x0aa15163a, + 0x031ac7b10, + 0x0e6a86d9c, + 0x0a006782e, + 0x09baefc91, + 0x0111277d5, + 0x080f63a4b, + 0x0624044d6, + 0x0d91a5de5, + 0x05d0255d6, + 0x092b82310, + 0x008faf5e5, + 0x0e482ff69, + 0x00a1f1757, + 0x0dc010e34, + 0x09cd07e48, + 0x0677fcfa3, + 0x00384138d, + 0x0a104220a, + 0x05431c7ec, + 0x00e8b7efb, + 0x0f1ebcd61, + 0x097ae7029, + 0x0191ff006, + 0x04308b147, + 0x0a11e05f7, + 0x02c7cb5a4, + 0x01d345971, + 0x028d23638, + 0x0c5a7a5bb, + 0x03307c971, + 0x00d3782ae, + 0x02b798842, + 0x01fc27334, + 0x04ff82ddb, + 0x0543ba685, + 0x047732c7a, + 0x0ad094a6e, + 0x0b8ff60e4, + 0x043f9ee2f, + 0x0e9a114e8, + 0x0f036be6e, + 0x03fb488a0, + 0x0280b2d46, + 0x0b1887c58, + 0x054ae583a, + 0x0454b6ce6, + 0x0e617a2c1, + 0x0b9335ac3, + 0x072361e12, + 0x0c856637a, + 0x0741b6cbe, + 0x0cf1f6f25, + 0x09f405fff, + 0x0d2525b02, + 0x022d8b05a, + 0x016860f11, + 0x0b02983e9, + 0x0388b9c2c, + 0x0196cb2f2, + 0x0fca5f1a2, + 0x09e60965d, + 0x05bed99ff, + 0x059e361fc, + 0x09361bde8, + 0x0a1527365, + 0x03f300237, + 0x0b0f5e2b8, + 0x08fb00a40, + 0x071cb9744, + 0x03327e8d3, + 0x0e89994d4, + 0x03987e389, + 0x028c6d8f7, + 0x0b2ba9fc4, + 0x0df109e0e, + 0x0622634b2, + 0x04904a82e, + 0x0576c3c2f, + 0x0e95eae46, + 0x0fb773013, + 0x0f98b91de, + 0x04edc30d5, + 0x0c6e60080, + 0x0ebefab96, + 0x0d7684df2, + 0x09cd2c3e1, + 0x0d433902a, + 0x07b9aa9eb, + 0x03c99cbaa, + 0x05a0fa53d, + 0x077297830, + 0x0869db621, + 0x0aee2d56a, + 0x02ce907c1, + 0x00aa5097c, + 0x0662e7862, + 0x0a5bfbc61, + 0x02610f3bf, + 0x03a741265, + 0x099a5836d, + 0x0edb5f89a, + 0x03ef2cfd7, + 0x00deebc49, + 0x0b3893f47, + 0x0b39982ac, + 0x0221eac08, + 0x054b5a11d, + 0x05cb8e784, + 0x087d5ac86, + 0x053fb0b32, + 0x0376b6284, + 0x0f2e4aca9, + 0x06fa350de, + 0x001453f3e, + 0x07184b158, + 0x01131e78b, + 0x0940b0d72, + 0x0abcd4431, + 0x01bb39e9a, + 0x02dd67c00, + 0x0f4babbf1, + 0x04e147ca1, + 0x061392a2f, + 0x0b5525e72, + 0x0307bc08c, + 0x00093e50a, + 0x0a3094d73, + 0x0c7aa3e29, + 0x002386d30, + 0x0a92b57e8, + 0x06ef5c157, + 0x01c3c25ac, + 0x03157eaa5, + 0x019c3aca2, + 0x07a76bba3, + 0x0d814aa5e, + 0x091716fbe, + 0x0dbcdbe3c, + 0x06f339fab, + 0x0a3f1e4da, + 0x088a1c0df, + 0x0d78cd414, + 0x0a95904cf, + 0x0d0f8b595, + 0x0b9626711, + 0x034052c93, + 0x0b398c7dc, + 0x05a029110, + 0x01421800a, + 0x0aeb25765, + 0x0bbfafe68, + 0x0d80c81f1, + 0x02fb99b5c, + 0x0ec68948a, + 0x0f5b33177, + 0x09b3196fa, + 0x04c054a2c, + 0x01283d6e1, + 0x034a029a7, + 0x0044c77ba, + 0x0775506cd, + 0x08cf19e0c, + 0x0fb249f8b, + 0x011e8ae8d, + 0x0e480faf2, + 0x0bcbf0c49, + 0x0f6d3bb3c, + 0x02fe733fb, + 0x089fdfec1, + 0x0362b1aab, + 0x0f53c7d89, + 0x00dc435be, + 0x089c41440, + 0x09d877824, + 0x00f116cbb, + 0x0f6934124, + 0x0b5f7e7bc, + 0x0d8f0faf7, + 0x0977186f0, + 0x085359865, + 0x0bba92d0d, + 0x0ca93229d, + 0x00c3a3454, + 0x063d62ec8, + 0x0c5a8861b, + 0x0f2d658a6, + 0x02482c709, + 0x0b567f38f, + 0x0395c8d02, + 0x0f1ce954c, + 0x080a0f97a, + 0x039e9a636, + 0x0c5ae1e48, + 0x06e6cc542, + 0x079abfdda, + 0x07bc66e32, + 0x0a7d822cf, + 0x04e2e83e3, + 0x07c270c9b, + 0x086cdd198, + 0x028f90f64, + 0x012048f34, + 0x0a4359214, + 0x0269d80b0, + 0x070bd0fd1, + 0x0250405f0, + 0x0258411f4, + 0x0f4055035, + 0x0df304b75, + 0x06c42bbe7, + 0x0d571b366, + 0x09ec59e75, + 0x0fa389422, + 0x073bb8104, + 0x04d6e27ee, + 0x07079a223, + 0x06a222651, + 0x0145557aa, + 0x0c2fa3440, + 0x0823b5d37, + 0x0a32cfcba, + 0x08f1cf0b4, + 0x0e9547828, + 0x0e5fa5edd, diff --git a/src/cpu/intel/model_f2x/microcode_m02f2918.h b/src/cpu/intel/model_f2x/microcode_m02f2918.h new file mode 100644 index 0000000000..3360b6647f --- /dev/null +++ b/src/cpu/intel/model_f2x/microcode_m02f2918.h @@ -0,0 +1,513 @@ + /* Intel xeon sig f29 pf 2 from m02f2918.txt */ + 0x000000001, // Header Version + 0x000000018, // Patch ID + 0x007182003, // DATE + 0x000000f29, // CPUID + 0x00e0b85c7, // Checksum + 0x000000001, // Loader Version + 0x000000002, // Platform ID + 0x000000000, // reserved + 0x000000000, // reserved + 0x000000000, // reserved + 0x000000000, // reserved + 0x000000000, // reserved + 0x03329bed4, + 0x0074ca74b, + 0x076a4c9be, + 0x0b3d0ac3b, + 0x059c1ebd3, + 0x09d06facf, + 0x0a272f2b8, + 0x0185d2aed, + 0x0d79b2394, + 0x086f96353, + 0x00b212cc9, + 0x0923bf0b8, + 0x0854956f8, + 0x0bc5754f3, + 0x0047a6840, + 0x0a548499f, + 0x08bb8c3d2, + 0x007136d29, + 0x084655796, + 0x085dc2f78, + 0x005b97d28, + 0x0baae9586, + 0x0f0a8fe9d, + 0x002d23e93, + 0x0d9065365, + 0x063898d0a, + 0x03380e625, + 0x0bd8ff455, + 0x0d71f8959, + 0x0e52d4c0d, + 0x0f5dec8dc, + 0x05155694d, + 0x07f1dc433, + 0x0984baac7, + 0x09307941a, + 0x0ebba222b, + 0x04c4eddf7, + 0x0ea59b24d, + 0x0d40dd91e, + 0x0b4be5361, + 0x013a60e39, + 0x062f71414, + 0x006ac1ec3, + 0x0f16fa69f, + 0x079e1b1a6, + 0x0caeb6bf7, + 0x0e3968588, + 0x067f9dfda, + 0x0a699431d, + 0x01ffeaa9a, + 0x06a222551, + 0x0edc5ecaf, + 0x0ff705e90, + 0x06335836e, + 0x0e1230c08, + 0x06352644b, + 0x06f3459f4, + 0x0513ac31b, + 0x059ac2e3e, + 0x076358db9, + 0x099a52964, + 0x09b58f026, + 0x0725a1ab3, + 0x02cf8d82d, + 0x0911346c5, + 0x062fed2e0, + 0x04fdb6412, + 0x0b1fce704, + 0x0ac4475d1, + 0x0f4365cad, + 0x0c9522b51, + 0x06be394be, + 0x066a34ccb, + 0x0e606a479, + 0x0a9551e8a, + 0x0e7bd89cf, + 0x081139437, + 0x036e68496, + 0x02e964e97, + 0x0e83ea910, + 0x08951b1d2, + 0x03771f8d7, + 0x08f43b11e, + 0x078298c2a, + 0x0a19b40bf, + 0x02b59f3dd, + 0x09f599f82, + 0x06d4bb01a, + 0x0b969ccdc, + 0x063600cf7, + 0x0d62993f9, + 0x0cf33b852, + 0x0297684f9, + 0x09a5366f0, + 0x0a85a510c, + 0x0cbd8e598, + 0x096f94325, + 0x0daffd9a9, + 0x08dc23c89, + 0x0faf9250a, + 0x002f8b10b, + 0x00c09b5cb, + 0x05c1d61bb, + 0x0da89a826, + 0x0e3bc0725, + 0x0f61d8f65, + 0x012b46a9a, + 0x0200957f6, + 0x00da79d3f, + 0x06711092c, + 0x0fb84416b, + 0x0ffbe8fc1, + 0x011a3dd10, + 0x0adce95e8, + 0x0fe9baacc, + 0x06b8ec8a4, + 0x0f2a1e5c3, + 0x0d56ab549, + 0x00859a811, + 0x0abcbdb26, + 0x0af788ce1, + 0x0ea8d82fe, + 0x03eca203a, + 0x0e9dd69c8, + 0x00baebdcf, + 0x0003276e8, + 0x09c50beb4, + 0x0dbc83b67, + 0x0bad24e29, + 0x0f9fd719a, + 0x065a3362e, + 0x03b7d4bd4, + 0x0a0c265f5, + 0x07634cee9, + 0x00f768f1b, + 0x0da01e841, + 0x08e4cec81, + 0x0b64af8cb, + 0x0ad5d20fa, + 0x068cd9345, + 0x0d98a7739, + 0x0ec42b0ae, + 0x074ef6ebb, + 0x0b72df903, + 0x0c2575fed, + 0x0e996d597, + 0x0d17bbee4, + 0x0e59c6594, + 0x02fb7914f, + 0x016daeb9a, + 0x02594ff1e, + 0x0de03f3bf, + 0x0b4b8e9ec, + 0x0e145693d, + 0x0f80ebb0c, + 0x03ab77011, + 0x016f883e2, + 0x05f8afaf2, + 0x0ab3407e5, + 0x0e50ad4de, + 0x0136099ab, + 0x099e96e09, + 0x0f8de926d, + 0x0409453d8, + 0x01da14466, + 0x0e2a19832, + 0x088c9bf9e, + 0x0970810b1, + 0x0f60b3ca5, + 0x0b09ae791, + 0x0e7409020, + 0x0ff5caf65, + 0x03613105d, + 0x07758e647, + 0x04ea9cb40, + 0x0af5a7c9a, + 0x02aced763, + 0x0eeb02a1c, + 0x022c3092f, + 0x04b805b32, + 0x0372bc093, + 0x0c25a85ae, + 0x065715cb3, + 0x0d12c469b, + 0x0e2a83a87, + 0x03757f955, + 0x02ff422bf, + 0x0f35c618f, + 0x0827fca84, + 0x0dd519318, + 0x0dee4ebf0, + 0x0114ab35e, + 0x0e2c7ed56, + 0x067d4d66d, + 0x01bba167b, + 0x0cf54d370, + 0x059c3befc, + 0x0805e8928, + 0x046970761, + 0x076d199c3, + 0x0e607fe0b, + 0x0d0e76651, + 0x0cb59835e, + 0x084173ed2, + 0x024cd7d6b, + 0x0cb3c23cc, + 0x097cfdc89, + 0x0ce55887d, + 0x0c3562057, + 0x03c79ea38, + 0x031b95d11, + 0x0cc6a29c3, + 0x01a2e3a6d, + 0x0d81f86e9, + 0x00ebfe35e, + 0x028efd0a6, + 0x03158ff42, + 0x035aa61eb, + 0x0724c40d3, + 0x0cf0e6ffa, + 0x06cc9a9bb, + 0x0e27ad39d, + 0x02dfafc10, + 0x030891d55, + 0x0e2514225, + 0x0ee329e1f, + 0x0f4430f11, + 0x0e281e729, + 0x01c30b184, + 0x08c71c29b, + 0x01db9a543, + 0x0edfad515, + 0x0071532b1, + 0x068251089, + 0x070cc3e04, + 0x0b7c5c7fd, + 0x03fc4f321, + 0x0c24893ad, + 0x0e68273f5, + 0x069cf0691, + 0x0c6794d67, + 0x02acd766f, + 0x07426d7b2, + 0x0df336ffa, + 0x09e63e3fd, + 0x0ec080c9f, + 0x027826e24, + 0x00d38caab, + 0x0e4c78756, + 0x0dc24d7f2, + 0x02b9e488b, + 0x0dcec3e72, + 0x0867536fe, + 0x0abde994d, + 0x0cf267957, + 0x0e3b33aa2, + 0x0900836a8, + 0x0605564d4, + 0x0e5006b9a, + 0x0a2655683, + 0x00da56c2e, + 0x0f08b8e9c, + 0x06767940e, + 0x0640f781e, + 0x03840e0d6, + 0x079fc3a8d, + 0x0a54a1961, + 0x0ec16340f, + 0x057bf0c61, + 0x09082e9a7, + 0x0c7264e5a, + 0x07df38c2f, + 0x07a5c1c67, + 0x0d5715872, + 0x06537508f, + 0x085316c41, + 0x065d908ba, + 0x08c377ce1, + 0x0920bf34e, + 0x0c3a5fddd, + 0x050c46a39, + 0x0744ebffa, + 0x02e289f15, + 0x0abe2d4b2, + 0x0eed6f10c, + 0x0d07dda7c, + 0x0ba12b57a, + 0x06fe894c4, + 0x06f38610f, + 0x0240ce1a5, + 0x066f0ec19, + 0x0e8ff8ca9, + 0x02c6213e6, + 0x0e3a4f1d1, + 0x0635c8eb1, + 0x0357d4a4e, + 0x0dbe916d2, + 0x0f0a31cff, + 0x053ba740a, + 0x0d20dd392, + 0x00ee452af, + 0x0b5c14d17, + 0x019e70471, + 0x0f12ef4dd, + 0x0f759fd85, + 0x04ce679af, + 0x06eeb689b, + 0x09a96db15, + 0x0b1a87685, + 0x0c4bf146b, + 0x0ee7711a1, + 0x06dee66e1, + 0x0cc07fe31, + 0x03381bb8b, + 0x0526c5927, + 0x0da79a123, + 0x00414480a, + 0x0d0fb99b9, + 0x0ade3682c, + 0x03a783bdf, + 0x0110d8965, + 0x0f814b52d, + 0x075add544, + 0x0d65c42a8, + 0x0f035fa90, + 0x02d87a12e, + 0x0b9ef5f9b, + 0x0d36ec2db, + 0x03518bc58, + 0x0d6afc7d8, + 0x0cc3bc865, + 0x032cba2f5, + 0x0e74c6724, + 0x0e03f2e96, + 0x058a9d15a, + 0x0d2033865, + 0x04470e293, + 0x0ae63a8b1, + 0x063560a03, + 0x0fc9418a4, + 0x0b2a81e9d, + 0x07513002a, + 0x0185a1324, + 0x09338517b, + 0x0ae5db469, + 0x0c8c399e9, + 0x0d66aad92, + 0x04007b0d0, + 0x0ea6574f3, + 0x0b73d78f3, + 0x0a6e0604f, + 0x0c13ae042, + 0x05eafb097, + 0x04a7c2731, + 0x01068d9c5, + 0x08d324a61, + 0x07142004b, + 0x0e4295abf, + 0x018ce86c9, + 0x043bc75bf, + 0x0468a3c36, + 0x013af562c, + 0x0651b3dc2, + 0x0c83fbdad, + 0x0102e9e9a, + 0x0fcbf1a1a, + 0x06f19d68d, + 0x00c9a231e, + 0x06081f2fc, + 0x0c1b6d890, + 0x0622baecb, + 0x0e2170084, + 0x03a8de255, + 0x0de806767, + 0x064202cb8, + 0x0ca531f76, + 0x03a7daf7b, + 0x02a9c50c4, + 0x03bff38d4, + 0x0e377aeb0, + 0x06e52a44c, + 0x0da43c5b9, + 0x060488151, + 0x010189859, + 0x0e9317dda, + 0x0fcc22809, + 0x0b87046a1, + 0x0d93ad01b, + 0x0ac234692, + 0x070e5510d, + 0x06a7716b2, + 0x0522e3d28, + 0x063c58530, + 0x0416d8f72, + 0x0c0380627, + 0x062dc80cf, + 0x0475038d3, + 0x08f53ab9d, + 0x0bd2c7049, + 0x092c23223, + 0x03bc37d70, + 0x0d43b29ac, + 0x00b216221, + 0x0dcb983c6, + 0x0711a19d1, + 0x02d382316, + 0x06b242aa7, + 0x05fde5d00, + 0x0bdc5f1e5, + 0x0810d17e3, + 0x0b63c663b, + 0x03a8c18eb, + 0x017abff77, + 0x04900b01a, + 0x0d80067f8, + 0x0969e0260, + 0x04e657591, + 0x050590503, + 0x08ff18b94, + 0x007575bf3, + 0x0080cab76, + 0x0b9b9d6f1, + 0x0ad6a4dad, + 0x00f534392, + 0x0b866441e, + 0x0deb6d2ee, + 0x0c7f0e213, + 0x0cfa7f497, + 0x0303a32f4, + 0x0c407e838, + 0x0eb65cce1, + 0x01416ad8b, + 0x04fa2a498, + 0x0ce06724d, + 0x07674ed6e, + 0x086587ea9, + 0x05af951f0, + 0x02e03b991, + 0x04ae8b441, + 0x0e5aa5fdb, + 0x059104c1f, + 0x04c3389b4, + 0x0c7225e04, + 0x0e76d7adf, + 0x01be6bce6, + 0x023536151, + 0x0577c4a93, + 0x0cf20768e, + 0x0d0a15a40, + 0x0deae556e, + 0x0ce4909cf, + 0x036fe8c50, + 0x02f125042, + 0x02051dced, + 0x0e3048c09, + 0x0cbe64203, + 0x0080eef19, + 0x0ea7a3015, + 0x0cc558219, + 0x09f3676d6, + 0x02bc02a0c, + 0x0e1e5b3c4, + 0x0c4bfadbc, + 0x05ad6f272, + 0x078e69aa9, + 0x0ad8f959d, + 0x0b372cc9b, + 0x07f0b3e76, + 0x09fc4bdfe, + 0x04b40fb2f, + 0x03b4f00a7, + 0x04a10fdae, + 0x0acfcea26, + 0x0595d7ef8, + 0x0da34e8ad, + 0x0adc285e2, + 0x0d3fe31b0, + 0x061ca77c5, + 0x0c1b795f9, + 0x0da8aaff9, + 0x0eb54735a, + 0x0946fa909, + 0x0485b696a, + 0x090ac554e, + 0x083d2a0cd, + 0x0c49f5f6c, + 0x0f370b606, + 0x08ef2e6db, + 0x06b48d5b1, + 0x0bab3d7f4, + 0x0b8958ae4, + 0x0f73e1619, + 0x03835ee1a, + 0x0824f77b5, + 0x062adcb8d, + 0x0cf229251, + 0x0a60ade9e, + 0x0fa643142, + 0x069d27040, + 0x0c87c327f, diff --git a/src/cpu/intel/model_f2x/model_f2x_init.c b/src/cpu/intel/model_f2x/model_f2x_init.c new file mode 100644 index 0000000000..ecc454c974 --- /dev/null +++ b/src/cpu/intel/model_f2x/model_f2x_init.c @@ -0,0 +1,66 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* 512KB cache */ +static uint32_t microcode_updates[] = { + /* WARNING - Intel has a new data structure that has variable length + * microcode update lengths. They are encoded in int 8 and 9. A + * dummy header of nulls must terminate the list. + */ +#include "microcode_m02f2203.h" +#include "microcode_m02f2410.h" +//#include "microcode_m02f2728.h" +#include "microcode_m02f2734.h" +#include "microcode_m02f2918.h" + /* Dummy terminator */ + 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, +}; + + +static void model_f2x_init(device_t dev) +{ + /* Turn on caching if we haven't already */ + x86_enable_cache(); + x86_setup_mtrrs(); + x86_mtrr_check(); + + /* Update the microcode */ + intel_update_microcode(microcode_updates); + + /* Enable the local cpu apics */ + setup_lapic(); + + /* Start up my cpu siblings */ + intel_sibling_init(cpu); +}; + +static struct device_operations cpu_dev_ops = { + .init = model_f1x_init, +}; +static struct cpu_device_id cpu_table[] = { + { X86_VENDOR_INTEL, 0x0f22 }, + { X86_VENDOR_INTEL, 0x0f24 }, + { X86_VENDOR_INTEL, 0x0f27 }, + { X86_VENDOR_INTEL, 0x0f29 }, +// { X86_VENDOR_INTEL, 0x0f25 }, /* I don't have a microcode update for this cpu */ + { 0, 0 }, +}; + +static struct cpu_driver driver __cpu_driver = { + .ops = &cpu_dev_ops, + .id_table = cpu_table, +}; diff --git a/src/cpu/intel/model_f3x/Config.lb b/src/cpu/intel/model_f3x/Config.lb new file mode 100644 index 0000000000..dc58d7df50 --- /dev/null +++ b/src/cpu/intel/model_f3x/Config.lb @@ -0,0 +1,10 @@ +dir /cpu/x86/tsc +dir /cpu/x86/mtrr +dir /cpu/x86/fpu +dir /cpu/x86/mmx +dir /cpu/x86/sse +dir /cpu/x86/lapic +dir /cpu/x86/cache +dir /cpu/intel/microcode +dir /cpu/intel/hyperthreading +driver model_f3x_init.o diff --git a/src/cpu/intel/model_f3x/microcode_M1DF340E.h b/src/cpu/intel/model_f3x/microcode_M1DF340E.h new file mode 100644 index 0000000000..a378fba8ac --- /dev/null +++ b/src/cpu/intel/model_f3x/microcode_M1DF340E.h @@ -0,0 +1,1549 @@ + /* + Copyright Intel Corporation, 1995, 96, 97, 98, 99, 2000. + These microcode updates are distributed for the sole purpose of + installation in the BIOS or Operating System of computer systems + which include an Intel P6 family microprocessor sold or distributed + to or by you. You are authorized to copy and install this material + on such systems. You are not authorized to use this material for + any other purpose. + */ + + /* M1DF340E.TXT - Noconoa D-0 */ + + + 0x00000001, /* Header Version */ + 0x0000000e, /* Patch ID */ + 0x05042004, /* DATE */ + 0x00000f34, /* CPUID */ + 0x9b18561d, /* Checksum */ + 0x00000001, /* Loader Version */ + 0x0000001d, /* Platform ID */ + 0x000017d0, /* Data size */ + 0x00001800, /* Total size */ + 0x00000000, /* reserved */ + 0x00000000, /* reserved */ + 0x00000000, /* reserved */ + 0x9fbf327a, + 0x2b41b451, + 0xb0a79cab, + 0x6b62b8fd, + 0xc953d679, + 0x1e462145, + 0x59d96ae5, + 0xb90dfc00, + 0x4f6bd233, + 0xa8dda234, + 0xb96b5eb7, + 0x588fc98f, + 0xdd59a87c, + 0xb038ad4c, + 0x338af84c, + 0x44842e0d, + 0x2e664aa6, + 0xd46497b7, + 0xddbcd376, + 0xd86dd62a, + 0x27ceec6e, + 0xb089ff2e, + 0xfc549965, + 0x556f5b78, + 0xa8c4732c, + 0x0969180d, + 0x14a346e8, + 0x561a91b3, + 0x1cd21cde, + 0xd09d06bc, + 0x3a4cae91, + 0x5d23fa54, + 0x43747e8d, + 0x19ff0547, + 0xdae0e17a, + 0xc16bab85, + 0x2364fea6, + 0x8508f3c6, + 0x598ca70f, + 0x72fb0579, + 0x24c28f46, + 0xed19ad6b, + 0xcd6206fe, + 0xe3d091e8, + 0xb7f1f9f1, + 0x501c1c77, + 0x5fdda272, + 0xbdc8301b, + 0x64b200ea, + 0xb8460b09, + 0x26d125ea, + 0x03e27414, + 0x3d023f17, + 0x0b0520c8, + 0x74fba5c6, + 0xc3d761de, + 0x672cf9fa, + 0x4c000ff0, + 0x0a8bbda4, + 0x5dd7b3b1, + 0x439e12f1, + 0x235444bb, + 0xa7513c27, + 0x8ce97fbf, + 0xb41f857c, + 0x6e71fd9d, + 0xd11f2fe3, + 0x5d92f44d, + 0x4b06f5fa, + 0x7695eed0, + 0x3aa045e8, + 0x9ce894d4, + 0x02a1723a, + 0xa4d9e99e, + 0x0ca6f5ec, + 0x1df8ee10, + 0x82d9b0a9, + 0xb7fceca0, + 0x0eebfe97, + 0xda2e8c7b, + 0xf9ffdf4b, + 0xb6c84538, + 0xb7eee9d7, + 0x89f8e993, + 0x7d51dbf8, + 0xc75f6389, + 0xd2e76e6c, + 0x60fdc275, + 0x6758a029, + 0x9d463f02, + 0x40069261, + 0x55ebc0b5, + 0xa90d5bb2, + 0x33a3d807, + 0xa6e603c8, + 0x4b0e2505, + 0xd28eb45d, + 0xeab8055b, + 0x97439c5f, + 0xb3ccb9dd, + 0xb33f1bb5, + 0xd34e6009, + 0x946e7d07, + 0x68908cea, + 0x435581e5, + 0xb2ceee79, + 0x112df532, + 0xd7d079f5, + 0xbcb997f9, + 0xdc3c7807, + 0x5c6b4af9, + 0x3f919e49, + 0x62a597b9, + 0x20e4fc37, + 0x4241bc5c, + 0x66636de1, + 0x2a0f3988, + 0x62281e5f, + 0x9d19500a, + 0x9f349dbf, + 0x9b16869d, + 0x0299fec1, + 0xa013cf08, + 0x36e47a83, + 0x8cf78105, + 0xa92a7080, + 0xece3a363, + 0x01361d90, + 0x1555e2b4, + 0x9ec1207c, + 0x93f5f638, + 0x1854d4e4, + 0xa5768108, + 0xe6b867bc, + 0xec91c0a3, + 0xb42c40b9, + 0x7a543ed2, + 0xbe080c40, + 0x72edfcda, + 0xd2ddde37, + 0x1e1f1563, + 0xd24ca500, + 0x761df139, + 0xc9e79091, + 0xab44cdcb, + 0x16c204d7, + 0x5d4ff67b, + 0x8651ea63, + 0x09d8dc41, + 0x643cddcf, + 0x5709c4b7, + 0x04384755, + 0x30e52749, + 0x1329aac2, + 0x7bf64fad, + 0x5d3e6b49, + 0x515aa075, + 0xfe7e7f8d, + 0x5461d781, + 0x0547b8b2, + 0xa71b89c7, + 0x30f03604, + 0xe37970a5, + 0x169e27f9, + 0x1024e384, + 0x62198879, + 0xd689b295, + 0xa5a340c0, + 0x8460b084, + 0x86a301c4, + 0x2e589fca, + 0xf4687ad0, + 0x8d4b4c7d, + 0x0d9635e6, + 0x91aac10f, + 0xcff70e8b, + 0x904c0678, + 0x56237892, + 0x4d8eefc5, + 0xdd1b74d2, + 0x6405fb4b, + 0x8b15cc77, + 0x83f3fca3, + 0x1ad9724c, + 0xbccceb84, + 0x18bb629d, + 0x5ae70712, + 0x6ca076d8, + 0xa231c82b, + 0x6a60573f, + 0x9046baf1, + 0x7e08ade7, + 0xd949e10a, + 0xfc5a396f, + 0x9cb8eaaa, + 0x4e050c89, + 0x751b8672, + 0x0e0d565a, + 0x837787e8, + 0xdb01db4e, + 0xb41d9bb5, + 0x41e4ce55, + 0xfe1700ae, + 0x89e70c4f, + 0x05f007b9, + 0x105a311e, + 0xa8793ba4, + 0xa7572e49, + 0xaf72e942, + 0x59f5c594, + 0x583f872b, + 0x9041d9de, + 0x72f628bd, + 0x8bb19420, + 0x957eca65, + 0x1b3bd477, + 0x581c475a, + 0x9a87bbbc, + 0x2fa9cca5, + 0x6115e020, + 0xd44f74ef, + 0x37ea131f, + 0x3f07b084, + 0x543aca7a, + 0xe91d50c6, + 0xc9139700, + 0xcd0182ac, + 0xe09514f7, + 0xfe01038e, + 0x7c97be09, + 0xbc79c28b, + 0x18aea71f, + 0xd6776f66, + 0xc020822a, + 0xd7fc90ac, + 0x382cd812, + 0x60c49263, + 0xb279295a, + 0x69eb4399, + 0x8e32fd5e, + 0xfe739807, + 0x1495d3e5, + 0xbf025c3f, + 0x190920d3, + 0x1680dbaf, + 0x1eda0681, + 0x93bac657, + 0x0e18680c, + 0x2e5d85f6, + 0x100fa070, + 0x171e7931, + 0x79f779fa, + 0x8723130d, + 0x222c2d90, + 0xbffd0448, + 0x31e7a11e, + 0x15952725, + 0x0a0d6880, + 0x2045bb27, + 0x65903721, + 0x009adfcf, + 0xc5b6017a, + 0x98920c52, + 0x960b5e3f, + 0x5bc23253, + 0x0c299c66, + 0xd0ac9e6e, + 0xf7735ce5, + 0xa4e70ec1, + 0x0b0dac09, + 0x7a5a9bfa, + 0x06001d88, + 0x316f6221, + 0x7fe9aeb1, + 0x22543edc, + 0xf8b94fde, + 0x392bf047, + 0xb0f1bc2c, + 0x984d8795, + 0xa8db0148, + 0xc42addb0, + 0x9883a82c, + 0xe8676a43, + 0x95f5ccf7, + 0x06afe12c, + 0x756a1b33, + 0x1519091b, + 0x61c5ccd2, + 0xf3288b41, + 0x7d33e180, + 0x76cc5a24, + 0xd1a18aa4, + 0xa353a07c, + 0x4e173b6b, + 0x3ad5b70c, + 0x6440b4c9, + 0x37979ae9, + 0x0c517fc6, + 0xc8252fb3, + 0x21a33062, + 0xe21e8070, + 0xa3e8fe61, + 0xb8e22e6e, + 0xd6f2fd79, + 0xc9185337, + 0xd8ef8db8, + 0x952e6ac3, + 0x2ba27d5a, + 0xe4b502d7, + 0xc720f8f4, + 0x5601e451, + 0x2dabcbf3, + 0x06d6bf4e, + 0x580e0ec5, + 0x42099aa9, + 0x288a795a, + 0x09d59ae5, + 0xc56311bf, + 0xc9a0be28, + 0x82ab89e4, + 0x63a6b7de, + 0xb654846e, + 0x53fa8bbc, + 0x766e12b2, + 0xa7a5de15, + 0x951a8fe8, + 0xa638273b, + 0x78ce2cc7, + 0x1cff0475, + 0x53318a42, + 0x1a30f362, + 0x55d14483, + 0xf19b2f8e, + 0x66a791b8, + 0xf454cc9b, + 0xc688da27, + 0x8877ee5d, + 0x7c66e45e, + 0x8fa7945b, + 0x9eb7942f, + 0xdedf49b4, + 0x22ae7a86, + 0xd2eaf279, + 0x5f7547a2, + 0x13872ebf, + 0x70ebb737, + 0x9e433f1c, + 0x40987dc1, + 0x9321c994, + 0x832871b0, + 0x77e8ebad, + 0x0a2853a2, + 0x75460864, + 0x4028c1f7, + 0x066fb1db, + 0x6a8a47dd, + 0x8ec0f102, + 0x3d9502bb, + 0x38e3b20b, + 0x1d24cebb, + 0xcd316180, + 0x2e39fcaa, + 0xd68dff5b, + 0x1b8d3990, + 0xce9715b9, + 0xcb3ef0d4, + 0xc87865ec, + 0x6eb72a87, + 0xf02302f8, + 0x9d06420c, + 0x013ada55, + 0x482dc805, + 0x469d83e4, + 0x4f64348b, + 0xb320168a, + 0x736063a3, + 0xa44e2034, + 0x14cf72d6, + 0x7758468f, + 0xdc130a50, + 0xcd3a98d1, + 0xc7d3ec32, + 0x6008c722, + 0x7729faf1, + 0xca184989, + 0xcdfbfe93, + 0x140df767, + 0xeab2b859, + 0xef388f9e, + 0xcfad00e8, + 0xb3edb3f2, + 0xd9bf19b3, + 0x7a988c4f, + 0xc9478520, + 0xb0120f5a, + 0x6a2639aa, + 0x8a8f628f, + 0x446a7769, + 0xc02ae4de, + 0x0869bd59, + 0xef8ccf75, + 0x46670a06, + 0xea9aeb5a, + 0x16162088, + 0x22b7f89e, + 0x54f46cae, + 0xf401a8fe, + 0xeb80ce25, + 0xfd811c6a, + 0x95714e43, + 0x6369cc4a, + 0x091d595a, + 0x0ed23abc, + 0x8a5b0807, + 0x8f6d34b4, + 0x5f6048fe, + 0x03bfcc6d, + 0x54a49828, + 0x36e096a4, + 0x1dfe968e, + 0x826336c0, + 0xfb2453dd, + 0xab618401, + 0x7c0a4e4a, + 0xab852bb5, + 0xd1182cab, + 0x54688e26, + 0xf8bc5226, + 0x92e39ae8, + 0x4969458d, + 0xb5e9e4e0, + 0x1cc35776, + 0x066a5f0e, + 0xa0f944bd, + 0xe6c4db63, + 0x1c171fd6, + 0x36bdf158, + 0x75c65c25, + 0x4200bb72, + 0x4616777f, + 0xbc70b23c, + 0x4546dda2, + 0x7fa13471, + 0xe4db3be2, + 0x0e1eb25a, + 0xf0253cc3, + 0xcaef50f5, + 0xaa67a3f1, + 0x6fabd333, + 0xe3e3686e, + 0xe4398405, + 0x18334de1, + 0xbb8eedef, + 0xbdfe0fd4, + 0x635a8be2, + 0x502d965f, + 0x41308946, + 0x1e5ae64d, + 0xbeb7ff7a, + 0xc33a7af0, + 0x8d5a19a6, + 0x77547cd0, + 0x8c98d59f, + 0x2daeb33e, + 0x2bace475, + 0x265cd5f1, + 0x4f95e4c4, + 0x7f4dbce2, + 0xebb65b1b, + 0xb4a7740b, + 0x82bcbfed, + 0x7670d288, + 0xbc69ee8f, + 0x0a073dbf, + 0x320f0800, + 0xfa581147, + 0x13989462, + 0x45a6b4a3, + 0x8a651db1, + 0xa35444d4, + 0xbf230bac, + 0xb313dbe4, + 0xbe09cd73, + 0x13c228a2, + 0x85241e58, + 0xeb9e5fc7, + 0xf07df2c7, + 0x5afc6231, + 0x88f06beb, + 0xee11a03c, + 0xf48b6388, + 0x67a1bb4e, + 0x4ab92ac0, + 0x5b29973d, + 0xf59ff86c, + 0x1206dedc, + 0x999ccb7a, + 0x629c3310, + 0x5b3e217f, + 0x92354d19, + 0xc57f1f99, + 0x80652554, + 0x8c44b1ad, + 0xfba863cd, + 0x1a499196, + 0xe6ecddb4, + 0x66d53c7d, + 0x81f63062, + 0x5f6a6cf8, + 0xd493e938, + 0xa3e9fe77, + 0xbc4f2d8a, + 0x733fb762, + 0xa05280d2, + 0x6005f547, + 0x6cf17c67, + 0x5a69d045, + 0x414383a5, + 0xb16f5425, + 0x6ce49c82, + 0x331ed575, + 0x12f830ce, + 0x63bc960a, + 0x38a05f7d, + 0xda50d724, + 0xfc2e58a1, + 0x763ac7d3, + 0x3dd8abdf, + 0xcafc7a77, + 0x80ebae62, + 0xf2d70ca4, + 0xcf9a6db7, + 0xfffda692, + 0x264713c1, + 0x8a1bd6a0, + 0x13711bad, + 0x4a7ca477, + 0x4d07231a, + 0x521210a7, + 0xaea41847, + 0x2197f6cf, + 0x5bbee70c, + 0xbe5aae01, + 0x10e53ed6, + 0x7f00a280, + 0x96d72d54, + 0xa5ae6425, + 0xc721855b, + 0xc2a8a0dc, + 0x60b56433, + 0xd945cc76, + 0x18a092f8, + 0x552020f4, + 0xe46528da, + 0xe4cca6c4, + 0xf4b00110, + 0x714a91de, + 0x10e19450, + 0xcd57f7f8, + 0x7ddcd6ee, + 0xbf3489b8, + 0xd77c098a, + 0x72152d71, + 0x81ab14d4, + 0xd97cfe8a, + 0x4953c6ba, + 0x0853017a, + 0x9a64b325, + 0x1645516f, + 0xd5ece3a9, + 0xab76d41b, + 0xb64936d6, + 0x7162d5d7, + 0x344a0ae3, + 0x7d180b8a, + 0xd8eb3b6c, + 0xfe39169e, + 0x0e32b004, + 0xb1b6ef0f, + 0x4efc612f, + 0x3ed51902, + 0x7ab26840, + 0x3f593b3b, + 0x00ec59e4, + 0x9ac2db9a, + 0x6c42f681, + 0x9b5dec47, + 0x1bd6c7b4, + 0xd9f0fe7c, + 0x9660dac2, + 0x1d2a5d0f, + 0x569465a0, + 0x15780587, + 0xff71e10c, + 0xe42c2a6d, + 0x2a2fc9b7, + 0xd873f66b, + 0x0ace2492, + 0x3b32947a, + 0xb432db31, + 0x23c33b9e, + 0x6698e729, + 0x094d8174, + 0xf0d17bcf, + 0x456706b7, + 0x12ae6c75, + 0xaed5319b, + 0xa874a599, + 0x8fb6643b, + 0xabd58c0c, + 0xc50e83e7, + 0x7a558c8b, + 0x4e11c7e6, + 0x1552bcb1, + 0xd408589f, + 0x679fc9a7, + 0x47c0800d, + 0xb1f7afbe, + 0x109fe2b9, + 0xb54361b9, + 0xea21d805, + 0x461cd956, + 0xc191f1b4, + 0x949eb6a6, + 0x16aedf85, + 0x1020f31e, + 0xfde8914a, + 0x12e27158, + 0xb418a938, + 0x655c23ac, + 0xf3909c7c, + 0x421a309c, + 0xf16d522f, + 0x65f120a2, + 0x51ccd73c, + 0xf1913c82, + 0x25dfd7a9, + 0x62caad88, + 0x76fc1229, + 0xecf5a837, + 0x85282036, + 0x89f74447, + 0xe5d8e2d3, + 0x66375e99, + 0x792b58a2, + 0x85094329, + 0x1b6cd378, + 0x2cb27a8b, + 0xdbda0f3b, + 0x4e8f6f83, + 0xde3626ac, + 0x19bd8301, + 0x30129851, + 0x5ea607ef, + 0x5421188c, + 0xb7fd392e, + 0x286dfb6e, + 0x5be2d96d, + 0xfe4606cc, + 0x13266bd0, + 0x22512e73, + 0x7fe7d929, + 0xa4e42e7e, + 0xeeba5488, + 0xf69949cb, + 0x772ae500, + 0x044f68b6, + 0xcaa790f7, + 0x653d862b, + 0xdab1dca2, + 0x617fae01, + 0x58fcbcdd, + 0xb94cbd50, + 0x4deb82eb, + 0xf3aea152, + 0xa39e0413, + 0xb51f95a9, + 0xbeeb2054, + 0xda3a5a26, + 0xc53dd642, + 0xa01fe6d0, + 0xf60cecfd, + 0x514b4044, + 0x74ca621a, + 0x530b6b6a, + 0x7415aad3, + 0xe89d6436, + 0xe616ffe2, + 0x9daa5272, + 0x25391d23, + 0xfb28424e, + 0x1364802c, + 0xe060f84d, + 0x0ae2f131, + 0x6ce62b10, + 0x39937124, + 0xa3aaca72, + 0x0816c8c2, + 0x11e8f5d1, + 0xd95fdf39, + 0xc2cd550b, + 0x9190a02f, + 0xe8c20598, + 0xdbf56feb, + 0x9caf355b, + 0x9bd648a7, + 0xde575e2e, + 0xb5b45019, + 0x9f390f47, + 0x9b4e7412, + 0x13066ce2, + 0xfa475b46, + 0xfeec8697, + 0x8e0e56a6, + 0xfa6f6aef, + 0x57f6dc81, + 0x5d2316f1, + 0xe28e1249, + 0xcd22f97a, + 0x947ff08d, + 0x1124a7c2, + 0x8dbcfd6e, + 0x8da10ea5, + 0x9962e5e5, + 0x847516b4, + 0x65e725bc, + 0xaacaf361, + 0xacd16e3c, + 0x972a3137, + 0x0e4a4ad6, + 0x983a5779, + 0x9588efa8, + 0x3e320974, + 0x33437ea5, + 0x6e0211cd, + 0x8071a615, + 0x6f372d73, + 0x43880814, + 0x975c105f, + 0x7e571853, + 0xf6254581, + 0x28afacf3, + 0x9bb1937c, + 0x3a3f584a, + 0xa54f46b8, + 0xc23014a9, + 0x71b8f1d0, + 0xa4e997d3, + 0xc823c95a, + 0xfc9c7180, + 0x6c08eaff, + 0x6667f1fd, + 0x2b3852c6, + 0x05ca73d6, + 0x074d88b7, + 0xb9bccd0f, + 0xa9287294, + 0x6ef285b7, + 0x4d8ea775, + 0x51080197, + 0x8516571c, + 0xc50d7bc6, + 0x38f29672, + 0x417e0842, + 0xd8caea6e, + 0xadd9841e, + 0x4874471b, + 0x32714ada, + 0x3a736227, + 0xbec8a741, + 0x93ffa4f7, + 0xc6a65f24, + 0xad353a96, + 0x37f7abe3, + 0x83002f1e, + 0x5344eb50, + 0x1933be53, + 0x3d4aafd5, + 0x44686e7c, + 0xcb3c0c04, + 0x3126c38e, + 0x062eb627, + 0xabba5dc8, + 0x26a8ec35, + 0x751d4863, + 0x23caa099, + 0x032c8c08, + 0xf2428467, + 0x580242e1, + 0x2f1e8114, + 0x177793cb, + 0x2bc1a8a8, + 0x3a95b194, + 0xe6f65760, + 0x0b1cede5, + 0x93f08f46, + 0xbabbf998, + 0x73fc1072, + 0x53217830, + 0xf336109c, + 0x00018216, + 0x4fb6470a, + 0xc715b776, + 0x3f312e0e, + 0x6a9a0cbe, + 0xe719d8bb, + 0x5b434e50, + 0xbe5bc12f, + 0x05fec000, + 0x21b2478a, + 0x7efa9d65, + 0x4b7d2ce1, + 0x4cdb4f14, + 0x1a41a5c4, + 0x424d94f3, + 0xf364aa6e, + 0xe003899b, + 0x2284d34e, + 0xc235c39c, + 0xd0e54c8d, + 0x969ed32e, + 0xadca1e41, + 0x1cf5dd48, + 0xfeaee739, + 0x8aa95f56, + 0x79123691, + 0xa8d5e6df, + 0x14941574, + 0xa002f08e, + 0x81125113, + 0x835eac03, + 0x23e1df47, + 0x5f3856fe, + 0xf5bc6869, + 0xce6f65f1, + 0xf8f88627, + 0xb0a74080, + 0xc2c67512, + 0x47510b62, + 0x757a8619, + 0xd358a6cf, + 0xefd36be3, + 0x0d8e6ebe, + 0xe244e367, + 0xdaf5202b, + 0x9da43b72, + 0x799510b2, + 0x7aba0824, + 0xc9375579, + 0x430b0595, + 0x49aeff96, + 0x471a76a4, + 0x6d902adb, + 0xcd87aab5, + 0x7767a00d, + 0x5960ca6e, + 0x4f8ef870, + 0x309fa8bf, + 0x46d14c6b, + 0xd75ceaf2, + 0x59d42f82, + 0xd282a8bc, + 0x52639643, + 0xd7cf10ce, + 0x943a78f5, + 0xc69e88e3, + 0x10eeeba0, + 0xcafc5c65, + 0xff74b46a, + 0xf79f4d9c, + 0x2630e51a, + 0x7e2214b4, + 0x880f701b, + 0xd93cce83, + 0xc3c79a30, + 0xa0a02241, + 0x33b91b39, + 0x11fcc620, + 0xc9ba6612, + 0xe7443db4, + 0x3cc12aa5, + 0x157f6b71, + 0x5c24d7b8, + 0x19236745, + 0x9db789d6, + 0x5c2d0dfd, + 0xea6d256f, + 0x6d7b3e15, + 0xe7334d29, + 0xf6997706, + 0x30aefa11, + 0x75b11c2f, + 0x66d9f586, + 0x16c2c53e, + 0x537a5647, + 0xb49df107, + 0xf502f5c2, + 0x8a6417a1, + 0xa1ff6fed, + 0xdd7a388c, + 0x484bc008, + 0x96aeb4df, + 0x7e5da879, + 0x39ba7899, + 0x945096f4, + 0xaca0677a, + 0x3aab6837, + 0x693eb6ae, + 0xd2769858, + 0xf8c3a848, + 0x3d416f0d, + 0xc827d5b8, + 0x634a0142, + 0x95307840, + 0x38598312, + 0xebd78517, + 0x9759f546, + 0x96cae151, + 0x41cbbc4a, + 0xd8414d28, + 0x0109dae8, + 0xfcaa2c27, + 0x0d4fe4eb, + 0x4347492e, + 0x3c16415e, + 0xe491356a, + 0x61b4e63f, + 0x00ede80d, + 0xe1fcdfe5, + 0xfa4652e8, + 0x1fc3ba51, + 0x88951c66, + 0x9a692f49, + 0xe18779f7, + 0xb4139fe4, + 0x8d9eaa67, + 0x53543af7, + 0x528fbc3d, + 0x18db3cc7, + 0x56c5f946, + 0xe70a19b3, + 0x13fceeee, + 0x73b311c8, + 0xbed6fe39, + 0xd92e42e7, + 0xee11ab04, + 0x20e4eec8, + 0xca96264f, + 0x948e9472, + 0x609ca9b0, + 0xa08c2aad, + 0xfd2504f9, + 0x36cf63ae, + 0xe0734470, + 0x652751e7, + 0x642273d0, + 0x9823fbe7, + 0x6824fe6a, + 0xe80ac838, + 0x18846710, + 0xfec2c7aa, + 0xd80a48b4, + 0xa66fe74c, + 0x3f30c5dc, + 0x227433b1, + 0x83c4d631, + 0x706c636a, + 0x138b0fad, + 0xe56524c0, + 0xb2ac11f9, + 0xad1799ce, + 0x7ad15722, + 0x1f163bb9, + 0xd94d13e6, + 0xba486e31, + 0x4147dc40, + 0xf294535b, + 0xf3795177, + 0x6cc4c80e, + 0xce535635, + 0xaa7227f5, + 0xf08a7bf1, + 0x04abff71, + 0xc9fa751c, + 0xf507bee7, + 0x36461342, + 0x257fdb9c, + 0x8e7e5088, + 0x82c48383, + 0xbca8a03a, + 0x981b4944, + 0x82761269, + 0x304b3d32, + 0xf3e469b2, + 0x3a26b2af, + 0xccbbba89, + 0xc28a2b71, + 0xa69cef0d, + 0xbcb33016, + 0x5b682012, + 0xfcdf7e05, + 0x0b0ba583, + 0x499ca677, + 0x4fba9f8e, + 0x7b76bc65, + 0x2fc75e51, + 0xc15ddfe9, + 0x861d4c9c, + 0xb8a93900, + 0x92bd9e86, + 0x5ff6d34f, + 0x2709acde, + 0x4e297037, + 0x0e1d5d01, + 0xf17f9166, + 0x4444d54c, + 0xea9aa934, + 0xb5a8ab82, + 0x501c04e6, + 0xe7c53a5e, + 0xb3af5520, + 0x6fa0a711, + 0xd10ae8c8, + 0xbca08561, + 0xdef0f8dc, + 0x2b00a8da, + 0x194cfec5, + 0x53cced19, + 0xd882fd4c, + 0xd2a1f062, + 0xbd9c92ab, + 0x11faa9c4, + 0x6b81821f, + 0xd50e6f83, + 0x9e6a865e, + 0x6af4288a, + 0xc7474730, + 0xa3ee94f6, + 0x53f3a99d, + 0xfe59024c, + 0x93372281, + 0x02abbc57, + 0x97fc1888, + 0xbc99a04c, + 0xd8f811a7, + 0x4687ef67, + 0xd28b56de, + 0x70c55613, + 0xbbad7b20, + 0xd8ef8c62, + 0xcbd82566, + 0x4b42df32, + 0x08ec3009, + 0x75815b67, + 0x72bacd00, + 0xab7f376a, + 0x42eafc17, + 0x4044abef, + 0xdd3e7e25, + 0xc6a85884, + 0x072e2f0c, + 0x68b1f04b, + 0xe406c8aa, + 0x882f5d33, + 0xaa29b242, + 0xe5623462, + 0xc83e4127, + 0x4a7052bc, + 0x0a28ad40, + 0x754b0cc7, + 0x2aad9413, + 0x6b529f22, + 0x07ddc99b, + 0x9cd5e160, + 0x7ff454c5, + 0x7ab0fa49, + 0x330dc0f7, + 0x35f7c492, + 0xfa234caf, + 0xebd6def4, + 0xea7d0b21, + 0x5bf95b14, + 0x0df1a519, + 0x2ec447ac, + 0xd6e80c4c, + 0xc6cba5ff, + 0x74424b66, + 0x994f29ff, + 0x133beb2e, + 0xbf4a6652, + 0x4308b5da, + 0x11fe0718, + 0xca296045, + 0x949be826, + 0x6e2c3fb8, + 0xb850aa5c, + 0x33f58121, + 0x694d49c0, + 0x90e404d8, + 0x7704a82f, + 0x4c55d386, + 0xeb7593e2, + 0x1550ecf0, + 0x9755c436, + 0x00e2bd8c, + 0x819b4cb6, + 0x57047356, + 0xca7f96bb, + 0xd21846d3, + 0xe75c8b6b, + 0x7c64db6a, + 0x66807671, + 0x42afbdac, + 0x898a62a1, + 0x352b4728, + 0xa01ab76a, + 0x3ecaa8ad, + 0x857e137f, + 0x7425aa2c, + 0x59820cd5, + 0x6cabe70e, + 0xdf2b5075, + 0x80d9ace0, + 0x87a585a2, + 0xa8aa2961, + 0xc78ae53d, + 0xad2fe51a, + 0x12fc4d3b, + 0xc2586e62, + 0x3f9af3c1, + 0x31aaca0e, + 0x90de6dfa, + 0xe8423a5d, + 0x3473b38f, + 0xb306a21c, + 0x25c329db, + 0xa63f49ce, + 0xd64d55a5, + 0xf22cd1fa, + 0x5bb1371f, + 0xa9548a1e, + 0xb7e2103f, + 0xfafd86f1, + 0x04f18888, + 0xef929aed, + 0xc7f32159, + 0x187d353c, + 0xace75d6e, + 0x7c8a9d00, + 0xedc5203e, + 0x4f8ad5e8, + 0x270a3740, + 0x136db4c5, + 0x4d745554, + 0xe834508e, + 0x1e7971ec, + 0x52af33bd, + 0xc6be41f2, + 0x06bf9120, + 0x56c34b9f, + 0x27dda918, + 0xa873d58d, + 0xaba2b6d2, + 0x46ee0a64, + 0xf71e6893, + 0x6dadbe93, + 0xc2dd2fc3, + 0xe07ef64c, + 0x2a17ea62, + 0x918e4d24, + 0x226ee1fd, + 0x98b6f003, + 0x75dfe5ba, + 0xb9783d6e, + 0x2847a098, + 0x3b5f8fed, + 0x4a264321, + 0xf0989f25, + 0xea2896e7, + 0x62830aaf, + 0x7ebb47eb, + 0x7b990fc2, + 0xcfe59d2c, + 0xdf7b0cec, + 0xee2bb918, + 0x2e107193, + 0x2ffcc92b, + 0x56c8d7fb, + 0x6d9596a2, + 0xdbade8c2, + 0x96bbd09c, + 0x3be88ddb, + 0x25788736, + 0xf42e08aa, + 0x2ace1c30, + 0x04b3283b, + 0x42abff1c, + 0x9109f92e, + 0xf44f974c, + 0x69de015b, + 0xcb5be1a3, + 0x42006ec8, + 0xf9f7bbae, + 0x0e498747, + 0xe64f42e5, + 0xbdd9769a, + 0xbfefe3ed, + 0x1cf0b302, + 0x304b38bb, + 0x6fe98e02, + 0x198560f0, + 0x5f323a6b, + 0x32d80d5b, + 0xa02926cf, + 0x749673f7, + 0xdc5b89eb, + 0xd7e59060, + 0x08f0c0c8, + 0x05f2b242, + 0x41c621b9, + 0x0f9d75e4, + 0xc10fb771, + 0x723e2009, + 0x609c716a, + 0xc1a4321c, + 0x2a585c54, + 0x512a2333, + 0x9b83b957, + 0xaa789a88, + 0xf77108d3, + 0x9d5dff9c, + 0x3516bf33, + 0x2553ec5e, + 0x5b9cd3fc, + 0xc4c8576c, + 0xf49a4004, + 0xbc0e4aa0, + 0x23dd6368, + 0x41ed272f, + 0x2665d6de, + 0x51ef3bc7, + 0x5a7bbe62, + 0x11711c5a, + 0xd750fbb8, + 0xfe0b186c, + 0x1cacecb5, + 0x4c3e6cff, + 0xa9166568, + 0x5c28eae4, + 0x916df88f, + 0x3581d00f, + 0xfa85b4c6, + 0xade872df, + 0xbd2d75c7, + 0x35a17396, + 0xbe2f15ec, + 0x2ed3dc19, + 0xfc8ccfb4, + 0xd72224ca, + 0x5b467c42, + 0x05740237, + 0xc90cc5af, + 0x7ee94bb7, + 0x341ce345, + 0xf6d5c608, + 0x54395b3e, + 0x86671dc1, + 0xa012736f, + 0xece35f7e, + 0x98b029cf, + 0xc3bac321, + 0xa83bb90f, + 0x4e98f460, + 0x172ad9d0, + 0x0ddf428b, + 0xc732c52e, + 0x751bb0b1, + 0x7e635e70, + 0xcf083db0, + 0xf7665ffb, + 0xd10b7314, + 0x0a0915c2, + 0x9b708e96, + 0xdd6641dc, + 0xd3c5503f, + 0x99fcad3c, + 0x7f7cdac4, + 0xacf81c45, + 0xbb9ac1aa, + 0x9edba02a, + 0xd2674351, + 0x655d6e1a, + 0x316eb98b, + 0xef0da1b0, + 0x230268a6, + 0xa3d15e0c, + 0x1af0fe7a, + 0x545a1440, + 0x58ebb256, + 0x3004ba86, + 0x5625f280, + 0x31fba6e9, + 0x0d816494, + 0x26c6f165, + 0xe871e8de, + 0xe1d7f6d4, + 0x023760f2, + 0x440f27af, + 0x728ba35f, + 0x17ce346a, + 0x3a11f0d1, + 0x6207d713, + 0x20f84bc8, + 0xd6bbd3c5, + 0x54e23e98, + 0x4d55a3f4, + 0x0bcb2af5, + 0xd669176e, + 0x587e3dfc, + 0x76c2cb8f, + 0xf76cf120, + 0x4d5802b4, + 0x5c14c2f2, + 0x75343fec, + 0xdd66b18c, + 0xc71afb83, + 0x98443a88, + 0xdefbb711, + 0xfdb0d451, + 0x26c463d8, + 0xbeb59073, + 0xea637d70, + 0x75ac392c, + 0x8911a2c2, + 0xea8a08c4, + 0xb17c6b41, + 0x95187ba1, + 0xca82b4e0, + 0x47b9b7c5, + 0xd07c16f8, + 0x0b008289, + 0x1638d750, + 0x1c67341e, + 0x3d1c7fcd, + 0x773a6217, + 0x402ce582, + 0xb391379f, + 0x5f329458, + 0x7df3edc8, + 0x939cb659, + 0x54cec0df, + 0x32a63ce6, + 0x5473cd21, + 0x5399ca04, + 0xd48fec8d, + 0x184a35dd, + 0x0259889e, + 0xf5de1e03, + 0xf637e932, + 0xdac59987, + 0x3482e9ef, + 0xc4b0d39c, + 0xc1703b84, + 0x82783cc5, + 0x609005de, + 0xa6f4b2ec, + 0x2cfd9aee, + 0xeeba8f38, + 0x4f1bd205, + 0xa1f30232, + 0x79587a9a, + 0x9032d2a0, + 0x3f2a3667, + 0x0be30687, + 0xab67f3b2, + 0x5e7952bd, + 0x1055730a, + 0x7326e2ef, + 0x4e90bafe, + 0x40098ae4, + 0xbc8b3245, + 0xac40eacf, + 0x990d0b6a, + 0xcc285b9d, + 0x1f84b128, + 0x3d3baa7e, + 0xa25b70c3, + 0x24ad4c19, + 0xea67f99e, + 0x0692f3a5, + 0x282a5acd, + 0x507aa6fe, + 0xb73af27f, + 0x915227cc, + 0xe3c0fb17, + 0x234d8772, + 0x5038947d, + 0xa6770fb2, + 0x0cbe5619, + 0x62310604, + 0x577f3820, + 0xa0f465d0, + 0xd58e64e3, + 0xf9c7c1a0, + 0x02366336, + 0x7514c9ff, + 0xc80e7468, + 0x31c55e4c, + 0x64f2ee36, + 0x65308077, + 0xcc8f7a9c, + 0xd5afe99c, + 0xa3d2f848, + 0xbe343aed, + 0xc9e5d1d9, + 0x7689df57, + 0x436efdb9, + 0x02fe9c78, + 0xbf44d386, + 0xd1a7f051, + 0x688f8e40, + 0xbfc35d3f, + 0x8e9ccf1d, + 0x265725ce, + 0x7b541f84, + 0x04b7534a, + 0x537689b7, + 0xf0196afd, + 0xa1c53118, + 0xdd4b8f2f, + 0x27a4542d, + 0x148fc97f, + 0xcbb1fe8e, + 0xb0f0e359, + 0x619182d1, + 0x7fe52e97, + 0x02112644, + 0xde85b69d, + 0x6ae60743, + 0xc3957d75, + 0x55ec9f1c, + 0xdf5569a7, + 0xff211f65, + 0x9f191bb7, + 0x27b4ed8e, + 0x3d6b7584, + 0x1eb61acd, + 0x5ab3edfe, + 0xb7746746, + 0xe202812e, + 0xc3a6dad6, + 0x6eadbc54, + 0xaaf3dbe5, + 0x0d5d1241, + 0x573db0ba, + 0x6acb9a75, + 0x355f4aad, + 0xb7af5481, + 0xd6895cc1, + 0x9a3576ae, + 0x0a4ce960, + 0xea88e6c0, + 0xf9777f8c, + 0xf5586085, + 0x96aa74a0, + 0x6ba5f631, + 0x98e69a66, + 0xa27317f5, + 0x7a62af6e, + 0x7c640f8c, + 0x40bdba17, + 0xc3e35f92, + 0x257c9a1c, + 0x6ae2ba67, + 0xd53319a8, + 0x82ae2cff, + 0x2b2e2602, + 0x325499f0, + 0x56415add, + 0x2f76d62a, + 0x13a4fea9, + 0x82292dfc, + 0x3452de2e, + 0x21bc5307, + 0xe8dc18ad, + 0xa1cfbcfc, + 0xa61f387b, + 0xfd781889, + 0x98e6417a, + 0x12df4516, + 0xb4946c67, + 0x0cecea65, + 0x04f28274, + 0x9df23422, + 0xb4dc8368, + 0x8e2010e2, + 0x4c304228, + 0x99918a5a, + 0x44cb62e4, + 0xe5d3f6f9, + 0xd45ab4f1, + 0x15956307, + 0x9243a7d6, + 0x0c3ee4ca, + 0xbfbc5d1b, + 0x880c3c65, + 0xe9a1e5f7, + 0x6573caae, + 0x2d971582, + 0x2931af83, + 0xfbab4eef, + 0x9b954125, + 0x16e305b1, + 0xa2aad029, + 0x0c4c4162, + 0x2d29f41e, + 0xd045716c, + 0x836fd651, + 0xb8aa8f3a, + 0x6f884795, + 0x98199e25, + 0xecc70aec, + 0xf85e31c4, + 0x0f06b850, diff --git a/src/cpu/intel/model_f3x/microcode_M1DF3413.h b/src/cpu/intel/model_f3x/microcode_M1DF3413.h new file mode 100644 index 0000000000..f2a0a8f79d --- /dev/null +++ b/src/cpu/intel/model_f3x/microcode_M1DF3413.h @@ -0,0 +1,1554 @@ +/* WARNING - Intel has a new data structure that has variable length + * microcode update lengths. They are encoded in int 8 and 9. A + * dummy header of nulls must terminate the list. + */ + + /* + Copyright Intel Corporation, 1995, 96, 97, 98, 99, 2000. + These microcode updates are distributed for the sole purpose of + installation in the BIOS or Operating System of computer systems + which include an Intel P6 family microprocessor sold or distributed + to or by you. You are authorized to copy and install this material + on such systems. You are not authorized to use this material for + any other purpose. + */ + + /* M1DF3413.TXT - Noconoa D-0 */ + + 0x00000001, /* Header Version */ + 0x00000013, /* Patch ID */ + 0x07302004, /* DATE */ + 0x00000f34, /* CPUID */ + 0x95f183f0, /* Checksum */ + 0x00000001, /* Loader Version */ + 0x0000001d, /* Platform ID */ + 0x000017d0, /* Data size */ + 0x00001800, /* Total size */ + 0x00000000, /* reserved */ + 0x00000000, /* reserved */ + 0x00000000, /* reserved */ + + 0x9fbf327a, + 0x2b41b451, + 0xb2abaca8, + 0x6b62b8e0, + 0x0af32c41, + 0x12ca6048, + 0x5bd55ae6, + 0xb90dfc1d, + 0x565fe2b2, + 0x326b1718, + 0x61f3a40d, + 0xceb53db3, + 0x14fb5261, + 0xbb23b6c3, + 0x9d7c0466, + 0xde90a25e, + 0x9450e9bb, + 0x497bd6e4, + 0x97d1041a, + 0x1831013f, + 0x6e6fa37e, + 0x0b5c1d03, + 0x5eae4db2, + 0xc029d9e3, + 0x5373bca3, + 0xe15fccca, + 0x39043db0, + 0xaeb0ea0c, + 0x62b4e391, + 0x0b280c6b, + 0x279eb9d3, + 0x98d95ada, + 0xc1cb45a7, + 0x06917bda, + 0xdde8aafa, + 0xdff9d15c, + 0xd07f8f0a, + 0x192bcf9d, + 0xf77de31f, + 0xadf8be55, + 0x3f7a5d95, + 0x0e2140b6, + 0xf0c75eec, + 0x3254876a, + 0x684a1698, + 0x4ad0cca7, + 0x6d705304, + 0xf957d91b, + 0xe8bb864a, + 0x440d636c, + 0xaf4d7d06, + 0x12680ecf, + 0x5d0f9e53, + 0x60148a5d, + 0x81008364, + 0x243a8aed, + 0xd55976de, + 0xd6a84520, + 0x932d4b77, + 0xe67e5f19, + 0x7dba0e47, + 0xfee3b153, + 0x46b6a20c, + 0x2594e6f6, + 0x210cab0f, + 0xf6e47d5d, + 0xe38276e4, + 0x90fc2728, + 0x9faefa11, + 0xc972217c, + 0xc8d079dd, + 0x5f7dc338, + 0x106f7b7b, + 0xd04c0a1c, + 0x0eca300e, + 0x1ddae8a6, + 0x6e7fd42e, + 0xa56c514d, + 0x56a4e255, + 0x975ea2bf, + 0x0eaa78cc, + 0x0c3e284f, + 0xbacb6c71, + 0x1645006f, + 0xe9a2b955, + 0x0677c019, + 0x24b33da0, + 0x62f200fa, + 0x234238c4, + 0x81d5ad79, + 0x9f754bc9, + 0xeffd5016, + 0x041b2cc2, + 0x2f020bc7, + 0x4fcd68b8, + 0x22c3579c, + 0x4804a114, + 0xc42db3ea, + 0x7cde8141, + 0x47e167c8, + 0x01aa38cc, + 0x74a5c25e, + 0xe0c48d67, + 0x562365ad, + 0x38321e57, + 0x0395885a, + 0x6888323e, + 0xd6fc518f, + 0x1854b64c, + 0x06a58476, + 0x3662f898, + 0xe2bcdaee, + 0x84c40693, + 0xef09d374, + 0x353cc799, + 0x742223d4, + 0x05b3c99b, + 0x0c51ee45, + 0xd145824a, + 0xac30806c, + 0x2ed70c0d, + 0x71ae10ff, + 0xbf491854, + 0x3e1f03b4, + 0x76bfd6cd, + 0x1449aa8a, + 0xf954d3fb, + 0xf8c7c940, + 0x70233f85, + 0x0729e257, + 0x10bb8936, + 0xc35bb5b5, + 0x95d78b5c, + 0xcc1ba443, + 0x6f507126, + 0xa607cfd0, + 0xce22f2f3, + 0x5134ed8c, + 0xec8d2f06, + 0xa92413d5, + 0xb973f431, + 0x16e136dd, + 0xf7d41bed, + 0x01b002fe, + 0x646ed771, + 0x76ea3d26, + 0x5024af20, + 0x84270f51, + 0x9b3d7820, + 0x2454a2c6, + 0xc1f072ed, + 0x155e864f, + 0x4c39a6e5, + 0x928206e5, + 0x9d1685f5, + 0x45542ee7, + 0x1fd27d9e, + 0x5f2dd9ff, + 0x222005eb, + 0x354e8a55, + 0x1f0de29a, + 0xb86dc696, + 0x9eafafad, + 0x191b197e, + 0x0e0900e1, + 0xe0ac42bb, + 0x3143236f, + 0x44177def, + 0x05259274, + 0xb21af44a, + 0x6ddee4df, + 0xc7b56255, + 0xb6b1d39d, + 0x218f9070, + 0x96545a42, + 0x98cc2d4a, + 0xb21bac9e, + 0x83e12d44, + 0x2ef4fb39, + 0xbc03528f, + 0x9485af58, + 0xd9f1e6ab, + 0xde7607e6, + 0x3b398733, + 0x9cd9b1a9, + 0xabd77984, + 0xcce18826, + 0x701c5c21, + 0xe6591cbf, + 0x07a9b9e1, + 0x69459c90, + 0xe0cdcad6, + 0xc4c6c4b6, + 0x12748024, + 0x4a33c567, + 0x7d26a37e, + 0xcae163bf, + 0xeb7547fa, + 0xccc6a01c, + 0x3cb8abb8, + 0x64aa67b2, + 0x51ddf6de, + 0xbfe1b905, + 0x50923949, + 0xacfa43af, + 0x1fdb5a44, + 0x091533cb, + 0x7c92e5dc, + 0x1c5d0d3e, + 0x195271f5, + 0x96e73a4a, + 0xe1b11968, + 0xb42906f2, + 0x5a2940b3, + 0x611283e9, + 0x65829161, + 0x5d1357b7, + 0x019428ad, + 0x836c5c3c, + 0xc0e5e169, + 0xd360e424, + 0x257a9d69, + 0xdca09040, + 0x85f1c060, + 0xae7cae79, + 0xa5ddcfd6, + 0xdba8f68e, + 0xd98df596, + 0xe6e3cd51, + 0xcfb2be8f, + 0x368fe6cd, + 0x58486b75, + 0x791f1a48, + 0xf81a61f2, + 0x58a38155, + 0x30a86547, + 0xd7fb2db1, + 0x300e0b1d, + 0x3f838461, + 0xf278805a, + 0x49529931, + 0x601d5649, + 0xe500ba1a, + 0xc4f78965, + 0xe10ed02d, + 0x1f777ebd, + 0x2db1d17d, + 0x48a22e6a, + 0x5a14b738, + 0xdcf899e0, + 0xc845bd04, + 0xd04a52b9, + 0xf2f19b06, + 0xdb5ba97a, + 0xf05605ff, + 0xc787b72c, + 0x9f197770, + 0x87b31150, + 0x3ff00d57, + 0x89d1dcb3, + 0x07528ff4, + 0x4105fcef, + 0xb087de2e, + 0x3bd333a5, + 0x84a094f4, + 0x9ab8fb97, + 0xc9bba063, + 0x664c52e5, + 0x27fd05e4, + 0x3f0e491d, + 0xab8f4b9a, + 0x344a0249, + 0x727dd74f, + 0x29587211, + 0xbba262b9, + 0x319ecbb3, + 0xec54b023, + 0xd0fa096d, + 0x3d223f23, + 0x0b6013e7, + 0x513e045b, + 0xcb1edf15, + 0xfd44bb25, + 0x023eb973, + 0x3f55dac6, + 0xc2df6514, + 0x68589880, + 0x4556878e, + 0x86f6acfb, + 0xbcd23f0b, + 0x32c417c1, + 0x45f3bb56, + 0xbe60872b, + 0x09457cc0, + 0x2e18b62d, + 0x065f54d1, + 0xae3b4a20, + 0x265b10ae, + 0xb7547a1d, + 0x5a9481a9, + 0xd477ed02, + 0x601ed0fc, + 0x9a43257e, + 0xc9922b72, + 0xa2a696ae, + 0xe9d6c37b, + 0xfab8bdf9, + 0x1deb34dc, + 0xaa6bb090, + 0xbdc3b72f, + 0xecb3b010, + 0xe64376e7, + 0x40356095, + 0x928b5047, + 0xbd271c09, + 0xfd806f61, + 0x0821e090, + 0x6afb3588, + 0xd10e91ea, + 0xbbc7fedd, + 0xb1ac6d33, + 0x07788e4b, + 0xa10f8013, + 0x4f8efd9d, + 0xe5d8728d, + 0x017f3e82, + 0xf09ec7eb, + 0x6bfd7906, + 0xbcefcb44, + 0x76699ad5, + 0x1b976522, + 0xa55b3dbd, + 0x88bb33e2, + 0x98ac5b7f, + 0x61ac4c8b, + 0xfd948f3d, + 0xee610413, + 0xc77c5035, + 0x662825a9, + 0x0009fcba, + 0x3450fd88, + 0xeb391fef, + 0x6949960d, + 0x1ccb13c3, + 0x21dac5a6, + 0x6bcc6b37, + 0x37ad77a5, + 0xf71d58b1, + 0x84ed440d, + 0xe606b699, + 0xe43067a4, + 0x21d5b8b3, + 0xe11f83e2, + 0xa0cc6585, + 0x40eb6d16, + 0xc5a6879f, + 0xbd333fd5, + 0xb44acab4, + 0x68c016fc, + 0xfbcd3cfc, + 0xadf76e42, + 0xc520e516, + 0x7468cb61, + 0x585c0d52, + 0xea83cefe, + 0x615d7760, + 0x89c9b8fd, + 0x367c355a, + 0x409371a2, + 0x7edb38a7, + 0xca86d263, + 0xda18250d, + 0x26e1ed8b, + 0x02fefede, + 0x704cb5c8, + 0x52cbe1eb, + 0x9cdbc71a, + 0xa0637560, + 0xe31f03ca, + 0x2b78969b, + 0x803d5866, + 0xec52d984, + 0xd8df8bdb, + 0x6cb1d5e8, + 0x7b9aec01, + 0xf7d39401, + 0xdd04c6ae, + 0x0e5ca4eb, + 0x12b593c8, + 0x38f6d4e5, + 0x13a91268, + 0x60c8251b, + 0xa136cf9a, + 0xda070cdd, + 0x6142408c, + 0xc28065dd, + 0x50b73718, + 0x36074eee, + 0xc7b20fcb, + 0x18d29f9b, + 0xe97eb966, + 0xe6936bcc, + 0x1c9188ea, + 0x7cff40e2, + 0xee791ac8, + 0xb099a323, + 0x571d69b7, + 0x22c1f7d0, + 0x0b9662ee, + 0x76e45cb9, + 0xbd0d7020, + 0x7794bd95, + 0x1b0fe51a, + 0xda2754ef, + 0x7f3ad7a9, + 0x58f627d3, + 0x211670a3, + 0xc7471b81, + 0x495a93ac, + 0xaad4f030, + 0xa76614c8, + 0xd63dba3c, + 0x9c4f729c, + 0x6e831cfb, + 0xa6105c75, + 0x95c62188, + 0x723ef45d, + 0xf59f2dd1, + 0x5825283d, + 0x768d8a86, + 0x070d02ac, + 0xfdbcbd73, + 0x0d479795, + 0x797aa7f7, + 0x6c9e468b, + 0xa961571d, + 0xc7127ef0, + 0x4b0442e7, + 0xd99a9e87, + 0x6c876cba, + 0xe4f9f814, + 0x120eeb8d, + 0x4bbb9c8e, + 0x22c0a29e, + 0xff681fcc, + 0x26777226, + 0x6339e667, + 0x2402333e, + 0x2bf66a17, + 0x63806e6c, + 0x98416b75, + 0x791b3e91, + 0x79c09cd7, + 0x0c157436, + 0x6d99157c, + 0xc8990984, + 0xaf7d2ae4, + 0xfe3ee7d9, + 0xb7676de0, + 0x9df8722e, + 0x08462a7e, + 0x99032839, + 0xd726ff95, + 0x5c1c78e8, + 0x4ef1b747, + 0x4e257ba7, + 0xa83ad5f3, + 0x523b3809, + 0xc2ce4f19, + 0xabfadaa5, + 0x370b005c, + 0x2d6a02e1, + 0xbf6ee428, + 0xfd84be50, + 0xb79801b3, + 0x488ad789, + 0x65a87bda, + 0x59f0fd6a, + 0xa4106878, + 0xdbadd916, + 0x1f86f200, + 0xefb7fc72, + 0x26d4d47f, + 0xf7892efc, + 0x41f50167, + 0xc6a28f9e, + 0xffd4a8e0, + 0xa00e4ea0, + 0x8183f648, + 0x030faa4c, + 0x26c1715f, + 0x322c9ea3, + 0x5d60d054, + 0x413470cb, + 0x3d131892, + 0x22f2ae86, + 0x9f1c96b6, + 0x015563f4, + 0x3a5625ba, + 0xcb95b598, + 0xf0685fb9, + 0x158af5ec, + 0xfc01a406, + 0x01841d19, + 0x210b7e73, + 0x19a416a1, + 0xed254c44, + 0x5bd51335, + 0xb8905dc9, + 0x9e52f38c, + 0xef5d7dd0, + 0x1516f6bb, + 0xf13bb426, + 0x9ee6d6cb, + 0x28bde0a6, + 0x766b655e, + 0xaf2e0e52, + 0xdec60f49, + 0x254a0959, + 0xb009d431, + 0x2f6d3533, + 0x0a074afc, + 0xcd3d3a72, + 0x52aa4fce, + 0x16c4507d, + 0x2f842898, + 0xb087e98b, + 0x68b41826, + 0xd4adc5c9, + 0x53b3e498, + 0x2dff7b03, + 0xda931e65, + 0xf1d66edd, + 0x2beb7555, + 0x97b3f152, + 0x035676f8, + 0xca9c7cf6, + 0x57992a53, + 0x578a1004, + 0x458e23c8, + 0x2a2494bf, + 0xa92c549b, + 0x2ca46deb, + 0xcd907478, + 0x93baaeb5, + 0xa70af4c6, + 0x9767d5b8, + 0x9874bcee, + 0xb0413973, + 0x9bfef4f7, + 0x7fbed607, + 0x2a255991, + 0xa5e3109d, + 0x90f09fef, + 0xb7a3d468, + 0x6db437aa, + 0xe8dad585, + 0xfbc19cbc, + 0x34cacc6f, + 0x6c5cc449, + 0xcc6dc144, + 0x70c6aaa0, + 0x183bc459, + 0x490ea5a8, + 0xddf105bf, + 0x3429facf, + 0x79020f72, + 0xd2de786d, + 0xb776f3ed, + 0x553e3da7, + 0xaecff099, + 0x2b471ce1, + 0xe3a72af9, + 0x04c9b2bf, + 0xe84d9702, + 0xec7cd831, + 0xda66c6c1, + 0x451b207c, + 0x68243bc3, + 0xb3012b1e, + 0x1855c026, + 0x1addac14, + 0xc73834a2, + 0xea91596d, + 0x08f0d135, + 0xc6021aa0, + 0xc5d1726b, + 0xc21d1f0b, + 0x92b7c740, + 0x9f024526, + 0x6c91df6c, + 0xfec85435, + 0x3d5a9150, + 0x93249836, + 0x2ec5e71f, + 0x23e96579, + 0x81ce78d6, + 0x49e45ccf, + 0x4d5e9c78, + 0x2a2cdfab, + 0x148e1833, + 0xa3fab11b, + 0xd0ceb7e9, + 0x4789b634, + 0x147fc687, + 0x48f4f59c, + 0x21eea4e3, + 0x411dfb7d, + 0x033fe075, + 0x57c9e07d, + 0xb09edf4e, + 0x9db83f5f, + 0x6ef1343a, + 0x64a68315, + 0x300e34c3, + 0x72ac2766, + 0x640271a4, + 0x0a282b82, + 0xcaf1ec1b, + 0x7d4849f9, + 0x108c5eaa, + 0xfaa96613, + 0x0476639b, + 0x70ee8371, + 0x9db599ba, + 0x85158d5f, + 0x02912911, + 0xe6fec86a, + 0xcf3036f3, + 0xccdd49a0, + 0xe650b3cd, + 0xf5429ef0, + 0x411e4690, + 0xa526e30b, + 0x275822af, + 0x91e12d05, + 0x958881aa, + 0xabf76cc4, + 0x06e794a9, + 0xa97d1577, + 0x0188613c, + 0x17c96558, + 0x96c31832, + 0x5696b201, + 0x03e3dad2, + 0xbe44d0ba, + 0x4d552a6c, + 0xe9fafb48, + 0x4968ad28, + 0xf109edce, + 0xd1534f30, + 0xc2d8b9e8, + 0x66e911d7, + 0xd67a594b, + 0x4492b2b4, + 0xeb86848d, + 0x4106979b, + 0x0f75039f, + 0xf5f3ee2c, + 0x04baf613, + 0x00c6fd60, + 0x32ebe198, + 0xc7f129eb, + 0x7cac0839, + 0x57a1fde4, + 0x2da04cfc, + 0x93179aa5, + 0xf3f4d2d9, + 0xd8d2528a, + 0x5fdd42af, + 0xd08c7bdb, + 0x53acd639, + 0xe37aab85, + 0x2d55b5a2, + 0x7bc96248, + 0x2fb42401, + 0x2ff99915, + 0x2be3b5ea, + 0xf0ff9bdd, + 0x1b6bbaa3, + 0x83a13de0, + 0x4503fc83, + 0x08c24640, + 0x2463a2b2, + 0x2e264872, + 0xc451a29d, + 0xbfd2e09c, + 0x15bcb009, + 0x69102223, + 0x4c8581e9, + 0x4ec94cf0, + 0x75017d7b, + 0x0e5d8cf1, + 0x50b9ca97, + 0x55df1100, + 0x245162e0, + 0x0df18bca, + 0x00776990, + 0xf6790a03, + 0x599ef43e, + 0xe8bf7afb, + 0xea141ddc, + 0xad1a54b2, + 0x55f767f8, + 0xb661981c, + 0xe1650342, + 0x365adc95, + 0xbb44e3a0, + 0xa064fea1, + 0x3516bf27, + 0xfd40a414, + 0x53f9a9e6, + 0x2071a5ee, + 0x56ca2713, + 0x7afdd07a, + 0xd62b7f6e, + 0xe9dac904, + 0xca212105, + 0xb9d6e3de, + 0x6af5033f, + 0x34d9049b, + 0xc51ec095, + 0xe5eddb9d, + 0x122b5c6a, + 0x9f562e58, + 0x20ec8986, + 0x760857f2, + 0x8d8aadb3, + 0xbc8f0807, + 0x0f79eae7, + 0xbfa6bfa8, + 0x28151aeb, + 0xbe4b4d4b, + 0xc65d58b0, + 0xcf99ba1b, + 0xc1049197, + 0xe36d8c87, + 0x548b7676, + 0xbe7bb2c4, + 0x77923781, + 0x5fbd631e, + 0x770e5a41, + 0xd2f2948a, + 0x074f5428, + 0xc7a1562e, + 0xf55618c6, + 0x8bf8a3d1, + 0x837ed4a8, + 0xe42e0298, + 0xd3754b0c, + 0xbaa24c25, + 0x793ac973, + 0x814e66ec, + 0xa4154fa9, + 0x3e0e65ca, + 0x5a783bd5, + 0x2bb37f6c, + 0xb3c2526e, + 0x34c9a28a, + 0x6c8b4795, + 0x64605fa8, + 0x2e6aae2e, + 0xd9b28f27, + 0x6a9a200b, + 0x3acd1e3a, + 0xce9a4a6c, + 0xd2a0bd14, + 0x700f2003, + 0x501cbef7, + 0x4068b05e, + 0xa24c4580, + 0x4da75506, + 0x500b9b0f, + 0x22e3a600, + 0x7bec4e94, + 0x8f0958e2, + 0x42129a1e, + 0xb46d8dc5, + 0x29f8851c, + 0x83fb38bd, + 0x17b0de15, + 0x15340d20, + 0x74f00fde, + 0x6c646b32, + 0x905897c4, + 0x4d8ed991, + 0x3cf91fd5, + 0x0ee02ddf, + 0xec069ce6, + 0x0b977683, + 0xa0bf31f6, + 0xa1d135a9, + 0xa882d1db, + 0xa731a63a, + 0x48e211f1, + 0xf3d89e99, + 0xf982e6ea, + 0x23dde303, + 0x7f1ff8da, + 0xdc8c6414, + 0x806f432e, + 0xd047bc02, + 0x671bacff, + 0xd40ba2a8, + 0xe3666685, + 0x31265f9f, + 0x3931a952, + 0x62f35606, + 0xc48f0c5e, + 0xfd107640, + 0xf636da24, + 0xb8f5c3b0, + 0x1c91e88f, + 0xed9dd432, + 0x2b85fa5d, + 0x8b15d2ac, + 0x1e06cf24, + 0x1def6e9c, + 0xfae9175f, + 0x03ac6f02, + 0x37318c87, + 0xbc0b1ce5, + 0xa0640cab, + 0x6cc20a3c, + 0x1c7b2524, + 0x4685dacc, + 0xeab8bb31, + 0x8063b5d0, + 0x79817d52, + 0x211b1972, + 0xd7bfc987, + 0xab9128dc, + 0x150d9b36, + 0x6a5838ab, + 0x9a0a304d, + 0x2e43c331, + 0x84f2c4b8, + 0x435146c1, + 0xed64a280, + 0x553ecb4c, + 0x5c800db2, + 0xeef4df95, + 0x5dcf2c37, + 0x70755ddf, + 0x4274737b, + 0xe610350e, + 0xd97a5997, + 0x7af5edce, + 0xfd18ba0c, + 0xb7587cd8, + 0xfa5e42d6, + 0x76bde9eb, + 0xec41eead, + 0x604d2423, + 0xb4adbcf9, + 0xce728fa3, + 0x02361c31, + 0x02fab64d, + 0x00316b1c, + 0x562f9aa4, + 0x71f85790, + 0x9cb6d464, + 0x32949ebf, + 0x434fc23d, + 0xee7fac51, + 0xda5cc63a, + 0x17e616b4, + 0xcd1bd1bc, + 0x14638cae, + 0xd31808fa, + 0xb16e0727, + 0xfdda2b0f, + 0xbc11c678, + 0xfe79dc6e, + 0xe26eefb4, + 0x9a78de16, + 0xb68f2df2, + 0xd47da234, + 0xbdff28a4, + 0x937bb1f4, + 0x0786dd46, + 0xbd1160f5, + 0xf77b070c, + 0x72b7c51e, + 0xcbb3a371, + 0x5e50e904, + 0x00fbc379, + 0x680757dd, + 0xd38193f7, + 0x93113e25, + 0x7b258da7, + 0x991aaa09, + 0xab1415be, + 0xa3740774, + 0x370b72e5, + 0x2fc643f4, + 0x3916d70e, + 0xea2838d3, + 0xe4840c42, + 0xd18e6959, + 0x69a270ee, + 0xee4a494e, + 0x0329799b, + 0x07480357, + 0x0260c46f, + 0x7b75346e, + 0x787234f4, + 0xe0adf25b, + 0xba85cacf, + 0xb5724eb1, + 0xfde2c080, + 0x2b6bb492, + 0xd2f70545, + 0x9ca97510, + 0x4034c18f, + 0x616bcb12, + 0x5667f52a, + 0xe2f6bfce, + 0x1f25969e, + 0x569eaab7, + 0x27ad8196, + 0x2d30a6d0, + 0x96d6c10a, + 0xcb9f024f, + 0x3d7941ef, + 0xf7a76bc5, + 0xe9a701d4, + 0xd53293a3, + 0x252cf5df, + 0xaf9172f6, + 0xd090c809, + 0xb1a17387, + 0x045a0987, + 0x92d9ffd9, + 0xb30c449c, + 0x2180ff58, + 0x2929f7de, + 0x3f91766e, + 0x9f488e3d, + 0x05dd6734, + 0x82482f5b, + 0x01da3ca2, + 0x42f33408, + 0xf8e3ba89, + 0x750ac2ff, + 0x39f11551, + 0x71087971, + 0x368fa634, + 0xefda0572, + 0x14b8f750, + 0xe5768705, + 0x71c168e2, + 0x8c012c63, + 0x12ad74ce, + 0x841c17ea, + 0xe6f44176, + 0x36cf2557, + 0x14760a6d, + 0x4bb3b7c2, + 0x14d1437d, + 0xbe673210, + 0x4d6ba9f5, + 0xe68abbf9, + 0xc311908d, + 0x46b63956, + 0xac2c9fb3, + 0xab769ce8, + 0xa29d7040, + 0xec3d67e3, + 0xdef311de, + 0x52a53b14, + 0xca924769, + 0xf35d1514, + 0x524b0471, + 0xc0d08591, + 0x454fc34c, + 0xca719639, + 0x9af2f230, + 0xa023a821, + 0x3d6539ba, + 0x90d0d7a2, + 0xc65fc56e, + 0x4eb2aa19, + 0xeba3b0e7, + 0x1bb5b33e, + 0xab8c68c2, + 0x0f1793d3, + 0xdcf176e9, + 0x1b7bbba0, + 0x96170a27, + 0x1955452d, + 0x42e88c71, + 0x48cad4b3, + 0xdcc36042, + 0x90619951, + 0x7566bc7c, + 0xe14ba224, + 0xc24ad73d, + 0xdb04144d, + 0xd9792727, + 0x11150943, + 0xe45f0c57, + 0xb87d184e, + 0x3cf13243, + 0x2010d95c, + 0x84c347c1, + 0x6d0f2461, + 0xb5c41194, + 0xde7ccb2e, + 0xb929ecb0, + 0x51fbd8f7, + 0x45dc65fb, + 0x6902d2c0, + 0xb940814f, + 0xf339e083, + 0x6f370d56, + 0xcaf5638e, + 0xe8a3cb83, + 0xacf414b6, + 0xe61095a1, + 0x99b4cde4, + 0x55112fed, + 0x606b9d53, + 0x5a05974a, + 0xa4c7db34, + 0xdc92469b, + 0xf9280621, + 0xe7b1ef95, + 0xc0fc5be8, + 0x74a1da09, + 0xa92a4b7f, + 0x3d65d75e, + 0xe3804335, + 0x1ff49e19, + 0x71da8170, + 0xac69069b, + 0x04aae3d5, + 0xc0ef4b46, + 0x091a3482, + 0x8356c7ae, + 0x32ecb208, + 0x900c89ed, + 0x2a206ff5, + 0x7eed5032, + 0x5b55b25d, + 0xf98d6df2, + 0xf52bc8a9, + 0x1aa2f5fe, + 0x1d33c0bf, + 0x3cd34e89, + 0x9a0da4ae, + 0x1c205917, + 0x7ca784cd, + 0xf7dda662, + 0xad97f3ff, + 0x525c53ec, + 0x024f11ff, + 0x32c3ae5b, + 0xbf372800, + 0x8ff15f4d, + 0x7605d019, + 0x0dae7740, + 0x5f5dd0ef, + 0x0f6c37d0, + 0xee6fa91e, + 0xb9f51051, + 0x39a9f0d1, + 0x22bf03fb, + 0x485a0922, + 0x7384b30e, + 0x85ba7f16, + 0xb1f0a524, + 0x7e9c5113, + 0x240d9306, + 0x1ca7b0ea, + 0x18a0d114, + 0x76b64213, + 0x31212cc0, + 0xc9dca5c3, + 0x69f2ae52, + 0x545caa7c, + 0xfb2ff045, + 0x3f3a1af5, + 0xe75b6913, + 0x775a1c79, + 0x4627e25f, + 0x90a14b97, + 0x06456383, + 0x3d52cf69, + 0xfb2492c3, + 0x39f25a22, + 0x81f68c55, + 0x87b14e15, + 0x0920af5d, + 0xe2585678, + 0x0671e46d, + 0xb77ddb67, + 0x3948c4b3, + 0x122dddef, + 0xd0726172, + 0xd3302234, + 0x58bab4e4, + 0x195ac247, + 0x082459f0, + 0x18a2566d, + 0xbf56078d, + 0x116ed409, + 0x5ccc0f80, + 0xbae0b4ca, + 0x21a6325d, + 0x7e1f0c40, + 0x595326d4, + 0x518b2244, + 0x8ab3cdb7, + 0xbe6b4835, + 0xfc39f8ac, + 0x63b167aa, + 0x194f070d, + 0xed3d0416, + 0xae16758a, + 0xb9bb6bbf, + 0x477d9c85, + 0x9808c304, + 0xe1d8cec4, + 0x7ee22e17, + 0x0a7a9d7f, + 0xcc98173a, + 0x5f78dc21, + 0x364bc95e, + 0xb54608d9, + 0x5d4d70ea, + 0x083a7f79, + 0x59ffbd73, + 0x4f3e9eaf, + 0x68755ad4, + 0xab254689, + 0x11bf09a8, + 0xbbc40098, + 0x969ca3eb, + 0x30eee9d2, + 0xe35bc37e, + 0xcb2d678f, + 0x7846876b, + 0xf0d28ae7, + 0xc092fbb2, + 0x321b344a, + 0xcc5ee81b, + 0xd2afa00f, + 0xfeccd86a, + 0x6e5e55c2, + 0x2b5543ea, + 0x810e4009, + 0xea2d8e20, + 0x6acae3b9, + 0x3828e15e, + 0xe1e4821c, + 0xf429da70, + 0x35f6565c, + 0x64b1baa8, + 0x350e9583, + 0xd2522d4f, + 0x5e28a3f1, + 0x949ff0aa, + 0x3c1b5694, + 0x146dde1f, + 0x6f3430e1, + 0x71c077b7, + 0x4d145924, + 0xe431cd28, + 0xb315cfde, + 0xa0365a4a, + 0x473de1aa, + 0xcbe4e999, + 0x319906e9, + 0xad0fea9c, + 0x89e4e72d, + 0x9dbba94d, + 0xd395c1c5, + 0xa1fff11a, + 0x8447e120, + 0xe5c59100, + 0xa07cb778, + 0x8f30a039, + 0xed78facb, + 0x86de9373, + 0x550c4889, + 0xce71e3a8, + 0x06167b3a, + 0x5abdd9a3, + 0xc8a9e48d, + 0xe3312905, + 0x7a63a146, + 0xc0f19763, + 0xda0cf9db, + 0x1d708306, + 0x0e41f0ba, + 0x4c7939fe, + 0x768e48c2, + 0xe925fd31, + 0x309e7870, + 0xfc261b87, + 0xc897b2de, + 0x6c714792, + 0x41c7fbac, + 0x57d0b3c3, + 0x4fa82a55, + 0xd56b4a87, + 0x81e5cabc, + 0xb260cb7b, + 0x520927ab, + 0x20d0ab46, + 0xc9f92ddf, + 0x81f4a21d, + 0xfc5a0ca2, + 0x95d16aad, + 0xe54d7847, + 0x6080cc07, + 0x0df73f7e, + 0xaa8d5187, + 0x97a0bc12, + 0xb22c5e68, + 0x0954d7dc, + 0x3368ab5a, + 0xd12541df, + 0x58119260, + 0xe5b0e1df, + 0x25027fa4, + 0x5780425d, + 0x29bb8791, + 0x4100b7a9, + 0x076b3519, + 0x15e0ebb4, + 0xe5fb9273, + 0x6dbf07e7, + 0x1f82bddd, + 0x03691b6b, + 0xbacef28c, + 0x9909ed5a, + 0x98886793, + 0x544f9a82, + 0x9d9749d0, + 0x38441606, + 0xc4a9f4d2, + 0x6ce2bcf1, + 0x1c7c3abd, + 0x62c621f1, + 0x871ee1e4, + 0xa83930ce, + 0xbe1ee459, + 0xd61f1ca4, + 0x8c4450e5, + 0x98031ca9, + 0xe52f54e2, + 0xd0c4c737, + 0x76074160, + 0xbf050c3b, + 0x2603af14, + 0x43cbb0bc, + 0xc631b9e8, + 0x26030719, + 0x993f570c, + 0xdda34038, + 0xe34a9793, + 0x337a124c, + 0x2aa8af16, + 0xf80d7473, + 0xf01d9397, + 0x68e1afb9, + 0x0eb37ad2, + 0xf71969f9, + 0xdf020552, + 0x75aa9b30, + 0xffa210cf, + 0x543c414f, + 0xa1e3faec, + 0x40891d7e, + 0x6b48a6c5, + 0xec09a1a0, + 0x97a31f2a, + 0x5a6be2d7, + 0xd06e492b, + 0xc54290af, + 0xcb524021, + 0x420e8c4d, + 0xfb135c17, + 0x2bfc8adb, + 0x9f0cfb46, + 0x564db712, + 0x7a97a227, + 0x8bb98daf, + 0xdd0d6180, + 0x3d28b9e3, + 0xe505050f, + 0x19a9868e, + 0x7bf5685f, + 0x35d698c4, + 0xce7e1de3, + 0x360a64af, + 0x25a1f022, + 0xe26c1d04, + 0x5b3fb364, + 0x932f25f7, + 0x9a2aa00d, + 0xc50fb773, + 0xec45ea3a, + 0x22ddf8e4, + 0xafb6a6c8, + 0x876d04f7, + 0xd9c86c3c, + 0xd54bee2d, + 0xf4e28199, + 0xc3456776, + 0x04c3107b, + 0xbf914e9d, + 0x23fefaa5, + 0x0931a133, + 0x41467758, + 0x8ec49707, + 0x5ed48709, + 0xd11c2de8, + 0xb687a0b9, + 0xdc908383, + 0xd8037ff3, + 0xd4311a9f, + 0xd00aeb6a, + 0xfe54df3b, + 0x9c51ce4d, + 0x36956408, + 0xcd28ef09, + 0xc68932b0, + 0x7c31e782, + 0x28b4723c, + 0xededacc2, + 0x6ddbac6b, + 0x775a7fc1, + 0x6909906f, + 0xa774123c, + 0xf63145ad, + 0x287b191e, + 0x59d79300, + 0xbf76a2fc, + 0xfbaf9207, + 0x2fe5b7f6, + 0xebe7c103, + 0x71ac0a8d, + 0x2028c3c7, + 0xd2cb4917, + 0xd74a4ee4, + 0xfce405d8, + 0xad83fd0f, + 0x8f9ec3da, + 0xaab2301c, + 0xc6f1339f, + 0xc652bced, + 0xe378b272, + 0x18e1ff34, + 0x9ec778b6, + 0xce1a3883, + 0x7c5e5eaf, + 0xd16ec37a, + 0xa69e45f4, + 0xc36cd4aa, + 0x045b391f, + 0x5a2a08f1, + 0x4dd8d53e, + 0xd64796ec, + 0x4476fc28, + 0x18dbaa50, + 0x00fb2407, + 0x177db915, + 0x5969758b, + 0x3030964a, + 0x81d6485b, + 0x7d2e12b0, + 0x624d6c5f, + 0x0746bbc0, + 0xe669d150, + 0x0465eef7, + 0x09764011, + 0x551995e4, + 0x8422dedf, + 0x0ca56194, + 0x293eab2e, + 0xf20a137a, + 0x55117fc2, + 0xbc5431af, + 0x064751fa, + 0xc0dafdb2, + 0x6c3b1d4f, + 0xeac335b3, + 0x71173afc, + 0x31c84b7c, + 0xfef2b4ab, + 0x59ca5fa2, + 0x664c8b4e, + 0x7dfd560b, + 0xdb0daff3, + 0x51f87bfa, + 0x58015d2e, + 0x67a827b4, + 0x62cebc1a, + 0x24b37298, + 0x75b589be, + 0x874f1800, + 0x277b795c, + 0xf762489e, + 0x87d00752, + 0x9be45ed1, + 0x296ec120, + 0x61162480, + 0x792e8a2c, + 0x3b631590, + 0xe33ba0cf, + 0x542ac23c, + 0xe1e8cffa, + 0xfc084cd8, + 0xc115ad31, + 0x71559928, + 0x791f1e33, + 0x662ed92b, + 0x7222c76d, + 0x02dcd566, + 0x8db9b4d4, + 0xa5f344c8, + 0x15806b12, + 0x81e572f7, + 0x3b3fbe25, + 0x2133b413, + 0x2d68a367, + 0x356f6ce7, + 0xcd6dfed1, + 0xd8b3a26e, + 0xe9d328da, + 0x127425ab, + 0x83a60aac, + 0x8cc26190, + 0x7f87ab26, + 0x56faab5f, + 0x76d0feaa, + 0x4b25dd10, + 0x4f6286ea, + 0x79298d06, + 0x8002bf83, + 0x2977c85e, + 0xd3b3d19a, + 0xa92bf132, + 0xa280efd8, + 0x83f7ad6e, + 0x748969c7, + 0x25ff411d, + 0x3854d3a8, + 0x55746aa2, + 0x00db5c54, + 0x36949e0d, + 0x40402ab6, + 0x1a720211, + 0xe02ce823, + 0x4ac104a2, + 0x214d2e4b, + 0x267e5c83, + 0x38a3a483, + 0xd1da1f67, + 0x0c68db2c, + 0xd7035d63, + 0xa29393bb, + 0xa5743519, + 0xcb97c84e, + 0xa853974f, + 0x147360a0, + 0x2df9b3f4, + 0x0aff129e, + 0x177d687f, + 0x87eff911, + 0x6c60b354, + 0x6c356c38, + 0x7d480965, + 0xbb06a193, + 0x25b0568e, + 0x6fd6da9a, + 0x82b64f14, + 0x3d267a78, + 0xf100b6a7, + 0x32c74539, + 0x6042e152, + 0x4548276e, + 0xa3a32b70, + 0xf029fe15, + 0xa9b8bd2f, + 0x5618eee4, + 0x9815a5f0, + 0x89fb2850, + 0xa9261b26, + 0xded9e505, + 0x37e9d749, + 0xdc4aeb78, + 0x9e634f7a, + 0xcf638d2d, + 0x6b679f92, + 0x2b64911d, + 0xe6d1312f, + 0x88b3e76a, + 0x56311f62, + 0x00916de7, + 0x39d0bc61, + 0x8ac09356, + 0x47abcfce, + 0x324cb73e, + 0xfadcd0a8, + 0x2f2fbca8, + 0x945eda22, + 0xba23cab1, + 0xf9fb4212, + 0x1fa71d45, + 0x867a034e, + 0x3bee5db1, + 0xf54adced, + 0x6633ba77, + 0xe1eb4f1e, + 0x97ef01f6, + 0x57fd3b32, + 0x5234d80d, + 0xe8ee95f3, + 0x5dc990bf, + 0xaba833e1, diff --git a/src/cpu/intel/model_f3x/model_f3x_init.c b/src/cpu/intel/model_f3x/model_f3x_init.c new file mode 100644 index 0000000000..ce5705b081 --- /dev/null +++ b/src/cpu/intel/model_f3x/model_f3x_init.c @@ -0,0 +1,59 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +static uint32_t microcode_updates[] = { + /* WARNING - Intel has a new data structure that has variable length + * microcode update lengths. They are encoded in int 8 and 9. A + * dummy header of nulls must terminate the list. + */ + +#include "microcode_M1DF3413.h" + /* Dummy terminator */ + 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, +}; + + +static void model_f3x_init(device_t cpu) +{ + /* Turn on caching if we haven't already */ + x86_enable_cache(); + x86_setup_mtrrs(); + x86_mtrr_check(); + + /* Update the microcode */ + intel_update_microcode(microcode_updates); + + /* Enable the local cpu apics */ + setup_lapic(); + + /* Start up my cpu siblings */ + intel_sibling_init(cpu); +}; + +static struct device_operations cpu_dev_ops = { + .init = model_f3x_init, +}; +static struct cpu_device_id cpu_table[] = { + { X86_VENDOR_INTEL, 0x0f34 }, /* Xeon */ + { 0, 0 }, +}; + +static struct cpu_driver model_f3x __cpu_driver = { + .ops = &cpu_dev_ops, + .id_table = cpu_table, +}; diff --git a/src/cpu/intel/slot_2/Config.lb b/src/cpu/intel/slot_2/Config.lb new file mode 100644 index 0000000000..f39eb77702 --- /dev/null +++ b/src/cpu/intel/slot_2/Config.lb @@ -0,0 +1,3 @@ +config chip.h +object slot_2.o +dir /cpu/intel/model_6xx diff --git a/src/cpu/intel/slot_2/chip.h b/src/cpu/intel/slot_2/chip.h new file mode 100644 index 0000000000..04a128d894 --- /dev/null +++ b/src/cpu/intel/slot_2/chip.h @@ -0,0 +1,4 @@ +extern struct chip_control cpu_intel_slot_2_control; + +struct cpu_intel_slot_2_config { +}; diff --git a/src/cpu/intel/slot_2/slot_2.c b/src/cpu/intel/slot_2/slot_2.c new file mode 100644 index 0000000000..f47767b016 --- /dev/null +++ b/src/cpu/intel/slot_2/slot_2.c @@ -0,0 +1,7 @@ +#include +#include "chip.h" + + +struct chip_control cpu_intel_slot_2_control = { + .name = "slot 2", +}; diff --git a/src/cpu/intel/socket_mPGA603/Config.lb b/src/cpu/intel/socket_mPGA603/Config.lb new file mode 100644 index 0000000000..fa66e447bc --- /dev/null +++ b/src/cpu/intel/socket_mPGA603/Config.lb @@ -0,0 +1,6 @@ +config chip.h +object socket_mPGA603_400Mhz.o +dir /cpu/intel/model_f0x +dir /cpu/intel/model_f1x +dir /cpu/intel/model_f2x + diff --git a/src/cpu/intel/socket_mPGA603/chip.h b/src/cpu/intel/socket_mPGA603/chip.h new file mode 100644 index 0000000000..fcea1edaa7 --- /dev/null +++ b/src/cpu/intel/socket_mPGA603/chip.h @@ -0,0 +1,4 @@ +extern struct chip_control cpu_intel_socket_mPGA603_400Mhz_control; + +struct cpu_intel_socket_mPGA603_400Mhz_config { +}; diff --git a/src/cpu/intel/socket_mPGA603/socket_mPGA603_400Mhz.c b/src/cpu/intel/socket_mPGA603/socket_mPGA603_400Mhz.c new file mode 100644 index 0000000000..73265eab1f --- /dev/null +++ b/src/cpu/intel/socket_mPGA603/socket_mPGA603_400Mhz.c @@ -0,0 +1,7 @@ +#include +#include "chip.h" + + +struct chip_control cpu_intel_socket_mPGA603_400Mhz_control = { + .name = "socket mPGA603_400Mhz", +}; diff --git a/src/cpu/intel/socket_mPGA604_533Mhz/Config.lb b/src/cpu/intel/socket_mPGA604_533Mhz/Config.lb new file mode 100644 index 0000000000..0538143469 --- /dev/null +++ b/src/cpu/intel/socket_mPGA604_533Mhz/Config.lb @@ -0,0 +1,4 @@ +config chip.h +object socket_mPGA604_533Mhz.o +dir /cpu/intel/model_f2x + diff --git a/src/cpu/intel/socket_mPGA604_533Mhz/chip.h b/src/cpu/intel/socket_mPGA604_533Mhz/chip.h new file mode 100644 index 0000000000..c0ee2f2d17 --- /dev/null +++ b/src/cpu/intel/socket_mPGA604_533Mhz/chip.h @@ -0,0 +1,4 @@ +extern struct chip_control cpu_intel_socket_mPGA604_533Mhz_control; + +struct cpu_intel_socket_mPGA604_533Mhz_config { +}; diff --git a/src/cpu/intel/socket_mPGA604_533Mhz/socket_mPGA604_533Mhz.c b/src/cpu/intel/socket_mPGA604_533Mhz/socket_mPGA604_533Mhz.c new file mode 100644 index 0000000000..fd5dbe41d5 --- /dev/null +++ b/src/cpu/intel/socket_mPGA604_533Mhz/socket_mPGA604_533Mhz.c @@ -0,0 +1,7 @@ +#include +#include "chip.h" + + +struct chip_control cpu_intel_socket_mPGA604_533Mhz_control = { + .name = "socket mPGA604_533Mhz", +}; diff --git a/src/cpu/intel/socket_mPGA604_800Mhz/Config.lb b/src/cpu/intel/socket_mPGA604_800Mhz/Config.lb new file mode 100644 index 0000000000..0b794338a2 --- /dev/null +++ b/src/cpu/intel/socket_mPGA604_800Mhz/Config.lb @@ -0,0 +1,3 @@ +config chip.h +object socket_mPGA604_800Mhz.o +dir /cpu/intel/model_f3x diff --git a/src/cpu/intel/socket_mPGA604_800Mhz/chip.h b/src/cpu/intel/socket_mPGA604_800Mhz/chip.h new file mode 100644 index 0000000000..41fe89a35a --- /dev/null +++ b/src/cpu/intel/socket_mPGA604_800Mhz/chip.h @@ -0,0 +1,4 @@ +extern struct chip_control cpu_intel_socket_mPGA604_800Mhz_control; + +struct cpu_intel_socket_mPGA604_800Mhz_config { +}; diff --git a/src/cpu/intel/socket_mPGA604_800Mhz/socket_mPGA604_800Mhz.c b/src/cpu/intel/socket_mPGA604_800Mhz/socket_mPGA604_800Mhz.c new file mode 100644 index 0000000000..c638a93874 --- /dev/null +++ b/src/cpu/intel/socket_mPGA604_800Mhz/socket_mPGA604_800Mhz.c @@ -0,0 +1,7 @@ +#include +#include "chip.h" + + +struct chip_control cpu_intel_socket_mPGA604_800Mhz_control = { + .name = "socket mPGA604_800Mhz", +}; diff --git a/src/cpu/intel/thermal_monitoring/Config.lb b/src/cpu/intel/thermal_monitoring/Config.lb new file mode 100644 index 0000000000..163f6e6649 --- /dev/null +++ b/src/cpu/intel/thermal_monitoring/Config.lb @@ -0,0 +1,3 @@ +#define THERMAL_MONITORING_OFF 0 +#define THERMAL_MONITORING_SET 0x00000008 +#define MISC_ENABLE 0x01a0 diff --git a/src/cpu/intel/thermal_monitoring/thermal_monitoring.h b/src/cpu/intel/thermal_monitoring/thermal_monitoring.h new file mode 100644 index 0000000000..163f6e6649 --- /dev/null +++ b/src/cpu/intel/thermal_monitoring/thermal_monitoring.h @@ -0,0 +1,3 @@ +#define THERMAL_MONITORING_OFF 0 +#define THERMAL_MONITORING_SET 0x00000008 +#define MISC_ENABLE 0x01a0 diff --git a/src/cpu/x86/16bit/entry16.inc b/src/cpu/x86/16bit/entry16.inc new file mode 100644 index 0000000000..61726d8ad9 --- /dev/null +++ b/src/cpu/x86/16bit/entry16.inc @@ -0,0 +1,124 @@ +/* +This software and ancillary information (herein called SOFTWARE ) +called LinuxBIOS is made available under the terms described +here. The SOFTWARE has been approved for release with associated +LA-CC Number 00-34 . Unless otherwise indicated, this SOFTWARE has +been authored by an employee or employees of the University of +California, operator of the Los Alamos National Laboratory under +Contract No. W-7405-ENG-36 with the U.S. Department of Energy. The +U.S. Government has rights to use, reproduce, and distribute this +SOFTWARE. The public may copy, distribute, prepare derivative works +and publicly display this SOFTWARE without charge, provided that this +Notice and any statement of authorship are reproduced on all copies. +Neither the Government nor the University makes any warranty, express +or implied, or assumes any liability or responsibility for the use of +this SOFTWARE. If SOFTWARE is modified to produce derivative works, +such modified SOFTWARE should be clearly marked, so as not to confuse +it with the version available from LANL. + */ +/* Copyright 2000, Ron Minnich, Advanced Computing Lab, LANL + * rminnich@lanl.gov + */ + + +/** Start code to put an i386 or later processor into 32-bit + * protected mode. + */ + +/* .section ".rom.text" */ +#include +.code16 +.globl _start +.type _start, @function + +_start: + cli + /* Save the BIST result */ + movl %eax, %ebp + +/* thanks to kmliu@sis.tw.com for this TBL fix ... */ +/**/ +/* IMMEDIATELY invalidate the translation lookaside buffer before executing*/ +/* any further code. Even though paging is disabled we could still get*/ +/*false address translations due to the TLB if we didn't invalidate it.*/ +/**/ + xorl %eax, %eax + movl %eax, %cr3 /* Invalidate TLB*/ + + + /* Invalidating the cache here seems to be a bad idea on + * modern processors. Don't. + * If we are hyperthreaded or we have multiple cores it is bad, + * for SMP startup. On Opterons it causes a 5 second delay. + * Invalidating the cache was pure paranoia in any event. + * If you cpu needs it you can write a cpu dependent version of + * entry16.inc. + */ + + /* Note: gas handles memory addresses in 16 bit code very poorly. + * In particular it doesn't appear to have a directive allowing you + * associate a section or even an absolute offset with a segment register. + * + * This means that anything except cs:ip relative offsets are + * a real pain in 16 bit mode. And explains why it is almost + * imposible to get gas to do lgdt correctly. + * + * One way to work around this is to have the linker do the + * math instead of the assembler. This solves the very + * pratical problem of being able to write code that can + * be relocated. + * + * An lgdt call before we have memory enabled cannot be + * position independent, as we cannot execute a call + * instruction to get our current instruction pointer. + * So while this code is relocateable it isn't arbitrarily + * relocatable. + * + * The criteria for relocation have been relaxed to their + * utmost, so that we can use the same code for both + * our initial entry point and startup of the second cpu. + * The code assumes when executing at _start that: + * (((cs & 0xfff) == 0) and (ip == _start & 0xffff)) + * or + * ((cs == anything) and (ip == 0)). + * + * The restrictions in reset16.inc mean that _start initially + * must be loaded at or above 0xffff0000 or below 0x100000. + * + * The linker scripts computs gdtptr16_offset by simply returning + * the low 16 bits. This means that the intial segment used + * when start is called must be 64K aligned. This should not + * restrict the address as the ip address can be anything. + */ + + movw %cs, %ax + shlw $4, %ax + movw $gdtptr16_offset, %bx + subw %ax, %bx + data32 lgdt %cs:(%bx) + + movl %cr0, %eax + andl $0x7FFAFFD1, %eax /* PG,AM,WP,NE,TS,EM,MP = 0 */ + orl $0x60000001, %eax /* CD, NW, PE = 1 */ + movl %eax, %cr0 + + /* Restore BIST to %eax */ + movl %ebp, %eax + + /* Now that we are in protected mode jump to a 32 bit code segment. */ + data32 ljmp $ROM_CODE_SEG, $__protected_start + +/** The gdt has a 4 Gb code segment at 0x10, and a 4 GB data segment + * at 0x18; these are Linux-compatible. + */ + +.align 4 +.globl gdtptr16 +gdtptr16: + .word gdt_end - gdt -1 /* compute the table limit */ + .long gdt /* we know the offset */ + +.globl _estart +_estart: + .code32 + diff --git a/src/cpu/x86/16bit/entry16.lds b/src/cpu/x86/16bit/entry16.lds new file mode 100644 index 0000000000..db37e66302 --- /dev/null +++ b/src/cpu/x86/16bit/entry16.lds @@ -0,0 +1,2 @@ + gdtptr16_offset = gdtptr16 & 0xffff; + _start_offset = _start & 0xffff; diff --git a/src/cpu/x86/16bit/reset16.inc b/src/cpu/x86/16bit/reset16.inc new file mode 100644 index 0000000000..d36c94085e --- /dev/null +++ b/src/cpu/x86/16bit/reset16.inc @@ -0,0 +1,21 @@ + .section ".reset" + .code16 +.globl reset_vector +reset_vector: +#if _ROMBASE >= 0xffff0000 + /* jmp _start */ + .byte 0xe9 + .int _start - ( . + 2 ) + /* Note: The above jump is hand coded to work around bugs in binutils. + * 5 byte are used for a 3 byte instruction. This works because x86 + * is little endian and allows us to use supported 32bit relocations + * instead of the weird 16 bit relocations that binutils does not + * handle consistenly between versions because they are used so rarely. + */ +#else +# error _ROMBASE is an unsupported value +#endif + . = 0x8; + .code32 + jmp protected_start + .previous diff --git a/src/cpu/x86/16bit/reset16.lds b/src/cpu/x86/16bit/reset16.lds new file mode 100644 index 0000000000..80f2fc0c6f --- /dev/null +++ b/src/cpu/x86/16bit/reset16.lds @@ -0,0 +1,14 @@ +/* + * _ROMTOP : The top of the rom used where we + * need to put the reset vector. + */ + +SECTIONS { + _ROMTOP = (_ROMBASE >= 0xffff0000)? 0xfffffff0 : 0xffff0; + . = _ROMTOP; + .reset . : { + *(.reset) + . = 15 ; + BYTE(0x00); + } +} diff --git a/src/cpu/x86/32bit/entry32.inc b/src/cpu/x86/32bit/entry32.inc new file mode 100644 index 0000000000..3d30a3f85f --- /dev/null +++ b/src/cpu/x86/32bit/entry32.inc @@ -0,0 +1,61 @@ +/* For starting linuxBIOS in protected mode */ + +#include + +/* .section ".rom.text" */ + .code32 + + .align 4 +.globl gdtptr + +gdt: +gdtptr: + .word gdt_end - gdt -1 /* compute the table limit */ + .long gdt /* we know the offset */ + .word 0 + +/* flat code segment */ + .word 0xffff, 0x0000 + .byte 0x00, 0x9b, 0xcf, 0x00 + +/* flat data segment */ + .word 0xffff, 0x0000 + .byte 0x00, 0x93, 0xcf, 0x00 + +gdt_end: + + +/* + * When we come here we are in protected mode. We expand + * the stack and copies the data segment from ROM to the + * memory. + * + * After that, we call the chipset bootstrap routine that + * does what is left of the chipset initialization. + * + * NOTE aligned to 4 so that we are sure that the prefetch + * cache will be reloaded. + */ + .align 4 +.globl protected_start +protected_start: + + lgdt %cs:gdtptr + ljmp $ROM_CODE_SEG, $__protected_start + +__protected_start: + /* Save the BIST value */ + movl %eax, %ebp + + intel_chip_post_macro(0x10) /* post 10 */ + + movw $ROM_DATA_SEG, %ax + movw %ax, %ds + movw %ax, %es + movw %ax, %ss + movw %ax, %fs + movw %ax, %gs + + /* Restore the BIST value to %eax */ + movl %ebp, %eax + diff --git a/src/cpu/x86/32bit/entry32.lds b/src/cpu/x86/32bit/entry32.lds new file mode 100644 index 0000000000..37a75ba6ae --- /dev/null +++ b/src/cpu/x86/32bit/entry32.lds @@ -0,0 +1,14 @@ +/* + _cache_ram_seg_base = DEFINED(CACHE_RAM_BASE)? CACHE_RAM_BASE - _rodata : 0; + _cache_ram_seg_base_low = (_cache_ram_seg_base) & 0xffff; + _cache_ram_seg_base_middle = (_cache_ram_seg_base >> 16) & 0xff; + _cache_ram_seg_base_high = (_cache_ram_seg_base >> 24) & 0xff; + + _rom_code_seg_base = _ltext - _text; + _rom_code_seg_base_low = (_rom_code_seg_base) & 0xffff; + _rom_code_seg_base_middle = (_rom_code_seg_base >> 16) & 0xff; + _rom_code_seg_base_high = (_rom_code_seg_base >> 24) & 0xff; +*/ + + + diff --git a/src/cpu/x86/32bit/reset32.inc b/src/cpu/x86/32bit/reset32.inc new file mode 100644 index 0000000000..42c68cc770 --- /dev/null +++ b/src/cpu/x86/32bit/reset32.inc @@ -0,0 +1,10 @@ + .section ".reset" + .code16 +.globl reset_vector +reset_vector: + + . = 0x8; + .code32 + jmp protected_start + + .previous diff --git a/src/cpu/x86/32bit/reset32.lds b/src/cpu/x86/32bit/reset32.lds new file mode 100644 index 0000000000..fa6db86b1a --- /dev/null +++ b/src/cpu/x86/32bit/reset32.lds @@ -0,0 +1,14 @@ +/* + * _ROMTOP : The top of the rom used where we + * need to put the reset vector. + */ + +SECTIONS { + _ROMTOP = _ROMBASE + ROM_IMAGE_SIZE - 0x10; + . = _ROMTOP; + .reset (.): { + *(.reset) + . = 15 ; + BYTE(0x00); + } +} diff --git a/src/cpu/x86/cache/Config.lb b/src/cpu/x86/cache/Config.lb new file mode 100644 index 0000000000..e39bb2da32 --- /dev/null +++ b/src/cpu/x86/cache/Config.lb @@ -0,0 +1 @@ +object cache.o diff --git a/src/cpu/x86/cache/cache.c b/src/cpu/x86/cache/cache.c new file mode 100644 index 0000000000..92e4a69e29 --- /dev/null +++ b/src/cpu/x86/cache/cache.c @@ -0,0 +1,10 @@ +#include +#include + +void x86_enable_cache(void) +{ + post_code(0x60); + printk_info("Enabling cache\n"); + enable_cache(); +} + diff --git a/src/cpu/x86/fpu/Config.lb b/src/cpu/x86/fpu/Config.lb new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/cpu/x86/fpu/enable_fpu.inc b/src/cpu/x86/fpu/enable_fpu.inc new file mode 100644 index 0000000000..e663e365ac --- /dev/null +++ b/src/cpu/x86/fpu/enable_fpu.inc @@ -0,0 +1,9 @@ + /* preserve BIST in %eax */ + movl %eax, %ebp + + /* Disable floating point emulation */ + movl %cr0, %eax + andl $~(1<<2), %eax + movl %eax, %cr0 + + movl %ebp, %eax diff --git a/src/cpu/x86/lapic/Config.lb b/src/cpu/x86/lapic/Config.lb new file mode 100644 index 0000000000..8b5eaa376e --- /dev/null +++ b/src/cpu/x86/lapic/Config.lb @@ -0,0 +1,3 @@ +object lapic.o +object lapic_cpu_init.o +object secondary.S diff --git a/src/cpu/x86/lapic/boot_cpu.c b/src/cpu/x86/lapic/boot_cpu.c new file mode 100644 index 0000000000..d3a8f6e7a7 --- /dev/null +++ b/src/cpu/x86/lapic/boot_cpu.c @@ -0,0 +1,10 @@ +#include + +int boot_cpu(void) +{ + int bsp; + msr_t msr; + msr = rdmsr(0x1b); + bsp = !!(msr.lo & (1 << 8)); + return bsp; +} diff --git a/src/cpu/x86/lapic/lapic.c b/src/cpu/x86/lapic/lapic.c new file mode 100644 index 0000000000..8282890bf7 --- /dev/null +++ b/src/cpu/x86/lapic/lapic.c @@ -0,0 +1,72 @@ +#include +#include +#include +#include + +void setup_lapic(void) +{ + /* this is so interrupts work. This is very limited scope -- + * linux will do better later, we hope ... + */ + /* this is the first way we learned to do it. It fails on real SMP + * stuff. So we have to do things differently ... + * see the Intel mp1.4 spec, page A-3 + */ + +#if NEED_LAPIC == 1 + /* Only Pentium Pro and later have those MSR stuff */ + msr_t msr; + + printk_info("Setting up local apic..."); + + /* Enable the local apic */ + msr = rdmsr(LAPIC_BASE_MSR); + msr.lo |= LAPIC_BASE_MSR_ENABLE; + msr.lo &= ~LAPIC_BASE_MSR_ADDR_MASK; + msr.lo |= LAPIC_DEFAULT_BASE; + wrmsr(LAPIC_BASE_MSR, msr); + + /* + * Set Task Priority to 'accept all'. + */ + lapic_write_around(LAPIC_TASKPRI, + lapic_read_around(LAPIC_TASKPRI) & ~LAPIC_TPRI_MASK); + + /* Put the local apic in virtual wire mode */ + lapic_write_around(LAPIC_SPIV, + (lapic_read_around(LAPIC_SPIV) & ~(LAPIC_VECTOR_MASK)) + | LAPIC_SPIV_ENABLE); + lapic_write_around(LAPIC_LVT0, + (lapic_read_around(LAPIC_LVT0) & + ~(LAPIC_LVT_MASKED | LAPIC_LVT_LEVEL_TRIGGER | + LAPIC_LVT_REMOTE_IRR | LAPIC_INPUT_POLARITY | + LAPIC_SEND_PENDING |LAPIC_LVT_RESERVED_1 | + LAPIC_DELIVERY_MODE_MASK)) + | (LAPIC_LVT_REMOTE_IRR |LAPIC_SEND_PENDING | + LAPIC_DELIVERY_MODE_EXTINT) + ); + lapic_write_around(LAPIC_LVT1, + (lapic_read_around(LAPIC_LVT1) & + ~(LAPIC_LVT_MASKED | LAPIC_LVT_LEVEL_TRIGGER | + LAPIC_LVT_REMOTE_IRR | LAPIC_INPUT_POLARITY | + LAPIC_SEND_PENDING |LAPIC_LVT_RESERVED_1 | + LAPIC_DELIVERY_MODE_MASK)) + | (LAPIC_LVT_REMOTE_IRR |LAPIC_SEND_PENDING | + LAPIC_DELIVERY_MODE_NMI) + ); + + printk_debug(" apic_id: %d ", lapicid()); + +#else /* !NEED_LLAPIC */ + /* Only Pentium Pro and later have those MSR stuff */ + msr_t msr; + + printk_info("Disabling local apic..."); + + msr = rdmsr(LAPIC_BASE_MSR); + msr.lo &= ~LAPIC_BASE_MSR_ENABLE; + wrmsr(LAPIC_BASE_MSR, msr); +#endif /* !NEED_LAPIC */ + printk_info("done.\n"); + post_code(0x9b); +} diff --git a/src/cpu/x86/lapic/lapic_cpu_init.c b/src/cpu/x86/lapic/lapic_cpu_init.c new file mode 100644 index 0000000000..963b1cf729 --- /dev/null +++ b/src/cpu/x86/lapic/lapic_cpu_init.c @@ -0,0 +1,316 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +#if CONFIG_SMP == 1 +/* This is a lot more paranoid now, since Linux can NOT handle + * being told there is a CPU when none exists. So any errors + * will return 0, meaning no CPU. + * + * We actually handling that case by noting which cpus startup + * and not telling anyone about the ones that dont. + */ +static int lapic_start_cpu(unsigned long apicid) +{ + int timeout; + unsigned long send_status, accept_status, start_eip; + int j, num_starts, maxlvt; + extern char _secondary_start[]; + + /* + * Starting actual IPI sequence... + */ + + printk_spew("Asserting INIT.\n"); + + /* + * Turn INIT on target chip + */ + lapic_write_around(LAPIC_ICR2, SET_LAPIC_DEST_FIELD(apicid)); + + /* + * Send IPI + */ + + lapic_write_around(LAPIC_ICR, LAPIC_INT_LEVELTRIG | LAPIC_INT_ASSERT + | LAPIC_DM_INIT); + + printk_spew("Waiting for send to finish...\n"); + timeout = 0; + do { + printk_spew("+"); + udelay(100); + send_status = lapic_read(LAPIC_ICR) & LAPIC_ICR_BUSY; + } while (send_status && (timeout++ < 1000)); + if (timeout >= 1000) { + printk_err("CPU %d: First apic write timed out. Disabling\n", + apicid); + // too bad. + printk_err("ESR is 0x%x\n", lapic_read(LAPIC_ESR)); + if (lapic_read(LAPIC_ESR)) { + printk_err("Try to reset ESR\n"); + lapic_write_around(LAPIC_ESR, 0); + printk_err("ESR is 0x%x\n", lapic_read(LAPIC_ESR)); + } + return 0; + } + mdelay(10); + + printk_spew("Deasserting INIT.\n"); + + /* Target chip */ + lapic_write_around(LAPIC_ICR2, SET_LAPIC_DEST_FIELD(apicid)); + + /* Send IPI */ + lapic_write_around(LAPIC_ICR, LAPIC_INT_LEVELTRIG | LAPIC_DM_INIT); + + printk_spew("Waiting for send to finish...\n"); + timeout = 0; + do { + printk_spew("+"); + udelay(100); + send_status = lapic_read(LAPIC_ICR) & LAPIC_ICR_BUSY; + } while (send_status && (timeout++ < 1000)); + if (timeout >= 1000) { + printk_err("CPU %d: Second apic write timed out. Disabling\n", + apicid); + // too bad. + return 0; + } + + start_eip = (unsigned long)_secondary_start; + printk_spew("start_eip=0x%08lx\n", start_eip); + + num_starts = 2; + + /* + * Run STARTUP IPI loop. + */ + printk_spew("#startup loops: %d.\n", num_starts); + + maxlvt = 4; + + for (j = 1; j <= num_starts; j++) { + printk_spew("Sending STARTUP #%d to %u.\n", j, apicid); + lapic_read_around(LAPIC_SPIV); + lapic_write(LAPIC_ESR, 0); + lapic_read(LAPIC_ESR); + printk_spew("After apic_write.\n"); + + /* + * STARTUP IPI + */ + + /* Target chip */ + lapic_write_around(LAPIC_ICR2, SET_LAPIC_DEST_FIELD(apicid)); + + /* Boot on the stack */ + /* Kick the second */ + lapic_write_around(LAPIC_ICR, LAPIC_DM_STARTUP + | (start_eip >> 12)); + + /* + * Give the other CPU some time to accept the IPI. + */ + udelay(300); + + printk_spew("Startup point 1.\n"); + + printk_spew("Waiting for send to finish...\n"); + timeout = 0; + do { + printk_spew("+"); + udelay(100); + send_status = lapic_read(LAPIC_ICR) & LAPIC_ICR_BUSY; + } while (send_status && (timeout++ < 1000)); + + /* + * Give the other CPU some time to accept the IPI. + */ + udelay(200); + /* + * Due to the Pentium erratum 3AP. + */ + if (maxlvt > 3) { + lapic_read_around(LAPIC_SPIV); + lapic_write(LAPIC_ESR, 0); + } + accept_status = (lapic_read(LAPIC_ESR) & 0xEF); + if (send_status || accept_status) + break; + } + printk_spew("After Startup.\n"); + if (send_status) + printk_warning("APIC never delivered???\n"); + if (accept_status) + printk_warning("APIC delivery error (%lx).\n", accept_status); + if (send_status || accept_status) + return 0; + return 1; +} + +/* Number of cpus that are currently running in linuxbios */ +static atomic_t active_cpus = ATOMIC_INIT(1); + +/* start_cpu_lock covers last_cpu_index and secondary_stack. + * Only starting one cpu at a time let's me remove the logic + * for select the stack from assembly language. + * + * In addition communicating by variables to the cpu I + * am starting allows me to veryify it has started before + * start_cpu returns. + */ + +static spinlock_t start_cpu_lock = SPIN_LOCK_UNLOCKED; +static unsigned last_cpu_index = 0; +volatile unsigned long secondary_stack; + +int start_cpu(device_t cpu) +{ + extern unsigned char _estack[]; + struct cpu_info *info; + unsigned long stack_end; + unsigned long apicid; + unsigned long index; + unsigned long count; + int result; + + spin_lock(&start_cpu_lock); + + /* Get the cpu's apicid */ + apicid = cpu->path.u.apic.apic_id; + + /* Get an index for the new processor */ + index = ++last_cpu_index; + + /* Find end of the new processors stack */ + stack_end = ((unsigned long)_estack) - (STACK_SIZE*index) - sizeof(struct cpu_info); + + /* Record the index and which cpu structure we are using */ + info = (struct cpu_info *)stack_end; + info->index = index; + info->cpu = cpu; + + /* Advertise the new stack to start_cpu */ + secondary_stack = stack_end; + + /* Until the cpu starts up report the cpu is not enabled */ + cpu->enabled = 0; + cpu->initialized = 0; + + /* Start the cpu */ + result = lapic_start_cpu(apicid); + + if (result) { + result = 0; + /* Wait 1s or until the new the new cpu calls in */ + for(count = 0; count < 100000 ; count++) { + if (secondary_stack == 0) { + result = 1; + break; + } + udelay(10); + } + } + secondary_stack = 0; + spin_unlock(&start_cpu_lock); + return result; +} + +/* C entry point of secondary cpus */ +void secondary_cpu_init(void) +{ + atomic_inc(&active_cpus); + cpu_initialize(); + atomic_dec(&active_cpus); + stop_this_cpu(); +} + +static void initialize_other_cpus(device_t root) +{ + int old_active_count, active_count; + device_t cpu; + /* Loop through the cpus once getting them started */ + for(cpu = root->link[1].children; cpu ; cpu = cpu->sibling) { + if (cpu->path.type != DEVICE_PATH_APIC) { + continue; + } + if (!cpu->enabled) { + continue; + } + if (cpu->initialized) { + continue; + } + if (!start_cpu(cpu)) { + /* Record the error in cpu? */ + printk_err("CPU %u would not start!\n", + cpu->path.u.apic.apic_id); + } + } + + /* Now loop until the other cpus have finished initializing */ + old_active_count = 1; + active_count = atomic_read(&active_cpus); + while(active_count > 1) { + if (active_count != old_active_count) { + printk_info("Waiting for %d CPUS to stop\n", active_count); + old_active_count = active_count; + } + udelay(10); + active_count = atomic_read(&active_cpus); + } + for(cpu = root->link[1].children; cpu; cpu = cpu->sibling) { + if (cpu->path.type != DEVICE_PATH_APIC) { + continue; + } + if (!cpu->initialized) { + printk_err("CPU %u did not initialize!\n", + cpu->path.u.apic.apic_id); +#warning "FIXME do I need a mainboard_cpu_fixup function?" + } + } + printk_debug("All AP CPUs stopped\n"); +} + +#else /* CONFIG_SMP */ +#define initialize_other_cpus(root) do {} while(0) +#endif /* CONFIG_SMP */ + +void initialize_cpus(device_t root) +{ + struct device_path cpu_path; + struct cpu_info *info; + + /* Find the info struct for this cpu */ + info = cpu_info(); + +#if NEED_LAPIC == 1 + /* Ensure the local apic is enabled */ + enable_lapic(); + + /* Get the device path of the boot cpu */ + cpu_path.type = DEVICE_PATH_APIC; + cpu_path.u.apic.apic_id = lapicid(); +#else + /* Get the device path of the boot cpu */ + cpu_path.type = DEVICE_PATH_BOOT_CPU; +#endif + + /* Find the device structure for the boot cpu */ + info->cpu = alloc_find_dev(&root->link[1], &cpu_path); + + /* Initialize the bootstrap processor */ + cpu_initialize(); + + /* Now initialize the rest of the cpus */ + initialize_other_cpus(root); +} + diff --git a/src/cpu/x86/lapic/secondary.S b/src/cpu/x86/lapic/secondary.S new file mode 100644 index 0000000000..786c31e532 --- /dev/null +++ b/src/cpu/x86/lapic/secondary.S @@ -0,0 +1,53 @@ +#include +#include +#include +#include + .text + .globl _secondary_start + .balign 4096 +_secondary_start: + .code16 + cli + xorl %eax, %eax + movl %eax, %cr3 /* Invalidate TLB*/ + + /* On hyper threaded cpus, invalidating the cache here is + * very very bad. Don't. + */ + + /* setup the data segment */ + movw %cs, %ax + movw %ax, %ds + + data32 lgdt gdtaddr - _secondary_start + + movl %cr0, %eax + andl $0x7FFAFFD1, %eax /* PG,AM,WP,NE,TS,EM,MP = 0 */ + orl $0x60000001, %eax /* CD, NW, PE = 1 */ + movl %eax, %cr0 + + ljmpl $0x10, $1f +1: + .code32 + movw $0x18, %ax + movw %ax, %ds + movw %ax, %es + movw %ax, %ss + movw %ax, %fs + movw %ax, %gs + + /* Set the stack pointer, and flag that we are done */ + xorl %eax, %eax + movl secondary_stack, %esp + movl %eax, secondary_stack + + call secondary_cpu_init +1: hlt + jmp 1b + +gdtaddr: + .word gdt_limit /* the table limit */ + .long gdt /* we know the offset */ + + +.code32 diff --git a/src/cpu/x86/mmx/Config.lb b/src/cpu/x86/mmx/Config.lb new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/cpu/x86/mmx/disable_mmx.inc b/src/cpu/x86/mmx/disable_mmx.inc new file mode 100644 index 0000000000..97d62d60f5 --- /dev/null +++ b/src/cpu/x86/mmx/disable_mmx.inc @@ -0,0 +1,2 @@ + /* Clear out an mmx state */ + emms diff --git a/src/cpu/x86/mmx/enable_mmx.inc b/src/cpu/x86/mmx/enable_mmx.inc new file mode 100644 index 0000000000..a0578daf65 --- /dev/null +++ b/src/cpu/x86/mmx/enable_mmx.inc @@ -0,0 +1,6 @@ + /* BIST in %eax */ + + /* + * Enabling mmx registers is a noop + */ + diff --git a/src/cpu/x86/mtrr/Config.lb b/src/cpu/x86/mtrr/Config.lb new file mode 100644 index 0000000000..df5c16f8bd --- /dev/null +++ b/src/cpu/x86/mtrr/Config.lb @@ -0,0 +1 @@ +object mtrr.o \ No newline at end of file diff --git a/src/cpu/x86/mtrr/earlymtrr.c b/src/cpu/x86/mtrr/earlymtrr.c new file mode 100644 index 0000000000..e8fda994af --- /dev/null +++ b/src/cpu/x86/mtrr/earlymtrr.c @@ -0,0 +1,123 @@ +#ifndef EARLYMTRR_C +#define EARLYMTRR_C +#include +#include +#include + +/* Validate XIP_ROM_SIZE and XIP_ROM_BASE */ +#if defined(XIP_ROM_SIZE) && !defined(XIP_ROM_BASE) +#error "XIP_ROM_SIZE without XIP_ROM_BASE" +#endif +#if defined(XIP_ROM_BASE) && !defined(XIP_ROM_SIZE) +#error "XIP_ROM_BASE without XIP_ROM_SIZE" +#endif +#if !defined(CONFIG_LB_MEM_TOPK) +#error "CONFIG_LB_MEM_TOPK not defined" +#endif + +#if defined(XIP_ROM_SIZE) && ((XIP_ROM_SIZE & (XIP_ROM_SIZE -1)) != 0) +#error "XIP_ROM_SIZE is not a power of 2" +#endif +#if defined(XIP_ROM_SIZE) && ((XIP_ROM_BASE % XIP_ROM_SIZE) != 0) +#error "XIP_ROM_BASE is not a multiple of XIP_ROM_SIZE" +#endif + +#if (CONFIG_LB_MEM_TOPK & (CONFIG_LB_MEM_TOPK -1)) != 0 +# error "CONFIG_LB_MEM_TOPK must be a power of 2" +#endif + +static void disable_var_mtrr(unsigned reg) +{ + /* The invalid bit is kept in the mask so we simply + * clear the relevent mask register to disable a + * range. + */ + msr_t zero; + zero.lo = zero.hi = 0; + wrmsr(MTRRphysMask_MSR(reg), zero); +} + +static void set_var_mtrr( + unsigned reg, unsigned base, unsigned size, unsigned type) + +{ + /* Bit Bit 32-35 of MTRRphysMask should be set to 1 */ + msr_t basem, maskm; + basem.lo = base | type; + basem.hi = 0; + wrmsr(MTRRphysBase_MSR(reg), basem); + maskm.lo = ~(size - 1) | 0x800; + maskm.hi = 0x0f; + wrmsr(MTRRphysMask_MSR(reg), maskm); +} + +static void cache_lbmem(int type) +{ + /* Enable caching for 0 - 1MB using variable mtrr */ + disable_cache(); + set_var_mtrr(0, 0x00000000, CONFIG_LB_MEM_TOPK << 10, type); + enable_cache(); +} + + +/* the fixed and variable MTTRs are power-up with random values, + * clear them to MTRR_TYPE_UNCACHEABLE for safty. + */ +static void do_early_mtrr_init(const unsigned long *mtrr_msrs) +{ + /* Precondition: + * The cache is not enabled in cr0 nor in MTRRdefType_MSR + * entry32.inc ensures the cache is not enabled in cr0 + */ + msr_t msr; + const unsigned long *msr_addr; + unsigned long cr0; + + print_spew("Clearing mtrr\r\n"); + + /* Inialize all of the relevant msrs to 0 */ + msr.lo = 0; + msr.hi = 0; + unsigned long msr_nr; + for(msr_addr = mtrr_msrs; (msr_nr = *msr_addr); msr_addr++) { + wrmsr(msr_nr, msr); + } + +#if defined(XIP_ROM_SIZE) + /* enable write through caching so we can do execute in place + * on the flash rom. + */ + set_var_mtrr(1, XIP_ROM_BASE, XIP_ROM_SIZE, MTRR_TYPE_WRBACK); +#endif + + /* Set the default memory type and enable fixed and variable MTRRs + */ + /* Enable Variable MTRRs */ + msr.hi = 0x00000000; + msr.lo = 0x00000800; + wrmsr(MTRRdefType_MSR, msr); + +} + +static void early_mtrr_init(void) +{ + static const unsigned long mtrr_msrs[] = { + /* fixed mtrr */ + 0x250, 0x258, 0x259, + 0x268, 0x269, 0x26A, + 0x26B, 0x26C, 0x26D, + 0x26E, 0x26F, + /* var mtrr */ + 0x200, 0x201, 0x202, 0x203, + 0x204, 0x205, 0x206, 0x207, + 0x208, 0x209, 0x20A, 0x20B, + 0x20C, 0x20D, 0x20E, 0x20F, + /* NULL end of table */ + 0 + }; + disable_cache(); + do_early_mtrr_init(mtrr_msrs); + enable_cache(); +} + +#endif /* EARLYMTRR_C */ diff --git a/src/cpu/x86/mtrr/mtrr.c b/src/cpu/x86/mtrr/mtrr.c new file mode 100644 index 0000000000..8e38f23736 --- /dev/null +++ b/src/cpu/x86/mtrr/mtrr.c @@ -0,0 +1,378 @@ +/* + * intel_mtrr.c: setting MTRR to decent values for cache initialization on P6 + * + * Derived from intel_set_mtrr in intel_subr.c and mtrr.c in linux kernel + * + * Copyright 2000 Silicon Integrated System Corporation + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * + * + * Reference: Intel Architecture Software Developer's Manual, Volume 3: System Programming + */ + +#include +#include +#include +#include +#include + +#define arraysize(x) (sizeof(x)/sizeof((x)[0])) + +#warning "FIXME I do not properly handle address more than 36 physical address bits" +#ifdef k8 +# define ADDRESS_BITS 40 +#else +# define ADDRESS_BITS 36 +#endif +#define ADDRESS_BITS_HIGH (ADDRESS_BITS - 32) +#define ADDRESS_MASK_HIGH ((1u << ADDRESS_BITS_HIGH) - 1) + +static unsigned int mtrr_msr[] = { + MTRRfix64K_00000_MSR, MTRRfix16K_80000_MSR, MTRRfix16K_A0000_MSR, + MTRRfix4K_C0000_MSR, MTRRfix4K_C8000_MSR, MTRRfix4K_D0000_MSR, MTRRfix4K_D8000_MSR, + MTRRfix4K_E0000_MSR, MTRRfix4K_E8000_MSR, MTRRfix4K_F0000_MSR, MTRRfix4K_F8000_MSR, +}; + + +static void enable_fixed_mtrr(void) +{ + msr_t msr; + + msr = rdmsr(MTRRdefType_MSR); + msr.lo |= 0xc00; + wrmsr(MTRRdefType_MSR, msr); +} + +static void enable_var_mtrr(void) +{ + msr_t msr; + + msr = rdmsr(MTRRdefType_MSR); + msr.lo |= 0x800; + wrmsr(MTRRdefType_MSR, msr); +} + +/* setting variable mtrr, comes from linux kernel source */ +static void set_var_mtrr(unsigned int reg, unsigned long basek, unsigned long sizek, unsigned char type) +{ + msr_t base, mask; + + base.hi = basek >> 22; + base.lo = basek << 10; + + //printk_debug("ADDRESS_MASK_HIGH=%#x\n", ADDRESS_MASK_HIGH); + + if (sizek < 4*1024*1024) { + mask.hi = ADDRESS_MASK_HIGH; + mask.lo = ~((sizek << 10) -1); + } + else { + mask.hi = ADDRESS_MASK_HIGH & (~((sizek >> 22) -1)); + mask.lo = 0; + } + + if (reg >= 8) + return; + + // it is recommended that we disable and enable cache when we + // do this. + disable_cache(); + if (sizek == 0) { + msr_t zero; + zero.lo = zero.hi = 0; + /* The invalid bit is kept in the mask, so we simply clear the + relevant mask register to disable a range. */ + wrmsr (MTRRphysMask_MSR(reg), zero); + } else { + /* Bit 32-35 of MTRRphysMask should be set to 1 */ + base.lo |= type; + mask.lo |= 0x800; + wrmsr (MTRRphysBase_MSR(reg), base); + wrmsr (MTRRphysMask_MSR(reg), mask); + } + enable_cache(); +} + +/* fms: find most sigificant bit set, stolen from Linux Kernel Source. */ +static inline unsigned int fms(unsigned int x) +{ + int r; + + __asm__("bsrl %1,%0\n\t" + "jnz 1f\n\t" + "movl $0,%0\n" + "1:" : "=r" (r) : "g" (x)); + return r; +} + +/* fms: find least sigificant bit set */ +static inline unsigned int fls(unsigned int x) +{ + int r; + + __asm__("bsfl %1,%0\n\t" + "jnz 1f\n\t" + "movl $32,%0\n" + "1:" : "=r" (r) : "g" (x)); + return r; +} + +/* setting up variable and fixed mtrr + * + * From Intel Vol. III Section 9.12.4, the Range Size and Base Alignment has some kind of requirement: + * 1. The range size must be 2^N byte for N >= 12 (i.e 4KB minimum). + * 2. The base address must be 2^N aligned, where the N here is equal to the N in previous + * requirement. So a 8K range must be 8K aligned not 4K aligned. + * + * These requirement is meet by "decompositing" the ramsize into Sum(Cn * 2^n, n = [0..N], Cn = [0, 1]). + * For Cm = 1, there is a WB range of 2^m size at base address Sum(Cm * 2^m, m = [N..n]). + * A 124MB (128MB - 4MB SMA) example: + * ramsize = 124MB == 64MB (at 0MB) + 32MB (at 64MB) + 16MB (at 96MB ) + 8MB (at 112MB) + 4MB (120MB). + * But this wastes a lot of MTRR registers so we use another more "aggresive" way with Uncacheable Regions. + * + * In the Uncacheable Region scheme, we try to cover the whole ramsize by one WB region as possible, + * If (an only if) this can not be done we will try to decomposite the ramesize, the mathematical formula + * whould be ramsize = Sum(Cn * 2^n, n = [0..N], Cn = [-1, 0, 1]). For Cn = -1, a Uncachable Region is used. + * The same 124MB example: + * ramsize = 124MB == 128MB WB (at 0MB) + 4MB UC (at 124MB) + * or a 156MB (128MB + 32MB - 4MB SMA) example: + * ramsize = 156MB == 128MB WB (at 0MB) + 32MB WB (at 128MB) + 4MB UC (at 156MB) + */ +/* 2 MTRRS are reserved for the operating system */ +#if 0 +#define BIOS_MTRRS 6 +#define OS_MTRRS 2 +#else +#define BIOS_MTRRS 8 +#define OS_MTRRS 0 +#endif +#define MTRRS (BIOS_MTRRS + OS_MTRRS) + + +static void set_fixed_mtrrs(unsigned int first, unsigned int last, unsigned char type) +{ + unsigned int i; + unsigned int fixed_msr = NUM_FIXED_RANGES >> 3; + msr_t msr; + msr.lo = msr.hi = 0; /* Shut up gcc */ + for(i = first; i < last; i++) { + /* When I switch to a new msr read it in */ + if (fixed_msr != i >> 3) { + /* But first write out the old msr */ + if (fixed_msr < (NUM_FIXED_RANGES >> 3)) { + disable_cache(); + wrmsr(mtrr_msr[fixed_msr], msr); + enable_cache(); + } + fixed_msr = i>>3; + msr = rdmsr(mtrr_msr[fixed_msr]); + } + if ((i & 7) < 4) { + msr.lo &= ~(0xff << ((i&3)*8)); + msr.lo |= type << ((i&3)*8); + } else { + msr.hi &= ~(0xff << ((i&3)*8)); + msr.hi |= type << ((i&3)*8); + } + } + /* Write out the final msr */ + if (fixed_msr < (NUM_FIXED_RANGES >> 3)) { + disable_cache(); + wrmsr(mtrr_msr[fixed_msr], msr); + enable_cache(); + } +} + +static unsigned fixed_mtrr_index(unsigned long addrk) +{ + unsigned index; + index = (addrk - 0) >> 6; + if (index >= 8) { + index = ((addrk - 8*64) >> 4) + 8; + } + if (index >= 24) { + index = ((addrk - (8*64 + 16*16)) >> 2) + 24; + } + if (index > NUM_FIXED_RANGES) { + index = NUM_FIXED_RANGES; + } + return index; +} + +static unsigned int range_to_mtrr(unsigned int reg, + unsigned long range_startk, unsigned long range_sizek, + unsigned long next_range_startk) +{ + if (!range_sizek || (reg >= BIOS_MTRRS)) { + return reg; + } + while(range_sizek) { + unsigned long max_align, align; + unsigned long sizek; + /* Compute the maximum size I can make a range */ + max_align = fls(range_startk); + align = fms(range_sizek); + if (align > max_align) { + align = max_align; + } + sizek = 1 << align; + printk_debug("Setting variable MTRR %d, base: %4dMB, range: %4dMB, type WB\n", + reg, range_startk >>10, sizek >> 10); + set_var_mtrr(reg++, range_startk, sizek, MTRR_TYPE_WRBACK); + range_startk += sizek; + range_sizek -= sizek; + if (reg >= BIOS_MTRRS) + break; + } + return reg; +} + +static unsigned long resk(uint64_t value) +{ + unsigned long resultk; + if (value < (1ULL << 42)) { + resultk = value >> 10; + } + else { + resultk = 0xffffffff; + } + return resultk; +} + +void x86_setup_mtrrs(void) +{ + /* Try this the simple way of incrementally adding together + * mtrrs. If this doesn't work out we can get smart again + * and clear out the mtrrs. + */ + struct device *dev; + unsigned long range_startk, range_sizek; + unsigned int reg; + + printk_debug("\n"); + /* Initialized the fixed_mtrrs to uncached */ + printk_debug("Setting fixed MTRRs(%d-%d) type: UC\n", + 0, NUM_FIXED_RANGES); + set_fixed_mtrrs(0, NUM_FIXED_RANGES, MTRR_TYPE_UNCACHEABLE); + + /* Now see which of the fixed mtrrs cover ram. + */ + for(dev = all_devices; dev; dev = dev->next) { + struct resource *res, *last; + last = &dev->resource[dev->resources]; + for(res = &dev->resource[0]; res < last; res++) { + unsigned int start_mtrr; + unsigned int last_mtrr; + if (!(res->flags & IORESOURCE_MEM) || + !(res->flags & IORESOURCE_CACHEABLE)) + { + continue; + } + start_mtrr = fixed_mtrr_index(resk(res->base)); + last_mtrr = fixed_mtrr_index(resk((res->base + res->size))); + if (start_mtrr >= NUM_FIXED_RANGES) { + break; + } + printk_debug("Setting fixed MTRRs(%d-%d) Type: WB\n", + start_mtrr, last_mtrr); + set_fixed_mtrrs(start_mtrr, last_mtrr, MTRR_TYPE_WRBACK); + } + } + printk_debug("DONE fixed MTRRs\n"); + /* Cache as many memory areas as possible */ + /* FIXME is there an algorithm for computing the optimal set of mtrrs? + * In some cases it is definitely possible to do better. + */ + range_startk = 0; + range_sizek = 0; + reg = 0; + for(dev = all_devices; dev; dev = dev->next) { + struct resource *res, *last; + last = &dev->resource[dev->resources]; + for(res = &dev->resource[0]; res < last; res++) { + unsigned long basek, sizek; + if (!(res->flags & IORESOURCE_MEM) || + !(res->flags & IORESOURCE_CACHEABLE)) { + continue; + } + basek = resk(res->base); + sizek = resk(res->size); + /* See if I can merge with the last range + * Either I am below 1M and the fixed mtrrs handle it, or + * the ranges touch. + */ + if ((basek <= 1024) || (range_startk + range_sizek == basek)) { + unsigned long endk = basek + sizek; + range_sizek = endk - range_startk; + continue; + } + /* Write the range mtrrs */ + if (range_sizek != 0) { + reg = range_to_mtrr(reg, range_startk, range_sizek, basek); + range_startk = 0; + range_sizek = 0; + if (reg >= BIOS_MTRRS) + goto last_msr; + } + /* Allocate an msr */ + range_startk = basek; + range_sizek = sizek; + } + } + last_msr: + /* Write the last range */ + reg = range_to_mtrr(reg, range_startk, range_sizek, 0); + printk_debug("DONE variable MTRRs\n"); + printk_debug("Clear out the extra MTRR's\n"); + /* Clear out the extra MTRR's */ + while(reg < MTRRS) { + set_var_mtrr(reg++, 0, 0, 0); + } + /* enable fixed MTRR */ + printk_spew("call enable_fixed_mtrr()\n"); + enable_fixed_mtrr(); + printk_spew("call enable_var_mtrr()\n"); + enable_var_mtrr(); + printk_spew("Leave %s\n", __FUNCTION__); + post_code(0x6A); +} + +int x86_mtrr_check(void) +{ + /* Only Pentium Pro and later have MTRR */ + msr_t msr; + printk_debug("\nMTRR check\n"); + + msr = rdmsr(0x2ff); + msr.lo >>= 10; + + printk_debug("Fixed MTRRs : "); + if (msr.lo & 0x01) + printk_debug("Enabled\n"); + else + printk_debug("Disabled\n"); + + printk_debug("Variable MTRRs: "); + if (msr.lo & 0x02) + printk_debug("Enabled\n"); + else + printk_debug("Disabled\n"); + + printk_debug("\n"); + + post_code(0x93); + return ((int) msr.lo); +} diff --git a/src/cpu/x86/pae/Config.lb b/src/cpu/x86/pae/Config.lb new file mode 100644 index 0000000000..45e7f5754b --- /dev/null +++ b/src/cpu/x86/pae/Config.lb @@ -0,0 +1 @@ +object pgtbl.o \ No newline at end of file diff --git a/src/cpu/x86/pae/pgtbl.c b/src/cpu/x86/pae/pgtbl.c new file mode 100644 index 0000000000..756cc53f65 --- /dev/null +++ b/src/cpu/x86/pae/pgtbl.c @@ -0,0 +1,94 @@ +#include +#include +#include +#include + +static void paging_off(void) +{ + __asm__ __volatile__ ( + /* Disable paging */ + "movl %%cr0, %%eax\n\t" + "andl $0x7FFFFFFF, %%eax\n\t" + "movl %%eax, %%cr0\n\t" + /* Disable pae */ + "movl %%cr4, %%eax\n\t" + "andl $0xFFFFFFDF, %%eax\n\t" + : + : + : "eax" + ); +} + +static void paging_on(void *pdp) +{ + __asm__ __volatile__( + /* Load the page table address */ + "movl %0, %%cr3\n\t" + /* Enable pae */ + "movl %%cr4, %%eax\n\t" + "orl $0x00000020, %%eax\n\t" + "movl %%eax, %%cr4\n\t" + /* Enable paging */ + "movl %%cr0, %%eax\n\t" + "orl $0x80000000, %%eax\n\t" + "movl %%eax, %%cr0\n\t" + : + : "r" (pdp) + : "eax" + ); +} + +void *map_2M_page(unsigned long page) +{ + struct pde { + uint32_t addr_lo; + uint32_t addr_hi; + } __attribute__ ((packed)); + struct pg_table { + struct pde pd[2048]; + struct pde pdp[512]; + } __attribute__ ((packed)); + static struct pg_table pgtbl[CONFIG_MAX_CPUS] __attribute__ ((aligned(4096))); + static unsigned long mapped_window[CONFIG_MAX_CPUS]; + unsigned long index; + unsigned long window; + void *result; + int i; + index = cpu_index(); + if ((index < 0) || (index >= CONFIG_MAX_CPUS)) { + return MAPPING_ERROR; + } + window = page >> 10; + if (window != mapped_window[index]) { + paging_off(); + if (window > 1) { + struct pde *pd, *pdp; + /* Point the page directory pointers at the page directories */ + memset(&pgtbl[index].pdp, 0, sizeof(pgtbl[index].pdp)); + pd = pgtbl[index].pd; + pdp = pgtbl[index].pdp; + pdp[0].addr_lo = ((uint32_t)&pd[512*0])|1; + pdp[1].addr_lo = ((uint32_t)&pd[512*1])|1; + pdp[2].addr_lo = ((uint32_t)&pd[512*2])|1; + pdp[3].addr_lo = ((uint32_t)&pd[512*3])|1; + /* The first half of the page table is identity mapped */ + for(i = 0; i < 1024; i++) { + pd[i].addr_lo = ((i & 0x3ff) << 21)| 0xE3; + pd[i].addr_hi = 0; + } + /* The second half of the page table holds the mapped page */ + for(i = 1024; i < 2048; i++) { + pd[i].addr_lo = ((window & 1) << 31) | ((i & 0x3ff) << 21) | 0xE3; + pd[i].addr_hi = (window >> 1); + } + paging_on(pdp); + } + mapped_window[index] = window; + } + if (window == 0) { + result = (void *)(page << 21); + } else { + result = (void *)(0x80000000 | ((page & 0x3ff) << 21)); + } + return result; +} diff --git a/src/cpu/x86/sse/Config.lb b/src/cpu/x86/sse/Config.lb new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/cpu/x86/sse/disable_sse.inc b/src/cpu/x86/sse/disable_sse.inc new file mode 100644 index 0000000000..a18ea18643 --- /dev/null +++ b/src/cpu/x86/sse/disable_sse.inc @@ -0,0 +1,18 @@ + /* + * Put the processor back into a reset state + * with respect to the xmm registers. + */ + + xorps %xmm0, %xmm0 + xorps %xmm1, %xmm1 + xorps %xmm2, %xmm2 + xorps %xmm3, %xmm3 + xorps %xmm4, %xmm4 + xorps %xmm5, %xmm5 + xorps %xmm6, %xmm6 + xorps %xmm7, %xmm7 + + /* Disable sse instructions */ + movl %cr4, %eax + andl $~(3<<9), %eax + movl %eax, %cr4 diff --git a/src/cpu/x86/sse/enable_sse.inc b/src/cpu/x86/sse/enable_sse.inc new file mode 100644 index 0000000000..95724b71f7 --- /dev/null +++ b/src/cpu/x86/sse/enable_sse.inc @@ -0,0 +1,14 @@ + /* preserve BIST in %eax */ + movl %eax, %ebp + + /* + * Enable the use of the xmm registers + */ + + /* Enable sse instructions */ + movl %cr4, %eax + orl $(1<<9), %eax + movl %eax, %cr4 + + movl %ebp, %eax + diff --git a/src/cpu/x86/tsc/Config.lb b/src/cpu/x86/tsc/Config.lb new file mode 100644 index 0000000000..07272ad9d7 --- /dev/null +++ b/src/cpu/x86/tsc/Config.lb @@ -0,0 +1,5 @@ +uses CONFIG_UDELAY_TSC +uses CONFIG_TSC_X86RDTSC_CALIBRATE_WITH_TIMER2 + +default CONFIG_TSC_X86RDTSC_CALIBRATE_WITH_TIMER2=0 +if CONFIG_UDELAY_TSC object delay_tsc.o end diff --git a/src/cpu/x86/tsc/delay_tsc.c b/src/cpu/x86/tsc/delay_tsc.c new file mode 100644 index 0000000000..c7c431baac --- /dev/null +++ b/src/cpu/x86/tsc/delay_tsc.c @@ -0,0 +1,165 @@ +#include +#include +#include +#include +#include +#include + +static unsigned long clocks_per_usec; + +#if (CONFIG_TSC_X86RDTSC_CALIBRATE_WITH_TIMER2 == 1) +#define CLOCK_TICK_RATE 1193180U /* Underlying HZ */ + +/* ------ Calibrate the TSC ------- + * Too much 64-bit arithmetic here to do this cleanly in C, and for + * accuracy's sake we want to keep the overhead on the CTC speaker (channel 2) + * output busy loop as low as possible. We avoid reading the CTC registers + * directly because of the awkward 8-bit access mechanism of the 82C54 + * device. + */ + +#define CALIBRATE_INTERVAL ((20*CLOCK_TICK_RATE)/1000) /* 20ms */ +#define CALIBRATE_DIVISOR (20*1000) /* 20ms / 20000 == 1usec */ + +static unsigned long long calibrate_tsc(void) +{ + /* Set the Gate high, disable speaker */ + outb((inb(0x61) & ~0x02) | 0x01, 0x61); + + /* + * Now let's take care of CTC channel 2 + * + * Set the Gate high, program CTC channel 2 for mode 0, + * (interrupt on terminal count mode), binary count, + * load 5 * LATCH count, (LSB and MSB) to begin countdown. + */ + outb(0xb0, 0x43); /* binary, mode 0, LSB/MSB, Ch 2 */ + outb(CALIBRATE_INTERVAL & 0xff, 0x42); /* LSB of count */ + outb(CALIBRATE_INTERVAL >> 8, 0x42); /* MSB of count */ + + { + tsc_t start; + tsc_t end; + unsigned long count; + + start = rdtsc(); + count = 0; + do { + count++; + } while ((inb(0x61) & 0x20) == 0); + end = rdtsc(); + + /* Error: ECTCNEVERSET */ + if (count <= 1) + goto bad_ctc; + + /* 64-bit subtract - gcc just messes up with long longs */ + __asm__("subl %2,%0\n\t" + "sbbl %3,%1" + :"=a" (end.lo), "=d" (end.hi) + :"g" (start.lo), "g" (start.hi), + "0" (end.lo), "1" (end.hi)); + + /* Error: ECPUTOOFAST */ + if (end.hi) + goto bad_ctc; + + + /* Error: ECPUTOOSLOW */ + if (end.lo <= CALIBRATE_DIVISOR) + goto bad_ctc; + + return (end.lo + CALIBRATE_DIVISOR -1)/CALIBRATE_DIVISOR; + } + + /* + * The CTC wasn't reliable: we got a hit on the very first read, + * or the CPU was so fast/slow that the quotient wouldn't fit in + * 32 bits.. + */ +bad_ctc: + printk_err("bad_ctc\n"); + return 0; +} + +#else /* CONFIG_TSC_X86RDTSC_CALIBRATE_WITH_TIMER2 */ + +/* + * this is the "no timer2" version. + * to calibrate tsc, we get a TSC reading, then do 1,000,000 outbs to port 0x80 + * then we read TSC again, and divide the difference by 1,000,000 + * we have found on a wide range of machines that this gives us a a + * good microsecond value + * to +- 10%. On a dual AMD 1.6 Ghz box, it gives us .97 microseconds, and on a + * 267 Mhz. p5, it gives us 1.1 microseconds. + * also, since gcc now supports long long, we use that. + * also no unsigned long long / operator, so we play games. + * about the only thing you can do with long longs, it seems, + *is return them and assign them. + * (and do asm on them, yuck) + * so avoid all ops on long longs. + */ +static unsigned long long calibrate_tsc(void) +{ + unsigned long long start, end, delta; + unsigned long allones = (unsigned long) -1, result; + unsigned long count; + + start = rdtscll(); + // no udivdi3, dammit. + // so we count to 1<< 20 and then right shift 20 + for(count = 0; count < (1<<20); count ++) + outb(0x80, 0x80); + end = rdtscll(); + +#if 0 + // make delta be (endhigh - starthigh) + (endlow - startlow) + // but >> 20 + // do it this way to avoid gcc warnings. + start = tsc_start.hi; + start <<= 32; + start |= start.lo; + end = tsc_end.hi; + end <<= 32; + end |= tsc_end.lo; +#endif + delta = end - start; + // at this point we have a delta for 1,000,000 outbs. Now rescale for one microsecond. + delta >>= 20; + // save this for microsecond timing. + result = delta; + printk_spew("end %x:%x, start %x:%x\n", + endhigh, endlow, starthigh, startlow); + printk_spew("32-bit delta %d\n", (unsigned long) delta); + + printk_spew(__FUNCTION__ " 32-bit result is %d\n", result); + return delta; +} + + +#endif /* CONFIG_TSC_X86RDTSC_CALIBRATE_WITH_TIMER2*/ + +void init_timer(void) +{ + if (!clocks_per_usec) { + clocks_per_usec = calibrate_tsc(); + printk_info("clocks_per_usec: %u\n", clocks_per_usec); + } +} + +void udelay(unsigned us) +{ + unsigned long long count; + unsigned long long stop; + unsigned long long clocks; + + init_timer(); + clocks = us; + clocks *= clocks_per_usec; + count = rdtscll(); + stop = clocks + count; + while(stop > count) { + cpu_relax(); + count = rdtscll(); + } +} -- cgit v1.2.3