cpu/x86: add paging_set_default_pat() function
Add paging_set_default_pat() which sets up the PAT MSR according to util/x86/x86_page_tables.go. Using page attribute types require a matching of the PAT values with the page table entries. This function is just providing the default PAT MSR value to match against the utility. BUG=b:72728953 Change-Id: I7ed34a3565647ffc359ff102d3f6a59fbc93cc22 Signed-off-by: Aaron Durbin <adurbin@chromium.org> Reviewed-on: https://review.coreboot.org/25715 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Furquan Shaikh <furquan@google.com> Reviewed-by: Justin TerAvest <teravest@chromium.org>
This commit is contained in:
parent
d5e4746cf8
commit
c82e48d7e4
@ -144,3 +144,28 @@ void paging_set_pat(uint64_t pat)
|
|||||||
msr.hi = pat >> 32;
|
msr.hi = pat >> 32;
|
||||||
wrmsr(MSR_IA32_PAT, msr);
|
wrmsr(MSR_IA32_PAT, msr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* PAT encoding used in util/x86/x86_page_tables.go. It matches the linux
|
||||||
|
* kernel settings:
|
||||||
|
* PTE encoding:
|
||||||
|
* PAT
|
||||||
|
* |PCD
|
||||||
|
* ||PWT PAT
|
||||||
|
* ||| slot
|
||||||
|
* 000 0 WB : _PAGE_CACHE_MODE_WB
|
||||||
|
* 001 1 WC : _PAGE_CACHE_MODE_WC
|
||||||
|
* 010 2 UC-: _PAGE_CACHE_MODE_UC_MINUS
|
||||||
|
* 011 3 UC : _PAGE_CACHE_MODE_UC
|
||||||
|
* 100 4 WB : Reserved
|
||||||
|
* 101 5 WP : _PAGE_CACHE_MODE_WP
|
||||||
|
* 110 6 UC-: Reserved
|
||||||
|
* 111 7 WT : _PAGE_CACHE_MODE_WT
|
||||||
|
*/
|
||||||
|
void paging_set_default_pat(void)
|
||||||
|
{
|
||||||
|
uint64_t pat = PAT_ENCODE(WB, 0) | PAT_ENCODE(WC, 1) |
|
||||||
|
PAT_ENCODE(UC_MINUS, 2) | PAT_ENCODE(UC, 3) |
|
||||||
|
PAT_ENCODE(WB, 4) | PAT_ENCODE(WP, 5) |
|
||||||
|
PAT_ENCODE(UC_MINUS, 6) | PAT_ENCODE(WT, 7);
|
||||||
|
paging_set_pat(pat);
|
||||||
|
}
|
||||||
|
@ -14,8 +14,18 @@ void paging_disable_pae(void);
|
|||||||
/* Set/Clear NXE bit in IA32_EFER MSR */
|
/* Set/Clear NXE bit in IA32_EFER MSR */
|
||||||
void paging_set_nxe(int enable);
|
void paging_set_nxe(int enable);
|
||||||
|
|
||||||
|
#define PAT_UC 0
|
||||||
|
#define PAT_WC 1
|
||||||
|
#define PAT_WT 4
|
||||||
|
#define PAT_WP 5
|
||||||
|
#define PAT_WB 6
|
||||||
|
#define PAT_UC_MINUS 7
|
||||||
|
#define PAT_ENCODE(type, idx) (((uint64_t)PAT_ ## type) << 8*(idx))
|
||||||
|
|
||||||
/* Set PAT MSR */
|
/* Set PAT MSR */
|
||||||
void paging_set_pat(uint64_t pat);
|
void paging_set_pat(uint64_t pat);
|
||||||
|
/* Set coreboot default PAT value. */
|
||||||
|
void paging_set_default_pat(void);
|
||||||
|
|
||||||
#define MAPPING_ERROR ((void *)0xffffffffUL)
|
#define MAPPING_ERROR ((void *)0xffffffffUL)
|
||||||
void *map_2M_page(unsigned long page);
|
void *map_2M_page(unsigned long page);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user