coreboot-libre-fam15h-rdimm/3rdparty/libgfxinit/common/skylake/hw-gfx-gma-connectors-ddi-b...

201 lines
7.0 KiB
Ada

--
-- Copyright (C) 2017, 2019 secunet Security Networks AG
--
-- This program is free software; you can redistribute it and/or modify
-- it under the terms of the GNU General Public License as published by
-- the Free Software Foundation; either version 2 of the License, or
-- (at your option) any later version.
--
-- This program is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-- GNU General Public License for more details.
--
with HW.GFX.GMA.Config;
package body HW.GFX.GMA.Connectors.DDI.Buffers
is
subtype Skylake_HDMI_Range is DDI_HDMI_Buf_Trans_Range range 0 .. 10;
type HDMI_Buf_Trans is record
Trans1 : Word32;
Trans2 : Word32;
end record;
type HDMI_Buf_Trans_Array is array (Skylake_HDMI_Range) of HDMI_Buf_Trans;
----------------------------------------------------------------------------
Skylake_Trans_EDP : constant Buf_Trans_Array :=
(16#0000_0018#, 16#0000_00a8#,
16#0000_4013#, 16#0000_00a9#,
16#0000_7011#, 16#0000_00a2#,
16#0000_9010#, 16#0000_009c#,
16#0000_0018#, 16#0000_00a9#,
16#0000_6013#, 16#0000_00a2#,
16#0000_7011#, 16#0000_00a6#,
16#0000_0018#, 16#0000_00ab#,
16#0000_7013#, 16#0000_009f#,
16#0000_0018#, 16#0000_00df#);
Skylake_U_Trans_EDP : constant Buf_Trans_Array :=
(16#0000_0018#, 16#0000_00a8#,
16#0000_4013#, 16#0000_00a9#,
16#0000_7011#, 16#0000_00a2#,
16#0000_9010#, 16#0000_009c#,
16#0000_0018#, 16#0000_00a9#,
16#0000_6013#, 16#0000_00a2#,
16#0000_7011#, 16#0000_00a6#,
16#0000_2016#, 16#0000_00ab#,
16#0000_5013#, 16#0000_009f#,
16#0000_0018#, 16#0000_00df#);
Skylake_Y_Trans_EDP : constant Buf_Trans_Array :=
(16#0000_0018#, 16#0000_00a8#,
16#0000_4013#, 16#0000_00ab#,
16#0000_7011#, 16#0000_00a4#,
16#0000_9010#, 16#0000_00df#,
16#0000_0018#, 16#0000_00aa#,
16#0000_6013#, 16#0000_00a4#,
16#0000_7011#, 16#0000_009d#,
16#0000_0018#, 16#0000_00a0#,
16#0000_6012#, 16#0000_00df#,
16#0000_0018#, 16#0000_008a#);
Skylake_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_00df#,
16#8000_5012#, 16#0000_00c0#,
others => 0);
Skylake_U_Trans_DP : constant Buf_Trans_Array :=
(16#0000_201b#, 16#0000_00a2#,
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_0088#,
16#8000_5012#, 16#0000_00c0#,
others => 0);
Skylake_Y_Trans_DP : constant Buf_Trans_Array :=
(16#0000_0018#, 16#0000_00a2#,
16#0000_5012#, 16#0000_0088#,
16#8000_7011#, 16#0000_00cd#,
16#8000_9010#, 16#0000_00c0#,
16#0000_0018#, 16#0000_009d#,
16#8000_5012#, 16#0000_00c0#,
16#8000_7011#, 16#0000_00c0#,
16#0000_0018#, 16#0000_0088#,
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#),
(16#0000_7011#, 16#0000_0088#),
(16#0000_0018#, 16#0000_00a1#),
(16#0000_0018#, 16#0000_0098#),
(16#0000_4013#, 16#0000_0088#),
(16#8000_6012#, 16#0000_00cd#),
(16#0000_0018#, 16#0000_00df#),
(16#8000_3015#, 16#0000_00cd#),
(16#8000_3015#, 16#0000_00c0#),
(16#8000_0018#, 16#0000_00c0#));
Skylake_Y_Trans_HDMI : constant HDMI_Buf_Trans_Array :=
((16#0000_0018#, 16#0000_00a1#),
(16#0000_5012#, 16#0000_00df#),
(16#8000_7011#, 16#0000_00cb#),
(16#0000_0018#, 16#0000_00a4#),
(16#0000_0018#, 16#0000_009d#),
(16#0000_4013#, 16#0000_0080#),
(16#8000_6013#, 16#0000_00c0#),
(16#0000_0018#, 16#0000_008a#),
(16#8000_3015#, 16#0000_00c0#),
(16#8000_3015#, 16#0000_00c0#),
(16#8000_0018#, 16#0000_00c0#));
----------------------------------------------------------------------------
procedure Translations (Trans : out Buf_Trans_Array; Port : Digital_Port)
is
DDIA_Low_Voltage_Swing : constant Boolean :=
Config.EDP_Low_Voltage_Swing and then Port = DIGI_A;
HDMI_Trans : constant Skylake_HDMI_Range :=
(if Config.DDI_HDMI_Buffer_Translation in Skylake_HDMI_Range
then Config.DDI_HDMI_Buffer_Translation
else Config.Default_DDI_HDMI_Buffer_Translation);
begin
Trans :=
(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 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;
Trans (19) := Skylake_Y_Trans_HDMI (HDMI_Trans).Trans2;
else
Trans (18) := Skylake_Trans_HDMI (HDMI_Trans).Trans1;
Trans (19) := Skylake_Trans_HDMI (HDMI_Trans).Trans2;
end if;
end if;
end Translations;
end HW.GFX.GMA.Connectors.DDI.Buffers;