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:
Aaron Durbin
2018-04-17 11:45:32 -06:00
committed by Patrick Georgi
parent d5e4746cf8
commit c82e48d7e4
2 changed files with 35 additions and 0 deletions

View File

@@ -144,3 +144,28 @@ void paging_set_pat(uint64_t pat)
msr.hi = pat >> 32;
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);
}