From 0f35af8f4293d004d634c24fe029287b598326e9 Mon Sep 17 00:00:00 2001 From: Aaron Durbin Date: Wed, 18 Apr 2018 01:00:27 -0600 Subject: arch/x86: add support for cache-as-ram paging Processors, such as glk, need to have paging enabled while in cache-as-ram mode because the front end is agressive about fetching lines into the L1I cache. If the line is dirty and in the L1D then it writes it back to "memory". However, in this case there is no backing store so the cache-as-ram data that was written back transforms to all 0xff's when read back in causing corruption. In order to mitigate the failure add x86 architecture support for enabling paging while in cache-as-ram mode. A Kconfig variable, NUM_CAR_PAGE_TABLE_PAGES, determines the number of pages to carve out for page tables within the cache-as-ram region. Additionally, the page directory pointer table is also carved out of cache-as-ram. Both areas are allocated from the persist-across-stages region of cache-as-ram so all stages utilizing cache-as-ram don't corrupt the page tables. The two paging-related areas are loaded by calling paging_enable_for_car() with the names of cbfs files to load the initial paging structures from. BUG=b:72728953 Change-Id: I7ea6e3e7be94a0ef9fd3205ce848e539bfbdcb6e Signed-off-by: Aaron Durbin Reviewed-on: https://review.coreboot.org/25717 Tested-by: build bot (Jenkins) Reviewed-by: Furquan Shaikh Reviewed-by: Justin TerAvest --- src/arch/x86/Kconfig | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'src/arch/x86/Kconfig') diff --git a/src/arch/x86/Kconfig b/src/arch/x86/Kconfig index f5bbd7827e..d7f144e179 100644 --- a/src/arch/x86/Kconfig +++ b/src/arch/x86/Kconfig @@ -286,3 +286,19 @@ config COLLECT_TIMESTAMPS_TSC depends on COLLECT_TIMESTAMPS help Use the TSC as the timestamp source. + +config PAGING_IN_CACHE_AS_RAM + bool + default n + depends on ARCH_X86 + help + Chipsets scan select this option to preallocate area in cache-as-ram + for storing paging data structures. PAE paging is currently the + only thing being supported. + +config NUM_CAR_PAGE_TABLE_PAGES + int + default 5 + depends on PAGING_IN_CACHE_AS_RAM + help + The number of 4KiB pages that should be pre-allocated for page tables. -- cgit v1.2.3