Merge git://git.denx.de/u-boot-x86
This commit is contained in:
@@ -10,6 +10,7 @@ config SYS_COREBOOT
|
||||
imply MMC_PCI
|
||||
imply MMC_SDHCI
|
||||
imply MMC_SDHCI_SDMA
|
||||
imply SCSI
|
||||
imply SCSI_AHCI
|
||||
imply SPI_FLASH
|
||||
imply SYS_NS16550
|
||||
|
||||
@@ -239,4 +239,6 @@ _dt_ucode_base_size:
|
||||
.globl ucode_base
|
||||
ucode_base: /* Declared in microcode.h */
|
||||
.long 0 /* microcode base */
|
||||
.globl ucode_size
|
||||
ucode_size: /* Declared in microcode.h */
|
||||
.long 0 /* microcode size */
|
||||
|
||||
@@ -43,8 +43,6 @@ static int microcode_decode_node(const void *blob, int node,
|
||||
update->data = fdt_getprop(blob, node, "data", &update->size);
|
||||
if (!update->data)
|
||||
return -ENOENT;
|
||||
update->data += UCODE_HEADER_LEN;
|
||||
update->size -= UCODE_HEADER_LEN;
|
||||
|
||||
update->header_version = fdtdec_get_int(blob, node,
|
||||
"intel,header-version", 0);
|
||||
@@ -124,6 +122,7 @@ static void microcode_read_cpu(struct microcode_update *cpu)
|
||||
int microcode_update_intel(void)
|
||||
{
|
||||
struct microcode_update cpu, update;
|
||||
ulong address;
|
||||
const void *blob = gd->fdt_blob;
|
||||
int skipped;
|
||||
int count;
|
||||
@@ -167,7 +166,8 @@ int microcode_update_intel(void)
|
||||
skipped++;
|
||||
continue;
|
||||
}
|
||||
wrmsr(MSR_IA32_UCODE_WRITE, (ulong)update.data, 0);
|
||||
address = (ulong)update.data + UCODE_HEADER_LEN;
|
||||
wrmsr(MSR_IA32_UCODE_WRITE, address, 0);
|
||||
rev = microcode_read_rev();
|
||||
debug("microcode: updated to revision 0x%x date=%04x-%02x-%02x\n",
|
||||
rev, update.date_code & 0xffff,
|
||||
@@ -178,5 +178,9 @@ int microcode_update_intel(void)
|
||||
return -EFAULT;
|
||||
}
|
||||
count++;
|
||||
if (!ucode_base) {
|
||||
ucode_base = (ulong)update.data;
|
||||
ucode_size = update.size;
|
||||
}
|
||||
} while (1);
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@ config QEMU
|
||||
select ARCH_EARLY_INIT_R
|
||||
imply AHCI_PCI
|
||||
imply E1000
|
||||
imply SCSI
|
||||
imply SCSI_AHCI
|
||||
imply SYS_NS16550
|
||||
imply USB
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
|
||||
/* This is a declaration for ucode_base in start.S */
|
||||
extern u32 ucode_base;
|
||||
extern u32 ucode_size;
|
||||
|
||||
/**
|
||||
* microcode_update_intel() - Apply microcode updates
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
*/
|
||||
|
||||
#include <common.h>
|
||||
#include <efi_loader.h>
|
||||
#include <asm/e820.h>
|
||||
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
@@ -34,3 +35,41 @@ __weak unsigned int install_e820_map(unsigned int max_entries,
|
||||
|
||||
return 4;
|
||||
}
|
||||
|
||||
#if defined(CONFIG_EFI_LOADER) && !defined(CONFIG_SPL_BUILD)
|
||||
void efi_add_known_memory(void)
|
||||
{
|
||||
struct e820_entry e820[E820MAX];
|
||||
unsigned int i, num;
|
||||
u64 start, pages;
|
||||
int type;
|
||||
|
||||
num = install_e820_map(ARRAY_SIZE(e820), e820);
|
||||
|
||||
for (i = 0; i < num; ++i) {
|
||||
start = e820[i].addr;
|
||||
pages = ALIGN(e820[i].size, EFI_PAGE_SIZE) >> EFI_PAGE_SHIFT;
|
||||
|
||||
switch (e820[i].type) {
|
||||
case E820_RAM:
|
||||
type = EFI_CONVENTIONAL_MEMORY;
|
||||
break;
|
||||
case E820_RESERVED:
|
||||
type = EFI_RESERVED_MEMORY_TYPE;
|
||||
break;
|
||||
case E820_ACPI:
|
||||
type = EFI_ACPI_RECLAIM_MEMORY;
|
||||
break;
|
||||
case E820_NVS:
|
||||
type = EFI_ACPI_MEMORY_NVS;
|
||||
break;
|
||||
case E820_UNUSABLE:
|
||||
default:
|
||||
type = EFI_UNUSABLE_MEMORY;
|
||||
break;
|
||||
}
|
||||
|
||||
efi_add_memory_map(start, pages, type, false);
|
||||
}
|
||||
}
|
||||
#endif /* defined(EFI_LOADER) && !defined(CONFIG_SPL_BUILD) */
|
||||
|
||||
@@ -102,8 +102,10 @@ temp_ram_init_params:
|
||||
_dt_ucode_base_size:
|
||||
/* These next two fields are filled in by ifdtool */
|
||||
.globl ucode_base
|
||||
ucode_base: /* Declared in micrcode.h */
|
||||
ucode_base: /* Declared in microcode.h */
|
||||
.long 0 /* microcode base */
|
||||
.globl ucode_size
|
||||
ucode_size: /* Declared in microcode.h */
|
||||
.long 0 /* microcode size */
|
||||
.long CONFIG_SYS_MONITOR_BASE /* code region base */
|
||||
.long CONFIG_SYS_MONITOR_LEN /* code region size */
|
||||
|
||||
Reference in New Issue
Block a user