<p>Arthur Heymans has uploaded this change for <strong>review</strong>.</p><p><a href="https://review.coreboot.org/25405">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">Add flag to use GMCH GMBUS registers<br><br>Change-Id: Id5d115c7a4711f634171e6e163439ebab4ee6076<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-i2c.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/05/25405/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 e6326de..076f681 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>@@ -110,6 +110,7 @@</span><br><span>    ----- GMBUS: -----------</span><br><span>    Ungate_GMBUS_Unit_Level : constant Boolean := CPU >= Skylake;</span><br><span>    GMBUS_Alternative_Pins  : constant Boolean := CPU = Broxton;</span><br><span style="color: hsl(120, 100%, 40%);">+   Has_PCH_GMBUS           : constant Boolean := CPU >= Ironlake;</span><br><span> </span><br><span>    ----- Power: -----------</span><br><span>    Has_IPS                 : constant Boolean := (CPU = Haswell and</span><br><span>diff --git a/common/hw-gfx-gma-i2c.adb b/common/hw-gfx-gma-i2c.adb</span><br><span>index 4b58dde..742080f 100644</span><br><span>--- a/common/hw-gfx-gma-i2c.adb</span><br><span>+++ b/common/hw-gfx-gma-i2c.adb</span><br><span>@@ -71,6 +71,22 @@</span><br><span> </span><br><span>    GMBUS5_2BYTE_INDEX_ENABLE        : constant :=   1 * 2 ** 31;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+   GMBUS_Regs : constant array (0 .. 5) of Registers.Registers_Index :=</span><br><span style="color: hsl(120, 100%, 40%);">+     (if Config.Has_PCH_GMBUS then</span><br><span style="color: hsl(120, 100%, 40%);">+     (0 => Registers.PCH_GMBUS0,</span><br><span style="color: hsl(120, 100%, 40%);">+         1 => Registers.PCH_GMBUS1,</span><br><span style="color: hsl(120, 100%, 40%);">+         2 => Registers.PCH_GMBUS2,</span><br><span style="color: hsl(120, 100%, 40%);">+         3 => Registers.PCH_GMBUS3,</span><br><span style="color: hsl(120, 100%, 40%);">+         4 => Registers.PCH_GMBUS4,</span><br><span style="color: hsl(120, 100%, 40%);">+         5 => Registers.PCH_GMBUS5)</span><br><span style="color: hsl(120, 100%, 40%);">+      else</span><br><span style="color: hsl(120, 100%, 40%);">+    (0 => Registers.GMCH_GMBUS0,</span><br><span style="color: hsl(120, 100%, 40%);">+        1 => Registers.GMCH_GMBUS1,</span><br><span style="color: hsl(120, 100%, 40%);">+        2 => Registers.GMCH_GMBUS2,</span><br><span style="color: hsl(120, 100%, 40%);">+        3 => Registers.GMCH_GMBUS3,</span><br><span style="color: hsl(120, 100%, 40%);">+        4 => Registers.GMCH_GMBUS4,</span><br><span style="color: hsl(120, 100%, 40%);">+        5 => Registers.GMCH_GMBUS5));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>    function GMBUS1_TOTAL_BYTE_COUNT</span><br><span>      (Count : HW.GFX.I2C.Transfer_Length)</span><br><span>       return Word32 is</span><br><span>@@ -109,7 +125,7 @@</span><br><span>    is</span><br><span>       GMBUS2 : Word32;</span><br><span>    begin</span><br><span style="color: hsl(0, 100%, 40%);">-      Registers.Read (Registers.PCH_GMBUS2, GMBUS2);</span><br><span style="color: hsl(120, 100%, 40%);">+      Registers.Read (GMBUS_Regs(2), GMBUS2);</span><br><span>       Result := (GMBUS2 and (GMBUS2_HARDWARE_WAIT_PHASE or</span><br><span>                               GMBUS2_SLAVE_STALL_TIMEOUT_ERROR or</span><br><span>                               GMBUS2_GMBUS_INTERRUPT_STATUS or</span><br><span>@@ -120,9 +136,9 @@</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.Write (Registers.PCH_GMBUS1, GMBUS1_SOFTWARE_CLEAR_INTERRUPT);</span><br><span style="color: hsl(0, 100%, 40%);">-      Registers.Write (Registers.PCH_GMBUS1, 0);</span><br><span style="color: hsl(0, 100%, 40%);">-      Registers.Write (Registers.PCH_GMBUS0, GMBUS0_PIN_PAIR_SELECT_NONE);</span><br><span style="color: hsl(120, 100%, 40%);">+      Registers.Write (GMBUS_Regs(1), GMBUS1_SOFTWARE_CLEAR_INTERRUPT);</span><br><span style="color: hsl(120, 100%, 40%);">+      Registers.Write (GMBUS_Regs(1), 0);</span><br><span style="color: hsl(120, 100%, 40%);">+      Registers.Write (GMBUS_Regs(0), GMBUS0_PIN_PAIR_SELECT_NONE);</span><br><span> </span><br><span>       GMBUS_Ready (Success);</span><br><span>    end Reset_GMBUS;</span><br><span>@@ -138,7 +154,7 @@</span><br><span>       end if;</span><br><span> </span><br><span>       -- TODO: Refactor + check for timeout.</span><br><span style="color: hsl(0, 100%, 40%);">-      Registers.Wait_Unset_Mask (Registers.PCH_GMBUS2, GMBUS2_INUSE);</span><br><span style="color: hsl(120, 100%, 40%);">+      Registers.Wait_Unset_Mask (GMBUS_Regs(2), GMBUS2_INUSE);</span><br><span> </span><br><span>       GMBUS_Ready (Success);</span><br><span>       if not Success then</span><br><span>@@ -147,14 +163,14 @@</span><br><span> </span><br><span>       if Success then</span><br><span>          Registers.Write</span><br><span style="color: hsl(0, 100%, 40%);">-           (Register => Registers.PCH_GMBUS0,</span><br><span style="color: hsl(120, 100%, 40%);">+           (Register => GMBUS_Regs(0),</span><br><span>             Value    => GMBUS0_GMBUS_RATE_SELECT_100KHZ or</span><br><span>                         GMBUS0_PIN_PAIR_SELECT (Port));</span><br><span>          Registers.Write</span><br><span style="color: hsl(0, 100%, 40%);">-           (Register => Registers.PCH_GMBUS4,</span><br><span style="color: hsl(120, 100%, 40%);">+           (Register => GMBUS_Regs(4),</span><br><span>             Value    => 0);</span><br><span>          Registers.Write</span><br><span style="color: hsl(0, 100%, 40%);">-           (Register => Registers.PCH_GMBUS5,</span><br><span style="color: hsl(120, 100%, 40%);">+           (Register => GMBUS_Regs(5),</span><br><span>             Value    => 0);</span><br><span>       end if;</span><br><span>    end Init_GMBUS;</span><br><span>@@ -164,10 +180,10 @@</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.Write (Registers.PCH_GMBUS0, GMBUS0_PIN_PAIR_SELECT_NONE);</span><br><span style="color: hsl(120, 100%, 40%);">+      Registers.Write (GMBUS_Regs(0), GMBUS0_PIN_PAIR_SELECT_NONE);</span><br><span> </span><br><span>       -- Clear INUSE. TODO: Don't do it, if timeout occured (see above).</span><br><span style="color: hsl(0, 100%, 40%);">-      Registers.Write (Registers.PCH_GMBUS2, GMBUS2_INUSE);</span><br><span style="color: hsl(120, 100%, 40%);">+      Registers.Write (GMBUS_Regs(2), GMBUS2_INUSE);</span><br><span> </span><br><span>       if Config.Ungate_GMBUS_Unit_Level then</span><br><span>          Registers.Unset_Mask</span><br><span>@@ -196,7 +212,7 @@</span><br><span>       Init_GMBUS (Port, Success);</span><br><span>       if Success then</span><br><span>          Registers.Write</span><br><span style="color: hsl(0, 100%, 40%);">-           (Register => Registers.PCH_GMBUS1,</span><br><span style="color: hsl(120, 100%, 40%);">+           (Register => GMBUS_Regs(1),</span><br><span>             Value    => GMBUS1_SOFTWARE_READY or</span><br><span>                         GMBUS1_BUS_CYCLE_INDEX or</span><br><span>                         GMBUS1_BUS_CYCLE_WAIT or</span><br><span>@@ -206,17 +222,17 @@</span><br><span> </span><br><span>          while Success and then Transfered < Length loop</span><br><span>             Registers.Wait_Set_Mask</span><br><span style="color: hsl(0, 100%, 40%);">-              (Register => Registers.PCH_GMBUS2,</span><br><span style="color: hsl(120, 100%, 40%);">+              (Register => GMBUS_Regs(2),</span><br><span>                Mask     => GMBUS2_HARDWARE_READY,</span><br><span>                TOut_MS  => 55);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-            Registers.Read (Registers.PCH_GMBUS2, GMBUS2);</span><br><span style="color: hsl(120, 100%, 40%);">+            Registers.Read (GMBUS_Regs(2), GMBUS2);</span><br><span>             Success :=  (GMBUS2 and GMBUS2_HARDWARE_READY) /= 0 and</span><br><span>                         (GMBUS2 and GMBUS2_NAK_INDICATOR) = 0;</span><br><span>             if Success then</span><br><span>                Current := GFX.I2C.Transfer_Length'Min (Length, Transfered + 4);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-               Registers.Read (Registers.PCH_GMBUS3, GMBUS3);</span><br><span style="color: hsl(120, 100%, 40%);">+               Registers.Read (GMBUS_Regs(3), GMBUS3);</span><br><span>                for I in Transfered .. Current - 1 loop</span><br><span>                   Data (I) := Byte (GMBUS3 and 16#ff#);</span><br><span>                   GMBUS3 := Shift_Right (GMBUS3, 8);</span><br><span>@@ -226,13 +242,13 @@</span><br><span>          end loop;</span><br><span>          if Success then</span><br><span>             Registers.Wait_Set_Mask</span><br><span style="color: hsl(0, 100%, 40%);">-              (Register => Registers.PCH_GMBUS2,</span><br><span style="color: hsl(120, 100%, 40%);">+              (Register => GMBUS_Regs(2),</span><br><span>                Mask     => GMBUS2_HARDWARE_WAIT_PHASE);</span><br><span>             Registers.Write</span><br><span style="color: hsl(0, 100%, 40%);">-              (Register => Registers.PCH_GMBUS1,</span><br><span style="color: hsl(120, 100%, 40%);">+              (Register => GMBUS_Regs(1),</span><br><span>                Value    => GMBUS1_SOFTWARE_READY or GMBUS1_BUS_CYCLE_STOP);</span><br><span>             Registers.Wait_Unset_Mask</span><br><span style="color: hsl(0, 100%, 40%);">-              (Register => Registers.PCH_GMBUS2,</span><br><span style="color: hsl(120, 100%, 40%);">+              (Register => GMBUS_Regs(2),</span><br><span>                Mask     => GMBUS2_GMBUS_ACTIVE);</span><br><span>          end if;</span><br><span>       end if;</span><br><span>diff --git a/common/hw-gfx-gma-registers.ads b/common/hw-gfx-gma-registers.ads</span><br><span>index 1515fab..37e62e8 100644</span><br><span>--- a/common/hw-gfx-gma-registers.ads</span><br><span>+++ b/common/hw-gfx-gma-registers.ads</span><br><span>@@ -44,6 +44,12 @@</span><br><span>       ARB_MODE,</span><br><span>       HWS_PGA,</span><br><span>       GAM_ECOCHK,</span><br><span style="color: hsl(120, 100%, 40%);">+      GMCH_GMBUS0,</span><br><span style="color: hsl(120, 100%, 40%);">+      GMCH_GMBUS1,</span><br><span style="color: hsl(120, 100%, 40%);">+      GMCH_GMBUS2,</span><br><span style="color: hsl(120, 100%, 40%);">+      GMCH_GMBUS3,</span><br><span style="color: hsl(120, 100%, 40%);">+      GMCH_GMBUS4,</span><br><span style="color: hsl(120, 100%, 40%);">+      GMCH_GMBUS5,</span><br><span>       MBCTL,</span><br><span>       UCGCTL1,</span><br><span>       UCGCTL2,</span><br><span>@@ -1347,6 +1353,12 @@</span><br><span>       SDEIER                => 16#0c_400c# / Register_Width,</span><br><span> </span><br><span>       -- I2C stuff</span><br><span style="color: hsl(120, 100%, 40%);">+      GMCH_GMBUS0           => 16#00_5100# / Register_Width,</span><br><span style="color: hsl(120, 100%, 40%);">+      GMCH_GMBUS1           => 16#00_5104# / Register_Width,</span><br><span style="color: hsl(120, 100%, 40%);">+      GMCH_GMBUS2           => 16#00_5108# / Register_Width,</span><br><span style="color: hsl(120, 100%, 40%);">+      GMCH_GMBUS3           => 16#00_510c# / Register_Width,</span><br><span style="color: hsl(120, 100%, 40%);">+      GMCH_GMBUS4           => 16#00_5110# / Register_Width,</span><br><span style="color: hsl(120, 100%, 40%);">+      GMCH_GMBUS5           => 16#00_5120# / Register_Width,</span><br><span>       PCH_GMBUS0            => 16#0c_5100# / Register_Width,</span><br><span>       PCH_GMBUS1            => 16#0c_5104# / Register_Width,</span><br><span>       PCH_GMBUS2            => 16#0c_5108# / Register_Width,</span><br><span></span><br></pre><p>To view, visit <a href="https://review.coreboot.org/25405">change 25405</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/25405"/><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: Id5d115c7a4711f634171e6e163439ebab4ee6076 </div>
<div style="display:none"> Gerrit-Change-Number: 25405 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Arthur Heymans <arthur@aheymans.xyz> </div>