mirror of
https://github.com/zephyrproject-rtos/zephyr
synced 2025-09-01 23:51:56 +00:00
Add 'U' to a value when assigning it to an unsigned variable. MISRA-C rule 7.2 Signed-off-by: Patrik Flykt <patrik.flykt@intel.com>
56 lines
1.0 KiB
C
56 lines
1.0 KiB
C
/*
|
|
* Copyright (c) 2018 Intel Corporation
|
|
*
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
#include <cpuid.h> /* Header provided by the toolchain. */
|
|
|
|
#include <init.h>
|
|
#include <kernel_structs.h>
|
|
#include <kernel_arch_data.h>
|
|
#include <kernel_arch_func.h>
|
|
#include <kernel.h>
|
|
|
|
#define CPUID_EXTENDED_FEATURES_LVL 7
|
|
|
|
#define CPUID_SPEC_CTRL BIT(26)
|
|
#define SPEC_CTRL_SSBD BIT(2)
|
|
|
|
static int
|
|
cpu_has_spec_ctrl(void)
|
|
{
|
|
u32_t eax, ebx, ecx = 0U, edx;
|
|
|
|
if (!__get_cpuid(CPUID_EXTENDED_FEATURES_LVL,
|
|
&eax, &ebx, &ecx, &edx)) {
|
|
return 0;
|
|
}
|
|
|
|
ARG_UNUSED(eax);
|
|
ARG_UNUSED(ebx);
|
|
ARG_UNUSED(ecx);
|
|
|
|
return edx & CPUID_SPEC_CTRL;
|
|
}
|
|
|
|
static int
|
|
disable_ssbd_if_needed(struct device *dev)
|
|
{
|
|
/* This is checked in runtime rather than compile time since
|
|
* IA32_SPEC_CTRL_MSR might be added in a microcode update.
|
|
*/
|
|
if (cpu_has_spec_ctrl()) {
|
|
u64_t cur = _x86_msr_read(IA32_SPEC_CTRL_MSR);
|
|
|
|
_x86_msr_write(IA32_SPEC_CTRL_MSR,
|
|
cur | SPEC_CTRL_SSBD);
|
|
}
|
|
|
|
ARG_UNUSED(dev);
|
|
|
|
return 0;
|
|
}
|
|
|
|
SYS_INIT(disable_ssbd_if_needed, PRE_KERNEL_1, 0);
|