Linux Audio

Check our new training course

Loading...
v6.9.4
  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#ifndef __DCE_MEM_INPUT_H__
 26#define __DCE_MEM_INPUT_H__
 27
 28#include "dc_hw_types.h"
 29#include "mem_input.h"
 30
 31#define TO_DCE_MEM_INPUT(mem_input)\
 32	container_of(mem_input, struct dce_mem_input, base)
 33
 34#define MI_DCE_BASE_REG_LIST(id)\
 35	SRI(GRPH_ENABLE, DCP, id),\
 36	SRI(GRPH_CONTROL, DCP, id),\
 37	SRI(GRPH_X_START, DCP, id),\
 38	SRI(GRPH_Y_START, DCP, id),\
 39	SRI(GRPH_X_END, DCP, id),\
 40	SRI(GRPH_Y_END, DCP, id),\
 41	SRI(GRPH_PITCH, DCP, id),\
 42	SRI(HW_ROTATION, DCP, id),\
 43	SRI(GRPH_SWAP_CNTL, DCP, id),\
 44	SRI(PRESCALE_GRPH_CONTROL, DCP, id),\
 45	SRI(GRPH_UPDATE, DCP, id),\
 46	SRI(GRPH_FLIP_CONTROL, DCP, id),\
 47	SRI(GRPH_PRIMARY_SURFACE_ADDRESS, DCP, id),\
 48	SRI(GRPH_PRIMARY_SURFACE_ADDRESS_HIGH, DCP, id),\
 49	SRI(GRPH_SECONDARY_SURFACE_ADDRESS, DCP, id),\
 50	SRI(GRPH_SECONDARY_SURFACE_ADDRESS_HIGH, DCP, id),\
 51	SRI(DPG_PIPE_ARBITRATION_CONTROL1, DMIF_PG, id),\
 52	SRI(DPG_WATERMARK_MASK_CONTROL, DMIF_PG, id),\
 53	SRI(DPG_PIPE_URGENCY_CONTROL, DMIF_PG, id),\
 54	SRI(DPG_PIPE_STUTTER_CONTROL, DMIF_PG, id),\
 55	SRI(DMIF_BUFFER_CONTROL, PIPE, id)
 56
 57#define MI_DCE_PTE_REG_LIST(id)\
 58	SRI(DVMM_PTE_CONTROL, DCP, id),\
 59	SRI(DVMM_PTE_ARB_CONTROL, DCP, id)
 60
 61#if defined(CONFIG_DRM_AMD_DC_SI)
 62#define MI_DCE6_REG_LIST(id)\
 63	SRI(GRPH_ENABLE, DCP, id),\
 64	SRI(GRPH_CONTROL, DCP, id),\
 65	SRI(GRPH_X_START, DCP, id),\
 66	SRI(GRPH_Y_START, DCP, id),\
 67	SRI(GRPH_X_END, DCP, id),\
 68	SRI(GRPH_Y_END, DCP, id),\
 69	SRI(GRPH_PITCH, DCP, id),\
 70	SRI(GRPH_SWAP_CNTL, DCP, id),\
 71	SRI(PRESCALE_GRPH_CONTROL, DCP, id),\
 72	SRI(GRPH_UPDATE, DCP, id),\
 73	SRI(GRPH_FLIP_CONTROL, DCP, id),\
 74	SRI(GRPH_PRIMARY_SURFACE_ADDRESS, DCP, id),\
 75	SRI(GRPH_PRIMARY_SURFACE_ADDRESS_HIGH, DCP, id),\
 76	SRI(GRPH_SECONDARY_SURFACE_ADDRESS, DCP, id),\
 77	SRI(GRPH_SECONDARY_SURFACE_ADDRESS_HIGH, DCP, id),\
 78	SRI(DPG_PIPE_ARBITRATION_CONTROL1, DMIF_PG, id),\
 79	SRI(DPG_PIPE_ARBITRATION_CONTROL3, DMIF_PG, id),\
 80	SRI(DPG_PIPE_NB_PSTATE_CHANGE_CONTROL, DMIF_PG, id),\
 81	SRI(DPG_PIPE_URGENCY_CONTROL, DMIF_PG, id),\
 82	SRI(DPG_PIPE_STUTTER_CONTROL, DMIF_PG, id),\
 83	SRI(DMIF_BUFFER_CONTROL, PIPE, id)
 84#endif
 85
 86#define MI_DCE8_REG_LIST(id)\
 87	MI_DCE_BASE_REG_LIST(id),\
 88	SRI(DPG_PIPE_NB_PSTATE_CHANGE_CONTROL, DMIF_PG, id)
 89
 90#define MI_DCE11_2_REG_LIST(id)\
 91	MI_DCE8_REG_LIST(id),\
 92	SRI(GRPH_PIPE_OUTSTANDING_REQUEST_LIMIT, DCP, id)
 93
 94#define MI_DCE11_REG_LIST(id)\
 95	MI_DCE11_2_REG_LIST(id),\
 96	MI_DCE_PTE_REG_LIST(id)
 97
 98#define MI_DCE12_REG_LIST(id)\
 99	MI_DCE_BASE_REG_LIST(id),\
