<p>Arthur Heymans has uploaded this change for <strong>review</strong>.</p><p><a href="https://review.coreboot.org/25408">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">Add flag to use GMCH PP registers<br><br>Change-Id: Ia94af6340bdf329328f265fb9424224c1ab5f45f<br>Signed-off-by: Arthur Heymans <arthur@aheymans.xyz><br>---<br>M common/hw-gfx-gma-config.ads.template<br>M common/hw-gfx-gma-panel.adb<br>M common/hw-gfx-gma-registers.ads<br>3 files changed, 46 insertions(+), 17 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://review.coreboot.org:29418/libgfxinit refs/changes/08/25408/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/common/hw-gfx-gma-config.ads.template b/common/hw-gfx-gma-config.ads.template</span><br><span>index 8a39359..75e1481 100644</span><br><span>--- a/common/hw-gfx-gma-config.ads.template</span><br><span>+++ b/common/hw-gfx-gma-config.ads.template</span><br><span>@@ -63,6 +63,7 @@</span><br><span>    Has_PP_Write_Protection : constant Boolean := CPU <= Ivybridge;</span><br><span>    Has_PP_Port_Select      : constant Boolean := CPU <= Ivybridge;</span><br><span>    Use_PP_VDD_Override     : constant Boolean := CPU <= Ivybridge;</span><br><span style="color: hsl(120, 100%, 40%);">+   Has_PCH_Panel_Power     : constant Boolean := CPU >= Ironlake;</span><br><span> </span><br><span>    ----- PCH/FDI: ---------</span><br><span>    Has_PCH                 : constant Boolean := CPU /= Broxton;</span><br><span>diff --git a/common/hw-gfx-gma-panel.adb b/common/hw-gfx-gma-panel.adb</span><br><span>index 1b6a31d..60a74c9 100644</span><br><span>--- a/common/hw-gfx-gma-panel.adb</span><br><span>+++ b/common/hw-gfx-gma-panel.adb</span><br><span>@@ -86,6 +86,24 @@</span><br><span>    PCH_PP_ON_DELAYS_PORT_SELECT_DP_D   : constant := 16#00_0003# * 2 ** 30;</span><br><span>    PCH_PP_ON_DELAYS_PWR_UP_MASK        : constant := 16#00_1fff# * 2 ** 16;</span><br><span>    PCH_PP_ON_DELAYS_PWR_UP_BL_ON_MASK  : constant := 16#00_1fff# * 2 **  0;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   PP_STATUS_REGs     : constant array (Boolean) of Registers.Registers_Index</span><br><span style="color: hsl(120, 100%, 40%);">+     := (Registers.GMCH_PP_STATUS, Registers.PCH_PP_STATUS);</span><br><span style="color: hsl(120, 100%, 40%);">+   PP_CONTROL_REGs     : constant array (Boolean) of Registers.Registers_Index</span><br><span style="color: hsl(120, 100%, 40%);">+     := (Registers.GMCH_PP_CONTROL, Registers.PCH_PP_CONTROL);</span><br><span style="color: hsl(120, 100%, 40%);">+   PP_ON_DELAYS_REGs  : constant array (Boolean) of Registers.Registers_Index</span><br><span style="color: hsl(120, 100%, 40%);">+     := (Registers.GMCH_PP_ON_DELAYS, Registers.PCH_PP_ON_DELAYS);</span><br><span style="color: hsl(120, 100%, 40%);">+   PP_OFF_DELAYS_REGs : constant array (Boolean) of Registers.Registers_Index</span><br><span style="color: hsl(120, 100%, 40%);">+     := (Registers.GMCH_PP_OFF_DELAYS, Registers.PCH_PP_OFF_DELAYS);</span><br><span style="color: hsl(120, 100%, 40%);">+   PP_DIVISOR_REGs    : constant array (Boolean) of Registers.Registers_Index</span><br><span style="color: hsl(120, 100%, 40%);">+     := (Registers.GMCH_PP_DIVISOR, Registers.PCH_PP_DIVISOR);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   PP_STATUS_REG     : constant Registers.Registers_Index := PP_STATUS_REGs (Config.Has_PCH_Panel_Power);</span><br><span style="color: hsl(120, 100%, 40%);">+   PP_CONTROL_REG     : constant Registers.Registers_Index := PP_CONTROL_REGs (Config.Has_PCH_Panel_Power);</span><br><span style="color: hsl(120, 100%, 40%);">+   PP_ON_DELAYS_REG  : constant Registers.Registers_Index := PP_ON_DELAYS_REGs (Config.Has_PCH_Panel_Power);</span><br><span style="color: hsl(120, 100%, 40%);">+   PP_OFF_DELAYS_REG : constant Registers.Registers_Index := PP_OFF_DELAYS_REGs (Config.Has_PCH_Panel_Power);</span><br><span style="color: hsl(120, 100%, 40%);">+   PP_DIVISOR_REG    : constant Registers.Registers_Index := PP_DIVISOR_REGs (Config.Has_PCH_Panel_Power);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>    function PCH_PP_ON_DELAYS_PWR_UP (US : Natural) return Word32 is</span><br><span>    begin</span><br><span>       return Shift_Left (Div_Round_Up32 (US, 100), 16);</span><br><span>@@ -175,19 +193,19 @@</span><br><span>       if Default_Delays then</span><br><span>          Override_Delays := True;</span><br><span>       else</span><br><span style="color: hsl(0, 100%, 40%);">-         Registers.Read (Registers.PCH_PP_ON_DELAYS, Power_Delay);</span><br><span style="color: hsl(120, 100%, 40%);">+         Registers.Read (PP_ON_DELAYS_REG, Power_Delay);</span><br><span>          Delays_US (Power_Up_Delay) := 100 * Natural</span><br><span>            (Shift_Right (Power_Delay and PCH_PP_ON_DELAYS_PWR_UP_MASK, 16));</span><br><span>          Delays_US (Power_Up_To_BL_On) := 100 * Natural</span><br><span>            (Power_Delay and PCH_PP_ON_DELAYS_PWR_UP_BL_ON_MASK);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-         Registers.Read (Registers.PCH_PP_OFF_DELAYS, Power_Delay);</span><br><span style="color: hsl(120, 100%, 40%);">+         Registers.Read (PP_OFF_DELAYS_REG, Power_Delay);</span><br><span>          Delays_US (Power_Down_Delay) := 100 * Natural</span><br><span>            (Shift_Right (Power_Delay and PCH_PP_OFF_DELAYS_PWR_DOWN_MASK, 16));</span><br><span>          Delays_US (BL_Off_To_Power_Down) := 100 * Natural</span><br><span>            (Power_Delay and PCH_PP_OFF_DELAYS_BL_OFF_PWR_DOWN_MASK);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-         Registers.Read (Registers.PCH_PP_DIVISOR, Power_Delay);</span><br><span style="color: hsl(120, 100%, 40%);">+         Registers.Read (PP_DIVISOR_REG, Power_Delay);</span><br><span>          if (Power_Delay and PCH_PP_DIVISOR_PWR_CYC_DELAY_MASK) > 1 then</span><br><span>             Delays_US (Power_Cycle_Delay) := 100_000 * (Natural</span><br><span>               (Power_Delay and PCH_PP_DIVISOR_PWR_CYC_DELAY_MASK) - 1);</span><br><span>@@ -209,7 +227,7 @@</span><br><span> </span><br><span>          -- Force power-up to backlight-on delay to 100us as recommended by PRM.</span><br><span>          Registers.Unset_And_Set_Mask</span><br><span style="color: hsl(0, 100%, 40%);">-           (Register    => Registers.PCH_PP_ON_DELAYS,</span><br><span style="color: hsl(120, 100%, 40%);">+           (Register    => PP_ON_DELAYS_REG,</span><br><span>             Mask_Unset  => PCH_PP_ON_DELAYS_PORT_SELECT_MASK or</span><br><span>                            PCH_PP_ON_DELAYS_PWR_UP_MASK or</span><br><span>                            PCH_PP_ON_DELAYS_PWR_UP_BL_ON_MASK,</span><br><span>@@ -218,7 +236,7 @@</span><br><span>                            or PCH_PP_ON_DELAYS_PWR_UP_BL_ON (100));</span><br><span> </span><br><span>          Registers.Unset_And_Set_Mask</span><br><span style="color: hsl(0, 100%, 40%);">-           (Register    => Registers.PCH_PP_OFF_DELAYS,</span><br><span style="color: hsl(120, 100%, 40%);">+           (Register    => PP_OFF_DELAYS_REG,</span><br><span>             Mask_Unset  => PCH_PP_OFF_DELAYS_PWR_DOWN_MASK or</span><br><span>                            PCH_PP_OFF_DELAYS_BL_OFF_PWR_DOWN_MASK,</span><br><span>             Mask_Set    => PCH_PP_OFF_DELAYS_PWR_DOWN</span><br><span>@@ -227,7 +245,7 @@</span><br><span>                              (Delays_US (BL_Off_To_Power_Down)));</span><br><span> </span><br><span>          Registers.Unset_And_Set_Mask</span><br><span style="color: hsl(0, 100%, 40%);">-           (Register    => Registers.PCH_PP_DIVISOR,</span><br><span style="color: hsl(120, 100%, 40%);">+           (Register    => PP_DIVISOR_REG,</span><br><span>             Mask_Unset  => PCH_PP_DIVISOR_PWR_CYC_DELAY_MASK,</span><br><span>             Mask_Set    => PCH_PP_DIVISOR_PWR_CYC_DELAY</span><br><span>                              (Delays_US (Power_Cycle_Delay)));</span><br><span>@@ -235,13 +253,13 @@</span><br><span> </span><br><span>       if Config.Has_PP_Write_Protection then</span><br><span>          Registers.Unset_And_Set_Mask</span><br><span style="color: hsl(0, 100%, 40%);">-           (Register    => Registers.PCH_PP_CONTROL,</span><br><span style="color: hsl(120, 100%, 40%);">+           (Register    => PP_CONTROL_REG,</span><br><span>             Mask_Unset  => PCH_PP_CONTROL_WRITE_PROTECT_MASK,</span><br><span>             Mask_Set    => PCH_PP_CONTROL_WRITE_PROTECT_KEY or</span><br><span>                            PCH_PP_CONTROL_POWER_DOWN_ON_RESET);</span><br><span>       else</span><br><span>          Registers.Set_Mask</span><br><span style="color: hsl(0, 100%, 40%);">-           (Register => Registers.PCH_PP_CONTROL,</span><br><span style="color: hsl(120, 100%, 40%);">+           (Register => PP_CONTROL_REG,</span><br><span>             Mask     => PCH_PP_CONTROL_POWER_DOWN_ON_RESET);</span><br><span>       end if;</span><br><span>    end Setup_PP_Sequencer;</span><br><span>@@ -265,12 +283,12 @@</span><br><span>    begin</span><br><span>       pragma Debug (Debug.Put_Line (GNAT.Source_Info.Enclosing_Entity));</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-      Registers.Is_Set_Mask (Registers.PCH_PP_CONTROL, PCH_PP_CONTROL_TARGET_ON, Was_On);</span><br><span style="color: hsl(120, 100%, 40%);">+      Registers.Is_Set_Mask (PP_CONTROL_REG, PCH_PP_CONTROL_TARGET_ON, Was_On);</span><br><span>       if not Was_On then</span><br><span>          Time.Delay_Until (Power_Cycle_Timer);</span><br><span>       end if;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-      Registers.Set_Mask (Registers.PCH_PP_CONTROL, PCH_PP_CONTROL_TARGET_ON);</span><br><span style="color: hsl(120, 100%, 40%);">+      Registers.Set_Mask (PP_CONTROL_REG, PCH_PP_CONTROL_TARGET_ON);</span><br><span>       if not Was_On then</span><br><span>          Power_Up_Timer := Time.US_From_Now (Delays_US (Power_Up_Delay));</span><br><span>       end if;</span><br><span>@@ -285,11 +303,11 @@</span><br><span> </span><br><span>       Time.Delay_Until (Power_Up_Timer);</span><br><span>       Registers.Wait_Unset_Mask</span><br><span style="color: hsl(0, 100%, 40%);">-        (Register => Registers.PCH_PP_STATUS,</span><br><span style="color: hsl(120, 100%, 40%);">+        (Register => PP_STATUS_REG,</span><br><span>          Mask     => PCH_PP_STATUS_PWR_SEQ_PROGRESS_MASK,</span><br><span>          TOut_MS  => 300);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-      Registers.Unset_Mask (Registers.PCH_PP_CONTROL, PCH_PP_CONTROL_VDD_OVERRIDE);</span><br><span style="color: hsl(120, 100%, 40%);">+      Registers.Unset_Mask (PP_CONTROL_REG, PCH_PP_CONTROL_VDD_OVERRIDE);</span><br><span>    end Wait_On;</span><br><span> </span><br><span>    procedure Off</span><br><span>@@ -298,16 +316,16 @@</span><br><span>    begin</span><br><span>       pragma Debug (Debug.Put_Line (GNAT.Source_Info.Enclosing_Entity));</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-      Registers.Is_Set_Mask (Registers.PCH_PP_CONTROL, PCH_PP_CONTROL_TARGET_ON, Was_On);</span><br><span style="color: hsl(120, 100%, 40%);">+      Registers.Is_Set_Mask (PP_CONTROL_REG, PCH_PP_CONTROL_TARGET_ON, Was_On);</span><br><span>       Registers.Unset_Mask</span><br><span style="color: hsl(0, 100%, 40%);">-        (Register => Registers.PCH_PP_CONTROL,</span><br><span style="color: hsl(120, 100%, 40%);">+        (Register => PP_CONTROL_REG,</span><br><span>          Mask     => PCH_PP_CONTROL_TARGET_ON or</span><br><span>                      PCH_PP_CONTROL_VDD_OVERRIDE);</span><br><span>       if Was_On then</span><br><span>          Time.U_Delay (Delays_US (Power_Down_Delay));</span><br><span>       end if;</span><br><span>       Registers.Wait_Unset_Mask</span><br><span style="color: hsl(0, 100%, 40%);">-        (Register => Registers.PCH_PP_STATUS,</span><br><span style="color: hsl(120, 100%, 40%);">+        (Register => PP_STATUS_REG,</span><br><span>          Mask     => PCH_PP_STATUS_PWR_SEQ_PROGRESS_MASK,</span><br><span>          TOut_MS  => 600);</span><br><span>       if Was_On then</span><br><span>@@ -322,7 +340,7 @@</span><br><span>       pragma Debug (Debug.Put_Line (GNAT.Source_Info.Enclosing_Entity));</span><br><span> </span><br><span>       Registers.Set_Mask</span><br><span style="color: hsl(0, 100%, 40%);">-         (Register   => Registers.PCH_PP_CONTROL,</span><br><span style="color: hsl(120, 100%, 40%);">+         (Register   => PP_CONTROL_REG,</span><br><span>           Mask       => PCH_PP_CONTROL_BACKLIGHT_ENABLE);</span><br><span>    end Backlight_On;</span><br><span> </span><br><span>@@ -331,7 +349,7 @@</span><br><span>       pragma Debug (Debug.Put_Line (GNAT.Source_Info.Enclosing_Entity));</span><br><span> </span><br><span>       Registers.Unset_Mask</span><br><span style="color: hsl(0, 100%, 40%);">-        (Register   => Registers.PCH_PP_CONTROL,</span><br><span style="color: hsl(120, 100%, 40%);">+        (Register   => PP_CONTROL_REG,</span><br><span>          Mask       => PCH_PP_CONTROL_BACKLIGHT_ENABLE);</span><br><span>    end Backlight_Off;</span><br><span> </span><br><span>diff --git a/common/hw-gfx-gma-registers.ads b/common/hw-gfx-gma-registers.ads</span><br><span>index 40d3437..468d79d 100644</span><br><span>--- a/common/hw-gfx-gma-registers.ads</span><br><span>+++ b/common/hw-gfx-gma-registers.ads</span><br><span>@@ -155,6 +155,11 @@</span><br><span>       PIPEB_LINK_M1,</span><br><span>       PIPEB_LINK_N1,</span><br><span>       FDI_TX_CTL_B,</span><br><span style="color: hsl(120, 100%, 40%);">+      GMCH_PP_STATUS,</span><br><span style="color: hsl(120, 100%, 40%);">+      GMCH_PP_CONTROL,</span><br><span style="color: hsl(120, 100%, 40%);">+      GMCH_PP_ON_DELAYS,</span><br><span style="color: hsl(120, 100%, 40%);">+      GMCH_PP_OFF_DELAYS,</span><br><span style="color: hsl(120, 100%, 40%);">+      GMCH_PP_DIVISOR,</span><br><span>       PIPEB_DDI_FUNC_CTL,</span><br><span>       PIPEB_MSA_MISC,</span><br><span>       SRD_CTL_B,</span><br><span>@@ -1283,6 +1288,11 @@</span><br><span>       PWR_WELL_CTL6         => 16#04_5414# / Register_Width,</span><br><span> </span><br><span>       -- class Panel registers</span><br><span style="color: hsl(120, 100%, 40%);">+      GMCH_PP_STATUS        => 16#06_1200# / Register_Width,</span><br><span style="color: hsl(120, 100%, 40%);">+      GMCH_PP_CONTROL       => 16#06_1204# / Register_Width,</span><br><span style="color: hsl(120, 100%, 40%);">+      GMCH_PP_ON_DELAYS     => 16#06_1208# / Register_Width,</span><br><span style="color: hsl(120, 100%, 40%);">+      GMCH_PP_OFF_DELAYS    => 16#06_120c# / Register_Width,</span><br><span style="color: hsl(120, 100%, 40%);">+      GMCH_PP_DIVISOR       => 16#06_1210# / Register_Width,</span><br><span>       PCH_PP_STATUS         => 16#0c_7200# / Register_Width,</span><br><span>       PCH_PP_CONTROL        => 16#0c_7204# / Register_Width,</span><br><span>       PCH_PP_ON_DELAYS      => 16#0c_7208# / Register_Width,</span><br><span></span><br></pre><p>To view, visit <a href="https://review.coreboot.org/25408">change 25408</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://review.coreboot.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://review.coreboot.org/25408"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: libgfxinit </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>
<div style="display:none"> Gerrit-Change-Id: Ia94af6340bdf329328f265fb9424224c1ab5f45f </div>
<div style="display:none"> Gerrit-Change-Number: 25408 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Arthur Heymans <arthur@aheymans.xyz> </div>