[coreboot-gerrit] Change in libgfxinit[master]: Add flag to use GMCH GMBUS registers
Arthur Heymans (Code Review)
gerrit at coreboot.org
Wed Mar 28 17:29:48 CEST 2018
Arthur Heymans has uploaded this change for review. ( https://review.coreboot.org/25405
Change subject: Add flag to use GMCH GMBUS registers
......................................................................
Add flag to use GMCH GMBUS registers
Change-Id: Id5d115c7a4711f634171e6e163439ebab4ee6076
Signed-off-by: Arthur Heymans <arthur at aheymans.xyz>
---
M common/hw-gfx-gma-config.ads.template
M common/hw-gfx-gma-i2c.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/05/25405/1
diff --git a/common/hw-gfx-gma-config.ads.template b/common/hw-gfx-gma-config.ads.template
index e6326de..076f681 100644
--- a/common/hw-gfx-gma-config.ads.template
+++ b/common/hw-gfx-gma-config.ads.template
@@ -110,6 +110,7 @@
----- GMBUS: -----------
Ungate_GMBUS_Unit_Level : constant Boolean := CPU >= Skylake;
GMBUS_Alternative_Pins : constant Boolean := CPU = Broxton;
+ Has_PCH_GMBUS : constant Boolean := CPU >= Ironlake;
----- Power: -----------
Has_IPS : constant Boolean := (CPU = Haswell and
diff --git a/common/hw-gfx-gma-i2c.adb b/common/hw-gfx-gma-i2c.adb
index 4b58dde..742080f 100644
--- a/common/hw-gfx-gma-i2c.adb
+++ b/common/hw-gfx-gma-i2c.adb
@@ -71,6 +71,22 @@
GMBUS5_2BYTE_INDEX_ENABLE : constant := 1 * 2 ** 31;
+ GMBUS_Regs : constant array (0 .. 5) of Registers.Registers_Index :=
+ (if Config.Has_PCH_GMBUS then
+ (0 => Registers.PCH_GMBUS0,
+ 1 => Registers.PCH_GMBUS1,
+ 2 => Registers.PCH_GMBUS2,
+ 3 => Registers.PCH_GMBUS3,
+ 4 => Registers.PCH_GMBUS4,
+ 5 => Registers.PCH_GMBUS5)
+ else
+ (0 => Registers.GMCH_GMBUS0,
+ 1 => Registers.GMCH_GMBUS1,
+ 2 => Registers.GMCH_GMBUS2,
+ 3 => Registers.GMCH_GMBUS3,
+ 4 => Registers.GMCH_GMBUS4,
+ 5 => Registers.GMCH_GMBUS5));
+
function GMBUS1_TOTAL_BYTE_COUNT
(Count : HW.GFX.I2C.Transfer_Length)
return Word32 is
@@ -109,7 +125,7 @@
is
GMBUS2 : Word32;
begin
- Registers.Read (Registers.PCH_GMBUS2, GMBUS2);
+ Registers.Read (GMBUS_Regs(2), GMBUS2);
Result := (GMBUS2 and (GMBUS2_HARDWARE_WAIT_PHASE or
GMBUS2_SLAVE_STALL_TIMEOUT_ERROR or
GMBUS2_GMBUS_INTERRUPT_STATUS or
@@ -120,9 +136,9 @@
begin
pragma Debug (Debug.Put_Line (GNAT.Source_Info.Enclosing_Entity));
- Registers.Write (Registers.PCH_GMBUS1, GMBUS1_SOFTWARE_CLEAR_INTERRUPT);
- Registers.Write (Registers.PCH_GMBUS1, 0);
- Registers.Write (Registers.PCH_GMBUS0, GMBUS0_PIN_PAIR_SELECT_NONE);
+ Registers.Write (GMBUS_Regs(1), GMBUS1_SOFTWARE_CLEAR_INTERRUPT);
+ Registers.Write (GMBUS_Regs(1), 0);
+ Registers.Write (GMBUS_Regs(0), GMBUS0_PIN_PAIR_SELECT_NONE);
GMBUS_Ready (Success);
end Reset_GMBUS;
@@ -138,7 +154,7 @@
end if;
-- TODO: Refactor + check for timeout.
- Registers.Wait_Unset_Mask (Registers.PCH_GMBUS2, GMBUS2_INUSE);
+ Registers.Wait_Unset_Mask (GMBUS_Regs(2), GMBUS2_INUSE);
GMBUS_Ready (Success);
if not Success then
@@ -147,14 +163,14 @@
if Success then
Registers.Write
- (Register => Registers.PCH_GMBUS0,
+ (Register => GMBUS_Regs(0),
Value => GMBUS0_GMBUS_RATE_SELECT_100KHZ or
GMBUS0_PIN_PAIR_SELECT (Port));
Registers.Write
- (Register => Registers.PCH_GMBUS4,
+ (Register => GMBUS_Regs(4),
Value => 0);
Registers.Write
- (Register => Registers.PCH_GMBUS5,
+ (Register => GMBUS_Regs(5),
Value => 0);
end if;
end Init_GMBUS;
@@ -164,10 +180,10 @@
begin
pragma Debug (Debug.Put_Line (GNAT.Source_Info.Enclosing_Entity));
- Registers.Write (Registers.PCH_GMBUS0, GMBUS0_PIN_PAIR_SELECT_NONE);
+ Registers.Write (GMBUS_Regs(0), GMBUS0_PIN_PAIR_SELECT_NONE);
-- Clear INUSE. TODO: Don't do it, if timeout occured (see above).
- Registers.Write (Registers.PCH_GMBUS2, GMBUS2_INUSE);
+ Registers.Write (GMBUS_Regs(2), GMBUS2_INUSE);
if Config.Ungate_GMBUS_Unit_Level then
Registers.Unset_Mask
@@ -196,7 +212,7 @@
Init_GMBUS (Port, Success);
if Success then
Registers.Write
- (Register => Registers.PCH_GMBUS1,
+ (Register => GMBUS_Regs(1),
Value => GMBUS1_SOFTWARE_READY or
GMBUS1_BUS_CYCLE_INDEX or
GMBUS1_BUS_CYCLE_WAIT or
@@ -206,17 +222,17 @@
while Success and then Transfered < Length loop
Registers.Wait_Set_Mask
- (Register => Registers.PCH_GMBUS2,
+ (Register => GMBUS_Regs(2),
Mask => GMBUS2_HARDWARE_READY,
TOut_MS => 55);
- Registers.Read (Registers.PCH_GMBUS2, GMBUS2);
+ Registers.Read (GMBUS_Regs(2), GMBUS2);
Success := (GMBUS2 and GMBUS2_HARDWARE_READY) /= 0 and
(GMBUS2 and GMBUS2_NAK_INDICATOR) = 0;
if Success then
Current := GFX.I2C.Transfer_Length'Min (Length, Transfered + 4);
- Registers.Read (Registers.PCH_GMBUS3, GMBUS3);
+ Registers.Read (GMBUS_Regs(3), GMBUS3);
for I in Transfered .. Current - 1 loop
Data (I) := Byte (GMBUS3 and 16#ff#);
GMBUS3 := Shift_Right (GMBUS3, 8);
@@ -226,13 +242,13 @@
end loop;
if Success then
Registers.Wait_Set_Mask
- (Register => Registers.PCH_GMBUS2,
+ (Register => GMBUS_Regs(2),
Mask => GMBUS2_HARDWARE_WAIT_PHASE);
Registers.Write
- (Register => Registers.PCH_GMBUS1,
+ (Register => GMBUS_Regs(1),
Value => GMBUS1_SOFTWARE_READY or GMBUS1_BUS_CYCLE_STOP);
Registers.Wait_Unset_Mask
- (Register => Registers.PCH_GMBUS2,
+ (Register => GMBUS_Regs(2),
Mask => GMBUS2_GMBUS_ACTIVE);
end if;
end if;
diff --git a/common/hw-gfx-gma-registers.ads b/common/hw-gfx-gma-registers.ads
index 1515fab..37e62e8 100644
--- a/common/hw-gfx-gma-registers.ads
+++ b/common/hw-gfx-gma-registers.ads
@@ -44,6 +44,12 @@
ARB_MODE,
HWS_PGA,
GAM_ECOCHK,
+ GMCH_GMBUS0,
+ GMCH_GMBUS1,
+ GMCH_GMBUS2,
+ GMCH_GMBUS3,
+ GMCH_GMBUS4,
+ GMCH_GMBUS5,
MBCTL,
UCGCTL1,
UCGCTL2,
@@ -1347,6 +1353,12 @@
SDEIER => 16#0c_400c# / Register_Width,
-- I2C stuff
+ GMCH_GMBUS0 => 16#00_5100# / Register_Width,
+ GMCH_GMBUS1 => 16#00_5104# / Register_Width,
+ GMCH_GMBUS2 => 16#00_5108# / Register_Width,
+ GMCH_GMBUS3 => 16#00_510c# / Register_Width,
+ GMCH_GMBUS4 => 16#00_5110# / Register_Width,
+ GMCH_GMBUS5 => 16#00_5120# / Register_Width,
PCH_GMBUS0 => 16#0c_5100# / Register_Width,
PCH_GMBUS1 => 16#0c_5104# / Register_Width,
PCH_GMBUS2 => 16#0c_5108# / Register_Width,
--
To view, visit https://review.coreboot.org/25405
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: Id5d115c7a4711f634171e6e163439ebab4ee6076
Gerrit-Change-Number: 25405
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/5877e31f/attachment-0001.html>
More information about the coreboot-gerrit
mailing list