Nico Huber merged this change.

View Change

Approvals: Nico Huber: Verified Thomas Heijligen: Looks good to me, but someone else must approve Angel Pons: Looks good to me, approved
gma: Add Kaby Lake support

Including some weird Amber Lake Y parts that are treated like Kaby Lake
in Linux' i915.

Only differences to Skylake in the DDI output buffer tuning.

Change-Id: Ice05e07b016cebc7258a9790e38e079e63227a4b
Signed-off-by: Nico Huber <nico.h@gmx.de>
Reviewed-on: https://review.coreboot.org/c/libgfxinit/+/28763
Reviewed-by: Thomas Heijligen <src@posteo.de>
Reviewed-by: Angel Pons <th3fanbus@gmail.com>
---
M common/hw-gfx-gma-config.ads.template
M common/hw-gfx-gma.adb
M common/hw-gfx-gma.ads
M common/skylake/hw-gfx-gma-connectors-ddi-buffers.adb
4 files changed, 77 insertions(+), 16 deletions(-)

diff --git a/common/hw-gfx-gma-config.ads.template b/common/hw-gfx-gma-config.ads.template
index 03b4e47..fc14a46 100644
--- a/common/hw-gfx-gma-config.ads.template
+++ b/common/hw-gfx-gma-config.ads.template
@@ -31,7 +31,7 @@
when Ironlake => Ivybridge,
when Haswell => Broadwell,
when Broxton => Broxton,
- when Skylake => Skylake);
+ when Skylake => Kabylake);
CPU_Var_Last : constant CPU_Variant :=
(case Gen is
when Haswell | Skylake => ULX,
@@ -114,6 +114,8 @@
CPU_Ivybridge : <ilkbool> := Gen_Ironlake and then CPU = Ivybridge;
CPU_Haswell : <hswbool> := Gen_Haswell and then CPU = Haswell;
CPU_Broadwell : <hswbool> := Gen_Haswell and then CPU = Broadwell;
+ CPU_Skylake : <sklbool> := Gen_Skylake and then CPU = Skylake;
+ CPU_Kabylake : <sklbool> := Gen_Skylake and then CPU = Kabylake;

Sandybridge_On : <ilkbool> :=
((Gen_Ironlake and then CPU >= Sandybridge) or Haswell_On);
@@ -205,6 +207,7 @@
Has_DDI_Buffer_Trans : <genbool> := Haswell_On and not Has_DDI_PHYs;
Has_Low_Voltage_Swing : <genbool> := Broxton_On;
Has_Iboost_Config : <genbool> := Skylake_On;
+ Use_KBL_DDI_Buf_Trans : <sklbool> := CPU_Kabylake;

Need_DP_Aux_Mutex : <genbool> := False; -- Skylake & (PSR | GTC)

@@ -257,7 +260,8 @@

----------------------------------------------------------------------------

- DDI_Buffer_Iboost : <hswsklvar> Natural := (if Is_ULX then 3 else 1);
+ DDI_Buffer_Iboost : <hswsklvar> Natural :=
+ (if Is_ULX or (CPU_Kabylake and Is_ULT) then 3 else 1);

Default_DDI_HDMI_Buffer_Translation : <hswvar> DDI_HDMI_Buf_Trans_Range :=
(if CPU_Haswell then 6
@@ -378,6 +382,20 @@
(Device_Id and 16#ffcf#) = 16#190b# or
(Device_Id and 16#ffcf#) = 16#190d#);

+ function Is_Kaby_Lake_Y (Device_Id : Word16) return Boolean is
+ ((Device_Id and 16#ffcf#) = 16#5905# or
+ (Device_Id and 16#ffcf#) = 16#590e#);
+ function Is_Kaby_Lake_Y_AML (Device_Id : Word16) return Boolean is
+ (Device_Id = 16#591c# or Device_Id = 16#87c0#);
+ function Is_Kaby_Lake_U (Device_Id : Word16) return Boolean is
+ ((Device_Id and 16#ffcd#) = 16#5901# or
+ (Device_Id and 16#ffce#) = 16#5906#);
+ function Is_Kaby_Lake (Device_Id : Word16) return Boolean is
+ ((Device_Id and 16#ffc7#) = 16#5902# or
+ (Device_Id and 16#ffcf#) = 16#5908# or
+ (Device_Id and 16#ffcf#) = 16#590b# or
+ (Device_Id and 16#ffcf#) = 16#590d#);
+
function Is_GPU (Device_Id : Word16; CPU : CPU_Type; CPU_Var : CPU_Variant)
return Boolean is
(case CPU is
@@ -398,7 +416,12 @@
when Skylake => (case CPU_Var is
when Normal => Is_Skylake (Device_Id),
when ULT => Is_Skylake_U (Device_Id),
- when ULX => Is_Skylake_Y (Device_Id)));
+ when ULX => Is_Skylake_Y (Device_Id)),
+ when Kabylake => (case CPU_Var is
+ when Normal => Is_Kaby_Lake (Device_Id),
+ when ULT => Is_Kaby_Lake_U (Device_Id),
+ when ULX => Is_Kaby_Lake_Y (Device_Id) or
+ Is_Kaby_Lake_Y_AML (Device_Id)));

function Compatible_GPU (Device_Id : Word16) return Boolean is
(Is_GPU (Device_Id, CPU, CPU_Var));
diff --git a/common/hw-gfx-gma.adb b/common/hw-gfx-gma.adb
index 171d224..15d234a 100644
--- a/common/hw-gfx-gma.adb
+++ b/common/hw-gfx-gma.adb
@@ -405,7 +405,8 @@
end case;
Success :=
((Config.Gen_Broxton and Audio_VID_DID = 16#8086_280a#) or
- (Config.Gen_Skylake and Audio_VID_DID = 16#8086_2809#) or
+ (Config.CPU_Kabylake and Audio_VID_DID = 16#8086_280b#) or
+ (Config.CPU_Skylake and Audio_VID_DID = 16#8086_2809#) or
(Config.CPU_Broadwell and Audio_VID_DID = 16#8086_2808#) or
(Config.CPU_Haswell and Audio_VID_DID = 16#8086_2807#) or
((Config.CPU_Ivybridge or
diff --git a/common/hw-gfx-gma.ads b/common/hw-gfx-gma.ads
index 40382f8..b9c627b 100644
--- a/common/hw-gfx-gma.ads
+++ b/common/hw-gfx-gma.ads
@@ -43,7 +43,8 @@
Haswell,
Broadwell,
Broxton,
- Skylake);
+ Skylake,
+ Kabylake);

type CPU_Variant is (Normal, ULT, ULX);

diff --git a/common/skylake/hw-gfx-gma-connectors-ddi-buffers.adb b/common/skylake/hw-gfx-gma-connectors-ddi-buffers.adb
index 6ab755b..4c5839e 100644
--- a/common/skylake/hw-gfx-gma-connectors-ddi-buffers.adb
+++ b/common/skylake/hw-gfx-gma-connectors-ddi-buffers.adb
@@ -99,6 +99,42 @@
16#8000_5012#, 16#0000_00c0#,
others => 0);

+ Kaby_Lake_Trans_DP : constant Buf_Trans_Array :=
+ (16#0000_2016#, 16#0000_00a0#,
+ 16#0000_5012#, 16#0000_009b#,
+ 16#0000_7011#, 16#0000_0088#,
+ 16#8000_9010#, 16#0000_00c0#,
+ 16#0000_2016#, 16#0000_009b#,
+ 16#0000_5012#, 16#0000_0088#,
+ 16#8000_7011#, 16#0000_00c0#,
+ 16#0000_2016#, 16#0000_0097#,
+ 16#8000_5012#, 16#0000_00c0#,
+ others => 0);
+
+ Kaby_Lake_U_Trans_DP : constant Buf_Trans_Array :=
+ (16#0000_201b#, 16#0000_00a1#,
+ 16#0000_5012#, 16#0000_0088#,
+ 16#8000_7011#, 16#0000_00cd#,
+ 16#8000_9010#, 16#0000_00c0#,
+ 16#0000_201b#, 16#0000_009d#,
+ 16#8000_5012#, 16#0000_00c0#,
+ 16#8000_7011#, 16#0000_00c0#,
+ 16#0000_2016#, 16#0000_004f#,
+ 16#8000_5012#, 16#0000_00c0#,
+ others => 0);
+
+ Kaby_Lake_Y_Trans_DP : constant Buf_Trans_Array :=
+ (16#0000_1017#, 16#0000_00a1#,
+ 16#0000_5012#, 16#0000_0088#,
+ 16#8000_7011#, 16#0000_00cd#,
+ 16#8000_800f#, 16#0000_00c0#,
+ 16#0000_1017#, 16#0000_009d#,
+ 16#8000_5012#, 16#0000_00c0#,
+ 16#8000_7011#, 16#0000_00c0#,
+ 16#0000_1017#, 16#0000_004c#,
+ 16#8000_5012#, 16#0000_00c0#,
+ others => 0);
+
Skylake_Trans_HDMI : constant HDMI_Buf_Trans_Array :=
((16#0000_0018#, 16#0000_00ac#),
(16#0000_5012#, 16#0000_009d#),
@@ -138,18 +174,18 @@
else Config.Default_DDI_HDMI_Buffer_Translation);
begin
Trans :=
- (if Config.Is_ULX then
- (if DDIA_Low_Voltage_Swing
- then Skylake_Y_Trans_EDP
- else Skylake_Y_Trans_DP)
- elsif Config.Is_ULT then
- (if DDIA_Low_Voltage_Swing
- then Skylake_U_Trans_EDP
- else Skylake_U_Trans_DP)
+ (if DDIA_Low_Voltage_Swing then
+ (if Config.Is_ULX then Skylake_Y_Trans_EDP
+ elsif Config.Is_ULT then Skylake_U_Trans_EDP
+ else Skylake_Trans_EDP)
+ elsif not Config.Use_KBL_DDI_Buf_Trans then
+ (if Config.Is_ULX then Skylake_Y_Trans_DP
+ elsif Config.Is_ULT then Skylake_U_Trans_DP
+ else Skylake_Trans_DP)
else
- (if DDIA_Low_Voltage_Swing
- then Skylake_Trans_EDP
- else Skylake_Trans_DP));
+ (if Config.Is_ULX then Kaby_Lake_Y_Trans_DP
+ elsif Config.Is_ULT then Kaby_Lake_U_Trans_DP
+ else Kaby_Lake_Trans_DP));
if not DDIA_Low_Voltage_Swing then
if Config.Is_ULX then
Trans (18) := Skylake_Y_Trans_HDMI (HDMI_Trans).Trans1;

To view, visit change 28763. To unsubscribe, or for help writing mail filters, visit settings.

Gerrit-Project: libgfxinit
Gerrit-Branch: master
Gerrit-Change-Id: Ice05e07b016cebc7258a9790e38e079e63227a4b
Gerrit-Change-Number: 28763
Gerrit-PatchSet: 8
Gerrit-Owner: Nico Huber <nico.h@gmx.de>
Gerrit-Reviewer: Angel Pons <th3fanbus@gmail.com>
Gerrit-Reviewer: Arthur Heymans <arthur@aheymans.xyz>
Gerrit-Reviewer: Martin Roth <martinroth@google.com>
Gerrit-Reviewer: Nico Huber <nico.h@gmx.de>
Gerrit-Reviewer: Patrick Georgi <pgeorgi@google.com>
Gerrit-Reviewer: Patrick Rudolph <siro@das-labor.org>
Gerrit-Reviewer: Thomas Heijligen <src@posteo.de>
Gerrit-CC: Paul Menzel <paulepanter@users.sourceforge.net>
Gerrit-MessageType: merged