[PATCH v2 00/26] x86: video: Speed up the framebuffer

Simon Glass sjg at chromium.org
Mon May 25 03:48:37 CEST 2020


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 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  |  40 ++++++++++-
 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, 596 insertions(+), 102 deletions(-)

-- 
2.27.0.rc0.183.gde8f92d652-goog



More information about the U-Boot mailing list