cpu/x86/smm.h: Add function to return the SMM save state revision
Change-Id: I3e4450088adbb654050e7420956cf58ee1170a98 Signed-off-by: Arthur Heymans <arthur@aheymans.xyz> Reviewed-on: https://review.coreboot.org/c/coreboot/+/44318 Reviewed-by: Angel Pons <th3fanbus@gmail.com> Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
This commit is contained in:
parent
d579a502d0
commit
342d0a8365
|
@ -120,6 +120,14 @@ static inline void *smm_save_state(uintptr_t base, int arch_offset, int node)
|
|||
return (void *)base;
|
||||
}
|
||||
|
||||
/* This returns the SMM revision from the savestate of CPU0,
|
||||
which is assumed to be the same for all CPU's. See the memory
|
||||
map in smmhandler.S */
|
||||
uint32_t smm_revision(void)
|
||||
{
|
||||
return *(uint32_t *)(SMM_BASE + SMM_ENTRY_OFFSET * 2 - SMM_REVISION_OFFSET_FROM_TOP);
|
||||
}
|
||||
|
||||
bool smm_region_overlaps_handler(const struct region *r)
|
||||
{
|
||||
const struct region r_smm = {SMM_BASE, SMM_DEFAULT_SIZE};
|
||||
|
|
|
@ -106,6 +106,13 @@ void *smm_get_save_state(int cpu)
|
|||
return base;
|
||||
}
|
||||
|
||||
uint32_t smm_revision(void)
|
||||
{
|
||||
const uintptr_t save_state = (uintptr_t)(smm_get_save_state(0));
|
||||
|
||||
return *(uint32_t *)(save_state + smm_runtime->save_state_size - SMM_REVISION_OFFSET_FROM_TOP);
|
||||
}
|
||||
|
||||
bool smm_region_overlaps_handler(const struct region *r)
|
||||
{
|
||||
const struct region r_smm = {smm_runtime->smbase, smm_runtime->smm_size};
|
||||
|
|
|
@ -193,4 +193,9 @@ int smm_subregion(int sub, uintptr_t *start, size_t *size);
|
|||
/* Print the SMM memory layout on console. */
|
||||
void smm_list_regions(void);
|
||||
|
||||
#define SMM_REVISION_OFFSET_FROM_TOP (0x8000 - 0x7efc)
|
||||
/* Return the SMM save state revision. The revision can be fetched from the smm savestate
|
||||
which is always at the same offset downward from the top of the save state. */
|
||||
uint32_t smm_revision(void);
|
||||
|
||||
#endif /* CPU_X86_SMM_H */
|
||||
|
|
Loading…
Reference in New Issue