Angel Pons has uploaded this change for review. ( https://review.coreboot.org/c/coreboot/+/59574 )
Change subject: [DO NOT SUBMIT] Doc/gfx/libgfxinit.md: Add info about display engine ......................................................................
[DO NOT SUBMIT] Doc/gfx/libgfxinit.md: Add info about display engine
Add a section about the display engine, the main thing libgfxinit concerns itself with.
Currently, this is just a backup of things I said on IRC. Obviously, this is not yet ready for review.
Change-Id: I8690edea782b9ac13d1588c791b297e140df7e90 Signed-off-by: Angel Pons th3fanbus@gmail.com --- M Documentation/gfx/libgfxinit.md 1 file changed, 21 insertions(+), 0 deletions(-)
git pull ssh://review.coreboot.org:29418/coreboot refs/changes/74/59574/1
diff --git a/Documentation/gfx/libgfxinit.md b/Documentation/gfx/libgfxinit.md index 40f194a..d17e364 100644 --- a/Documentation/gfx/libgfxinit.md +++ b/Documentation/gfx/libgfxinit.md @@ -16,6 +16,27 @@ from Arrandale to Coffee Lake, and Apollo Lake are verified to work within *coreboot*.
+General idea +------------ + +for libgfxinit, the important part is the display engine. we don't really care about GPU stuff (render engine, 3D, shaders...), we just want to "pipe" the framebuffer data to one or more monitors +I see the display engine as the "pipe dream" part of the hardware: it's processing possibly endless streams of data, routing them from the sources (framebuffers) to the destinations (physical ports, e.g. VGA, DVI, HDMI, DP, LVDS, eDP, MIPI DSI...) +and with "pipe dream" I imagine something like this, but simpler and more organized: [Video of Windows XP 3D pipes screensaver](https://www.youtube.com/watch?v=MKqrLGFoK9E) +the idea of pipes is similar to Unix shell pipelines: https://en.wikipedia.org/wiki/Pipeline_(Unix) +hmmm, IIRC Intel hardware has some specific part called "pipe". I'm referring to the entire display engine, how the various hardware units are connected. I'll use "pipelines" from now on to avoid any potential confusion + +display engine pipelines are pretty much the same idea as Unix pipelines, but in hardware +here's the display engine block diagram of haswell/lynxpoint: ["Haswell Display Connections" figure from PRM Volume 11a: Display (Haswell)"](https://imgur.com/DVREcHS.png) +the equivalent of "programs" in Unix pipelines would be the hardware blocks: pipe X, panel fitting, transcoder X, DDI X... +because hardware is hard, there aren't many ways to connect the blocks (with Unix shell pipelines, you can connect anything to anything, even if it won't work) +to choose how blocks are connected, the display engine has muxes (multiplexers): https://en.wikipedia.org/wiki/Multiplexer +Haswell has a dedicated eDP mux and a "Cross Point Mux & Multi-stream" block for the other DDIs (DDI = Digital Display Interface) +the latter block allows connecting the output of any transcoder to any DDI, and also allows connecting multiple transcoder outputs to the same DDI (needed for DisplayPort Multi Stream Transport) + +also, note the following route: Memory/Config interface ---> Pipe A ---> eDP Mux ---> Transcoder eDP ---> DDI A +that route doesn't use any blocks in the Power Down Well (gray regions). this allows powering down parts of the display engine to save power +this is very convenient for laptops: in most cases, only the integrated eDP LCD is used when running off battery power + GMA: Framebuffer Configuration ------------------------------