dp aux: Add support for TGL
Just new registers for new ports.
Change-Id: I32ea8d31d70574dbe6bb835eb755087a2cae0b1b
Signed-off-by: Tim Wawrzynczak <twawrzynczak@chromium.org>
Signed-off-by: Jeremy Compostella <jeremy.compostella@intel.com>
Reviewed-on: https://review.coreboot.org/c/libgfxinit/+/70891
Reviewed-by: Nico Huber <nico.h@gmx.de>
Reviewed-by: Sean Rhodes <sean@starlabs.systems>
Tested-by: Nico Huber <nico.h@gmx.de>
diff --git a/common/hw-gfx-gma-connector_info.adb b/common/hw-gfx-gma-connector_info.adb
index d611309..79c42a0 100644
--- a/common/hw-gfx-gma-connector_info.adb
+++ b/common/hw-gfx-gma-connector_info.adb
@@ -27,14 +27,28 @@
Success : out Boolean)
is
DP_Port : constant GMA.DP_Port :=
- (if Port_Cfg.Port = DIGI_A then
- DP_A
+ (if Config.Has_Type_C_Ports
+ then
+ (case Port_Cfg.Port is
+ when DIGI_A => DP_A,
+ when DIGI_B => DP_B,
+ when DIGI_C => DP_C,
+ when DDI_TC1 => DP_D,
+ when DDI_TC2 => DP_E,
+ when DDI_TC3 => DP_F,
+ when DDI_TC4 => DP_G,
+ when DDI_TC5 => DP_H,
+ when DDI_TC6 => DP_I,
+ when others => GMA.DP_Port'First)
else
- (case Port_Cfg.PCH_Port is
- when PCH_DP_B => DP_B,
- when PCH_DP_C => DP_C,
- when PCH_DP_D => DP_D,
- when others => GMA.DP_Port'First));
+ (if Port_Cfg.Port = DIGI_A then
+ DP_A
+ else
+ (case Port_Cfg.PCH_Port is
+ when PCH_DP_B => DP_B,
+ when PCH_DP_C => DP_C,
+ when PCH_DP_D => DP_D,
+ when others => GMA.DP_Port'First)));
begin
pragma Debug (Debug.Put_Line (GNAT.Source_Info.Enclosing_Entity));
diff --git a/common/hw-gfx-gma-dp_aux_request.adb b/common/hw-gfx-gma-dp_aux_request.adb
index 54500e2..27c8d8a 100644
--- a/common/hw-gfx-gma-dp_aux_request.adb
+++ b/common/hw-gfx-gma-dp_aux_request.adb
@@ -54,10 +54,10 @@
type AUX_CH_Data_Regs is new Positive range 1 .. 5;
type AUX_CH_Data_Regs_Array is
- array (AUX_CH_Data_Regs) of Registers.Registers_Index;
+ array (AUX_CH_Data_Regs) of Registers.Registers_Invalid_Index;
type AUX_CH_Registers is record
- CTL : Registers.Registers_Index;
+ CTL : Registers.Registers_Invalid_Index;
DATA : AUX_CH_Data_Regs_Array;
MUTEX : Registers.Registers_Invalid_Index;
end record;
@@ -65,7 +65,90 @@
type AUX_CH_Registers_Array is array (DP_Port) of AUX_CH_Registers;
AUX_CH : constant AUX_CH_Registers_Array :=
- (if Config.Has_PCH_Aux_Channels then
+ (if Config.Has_Type_C_Ports then
+ AUX_CH_Registers_Array'
+ (DP_A => AUX_CH_Registers'
+ (CTL => Registers.DDI_AUX_CTL_A,
+ DATA => AUX_CH_Data_Regs_Array'
+ (1 => Registers.DDI_AUX_DATA_A_1,
+ 2 => Registers.DDI_AUX_DATA_A_2,
+ 3 => Registers.DDI_AUX_DATA_A_3,
+ 4 => Registers.DDI_AUX_DATA_A_4,
+ 5 => Registers.DDI_AUX_DATA_A_5),
+ MUTEX => Registers.Invalid_Register),
+ DP_B => AUX_CH_Registers'
+ (CTL => Registers.DDI_AUX_CTL_B,
+ DATA => AUX_CH_Data_Regs_Array'
+ (1 => Registers.DDI_AUX_DATA_B_1,
+ 2 => Registers.DDI_AUX_DATA_B_2,
+ 3 => Registers.DDI_AUX_DATA_B_3,
+ 4 => Registers.DDI_AUX_DATA_B_4,
+ 5 => Registers.DDI_AUX_DATA_B_5),
+ MUTEX => Registers.Invalid_Register),
+ DP_C => AUX_CH_Registers'
+ (CTL => Registers.DDI_AUX_CTL_C,
+ DATA => AUX_CH_Data_Regs_Array'
+ (1 => Registers.DDI_AUX_DATA_C_1,
+ 2 => Registers.DDI_AUX_DATA_C_2,
+ 3 => Registers.DDI_AUX_DATA_C_3,
+ 4 => Registers.DDI_AUX_DATA_C_4,
+ 5 => Registers.DDI_AUX_DATA_C_5),
+ MUTEX => Registers.Invalid_Register),
+ DP_D => AUX_CH_Registers'
+ (CTL => Registers.DDI_AUX_CTL_USBC1,
+ DATA => AUX_CH_Data_Regs_Array'
+ (1 => Registers.DDI_AUX_DATA_USBC1_1,
+ 2 => Registers.DDI_AUX_DATA_USBC1_2,
+ 3 => Registers.DDI_AUX_DATA_USBC1_3,
+ 4 => Registers.DDI_AUX_DATA_USBC1_4,
+ 5 => Registers.DDI_AUX_DATA_USBC1_5),
+ MUTEX => Registers.Invalid_Register),
+ DP_E => AUX_CH_Registers'
+ (CTL => Registers.DDI_AUX_CTL_USBC2,
+ DATA => AUX_CH_Data_Regs_Array'
+ (1 => Registers.DDI_AUX_DATA_USBC2_1,
+ 2 => Registers.DDI_AUX_DATA_USBC2_2,
+ 3 => Registers.DDI_AUX_DATA_USBC2_3,
+ 4 => Registers.DDI_AUX_DATA_USBC2_4,
+ 5 => Registers.DDI_AUX_DATA_USBC2_5),
+ MUTEX => Registers.Invalid_Register),
+ DP_F => AUX_CH_Registers'
+ (CTL => Registers.DDI_AUX_CTL_USBC3,
+ DATA => AUX_CH_Data_Regs_Array'
+ (1 => Registers.DDI_AUX_DATA_USBC3_1,
+ 2 => Registers.DDI_AUX_DATA_USBC3_2,
+ 3 => Registers.DDI_AUX_DATA_USBC3_3,
+ 4 => Registers.DDI_AUX_DATA_USBC3_4,
+ 5 => Registers.DDI_AUX_DATA_USBC3_5),
+ MUTEX => Registers.Invalid_Register),
+ DP_G => AUX_CH_Registers'
+ (CTL => Registers.DDI_AUX_CTL_USBC4,
+ DATA => AUX_CH_Data_Regs_Array'
+ (1 => Registers.DDI_AUX_DATA_USBC4_1,
+ 2 => Registers.DDI_AUX_DATA_USBC4_2,
+ 3 => Registers.DDI_AUX_DATA_USBC4_3,
+ 4 => Registers.DDI_AUX_DATA_USBC4_4,
+ 5 => Registers.DDI_AUX_DATA_USBC5_5),
+ MUTEX => Registers.Invalid_Register),
+ DP_H => AUX_CH_Registers'
+ (CTL => Registers.DDI_AUX_CTL_USBC5,
+ DATA => AUX_CH_Data_Regs_Array'
+ (1 => Registers.DDI_AUX_DATA_USBC5_1,
+ 2 => Registers.DDI_AUX_DATA_USBC5_2,
+ 3 => Registers.DDI_AUX_DATA_USBC5_3,
+ 4 => Registers.DDI_AUX_DATA_USBC5_4,
+ 5 => Registers.DDI_AUX_DATA_USBC5_5),
+ MUTEX => Registers.Invalid_Register),
+ DP_I => AUX_CH_Registers'
+ (CTL => Registers.DDI_AUX_CTL_USBC6,
+ DATA => AUX_CH_Data_Regs_Array'
+ (1 => Registers.DDI_AUX_DATA_USBC6_1,
+ 2 => Registers.DDI_AUX_DATA_USBC6_2,
+ 3 => Registers.DDI_AUX_DATA_USBC6_3,
+ 4 => Registers.DDI_AUX_DATA_USBC6_4,
+ 5 => Registers.DDI_AUX_DATA_USBC6_5),
+ MUTEX => Registers.Invalid_Register))
+ elsif Config.Has_PCH_Aux_Channels then
AUX_CH_Registers_Array'
(DP_A => AUX_CH_Registers'
(CTL => Registers.DP_AUX_CTL_A,
@@ -102,7 +185,11 @@
3 => Registers.PCH_DP_AUX_DATA_D_3,
4 => Registers.PCH_DP_AUX_DATA_D_4,
5 => Registers.PCH_DP_AUX_DATA_D_5),
- MUTEX => Registers.Invalid_Register))
+ MUTEX => Registers.Invalid_Register),
+ others => AUX_CH_Registers'
+ (DATA => AUX_CH_Data_Regs_Array'
+ (others => Registers.Invalid_Register),
+ others => Registers.Invalid_Register))
else
AUX_CH_Registers_Array'
(DP_A => AUX_CH_Registers'
@@ -140,7 +227,11 @@
3 => Registers.DDI_AUX_DATA_D_3,
4 => Registers.DDI_AUX_DATA_D_4,
5 => Registers.DDI_AUX_DATA_D_5),
- MUTEX => Registers.DDI_AUX_MUTEX_D)));
+ MUTEX => Registers.DDI_AUX_MUTEX_D),
+ others => AUX_CH_Registers'
+ (DATA => AUX_CH_Data_Regs_Array'
+ (others => Registers.Invalid_Register),
+ others => Registers.Invalid_Register)));
----------------------------------------------------------------------------
@@ -245,6 +336,11 @@
Response := (others => 0); -- Don't care
Response_Length := DP_Defs.Aux_Response_Length'First;
+ if not Config.Has_Type_C_Ports and Port > DP_D then
+ Success := False;
+ return;
+ end if;
+
if Config.Need_DP_Aux_Mutex then
Registers.Set_Mask
(Register => AUX_CH (Port).MUTEX,
diff --git a/common/hw-gfx-gma.ads b/common/hw-gfx-gma.ads
index 0454c0a..43e88e1 100644
--- a/common/hw-gfx-gma.ads
+++ b/common/hw-gfx-gma.ads
@@ -329,7 +329,7 @@
----------------------------------------------------------------------------
- type DP_Port is (DP_A, DP_B, DP_C, DP_D);
+ type DP_Port is (DP_A, DP_B, DP_C, DP_D, DP_E, DP_F, DP_G, DP_H, DP_I);
----------------------------------------------------------------------------