Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/amd/display: log destination of vertical interrupt

[Why]
Knowing the destination of OTG's vertical interrupt 2 is useful for
debugging, but it is not currently included in the OTG state readback
logic

[How]
Read the OTG interrupt destination register to get the vertical interrupt
2 destination on ASICs that have this register when reading back the OTG
state from hardware

Reviewed-by: Sung Lee <sung.lee@amd.com>
Reviewed-by: Aric Cyr <aric.cyr@amd.com>
Signed-off-by: Josip Pavic <Josip.Pavic@amd.com>
Signed-off-by: Wayne Lin <wayne.lin@amd.com>
Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>

authored by

Josip Pavic and committed by
Alex Deucher
06b0a4ad 6eb4c13a

+145 -42
+5 -2
drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer_debug.c
··· 429 429 struct dcn_otg_state s = {0}; 430 430 int pix_clk = 0; 431 431 432 - optc1_read_otg_state(DCN10TG_FROM_TG(tg), &s); 432 + if (tg->funcs->read_otg_state) 433 + tg->funcs->read_otg_state(tg, &s); 434 + 433 435 pix_clk = dc->current_state->res_ctx.pipe_ctx[i].stream_res.pix_clk_params.requested_pix_clk_100hz / 10; 434 436 435 437 //only print if OTG master is enabled ··· 497 495 struct timing_generator *tg = pool->timing_generators[i]; 498 496 struct dcn_otg_state s = {0}; 499 497 500 - optc1_read_otg_state(DCN10TG_FROM_TG(tg), &s); 498 + if (tg->funcs->read_otg_state) 499 + tg->funcs->read_otg_state(tg, &s); 501 500 502 501 if (s.otg_enabled & 1) 503 502 tg->funcs->clear_optc_underflow(tg);
+2 -1
drivers/gpu/drm/amd/display/dc/hwss/dcn10/dcn10_hwseq.c
··· 415 415 struct timing_generator *tg = pool->timing_generators[i]; 416 416 struct dcn_otg_state s = {0}; 417 417 /* Read shared OTG state registers for all DCNx */ 418 - optc1_read_otg_state(DCN10TG_FROM_TG(tg), &s); 418 + if (tg->funcs->read_otg_state) 419 + tg->funcs->read_otg_state(tg, &s); 419 420 420 421 /* 421 422 * For DCN2 and greater, a register on the OPP is used to
+1 -29
drivers/gpu/drm/amd/display/dc/inc/hw/optc.h
··· 70 70 enum signal_type signal; 71 71 }; 72 72 73 - struct dcn_otg_state { 74 - uint32_t v_blank_start; 75 - uint32_t v_blank_end; 76 - uint32_t v_sync_a_pol; 77 - uint32_t v_total; 78 - uint32_t v_total_max; 79 - uint32_t v_total_min; 80 - uint32_t v_total_min_sel; 81 - uint32_t v_total_max_sel; 82 - uint32_t v_sync_a_start; 83 - uint32_t v_sync_a_end; 84 - uint32_t h_blank_start; 85 - uint32_t h_blank_end; 86 - uint32_t h_sync_a_start; 87 - uint32_t h_sync_a_end; 88 - uint32_t h_sync_a_pol; 89 - uint32_t h_total; 90 - uint32_t underflow_occurred_status; 91 - uint32_t otg_enabled; 92 - uint32_t blank_enabled; 93 - uint32_t vertical_interrupt1_en; 94 - uint32_t vertical_interrupt1_line; 95 - uint32_t vertical_interrupt2_en; 96 - uint32_t vertical_interrupt2_line; 97 - uint32_t otg_master_update_lock; 98 - uint32_t otg_double_buffer_control; 99 - }; 100 - 101 - void optc1_read_otg_state(struct optc *optc1, struct dcn_otg_state *s); 73 + void optc1_read_otg_state(struct timing_generator *optc, struct dcn_otg_state *s); 102 74 103 75 bool optc1_get_hw_timing(struct timing_generator *tg, struct dc_crtc_timing *hw_crtc_timing); 104 76
+30
drivers/gpu/drm/amd/display/dc/inc/hw/timing_generator.h
··· 146 146 bool reset; 147 147 }; 148 148 149 + struct dcn_otg_state { 150 + uint32_t v_blank_start; 151 + uint32_t v_blank_end; 152 + uint32_t v_sync_a_pol; 153 + uint32_t v_total; 154 + uint32_t v_total_max; 155 + uint32_t v_total_min; 156 + uint32_t v_total_min_sel; 157 + uint32_t v_total_max_sel; 158 + uint32_t v_sync_a_start; 159 + uint32_t v_sync_a_end; 160 + uint32_t h_blank_start; 161 + uint32_t h_blank_end; 162 + uint32_t h_sync_a_start; 163 + uint32_t h_sync_a_end; 164 + uint32_t h_sync_a_pol; 165 + uint32_t h_total; 166 + uint32_t underflow_occurred_status; 167 + uint32_t otg_enabled; 168 + uint32_t blank_enabled; 169 + uint32_t vertical_interrupt1_en; 170 + uint32_t vertical_interrupt1_line; 171 + uint32_t vertical_interrupt2_en; 172 + uint32_t vertical_interrupt2_line; 173 + uint32_t vertical_interrupt2_dest; 174 + uint32_t otg_master_update_lock; 175 + uint32_t otg_double_buffer_control; 176 + }; 177 + 149 178 /** 150 179 * struct timing_generator - Entry point to Output Timing Generator feature. 151 180 */ ··· 379 350 bool (*get_pipe_update_pending)(struct timing_generator *tg); 380 351 void (*set_vupdate_keepout)(struct timing_generator *tg, bool enable); 381 352 bool (*wait_update_lock_status)(struct timing_generator *tg, bool locked); 353 + void (*read_otg_state)(struct timing_generator *tg, struct dcn_otg_state *s); 382 354 }; 383 355 384 356 #endif
+5 -2
drivers/gpu/drm/amd/display/dc/optc/dcn10/dcn10_optc.c
··· 1312 1312 if (tg == NULL || hw_crtc_timing == NULL) 1313 1313 return false; 1314 1314 1315 - optc1_read_otg_state(DCN10TG_FROM_TG(tg), &s); 1315 + optc1_read_otg_state(tg, &s); 1316 1316 1317 1317 hw_crtc_timing->h_total = s.h_total + 1; 1318 1318 hw_crtc_timing->h_addressable = s.h_total - ((s.h_total - s.h_blank_start) + s.h_blank_end); ··· 1328 1328 } 1329 1329 1330 1330 1331 - void optc1_read_otg_state(struct optc *optc1, 1331 + void optc1_read_otg_state(struct timing_generator *optc, 1332 1332 struct dcn_otg_state *s) 1333 1333 { 1334 + struct optc *optc1 = DCN10TG_FROM_TG(optc); 1335 + 1334 1336 REG_GET(OTG_CONTROL, 1335 1337 OTG_MASTER_EN, &s->otg_enabled); 1336 1338 ··· 1665 1663 .setup_manual_trigger = optc1_setup_manual_trigger, 1666 1664 .get_hw_timing = optc1_get_hw_timing, 1667 1665 .is_two_pixels_per_container = optc1_is_two_pixels_per_container, 1666 + .read_otg_state = optc1_read_otg_state, 1668 1667 }; 1669 1668 1670 1669 void dcn10_timing_generator_init(struct optc *optc1)
+2
drivers/gpu/drm/amd/display/dc/optc/dcn10/dcn10_optc.h
··· 209 209 uint32_t OPTC_WIDTH_CONTROL2; 210 210 uint32_t OTG_PSTATE_REGISTER; 211 211 uint32_t OTG_PIPE_UPDATE_STATUS; 212 + uint32_t INTERRUPT_DEST; 212 213 }; 213 214 214 215 #define TG_COMMON_MASK_SH_LIST_DCN(mask_sh)\ ··· 592 591 type OTG_DC_REG_UPDATE_PENDING;\ 593 592 type OTG_CURSOR_UPDATE_PENDING;\ 594 593 type OTG_VUPDATE_KEEPOUT_STATUS;\ 594 + type OTG0_IHC_OTG_VERTICAL_INTERRUPT2_DEST; 595 595 596 596 #define TG_REG_FIELD_LIST_DCN3_2(type) \ 597 597 type OTG_H_TIMING_DIV_MODE_MANUAL;
+1
drivers/gpu/drm/amd/display/dc/optc/dcn20/dcn20_optc.c
··· 562 562 .get_hw_timing = optc1_get_hw_timing, 563 563 .align_vblanks = optc2_align_vblanks, 564 564 .is_two_pixels_per_container = optc1_is_two_pixels_per_container, 565 + .read_otg_state = optc1_read_otg_state, 565 566 }; 566 567 567 568 void dcn20_timing_generator_init(struct optc *optc1)
+1
drivers/gpu/drm/amd/display/dc/optc/dcn201/dcn201_optc.c
··· 180 180 .setup_manual_trigger = optc2_setup_manual_trigger, 181 181 .get_hw_timing = optc1_get_hw_timing, 182 182 .is_two_pixels_per_container = optc1_is_two_pixels_per_container, 183 + .read_otg_state = optc1_read_otg_state, 183 184 }; 184 185 185 186 void dcn201_timing_generator_init(struct optc *optc1)
+1
drivers/gpu/drm/amd/display/dc/optc/dcn30/dcn30_optc.c
··· 420 420 .get_optc_double_buffer_pending = optc3_get_optc_double_buffer_pending, 421 421 .get_otg_double_buffer_pending = optc3_get_otg_update_pending, 422 422 .get_pipe_update_pending = optc3_get_pipe_update_pending, 423 + .read_otg_state = optc1_read_otg_state, 423 424 }; 424 425 425 426 void dcn30_timing_generator_init(struct optc *optc1)
+1
drivers/gpu/drm/amd/display/dc/optc/dcn301/dcn301_optc.c
··· 172 172 .get_optc_double_buffer_pending = optc3_get_optc_double_buffer_pending, 173 173 .get_otg_double_buffer_pending = optc3_get_otg_update_pending, 174 174 .get_pipe_update_pending = optc3_get_pipe_update_pending, 175 + .read_otg_state = optc1_read_otg_state, 175 176 }; 176 177 177 178 void dcn301_timing_generator_init(struct optc *optc1)
+71
drivers/gpu/drm/amd/display/dc/optc/dcn31/dcn31_optc.c
··· 245 245 optc1->opp_count = 1; 246 246 } 247 247 248 + void optc31_read_otg_state(struct timing_generator *optc, 249 + struct dcn_otg_state *s) 250 + { 251 + struct optc *optc1 = DCN10TG_FROM_TG(optc); 252 + 253 + REG_GET(OTG_CONTROL, 254 + OTG_MASTER_EN, &s->otg_enabled); 255 + 256 + REG_GET_2(OTG_V_BLANK_START_END, 257 + OTG_V_BLANK_START, &s->v_blank_start, 258 + OTG_V_BLANK_END, &s->v_blank_end); 259 + 260 + REG_GET(OTG_V_SYNC_A_CNTL, 261 + OTG_V_SYNC_A_POL, &s->v_sync_a_pol); 262 + 263 + REG_GET(OTG_V_TOTAL, 264 + OTG_V_TOTAL, &s->v_total); 265 + 266 + REG_GET(OTG_V_TOTAL_MAX, 267 + OTG_V_TOTAL_MAX, &s->v_total_max); 268 + 269 + REG_GET(OTG_V_TOTAL_MIN, 270 + OTG_V_TOTAL_MIN, &s->v_total_min); 271 + 272 + REG_GET(OTG_V_TOTAL_CONTROL, 273 + OTG_V_TOTAL_MAX_SEL, &s->v_total_max_sel); 274 + 275 + REG_GET(OTG_V_TOTAL_CONTROL, 276 + OTG_V_TOTAL_MIN_SEL, &s->v_total_min_sel); 277 + 278 + REG_GET_2(OTG_V_SYNC_A, 279 + OTG_V_SYNC_A_START, &s->v_sync_a_start, 280 + OTG_V_SYNC_A_END, &s->v_sync_a_end); 281 + 282 + REG_GET_2(OTG_H_BLANK_START_END, 283 + OTG_H_BLANK_START, &s->h_blank_start, 284 + OTG_H_BLANK_END, &s->h_blank_end); 285 + 286 + REG_GET_2(OTG_H_SYNC_A, 287 + OTG_H_SYNC_A_START, &s->h_sync_a_start, 288 + OTG_H_SYNC_A_END, &s->h_sync_a_end); 289 + 290 + REG_GET(OTG_H_SYNC_A_CNTL, 291 + OTG_H_SYNC_A_POL, &s->h_sync_a_pol); 292 + 293 + REG_GET(OTG_H_TOTAL, 294 + OTG_H_TOTAL, &s->h_total); 295 + 296 + REG_GET(OPTC_INPUT_GLOBAL_CONTROL, 297 + OPTC_UNDERFLOW_OCCURRED_STATUS, &s->underflow_occurred_status); 298 + 299 + REG_GET(OTG_VERTICAL_INTERRUPT1_CONTROL, 300 + OTG_VERTICAL_INTERRUPT1_INT_ENABLE, &s->vertical_interrupt1_en); 301 + 302 + REG_GET(OTG_VERTICAL_INTERRUPT1_POSITION, 303 + OTG_VERTICAL_INTERRUPT1_LINE_START, &s->vertical_interrupt1_line); 304 + 305 + REG_GET(OTG_VERTICAL_INTERRUPT2_CONTROL, 306 + OTG_VERTICAL_INTERRUPT2_INT_ENABLE, &s->vertical_interrupt2_en); 307 + 308 + REG_GET(OTG_VERTICAL_INTERRUPT2_POSITION, 309 + OTG_VERTICAL_INTERRUPT2_LINE_START, &s->vertical_interrupt2_line); 310 + 311 + REG_GET(INTERRUPT_DEST, 312 + OTG0_IHC_OTG_VERTICAL_INTERRUPT2_DEST, &s->vertical_interrupt2_dest); 313 + 314 + s->otg_master_update_lock = REG_READ(OTG_MASTER_UPDATE_LOCK); 315 + s->otg_double_buffer_control = REG_READ(OTG_DOUBLE_BUFFER_CONTROL); 316 + } 317 + 248 318 static struct timing_generator_funcs dcn31_tg_funcs = { 249 319 .validate_timing = optc1_validate_timing, 250 320 .program_timing = optc1_program_timing, ··· 376 306 .get_hw_timing = optc1_get_hw_timing, 377 307 .init_odm = optc3_init_odm, 378 308 .is_two_pixels_per_container = optc1_is_two_pixels_per_container, 309 + .read_otg_state = optc31_read_otg_state, 379 310 }; 380 311 381 312 void dcn31_timing_generator_init(struct optc *optc1)
+6 -1
drivers/gpu/drm/amd/display/dc/optc/dcn31/dcn31_optc.h
··· 100 100 SRI(OTG_CRC_CNTL2, OTG, inst),\ 101 101 SR(DWB_SOURCE_SELECT),\ 102 102 SRI(OTG_DRR_CONTROL, OTG, inst),\ 103 - SRI(OTG_PIPE_UPDATE_STATUS, OTG, inst) 103 + SRI(OTG_PIPE_UPDATE_STATUS, OTG, inst),\ 104 + SRI(INTERRUPT_DEST, OTG, inst) 104 105 105 106 #define OPTC_COMMON_MASK_SH_LIST_DCN3_1(mask_sh)\ 106 107 SF(OTG0_OTG_VSTARTUP_PARAM, VSTARTUP_START, mask_sh),\ ··· 261 260 SF(OTG0_OTG_PIPE_UPDATE_STATUS, OTG_DC_REG_UPDATE_PENDING, mask_sh),\ 262 261 SF(OTG0_OTG_PIPE_UPDATE_STATUS, OTG_CURSOR_UPDATE_PENDING, mask_sh),\ 263 262 SF(OTG0_OTG_PIPE_UPDATE_STATUS, OTG_VUPDATE_KEEPOUT_STATUS, mask_sh),\ 263 + SF(OTG0_INTERRUPT_DEST, OTG0_IHC_OTG_VERTICAL_INTERRUPT2_DEST, mask_sh) 264 264 265 265 void dcn31_timing_generator_init(struct optc *optc1); 266 266 ··· 270 268 void optc31_set_drr(struct timing_generator *optc, const struct drr_params *params); 271 269 272 270 void optc3_init_odm(struct timing_generator *optc); 271 + 272 + void optc31_read_otg_state(struct timing_generator *optc, 273 + struct dcn_otg_state *s); 273 274 274 275 #endif /* __DC_OPTC_DCN31_H__ */
+1
drivers/gpu/drm/amd/display/dc/optc/dcn314/dcn314_optc.c
··· 255 255 .set_odm_combine = optc314_set_odm_combine, 256 256 .set_h_timing_div_manual_mode = optc314_set_h_timing_div_manual_mode, 257 257 .is_two_pixels_per_container = optc1_is_two_pixels_per_container, 258 + .read_otg_state = optc31_read_otg_state, 258 259 }; 259 260 260 261 void dcn314_timing_generator_init(struct optc *optc1)
+3 -1
drivers/gpu/drm/amd/display/dc/optc/dcn314/dcn314_optc.h
··· 99 99 SRI(OPTC_WIDTH_CONTROL, ODM, inst),\ 100 100 SRI(OPTC_MEMORY_CONFIG, ODM, inst),\ 101 101 SRI(OTG_DRR_CONTROL, OTG, inst),\ 102 - SRI(OTG_PIPE_UPDATE_STATUS, OTG, inst) 102 + SRI(OTG_PIPE_UPDATE_STATUS, OTG, inst),\ 103 + SRI(INTERRUPT_DEST, OTG, inst) 103 104 104 105 #define OPTC_COMMON_MASK_SH_LIST_DCN3_14(mask_sh)\ 105 106 SF(OTG0_OTG_VSTARTUP_PARAM, VSTARTUP_START, mask_sh),\ ··· 255 254 SF(OTG0_OTG_PIPE_UPDATE_STATUS, OTG_DC_REG_UPDATE_PENDING, mask_sh),\ 256 255 SF(OTG0_OTG_PIPE_UPDATE_STATUS, OTG_CURSOR_UPDATE_PENDING, mask_sh),\ 257 256 SF(OTG0_OTG_PIPE_UPDATE_STATUS, OTG_VUPDATE_KEEPOUT_STATUS, mask_sh),\ 257 + SF(OTG0_INTERRUPT_DEST, OTG0_IHC_OTG_VERTICAL_INTERRUPT2_DEST, mask_sh) 258 258 259 259 void dcn314_timing_generator_init(struct optc *optc1); 260 260
+1
drivers/gpu/drm/amd/display/dc/optc/dcn32/dcn32_optc.c
··· 364 364 .get_optc_double_buffer_pending = optc3_get_optc_double_buffer_pending, 365 365 .get_otg_double_buffer_pending = optc3_get_otg_update_pending, 366 366 .get_pipe_update_pending = optc3_get_pipe_update_pending, 367 + .read_otg_state = optc31_read_otg_state, 367 368 }; 368 369 369 370 void dcn32_timing_generator_init(struct optc *optc1)
+2 -1
drivers/gpu/drm/amd/display/dc/optc/dcn32/dcn32_optc.h
··· 181 181 SF(OTG0_OTG_PIPE_UPDATE_STATUS, OTG_FLIP_PENDING, mask_sh),\ 182 182 SF(OTG0_OTG_PIPE_UPDATE_STATUS, OTG_DC_REG_UPDATE_PENDING, mask_sh),\ 183 183 SF(OTG0_OTG_PIPE_UPDATE_STATUS, OTG_CURSOR_UPDATE_PENDING, mask_sh),\ 184 - SF(OTG0_OTG_PIPE_UPDATE_STATUS, OTG_VUPDATE_KEEPOUT_STATUS, mask_sh) 184 + SF(OTG0_OTG_PIPE_UPDATE_STATUS, OTG_VUPDATE_KEEPOUT_STATUS, mask_sh),\ 185 + SF(OTG0_INTERRUPT_DEST, OTG0_IHC_OTG_VERTICAL_INTERRUPT2_DEST, mask_sh) 185 186 186 187 void dcn32_timing_generator_init(struct optc *optc1); 187 188 void optc32_set_h_timing_div_manual_mode(struct timing_generator *optc, bool manual_mode);
+1
drivers/gpu/drm/amd/display/dc/optc/dcn35/dcn35_optc.c
··· 492 492 .init_odm = optc3_init_odm, 493 493 .set_long_vtotal = optc35_set_long_vtotal, 494 494 .is_two_pixels_per_container = optc1_is_two_pixels_per_container, 495 + .read_otg_state = optc31_read_otg_state, 495 496 }; 496 497 497 498 void dcn35_timing_generator_init(struct optc *optc1)
+2 -1
drivers/gpu/drm/amd/display/dc/optc/dcn35/dcn35_optc.h
··· 71 71 SF(OTG0_OTG_PIPE_UPDATE_STATUS, OTG_FLIP_PENDING, mask_sh),\ 72 72 SF(OTG0_OTG_PIPE_UPDATE_STATUS, OTG_DC_REG_UPDATE_PENDING, mask_sh),\ 73 73 SF(OTG0_OTG_PIPE_UPDATE_STATUS, OTG_CURSOR_UPDATE_PENDING, mask_sh),\ 74 - SF(OTG0_OTG_PIPE_UPDATE_STATUS, OTG_VUPDATE_KEEPOUT_STATUS, mask_sh) 74 + SF(OTG0_OTG_PIPE_UPDATE_STATUS, OTG_VUPDATE_KEEPOUT_STATUS, mask_sh),\ 75 + SF(OTG0_INTERRUPT_DEST, OTG0_IHC_OTG_VERTICAL_INTERRUPT2_DEST, mask_sh) 75 76 76 77 void dcn35_timing_generator_init(struct optc *optc1); 77 78
+1
drivers/gpu/drm/amd/display/dc/optc/dcn401/dcn401_optc.c
··· 527 527 .get_pipe_update_pending = optc3_get_pipe_update_pending, 528 528 .set_vupdate_keepout = optc401_set_vupdate_keepout, 529 529 .wait_update_lock_status = optc401_wait_update_lock_status, 530 + .read_otg_state = optc31_read_otg_state, 530 531 }; 531 532 532 533 void dcn401_timing_generator_init(struct optc *optc1)
+2 -1
drivers/gpu/drm/amd/display/dc/optc/dcn401/dcn401_optc.h
··· 163 163 SF(OTG0_OTG_PIPE_UPDATE_STATUS, OTG_FLIP_PENDING, mask_sh),\ 164 164 SF(OTG0_OTG_PIPE_UPDATE_STATUS, OTG_DC_REG_UPDATE_PENDING, mask_sh),\ 165 165 SF(OTG0_OTG_PIPE_UPDATE_STATUS, OTG_CURSOR_UPDATE_PENDING, mask_sh),\ 166 - SF(OTG0_OTG_PIPE_UPDATE_STATUS, OTG_VUPDATE_KEEPOUT_STATUS, mask_sh) 166 + SF(OTG0_OTG_PIPE_UPDATE_STATUS, OTG_VUPDATE_KEEPOUT_STATUS, mask_sh),\ 167 + SF(OTG0_INTERRUPT_DEST, OTG0_IHC_OTG_VERTICAL_INTERRUPT2_DEST, mask_sh) 167 168 168 169 void dcn401_timing_generator_init(struct optc *optc1); 169 170
+2 -1
drivers/gpu/drm/amd/display/dc/resource/dcn32/dcn32_resource.h
··· 1055 1055 SRI_ARR(OPTC_WIDTH_CONTROL, ODM, inst), \ 1056 1056 SRI_ARR(OPTC_MEMORY_CONFIG, ODM, inst), \ 1057 1057 SRI_ARR(OTG_DRR_CONTROL, OTG, inst), \ 1058 - SRI_ARR(OTG_PIPE_UPDATE_STATUS, OTG, inst) 1058 + SRI_ARR(OTG_PIPE_UPDATE_STATUS, OTG, inst), \ 1059 + SRI_ARR(INTERRUPT_DEST, OTG, inst) 1059 1060 1060 1061 /* HUBP */ 1061 1062
+2 -1
drivers/gpu/drm/amd/display/dc/resource/dcn35/dcn35_resource.h
··· 305 305 SRI_ARR(OPTC_WIDTH_CONTROL, ODM, inst),\ 306 306 SRI_ARR(OPTC_MEMORY_CONFIG, ODM, inst),\ 307 307 SRI_ARR(OTG_DRR_CONTROL, OTG, inst),\ 308 - SRI2_ARR(OPTC_CLOCK_CONTROL, OPTC, inst) 308 + SRI2_ARR(OPTC_CLOCK_CONTROL, OPTC, inst),\ 309 + SRI_ARR(INTERRUPT_DEST, OTG, inst) 309 310 310 311 /* DPP */ 311 312 #define DPP_REG_LIST_DCN35_RI(id)\
+2 -1
drivers/gpu/drm/amd/display/dc/resource/dcn401/dcn401_resource.h
··· 538 538 SRI_ARR(OPTC_MEMORY_CONFIG, ODM, inst), \ 539 539 SRI_ARR(OTG_DRR_CONTROL, OTG, inst), \ 540 540 SRI_ARR(OTG_PSTATE_REGISTER, OTG, inst), \ 541 - SRI_ARR(OTG_PIPE_UPDATE_STATUS, OTG, inst) 541 + SRI_ARR(OTG_PIPE_UPDATE_STATUS, OTG, inst), \ 542 + SRI_ARR(INTERRUPT_DEST, OTG, inst) 542 543 543 544 /* HUBBUB */ 544 545 #define HUBBUB_REG_LIST_DCN4_01_RI(id) \