mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-28 11:18:45 +07:00
76a5eaa38b
In order to protect against speculation attacks (Spectre variant 2) on NXP PowerPC platforms, the branch predictor should be flushed when the privillege level is changed. This patch is adding the infrastructure to fixup at runtime the code sections that are performing the branch predictor flush depending on a boot arg parameter which is added later in a separate patch. Signed-off-by: Diana Craciun <diana.craciun@nxp.com> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
76 lines
2.1 KiB
C
76 lines
2.1 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
#ifndef _ASM_POWERPC_SETUP_H
|
|
#define _ASM_POWERPC_SETUP_H
|
|
|
|
#include <uapi/asm/setup.h>
|
|
|
|
#ifndef __ASSEMBLY__
|
|
extern void ppc_printk_progress(char *s, unsigned short hex);
|
|
|
|
extern unsigned int rtas_data;
|
|
extern unsigned long long memory_limit;
|
|
extern bool init_mem_is_free;
|
|
extern unsigned long klimit;
|
|
extern void *zalloc_maybe_bootmem(size_t size, gfp_t mask);
|
|
|
|
struct device_node;
|
|
extern void note_scsi_host(struct device_node *, void *);
|
|
|
|
/* Used in very early kernel initialization. */
|
|
extern unsigned long reloc_offset(void);
|
|
extern unsigned long add_reloc_offset(unsigned long);
|
|
extern void reloc_got2(unsigned long);
|
|
|
|
#define PTRRELOC(x) ((typeof(x)) add_reloc_offset((unsigned long)(x)))
|
|
|
|
void check_for_initrd(void);
|
|
void mem_topology_setup(void);
|
|
void initmem_init(void);
|
|
void setup_panic(void);
|
|
#define ARCH_PANIC_TIMEOUT 180
|
|
|
|
#ifdef CONFIG_PPC_PSERIES
|
|
extern void pseries_enable_reloc_on_exc(void);
|
|
extern void pseries_disable_reloc_on_exc(void);
|
|
extern void pseries_big_endian_exceptions(void);
|
|
extern void pseries_little_endian_exceptions(void);
|
|
#else
|
|
static inline void pseries_enable_reloc_on_exc(void) {}
|
|
static inline void pseries_disable_reloc_on_exc(void) {}
|
|
static inline void pseries_big_endian_exceptions(void) {}
|
|
static inline void pseries_little_endian_exceptions(void) {}
|
|
#endif /* CONFIG_PPC_PSERIES */
|
|
|
|
void rfi_flush_enable(bool enable);
|
|
|
|
/* These are bit flags */
|
|
enum l1d_flush_type {
|
|
L1D_FLUSH_NONE = 0x1,
|
|
L1D_FLUSH_FALLBACK = 0x2,
|
|
L1D_FLUSH_ORI = 0x4,
|
|
L1D_FLUSH_MTTRIG = 0x8,
|
|
};
|
|
|
|
void setup_rfi_flush(enum l1d_flush_type, bool enable);
|
|
void do_rfi_flush_fixups(enum l1d_flush_type types);
|
|
#ifdef CONFIG_PPC_BARRIER_NOSPEC
|
|
void setup_barrier_nospec(void);
|
|
#else
|
|
static inline void setup_barrier_nospec(void) { };
|
|
#endif
|
|
void do_barrier_nospec_fixups(bool enable);
|
|
extern bool barrier_nospec_enabled;
|
|
|
|
#ifdef CONFIG_PPC_BARRIER_NOSPEC
|
|
void do_barrier_nospec_fixups_range(bool enable, void *start, void *end);
|
|
#else
|
|
static inline void do_barrier_nospec_fixups_range(bool enable, void *start, void *end) { };
|
|
#endif
|
|
|
|
void do_btb_flush_fixups(void);
|
|
|
|
#endif /* !__ASSEMBLY__ */
|
|
|
|
#endif /* _ASM_POWERPC_SETUP_H */
|
|
|