1/*
2 * Copyright 2016 Advanced Micro Devices, Inc.
3 *
4 * Permission is hereby granted, free of charge, to any person obtaining a
5 * copy of this software and associated documentation files (the "Software"),
6 * to deal in the Software without restriction, including without limitation
7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8 * and/or sell copies of the Software, and to permit persons to whom the
9 * Software is furnished to do so, subject to the following conditions:
10 *
11 * The above copyright notice and this permission notice shall be included in
12 * all copies or substantial portions of the Software.
13 *
14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
17 * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
18 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
19 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
20 * OTHER DEALINGS IN THE SOFTWARE.
21 *
22 * Authors: AMD
23 *
24 */
25
26#ifndef __DC_HUBBUB_DCN10_H__
27#define __DC_HUBBUB_DCN10_H__
28
29#include "core_types.h"
30#include "dchubbub.h"
31
32#define TO_DCN10_HUBBUB(hubbub)\
33	container_of(hubbub, struct dcn10_hubbub, base)
34
35#define HUBBUB_REG_LIST_DCN_COMMON()\
36	SR(DCHUBBUB_ARB_DATA_URGENCY_WATERMARK_A),\
37	SR(DCHUBBUB_ARB_ALLOW_DRAM_CLK_CHANGE_WATERMARK_A),\
38	SR(DCHUBBUB_ARB_DATA_URGENCY_WATERMARK_B),\
39	SR(DCHUBBUB_ARB_ALLOW_DRAM_CLK_CHANGE_WATERMARK_B),\
40	SR(DCHUBBUB_ARB_DATA_URGENCY_WATERMARK_C),\
41	SR(DCHUBBUB_ARB_ALLOW_DRAM_CLK_CHANGE_WATERMARK_C),\
42	SR(DCHUBBUB_ARB_DATA_URGENCY_WATERMARK_D),\
43	SR(DCHUBBUB_ARB_ALLOW_DRAM_CLK_CHANGE_WATERMARK_D),\
44	SR(DCHUBBUB_ARB_WATERMARK_CHANGE_CNTL),\
45	SR(DCHUBBUB_ARB_DRAM_STATE_CNTL),\
46	SR(DCHUBBUB_ARB_SAT_LEVEL),\
47	SR(DCHUBBUB_ARB_DF_REQ_OUTSTAND),\
48	SR(DCHUBBUB_GLOBAL_TIMER_CNTL), \
49	SR(DCHUBBUB_TEST_DEBUG_INDEX), \
50	SR(DCHUBBUB_TEST_DEBUG_DATA),\
51	SR(DCHUBBUB_SOFT_RESET)
52
53#define HUBBUB_VM_REG_LIST() \
54	SR(DCHUBBUB_ARB_PTE_META_URGENCY_WATERMARK_A),\
55	SR(DCHUBBUB_ARB_PTE_META_URGENCY_WATERMARK_B),\
56	SR(DCHUBBUB_ARB_PTE_META_URGENCY_WATERMARK_C),\
57	SR(DCHUBBUB_ARB_PTE_META_URGENCY_WATERMARK_D)
58
59#define HUBBUB_SR_WATERMARK_REG_LIST()\
60	SR(DCHUBBUB_ARB_ALLOW_SR_ENTER_WATERMARK_A),\
61	SR(DCHUBBUB_ARB_ALLOW_SR_EXIT_WATERMARK_A),\
62	SR(DCHUBBUB_ARB_ALLOW_SR_ENTER_WATERMARK_B),\
63	SR(DCHUBBUB_ARB_ALLOW_SR_EXIT_WATERMARK_B),\
64	SR(DCHUBBUB_ARB_ALLOW_SR_ENTER_WATERMARK_C),\
65	SR(DCHUBBUB_ARB_ALLOW_SR_EXIT_WATERMARK_C),\
66	SR(DCHUBBUB_ARB_ALLOW_SR_ENTER_WATERMARK_D),\
67	SR(DCHUBBUB_ARB_ALLOW_SR_EXIT_WATERMARK_D)
68
69#define HUBBUB_REG_LIST_DCN10(id)\
70	HUBBUB_REG_LIST_DCN_COMMON(), \
71	HUBBUB_VM_REG_LIST(), \
72	HUBBUB_SR_WATERMARK_REG_LIST(), \
73	SR(DCHUBBUB_SDPIF_FB_TOP),\
74	SR(DCHUBBUB_SDPIF_FB_BASE),\
75	SR(DCHUBBUB_SDPIF_FB_OFFSET),\
76	SR(DCHUBBUB_SDPIF_AGP_BASE),\
77	SR(DCHUBBUB_SDPIF_AGP_BOT),\
78	SR(DCHUBBUB_SDPIF_AGP_TOP)
79
80struct dcn_hubbub_registers {
81	uint32_t DCHUBBUB_ARB_DATA_URGENCY_WATERMARK_A;
82	uint32_t DCHUBBUB_ARB_PTE_META_URGENCY_WATERMARK_A;
83	uint32_t DCHUBBUB_ARB_ALLOW_SR_ENTER_WATERMARK_A;
84	uint32_t DCHUBBUB_ARB_ALLOW_SR_EXIT_WATERMARK_A;
85	uint32_t DCHUBBUB_ARB_ALLOW_DRAM_CLK_CHANGE_WATERMARK_A;
86	uint32_t DCHUBBUB_ARB_DATA_URGENCY_WATERMARK_B;
87	uint32_t DCHUBBUB_ARB_PTE_META_URGENCY_WATERMARK_B;
88	uint32_t DCHUBBUB_ARB_ALLOW_SR_ENTER_WATERMARK_B;
89	uint32_t DCHUBBUB_ARB_ALLOW_SR_EXIT_WATERMARK_B;
90	uint32_t DCHUBBUB_ARB_ALLOW_DRAM_CLK_CHANGE_WATERMARK_B;
91	uint32_t DCHUBBUB_ARB_DATA_URGENCY_WATERMARK_C;
92	uint32_t DCHUBBUB_ARB_PTE_META_URGENCY_WATERMARK_C;
93	uint32_t DCHUBBUB_ARB_ALLOW_SR_ENTER_WATERMARK_C;
94	uint32_t DCHUBBUB_ARB_ALLOW_SR_EXIT_WATERMARK_C;
95	uint32_t DCHUBBUB_ARB_ALLOW_DRAM_CLK_CHANGE_WATERMARK_C;
96	uint32_t DCHUBBUB_ARB_DATA_URGENCY_WATERMARK_D;
97	uint32_t DCHUBBUB_ARB_PTE_META_URGENCY_WATERMARK_D;
98	uint32_t DCHUBBUB_ARB_ALLOW_SR_ENTER_WATERMARK_D;
99	uint32_t DCHUBBUB_ARB_ALLOW_SR_EXIT_WATERMARK_D;
100	uint32_t DCHUBBUB_ARB_ALLOW_DRAM_CLK_CHANGE_WATERMARK_D;
101	uint32_t DCHUBBUB_ARB_WATERMARK_CHANGE_CNTL;
102	uint32_t DCHUBBUB_ARB_SAT_LEVEL;
103	uint32_t DCHUBBUB_ARB_DF_REQ_OUTSTAND;
104	uint32_t DCHUBBUB_GLOBAL_TIMER_CNTL;
105	uint32_t DCHUBBUB_ARB_DRAM_STATE_CNTL;
106	uint32_t DCHUBBUB_TEST_DEBUG_INDEX;
107	uint32_t DCHUBBUB_TEST_DEBUG_DATA;
108	uint32_t DCHUBBUB_SDPIF_FB_TOP;
109	uint32_t DCHUBBUB_SDPIF_FB_BASE;
110	uint32_t DCHUBBUB_SDPIF_FB_OFFSET;
111	uint32_t DCHUBBUB_SDPIF_AGP_BASE;
112	uint32_t DCHUBBUB_SDPIF_AGP_BOT;
113	uint32_t DCHUBBUB_SDPIF_AGP_TOP;
114	uint32_t DCHUBBUB_CRC_CTRL;
115	uint32_t DCHUBBUB_SOFT_RESET;
116	uint32_t DCN_VM_FB_LOCATION_BASE;
117	uint32_t DCN_VM_FB_LOCATION_TOP;
118	uint32_t DCN_VM_FB_OFFSET;
119	uint32_t DCN_VM_AGP_BOT;
120	uint32_t DCN_VM_AGP_TOP;
121	uint32_t DCN_VM_AGP_BASE;
122	uint32_t DCN_VM_PROTECTION_FAULT_DEFAULT_ADDR_MSB;
123	uint32_t DCN_VM_PROTECTION_FAULT_DEFAULT_ADDR_LSB;
124	uint32_t DCN_VM_FAULT_ADDR_MSB;
125	uint32_t DCN_VM_FAULT_ADDR_LSB;
126	uint32_t DCN_VM_FAULT_CNTL;
127	uint32_t DCN_VM_FAULT_STATUS;
128	uint32_t DCHUBBUB_ARB_FRAC_URG_BW_NOM_A;
129	uint32_t DCHUBBUB_ARB_FRAC_URG_BW_NOM_B;
130	uint32_t DCHUBBUB_ARB_FRAC_URG_BW_NOM_C;
131	uint32_t DCHUBBUB_ARB_FRAC_URG_BW_NOM_D;
132	uint32_t DCHUBBUB_ARB_FRAC_URG_BW_FLIP_A;
133	uint32_t DCHUBBUB_ARB_FRAC_URG_BW_FLIP_B;
134	uint32_t DCHUBBUB_ARB_FRAC_URG_BW_FLIP_C;
135	uint32_t DCHUBBUB_ARB_FRAC_URG_BW_FLIP_D;
136	uint32_t DCHUBBUB_ARB_REFCYC_PER_TRIP_TO_MEMORY_A;
137	uint32_t DCHUBBUB_ARB_REFCYC_PER_TRIP_TO_MEMORY_B;
138	uint32_t DCHUBBUB_ARB_REFCYC_PER_TRIP_TO_MEMORY_C;
139	uint32_t DCHUBBUB_ARB_REFCYC_PER_TRIP_TO_MEMORY_D;
140	uint32_t DCHUBBUB_ARB_HOSTVM_CNTL;
141	uint32_t DCHVM_CTRL0;
142	uint32_t DCHVM_MEM_CTRL;
143	uint32_t DCHVM_CLK_CTRL;
144	uint32_t DCHVM_RIOMMU_CTRL0;
145	uint32_t DCHVM_RIOMMU_STAT0;
146	uint32_t DCHUBBUB_DET0_CTRL;
147	uint32_t DCHUBBUB_DET1_CTRL;
148	uint32_t DCHUBBUB_DET2_CTRL;
149	uint32_t DCHUBBUB_DET3_CTRL;
150	uint32_t DCHUBBUB_COMPBUF_CTRL;
151	uint32_t COMPBUF_RESERVED_SPACE;
152	uint32_t DCHUBBUB_DEBUG_CTRL_0;
153	uint32_t DCHUBBUB_ARB_ALLOW_SR_ENTER_WATERMARK_Z8_A;
154	uint32_t DCHUBBUB_ARB_ALLOW_SR_EXIT_WATERMARK_Z8_A;
155	uint32_t DCHUBBUB_ARB_ALLOW_SR_ENTER_WATERMARK_Z8_B;
156	uint32_t DCHUBBUB_ARB_ALLOW_SR_EXIT_WATERMARK_Z8_B;
157	uint32_t DCHUBBUB_ARB_ALLOW_SR_ENTER_WATERMARK_Z8_C;
158	uint32_t DCHUBBUB_ARB_ALLOW_SR_EXIT_WATERMARK_Z8_C;
159	uint32_t DCHUBBUB_ARB_ALLOW_SR_ENTER_WATERMARK_Z8_D;
160	uint32_t DCHUBBUB_ARB_ALLOW_SR_EXIT_WATERMARK_Z8_D;
161	uint32_t DCHUBBUB_ARB_USR_RETRAINING_CNTL;
162	uint32_t DCHUBBUB_ARB_USR_RETRAINING_WATERMARK_A;
163	uint32_t DCHUBBUB_ARB_USR_RETRAINING_WATERMARK_B;
164	uint32_t DCHUBBUB_ARB_USR_RETRAINING_WATERMARK_C;
165	uint32_t DCHUBBUB_ARB_USR_RETRAINING_WATERMARK_D;
166	uint32_t DCHUBBUB_ARB_UCLK_PSTATE_CHANGE_WATERMARK_A;
167	uint32_t DCHUBBUB_ARB_UCLK_PSTATE_CHANGE_WATERMARK_B;
168	uint32_t DCHUBBUB_ARB_UCLK_PSTATE_CHANGE_WATERMARK_C;
169	uint32_t DCHUBBUB_ARB_UCLK_PSTATE_CHANGE_WATERMARK_D;
170	uint32_t DCHUBBUB_ARB_FCLK_PSTATE_CHANGE_WATERMARK_A;
171	uint32_t DCHUBBUB_ARB_FCLK_PSTATE_CHANGE_WATERMARK_B;
172	uint32_t DCHUBBUB_ARB_FCLK_PSTATE_CHANGE_WATERMARK_C;
173	uint32_t DCHUBBUB_ARB_FCLK_PSTATE_CHANGE_WATERMARK_D;
174	uint32_t SDPIF_REQUEST_RATE_LIMIT;
175	uint32_t DCHUBBUB_SDPIF_CFG0;
176	uint32_t DCHUBBUB_SDPIF_CFG1;
177	uint32_t DCHUBBUB_CLOCK_CNTL;
178	uint32_t DCHUBBUB_MEM_PWR_MODE_CTRL;
179};
180
181#define HUBBUB_REG_FIELD_LIST_DCN32(type) \
182		type DCHUBBUB_ARB_ALLOW_USR_RETRAINING_FORCE_VALUE;\
183		type DCHUBBUB_ARB_ALLOW_USR_RETRAINING_FORCE_ENABLE;\
184		type DCHUBBUB_ARB_DO_NOT_FORCE_ALLOW_USR_RETRAINING_DURING_PSTATE_CHANGE_REQUEST;\
185		type DCHUBBUB_ARB_DO_NOT_FORCE_ALLOW_USR_RETRAINING_DURING_PRE_CSTATE;\
186		type DCHUBBUB_ARB_USR_RETRAINING_WATERMARK_A;\
187		type DCHUBBUB_ARB_USR_RETRAINING_WATERMARK_B;\
188		type DCHUBBUB_ARB_USR_RETRAINING_WATERMARK_C;\
189		type DCHUBBUB_ARB_USR_RETRAINING_WATERMARK_D;\
190		type DCHUBBUB_ARB_UCLK_PSTATE_CHANGE_WATERMARK_A;\
191		type DCHUBBUB_ARB_UCLK_PSTATE_CHANGE_WATERMARK_B;\
192		type DCHUBBUB_ARB_UCLK_PSTATE_CHANGE_WATERMARK_C;\
193		type DCHUBBUB_ARB_UCLK_PSTATE_CHANGE_WATERMARK_D;\
194		type DCHUBBUB_ARB_FCLK_PSTATE_CHANGE_WATERMARK_A;\
195		type DCHUBBUB_ARB_FCLK_PSTATE_CHANGE_WATERMARK_B;\
196		type DCHUBBUB_ARB_FCLK_PSTATE_CHANGE_WATERMARK_C;\
197		type DCHUBBUB_ARB_FCLK_PSTATE_CHANGE_WATERMARK_D
198
199/* set field name */
200#define HUBBUB_SF(reg_name, field_name, post_fix)\
201	.field_name = reg_name ## __ ## field_name ## post_fix
202
203#define HUBBUB_MASK_SH_LIST_DCN_COMMON(mask_sh)\
204		HUBBUB_SF(DCHUBBUB_GLOBAL_TIMER_CNTL, DCHUBBUB_GLOBAL_TIMER_ENABLE, mask_sh), \
205		HUBBUB_SF(DCHUBBUB_SOFT_RESET, DCHUBBUB_GLOBAL_SOFT_RESET, mask_sh), \
206		HUBBUB_SF(DCHUBBUB_ARB_WATERMARK_CHANGE_CNTL, DCHUBBUB_ARB_WATERMARK_CHANGE_REQUEST, mask_sh), \
207		HUBBUB_SF(DCHUBBUB_ARB_WATERMARK_CHANGE_CNTL, DCHUBBUB_ARB_WATERMARK_CHANGE_DONE_INTERRUPT_DISABLE, mask_sh), \
208		HUBBUB_SF(DCHUBBUB_ARB_DRAM_STATE_CNTL, DCHUBBUB_ARB_ALLOW_SELF_REFRESH_FORCE_VALUE, mask_sh), \
209		HUBBUB_SF(DCHUBBUB_ARB_DRAM_STATE_CNTL, DCHUBBUB_ARB_ALLOW_SELF_REFRESH_FORCE_ENABLE, mask_sh), \
210		HUBBUB_SF(DCHUBBUB_ARB_DRAM_STATE_CNTL, DCHUBBUB_ARB_ALLOW_PSTATE_CHANGE_FORCE_VALUE, mask_sh), \
211		HUBBUB_SF(DCHUBBUB_ARB_DRAM_STATE_CNTL, DCHUBBUB_ARB_ALLOW_PSTATE_CHANGE_FORCE_ENABLE, mask_sh), \
212		HUBBUB_SF(DCHUBBUB_ARB_SAT_LEVEL, DCHUBBUB_ARB_SAT_LEVEL, mask_sh), \
213		HUBBUB_SF(DCHUBBUB_ARB_DF_REQ_OUTSTAND, DCHUBBUB_ARB_MIN_REQ_OUTSTAND, mask_sh), \
214		HUBBUB_SF(DCHUBBUB_ARB_DATA_URGENCY_WATERMARK_A, DCHUBBUB_ARB_DATA_URGENCY_WATERMARK_A, mask_sh), \
215		HUBBUB_SF(DCHUBBUB_ARB_DATA_URGENCY_WATERMARK_B, DCHUBBUB_ARB_DATA_URGENCY_WATERMARK_B, mask_sh), \
216		HUBBUB_SF(DCHUBBUB_ARB_DATA_URGENCY_WATERMARK_C, DCHUBBUB_ARB_DATA_URGENCY_WATERMARK_C, mask_sh), \
217		HUBBUB_SF(DCHUBBUB_ARB_DATA_URGENCY_WATERMARK_D, DCHUBBUB_ARB_DATA_URGENCY_WATERMARK_D, mask_sh), \
218		HUBBUB_SF(DCHUBBUB_ARB_ALLOW_DRAM_CLK_CHANGE_WATERMARK_A, DCHUBBUB_ARB_ALLOW_DRAM_CLK_CHANGE_WATERMARK_A, mask_sh), \
219		HUBBUB_SF(DCHUBBUB_ARB_ALLOW_DRAM_CLK_CHANGE_WATERMARK_B, DCHUBBUB_ARB_ALLOW_DRAM_CLK_CHANGE_WATERMARK_B, mask_sh), \
220		HUBBUB_SF(DCHUBBUB_ARB_ALLOW_DRAM_CLK_CHANGE_WATERMARK_C, DCHUBBUB_ARB_ALLOW_DRAM_CLK_CHANGE_WATERMARK_C, mask_sh), \
221		HUBBUB_SF(DCHUBBUB_ARB_ALLOW_DRAM_CLK_CHANGE_WATERMARK_D, DCHUBBUB_ARB_ALLOW_DRAM_CLK_CHANGE_WATERMARK_D, mask_sh)
222
223#define HUBBUB_MASK_SH_LIST_STUTTER(mask_sh) \
224		HUBBUB_SF(DCHUBBUB_ARB_ALLOW_SR_ENTER_WATERMARK_A, DCHUBBUB_ARB_ALLOW_SR_ENTER_WATERMARK_A, mask_sh), \
225		HUBBUB_SF(DCHUBBUB_ARB_ALLOW_SR_ENTER_WATERMARK_B, DCHUBBUB_ARB_ALLOW_SR_ENTER_WATERMARK_B, mask_sh), \
226		HUBBUB_SF(DCHUBBUB_ARB_ALLOW_SR_ENTER_WATERMARK_C, DCHUBBUB_ARB_ALLOW_SR_ENTER_WATERMARK_C, mask_sh), \
227		HUBBUB_SF(DCHUBBUB_ARB_ALLOW_SR_ENTER_WATERMARK_D, DCHUBBUB_ARB_ALLOW_SR_ENTER_WATERMARK_D, mask_sh), \
228		HUBBUB_SF(DCHUBBUB_ARB_ALLOW_SR_EXIT_WATERMARK_A, DCHUBBUB_ARB_ALLOW_SR_EXIT_WATERMARK_A, mask_sh), \
229		HUBBUB_SF(DCHUBBUB_ARB_ALLOW_SR_EXIT_WATERMARK_B, DCHUBBUB_ARB_ALLOW_SR_EXIT_WATERMARK_B, mask_sh), \
230		HUBBUB_SF(DCHUBBUB_ARB_ALLOW_SR_EXIT_WATERMARK_C, DCHUBBUB_ARB_ALLOW_SR_EXIT_WATERMARK_C, mask_sh), \
231		HUBBUB_SF(DCHUBBUB_ARB_ALLOW_SR_EXIT_WATERMARK_D, DCHUBBUB_ARB_ALLOW_SR_EXIT_WATERMARK_D, mask_sh)
232
233#define HUBBUB_MASK_SH_LIST_DCN10(mask_sh)\
234		HUBBUB_MASK_SH_LIST_DCN_COMMON(mask_sh), \
235		HUBBUB_MASK_SH_LIST_STUTTER(mask_sh), \
236		HUBBUB_SF(DCHUBBUB_SDPIF_FB_TOP, SDPIF_FB_TOP, mask_sh), \
237		HUBBUB_SF(DCHUBBUB_SDPIF_FB_BASE, SDPIF_FB_BASE, mask_sh), \
238		HUBBUB_SF(DCHUBBUB_SDPIF_FB_OFFSET, SDPIF_FB_OFFSET, mask_sh), \
239		HUBBUB_SF(DCHUBBUB_SDPIF_AGP_BASE, SDPIF_AGP_BASE, mask_sh), \
240		HUBBUB_SF(DCHUBBUB_SDPIF_AGP_BOT, SDPIF_AGP_BOT, mask_sh), \
241		HUBBUB_SF(DCHUBBUB_SDPIF_AGP_TOP, SDPIF_AGP_TOP, mask_sh)
242
243#define DCN_HUBBUB_REG_FIELD_LIST(type) \
244		type DCHUBBUB_GLOBAL_TIMER_ENABLE; \
245		type DCHUBBUB_ARB_WATERMARK_CHANGE_REQUEST;\
246		type DCHUBBUB_ARB_WATERMARK_CHANGE_DONE_INTERRUPT_DISABLE;\
247		type DCHUBBUB_ARB_ALLOW_SELF_REFRESH_FORCE_VALUE;\
248		type DCHUBBUB_ARB_ALLOW_SELF_REFRESH_FORCE_ENABLE;\
249		type DCHUBBUB_ARB_ALLOW_PSTATE_CHANGE_FORCE_VALUE;\
250		type DCHUBBUB_ARB_ALLOW_PSTATE_CHANGE_FORCE_ENABLE;\
251		type DCHUBBUB_ARB_SAT_LEVEL;\
252		type DCHUBBUB_ARB_MIN_REQ_OUTSTAND;\
253		type DCHUBBUB_GLOBAL_TIMER_REFDIV;\
254		type DCHUBBUB_GLOBAL_SOFT_RESET; \
255		type SDPIF_FB_TOP;\
256		type SDPIF_FB_BASE;\
257		type SDPIF_FB_OFFSET;\
258		type SDPIF_AGP_BASE;\
259		type SDPIF_AGP_BOT;\
260		type SDPIF_AGP_TOP;\
261		type FB_BASE;\
262		type FB_TOP;\
263		type FB_OFFSET;\
264		type AGP_BOT;\
265		type AGP_TOP;\
266		type AGP_BASE;\
267		type DCHUBBUB_ARB_DATA_URGENCY_WATERMARK_A;\
268		type DCHUBBUB_ARB_DATA_URGENCY_WATERMARK_B;\
269		type DCHUBBUB_ARB_DATA_URGENCY_WATERMARK_C;\
270		type DCHUBBUB_ARB_DATA_URGENCY_WATERMARK_D;\
271		type DCHUBBUB_ARB_ALLOW_DRAM_CLK_CHANGE_WATERMARK_A;\
272		type DCHUBBUB_ARB_ALLOW_DRAM_CLK_CHANGE_WATERMARK_B;\
273		type DCHUBBUB_ARB_ALLOW_DRAM_CLK_CHANGE_WATERMARK_C;\
274		type DCHUBBUB_ARB_ALLOW_DRAM_CLK_CHANGE_WATERMARK_D;\
275		type DCN_VM_PROTECTION_FAULT_DEFAULT_ADDR_MSB;\
276		type DCN_VM_PROTECTION_FAULT_DEFAULT_ADDR_LSB;\
277		type DCN_VM_FAULT_ADDR_MSB;\
278		type DCN_VM_FAULT_ADDR_LSB;\
279		type DCN_VM_ERROR_STATUS_CLEAR;\
280		type DCN_VM_ERROR_STATUS_MODE;\
281		type DCN_VM_ERROR_INTERRUPT_ENABLE;\
282		type DCN_VM_RANGE_FAULT_DISABLE;\
283		type DCN_VM_PRQ_FAULT_DISABLE;\
284		type DCN_VM_ERROR_STATUS;\
285		type DCN_VM_ERROR_VMID;\
286		type DCN_VM_ERROR_TABLE_LEVEL;\
287		type DCN_VM_ERROR_PIPE;\
288		type DCN_VM_ERROR_INTERRUPT_STATUS
289
290#define HUBBUB_STUTTER_REG_FIELD_LIST(type) \
291		type DCHUBBUB_ARB_ALLOW_SR_ENTER_WATERMARK_A;\
292		type DCHUBBUB_ARB_ALLOW_SR_ENTER_WATERMARK_B;\
293		type DCHUBBUB_ARB_ALLOW_SR_ENTER_WATERMARK_C;\
294		type DCHUBBUB_ARB_ALLOW_SR_ENTER_WATERMARK_D;\
295		type DCHUBBUB_ARB_ALLOW_SR_EXIT_WATERMARK_A;\
296		type DCHUBBUB_ARB_ALLOW_SR_EXIT_WATERMARK_B;\
297		type DCHUBBUB_ARB_ALLOW_SR_EXIT_WATERMARK_C;\
298		type DCHUBBUB_ARB_ALLOW_SR_EXIT_WATERMARK_D
299
300#define HUBBUB_HVM_REG_FIELD_LIST(type) \
301		type DCHUBBUB_ARB_MIN_REQ_OUTSTAND_COMMIT_THRESHOLD;\
302		type DCHUBBUB_ARB_VM_ROW_URGENCY_WATERMARK_A;\
303		type DCHUBBUB_ARB_VM_ROW_URGENCY_WATERMARK_B;\
304		type DCHUBBUB_ARB_VM_ROW_URGENCY_WATERMARK_C;\
305		type DCHUBBUB_ARB_VM_ROW_URGENCY_WATERMARK_D;\
306		type DCHUBBUB_ARB_VM_ROW_ALLOW_SR_ENTER_WATERMARK_A;\
307		type DCHUBBUB_ARB_VM_ROW_ALLOW_SR_ENTER_WATERMARK_B;\
308		type DCHUBBUB_ARB_VM_ROW_ALLOW_SR_ENTER_WATERMARK_C;\
309		type DCHUBBUB_ARB_VM_ROW_ALLOW_SR_ENTER_WATERMARK_D;\
310		type DCHUBBUB_ARB_VM_ROW_ALLOW_SR_EXIT_WATERMARK_A;\
311		type DCHUBBUB_ARB_VM_ROW_ALLOW_SR_EXIT_WATERMARK_B;\
312		type DCHUBBUB_ARB_VM_ROW_ALLOW_SR_EXIT_WATERMARK_C;\
313		type DCHUBBUB_ARB_VM_ROW_ALLOW_SR_EXIT_WATERMARK_D;\
314		type DCHUBBUB_ARB_VM_ROW_ALLOW_DRAM_CLK_CHANGE_WATERMARK_A;\
315		type DCHUBBUB_ARB_VM_ROW_ALLOW_DRAM_CLK_CHANGE_WATERMARK_B;\
316		type DCHUBBUB_ARB_VM_ROW_ALLOW_DRAM_CLK_CHANGE_WATERMARK_C;\
317		type DCHUBBUB_ARB_VM_ROW_ALLOW_DRAM_CLK_CHANGE_WATERMARK_D;\
318		type DCHUBBUB_ARB_FRAC_URG_BW_NOM_A;\
319		type DCHUBBUB_ARB_FRAC_URG_BW_NOM_B;\
320		type DCHUBBUB_ARB_FRAC_URG_BW_NOM_C;\
321		type DCHUBBUB_ARB_FRAC_URG_BW_NOM_D;\
322		type DCHUBBUB_ARB_FRAC_URG_BW_FLIP_A;\
323		type DCHUBBUB_ARB_FRAC_URG_BW_FLIP_B;\
324		type DCHUBBUB_ARB_FRAC_URG_BW_FLIP_C;\
325		type DCHUBBUB_ARB_FRAC_URG_BW_FLIP_D;\
326		type DCHUBBUB_ARB_REFCYC_PER_TRIP_TO_MEMORY_A;\
327		type DCHUBBUB_ARB_REFCYC_PER_TRIP_TO_MEMORY_B;\
328		type DCHUBBUB_ARB_REFCYC_PER_TRIP_TO_MEMORY_C;\
329		type DCHUBBUB_ARB_REFCYC_PER_TRIP_TO_MEMORY_D;\
330		type DCHUBBUB_ARB_MAX_QOS_COMMIT_THRESHOLD;\
331		type HOSTVM_INIT_REQ; \
332		type HVM_GPUVMRET_PWR_REQ_DIS; \
333		type HVM_GPUVMRET_FORCE_REQ; \
334		type HVM_GPUVMRET_POWER_STATUS; \
335		type HVM_DISPCLK_R_GATE_DIS; \
336		type HVM_DISPCLK_G_GATE_DIS; \
337		type HVM_DCFCLK_R_GATE_DIS; \
338		type HVM_DCFCLK_G_GATE_DIS; \
339		type TR_REQ_REQCLKREQ_MODE; \
340		type TW_RSP_COMPCLKREQ_MODE; \
341		type HOSTVM_PREFETCH_REQ; \
342		type HOSTVM_POWERSTATUS; \
343		type RIOMMU_ACTIVE; \
344		type HOSTVM_PREFETCH_DONE
345
346#define HUBBUB_RET_REG_FIELD_LIST(type) \
347		type DET_DEPTH;\
348		type DET0_SIZE;\
349		type DET1_SIZE;\
350		type DET2_SIZE;\
351		type DET3_SIZE;\
352		type DET0_SIZE_CURRENT;\
353		type DET1_SIZE_CURRENT;\
354		type DET2_SIZE_CURRENT;\
355		type DET3_SIZE_CURRENT;\
356		type COMPBUF_SIZE;\
357		type COMPBUF_SIZE_CURRENT;\
358		type CONFIG_ERROR;\
359		type COMPBUF_RESERVED_SPACE_64B;\
360		type COMPBUF_RESERVED_SPACE_ZS;\
361		type DCHUBBUB_ARB_ALLOW_SR_ENTER_WATERMARK_Z8_A;\
362		type DCHUBBUB_ARB_ALLOW_SR_EXIT_WATERMARK_Z8_A;\
363		type DCHUBBUB_ARB_ALLOW_SR_ENTER_WATERMARK_Z8_B;\
364		type DCHUBBUB_ARB_ALLOW_SR_EXIT_WATERMARK_Z8_B;\
365		type DCHUBBUB_ARB_ALLOW_SR_ENTER_WATERMARK_Z8_C;\
366		type DCHUBBUB_ARB_ALLOW_SR_EXIT_WATERMARK_Z8_C;\
367		type DCHUBBUB_ARB_ALLOW_SR_ENTER_WATERMARK_Z8_D;\
368		type DCHUBBUB_ARB_ALLOW_SR_EXIT_WATERMARK_Z8_D;\
369		type SDPIF_REQUEST_RATE_LIMIT;\
370		type DISPCLK_R_DCHUBBUB_GATE_DIS;\
371		type DCFCLK_R_DCHUBBUB_GATE_DIS;\
372		type SDPIF_MAX_NUM_OUTSTANDING;\
373		type DCHUBBUB_ARB_MAX_REQ_OUTSTAND;\
374		type SDPIF_PORT_CONTROL;\
375		type DET_MEM_PWR_LS_MODE
376
377
378struct dcn_hubbub_shift {
379	DCN_HUBBUB_REG_FIELD_LIST(uint8_t);
380	HUBBUB_STUTTER_REG_FIELD_LIST(uint8_t);
381	HUBBUB_HVM_REG_FIELD_LIST(uint8_t);
382	HUBBUB_RET_REG_FIELD_LIST(uint8_t);
383	HUBBUB_REG_FIELD_LIST_DCN32(uint8_t);
384};
385
386struct dcn_hubbub_mask {
387	DCN_HUBBUB_REG_FIELD_LIST(uint32_t);
388	HUBBUB_STUTTER_REG_FIELD_LIST(uint32_t);
389	HUBBUB_HVM_REG_FIELD_LIST(uint32_t);
390	HUBBUB_RET_REG_FIELD_LIST(uint32_t);
391	HUBBUB_REG_FIELD_LIST_DCN32(uint32_t);
392};
393
394struct dc;
395
396struct dcn10_hubbub {
397	struct hubbub base;
398	const struct dcn_hubbub_registers *regs;
399	const struct dcn_hubbub_shift *shifts;
400	const struct dcn_hubbub_mask *masks;
401	unsigned int debug_test_index_pstate;
402	struct dcn_watermark_set watermarks;
403};
404
405void hubbub1_update_dchub(
406	struct hubbub *hubbub,
407	struct dchub_init_data *dh_data);
408
409bool hubbub1_verify_allow_pstate_change_high(
410	struct hubbub *hubbub);
411
412void hubbub1_wm_change_req_wa(struct hubbub *hubbub);
413
414bool hubbub1_program_watermarks(
415		struct hubbub *hubbub,
416		struct dcn_watermark_set *watermarks,
417		unsigned int refclk_mhz,
418		bool safe_to_lower);
419
420void hubbub1_allow_self_refresh_control(struct hubbub *hubbub, bool allow);
421
422bool hubbub1_is_allow_self_refresh_enabled(struct hubbub *hubub);
423
424void hubbub1_toggle_watermark_change_req(
425		struct hubbub *hubbub);
426
427void hubbub1_wm_read_state(struct hubbub *hubbub,
428		struct dcn_hubbub_wm *wm);
429
430void hubbub1_soft_reset(struct hubbub *hubbub, bool reset);
431void hubbub1_construct(struct hubbub *hubbub,
432	struct dc_context *ctx,
433	const struct dcn_hubbub_registers *hubbub_regs,
434	const struct dcn_hubbub_shift *hubbub_shift,
435	const struct dcn_hubbub_mask *hubbub_mask);
436
437bool hubbub1_program_urgent_watermarks(
438		struct hubbub *hubbub,
439		struct dcn_watermark_set *watermarks,
440		unsigned int refclk_mhz,
441		bool safe_to_lower);
442bool hubbub1_program_stutter_watermarks(
443		struct hubbub *hubbub,
444		struct dcn_watermark_set *watermarks,
445		unsigned int refclk_mhz,
446		bool safe_to_lower);
447bool hubbub1_program_pstate_watermarks(
448		struct hubbub *hubbub,
449		struct dcn_watermark_set *watermarks,
450		unsigned int refclk_mhz,
451		bool safe_to_lower);
452
453#endif
454