|
40 | 40 | #define FN(reg_name, field_name) \ |
41 | 41 | optc1->tg_shift->field_name, optc1->tg_mask->field_name |
42 | 42 |
|
| 43 | +#define STATIC_SCREEN_EVENT_MASK_DRR_DOUBLE_BUFFER_UPDATE_EN 0x2000 /*bit 13*/ |
43 | 44 | static void optc31_set_odm_combine(struct timing_generator *optc, int *opp_id, int opp_cnt, |
44 | 45 | struct dc_crtc_timing *timing) |
45 | 46 | { |
@@ -231,6 +232,32 @@ void optc3_init_odm(struct timing_generator *optc) |
231 | 232 | OPTC_MEM_SEL, 0); |
232 | 233 | optc1->opp_count = 1; |
233 | 234 | } |
| 235 | +void optc31_set_static_screen_control( |
| 236 | + struct timing_generator *optc, |
| 237 | + uint32_t event_triggers, |
| 238 | + uint32_t num_frames) |
| 239 | +{ |
| 240 | + struct optc *optc1 = DCN10TG_FROM_TG(optc); |
| 241 | + uint32_t framecount; |
| 242 | + uint32_t events; |
| 243 | + |
| 244 | + if (num_frames > 0xFF) |
| 245 | + num_frames = 0xFF; |
| 246 | + REG_GET_2(OTG_STATIC_SCREEN_CONTROL, |
| 247 | + OTG_STATIC_SCREEN_EVENT_MASK, &events, |
| 248 | + OTG_STATIC_SCREEN_FRAME_COUNT, &framecount); |
| 249 | + |
| 250 | + if (events == event_triggers && num_frames == framecount) |
| 251 | + return; |
| 252 | + if ((event_triggers & STATIC_SCREEN_EVENT_MASK_DRR_DOUBLE_BUFFER_UPDATE_EN) |
| 253 | + != 0) |
| 254 | + event_triggers = event_triggers & |
| 255 | + ~STATIC_SCREEN_EVENT_MASK_DRR_DOUBLE_BUFFER_UPDATE_EN; |
| 256 | + |
| 257 | + REG_UPDATE_2(OTG_STATIC_SCREEN_CONTROL, |
| 258 | + OTG_STATIC_SCREEN_EVENT_MASK, event_triggers, |
| 259 | + OTG_STATIC_SCREEN_FRAME_COUNT, num_frames); |
| 260 | +} |
234 | 261 |
|
235 | 262 | static struct timing_generator_funcs dcn31_tg_funcs = { |
236 | 263 | .validate_timing = optc1_validate_timing, |
@@ -266,7 +293,7 @@ static struct timing_generator_funcs dcn31_tg_funcs = { |
266 | 293 | .set_drr = optc31_set_drr, |
267 | 294 | .get_last_used_drr_vtotal = optc2_get_last_used_drr_vtotal, |
268 | 295 | .set_vtotal_min_max = optc1_set_vtotal_min_max, |
269 | | - .set_static_screen_control = optc1_set_static_screen_control, |
| 296 | + .set_static_screen_control = optc31_set_static_screen_control, |
270 | 297 | .program_stereo = optc1_program_stereo, |
271 | 298 | .is_stereo_left_eye = optc1_is_stereo_left_eye, |
272 | 299 | .tg_init = optc3_tg_init, |
|
0 commit comments