[coreboot-gerrit] Change in libgfxinit[master]: Add flag to use GMCH PP registers

Arthur Heymans (Code Review) gerrit at coreboot.org
Wed Mar 28 17:29:49 CEST 2018


Arthur Heymans has uploaded this change for review. ( https://review.coreboot.org/25408


Change subject: Add flag to use GMCH PP registers
......................................................................

Add flag to use GMCH PP registers

Change-Id: Ia94af6340bdf329328f265fb9424224c1ab5f45f
Signed-off-by: Arthur Heymans <arthur at aheymans.xyz>
---
M common/hw-gfx-gma-config.ads.template
M common/hw-gfx-gma-panel.adb
M common/hw-gfx-gma-registers.ads
3 files changed, 46 insertions(+), 17 deletions(-)



  git pull ssh://review.coreboot.org:29418/libgfxinit refs/changes/08/25408/1

diff --git a/common/hw-gfx-gma-config.ads.template b/common/hw-gfx-gma-config.ads.template
index 8a39359..75e1481 100644
--- a/common/hw-gfx-gma-config.ads.template
+++ b/common/hw-gfx-gma-config.ads.template
@@ -63,6 +63,7 @@
    Has_PP_Write_Protection : constant Boolean := CPU <= Ivybridge;
    Has_PP_Port_Select      : constant Boolean := CPU <= Ivybridge;
    Use_PP_VDD_Override     : constant Boolean := CPU <= Ivybridge;
+   Has_PCH_Panel_Power     : constant Boolean := CPU >= Ironlake;
 
    ----- PCH/FDI: ---------
    Has_PCH                 : constant Boolean := CPU /= Broxton;
diff --git a/common/hw-gfx-gma-panel.adb b/common/hw-gfx-gma-panel.adb
index 1b6a31d..60a74c9 100644
--- a/common/hw-gfx-gma-panel.adb
+++ b/common/hw-gfx-gma-panel.adb
@@ -86,6 +86,24 @@
    PCH_PP_ON_DELAYS_PORT_SELECT_DP_D   : constant := 16#00_0003# * 2 ** 30;
    PCH_PP_ON_DELAYS_PWR_UP_MASK        : constant := 16#00_1fff# * 2 ** 16;
    PCH_PP_ON_DELAYS_PWR_UP_BL_ON_MASK  : constant := 16#00_1fff# * 2 **  0;
+
+   PP_STATUS_REGs     : constant array (Boolean) of Registers.Registers_Index
+     := (Registers.GMCH_PP_STATUS, Registers.PCH_PP_STATUS);
+   PP_CONTROL_REGs     : constant array (Boolean) of Registers.Registers_Index
+     := (Registers.GMCH_PP_CONTROL, Registers.PCH_PP_CONTROL);
+   PP_ON_DELAYS_REGs  : constant array (Boolean) of Registers.Registers_Index
+     := (Registers.GMCH_PP_ON_DELAYS, Registers.PCH_PP_ON_DELAYS);
+   PP_OFF_DELAYS_REGs : constant array (Boolean) of Registers.Registers_Index
+     := (Registers.GMCH_PP_OFF_DELAYS, Registers.PCH_PP_OFF_DELAYS);
+   PP_DIVISOR_REGs    : constant array (Boolean) of Registers.Registers_Index
+     := (Registers.GMCH_PP_DIVISOR, Registers.PCH_PP_DIVISOR);
+
+   PP_STATUS_REG     : constant Registers.Registers_Index := PP_STATUS_REGs (Config.Has_PCH_Panel_Power);
+   PP_CONTROL_REG     : constant Registers.Registers_Index := PP_CONTROL_REGs (Config.Has_PCH_Panel_Power);
+   PP_ON_DELAYS_REG  : constant Registers.Registers_Index := PP_ON_DELAYS_REGs (Config.Has_PCH_Panel_Power);
+   PP_OFF_DELAYS_REG : constant Registers.Registers_Index := PP_OFF_DELAYS_REGs (Config.Has_PCH_Panel_Power);
+   PP_DIVISOR_REG    : constant Registers.Registers_Index := PP_DIVISOR_REGs (Config.Has_PCH_Panel_Power);
+
    function PCH_PP_ON_DELAYS_PWR_UP (US : Natural) return Word32 is
    begin
       return Shift_Left (Div_Round_Up32 (US, 100), 16);
@@ -175,19 +193,19 @@
       if Default_Delays then
          Override_Delays := True;
       else
-         Registers.Read (Registers.PCH_PP_ON_DELAYS, Power_Delay);
+         Registers.Read (PP_ON_DELAYS_REG, Power_Delay);
          Delays_US (Power_Up_Delay) := 100 * Natural
            (Shift_Right (Power_Delay and PCH_PP_ON_DELAYS_PWR_UP_MASK, 16));
          Delays_US (Power_Up_To_BL_On) := 100 * Natural
            (Power_Delay and PCH_PP_ON_DELAYS_PWR_UP_BL_ON_MASK);
 
-         Registers.Read (Registers.PCH_PP_OFF_DELAYS, Power_Delay);
+         Registers.Read (PP_OFF_DELAYS_REG, Power_Delay);
          Delays_US (Power_Down_Delay) := 100 * Natural
            (Shift_Right (Power_Delay and PCH_PP_OFF_DELAYS_PWR_DOWN_MASK, 16));
          Delays_US (BL_Off_To_Power_Down) := 100 * Natural
            (Power_Delay and PCH_PP_OFF_DELAYS_BL_OFF_PWR_DOWN_MASK);
 
-         Registers.Read (Registers.PCH_PP_DIVISOR, Power_Delay);
+         Registers.Read (PP_DIVISOR_REG, Power_Delay);
          if (Power_Delay and PCH_PP_DIVISOR_PWR_CYC_DELAY_MASK) > 1 then
             Delays_US (Power_Cycle_Delay) := 100_000 * (Natural
               (Power_Delay and PCH_PP_DIVISOR_PWR_CYC_DELAY_MASK) - 1);
@@ -209,7 +227,7 @@
 
          -- Force power-up to backlight-on delay to 100us as recommended by PRM.
          Registers.Unset_And_Set_Mask
-           (Register    => Registers.PCH_PP_ON_DELAYS,
+           (Register    => PP_ON_DELAYS_REG,
             Mask_Unset  => PCH_PP_ON_DELAYS_PORT_SELECT_MASK or
                            PCH_PP_ON_DELAYS_PWR_UP_MASK or
                            PCH_PP_ON_DELAYS_PWR_UP_BL_ON_MASK,
@@ -218,7 +236,7 @@
                            or PCH_PP_ON_DELAYS_PWR_UP_BL_ON (100));
 
          Registers.Unset_And_Set_Mask
-           (Register    => Registers.PCH_PP_OFF_DELAYS,
+           (Register    => PP_OFF_DELAYS_REG,
             Mask_Unset  => PCH_PP_OFF_DELAYS_PWR_DOWN_MASK or
                            PCH_PP_OFF_DELAYS_BL_OFF_PWR_DOWN_MASK,
             Mask_Set    => PCH_PP_OFF_DELAYS_PWR_DOWN
@@ -227,7 +245,7 @@
                              (Delays_US (BL_Off_To_Power_Down)));
 
          Registers.Unset_And_Set_Mask
-           (Register    => Registers.PCH_PP_DIVISOR,
+           (Register    => PP_DIVISOR_REG,
             Mask_Unset  => PCH_PP_DIVISOR_PWR_CYC_DELAY_MASK,
             Mask_Set    => PCH_PP_DIVISOR_PWR_CYC_DELAY
                              (Delays_US (Power_Cycle_Delay)));
@@ -235,13 +253,13 @@
 
       if Config.Has_PP_Write_Protection then
          Registers.Unset_And_Set_Mask
-           (Register    => Registers.PCH_PP_CONTROL,
+           (Register    => PP_CONTROL_REG,
             Mask_Unset  => PCH_PP_CONTROL_WRITE_PROTECT_MASK,
             Mask_Set    => PCH_PP_CONTROL_WRITE_PROTECT_KEY or
                            PCH_PP_CONTROL_POWER_DOWN_ON_RESET);
       else
          Registers.Set_Mask
-           (Register => Registers.PCH_PP_CONTROL,
+           (Register => PP_CONTROL_REG,
             Mask     => PCH_PP_CONTROL_POWER_DOWN_ON_RESET);
       end if;
    end Setup_PP_Sequencer;
@@ -265,12 +283,12 @@
    begin
       pragma Debug (Debug.Put_Line (GNAT.Source_Info.Enclosing_Entity));
 
-      Registers.Is_Set_Mask (Registers.PCH_PP_CONTROL, PCH_PP_CONTROL_TARGET_ON, Was_On);
+      Registers.Is_Set_Mask (PP_CONTROL_REG, PCH_PP_CONTROL_TARGET_ON, Was_On);
       if not Was_On then
          Time.Delay_Until (Power_Cycle_Timer);
       end if;
 
-      Registers.Set_Mask (Registers.PCH_PP_CONTROL, PCH_PP_CONTROL_TARGET_ON);
+      Registers.Set_Mask (PP_CONTROL_REG, PCH_PP_CONTROL_TARGET_ON);
       if not Was_On then
          Power_Up_Timer := Time.US_From_Now (Delays_US (Power_Up_Delay));
       end if;
@@ -285,11 +303,11 @@
 
       Time.Delay_Until (Power_Up_Timer);
       Registers.Wait_Unset_Mask
-        (Register => Registers.PCH_PP_STATUS,
+        (Register => PP_STATUS_REG,
          Mask     => PCH_PP_STATUS_PWR_SEQ_PROGRESS_MASK,
          TOut_MS  => 300);
 
-      Registers.Unset_Mask (Registers.PCH_PP_CONTROL, PCH_PP_CONTROL_VDD_OVERRIDE);
+      Registers.Unset_Mask (PP_CONTROL_REG, PCH_PP_CONTROL_VDD_OVERRIDE);
    end Wait_On;
 
    procedure Off
@@ -298,16 +316,16 @@
    begin
       pragma Debug (Debug.Put_Line (GNAT.Source_Info.Enclosing_Entity));
 
-      Registers.Is_Set_Mask (Registers.PCH_PP_CONTROL, PCH_PP_CONTROL_TARGET_ON, Was_On);
+      Registers.Is_Set_Mask (PP_CONTROL_REG, PCH_PP_CONTROL_TARGET_ON, Was_On);
       Registers.Unset_Mask
-        (Register => Registers.PCH_PP_CONTROL,
+        (Register => PP_CONTROL_REG,
          Mask     => PCH_PP_CONTROL_TARGET_ON or
                      PCH_PP_CONTROL_VDD_OVERRIDE);
       if Was_On then
          Time.U_Delay (Delays_US (Power_Down_Delay));
       end if;
       Registers.Wait_Unset_Mask
-        (Register => Registers.PCH_PP_STATUS,
+        (Register => PP_STATUS_REG,
          Mask     => PCH_PP_STATUS_PWR_SEQ_PROGRESS_MASK,
          TOut_MS  => 600);
       if Was_On then
@@ -322,7 +340,7 @@
       pragma Debug (Debug.Put_Line (GNAT.Source_Info.Enclosing_Entity));
 
       Registers.Set_Mask
-         (Register   => Registers.PCH_PP_CONTROL,
+         (Register   => PP_CONTROL_REG,
           Mask       => PCH_PP_CONTROL_BACKLIGHT_ENABLE);
    end Backlight_On;
 
@@ -331,7 +349,7 @@
       pragma Debug (Debug.Put_Line (GNAT.Source_Info.Enclosing_Entity));
 
       Registers.Unset_Mask
-        (Register   => Registers.PCH_PP_CONTROL,
+        (Register   => PP_CONTROL_REG,
          Mask       => PCH_PP_CONTROL_BACKLIGHT_ENABLE);
    end Backlight_Off;
 
diff --git a/common/hw-gfx-gma-registers.ads b/common/hw-gfx-gma-registers.ads
index 40d3437..468d79d 100644
--- a/common/hw-gfx-gma-registers.ads
+++ b/common/hw-gfx-gma-registers.ads
@@ -155,6 +155,11 @@
       PIPEB_LINK_M1,
       PIPEB_LINK_N1,
       FDI_TX_CTL_B,
+      GMCH_PP_STATUS,
+      GMCH_PP_CONTROL,
+      GMCH_PP_ON_DELAYS,
+      GMCH_PP_OFF_DELAYS,
+      GMCH_PP_DIVISOR,
       PIPEB_DDI_FUNC_CTL,
       PIPEB_MSA_MISC,
       SRD_CTL_B,
@@ -1283,6 +1288,11 @@
       PWR_WELL_CTL6         => 16#04_5414# / Register_Width,
 
       -- class Panel registers
+      GMCH_PP_STATUS        => 16#06_1200# / Register_Width,
+      GMCH_PP_CONTROL       => 16#06_1204# / Register_Width,
+      GMCH_PP_ON_DELAYS     => 16#06_1208# / Register_Width,
+      GMCH_PP_OFF_DELAYS    => 16#06_120c# / Register_Width,
+      GMCH_PP_DIVISOR       => 16#06_1210# / Register_Width,
       PCH_PP_STATUS         => 16#0c_7200# / Register_Width,
       PCH_PP_CONTROL        => 16#0c_7204# / Register_Width,
       PCH_PP_ON_DELAYS      => 16#0c_7208# / Register_Width,

-- 
To view, visit https://review.coreboot.org/25408
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: Ia94af6340bdf329328f265fb9424224c1ab5f45f
Gerrit-Change-Number: 25408
Gerrit-PatchSet: 1
Gerrit-Owner: Arthur Heymans <arthur at aheymans.xyz>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.coreboot.org/pipermail/coreboot-gerrit/attachments/20180328/d2ff7f24/attachment-0001.html>


More information about the coreboot-gerrit mailing list