Some architectures use a cached framebuffer and flush the cache as needed so that changes are visible. This is supported by U-Boot.
However x86 uses an uncached framebuffer with a 'write-combining' feature to speed up writes. Reads are permitted but they are extremely expensive. Unfortunately, reading from the frame buffer is quite common, e.g. to scroll it. This makes scrolling very slow. This series adds a new feature which supports copying modified parts of the frame buffer to the uncached hardware buffer. This speeds up scrolling dramatically on x86 so the extra complexity cost seems worth it. In an extreme case, the time to print the environment on minnowboard with 1280x1024 and CONFIG_CONSOLE_SCROLL_LINES disabled is reduced significantly, from 13 seconds to 300ms. Simon Glass (26): x86: fsp: Reinit the FPU after FSP meminit console: Add a way to output to serial only video: Show an error when a vidconsole function fails sandbox: video: Allow selection of rotated console video: Split out expression parts into variables video: Adjust rotated console to start at right edge video: Drop unnecessary #ifdef around vid_console_color() video: Add a comment for struct video_uc_platdata video: Add support for copying to a hardware framebuffer video: Set up the copy framebuffer when enabled video: Clear the copy framebuffer when clearing the screen video: Add helpers for vidconsole for the copy framebuffer video: Update normal console to support copy buffer video: Update truetype console to support copy buffer video: Update rotated console to support copy buffer video: Update the copy framebuffer when writing bitmaps video: Add comments to struct sandbox_sdl_plat video: sandbox: Add support for the copy framebuffer video: pci: Set up the copy framebuffer x86: fsp: video: Allocate a frame buffer when needed video: Correctly handle multiple framebuffers x86: video: Support copy framebuffer with probed devices x86: chromebook_samus: Enable the copy framebuffer x86: chromebook_link: Enable the copy framebuffer x86: minnowmax: Enable the copy framebuffer x86: minnowmax: Drop screen resolution to 1024x768 arch/x86/cpu/i386/cpu.c | 5 ++ arch/x86/include/asm/u-boot-x86.h | 8 +++ arch/x86/lib/fsp/fsp_graphics.c | 12 ++++ arch/x86/lib/fsp2/fsp_meminit.c | 1 + common/console.c | 28 ++++++-- configs/chromebook_link_defconfig | 2 +- configs/chromebook_samus_defconfig | 2 +- configs/minnowmax_defconfig | 4 +- configs/sandbox_defconfig | 1 + drivers/pci/pci_rom.c | 22 +++++- drivers/video/Kconfig | 31 +++++++++ drivers/video/broadwell_igd.c | 16 ++++- drivers/video/console_normal.c | 26 +++++++- drivers/video/console_rotate.c | 103 ++++++++++++++++++++--------- drivers/video/console_truetype.c | 43 ++++++++---- drivers/video/ivybridge_igd.c | 26 ++++++-- drivers/video/sandbox_sdl.c | 10 ++- drivers/video/vesa.c | 30 ++++++++- drivers/video/vidconsole-uclass.c | 44 +++++++++++- drivers/video/video-uclass.c | 93 +++++++++++++++++++++++++- drivers/video/video_bmp.c | 16 ++++- include/console.h | 13 ++++ include/dm/test.h | 14 +++- include/video.h | 41 ++++++++++++ include/video_console.h | 51 +++++++++++++- test/dm/video.c | 60 ++++++++++------- 26 files changed, 600 insertions(+), 102 deletions(-) -- 2.26.2.761.g0e0b3e54be-goog