mirror of
https://github.com/lkl/linux.git
synced 2025-12-19 16:13:19 +09:00
Pull x86 microcode loading updates from Borislav Petkov: "The first, cleanup part of the microcode loader reorg tglx has been working on. The other part wasn't fully ready in time so it will follow on later. This part makes the loader core code as it is practically enabled on pretty much every baremetal machine so there's no need to have the Kconfig items. In addition, there are cleanups which prepare for future feature enablement" * tag 'x86_microcode_for_v6.6_rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: x86/microcode: Remove remaining references to CONFIG_MICROCODE_AMD x86/microcode/intel: Remove pointless mutex x86/microcode/intel: Remove debug code x86/microcode: Move core specific defines to local header x86/microcode/intel: Rename get_datasize() since its used externally x86/microcode: Make reload_early_microcode() static x86/microcode: Include vendor headers into microcode.h x86/microcode/intel: Move microcode functions out of cpu/intel.c x86/microcode: Hide the config knob x86/mm: Remove unused microcode.h include x86/microcode: Remove microcode_mutex x86/microcode/AMD: Rip out static buffers
85 lines
1.9 KiB
C
85 lines
1.9 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
#ifndef _ASM_X86_MICROCODE_H
|
|
#define _ASM_X86_MICROCODE_H
|
|
|
|
struct cpu_signature {
|
|
unsigned int sig;
|
|
unsigned int pf;
|
|
unsigned int rev;
|
|
};
|
|
|
|
struct ucode_cpu_info {
|
|
struct cpu_signature cpu_sig;
|
|
void *mc;
|
|
};
|
|
|
|
#ifdef CONFIG_MICROCODE
|
|
void load_ucode_bsp(void);
|
|
void load_ucode_ap(void);
|
|
void microcode_bsp_resume(void);
|
|
#else
|
|
static inline void load_ucode_bsp(void) { }
|
|
static inline void load_ucode_ap(void) { }
|
|
static inline void microcode_bsp_resume(void) { }
|
|
#endif
|
|
|
|
#ifdef CONFIG_CPU_SUP_INTEL
|
|
/* Intel specific microcode defines. Public for IFS */
|
|
struct microcode_header_intel {
|
|
unsigned int hdrver;
|
|
unsigned int rev;
|
|
unsigned int date;
|
|
unsigned int sig;
|
|
unsigned int cksum;
|
|
unsigned int ldrver;
|
|
unsigned int pf;
|
|
unsigned int datasize;
|
|
unsigned int totalsize;
|
|
unsigned int metasize;
|
|
unsigned int reserved[2];
|
|
};
|
|
|
|
struct microcode_intel {
|
|
struct microcode_header_intel hdr;
|
|
unsigned int bits[];
|
|
};
|
|
|
|
#define DEFAULT_UCODE_DATASIZE (2000)
|
|
#define MC_HEADER_SIZE (sizeof(struct microcode_header_intel))
|
|
#define MC_HEADER_TYPE_MICROCODE 1
|
|
#define MC_HEADER_TYPE_IFS 2
|
|
|
|
static inline int intel_microcode_get_datasize(struct microcode_header_intel *hdr)
|
|
{
|
|
return hdr->datasize ? : DEFAULT_UCODE_DATASIZE;
|
|
}
|
|
|
|
static inline u32 intel_get_microcode_revision(void)
|
|
{
|
|
u32 rev, dummy;
|
|
|
|
native_wrmsrl(MSR_IA32_UCODE_REV, 0);
|
|
|
|
/* As documented in the SDM: Do a CPUID 1 here */
|
|
native_cpuid_eax(1);
|
|
|
|
/* get the current revision from MSR 0x8B */
|
|
native_rdmsr(MSR_IA32_UCODE_REV, dummy, rev);
|
|
|
|
return rev;
|
|
}
|
|
|
|
void show_ucode_info_early(void);
|
|
|
|
#else /* CONFIG_CPU_SUP_INTEL */
|
|
static inline void show_ucode_info_early(void) { }
|
|
#endif /* !CONFIG_CPU_SUP_INTEL */
|
|
|
|
#ifdef CONFIG_CPU_SUP_AMD
|
|
void amd_check_microcode(void);
|
|
#else /* CONFIG_CPU_SUP_AMD */
|
|
static inline void amd_check_microcode(void) {}
|
|
#endif
|
|
|
|
#endif /* _ASM_X86_MICROCODE_H */
|