Nico Huber has submitted this change. ( https://review.coreboot.org/c/libgfxinit/+/67492?usp=email )
Change subject: gma i2c: Update for Tiger Lake ......................................................................
gma i2c: Update for Tiger Lake
Tiger Lake GMBUS is different only in the pin pairs because it has a different set of ports.
Signed-off-by: Tim Wawrzynczak twawrzynczak@chromium.org Change-Id: I46248b9c55948aa9bc4c047624c7dc3f62dba766 Reviewed-on: https://review.coreboot.org/c/libgfxinit/+/67492 Tested-by: Nico Huber nico.h@gmx.de Reviewed-by: Nico Huber nico.h@gmx.de --- M common/hw-gfx-gma-config.ads.template M common/hw-gfx-gma-i2c.adb 2 files changed, 27 insertions(+), 3 deletions(-)
Approvals: Nico Huber: Verified; Looks good to me, approved
diff --git a/common/hw-gfx-gma-config.ads.template b/common/hw-gfx-gma-config.ads.template index a2bc2e8..b438c40 100644 --- a/common/hw-gfx-gma-config.ads.template +++ b/common/hw-gfx-gma-config.ads.template @@ -275,7 +275,7 @@ (not Haswell_On or else (CPU_Haswell and Is_ULX));
----------- GMBUS: ----------- - Ungate_GMBUS_Unit_Level : <genbool> := Skylake_On; + Ungate_GMBUS_Unit_Level : <genbool> := Skylake_On and not Tigerlake_On; GMBUS_Alternative_Pins : <genbool> := Gen_Broxton or Cannon_Point_On; Has_PCH_GMBUS : <genbool> := Ironlake_On;
diff --git a/common/hw-gfx-gma-i2c.adb b/common/hw-gfx-gma-i2c.adb index 67e90ab..29ce9c1 100644 --- a/common/hw-gfx-gma-i2c.adb +++ b/common/hw-gfx-gma-i2c.adb @@ -27,10 +27,12 @@
PCH_DSPCLK_GATE_D_GMBUS_UNIT_LVL : constant := 1 * 2 ** 31;
+ function GMBUS0_PIN_PAIR_SELECT_MASK return Word32 is + (if Config.Has_Type_C_Ports then 15 * 2 ** 0 else 7 * 2 ** 0); + GMBUS0_GMBUS_RATE_SELECT_MASK : constant := 7 * 2 ** 8; GMBUS0_GMBUS_RATE_SELECT_100KHZ : constant := 0 * 2 ** 8; GMBUS0_GMBUS_RATE_SELECT_50KHZ : constant := 1 * 2 ** 8; - GMBUS0_PIN_PAIR_SELECT_MASK : constant := 7 * 2 ** 0; GMBUS0_PIN_PAIR_SELECT_NONE : constant := 0 * 2 ** 0; GMBUS0_PIN_PAIR_SELECT_DAC : constant := 2 * 2 ** 0; GMBUS0_PIN_PAIR_SELECT_LVDS : constant := 3 * 2 ** 0; @@ -42,6 +44,16 @@ GMBUS0_PIN_PAIR_SELECT_BXT_B : constant := 1 * 2 ** 0; GMBUS0_PIN_PAIR_SELECT_BXT_C : constant := 2 * 2 ** 0; GMBUS0_PIN_PAIR_SELECT_BXT_D : constant := 3 * 2 ** 0; + -- Tiger Lake and later use even different pins + GMBUS0_PIN_PAIR_SELECT_TGL_1 : constant := 1 * 2 ** 0; + GMBUS0_PIN_PAIR_SELECT_TGL_2 : constant := 2 * 2 ** 0; + GMBUS0_PIN_PAIR_SELECT_TGL_3 : constant := 3 * 2 ** 0; + GMBUS0_PIN_PAIR_SELECT_TGL_TC1 : constant := 9 * 2 ** 0; + GMBUS0_PIN_PAIR_SELECT_TGL_TC2 : constant := 10 * 2 ** 0; + GMBUS0_PIN_PAIR_SELECT_TGL_TC3 : constant := 11 * 2 ** 0; + GMBUS0_PIN_PAIR_SELECT_TGL_TC4 : constant := 12 * 2 ** 0; + GMBUS0_PIN_PAIR_SELECT_TGL_TC5 : constant := 13 * 2 ** 0; + GMBUS0_PIN_PAIR_SELECT_TGL_TC6 : constant := 14 * 2 ** 0;
GMBUS1_SOFTWARE_CLEAR_INTERRUPT : constant := 1 * 2 ** 31; GMBUS1_SOFTWARE_READY : constant := 1 * 2 ** 30; @@ -106,7 +118,19 @@ function GMBUS0_PIN_PAIR_SELECT (Port : PCH_Port) return Word32 is begin return - (if Config.GMBUS_Alternative_Pins then + (if Config.Has_Type_C_Ports then + (case Port is + when PCH_HDMI_A => GMBUS0_PIN_PAIR_SELECT_TGL_1, + when PCH_HDMI_B => GMBUS0_PIN_PAIR_SELECT_TGL_2, + when PCH_HDMI_C => GMBUS0_PIN_PAIR_SELECT_TGL_3, + when PCH_TC1 => GMBUS0_PIN_PAIR_SELECT_TGL_TC1, + when PCH_TC2 => GMBUS0_PIN_PAIR_SELECT_TGL_TC2, + when PCH_TC3 => GMBUS0_PIN_PAIR_SELECT_TGL_TC3, + when PCH_TC4 => GMBUS0_PIN_PAIR_SELECT_TGL_TC4, + when PCH_TC5 => GMBUS0_PIN_PAIR_SELECT_TGL_TC5, + when PCH_TC6 => GMBUS0_PIN_PAIR_SELECT_TGL_TC6, + when others => GMBUS0_PIN_PAIR_SELECT_NONE) + elsif Config.GMBUS_Alternative_Pins then (case Port is when PCH_HDMI_B => GMBUS0_PIN_PAIR_SELECT_BXT_B, when PCH_HDMI_C => GMBUS0_PIN_PAIR_SELECT_BXT_C,