18 #define F16H_MPB_MAX_SIZE 3458
19 #define F16H_MPB_DATA_OFFSET 32
83 new_patch_id = msr.
lo;
85 if (new_patch_id ==
m->patch_id)
86 printk(
BIOS_INFO,
"microcode: being updated to patch id = 0x%08x succeeded\n",
89 printk(
BIOS_ERR,
"microcode: being updated to patch id = 0x%08x failed\n",
97 return (
uint16_t)((cpuid_family & 0xff0000) >> 8 | (cpuid_family & 0xff));
101 uint16_t equivalent_processor_rev_id)
109 if (
m->processor_rev_id == equivalent_processor_rev_id)
119 ucode =
cbfs_map(
"cpu_microcode_blob.bin", &ucode_len);
static unsigned int cpuid_eax(unsigned int op)
static void * cbfs_map(const char *name, size_t *size_out)
#define printk(level,...)
static uint16_t get_equivalent_processor_rev_id(void)
void amd_update_microcode_from_cbfs(void)
static void amd_update_microcode(const void *ucode, size_t ucode_len, uint16_t equivalent_processor_rev_id)
#define F16H_MPB_MAX_SIZE
static void apply_microcode_patch(const struct microcode *m)
#define F16H_MPB_DATA_OFFSET
struct microcode __packed
static __always_inline msr_t rdmsr(unsigned int index)
#define IA32_BIOS_SIGN_ID
static __always_inline void wrmsr(unsigned int index, msr_t msr)
#define BIOS_INFO
BIOS_INFO - Expected events.
#define BIOS_DEBUG
BIOS_DEBUG - Verbose output.
#define BIOS_ERR
BIOS_ERR - System in incomplete state.
#define BIOS_WARNING
BIOS_WARNING - Bad configuration.
unsigned long long uint64_t
uint16_t mc_patch_data_id
uint16_t processor_rev_id
uint8_t m_patch_data[F16H_MPB_MAX_SIZE-F16H_MPB_DATA_OFFSET]
#define m(clkreg, src_bits, pmcreg, dst_bits)
#define c(value, pmcreg, dst_bits)