100	MI_DCE_PTE_REG_LIST(id),\
101	SRI(GRPH_PIPE_OUTSTANDING_REQUEST_LIMIT, DCP, id),\
102	SRI(DPG_PIPE_STUTTER_CONTROL2, DMIF_PG, id),\
103	SRI(DPG_PIPE_LOW_POWER_CONTROL, DMIF_PG, id),\
104	SR(DCHUB_FB_LOCATION),\
105	SR(DCHUB_AGP_BASE),\
106	SR(DCHUB_AGP_BOT),\
107	SR(DCHUB_AGP_TOP)
108
109struct dce_mem_input_registers {
110	/* DCP */
111	uint32_t GRPH_ENABLE;
112	uint32_t GRPH_CONTROL;
113	uint32_t GRPH_X_START;
114	uint32_t GRPH_Y_START;
115	uint32_t GRPH_X_END;
116	uint32_t GRPH_Y_END;
117	uint32_t GRPH_PITCH;
118	uint32_t HW_ROTATION;
119	uint32_t GRPH_SWAP_CNTL;
120	uint32_t PRESCALE_GRPH_CONTROL;
121	uint32_t GRPH_PIPE_OUTSTANDING_REQUEST_LIMIT;
122	uint32_t DVMM_PTE_CONTROL;
123	uint32_t DVMM_PTE_ARB_CONTROL;
124	uint32_t GRPH_UPDATE;
125	uint32_t GRPH_FLIP_CONTROL;
126	uint32_t GRPH_PRIMARY_SURFACE_ADDRESS;
127	uint32_t GRPH_PRIMARY_SURFACE_ADDRESS_HIGH;
128	uint32_t GRPH_SECONDARY_SURFACE_ADDRESS;
129	uint32_t GRPH_SECONDARY_SURFACE_ADDRESS_HIGH;
130	/* DMIF_PG */
131	uint32_t DPG_PIPE_ARBITRATION_CONTROL1;
132#if defined(CONFIG_DRM_AMD_DC_SI)
133	uint32_t DPG_PIPE_ARBITRATION_CONTROL3;
134#endif
135	uint32_t DPG_WATERMARK_MASK_CONTROL;
136	uint32_t DPG_PIPE_URGENCY_CONTROL;
137	uint32_t DPG_PIPE_URGENT_LEVEL_CONTROL;
138	uint32_t DPG_PIPE_NB_PSTATE_CHANGE_CONTROL;
139	uint32_t DPG_PIPE_LOW_POWER_CONTROL;
140	uint32_t DPG_PIPE_STUTTER_CONTROL;
141	uint32_t DPG_PIPE_STUTTER_CONTROL2;
142	/* DCI */
143	uint32_t DMIF_BUFFER_CONTROL;
144	/* MC_HUB */
145	uint32_t MC_HUB_RDREQ_DMIF_LIMIT;
146	/*DCHUB*/
147	uint32_t DCHUB_FB_LOCATION;
148	uint32_t DCHUB_AGP_BASE;
149	uint32_t DCHUB_AGP_BOT;
150	uint32_t DCHUB_AGP_TOP;
151};
152
153/* Set_Filed_for_Block */
154#define SFB(blk_name, reg_name, field_name, post_fix)\
155	.field_name = blk_name ## reg_name ## __ ## field_name ## post_fix
156
157#if defined(CONFIG_DRM_AMD_DC_SI)
158#define MI_GFX6_TILE_MASK_SH_LIST(mask_sh, blk)\
159	SFB(blk, GRPH_CONTROL, GRPH_NUM_BANKS, mask_sh),\
160	SFB(blk, GRPH_CONTROL, GRPH_BANK_WIDTH, mask_sh),\
161	SFB(blk, GRPH_CONTROL, GRPH_BANK_HEIGHT, mask_sh),\
162	SFB(blk, GRPH_CONTROL, GRPH_MACRO_TILE_ASPECT, mask_sh),\
163	SFB(blk, GRPH_CONTROL, GRPH_TILE_SPLIT, mask_sh),\
164	SFB(blk, GRPH_CONTROL, GRPH_PIPE_CONFIG, mask_sh),\
165	SFB(blk, GRPH_CONTROL, GRPH_ARRAY_MODE, mask_sh),\
166	SFB(blk, GRPH_CONTROL, GRPH_COLOR_EXPANSION_MODE, mask_sh)
167#endif
168
169#define MI_GFX8_TILE_MASK_SH_LIST(mask_sh, blk)\
170	SFB(blk, GRPH_CONTROL, GRPH_NUM_BANKS, mask_sh),\
171	SFB(blk, GRPH_CONTROL, GRPH_BANK_WIDTH, mask_sh),\
172	SFB(blk, GRPH_CONTROL, GRPH_BANK_HEIGHT, mask_sh),\
173	SFB(blk, GRPH_CONTROL, GRPH_MACRO_TILE_ASPECT, mask_sh),\
174	SFB(blk, GRPH_CONTROL, GRPH_TILE_SPLIT, mask_sh),\
175	SFB(blk, GRPH_CONTROL, GRPH_MICRO_TILE_MODE, mask_sh),\
176	SFB(blk, GRPH_CONTROL, GRPH_PIPE_CONFIG, mask_sh),\
177	SFB(blk, GRPH_CONTROL, GRPH_ARRAY_MODE, mask_sh),\
178	SFB(blk, GRPH_CONTROL, GRPH_COLOR_EXPANSION_MODE, mask_sh)
179
180#define MI_DCP_MASK_SH_LIST(mask_sh, blk)\
181	SFB(blk, GRPH_ENABLE, GRPH_ENABLE, mask_sh),\
182	SFB(blk, GRPH_CONTROL, GRPH_DEPTH, mask_sh),\
183	SFB(blk, GRPH_CONTROL, GRPH_FORMAT, mask_sh),\
 
