Message ID | 20200703031237.1546362-1-sjg@chromium.org |
---|---|
Headers | show |
Series | x86: video: Speed up the framebuffer | expand |
On Fri, Jul 3, 2020 at 11:12 AM Simon Glass <sjg at chromium.org> wrote: > > (resent for Bin, rebased to u-boot/next) > > 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. > > Changes in v3: > - Drop unnecessary variable > > Changes in v2: > - Simplify return sequence in vidconsole_memmove() since there is no logging > > 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 > chromebook_samus: Enable the copy framebuffer > chromebook_link: Enable the copy framebuffer > 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 | 38 ++++++++++- > 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, 594 insertions(+), 102 deletions(-) > > -- series applied to u-boot-x86, thanks!