
One of the four items left to fix up for bare ivybridge support in U-Boot is MTRRs. These are an important part of the x86 platform since they provide a means to control the cache behaviour for areas of memory.
Memory areas can be marked as uncacheable or cacheable. For cacheable the write behaviour can be controlled:
- write-back: data is not written back from the cache until evicted - write-though: data goes into the cache but is also written to memory - write-protect: data cannot be written to this area - write-combining: multiple writes to this area can be combined
This series adds support for deciding the MTRR setup that should be used, commiting it to registers before relocation, updating it for the video frame buffer, disabling CAR (cache-as-RAM) when needed and making sure that the faster possible execution speed is provided. In addition an 'mtrr' command is added to permit inspection and adjustment of MTRR registers from the command line.
Changes in v2: - Remove CONFIG_RAMTOP from mtrr.h in this patch - Use CONFIG_VIDEO directly to control running the video BIOS - Remove definition of 'ulong start' from this patch - Remove unused Lhlt code - Use a simple 'ret' instruction to return - Use a simple call instruction to call car_uninit - Use constants for microcode MSRs and header length - Move cmd_mtrr to arch/x86/lib - Correct 'platform' typo
Simon Glass (22): x86: Correct XIP_ROM_SIZE x86: Drop RAMTOP Kconfig x86: Correct ifdtool microcode calculation x86: video: Add support for CONFIG_CONSOLE_SCROLL_LINES x86: config: Always scroll the display by 5 lines, for speed x86: video: Add a debug() to display the frame buffer address x86: pci: Don't return a vesa mode when there is not video x86: video: Add debug option to time the BIOS copy x86: ivybridge: Only run the Video BIOS when video is enabled x86: Use cache, don't clear the display in video BIOS x86: Tidy up VESA mode numbers x86: pci: Display vesa modes in hex x86: ivybridge: Drop support for ROM caching x86: Add support for MTRRs x86: ivybridge: Set up an MTRR for the video frame buffer x86: board_f: Adjust x86 boot order for performance x86: ivybridge: Request MTRRs for DRAM regions x86: Commit the current MTRRs before relocation x86: ivybridge: Add a way to turn off the CAR x86: Disable CAR before relocation on platforms that need it x86: ivybridge: Update microcode early in boot x86: Add an 'mtrr' command to list and adjust MTRRs
arch/x86/Kconfig | 6 +- arch/x86/cpu/Makefile | 1 + arch/x86/cpu/coreboot/coreboot.c | 22 ++-- arch/x86/cpu/ivybridge/car.S | 74 ++++++++++- arch/x86/cpu/ivybridge/cpu.c | 27 +--- arch/x86/cpu/ivybridge/gma.c | 16 ++- arch/x86/cpu/ivybridge/microcode_intel.c | 26 ++-- arch/x86/cpu/ivybridge/sdram.c | 10 ++ arch/x86/cpu/mtrr.c | 81 ++++++++++++ arch/x86/cpu/start.S | 9 ++ arch/x86/dts/link.dts | 3 - arch/x86/include/asm/arch-ivybridge/microcode.h | 6 + arch/x86/include/asm/global_data.h | 15 +++ arch/x86/include/asm/mtrr.h | 163 +++++++++++------------- arch/x86/lib/Makefile | 1 + arch/x86/lib/bios.c | 14 +- arch/x86/lib/cmd_mtrr.c | 138 ++++++++++++++++++++ arch/x86/lib/init_helpers.c | 8 ++ common/board_f.c | 8 +- doc/README.x86 | 18 ++- drivers/pci/pci_rom.c | 9 +- drivers/video/cfb_console.c | 26 ++-- drivers/video/x86_fb.c | 1 + include/configs/x86-common.h | 1 + tools/ifdtool.c | 4 +- 25 files changed, 511 insertions(+), 176 deletions(-) create mode 100644 arch/x86/cpu/mtrr.c create mode 100644 arch/x86/lib/cmd_mtrr.c