xref: /openbmc/linux/drivers/gpu/drm/vc4/vc4_hdmi_regs.h (revision 9a87ffc99ec8eb8d35eed7c4f816d75f5cc9662e)
1311e305fSMaxime Ripard #ifndef _VC4_HDMI_REGS_H_
2311e305fSMaxime Ripard #define _VC4_HDMI_REGS_H_
3311e305fSMaxime Ripard 
414e193b9SMaxime Ripard #include <linux/pm_runtime.h>
514e193b9SMaxime Ripard 
6311e305fSMaxime Ripard #include "vc4_hdmi.h"
7311e305fSMaxime Ripard 
8311e305fSMaxime Ripard #define VC4_HDMI_PACKET_STRIDE			0x24
9311e305fSMaxime Ripard 
10311e305fSMaxime Ripard enum vc4_hdmi_regs {
11311e305fSMaxime Ripard 	VC4_INVALID = 0,
12311e305fSMaxime Ripard 	VC4_HDMI,
13311e305fSMaxime Ripard 	VC4_HD,
1483239891SMaxime Ripard 	VC5_CEC,
1583239891SMaxime Ripard 	VC5_CSC,
1683239891SMaxime Ripard 	VC5_DVP,
1783239891SMaxime Ripard 	VC5_PHY,
1883239891SMaxime Ripard 	VC5_RAM,
1983239891SMaxime Ripard 	VC5_RM,
20311e305fSMaxime Ripard };
21311e305fSMaxime Ripard 
22311e305fSMaxime Ripard enum vc4_hdmi_field {
23311e305fSMaxime Ripard 	HDMI_AUDIO_PACKET_CONFIG,
24311e305fSMaxime Ripard 	HDMI_CEC_CNTRL_1,
25311e305fSMaxime Ripard 	HDMI_CEC_CNTRL_2,
26311e305fSMaxime Ripard 	HDMI_CEC_CNTRL_3,
27311e305fSMaxime Ripard 	HDMI_CEC_CNTRL_4,
28311e305fSMaxime Ripard 	HDMI_CEC_CNTRL_5,
29311e305fSMaxime Ripard 	HDMI_CEC_CPU_CLEAR,
30311e305fSMaxime Ripard 	HDMI_CEC_CPU_MASK_CLEAR,
31311e305fSMaxime Ripard 	HDMI_CEC_CPU_MASK_SET,
32311e305fSMaxime Ripard 	HDMI_CEC_CPU_MASK_STATUS,
33311e305fSMaxime Ripard 	HDMI_CEC_CPU_STATUS,
34303085bcSDom Cobley 	HDMI_CEC_CPU_SET,
35311e305fSMaxime Ripard 
36311e305fSMaxime Ripard 	/*
37311e305fSMaxime Ripard 	 * Transmit data, first byte is low byte of the 32-bit reg.
38311e305fSMaxime Ripard 	 * MSB of each byte transmitted first.
39311e305fSMaxime Ripard 	 */
40311e305fSMaxime Ripard 	HDMI_CEC_RX_DATA_1,
41311e305fSMaxime Ripard 	HDMI_CEC_RX_DATA_2,
42311e305fSMaxime Ripard 	HDMI_CEC_RX_DATA_3,
43311e305fSMaxime Ripard 	HDMI_CEC_RX_DATA_4,
44311e305fSMaxime Ripard 	HDMI_CEC_TX_DATA_1,
45311e305fSMaxime Ripard 	HDMI_CEC_TX_DATA_2,
46311e305fSMaxime Ripard 	HDMI_CEC_TX_DATA_3,
47311e305fSMaxime Ripard 	HDMI_CEC_TX_DATA_4,
4883239891SMaxime Ripard 	HDMI_CLOCK_STOP,
49311e305fSMaxime Ripard 	HDMI_CORE_REV,
50311e305fSMaxime Ripard 	HDMI_CRP_CFG,
51311e305fSMaxime Ripard 	HDMI_CSC_12_11,
52311e305fSMaxime Ripard 	HDMI_CSC_14_13,
53311e305fSMaxime Ripard 	HDMI_CSC_22_21,
54311e305fSMaxime Ripard 	HDMI_CSC_24_23,
55311e305fSMaxime Ripard 	HDMI_CSC_32_31,
56311e305fSMaxime Ripard 	HDMI_CSC_34_33,
57e769a350SMaxime Ripard 	HDMI_CSC_CHANNEL_CTL,
58311e305fSMaxime Ripard 	HDMI_CSC_CTL,
59311e305fSMaxime Ripard 
60311e305fSMaxime Ripard 	/*
61311e305fSMaxime Ripard 	 * 20-bit fields containing CTS values to be transmitted if
62311e305fSMaxime Ripard 	 * !EXTERNAL_CTS_EN
63311e305fSMaxime Ripard 	 */
64311e305fSMaxime Ripard 	HDMI_CTS_0,
65311e305fSMaxime Ripard 	HDMI_CTS_1,
66ba8c0faeSMaxime Ripard 	HDMI_DEEP_COLOR_CONFIG_1,
6783239891SMaxime Ripard 	HDMI_DVP_CTL,
68311e305fSMaxime Ripard 	HDMI_FIFO_CTL,
69311e305fSMaxime Ripard 	HDMI_FRAME_COUNT,
70ba8c0faeSMaxime Ripard 	HDMI_GCP_CONFIG,
71ba8c0faeSMaxime Ripard 	HDMI_GCP_WORD_1,
72311e305fSMaxime Ripard 	HDMI_HORZA,
73311e305fSMaxime Ripard 	HDMI_HORZB,
74311e305fSMaxime Ripard 	HDMI_HOTPLUG,
75311e305fSMaxime Ripard 	HDMI_HOTPLUG_INT,
76311e305fSMaxime Ripard 
77311e305fSMaxime Ripard 	/*
78311e305fSMaxime Ripard 	 * 3 bits per field, where each field maps from that
79311e305fSMaxime Ripard 	 * corresponding MAI bus channel to the given HDMI channel.
80311e305fSMaxime Ripard 	 */
81311e305fSMaxime Ripard 	HDMI_MAI_CHANNEL_MAP,
82311e305fSMaxime Ripard 	HDMI_MAI_CONFIG,
83311e305fSMaxime Ripard 	HDMI_MAI_CTL,
84311e305fSMaxime Ripard 
85311e305fSMaxime Ripard 	/*
86311e305fSMaxime Ripard 	 * Register for DMAing in audio data to be transported over
87311e305fSMaxime Ripard 	 * the MAI bus to the Falcon core.
88311e305fSMaxime Ripard 	 */
89311e305fSMaxime Ripard 	HDMI_MAI_DATA,
90311e305fSMaxime Ripard 
91311e305fSMaxime Ripard 	/* Format header to be placed on the MAI data. Unused. */
92311e305fSMaxime Ripard 	HDMI_MAI_FMT,
93311e305fSMaxime Ripard 
94311e305fSMaxime Ripard 	/* Last received format word on the MAI bus. */
95311e305fSMaxime Ripard 	HDMI_MAI_FORMAT,
96311e305fSMaxime Ripard 	HDMI_MAI_SMP,
97311e305fSMaxime Ripard 	HDMI_MAI_THR,
98311e305fSMaxime Ripard 	HDMI_M_CTL,
99311e305fSMaxime Ripard 	HDMI_RAM_PACKET_CONFIG,
100311e305fSMaxime Ripard 	HDMI_RAM_PACKET_START,
101311e305fSMaxime Ripard 	HDMI_RAM_PACKET_STATUS,
10283239891SMaxime Ripard 	HDMI_RM_CONTROL,
10383239891SMaxime Ripard 	HDMI_RM_FORMAT,
10483239891SMaxime Ripard 	HDMI_RM_OFFSET,
105311e305fSMaxime Ripard 	HDMI_SCHEDULER_CONTROL,
106c85695a2SMaxime Ripard 	HDMI_SCRAMBLER_CTL,
107311e305fSMaxime Ripard 	HDMI_SW_RESET_CONTROL,
10883239891SMaxime Ripard 	HDMI_TX_PHY_CHANNEL_SWAP,
10983239891SMaxime Ripard 	HDMI_TX_PHY_CLK_DIV,
110311e305fSMaxime Ripard 	HDMI_TX_PHY_CTL_0,
11183239891SMaxime Ripard 	HDMI_TX_PHY_CTL_1,
11283239891SMaxime Ripard 	HDMI_TX_PHY_CTL_2,
11383239891SMaxime Ripard 	HDMI_TX_PHY_CTL_3,
11483239891SMaxime Ripard 	HDMI_TX_PHY_PLL_CALIBRATION_CONFIG_1,
11583239891SMaxime Ripard 	HDMI_TX_PHY_PLL_CALIBRATION_CONFIG_2,
11683239891SMaxime Ripard 	HDMI_TX_PHY_PLL_CALIBRATION_CONFIG_4,
11783239891SMaxime Ripard 	HDMI_TX_PHY_PLL_CFG,
11883239891SMaxime Ripard 	HDMI_TX_PHY_PLL_CTL_0,
11983239891SMaxime Ripard 	HDMI_TX_PHY_PLL_CTL_1,
12083239891SMaxime Ripard 	HDMI_TX_PHY_POWERDOWN_CTL,
121311e305fSMaxime Ripard 	HDMI_TX_PHY_RESET_CTL,
12283239891SMaxime Ripard 	HDMI_TX_PHY_TMDS_CLK_WORD_SEL,
123e769a350SMaxime Ripard 	HDMI_VEC_INTERFACE_CFG,
12483239891SMaxime Ripard 	HDMI_VEC_INTERFACE_XBAR,
125311e305fSMaxime Ripard 	HDMI_VERTA0,
126311e305fSMaxime Ripard 	HDMI_VERTA1,
127311e305fSMaxime Ripard 	HDMI_VERTB0,
128311e305fSMaxime Ripard 	HDMI_VERTB1,
129311e305fSMaxime Ripard 	HDMI_VID_CTL,
13035dc00c1SDave Stevenson 	HDMI_MISC_CONTROL,
131d5ca9870SDave Stevenson 	HDMI_FORMAT_DET_1,
132d5ca9870SDave Stevenson 	HDMI_FORMAT_DET_2,
133d5ca9870SDave Stevenson 	HDMI_FORMAT_DET_3,
134d5ca9870SDave Stevenson 	HDMI_FORMAT_DET_4,
135d5ca9870SDave Stevenson 	HDMI_FORMAT_DET_5,
136d5ca9870SDave Stevenson 	HDMI_FORMAT_DET_6,
137d5ca9870SDave Stevenson 	HDMI_FORMAT_DET_7,
138d5ca9870SDave Stevenson 	HDMI_FORMAT_DET_8,
139d5ca9870SDave Stevenson 	HDMI_FORMAT_DET_9,
140d5ca9870SDave Stevenson 	HDMI_FORMAT_DET_10,
141311e305fSMaxime Ripard };
142311e305fSMaxime Ripard 
143311e305fSMaxime Ripard struct vc4_hdmi_register {
144311e305fSMaxime Ripard 	char *name;
145311e305fSMaxime Ripard 	enum vc4_hdmi_regs reg;
146311e305fSMaxime Ripard 	unsigned int offset;
147311e305fSMaxime Ripard };
148311e305fSMaxime Ripard 
149311e305fSMaxime Ripard #define _VC4_REG(_base, _reg, _offset)	\
150311e305fSMaxime Ripard 	[_reg] = {				\
151311e305fSMaxime Ripard 		.name = #_reg,			\
152311e305fSMaxime Ripard 		.reg = _base,			\
153311e305fSMaxime Ripard 		.offset = _offset,		\
154311e305fSMaxime Ripard 	}
155311e305fSMaxime Ripard 
156311e305fSMaxime Ripard #define VC4_HD_REG(reg, offset)		_VC4_REG(VC4_HD, reg, offset)
157311e305fSMaxime Ripard #define VC4_HDMI_REG(reg, offset)	_VC4_REG(VC4_HDMI, reg, offset)
15883239891SMaxime Ripard #define VC5_CEC_REG(reg, offset)	_VC4_REG(VC5_CEC, reg, offset)
15983239891SMaxime Ripard #define VC5_CSC_REG(reg, offset)	_VC4_REG(VC5_CSC, reg, offset)
16083239891SMaxime Ripard #define VC5_DVP_REG(reg, offset)	_VC4_REG(VC5_DVP, reg, offset)
16183239891SMaxime Ripard #define VC5_PHY_REG(reg, offset)	_VC4_REG(VC5_PHY, reg, offset)
16283239891SMaxime Ripard #define VC5_RAM_REG(reg, offset)	_VC4_REG(VC5_RAM, reg, offset)
16383239891SMaxime Ripard #define VC5_RM_REG(reg, offset)		_VC4_REG(VC5_RM, reg, offset)
164311e305fSMaxime Ripard 
165705477b8SLee Jones static const struct vc4_hdmi_register __maybe_unused vc4_hdmi_fields[] = {
166311e305fSMaxime Ripard 	VC4_HD_REG(HDMI_M_CTL, 0x000c),
167311e305fSMaxime Ripard 	VC4_HD_REG(HDMI_MAI_CTL, 0x0014),
168311e305fSMaxime Ripard 	VC4_HD_REG(HDMI_MAI_THR, 0x0018),
169311e305fSMaxime Ripard 	VC4_HD_REG(HDMI_MAI_FMT, 0x001c),
170311e305fSMaxime Ripard 	VC4_HD_REG(HDMI_MAI_DATA, 0x0020),
171311e305fSMaxime Ripard 	VC4_HD_REG(HDMI_MAI_SMP, 0x002c),
172311e305fSMaxime Ripard 	VC4_HD_REG(HDMI_VID_CTL, 0x0038),
173311e305fSMaxime Ripard 	VC4_HD_REG(HDMI_CSC_CTL, 0x0040),
174311e305fSMaxime Ripard 	VC4_HD_REG(HDMI_CSC_12_11, 0x0044),
175311e305fSMaxime Ripard 	VC4_HD_REG(HDMI_CSC_14_13, 0x0048),
176311e305fSMaxime Ripard 	VC4_HD_REG(HDMI_CSC_22_21, 0x004c),
177311e305fSMaxime Ripard 	VC4_HD_REG(HDMI_CSC_24_23, 0x0050),
178311e305fSMaxime Ripard 	VC4_HD_REG(HDMI_CSC_32_31, 0x0054),
179311e305fSMaxime Ripard 	VC4_HD_REG(HDMI_CSC_34_33, 0x0058),
180311e305fSMaxime Ripard 	VC4_HD_REG(HDMI_FRAME_COUNT, 0x0068),
181311e305fSMaxime Ripard 
182311e305fSMaxime Ripard 	VC4_HDMI_REG(HDMI_CORE_REV, 0x0000),
183311e305fSMaxime Ripard 	VC4_HDMI_REG(HDMI_SW_RESET_CONTROL, 0x0004),
184311e305fSMaxime Ripard 	VC4_HDMI_REG(HDMI_HOTPLUG_INT, 0x0008),
185311e305fSMaxime Ripard 	VC4_HDMI_REG(HDMI_HOTPLUG, 0x000c),
186311e305fSMaxime Ripard 	VC4_HDMI_REG(HDMI_FIFO_CTL, 0x005c),
187311e305fSMaxime Ripard 	VC4_HDMI_REG(HDMI_MAI_CHANNEL_MAP, 0x0090),
188311e305fSMaxime Ripard 	VC4_HDMI_REG(HDMI_MAI_CONFIG, 0x0094),
189311e305fSMaxime Ripard 	VC4_HDMI_REG(HDMI_MAI_FORMAT, 0x0098),
190311e305fSMaxime Ripard 	VC4_HDMI_REG(HDMI_AUDIO_PACKET_CONFIG, 0x009c),
191311e305fSMaxime Ripard 	VC4_HDMI_REG(HDMI_RAM_PACKET_CONFIG, 0x00a0),
192311e305fSMaxime Ripard 	VC4_HDMI_REG(HDMI_RAM_PACKET_STATUS, 0x00a4),
193311e305fSMaxime Ripard 	VC4_HDMI_REG(HDMI_CRP_CFG, 0x00a8),
194311e305fSMaxime Ripard 	VC4_HDMI_REG(HDMI_CTS_0, 0x00ac),
195311e305fSMaxime Ripard 	VC4_HDMI_REG(HDMI_CTS_1, 0x00b0),
196311e305fSMaxime Ripard 	VC4_HDMI_REG(HDMI_SCHEDULER_CONTROL, 0x00c0),
197311e305fSMaxime Ripard 	VC4_HDMI_REG(HDMI_HORZA, 0x00c4),
198311e305fSMaxime Ripard 	VC4_HDMI_REG(HDMI_HORZB, 0x00c8),
199311e305fSMaxime Ripard 	VC4_HDMI_REG(HDMI_VERTA0, 0x00cc),
200311e305fSMaxime Ripard 	VC4_HDMI_REG(HDMI_VERTB0, 0x00d0),
201311e305fSMaxime Ripard 	VC4_HDMI_REG(HDMI_VERTA1, 0x00d4),
202311e305fSMaxime Ripard 	VC4_HDMI_REG(HDMI_VERTB1, 0x00d8),
203f3f27511SDave Stevenson 	VC4_HDMI_REG(HDMI_MISC_CONTROL, 0x00e4),
204311e305fSMaxime Ripard 	VC4_HDMI_REG(HDMI_CEC_CNTRL_1, 0x00e8),
205311e305fSMaxime Ripard 	VC4_HDMI_REG(HDMI_CEC_CNTRL_2, 0x00ec),
206311e305fSMaxime Ripard 	VC4_HDMI_REG(HDMI_CEC_CNTRL_3, 0x00f0),
207311e305fSMaxime Ripard 	VC4_HDMI_REG(HDMI_CEC_CNTRL_4, 0x00f4),
208311e305fSMaxime Ripard 	VC4_HDMI_REG(HDMI_CEC_CNTRL_5, 0x00f8),
209311e305fSMaxime Ripard 	VC4_HDMI_REG(HDMI_CEC_TX_DATA_1, 0x00fc),
210311e305fSMaxime Ripard 	VC4_HDMI_REG(HDMI_CEC_TX_DATA_2, 0x0100),
211311e305fSMaxime Ripard 	VC4_HDMI_REG(HDMI_CEC_TX_DATA_3, 0x0104),
212311e305fSMaxime Ripard 	VC4_HDMI_REG(HDMI_CEC_TX_DATA_4, 0x0108),
213311e305fSMaxime Ripard 	VC4_HDMI_REG(HDMI_CEC_RX_DATA_1, 0x010c),
214311e305fSMaxime Ripard 	VC4_HDMI_REG(HDMI_CEC_RX_DATA_2, 0x0110),
215311e305fSMaxime Ripard 	VC4_HDMI_REG(HDMI_CEC_RX_DATA_3, 0x0114),
216311e305fSMaxime Ripard 	VC4_HDMI_REG(HDMI_CEC_RX_DATA_4, 0x0118),
217311e305fSMaxime Ripard 	VC4_HDMI_REG(HDMI_TX_PHY_RESET_CTL, 0x02c0),
218311e305fSMaxime Ripard 	VC4_HDMI_REG(HDMI_TX_PHY_CTL_0, 0x02c4),
219311e305fSMaxime Ripard 	VC4_HDMI_REG(HDMI_CEC_CPU_STATUS, 0x0340),
220303085bcSDom Cobley 	VC4_HDMI_REG(HDMI_CEC_CPU_SET, 0x0344),
221311e305fSMaxime Ripard 	VC4_HDMI_REG(HDMI_CEC_CPU_CLEAR, 0x0348),
222311e305fSMaxime Ripard 	VC4_HDMI_REG(HDMI_CEC_CPU_MASK_STATUS, 0x034c),
223303085bcSDom Cobley 	VC4_HDMI_REG(HDMI_CEC_CPU_MASK_SET, 0x0350),
224311e305fSMaxime Ripard 	VC4_HDMI_REG(HDMI_CEC_CPU_MASK_CLEAR, 0x0354),
225311e305fSMaxime Ripard 	VC4_HDMI_REG(HDMI_RAM_PACKET_START, 0x0400),
226311e305fSMaxime Ripard };
227311e305fSMaxime Ripard 
228705477b8SLee Jones static const struct vc4_hdmi_register __maybe_unused vc5_hdmi_hdmi0_fields[] = {
22983239891SMaxime Ripard 	VC4_HD_REG(HDMI_DVP_CTL, 0x0000),
23083239891SMaxime Ripard 	VC4_HD_REG(HDMI_MAI_CTL, 0x0010),
23183239891SMaxime Ripard 	VC4_HD_REG(HDMI_MAI_THR, 0x0014),
23283239891SMaxime Ripard 	VC4_HD_REG(HDMI_MAI_FMT, 0x0018),
23383239891SMaxime Ripard 	VC4_HD_REG(HDMI_MAI_DATA, 0x001c),
23483239891SMaxime Ripard 	VC4_HD_REG(HDMI_MAI_SMP, 0x0020),
23583239891SMaxime Ripard 	VC4_HD_REG(HDMI_VID_CTL, 0x0044),
23683239891SMaxime Ripard 	VC4_HD_REG(HDMI_FRAME_COUNT, 0x0060),
23783239891SMaxime Ripard 
23883239891SMaxime Ripard 	VC4_HDMI_REG(HDMI_FIFO_CTL, 0x074),
23983239891SMaxime Ripard 	VC4_HDMI_REG(HDMI_AUDIO_PACKET_CONFIG, 0x0b8),
24083239891SMaxime Ripard 	VC4_HDMI_REG(HDMI_RAM_PACKET_CONFIG, 0x0bc),
24183239891SMaxime Ripard 	VC4_HDMI_REG(HDMI_RAM_PACKET_STATUS, 0x0c4),
24283239891SMaxime Ripard 	VC4_HDMI_REG(HDMI_CRP_CFG, 0x0c8),
24383239891SMaxime Ripard 	VC4_HDMI_REG(HDMI_CTS_0, 0x0cc),
24483239891SMaxime Ripard 	VC4_HDMI_REG(HDMI_CTS_1, 0x0d0),
24583239891SMaxime Ripard 	VC4_HDMI_REG(HDMI_SCHEDULER_CONTROL, 0x0e0),
24683239891SMaxime Ripard 	VC4_HDMI_REG(HDMI_HORZA, 0x0e4),
24783239891SMaxime Ripard 	VC4_HDMI_REG(HDMI_HORZB, 0x0e8),
24883239891SMaxime Ripard 	VC4_HDMI_REG(HDMI_VERTA0, 0x0ec),
24983239891SMaxime Ripard 	VC4_HDMI_REG(HDMI_VERTB0, 0x0f0),
25083239891SMaxime Ripard 	VC4_HDMI_REG(HDMI_VERTA1, 0x0f4),
25183239891SMaxime Ripard 	VC4_HDMI_REG(HDMI_VERTB1, 0x0f8),
25235dc00c1SDave Stevenson 	VC4_HDMI_REG(HDMI_MISC_CONTROL, 0x100),
25383239891SMaxime Ripard 	VC4_HDMI_REG(HDMI_MAI_CHANNEL_MAP, 0x09c),
25483239891SMaxime Ripard 	VC4_HDMI_REG(HDMI_MAI_CONFIG, 0x0a0),
255d5ca9870SDave Stevenson 	VC4_HDMI_REG(HDMI_FORMAT_DET_1, 0x134),
256d5ca9870SDave Stevenson 	VC4_HDMI_REG(HDMI_FORMAT_DET_2, 0x138),
257d5ca9870SDave Stevenson 	VC4_HDMI_REG(HDMI_FORMAT_DET_3, 0x13c),
258d5ca9870SDave Stevenson 	VC4_HDMI_REG(HDMI_FORMAT_DET_4, 0x140),
259d5ca9870SDave Stevenson 	VC4_HDMI_REG(HDMI_FORMAT_DET_5, 0x144),
260d5ca9870SDave Stevenson 	VC4_HDMI_REG(HDMI_FORMAT_DET_6, 0x148),
261d5ca9870SDave Stevenson 	VC4_HDMI_REG(HDMI_FORMAT_DET_7, 0x14c),
262d5ca9870SDave Stevenson 	VC4_HDMI_REG(HDMI_FORMAT_DET_8, 0x150),
263d5ca9870SDave Stevenson 	VC4_HDMI_REG(HDMI_FORMAT_DET_9, 0x154),
264d5ca9870SDave Stevenson 	VC4_HDMI_REG(HDMI_FORMAT_DET_10, 0x158),
265ba8c0faeSMaxime Ripard 	VC4_HDMI_REG(HDMI_DEEP_COLOR_CONFIG_1, 0x170),
266ba8c0faeSMaxime Ripard 	VC4_HDMI_REG(HDMI_GCP_CONFIG, 0x178),
267ba8c0faeSMaxime Ripard 	VC4_HDMI_REG(HDMI_GCP_WORD_1, 0x17c),
26883239891SMaxime Ripard 	VC4_HDMI_REG(HDMI_HOTPLUG, 0x1a8),
269c85695a2SMaxime Ripard 	VC4_HDMI_REG(HDMI_SCRAMBLER_CTL, 0x1c4),
27083239891SMaxime Ripard 
27183239891SMaxime Ripard 	VC5_DVP_REG(HDMI_CLOCK_STOP, 0x0bc),
272e769a350SMaxime Ripard 	VC5_DVP_REG(HDMI_VEC_INTERFACE_CFG, 0x0ec),
27383239891SMaxime Ripard 	VC5_DVP_REG(HDMI_VEC_INTERFACE_XBAR, 0x0f0),
27483239891SMaxime Ripard 
27583239891SMaxime Ripard 	VC5_PHY_REG(HDMI_TX_PHY_RESET_CTL, 0x000),
27683239891SMaxime Ripard 	VC5_PHY_REG(HDMI_TX_PHY_POWERDOWN_CTL, 0x004),
27783239891SMaxime Ripard 	VC5_PHY_REG(HDMI_TX_PHY_CTL_0, 0x008),
27883239891SMaxime Ripard 	VC5_PHY_REG(HDMI_TX_PHY_CTL_1, 0x00c),
27983239891SMaxime Ripard 	VC5_PHY_REG(HDMI_TX_PHY_CTL_2, 0x010),
28083239891SMaxime Ripard 	VC5_PHY_REG(HDMI_TX_PHY_CTL_3, 0x014),
28183239891SMaxime Ripard 	VC5_PHY_REG(HDMI_TX_PHY_PLL_CTL_0, 0x01c),
28283239891SMaxime Ripard 	VC5_PHY_REG(HDMI_TX_PHY_PLL_CTL_1, 0x020),
28383239891SMaxime Ripard 	VC5_PHY_REG(HDMI_TX_PHY_CLK_DIV, 0x028),
28483239891SMaxime Ripard 	VC5_PHY_REG(HDMI_TX_PHY_PLL_CFG, 0x034),
28583239891SMaxime Ripard 	VC5_PHY_REG(HDMI_TX_PHY_TMDS_CLK_WORD_SEL, 0x044),
28683239891SMaxime Ripard 	VC5_PHY_REG(HDMI_TX_PHY_CHANNEL_SWAP, 0x04c),
28783239891SMaxime Ripard 	VC5_PHY_REG(HDMI_TX_PHY_PLL_CALIBRATION_CONFIG_1, 0x050),
28883239891SMaxime Ripard 	VC5_PHY_REG(HDMI_TX_PHY_PLL_CALIBRATION_CONFIG_2, 0x054),
28983239891SMaxime Ripard 	VC5_PHY_REG(HDMI_TX_PHY_PLL_CALIBRATION_CONFIG_4, 0x05c),
29083239891SMaxime Ripard 
29183239891SMaxime Ripard 	VC5_RM_REG(HDMI_RM_CONTROL, 0x000),
29283239891SMaxime Ripard 	VC5_RM_REG(HDMI_RM_OFFSET, 0x018),
29383239891SMaxime Ripard 	VC5_RM_REG(HDMI_RM_FORMAT, 0x01c),
29483239891SMaxime Ripard 
29583239891SMaxime Ripard 	VC5_RAM_REG(HDMI_RAM_PACKET_START, 0x000),
29683239891SMaxime Ripard 
29783239891SMaxime Ripard 	VC5_CEC_REG(HDMI_CEC_CNTRL_1, 0x010),
29883239891SMaxime Ripard 	VC5_CEC_REG(HDMI_CEC_CNTRL_2, 0x014),
29983239891SMaxime Ripard 	VC5_CEC_REG(HDMI_CEC_CNTRL_3, 0x018),
30083239891SMaxime Ripard 	VC5_CEC_REG(HDMI_CEC_CNTRL_4, 0x01c),
30183239891SMaxime Ripard 	VC5_CEC_REG(HDMI_CEC_CNTRL_5, 0x020),
30283239891SMaxime Ripard 	VC5_CEC_REG(HDMI_CEC_TX_DATA_1, 0x028),
30383239891SMaxime Ripard 	VC5_CEC_REG(HDMI_CEC_TX_DATA_2, 0x02c),
30483239891SMaxime Ripard 	VC5_CEC_REG(HDMI_CEC_TX_DATA_3, 0x030),
30583239891SMaxime Ripard 	VC5_CEC_REG(HDMI_CEC_TX_DATA_4, 0x034),
30683239891SMaxime Ripard 	VC5_CEC_REG(HDMI_CEC_RX_DATA_1, 0x038),
30783239891SMaxime Ripard 	VC5_CEC_REG(HDMI_CEC_RX_DATA_2, 0x03c),
30883239891SMaxime Ripard 	VC5_CEC_REG(HDMI_CEC_RX_DATA_3, 0x040),
30983239891SMaxime Ripard 	VC5_CEC_REG(HDMI_CEC_RX_DATA_4, 0x044),
31083239891SMaxime Ripard 
31183239891SMaxime Ripard 	VC5_CSC_REG(HDMI_CSC_CTL, 0x000),
31283239891SMaxime Ripard 	VC5_CSC_REG(HDMI_CSC_12_11, 0x004),
31383239891SMaxime Ripard 	VC5_CSC_REG(HDMI_CSC_14_13, 0x008),
31483239891SMaxime Ripard 	VC5_CSC_REG(HDMI_CSC_22_21, 0x00c),
31583239891SMaxime Ripard 	VC5_CSC_REG(HDMI_CSC_24_23, 0x010),
31683239891SMaxime Ripard 	VC5_CSC_REG(HDMI_CSC_32_31, 0x014),
31783239891SMaxime Ripard 	VC5_CSC_REG(HDMI_CSC_34_33, 0x018),
318e769a350SMaxime Ripard 	VC5_CSC_REG(HDMI_CSC_CHANNEL_CTL, 0x02c),
31983239891SMaxime Ripard };
32083239891SMaxime Ripard 
321705477b8SLee Jones static const struct vc4_hdmi_register __maybe_unused vc5_hdmi_hdmi1_fields[] = {
32283239891SMaxime Ripard 	VC4_HD_REG(HDMI_DVP_CTL, 0x0000),
32383239891SMaxime Ripard 	VC4_HD_REG(HDMI_MAI_CTL, 0x0030),
32483239891SMaxime Ripard 	VC4_HD_REG(HDMI_MAI_THR, 0x0034),
32583239891SMaxime Ripard 	VC4_HD_REG(HDMI_MAI_FMT, 0x0038),
32683239891SMaxime Ripard 	VC4_HD_REG(HDMI_MAI_DATA, 0x003c),
32783239891SMaxime Ripard 	VC4_HD_REG(HDMI_MAI_SMP, 0x0040),
32883239891SMaxime Ripard 	VC4_HD_REG(HDMI_VID_CTL, 0x0048),
32983239891SMaxime Ripard 	VC4_HD_REG(HDMI_FRAME_COUNT, 0x0064),
33083239891SMaxime Ripard 
33183239891SMaxime Ripard 	VC4_HDMI_REG(HDMI_FIFO_CTL, 0x074),
33283239891SMaxime Ripard 	VC4_HDMI_REG(HDMI_AUDIO_PACKET_CONFIG, 0x0b8),
33383239891SMaxime Ripard 	VC4_HDMI_REG(HDMI_RAM_PACKET_CONFIG, 0x0bc),
33483239891SMaxime Ripard 	VC4_HDMI_REG(HDMI_RAM_PACKET_STATUS, 0x0c4),
33583239891SMaxime Ripard 	VC4_HDMI_REG(HDMI_CRP_CFG, 0x0c8),
33683239891SMaxime Ripard 	VC4_HDMI_REG(HDMI_CTS_0, 0x0cc),
33783239891SMaxime Ripard 	VC4_HDMI_REG(HDMI_CTS_1, 0x0d0),
33883239891SMaxime Ripard 	VC4_HDMI_REG(HDMI_SCHEDULER_CONTROL, 0x0e0),
33983239891SMaxime Ripard 	VC4_HDMI_REG(HDMI_HORZA, 0x0e4),
34083239891SMaxime Ripard 	VC4_HDMI_REG(HDMI_HORZB, 0x0e8),
34183239891SMaxime Ripard 	VC4_HDMI_REG(HDMI_VERTA0, 0x0ec),
34283239891SMaxime Ripard 	VC4_HDMI_REG(HDMI_VERTB0, 0x0f0),
34383239891SMaxime Ripard 	VC4_HDMI_REG(HDMI_VERTA1, 0x0f4),
34483239891SMaxime Ripard 	VC4_HDMI_REG(HDMI_VERTB1, 0x0f8),
34535dc00c1SDave Stevenson 	VC4_HDMI_REG(HDMI_MISC_CONTROL, 0x100),
34683239891SMaxime Ripard 	VC4_HDMI_REG(HDMI_MAI_CHANNEL_MAP, 0x09c),
34783239891SMaxime Ripard 	VC4_HDMI_REG(HDMI_MAI_CONFIG, 0x0a0),
348d5ca9870SDave Stevenson 	VC4_HDMI_REG(HDMI_FORMAT_DET_1, 0x134),
349d5ca9870SDave Stevenson 	VC4_HDMI_REG(HDMI_FORMAT_DET_2, 0x138),
350d5ca9870SDave Stevenson 	VC4_HDMI_REG(HDMI_FORMAT_DET_3, 0x13c),
351d5ca9870SDave Stevenson 	VC4_HDMI_REG(HDMI_FORMAT_DET_4, 0x140),
352d5ca9870SDave Stevenson 	VC4_HDMI_REG(HDMI_FORMAT_DET_5, 0x144),
353d5ca9870SDave Stevenson 	VC4_HDMI_REG(HDMI_FORMAT_DET_6, 0x148),
354d5ca9870SDave Stevenson 	VC4_HDMI_REG(HDMI_FORMAT_DET_7, 0x14c),
355d5ca9870SDave Stevenson 	VC4_HDMI_REG(HDMI_FORMAT_DET_8, 0x150),
356d5ca9870SDave Stevenson 	VC4_HDMI_REG(HDMI_FORMAT_DET_9, 0x154),
357d5ca9870SDave Stevenson 	VC4_HDMI_REG(HDMI_FORMAT_DET_10, 0x158),
358ba8c0faeSMaxime Ripard 	VC4_HDMI_REG(HDMI_DEEP_COLOR_CONFIG_1, 0x170),
359ba8c0faeSMaxime Ripard 	VC4_HDMI_REG(HDMI_GCP_CONFIG, 0x178),
360ba8c0faeSMaxime Ripard 	VC4_HDMI_REG(HDMI_GCP_WORD_1, 0x17c),
36183239891SMaxime Ripard 	VC4_HDMI_REG(HDMI_HOTPLUG, 0x1a8),
362c85695a2SMaxime Ripard 	VC4_HDMI_REG(HDMI_SCRAMBLER_CTL, 0x1c4),
36383239891SMaxime Ripard 
36483239891SMaxime Ripard 	VC5_DVP_REG(HDMI_CLOCK_STOP, 0x0bc),
365e769a350SMaxime Ripard 	VC5_DVP_REG(HDMI_VEC_INTERFACE_CFG, 0x0ec),
36683239891SMaxime Ripard 	VC5_DVP_REG(HDMI_VEC_INTERFACE_XBAR, 0x0f0),
36783239891SMaxime Ripard 
36883239891SMaxime Ripard 	VC5_PHY_REG(HDMI_TX_PHY_RESET_CTL, 0x000),
36983239891SMaxime Ripard 	VC5_PHY_REG(HDMI_TX_PHY_POWERDOWN_CTL, 0x004),
37083239891SMaxime Ripard 	VC5_PHY_REG(HDMI_TX_PHY_CTL_0, 0x008),
37183239891SMaxime Ripard 	VC5_PHY_REG(HDMI_TX_PHY_CTL_1, 0x00c),
37283239891SMaxime Ripard 	VC5_PHY_REG(HDMI_TX_PHY_CTL_2, 0x010),
37383239891SMaxime Ripard 	VC5_PHY_REG(HDMI_TX_PHY_CTL_3, 0x014),
37483239891SMaxime Ripard 	VC5_PHY_REG(HDMI_TX_PHY_PLL_CTL_0, 0x01c),
37583239891SMaxime Ripard 	VC5_PHY_REG(HDMI_TX_PHY_PLL_CTL_1, 0x020),
37683239891SMaxime Ripard 	VC5_PHY_REG(HDMI_TX_PHY_CLK_DIV, 0x028),
37783239891SMaxime Ripard 	VC5_PHY_REG(HDMI_TX_PHY_PLL_CFG, 0x034),
37883239891SMaxime Ripard 	VC5_PHY_REG(HDMI_TX_PHY_CHANNEL_SWAP, 0x04c),
37983239891SMaxime Ripard 	VC5_PHY_REG(HDMI_TX_PHY_TMDS_CLK_WORD_SEL, 0x044),
38083239891SMaxime Ripard 	VC5_PHY_REG(HDMI_TX_PHY_PLL_CALIBRATION_CONFIG_1, 0x050),
38183239891SMaxime Ripard 	VC5_PHY_REG(HDMI_TX_PHY_PLL_CALIBRATION_CONFIG_2, 0x054),
38283239891SMaxime Ripard 	VC5_PHY_REG(HDMI_TX_PHY_PLL_CALIBRATION_CONFIG_4, 0x05c),
38383239891SMaxime Ripard 
38483239891SMaxime Ripard 	VC5_RM_REG(HDMI_RM_CONTROL, 0x000),
38583239891SMaxime Ripard 	VC5_RM_REG(HDMI_RM_OFFSET, 0x018),
38683239891SMaxime Ripard 	VC5_RM_REG(HDMI_RM_FORMAT, 0x01c),
38783239891SMaxime Ripard 
38883239891SMaxime Ripard 	VC5_RAM_REG(HDMI_RAM_PACKET_START, 0x000),
38983239891SMaxime Ripard 
39083239891SMaxime Ripard 	VC5_CEC_REG(HDMI_CEC_CNTRL_1, 0x010),
39183239891SMaxime Ripard 	VC5_CEC_REG(HDMI_CEC_CNTRL_2, 0x014),
39283239891SMaxime Ripard 	VC5_CEC_REG(HDMI_CEC_CNTRL_3, 0x018),
39383239891SMaxime Ripard 	VC5_CEC_REG(HDMI_CEC_CNTRL_4, 0x01c),
39483239891SMaxime Ripard 	VC5_CEC_REG(HDMI_CEC_CNTRL_5, 0x020),
39583239891SMaxime Ripard 	VC5_CEC_REG(HDMI_CEC_TX_DATA_1, 0x028),
39683239891SMaxime Ripard 	VC5_CEC_REG(HDMI_CEC_TX_DATA_2, 0x02c),
39783239891SMaxime Ripard 	VC5_CEC_REG(HDMI_CEC_TX_DATA_3, 0x030),
39883239891SMaxime Ripard 	VC5_CEC_REG(HDMI_CEC_TX_DATA_4, 0x034),
39983239891SMaxime Ripard 	VC5_CEC_REG(HDMI_CEC_RX_DATA_1, 0x038),
40083239891SMaxime Ripard 	VC5_CEC_REG(HDMI_CEC_RX_DATA_2, 0x03c),
40183239891SMaxime Ripard 	VC5_CEC_REG(HDMI_CEC_RX_DATA_3, 0x040),
40283239891SMaxime Ripard 	VC5_CEC_REG(HDMI_CEC_RX_DATA_4, 0x044),
40383239891SMaxime Ripard 
40483239891SMaxime Ripard 	VC5_CSC_REG(HDMI_CSC_CTL, 0x000),
40583239891SMaxime Ripard 	VC5_CSC_REG(HDMI_CSC_12_11, 0x004),
40683239891SMaxime Ripard 	VC5_CSC_REG(HDMI_CSC_14_13, 0x008),
40783239891SMaxime Ripard 	VC5_CSC_REG(HDMI_CSC_22_21, 0x00c),
40883239891SMaxime Ripard 	VC5_CSC_REG(HDMI_CSC_24_23, 0x010),
40983239891SMaxime Ripard 	VC5_CSC_REG(HDMI_CSC_32_31, 0x014),
41083239891SMaxime Ripard 	VC5_CSC_REG(HDMI_CSC_34_33, 0x018),
411e769a350SMaxime Ripard 	VC5_CSC_REG(HDMI_CSC_CHANNEL_CTL, 0x02c),
41283239891SMaxime Ripard };
41383239891SMaxime Ripard 
414311e305fSMaxime Ripard static inline
__vc4_hdmi_get_field_base(struct vc4_hdmi * hdmi,enum vc4_hdmi_regs reg)415311e305fSMaxime Ripard void __iomem *__vc4_hdmi_get_field_base(struct vc4_hdmi *hdmi,
416311e305fSMaxime Ripard 					enum vc4_hdmi_regs reg)
417311e305fSMaxime Ripard {
418311e305fSMaxime Ripard 	switch (reg) {
419311e305fSMaxime Ripard 	case VC4_HD:
420311e305fSMaxime Ripard 		return hdmi->hd_regs;
421311e305fSMaxime Ripard 
422311e305fSMaxime Ripard 	case VC4_HDMI:
423311e305fSMaxime Ripard 		return hdmi->hdmicore_regs;
424311e305fSMaxime Ripard 
42583239891SMaxime Ripard 	case VC5_CSC:
42683239891SMaxime Ripard 		return hdmi->csc_regs;
42783239891SMaxime Ripard 
42883239891SMaxime Ripard 	case VC5_CEC:
42983239891SMaxime Ripard 		return hdmi->cec_regs;
43083239891SMaxime Ripard 
43183239891SMaxime Ripard 	case VC5_DVP:
43283239891SMaxime Ripard 		return hdmi->dvp_regs;
43383239891SMaxime Ripard 
43483239891SMaxime Ripard 	case VC5_PHY:
43583239891SMaxime Ripard 		return hdmi->phy_regs;
43683239891SMaxime Ripard 
43783239891SMaxime Ripard 	case VC5_RAM:
43883239891SMaxime Ripard 		return hdmi->ram_regs;
43983239891SMaxime Ripard 
44083239891SMaxime Ripard 	case VC5_RM:
44183239891SMaxime Ripard 		return hdmi->rm_regs;
44283239891SMaxime Ripard 
443311e305fSMaxime Ripard 	default:
444311e305fSMaxime Ripard 		return NULL;
445311e305fSMaxime Ripard 	}
446311e305fSMaxime Ripard 
447311e305fSMaxime Ripard 	return NULL;
448311e305fSMaxime Ripard }
449311e305fSMaxime Ripard 
vc4_hdmi_read(struct vc4_hdmi * hdmi,enum vc4_hdmi_field reg)450311e305fSMaxime Ripard static inline u32 vc4_hdmi_read(struct vc4_hdmi *hdmi,
451910e1ca6SNathan Chancellor 				enum vc4_hdmi_field reg)
452311e305fSMaxime Ripard {
453311e305fSMaxime Ripard 	const struct vc4_hdmi_register *field;
454311e305fSMaxime Ripard 	const struct vc4_hdmi_variant *variant = hdmi->variant;
455311e305fSMaxime Ripard 	void __iomem *base;
456311e305fSMaxime Ripard 
457fcef97e7SDave Stevenson 	WARN_ON(pm_runtime_status_suspended(&hdmi->pdev->dev));
45814e193b9SMaxime Ripard 
459*da43ff04SMaxime Ripard 	kunit_fail_current_test("Accessing an HDMI register in a unit test!\n");
460*da43ff04SMaxime Ripard 
461130cdec4SDan Carpenter 	if (reg >= variant->num_registers) {
462311e305fSMaxime Ripard 		dev_warn(&hdmi->pdev->dev,
463311e305fSMaxime Ripard 			 "Invalid register ID %u\n", reg);
464311e305fSMaxime Ripard 		return 0;
465311e305fSMaxime Ripard 	}
466311e305fSMaxime Ripard 
467311e305fSMaxime Ripard 	field = &variant->registers[reg];
468311e305fSMaxime Ripard 	base = __vc4_hdmi_get_field_base(hdmi, field->reg);
469311e305fSMaxime Ripard 	if (!base) {
470311e305fSMaxime Ripard 		dev_warn(&hdmi->pdev->dev,
471311e305fSMaxime Ripard 			 "Unknown register ID %u\n", reg);
472311e305fSMaxime Ripard 		return 0;
473311e305fSMaxime Ripard 	}
474311e305fSMaxime Ripard 
475311e305fSMaxime Ripard 	return readl(base + field->offset);
476311e305fSMaxime Ripard }
477311e305fSMaxime Ripard #define HDMI_READ(reg)		vc4_hdmi_read(vc4_hdmi, reg)
478311e305fSMaxime Ripard 
vc4_hdmi_write(struct vc4_hdmi * hdmi,enum vc4_hdmi_field reg,u32 value)479311e305fSMaxime Ripard static inline void vc4_hdmi_write(struct vc4_hdmi *hdmi,
480910e1ca6SNathan Chancellor 				  enum vc4_hdmi_field reg,
481311e305fSMaxime Ripard 				  u32 value)
482311e305fSMaxime Ripard {
483311e305fSMaxime Ripard 	const struct vc4_hdmi_register *field;
484311e305fSMaxime Ripard 	const struct vc4_hdmi_variant *variant = hdmi->variant;
485311e305fSMaxime Ripard 	void __iomem *base;
486311e305fSMaxime Ripard 
48781fb55e5SMaxime Ripard 	lockdep_assert_held(&hdmi->hw_lock);
48881fb55e5SMaxime Ripard 
489fcef97e7SDave Stevenson 	WARN_ON(pm_runtime_status_suspended(&hdmi->pdev->dev));
49014e193b9SMaxime Ripard 
491*da43ff04SMaxime Ripard 	kunit_fail_current_test("Accessing an HDMI register in a unit test!\n");
492*da43ff04SMaxime Ripard 
493130cdec4SDan Carpenter 	if (reg >= variant->num_registers) {
494311e305fSMaxime Ripard 		dev_warn(&hdmi->pdev->dev,
495311e305fSMaxime Ripard 			 "Invalid register ID %u\n", reg);
496311e305fSMaxime Ripard 		return;
497311e305fSMaxime Ripard 	}
498311e305fSMaxime Ripard 
499311e305fSMaxime Ripard 	field = &variant->registers[reg];
500311e305fSMaxime Ripard 	base = __vc4_hdmi_get_field_base(hdmi, field->reg);
501311e305fSMaxime Ripard 	if (!base)
502311e305fSMaxime Ripard 		return;
503311e305fSMaxime Ripard 
504311e305fSMaxime Ripard 	writel(value, base + field->offset);
505311e305fSMaxime Ripard }
506311e305fSMaxime Ripard #define HDMI_WRITE(reg, val)	vc4_hdmi_write(vc4_hdmi, reg, val)
507311e305fSMaxime Ripard 
508311e305fSMaxime Ripard #endif /* _VC4_HDMI_REGS_H_ */
509