mirror of
https://github.com/Telecominfraproject/OpenCellular.git
synced 2026-01-14 00:26:30 +00:00
gma pipe_setup: Replace Update_Offset() with Setup_FB()
Beside updates to the framebuffer offset in memory, Setup_FB() allows changes to size, position, tiling and rotation, too. Basically every- thing but changes to BPC (which would need an update in the transcoder configuration on pre-Broadwell hardware, too). It is not clear if the updates work fully synchronous on all hardware generations. Though, tests on APL have shown a glitch free transition so far. Change-Id: I3c8352315390d9c4d2fb2a7e09355b5fe4089421 Signed-off-by: Nico Huber <nico.h@gmx.de> Reviewed-on: https://review.coreboot.org/23165 Reviewed-by: Arthur Heymans <arthur@aheymans.xyz>
This commit is contained in:
@@ -471,25 +471,34 @@ package body HW.GFX.GMA.Pipe_Setup is
|
||||
|
||||
----------------------------------------------------------------------------
|
||||
|
||||
procedure Setup_FB
|
||||
(Pipe : Pipe_Index;
|
||||
Mode : Mode_Type;
|
||||
Framebuffer : Framebuffer_Type)
|
||||
is
|
||||
-- Enable dithering if framebuffer BPC differs from port BPC,
|
||||
-- as smooth gradients look really bad without.
|
||||
Dither : constant Boolean := Framebuffer.BPC /= Mode.BPC;
|
||||
begin
|
||||
pragma Debug (Debug.Put_Line (GNAT.Source_Info.Enclosing_Entity));
|
||||
|
||||
Setup_Display (Controllers (Pipe), Framebuffer, Mode.BPC, Dither);
|
||||
Setup_Scaling (Controllers (Pipe), Mode, Framebuffer);
|
||||
end Setup_FB;
|
||||
|
||||
procedure On
|
||||
(Pipe : Pipe_Index;
|
||||
Port_Cfg : Port_Config;
|
||||
Framebuffer : Framebuffer_Type)
|
||||
is
|
||||
-- Enable dithering if framebuffer BPC differs from port BPC,
|
||||
-- as smooth gradients look really bad without.
|
||||
Dither : constant Boolean := Framebuffer.BPC /= Port_Cfg.Mode.BPC;
|
||||
begin
|
||||
pragma Debug (Debug.Put_Line (GNAT.Source_Info.Enclosing_Entity));
|
||||
|
||||
Transcoder.Setup (Pipe, Port_Cfg);
|
||||
|
||||
Setup_Display
|
||||
(Controllers (Pipe), Framebuffer, Port_Cfg.Mode.BPC, Dither);
|
||||
Setup_FB (Pipe, Port_Cfg.Mode, Framebuffer);
|
||||
|
||||
Setup_Scaling (Controllers (Pipe), Port_Cfg.Mode, Framebuffer);
|
||||
|
||||
Transcoder.On (Pipe, Port_Cfg, Dither);
|
||||
Transcoder.On (Pipe, Port_Cfg, Framebuffer.BPC /= Port_Cfg.Mode.BPC);
|
||||
end On;
|
||||
|
||||
----------------------------------------------------------------------------
|
||||
@@ -544,15 +553,4 @@ package body HW.GFX.GMA.Pipe_Setup is
|
||||
end loop;
|
||||
end All_Off;
|
||||
|
||||
----------------------------------------------------------------------------
|
||||
|
||||
procedure Update_Offset (Pipe : Pipe_Index; Framebuffer : Framebuffer_Type)
|
||||
is
|
||||
begin
|
||||
pragma Debug (Debug.Put_Line (GNAT.Source_Info.Enclosing_Entity));
|
||||
|
||||
Registers.Write
|
||||
(Controllers (Pipe).DSPSURF, Framebuffer.Offset and 16#ffff_f000#);
|
||||
end Update_Offset;
|
||||
|
||||
end HW.GFX.GMA.Pipe_Setup;
|
||||
|
||||
@@ -36,7 +36,16 @@ is
|
||||
|
||||
procedure All_Off;
|
||||
|
||||
procedure Update_Offset (Pipe : Pipe_Index; Framebuffer : Framebuffer_Type);
|
||||
procedure Setup_FB
|
||||
(Pipe : Pipe_Index;
|
||||
Mode : Mode_Type;
|
||||
Framebuffer : Framebuffer_Type)
|
||||
with
|
||||
Pre =>
|
||||
Rotated_Width (Framebuffer) <= Mode.H_Visible and
|
||||
Rotated_Height (Framebuffer) <= Mode.V_Visible and
|
||||
(Framebuffer.Offset = VGA_PLANE_FRAMEBUFFER_OFFSET or
|
||||
Framebuffer.Height + Framebuffer.Start_Y <= Framebuffer.V_Stride);
|
||||
|
||||
private
|
||||
|
||||
|
||||
@@ -285,9 +285,12 @@ is
|
||||
|
||||
-- update framebuffer offset only
|
||||
elsif New_Config.Port /= Disabled and
|
||||
Cur_Config.Framebuffer /= New_Config.Framebuffer
|
||||
Cur_Config.Framebuffer /= New_Config.Framebuffer and
|
||||
Config_Helpers.Validate_Config
|
||||
(New_Config.Framebuffer, New_Config.Mode, Pipe)
|
||||
then
|
||||
Display_Controller.Update_Offset (Pipe, New_Config.Framebuffer);
|
||||
Display_Controller.Setup_FB
|
||||
(Pipe, New_Config.Mode, New_Config.Framebuffer);
|
||||
Cur_Config := New_Config;
|
||||
end if;
|
||||
end;
|
||||
|
||||
Reference in New Issue
Block a user