184	SFB(blk, GRPH_X_START, GRPH_X_START, mask_sh),\
185	SFB(blk, GRPH_Y_START, GRPH_Y_START, mask_sh),\
186	SFB(blk, GRPH_X_END, GRPH_X_END, mask_sh),\
187	SFB(blk, GRPH_Y_END, GRPH_Y_END, mask_sh),\
188	SFB(blk, GRPH_PITCH, GRPH_PITCH, mask_sh),\
189	SFB(blk, HW_ROTATION, GRPH_ROTATION_ANGLE, mask_sh),\
190	SFB(blk, GRPH_SWAP_CNTL, GRPH_RED_CROSSBAR, mask_sh),\
191	SFB(blk, GRPH_SWAP_CNTL, GRPH_BLUE_CROSSBAR, mask_sh),\
192	SFB(blk, PRESCALE_GRPH_CONTROL, GRPH_PRESCALE_SELECT, mask_sh),\
193	SFB(blk, PRESCALE_GRPH_CONTROL, GRPH_PRESCALE_R_SIGN, mask_sh),\
194	SFB(blk, PRESCALE_GRPH_CONTROL, GRPH_PRESCALE_G_SIGN, mask_sh),\
195	SFB(blk, PRESCALE_GRPH_CONTROL, GRPH_PRESCALE_B_SIGN, mask_sh),\
196	SFB(blk, GRPH_SECONDARY_SURFACE_ADDRESS_HIGH, GRPH_SECONDARY_SURFACE_ADDRESS_HIGH, mask_sh),\
197	SFB(blk, GRPH_SECONDARY_SURFACE_ADDRESS, GRPH_SECONDARY_SURFACE_ADDRESS, mask_sh),\
198	SFB(blk, GRPH_PRIMARY_SURFACE_ADDRESS_HIGH, GRPH_PRIMARY_SURFACE_ADDRESS_HIGH, mask_sh),\
199	SFB(blk, GRPH_PRIMARY_SURFACE_ADDRESS, GRPH_PRIMARY_SURFACE_ADDRESS, mask_sh),\
200	SFB(blk, GRPH_UPDATE, GRPH_SURFACE_UPDATE_PENDING, mask_sh),\
201	SFB(blk, GRPH_UPDATE, GRPH_UPDATE_LOCK, mask_sh),\
202	SFB(blk, GRPH_FLIP_CONTROL, GRPH_SURFACE_UPDATE_H_RETRACE_EN, mask_sh)
203
204#if defined(CONFIG_DRM_AMD_DC_SI)
205#define MI_DCP_MASK_SH_LIST_DCE6(mask_sh, blk)\
206	SFB(blk, GRPH_ENABLE, GRPH_ENABLE, mask_sh),\
207	SFB(blk, GRPH_CONTROL, GRPH_DEPTH, mask_sh),\
208	SFB(blk, GRPH_CONTROL, GRPH_FORMAT, mask_sh),\
209	SFB(blk, GRPH_X_START, GRPH_X_START, mask_sh),\
210	SFB(blk, GRPH_Y_START, GRPH_Y_START, mask_sh),\
211	SFB(blk, GRPH_X_END, GRPH_X_END, mask_sh),\
212	SFB(blk, GRPH_Y_END, GRPH_Y_END, mask_sh),\
213	SFB(blk, GRPH_PITCH, GRPH_PITCH, mask_sh),\
214	SFB(blk, GRPH_SWAP_CNTL, GRPH_RED_CROSSBAR, mask_sh),\
215	SFB(blk, GRPH_SWAP_CNTL, GRPH_BLUE_CROSSBAR, mask_sh),\
216	SFB(blk, PRESCALE_GRPH_CONTROL, GRPH_PRESCALE_SELECT, mask_sh),\
217	SFB(blk, PRESCALE_GRPH_CONTROL, GRPH_PRESCALE_R_SIGN, mask_sh),\
218	SFB(blk, PRESCALE_GRPH_CONTROL, GRPH_PRESCALE_G_SIGN, mask_sh),\
219	SFB(blk, PRESCALE_GRPH_CONTROL, GRPH_PRESCALE_B_SIGN, mask_sh),\
220	SFB(blk, GRPH_SECONDARY_SURFACE_ADDRESS_HIGH, GRPH_SECONDARY_SURFACE_ADDRESS_HIGH, mask_sh),\
221	SFB(blk, GRPH_SECONDARY_SURFACE_ADDRESS, GRPH_SECONDARY_SURFACE_ADDRESS, mask_sh),\
222	SFB(blk, GRPH_PRIMARY_SURFACE_ADDRESS_HIGH, GRPH_PRIMARY_SURFACE_ADDRESS_HIGH, mask_sh),\
223	SFB(blk, GRPH_PRIMARY_SURFACE_ADDRESS, GRPH_PRIMARY_SURFACE_ADDRESS, mask_sh),\
224	SFB(blk, GRPH_UPDATE, GRPH_SURFACE_UPDATE_PENDING, mask_sh),\
225	SFB(blk, GRPH_UPDATE, GRPH_UPDATE_LOCK, mask_sh),\
226	SFB(blk, GRPH_FLIP_CONTROL, GRPH_SURFACE_UPDATE_H_RETRACE_EN, mask_sh)
227#endif
228
229#define MI_DCP_DCE11_MASK_SH_LIST(mask_sh, blk)\
230	SFB(blk, GRPH_PIPE_OUTSTANDING_REQUEST_LIMIT, GRPH_PIPE_OUTSTANDING_REQUEST_LIMIT, mask_sh)
231
232#define MI_DCP_PTE_MASK_SH_LIST(mask_sh, blk)\
233	SFB(blk, DVMM_PTE_CONTROL, DVMM_PAGE_WIDTH, mask_sh),\
234	SFB(blk, DVMM_PTE_CONTROL, DVMM_PAGE_HEIGHT, mask_sh),\
235	SFB(blk, DVMM_PTE_CONTROL, DVMM_MIN_PTE_BEFORE_FLIP, mask_sh),\
236	SFB(blk, DVMM_PTE_ARB_CONTROL, DVMM_PTE_REQ_PER_CHUNK, mask_sh),\
237	SFB(blk, DVMM_PTE_ARB_CONTROL, DVMM_MAX_PTE_REQ_OUTSTANDING, mask_sh)
238
239#if defined(CONFIG_DRM_AMD_DC_SI)
240#define MI_DMIF_PG_MASK_SH_LIST_DCE6(mask_sh, blk)\
241	SFB(blk, DPG_PIPE_ARBITRATION_CONTROL1, PIXEL_DURATION, mask_sh),\
242	SFB(blk, DPG_PIPE_URGENCY_CONTROL, URGENCY_LOW_WATERMARK, mask_sh),\
243	SFB(blk, DPG_PIPE_URGENCY_CONTROL, URGENCY_HIGH_WATERMARK, mask_sh),\
244	SFB(blk, DPG_PIPE_STUTTER_CONTROL, STUTTER_ENABLE, mask_sh),\
245	SFB(blk, DPG_PIPE_STUTTER_CONTROL, STUTTER_IGNORE_FBC, mask_sh),\
246	SF(PIPE0_DMIF_BUFFER_CONTROL, DMIF_BUFFERS_ALLOCATED, mask_sh),\
247	SF(PIPE0_DMIF_BUFFER_CONTROL, DMIF_BUFFERS_ALLOCATION_COMPLETED, mask_sh)
248
249#define MI_DMIF_PG_MASK_SH_DCE6(mask_sh, blk)\
250	SFB(blk, DPG_PIPE_ARBITRATION_CONTROL3, URGENCY_WATERMARK_MASK, mask_sh),\
251	SFB(blk, DPG_PIPE_STUTTER_CONTROL, STUTTER_EXIT_SELF_REFRESH_WATERMARK_MASK, mask_sh),\
252	SFB(blk, DPG_PIPE_STUTTER_CONTROL, STUTTER_EXIT_SELF_REFRESH_WATERMARK, mask_sh),\
253	SFB(blk, DPG_PIPE_NB_PSTATE_CHANGE_CONTROL, NB_PSTATE_CHANGE_WATERMARK_MASK, mask_sh),\
254	SFB(blk, DPG_PIPE_NB_PSTATE_CHANGE_CONTROL, NB_PSTATE_CHANGE_ENABLE, mask_sh),\
255	SFB(blk, DPG_PIPE_NB_PSTATE_CHANGE_CONTROL, NB_PSTATE_CHANGE_URGENT_DURING_REQUEST, mask_sh),\
256	SFB(blk, DPG_PIPE_NB_PSTATE_CHANGE_CONTROL, NB_PSTATE_CHANGE_NOT_SELF_REFRESH_DURING_REQUEST, mask_sh),\
257	SFB(blk, DPG_PIPE_NB_PSTATE_CHANGE_CONTROL, NB_PSTATE_CHANGE_WATERMARK, mask_sh)
258
259#define MI_DCE6_MASK_SH_LIST(mask_sh)\
260	MI_DCP_MASK_SH_LIST_DCE6(mask_sh, ),\
261	MI_DMIF_PG_MASK_SH_LIST_DCE6(mask_sh, ),\
262	MI_DMIF_PG_MASK_SH_DCE6(mask_sh, ),\
263	MI_GFX6_TILE_MASK_SH_LIST(mask_sh, )
264#endif
265
266#define MI_DMIF_PG_MASK_SH_LIST(mask_sh, blk)\
267	SFB(blk, DPG_PIPE_ARBITRATION_CONTROL1, PIXEL_DURATION, mask_sh),\
268	SFB(blk, DPG_WATERMARK_MASK_CONTROL, URGENCY_WATERMARK_MASK, mask_sh),\
269	SFB(blk, DPG_WATERMARK_MASK_CONTROL, STUTTER_EXIT_SELF_REFRESH_WATERMARK_MASK, mask_sh),\
270	SFB(blk, DPG_PIPE_URGENCY_CONTROL, URGENCY_LOW_WATERMARK, mask_sh),\
271	SFB(blk, DPG_PIPE_URGENCY_CONTROL, URGENCY_HIGH_WATERMARK, mask_sh),\
272	SFB(blk, DPG_PIPE_STUTTER_CONTROL, STUTTER_ENABLE, mask_sh),\
273	SFB(blk, DPG_PIPE_STUTTER_CONTROL, STUTTER_IGNORE_FBC, mask_sh),\
274	SF(PIPE0_DMIF_BUFFER_CONTROL, DMIF_BUFFERS_ALLOCATED, mask_sh),\
275	SF(PIPE0_DMIF_BUFFER_CONTROL, DMIF_BUFFERS_ALLOCATION_COMPLETED, mask_sh)
276
277#define MI_DMIF_PG_MASK_SH_DCE(mask_sh, blk)\
278	SFB(blk, DPG_PIPE_STUTTER_CONTROL, STUTTER_EXIT_SELF_REFRESH_WATERMARK, mask_sh),\
279	SFB(blk, DPG_WATERMARK_MASK_CONTROL, NB_PSTATE_CHANGE_WATERMARK_MASK, mask_sh),\
280	SFB(blk, DPG_PIPE_NB_PSTATE_CHANGE_CONTROL, NB_PSTATE_CHANGE_ENABLE, mask_sh),\
281	SFB(blk, DPG_PIPE_NB_PSTATE_CHANGE_CONTROL, NB_PSTATE_CHANGE_URGENT_DURING_REQUEST, mask_sh),\
282	SFB(blk, DPG_PIPE_NB_PSTATE_CHANGE_CONTROL, NB_PSTATE_CHANGE_NOT_SELF_REFRESH_DURING_REQUEST, mask_sh),\
283	SFB(blk, DPG_PIPE_NB_PSTATE_CHANGE_CONTROL, NB_PSTATE_CHANGE_WATERMARK, mask_sh)
284
285#define MI_DCE8_MASK_SH_LIST(mask_sh)\
286	MI_DCP_MASK_SH_LIST(mask_sh, ),\
287	MI_DMIF_PG_MASK_SH_LIST(mask_sh, ),\
288	MI_DMIF_PG_MASK_SH_DCE(mask_sh, ),\
289	MI_GFX8_TILE_MASK_SH_LIST(mask_sh, )
290
291#define MI_DCE11_2_MASK_SH_LIST(mask_sh)\
292	MI_DCE8_MASK_SH_LIST(mask_sh),\
293	MI_DCP_DCE11_MASK_SH_LIST(mask_sh, )
294
295#define MI_DCE11_MASK_SH_LIST(mask_sh)\
296	MI_DCE11_2_MASK_SH_LIST(mask_sh),\
297	MI_DCP_PTE_MASK_SH_LIST(mask_sh, )
298
299#define MI_GFX9_TILE_MASK_SH_LIST(mask_sh, blk)\
300	SFB(blk, GRPH_CONTROL, GRPH_NUM_BANKS, mask_sh),\
301	SFB(blk, GRPH_CONTROL, GRPH_SW_MODE, mask_sh),\
302	SFB(blk, GRPH_CONTROL, GRPH_SE_ENABLE, mask_sh),\
303	SFB(blk, GRPH_CONTROL, GRPH_NUM_SHADER_ENGINES, mask_sh),\
304	SFB(blk, GRPH_CONTROL, GRPH_NUM_PIPES, mask_sh),\
305	SFB(blk, GRPH_CONTROL, GRPH_COLOR_EXPANSION_MODE, mask_sh)
306
307#define MI_DCE12_DMIF_PG_MASK_SH_LIST(mask_sh, blk)\
308	SFB(blk, DPG_PIPE_STUTTER_CONTROL2, STUTTER_EXIT_SELF_REFRESH_WATERMARK, mask_sh),\
309	SFB(blk, DPG_PIPE_STUTTER_CONTROL2, STUTTER_ENTER_SELF_REFRESH_WATERMARK, mask_sh),\
310	SFB(blk, DPG_PIPE_URGENT_LEVEL_CONTROL, URGENT_LEVEL_LOW_WATERMARK, mask_sh),\
311	SFB(blk, DPG_PIPE_URGENT_LEVEL_CONTROL, URGENT_LEVEL_HIGH_WATERMARK, mask_sh),\
312	SFB(blk, DPG_PIPE_URGENCY_CONTROL, URGENCY_LOW_WATERMARK, mask_sh),\
313	SFB(blk, DPG_PIPE_URGENCY_CONTROL, URGENCY_HIGH_WATERMARK, mask_sh),\
314	SFB(blk, DPG_WATERMARK_MASK_CONTROL, PSTATE_CHANGE_WATERMARK_MASK, mask_sh),\
315	SFB(blk, DPG_PIPE_LOW_POWER_CONTROL, PSTATE_CHANGE_ENABLE, mask_sh),\
316	SFB(blk, DPG_PIPE_LOW_POWER_CONTROL, PSTATE_CHANGE_URGENT_DURING_REQUEST, mask_sh),\
317	SFB(blk, DPG_PIPE_LOW_POWER_CONTROL, PSTATE_CHANGE_NOT_SELF_REFRESH_DURING_REQUEST, mask_sh),\
318	SFB(blk, DPG_PIPE_LOW_POWER_CONTROL, PSTATE_CHANGE_WATERMARK, mask_sh)
319
320#define MI_GFX9_DCHUB_MASK_SH_LIST(mask_sh)\
321	SF(DCHUB_FB_LOCATION, FB_TOP, mask_sh),\
322	SF(DCHUB_FB_LOCATION, FB_BASE, mask_sh),\
323	SF(DCHUB_AGP_BASE, AGP_BASE, mask_sh),\
324	SF(DCHUB_AGP_BOT, AGP_BOT, mask_sh),\
325	SF(DCHUB_AGP_TOP, AGP_TOP, mask_sh)
326
327#define MI_DCE12_MASK_SH_LIST(mask_sh)\
328	MI_DCP_MASK_SH_LIST(mask_sh, DCP0_),\
329	SF(DCP0_GRPH_SECONDARY_SURFACE_ADDRESS, GRPH_SECONDARY_DFQ_ENABLE, mask_sh),\
330	MI_DCP_DCE11_MASK_SH_LIST(mask_sh, DCP0_),\
331	MI_DCP_PTE_MASK_SH_LIST(mask_sh, DCP0_),\
332	MI_DMIF_PG_MASK_SH_LIST(mask_sh, DMIF_PG0_),\
333	MI_DCE12_DMIF_PG_MASK_SH_LIST(mask_sh, DMIF_PG0_),\
334	MI_GFX9_TILE_MASK_SH_LIST(mask_sh, DCP0_),\
335	MI_GFX9_DCHUB_MASK_SH_LIST(mask_sh)
336
337#define MI_REG_FIELD_LIST(type) \
338	type GRPH_ENABLE; \
339	type GRPH_X_START; \
340	type GRPH_Y_START; \
341	type GRPH_X_END; \
342	type GRPH_Y_END; \
343	type GRPH_PITCH; \
344	type GRPH_ROTATION_ANGLE; \
345	type GRPH_RED_CROSSBAR; \
346	type GRPH_BLUE_CROSSBAR; \
347	type GRPH_PRESCALE_SELECT; \
348	type GRPH_PRESCALE_R_SIGN; \
349	type GRPH_PRESCALE_G_SIGN; \
350	type GRPH_PRESCALE_B_SIGN; \
351	type GRPH_PIPE_OUTSTANDING_REQUEST_LIMIT; \
352	type DVMM_PAGE_WIDTH; \
353	type DVMM_PAGE_HEIGHT; \
354	type DVMM_MIN_PTE_BEFORE_FLIP; \
355	type DVMM_PTE_REQ_PER_CHUNK; \
356	type DVMM_MAX_PTE_REQ_OUTSTANDING; \
357	type GRPH_DEPTH; \
358	type GRPH_FORMAT; \
359	type GRPH_NUM_BANKS; \
360	type GRPH_BANK_WIDTH;\
361	type GRPH_BANK_HEIGHT;\
362	type GRPH_MACRO_TILE_ASPECT;\
363	type GRPH_TILE_SPLIT;\
364	type GRPH_MICRO_TILE_MODE;\
365	type GRPH_PIPE_CONFIG;\
366	type GRPH_ARRAY_MODE;\
367	type GRPH_COLOR_EXPANSION_MODE;\
368	type GRPH_SW_MODE; \
369	type GRPH_SE_ENABLE; \
370	type GRPH_NUM_SHADER_ENGINES; \
371	type GRPH_NUM_PIPES; \
372	type GRPH_SECONDARY_SURFACE_ADDRESS_HIGH; \
373	type GRPH_SECONDARY_SURFACE_ADDRESS; \
374	type GRPH_SECONDARY_DFQ_ENABLE; \
375	type GRPH_PRIMARY_SURFACE_ADDRESS_HIGH; \
376	type GRPH_PRIMARY_SURFACE_ADDRESS; \
377	type GRPH_SURFACE_UPDATE_PENDING; \
378	type GRPH_SURFACE_UPDATE_H_RETRACE_EN; \
379	type GRPH_UPDATE_LOCK; \
380	type PIXEL_DURATION; \
381	type URGENCY_WATERMARK_MASK; \
382	type PSTATE_CHANGE_WATERMARK_MASK; \
383	type NB_PSTATE_CHANGE_WATERMARK_MASK; \
384	type STUTTER_EXIT_SELF_REFRESH_WATERMARK_MASK; \
385	type URGENCY_LOW_WATERMARK; \
386	type URGENCY_HIGH_WATERMARK; \
387	type URGENT_LEVEL_LOW_WATERMARK;\
388	type URGENT_LEVEL_HIGH_WATERMARK;\
389	type NB_PSTATE_CHANGE_ENABLE; \
390	type NB_PSTATE_CHANGE_URGENT_DURING_REQUEST; \
391	type NB_PSTATE_CHANGE_NOT_SELF_REFRESH_DURING_REQUEST; \
392	type NB_PSTATE_CHANGE_WATERMARK; \
393	type PSTATE_CHANGE_ENABLE; \
394	type PSTATE_CHANGE_URGENT_DURING_REQUEST; \
395	type PSTATE_CHANGE_NOT_SELF_REFRESH_DURING_REQUEST; \
396	type PSTATE_CHANGE_WATERMARK; \
397	type STUTTER_ENABLE; \
398	type STUTTER_IGNORE_FBC; \
399	type STUTTER_EXIT_SELF_REFRESH_WATERMARK; \
400	type STUTTER_ENTER_SELF_REFRESH_WATERMARK; \
401	type DMIF_BUFFERS_ALLOCATED; \
402	type DMIF_BUFFERS_ALLOCATION_COMPLETED; \
403	type ENABLE; /* MC_HUB_RDREQ_DMIF_LIMIT */\
404	type FB_BASE; \
405	type FB_TOP; \
406	type AGP_BASE; \
407	type AGP_TOP; \
408	type AGP_BOT; \
409
410struct dce_mem_input_shift {
411	MI_REG_FIELD_LIST(uint8_t)
412};
413
414struct dce_mem_input_mask {
415	MI_REG_FIELD_LIST(uint32_t)
416};
417
418struct dce_mem_input_wa {
419	uint8_t single_head_rdreq_dmif_limit;
420};
421
422struct dce_mem_input {
423	struct mem_input base;
424
425	const struct dce_mem_input_registers *regs;
426	const struct dce_mem_input_shift *shifts;
427	const struct dce_mem_input_mask *masks;
428
429	struct dce_mem_input_wa wa;
430};
431
432void dce_mem_input_construct(
433	struct dce_mem_input *dce_mi,
434	struct dc_context *ctx,
435	int inst,
436	const struct dce_mem_input_registers *regs,
437	const struct dce_mem_input_shift *mi_shift,
438	const struct dce_mem_input_mask *mi_mask);
439
440#if defined(CONFIG_DRM_AMD_DC_SI)
441void dce60_mem_input_construct(
442	struct dce_mem_input *dce_mi,
443	struct dc_context *ctx,
444	int inst,
445	const struct dce_mem_input_registers *regs,
446	const struct dce_mem_input_shift *mi_shift,
447	const struct dce_mem_input_mask *mi_mask);
448#endif
449
450void dce112_mem_input_construct(
451	struct dce_mem_input *dce_mi,
452	struct dc_context *ctx,
453	int inst,
454	const struct dce_mem_input_registers *regs,
455	const struct dce_mem_input_shift *mi_shift,
456	const struct dce_mem_input_mask *mi_mask);
457
458void dce120_mem_input_construct(
459	struct dce_mem_input *dce_mi,
460	struct dc_context *ctx,
461	int inst,
462	const struct dce_mem_input_registers *regs,
463	const struct dce_mem_input_shift *mi_shift,
464	const struct dce_mem_input_mask *mi_mask);
465
466#endif /*__DCE_MEM_INPUT_H__*/
v4.17
  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#ifndef __DCE_MEM_INPUT_H__
 26#define __DCE_MEM_INPUT_H__
 27
 28#include "dc_hw_types.h"
 29#include "mem_input.h"
 30
 31#define TO_DCE_MEM_INPUT(mem_input)\
 32	container_of(mem_input, struct dce_mem_input, base)
 33
 34#define MI_DCE_BASE_REG_LIST(id)\
 35	SRI(GRPH_ENABLE, DCP, id),\
 36	SRI(GRPH_CONTROL, DCP, id),\
 37	SRI(GRPH_X_START, DCP, id),\
 38	SRI(GRPH_Y_START, DCP, id),\
 39	SRI(GRPH_X_END, DCP, id),\
 40	SRI(GRPH_Y_END, DCP, id),\
 41	SRI(GRPH_PITCH, DCP, id),\
 42	SRI(HW_ROTATION, DCP, id),\
 43	SRI(GRPH_SWAP_CNTL, DCP, id),\
 44	SRI(PRESCALE_GRPH_CONTROL, DCP, id),\
 45	SRI(GRPH_UPDATE, DCP, id),\
 46	SRI(GRPH_FLIP_CONTROL, DCP, id),\
 47	SRI(GRPH_PRIMARY_SURFACE_ADDRESS, DCP, id),\
 48	SRI(GRPH_PRIMARY_SURFACE_ADDRESS_HIGH, DCP, id),\
 49	SRI(GRPH_SECONDARY_SURFACE_ADDRESS, DCP, id),\
 50	SRI(GRPH_SECONDARY_SURFACE_ADDRESS_HIGH, DCP, id),\
 51	SRI(DPG_PIPE_ARBITRATION_CONTROL1, DMIF_PG, id),\
 52	SRI(DPG_WATERMARK_MASK_CONTROL, DMIF_PG, id),\
 53	SRI(DPG_PIPE_URGENCY_CONTROL, DMIF_PG, id),\
 54	SRI(DPG_PIPE_STUTTER_CONTROL, DMIF_PG, id),\
 55	SRI(DMIF_BUFFER_CONTROL, PIPE, id)
 56
 57#define MI_DCE_PTE_REG_LIST(id)\
 58	SRI(DVMM_PTE_CONTROL, DCP, id),\
 59	SRI(DVMM_PTE_ARB_CONTROL, DCP, id)
 60
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 61#define MI_DCE8_REG_LIST(id)\
 62	MI_DCE_BASE_REG_LIST(id),\
 63	SRI(DPG_PIPE_NB_PSTATE_CHANGE_CONTROL, DMIF_PG, id)
 64
 65#define MI_DCE11_2_REG_LIST(id)\
 66	MI_DCE8_REG_LIST(id),\
 67	SRI(GRPH_PIPE_OUTSTANDING_REQUEST_LIMIT, DCP, id)
 68
 69#define MI_DCE11_REG_LIST(id)\
 70	MI_DCE11_2_REG_LIST(id),\
 71	MI_DCE_PTE_REG_LIST(id)
 72
 73#define MI_DCE12_REG_LIST(id)\
 74	MI_DCE_BASE_REG_LIST(id),\
 75	MI_DCE_PTE_REG_LIST(id),\
 76	SRI(GRPH_PIPE_OUTSTANDING_REQUEST_LIMIT, DCP, id),\
 77	SRI(DPG_PIPE_STUTTER_CONTROL2, DMIF_PG, id),\
 78	SRI(DPG_PIPE_LOW_POWER_CONTROL, DMIF_PG, id),\
 79	SR(DCHUB_FB_LOCATION),\
 80	SR(DCHUB_AGP_BASE),\
 81	SR(DCHUB_AGP_BOT),\
 82	SR(DCHUB_AGP_TOP)
 83
 84struct dce_mem_input_registers {
 85	/* DCP */
 86	uint32_t GRPH_ENABLE;
 87	uint32_t GRPH_CONTROL;
 88	uint32_t GRPH_X_START;
 89	uint32_t GRPH_Y_START;
 90	uint32_t GRPH_X_END;
 91	uint32_t GRPH_Y_END;
 92	uint32_t GRPH_PITCH;
 93	uint32_t HW_ROTATION;
 94	uint32_t GRPH_SWAP_CNTL;
 95	uint32_t PRESCALE_GRPH_CONTROL;
 96	uint32_t GRPH_PIPE_OUTSTANDING_REQUEST_LIMIT;
 97	uint32_t DVMM_PTE_CONTROL;
 98	uint32_t DVMM_PTE_ARB_CONTROL;
 99	uint32_t GRPH_UPDATE;
100	uint32_t GRPH_FLIP_CONTROL;
101	uint32_t GRPH_PRIMARY_SURFACE_ADDRESS;
102	uint32_t GRPH_PRIMARY_SURFACE_ADDRESS_HIGH;
103	uint32_t GRPH_SECONDARY_SURFACE_ADDRESS;
104	uint32_t GRPH_SECONDARY_SURFACE_ADDRESS_HIGH;
105	/* DMIF_PG */
106	uint32_t DPG_PIPE_ARBITRATION_CONTROL1;
 
 
 
107	uint32_t DPG_WATERMARK_MASK_CONTROL;
108	uint32_t DPG_PIPE_URGENCY_CONTROL;
 
109	uint32_t DPG_PIPE_NB_PSTATE_CHANGE_CONTROL;
110	uint32_t DPG_PIPE_LOW_POWER_CONTROL;
111	uint32_t DPG_PIPE_STUTTER_CONTROL;
112	uint32_t DPG_PIPE_STUTTER_CONTROL2;
113	/* DCI */
114	uint32_t DMIF_BUFFER_CONTROL;
115	/* MC_HUB */
116	uint32_t MC_HUB_RDREQ_DMIF_LIMIT;
117	/*DCHUB*/
118	uint32_t DCHUB_FB_LOCATION;
119	uint32_t DCHUB_AGP_BASE;
120	uint32_t DCHUB_AGP_BOT;
121	uint32_t DCHUB_AGP_TOP;
122};
123
124/* Set_Filed_for_Block */
125#define SFB(blk_name, reg_name, field_name, post_fix)\
126	.field_name = blk_name ## reg_name ## __ ## field_name ## post_fix
127
 
 
 
 
 
 
 
 
 
 
 
 
128#define MI_GFX8_TILE_MASK_SH_LIST(mask_sh, blk)\
129	SFB(blk, GRPH_CONTROL, GRPH_NUM_BANKS, mask_sh),\
130	SFB(blk, GRPH_CONTROL, GRPH_BANK_WIDTH, mask_sh),\
131	SFB(blk, GRPH_CONTROL, GRPH_BANK_HEIGHT, mask_sh),\
132	SFB(blk, GRPH_CONTROL, GRPH_MACRO_TILE_ASPECT, mask_sh),\
133	SFB(blk, GRPH_CONTROL, GRPH_TILE_SPLIT, mask_sh),\
134	SFB(blk, GRPH_CONTROL, GRPH_MICRO_TILE_MODE, mask_sh),\
135	SFB(blk, GRPH_CONTROL, GRPH_PIPE_CONFIG, mask_sh),\
136	SFB(blk, GRPH_CONTROL, GRPH_ARRAY_MODE, mask_sh),\
137	SFB(blk, GRPH_CONTROL, GRPH_COLOR_EXPANSION_MODE, mask_sh)
138
139#define MI_DCP_MASK_SH_LIST(mask_sh, blk)\
140	SFB(blk, GRPH_ENABLE, GRPH_ENABLE, mask_sh),\
141	SFB(blk, GRPH_CONTROL, GRPH_DEPTH, mask_sh),\
142	SFB(blk, GRPH_CONTROL, GRPH_FORMAT, mask_sh),\
143	SFB(blk, GRPH_CONTROL, GRPH_NUM_BANKS, mask_sh),\
144	SFB(blk, GRPH_X_START, GRPH_X_START, mask_sh),\
145	SFB(blk, GRPH_Y_START, GRPH_Y_START, mask_sh),\
146	SFB(blk, GRPH_X_END, GRPH_X_END, mask_sh),\
147	SFB(blk, GRPH_Y_END, GRPH_Y_END, mask_sh),\
148	SFB(blk, GRPH_PITCH, GRPH_PITCH, mask_sh),\
149	SFB(blk, HW_ROTATION, GRPH_ROTATION_ANGLE, mask_sh),\
150	SFB(blk, GRPH_SWAP_CNTL, GRPH_RED_CROSSBAR, mask_sh),\
151	SFB(blk, GRPH_SWAP_CNTL, GRPH_BLUE_CROSSBAR, mask_sh),\
152	SFB(blk, PRESCALE_GRPH_CONTROL, GRPH_PRESCALE_SELECT, mask_sh),\
153	SFB(blk, PRESCALE_GRPH_CONTROL, GRPH_PRESCALE_R_SIGN, mask_sh),\
154	SFB(blk, PRESCALE_GRPH_CONTROL, GRPH_PRESCALE_G_SIGN, mask_sh),\
155	SFB(blk, PRESCALE_GRPH_CONTROL, GRPH_PRESCALE_B_SIGN, mask_sh),\
156	SFB(blk, GRPH_SECONDARY_SURFACE_ADDRESS_HIGH, GRPH_SECONDARY_SURFACE_ADDRESS_HIGH, mask_sh),\
157	SFB(blk, GRPH_SECONDARY_SURFACE_ADDRESS, GRPH_SECONDARY_SURFACE_ADDRESS, mask_sh),\
158	SFB(blk, GRPH_PRIMARY_SURFACE_ADDRESS_HIGH, GRPH_PRIMARY_SURFACE_ADDRESS_HIGH, mask_sh),\
159	SFB(blk, GRPH_PRIMARY_SURFACE_ADDRESS, GRPH_PRIMARY_SURFACE_ADDRESS, mask_sh),\
160	SFB(blk, GRPH_UPDATE, GRPH_SURFACE_UPDATE_PENDING, mask_sh),\
161	SFB(blk, GRPH_UPDATE, GRPH_UPDATE_LOCK, mask_sh),\
162	SFB(blk, GRPH_FLIP_CONTROL, GRPH_SURFACE_UPDATE_H_RETRACE_EN, mask_sh)
163
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
164#define MI_DCP_DCE11_MASK_SH_LIST(mask_sh, blk)\
165	SFB(blk, GRPH_PIPE_OUTSTANDING_REQUEST_LIMIT, GRPH_PIPE_OUTSTANDING_REQUEST_LIMIT, mask_sh)
166
167#define MI_DCP_PTE_MASK_SH_LIST(mask_sh, blk)\
168	SFB(blk, DVMM_PTE_CONTROL, DVMM_PAGE_WIDTH, mask_sh),\
169	SFB(blk, DVMM_PTE_CONTROL, DVMM_PAGE_HEIGHT, mask_sh),\
170	SFB(blk, DVMM_PTE_CONTROL, DVMM_MIN_PTE_BEFORE_FLIP, mask_sh),\
171	SFB(blk, DVMM_PTE_ARB_CONTROL, DVMM_PTE_REQ_PER_CHUNK, mask_sh),\
172	SFB(blk, DVMM_PTE_ARB_CONTROL, DVMM_MAX_PTE_REQ_OUTSTANDING, mask_sh)
173
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
174#define MI_DMIF_PG_MASK_SH_LIST(mask_sh, blk)\
175	SFB(blk, DPG_PIPE_ARBITRATION_CONTROL1, PIXEL_DURATION, mask_sh),\
176	SFB(blk, DPG_WATERMARK_MASK_CONTROL, URGENCY_WATERMARK_MASK, mask_sh),\
177	SFB(blk, DPG_WATERMARK_MASK_CONTROL, STUTTER_EXIT_SELF_REFRESH_WATERMARK_MASK, mask_sh),\
178	SFB(blk, DPG_PIPE_URGENCY_CONTROL, URGENCY_LOW_WATERMARK, mask_sh),\
179	SFB(blk, DPG_PIPE_URGENCY_CONTROL, URGENCY_HIGH_WATERMARK, mask_sh),\
180	SFB(blk, DPG_PIPE_STUTTER_CONTROL, STUTTER_ENABLE, mask_sh),\
181	SFB(blk, DPG_PIPE_STUTTER_CONTROL, STUTTER_IGNORE_FBC, mask_sh),\
182	SF(PIPE0_DMIF_BUFFER_CONTROL, DMIF_BUFFERS_ALLOCATED, mask_sh),\
183	SF(PIPE0_DMIF_BUFFER_CONTROL, DMIF_BUFFERS_ALLOCATION_COMPLETED, mask_sh)
184
185#define MI_DMIF_PG_MASK_SH_DCE(mask_sh, blk)\
186	SFB(blk, DPG_PIPE_STUTTER_CONTROL, STUTTER_EXIT_SELF_REFRESH_WATERMARK, mask_sh),\
187	SFB(blk, DPG_WATERMARK_MASK_CONTROL, NB_PSTATE_CHANGE_WATERMARK_MASK, mask_sh),\
188	SFB(blk, DPG_PIPE_NB_PSTATE_CHANGE_CONTROL, NB_PSTATE_CHANGE_ENABLE, mask_sh),\
189	SFB(blk, DPG_PIPE_NB_PSTATE_CHANGE_CONTROL, NB_PSTATE_CHANGE_URGENT_DURING_REQUEST, mask_sh),\
190	SFB(blk, DPG_PIPE_NB_PSTATE_CHANGE_CONTROL, NB_PSTATE_CHANGE_NOT_SELF_REFRESH_DURING_REQUEST, mask_sh),\
191	SFB(blk, DPG_PIPE_NB_PSTATE_CHANGE_CONTROL, NB_PSTATE_CHANGE_WATERMARK, mask_sh)
192
193#define MI_DCE8_MASK_SH_LIST(mask_sh)\
194	MI_DCP_MASK_SH_LIST(mask_sh, ),\
195	MI_DMIF_PG_MASK_SH_LIST(mask_sh, ),\
196	MI_DMIF_PG_MASK_SH_DCE(mask_sh, ),\
197	MI_GFX8_TILE_MASK_SH_LIST(mask_sh, )
198
199#define MI_DCE11_2_MASK_SH_LIST(mask_sh)\
200	MI_DCE8_MASK_SH_LIST(mask_sh),\
201	MI_DCP_DCE11_MASK_SH_LIST(mask_sh, )
202
203#define MI_DCE11_MASK_SH_LIST(mask_sh)\
204	MI_DCE11_2_MASK_SH_LIST(mask_sh),\
205	MI_DCP_PTE_MASK_SH_LIST(mask_sh, )
206
207#define MI_GFX9_TILE_MASK_SH_LIST(mask_sh, blk)\
 
