Commit | Line | Data |
---|---|---|
a76096a6 JS |
1 | #ifndef _ASM_X86_MICROCODE_AMD_H |
2 | #define _ASM_X86_MICROCODE_AMD_H | |
3 | ||
4 | #include <asm/microcode.h> | |
5 | ||
6 | #define UCODE_MAGIC 0x00414d44 | |
7 | #define UCODE_EQUIV_CPU_TABLE_TYPE 0x00000000 | |
8 | #define UCODE_UCODE_TYPE 0x00000001 | |
9 | ||
10 | #define SECTION_HDR_SIZE 8 | |
11 | #define CONTAINER_HDR_SZ 12 | |
12 | ||
13 | struct equiv_cpu_entry { | |
14 | u32 installed_cpu; | |
15 | u32 fixed_errata_mask; | |
16 | u32 fixed_errata_compare; | |
17 | u16 equiv_cpu; | |
18 | u16 res; | |
19 | } __attribute__((packed)); | |
20 | ||
21 | struct microcode_header_amd { | |
22 | u32 data_code; | |
23 | u32 patch_id; | |
24 | u16 mc_patch_data_id; | |
25 | u8 mc_patch_data_len; | |
26 | u8 init_flag; | |
27 | u32 mc_patch_data_checksum; | |
28 | u32 nb_dev_id; | |
29 | u32 sb_dev_id; | |
30 | u16 processor_rev_id; | |
31 | u8 nb_rev_id; | |
32 | u8 sb_rev_id; | |
33 | u8 bios_api_rev; | |
34 | u8 reserved1[3]; | |
35 | u32 match_reg[8]; | |
36 | } __attribute__((packed)); | |
37 | ||
38 | struct microcode_amd { | |
39 | struct microcode_header_amd hdr; | |
40 | unsigned int mpb[0]; | |
41 | }; | |
42 | ||
43 | static inline u16 find_equiv_id(struct equiv_cpu_entry *equiv_cpu_table, | |
44 | unsigned int sig) | |
45 | { | |
46 | int i = 0; | |
47 | ||
48 | if (!equiv_cpu_table) | |
49 | return 0; | |
50 | ||
51 | while (equiv_cpu_table[i].installed_cpu != 0) { | |
52 | if (sig == equiv_cpu_table[i].installed_cpu) | |
53 | return equiv_cpu_table[i].equiv_cpu; | |
54 | ||
55 | i++; | |
56 | } | |
57 | return 0; | |
58 | } | |
59 | ||
60 | extern int __apply_microcode_amd(struct microcode_amd *mc_amd); | |
61 | extern int apply_microcode_amd(int cpu); | |
2ef84b3b | 62 | extern enum ucode_state load_microcode_amd(int cpu, u8 family, const u8 *data, size_t size); |
a76096a6 | 63 | |
5335ba5c | 64 | #define PATCH_MAX_SIZE PAGE_SIZE |
5335ba5c | 65 | |
fe055896 | 66 | #ifdef CONFIG_MICROCODE_AMD |
7b179b8f | 67 | extern void __init load_ucode_amd_bsp(unsigned int family); |
148f9bb8 | 68 | extern void load_ucode_amd_ap(void); |
757885e9 | 69 | extern int __init save_microcode_in_initrd_amd(void); |
fbae4ba8 | 70 | void reload_ucode_amd(void); |
757885e9 | 71 | #else |
7b179b8f | 72 | static inline void __init load_ucode_amd_bsp(unsigned int family) {} |
148f9bb8 | 73 | static inline void load_ucode_amd_ap(void) {} |
757885e9 | 74 | static inline int __init save_microcode_in_initrd_amd(void) { return -EINVAL; } |
fbae4ba8 | 75 | void reload_ucode_amd(void) {} |
757885e9 JS |
76 | #endif |
77 | ||
0399f732 | 78 | extern bool check_current_patch_level(u32 *rev, bool early); |
a76096a6 | 79 | #endif /* _ASM_X86_MICROCODE_AMD_H */ |