blob: 4a24996b2437882d5316fbc185b2cd6000dda800 [file] [log] [blame]
Nico Huber7ad2d652016-12-07 15:19:32 +01001--
Nico Huberabb16d92018-05-29 01:44:26 +02002-- Copyright (C) 2015-2018 secunet Security Networks AG
Nico Huber7ad2d652016-12-07 15:19:32 +01003--
4-- This program is free software; you can redistribute it and/or modify
5-- it under the terms of the GNU General Public License as published by
6-- the Free Software Foundation; either version 2 of the License, or
7-- (at your option) any later version.
8--
9-- This program is distributed in the hope that it will be useful,
10-- but WITHOUT ANY WARRANTY; without even the implied warranty of
11-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12-- GNU General Public License for more details.
13--
14
15with HW.GFX.GMA.Registers;
Arthur Heymans636390c2018-03-28 16:52:13 +020016with HW.GFX.GMA.Config;
Nico Huber7ad2d652016-12-07 15:19:32 +010017
18private package HW.GFX.GMA.Transcoder
19is
20
21 procedure Setup (Pipe : Pipe_Index; Port_Cfg : Port_Config);
Nico Huberabb16d92018-05-29 01:44:26 +020022 procedure On
23 (Pipe : Pipe_Index;
24 Port_Cfg : Port_Config;
25 Dither : Boolean;
26 Scale : Boolean);
Nico Huber7ad2d652016-12-07 15:19:32 +010027
28 procedure Off (Pipe : Pipe_Index);
29 procedure Clk_Off (Pipe : Pipe_Index);
30
Angel Pons3f86b0b2020-07-18 00:22:32 +020031 procedure PSR_Off;
32
Nico Huber7ad2d652016-12-07 15:19:32 +010033 function BPC_Conf (BPC : BPC_Type; Dither : Boolean) return Word32;
34
35private
36
37 type Transcoder_Index is (Trans_EDP, Trans_A, Trans_B, Trans_C);
38
39 type Transcoder_Regs is
40 record
41 HTOTAL : Registers.Registers_Index;
42 HBLANK : Registers.Registers_Index;
43 HSYNC : Registers.Registers_Index;
44 VTOTAL : Registers.Registers_Index;
45 VBLANK : Registers.Registers_Index;
46 VSYNC : Registers.Registers_Index;
47 CONF : Registers.Registers_Index;
48 DATA_M1 : Registers.Registers_Index;
49 DATA_N1 : Registers.Registers_Index;
50 LINK_M1 : Registers.Registers_Index;
51 LINK_N1 : Registers.Registers_Index;
52 DDI_FUNC_CTL : Registers.Registers_Index;
53 MSA_MISC : Registers.Registers_Index;
54 CLK_SEL : Registers.Registers_Invalid_Index;
55 end record;
56
57 type Transcoder_Array is array (Transcoder_Index) of Transcoder_Regs;
58
Arthur Heymans636390c2018-03-28 16:52:13 +020059 PIPE_DATA_M1 : constant array (0 .. 1) of Registers.Registers_Index :=
60 (if Config.Has_GMCH_DP_Transcoder then
61 (0 => Registers.PIPEA_GMCH_DATA_M,
62 1 => Registers.PIPEB_GMCH_DATA_M)
63 else
64 (0 => Registers.PIPEA_DATA_M1,
65 1 => Registers.PIPEB_DATA_M1));
66 PIPE_DATA_N1 : constant array (0 .. 1) of Registers.Registers_Index :=
67 (if Config.Has_GMCH_DP_Transcoder then
68 (0 => Registers.PIPEA_GMCH_DATA_N,
69 1 => Registers.PIPEB_GMCH_DATA_N)
70 else
71 (0 => Registers.PIPEA_DATA_N1,
72 1 => Registers.PIPEB_DATA_N1));
73 PIPE_LINK_M1 : constant array (0 .. 1) of Registers.Registers_Index :=
74 (if Config.Has_GMCH_DP_Transcoder then
75 (0 => Registers.PIPEA_GMCH_LINK_M,
76 1 => Registers.PIPEB_GMCH_LINK_M)
77 else
78 (0 => Registers.PIPEA_LINK_M1,
79 1 => Registers.PIPEB_LINK_M1));
80 PIPE_LINK_N1 : constant array (0 .. 1) of Registers.Registers_Index :=
81 (if Config.Has_GMCH_DP_Transcoder then
82 (0 => Registers.PIPEA_GMCH_LINK_N,
83 1 => Registers.PIPEB_GMCH_LINK_N)
84 else
85 (0 => Registers.PIPEA_LINK_N1,
86 1 => Registers.PIPEB_LINK_N1));
87
Nico Huber7ad2d652016-12-07 15:19:32 +010088 Transcoders : constant Transcoder_Array :=
89 (Trans_EDP =>
90 (HTOTAL => Registers.HTOTAL_EDP,
91 HBLANK => Registers.HBLANK_EDP,
92 HSYNC => Registers.HSYNC_EDP,
93 VTOTAL => Registers.VTOTAL_EDP,
94 VBLANK => Registers.VBLANK_EDP,
95 VSYNC => Registers.VSYNC_EDP,
96 CONF => Registers.PIPE_EDP_CONF,
97 DATA_M1 => Registers.PIPE_EDP_DATA_M1,
98 DATA_N1 => Registers.PIPE_EDP_DATA_N1,
99 LINK_M1 => Registers.PIPE_EDP_LINK_M1,
100 LINK_N1 => Registers.PIPE_EDP_LINK_N1,
101 DDI_FUNC_CTL => Registers.PIPE_EDP_DDI_FUNC_CTL,
102 MSA_MISC => Registers.PIPE_EDP_MSA_MISC,
103 CLK_SEL => Registers.Invalid_Register),
104 Trans_A =>
105 (HTOTAL => Registers.HTOTAL_A,
106 HBLANK => Registers.HBLANK_A,
107 HSYNC => Registers.HSYNC_A,
108 VTOTAL => Registers.VTOTAL_A,
109 VBLANK => Registers.VBLANK_A,
110 VSYNC => Registers.VSYNC_A,
111 CONF => Registers.PIPEACONF,
Arthur Heymans636390c2018-03-28 16:52:13 +0200112 DATA_M1 => PIPE_DATA_M1 (0),
113 DATA_N1 => PIPE_DATA_N1 (0),
114 LINK_M1 => PIPE_LINK_M1 (0),
115 LINK_N1 => PIPE_LINK_N1 (0),
Nico Huber7ad2d652016-12-07 15:19:32 +0100116 DDI_FUNC_CTL => Registers.PIPEA_DDI_FUNC_CTL,
117 MSA_MISC => Registers.PIPEA_MSA_MISC,
118 CLK_SEL => Registers.TRANSA_CLK_SEL),
119 Trans_B =>
120 (HTOTAL => Registers.HTOTAL_B,
121 HBLANK => Registers.HBLANK_B,
122 HSYNC => Registers.HSYNC_B,
123 VTOTAL => Registers.VTOTAL_B,
124 VBLANK => Registers.VBLANK_B,
125 VSYNC => Registers.VSYNC_B,
126 CONF => Registers.PIPEBCONF,
Arthur Heymans636390c2018-03-28 16:52:13 +0200127 DATA_M1 => PIPE_DATA_M1 (1),
128 DATA_N1 => PIPE_DATA_N1 (1),
129 LINK_M1 => PIPE_LINK_M1 (1),
130 LINK_N1 => PIPE_LINK_N1 (1),
Nico Huber7ad2d652016-12-07 15:19:32 +0100131 DDI_FUNC_CTL => Registers.PIPEB_DDI_FUNC_CTL,
132 MSA_MISC => Registers.PIPEB_MSA_MISC,
133 CLK_SEL => Registers.TRANSB_CLK_SEL),
134 Trans_C =>
135 (HTOTAL => Registers.HTOTAL_C,
136 HBLANK => Registers.HBLANK_C,
137 HSYNC => Registers.HSYNC_C,
138 VTOTAL => Registers.VTOTAL_C,
139 VBLANK => Registers.VBLANK_C,
140 VSYNC => Registers.VSYNC_C,
141 CONF => Registers.PIPECCONF,
142 DATA_M1 => Registers.PIPEC_DATA_M1,
143 DATA_N1 => Registers.PIPEC_DATA_N1,
144 LINK_M1 => Registers.PIPEC_LINK_M1,
145 LINK_N1 => Registers.PIPEC_LINK_N1,
146 DDI_FUNC_CTL => Registers.PIPEC_DDI_FUNC_CTL,
147 MSA_MISC => Registers.PIPEC_MSA_MISC,
148 CLK_SEL => Registers.TRANSC_CLK_SEL));
149
150end HW.GFX.GMA.Transcoder;