208	SFB(blk, GRPH_CONTROL, GRPH_SW_MODE, mask_sh),\
209	SFB(blk, GRPH_CONTROL, GRPH_SE_ENABLE, mask_sh),\
210	SFB(blk, GRPH_CONTROL, GRPH_NUM_SHADER_ENGINES, mask_sh),\
211	SFB(blk, GRPH_CONTROL, GRPH_NUM_PIPES, mask_sh),\
212	SFB(blk, GRPH_CONTROL, GRPH_COLOR_EXPANSION_MODE, mask_sh)
213
214#define MI_DCE12_DMIF_PG_MASK_SH_LIST(mask_sh, blk)\
215	SFB(blk, DPG_PIPE_STUTTER_CONTROL2, STUTTER_EXIT_SELF_REFRESH_WATERMARK, mask_sh),\
 
 
 
 
 
216	SFB(blk, DPG_WATERMARK_MASK_CONTROL, PSTATE_CHANGE_WATERMARK_MASK, mask_sh),\
217	SFB(blk, DPG_PIPE_LOW_POWER_CONTROL, PSTATE_CHANGE_ENABLE, mask_sh),\
218	SFB(blk, DPG_PIPE_LOW_POWER_CONTROL, PSTATE_CHANGE_URGENT_DURING_REQUEST, mask_sh),\
219	SFB(blk, DPG_PIPE_LOW_POWER_CONTROL, PSTATE_CHANGE_NOT_SELF_REFRESH_DURING_REQUEST, mask_sh),\
220	SFB(blk, DPG_PIPE_LOW_POWER_CONTROL, PSTATE_CHANGE_WATERMARK, mask_sh)
221
222#define MI_GFX9_DCHUB_MASK_SH_LIST(mask_sh)\
223	SF(DCHUB_FB_LOCATION, FB_TOP, mask_sh),\
224	SF(DCHUB_FB_LOCATION, FB_BASE, mask_sh),\
225	SF(DCHUB_AGP_BASE, AGP_BASE, mask_sh),\
226	SF(DCHUB_AGP_BOT, AGP_BOT, mask_sh),\
227	SF(DCHUB_AGP_TOP, AGP_TOP, mask_sh)
228
229#define MI_DCE12_MASK_SH_LIST(mask_sh)\
230	MI_DCP_MASK_SH_LIST(mask_sh, DCP0_),\
231	SF(DCP0_GRPH_SECONDARY_SURFACE_ADDRESS, GRPH_SECONDARY_DFQ_ENABLE, mask_sh),\
232	MI_DCP_DCE11_MASK_SH_LIST(mask_sh, DCP0_),\
233	MI_DCP_PTE_MASK_SH_LIST(mask_sh, DCP0_),\
234	MI_DMIF_PG_MASK_SH_LIST(mask_sh, DMIF_PG0_),\
235	MI_DCE12_DMIF_PG_MASK_SH_LIST(mask_sh, DMIF_PG0_),\
236	MI_GFX9_TILE_MASK_SH_LIST(mask_sh, DCP0_),\
237	MI_GFX9_DCHUB_MASK_SH_LIST(mask_sh)
238
239#define MI_REG_FIELD_LIST(type) \
240	type GRPH_ENABLE; \
241	type GRPH_X_START; \
242	type GRPH_Y_START; \
243	type GRPH_X_END; \
244	type GRPH_Y_END; \
245	type GRPH_PITCH; \
246	type GRPH_ROTATION_ANGLE; \
247	type GRPH_RED_CROSSBAR; \
248	type GRPH_BLUE_CROSSBAR; \
249	type GRPH_PRESCALE_SELECT; \
250	type GRPH_PRESCALE_R_SIGN; \
251	type GRPH_PRESCALE_G_SIGN; \
252	type GRPH_PRESCALE_B_SIGN; \
253	type GRPH_PIPE_OUTSTANDING_REQUEST_LIMIT; \
254	type DVMM_PAGE_WIDTH; \
255	type DVMM_PAGE_HEIGHT; \
256	type DVMM_MIN_PTE_BEFORE_FLIP; \
257	type DVMM_PTE_REQ_PER_CHUNK; \
258	type DVMM_MAX_PTE_REQ_OUTSTANDING; \
259	type GRPH_DEPTH; \
260	type GRPH_FORMAT; \
261	type GRPH_NUM_BANKS; \
262	type GRPH_BANK_WIDTH;\
263	type GRPH_BANK_HEIGHT;\
264	type GRPH_MACRO_TILE_ASPECT;\
265	type GRPH_TILE_SPLIT;\
266	type GRPH_MICRO_TILE_MODE;\
267	type GRPH_PIPE_CONFIG;\
268	type GRPH_ARRAY_MODE;\
269	type GRPH_COLOR_EXPANSION_MODE;\
270	type GRPH_SW_MODE; \
271	type GRPH_SE_ENABLE; \
272	type GRPH_NUM_SHADER_ENGINES; \
273	type GRPH_NUM_PIPES; \
274	type GRPH_SECONDARY_SURFACE_ADDRESS_HIGH; \
275	type GRPH_SECONDARY_SURFACE_ADDRESS; \
276	type GRPH_SECONDARY_DFQ_ENABLE; \
277	type GRPH_PRIMARY_SURFACE_ADDRESS_HIGH; \
278	type GRPH_PRIMARY_SURFACE_ADDRESS; \
279	type GRPH_SURFACE_UPDATE_PENDING; \
280	type GRPH_SURFACE_UPDATE_H_RETRACE_EN; \
281	type GRPH_UPDATE_LOCK; \
282	type PIXEL_DURATION; \
283	type URGENCY_WATERMARK_MASK; \
284	type PSTATE_CHANGE_WATERMARK_MASK; \
285	type NB_PSTATE_CHANGE_WATERMARK_MASK; \
286	type STUTTER_EXIT_SELF_REFRESH_WATERMARK_MASK; \
287	type URGENCY_LOW_WATERMARK; \
288	type URGENCY_HIGH_WATERMARK; \
 
 
289	type NB_PSTATE_CHANGE_ENABLE; \
290	type NB_PSTATE_CHANGE_URGENT_DURING_REQUEST; \
291	type NB_PSTATE_CHANGE_NOT_SELF_REFRESH_DURING_REQUEST; \
292	type NB_PSTATE_CHANGE_WATERMARK; \
293	type PSTATE_CHANGE_ENABLE; \
294	type PSTATE_CHANGE_URGENT_DURING_REQUEST; \
295	type PSTATE_CHANGE_NOT_SELF_REFRESH_DURING_REQUEST; \
296	type PSTATE_CHANGE_WATERMARK; \
297	type STUTTER_ENABLE; \
298	type STUTTER_IGNORE_FBC; \
299	type STUTTER_EXIT_SELF_REFRESH_WATERMARK; \
 
