include/cpu/msr.h: transform into an union
This makes it easier to get the content of an msr into a full 64bit variable. Change-Id: I1b026cd3807fd68d805051a74b3d31fcde1c5626 Signed-off-by: Arthur Heymans <arthur@aheymans.xyz> Reviewed-on: https://review.coreboot.org/c/coreboot/+/68572 Reviewed-by: Raul Rangel <rrangel@chromium.org> Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Angel Pons <th3fanbus@gmail.com>
This commit is contained in:
parent
0c9fa6f2ce
commit
407e00dca0
4 changed files with 26 additions and 36 deletions
|
|
@ -285,7 +285,7 @@ static inline enum mca_err_code_types mca_err_type(msr_t reg)
|
|||
static inline uint64_t msr_read(unsigned int reg)
|
||||
{
|
||||
msr_t msr = rdmsr(reg);
|
||||
return (((uint64_t)msr.hi << 32) | msr.lo);
|
||||
return msr.raw;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -296,10 +296,7 @@ static inline uint64_t msr_read(unsigned int reg)
|
|||
*/
|
||||
static inline void msr_write(unsigned int reg, uint64_t value)
|
||||
{
|
||||
msr_t msr = {
|
||||
.lo = (unsigned int)value,
|
||||
.hi = (unsigned int)(value >> 32)
|
||||
};
|
||||
msr_t msr = { .raw = value };
|
||||
wrmsr(reg, msr);
|
||||
}
|
||||
|
||||
|
|
@ -315,10 +312,8 @@ static inline void msr_unset_and_set(unsigned int reg, uint64_t unset, uint64_t
|
|||
msr_t msr;
|
||||
|
||||
msr = rdmsr(reg);
|
||||
msr.lo &= (unsigned int)~unset;
|
||||
msr.hi &= (unsigned int)~(unset >> 32);
|
||||
msr.lo |= (unsigned int)set;
|
||||
msr.hi |= (unsigned int)(set >> 32);
|
||||
msr.raw &= ~unset;
|
||||
msr.raw |= set;
|
||||
wrmsr(reg, msr);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -6,10 +6,14 @@
|
|||
#ifndef __ASSEMBLER__
|
||||
#include <types.h>
|
||||
|
||||
typedef struct msr_struct {
|
||||
unsigned int lo;
|
||||
unsigned int hi;
|
||||
typedef union msr_union {
|
||||
struct {
|
||||
unsigned int lo;
|
||||
unsigned int hi;
|
||||
};
|
||||
uint64_t raw;
|
||||
} msr_t;
|
||||
_Static_assert(sizeof(msr_t) == sizeof(uint64_t), "Incorrect size for msr_t");
|
||||
|
||||
#if CONFIG(SOC_SETS_MSRS)
|
||||
msr_t soc_msr_read(unsigned int index);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue