[coreboot-gerrit] Change in libgfxinit[master]: gma: Revise scaling on G45

Nico Huber (Code Review) gerrit at coreboot.org
Sat Jun 2 18:11:52 CEST 2018


Nico Huber has uploaded this change for review. ( https://review.coreboot.org/26767


Change subject: gma: Revise scaling on G45
......................................................................

gma: Revise scaling on G45

The G45 panel fitter needs a hint how the resulting image will be boxed
to keep aspect ratio. As we can't change the panel fitter configuration
while the pipe is enabled, we always tear the whole pipe down when the
configuration changes.

Change-Id: Ifedc19abbadcbae61892d0051f08592637f90fd7
Signed-off-by: Nico Huber <nico.h at gmx.de>
---
M common/hw-gfx-gma-pipe_setup.adb
M common/hw-gfx-gma.adb
2 files changed, 23 insertions(+), 6 deletions(-)



  git pull ssh://review.coreboot.org:29418/libgfxinit refs/changes/67/26767/1

diff --git a/common/hw-gfx-gma-pipe_setup.adb b/common/hw-gfx-gma-pipe_setup.adb
index 7a53faa..04d1296 100644
--- a/common/hw-gfx-gma-pipe_setup.adb
+++ b/common/hw-gfx-gma-pipe_setup.adb
@@ -118,6 +118,11 @@
    GMCH_PFIT_CONTROL_SELECT_MASK       : constant := 3 * 2 ** 29;
    GMCH_PFIT_CONTROL_SELECT_PIPE_A     : constant := 0 * 2 ** 29;
    GMCH_PFIT_CONTROL_SELECT_PIPE_B     : constant := 1 * 2 ** 29;
+   GMCH_PFIT_CONTROL_SCALING_MASK      : constant := 3 * 2 ** 26;
+   GMCH_PFIT_CONTROL_SCALING : constant array (Scaling_Aspect) of Word32 :=
+     (Evenly      => 0 * 2 ** 26,
+      Pillarbox   => 2 * 2 ** 26,
+      Letterbox   => 3 * 2 ** 26);
 
    VGACNTRL_REG : constant Registers.Registers_Index :=
      (if Config.Has_GMCH_VGACNTRL then
@@ -530,13 +535,19 @@
    -- Check in Enable_Output if panel fitter has already been enabled
    -- Pass this information to Validate_Config
    procedure Setup_Gmch_Panel_Fitter
-     (Controller  : in     Controller_Type)
+     (Controller  : in     Controller_Type;
+      Mode        : in     HW.GFX.Mode_Type;
+      Framebuffer : in     HW.GFX.Framebuffer_Type)
    is
       PF_Ctrl_Pipe_Sel : constant Word32 :=
            (case Controller.Pipe is
                when Primary   => GMCH_PFIT_CONTROL_SELECT_PIPE_A,
                when Secondary => GMCH_PFIT_CONTROL_SELECT_PIPE_B,
                when others    => 0);
+
+      PF_Ctrl_Scaling : constant Word32 :=
+         GMCH_PFIT_CONTROL_SCALING (Scaling_Type (Framebuffer, Mode));
+
       In_Use : Boolean;
    begin
       Registers.Is_Set_Mask
@@ -547,7 +558,7 @@
       if not In_Use then
          Registers.Write
            (Register => Registers.GMCH_PFIT_CONTROL,
-            Value    => PF_CTRL_ENABLE or PF_Ctrl_Pipe_Sel);
+            Value    => PF_CTRL_ENABLE or PF_Ctrl_Pipe_Sel or PF_Ctrl_Scaling);
       else
          Debug.Put_Line ("GMCH Pannel fitter already in use, skipping...");
       end if;
@@ -600,7 +611,7 @@
          if Config.Has_Plane_Control then
             Setup_Skylake_Pipe_Scaler (Controller, Mode, Framebuffer);
          elsif Config.Has_GMCH_PFIT_CONTROL then
-            Setup_Gmch_Panel_Fitter (Controller);
+            Setup_Gmch_Panel_Fitter (Controller, Mode, Framebuffer);
          else
             Setup_Ironlake_Panel_Fitter (Controller, Mode, Framebuffer);
          end if;
diff --git a/common/hw-gfx-gma.adb b/common/hw-gfx-gma.adb
index f962e1c..7e9a959 100644
--- a/common/hw-gfx-gma.adb
+++ b/common/hw-gfx-gma.adb
@@ -237,11 +237,17 @@
       is
       begin
          return
-            Cur_Config.Port /= New_Config.Port or else
-            Cur_Config.Mode /= New_Config.Mode or else
+            Cur_Config.Port /= New_Config.Port
+            or else
+            Cur_Config.Mode /= New_Config.Mode
+            or else
             (Config.Use_PDW_For_EDP_Scaling and then
              (Cur_Config.Port = Internal and
-              Requires_Scaling (Cur_Config) /= Requires_Scaling (New_Config)));
+              Requires_Scaling (Cur_Config) /= Requires_Scaling (New_Config)))
+            or else
+            (Config.Has_GMCH_PFIT_CONTROL and then
+             (Requires_Scaling (Cur_Config) /= Requires_Scaling (New_Config) or
+              Scaling_Type (Cur_Config) /= Scaling_Type (New_Config)));
       end Full_Update;
    begin
       Old_Configs := Cur_Configs;

-- 
To view, visit https://review.coreboot.org/26767
To unsubscribe, or for help writing mail filters, visit https://review.coreboot.org/settings

Gerrit-Project: libgfxinit
Gerrit-Branch: master
Gerrit-MessageType: newchange
Gerrit-Change-Id: Ifedc19abbadcbae61892d0051f08592637f90fd7
Gerrit-Change-Number: 26767
Gerrit-PatchSet: 1
Gerrit-Owner: Nico Huber <nico.h at gmx.de>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.coreboot.org/pipermail/coreboot-gerrit/attachments/20180602/a9b8c544/attachment-0001.html>


More information about the coreboot-gerrit mailing list