300	type DMIF_BUFFERS_ALLOCATED; \
301	type DMIF_BUFFERS_ALLOCATION_COMPLETED; \
302	type ENABLE; /* MC_HUB_RDREQ_DMIF_LIMIT */\
303	type FB_BASE; \
304	type FB_TOP; \
305	type AGP_BASE; \
306	type AGP_TOP; \
307	type AGP_BOT; \
308
309struct dce_mem_input_shift {
310	MI_REG_FIELD_LIST(uint8_t)
311};
312
313struct dce_mem_input_mask {
314	MI_REG_FIELD_LIST(uint32_t)
315};
316
317struct dce_mem_input_wa {
318	uint8_t single_head_rdreq_dmif_limit;
319};
320
321struct dce_mem_input {
322	struct mem_input base;
323
324	const struct dce_mem_input_registers *regs;
325	const struct dce_mem_input_shift *shifts;
326	const struct dce_mem_input_mask *masks;
327
328	struct dce_mem_input_wa wa;
329};
330
331void dce_mem_input_construct(
332	struct dce_mem_input *dce_mi,
333	struct dc_context *ctx,
334	int inst,
335	const struct dce_mem_input_registers *regs,
336	const struct dce_mem_input_shift *mi_shift,
337	const struct dce_mem_input_mask *mi_mask);
338
 
 
 
 
 
 
 
 
 
 
339void dce112_mem_input_construct(
 
 
 
 
 
 
 
 
340	struct dce_mem_input *dce_mi,
341	struct dc_context *ctx,
342	int inst,
343	const struct dce_mem_input_registers *regs,
344	const struct dce_mem_input_shift *mi_shift,
345	const struct dce_mem_input_mask *mi_mask);
346
347#endif /*__DCE_MEM_INPUT_H__*/