Frank Vibrans III (efdesign98@gmail.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/109
-gerrit
commit ba66858bbb5708c1add2aab61f70106154132b4e Author: efdesign98 efdesign98@gmail.com Date: Fri Jul 15 17:10:43 2011 -0700
Add xhcbios and ahcibios rom handling
This change adds to the arch/x86 Makefile.inc, handling for xhci and ahci bios roms that is similar to the handling of vgabios roms. It also correct a comment in the lapic_ cpu)init.c file.
Change-Id: I527a906323ae483cfa2ca0785f3adb43e88fd84b Signed-off-by: Frank Vibrans frank.vibrans@amd.com Signed-off-by: efdesign98 efdesign98@gmail.com --- src/arch/x86/Makefile.inc | 10 ++++++++++ src/cpu/x86/lapic/lapic_cpu_init.c | 33 ++++++++++++++++++++++++++++++++- 2 files changed, 42 insertions(+), 1 deletions(-)
diff --git a/src/arch/x86/Makefile.inc b/src/arch/x86/Makefile.inc old mode 100644 new mode 100755 index e9c00de..cf41055 --- a/src/arch/x86/Makefile.inc +++ b/src/arch/x86/Makefile.inc @@ -25,6 +25,11 @@ subdirs-y += boot subdirs-y += lib subdirs-y += smp
+stripped_xhcbios_id = $(call strip_quotes,$(CONFIG_XHC_BIOS_ID)) +cbfs-files-$(CONFIG_XHC_BIOS) += pci$(stripped_xhcbios_id).rom +pci$(stripped_xhcbios_id).rom-file := $(call strip_quotes,$(CONFIG_XHC_BIOS_FILE)) +pci$(stripped_xhcbios_id).rom-type := optionrom + OPTION_TABLE_H:= ifeq ($(CONFIG_HAVE_OPTION_TABLE),y) cbfs-files-y += cmos_layout.bin @@ -115,6 +120,11 @@ cbfs-files-$(CONFIG_VGA_BIOS) += pci$(stripped_vgabios_id).rom pci$(stripped_vgabios_id).rom-file := $(call strip_quotes,$(CONFIG_VGA_BIOS_FILE)) pci$(stripped_vgabios_id).rom-type := optionrom
+stripped_ahcibios_id = $(call strip_quotes,$(CONFIG_AHCI_BIOS_ID)) +cbfs-files-$(CONFIG_AHCI_BIOS) += pci$(stripped_ahcibios_id).rom +pci$(stripped_ahcibios_id).rom-file := $(call strip_quotes,$(CONFIG_AHCI_BIOS_FILE)) +pci$(stripped_ahcibios_id).rom-type := optionrom + cbfs-files-$(CONFIG_INTEL_MBI) += mbi.bin mbi.bin-file := $(call strip_quotes,$(CONFIG_MBI_FILE)) mbi.bin-type := mbi diff --git a/src/cpu/x86/lapic/lapic_cpu_init.c b/src/cpu/x86/lapic/lapic_cpu_init.c old mode 100644 new mode 100755 index 53bbe79..53ea60d --- a/src/cpu/x86/lapic/lapic_cpu_init.c +++ b/src/cpu/x86/lapic/lapic_cpu_init.c @@ -262,7 +262,7 @@ int start_cpu(device_t cpu)
if (result) { result = 0; - /* Wait 1s or until the new the new cpu calls in */ + /* Wait 1s or until the new cpu calls in */ for(count = 0; count < 100000 ; count++) { if (secondary_stack == 0) { result = 1; @@ -338,6 +338,26 @@ void stop_this_cpu(void) } #endif
+#ifdef __SSE3__ +static __inline__ __attribute__((always_inline)) unsigned long readcr4(void) +{ + unsigned long value; + __asm__ __volatile__ ( + "mov %%cr4, %[value]" + : [value] "=a" (value)); + return value; +} + +static __inline__ __attribute__((always_inline)) void writecr4(unsigned long Data) +{ + __asm__ __volatile__ ( + "mov %%eax, %%cr4" + : + : "a" (Data) + ); +} +#endif + /* C entry point of secondary cpus */ void secondary_cpu_init(void) { @@ -347,6 +367,17 @@ void secondary_cpu_init(void) spin_lock(&start_cpu_lock); #endif #endif + +#ifdef __SSE3__ + /* + * Seems that CR4 was cleared when AP start via lapic_start_cpu() + * Turn on CR4.OSFXSR and CR4.OSXMMEXCPT when SSE options enabled + */ + u32 cr4_val; + cr4_val = readcr4(); + cr4_val |= (1 << 9 | 1 << 10); + writecr4(cr4_val); +#endif cpu_initialize(); #if CONFIG_SERIAL_CPU_INIT == 1 #if CONFIG_MAX_CPUS>2