Lines Matching +full:display +full:- +full:pipe
1 // SPDX-License-Identifier: MIT
236 static u8 icl_nv12_y_plane_mask(struct intel_display *display) in icl_nv12_y_plane_mask() argument
238 if (DISPLAY_VER(display) >= 13 || HAS_D12_PLANE_MINIMIZATION(display)) in icl_nv12_y_plane_mask()
244 bool icl_is_nv12_y_plane(struct intel_display *display, in icl_is_nv12_y_plane() argument
247 return DISPLAY_VER(display) >= 11 && in icl_is_nv12_y_plane()
248 icl_nv12_y_plane_mask(display) & BIT(plane_id); in icl_is_nv12_y_plane()
256 bool icl_is_hdr_plane(struct intel_display *display, enum plane_id plane_id) in icl_is_hdr_plane() argument
258 return DISPLAY_VER(display) >= 11 && in icl_is_hdr_plane()
275 const struct drm_framebuffer *fb = plane_state->hw.fb; in glk_plane_ratio()
277 if (fb->format->cpp[0] == 8) { in glk_plane_ratio()
302 const struct drm_framebuffer *fb = plane_state->hw.fb; in skl_plane_ratio()
304 if (fb->format->cpp[0] == 8) { in skl_plane_ratio()
328 int cpp = fb->format->cpp[color_plane]; in skl_plane_max_width()
330 switch (fb->modifier) { in skl_plane_max_width()
336 * - Ytile (already limited to 4k) in skl_plane_max_width()
337 * - FP16 (already limited to 4k) in skl_plane_max_width()
338 * - render compression (already limited to 4k) in skl_plane_max_width()
339 * - KVMR sprite and cursor (don't care) in skl_plane_max_width()
340 * - horizontal panning (TODO verify this) in skl_plane_max_width()
341 * - pipe and plane scaling (TODO verify this) in skl_plane_max_width()
357 MISSING_CASE(fb->modifier); in skl_plane_max_width()
366 int cpp = fb->format->cpp[color_plane]; in glk_plane_max_width()
368 switch (fb->modifier) { in glk_plane_max_width()
385 MISSING_CASE(fb->modifier); in glk_plane_max_width()
395 switch (fb->format->format) { in icl_plane_min_width()
434 if (intel_format_info_is_yuv_semiplanar(fb->format, fb->modifier)) in xe3_plane_max_width()
444 if (intel_format_info_is_yuv_semiplanar(fb->format, fb->modifier)) in icl_hdr_plane_max_width()
479 int cpp = info->cpp[0]; in plane_max_stride()
571 * Display WA #0731: skl in skl_plane_can_async_flip()
576 * Display WA #1159: glk in skl_plane_can_async_flip()
590 struct intel_display *display = to_intel_display(plane); in tgl_plane_min_alignment() local
591 /* PLANE_SURF GGTT -> DPT alignment */ in tgl_plane_min_alignment()
603 if (display->platform.alderlake_p && in tgl_plane_min_alignment()
604 intel_plane_can_async_flip(plane, fb->modifier)) in tgl_plane_min_alignment()
607 switch (fb->modifier) { in tgl_plane_min_alignment()
630 MISSING_CASE(fb->modifier); in tgl_plane_min_alignment()
647 * VT-d needs at least 256k alignment, in skl_plane_min_alignment()
650 switch (fb->modifier) { in skl_plane_min_alignment()
660 MISSING_CASE(fb->modifier); in skl_plane_min_alignment()
678 * in full-range YCbCr.
685 struct intel_display *display = to_intel_display(plane); in icl_program_input_csc() local
686 enum pipe pipe = plane->pipe; in icl_program_input_csc() local
687 enum plane_id plane_id = plane->id; in icl_program_input_csc()
691 * BT.601 full range YCbCr -> full range RGB in icl_program_input_csc()
694 * 1.000, -0.336, -0.698, in icl_program_input_csc()
703 * BT.709 full range YCbCr -> full range RGB in icl_program_input_csc()
706 * 1.000, -0.187, -0.468, in icl_program_input_csc()
715 * BT.2020 full range YCbCr -> full range RGB in icl_program_input_csc()
718 * 1.000, -0.1645, -0.5713, in icl_program_input_csc()
727 const u16 *csc = input_csc_matrix[plane_state->hw.color_encoding]; in icl_program_input_csc()
729 intel_de_write_dsb(display, dsb, PLANE_INPUT_CSC_COEFF(pipe, plane_id, 0), in icl_program_input_csc()
731 intel_de_write_dsb(display, dsb, PLANE_INPUT_CSC_COEFF(pipe, plane_id, 1), in icl_program_input_csc()
733 intel_de_write_dsb(display, dsb, PLANE_INPUT_CSC_COEFF(pipe, plane_id, 2), in icl_program_input_csc()
735 intel_de_write_dsb(display, dsb, PLANE_INPUT_CSC_COEFF(pipe, plane_id, 3), in icl_program_input_csc()
737 intel_de_write_dsb(display, dsb, PLANE_INPUT_CSC_COEFF(pipe, plane_id, 4), in icl_program_input_csc()
739 intel_de_write_dsb(display, dsb, PLANE_INPUT_CSC_COEFF(pipe, plane_id, 5), in icl_program_input_csc()
742 intel_de_write_dsb(display, dsb, PLANE_INPUT_CSC_PREOFF(pipe, plane_id, 0), in icl_program_input_csc()
744 intel_de_write_dsb(display, dsb, PLANE_INPUT_CSC_PREOFF(pipe, plane_id, 1), in icl_program_input_csc()
746 intel_de_write_dsb(display, dsb, PLANE_INPUT_CSC_PREOFF(pipe, plane_id, 2), in icl_program_input_csc()
748 intel_de_write_dsb(display, dsb, in icl_program_input_csc()
749 PLANE_INPUT_CSC_POSTOFF(pipe, plane_id, 0), 0x0); in icl_program_input_csc()
750 intel_de_write_dsb(display, dsb, in icl_program_input_csc()
751 PLANE_INPUT_CSC_POSTOFF(pipe, plane_id, 1), 0x0); in icl_program_input_csc()
752 intel_de_write_dsb(display, dsb, in icl_program_input_csc()
753 PLANE_INPUT_CSC_POSTOFF(pipe, plane_id, 2), 0x0); in icl_program_input_csc()
774 const struct drm_framebuffer *fb = plane_state->hw.fb; in skl_plane_stride()
775 unsigned int rotation = plane_state->hw.rotation; in skl_plane_stride()
776 u32 stride = plane_state->view.color_plane[color_plane].scanout_stride; in skl_plane_stride()
778 if (color_plane >= fb->format->num_planes) in skl_plane_stride()
786 if (!entry->end) in skl_plane_ddb_reg_val()
789 return PLANE_BUF_END(entry->end - 1) | in skl_plane_ddb_reg_val()
790 PLANE_BUF_START(entry->start); in skl_plane_ddb_reg_val()
813 if (level->enable) in skl_plane_wm_reg_val()
815 if (level->ignore_lines) in skl_plane_wm_reg_val()
817 if (level->auto_min_alloc_wm_enable) in skl_plane_wm_reg_val()
820 val |= REG_FIELD_PREP(PLANE_WM_BLOCKS_MASK, level->blocks); in skl_plane_wm_reg_val()
821 val |= REG_FIELD_PREP(PLANE_WM_LINES_MASK, level->lines); in skl_plane_wm_reg_val()
830 struct intel_display *display = to_intel_display(plane); in skl_write_plane_wm() local
831 enum plane_id plane_id = plane->id; in skl_write_plane_wm()
832 enum pipe pipe = plane->pipe; in skl_write_plane_wm() local
833 const struct skl_pipe_wm *pipe_wm = &crtc_state->wm.skl.optimal; in skl_write_plane_wm()
835 &crtc_state->wm.skl.plane_ddb[plane_id]; in skl_write_plane_wm()
837 &crtc_state->wm.skl.plane_ddb_y[plane_id]; in skl_write_plane_wm()
838 const u16 *min_ddb = &crtc_state->wm.skl.plane_min_ddb[plane_id]; in skl_write_plane_wm()
840 &crtc_state->wm.skl.plane_interim_ddb[plane_id]; in skl_write_plane_wm()
843 for (level = 0; level < display->wm.num_levels; level++) in skl_write_plane_wm()
844 intel_de_write_dsb(display, dsb, PLANE_WM(pipe, plane_id, level), in skl_write_plane_wm()
847 intel_de_write_dsb(display, dsb, PLANE_WM_TRANS(pipe, plane_id), in skl_write_plane_wm()
850 if (HAS_HW_SAGV_WM(display)) { in skl_write_plane_wm()
851 const struct skl_plane_wm *wm = &pipe_wm->planes[plane_id]; in skl_write_plane_wm()
853 intel_de_write_dsb(display, dsb, PLANE_WM_SAGV(pipe, plane_id), in skl_write_plane_wm()
854 skl_plane_wm_reg_val(&wm->sagv.wm0)); in skl_write_plane_wm()
855 intel_de_write_dsb(display, dsb, PLANE_WM_SAGV_TRANS(pipe, plane_id), in skl_write_plane_wm()
856 skl_plane_wm_reg_val(&wm->sagv.trans_wm)); in skl_write_plane_wm()
859 intel_de_write_dsb(display, dsb, PLANE_BUF_CFG(pipe, plane_id), in skl_write_plane_wm()
862 if (DISPLAY_VER(display) < 11) in skl_write_plane_wm()
863 intel_de_write_dsb(display, dsb, PLANE_NV12_BUF_CFG(pipe, plane_id), in skl_write_plane_wm()
866 if (DISPLAY_VER(display) >= 30) in skl_write_plane_wm()
867 intel_de_write_dsb(display, dsb, PLANE_MIN_BUF_CFG(pipe, plane_id), in skl_write_plane_wm()
876 struct intel_display *display = to_intel_display(plane); in skl_plane_disable_arm() local
877 enum plane_id plane_id = plane->id; in skl_plane_disable_arm()
878 enum pipe pipe = plane->pipe; in skl_plane_disable_arm() local
882 intel_de_write_dsb(display, dsb, PLANE_CTL(pipe, plane_id), 0); in skl_plane_disable_arm()
883 intel_de_write_dsb(display, dsb, PLANE_SURF(pipe, plane_id), 0); in skl_plane_disable_arm()
890 struct intel_display *display = to_intel_display(plane); in icl_plane_disable_sel_fetch_arm() local
891 enum pipe pipe = plane->pipe; in icl_plane_disable_sel_fetch_arm() local
893 if (!crtc_state->enable_psr2_sel_fetch) in icl_plane_disable_sel_fetch_arm()
896 intel_de_write_dsb(display, dsb, SEL_FETCH_PLANE_CTL(pipe, plane->id), 0); in icl_plane_disable_sel_fetch_arm()
904 struct intel_display *display = to_intel_display(plane); in icl_plane_disable_arm() local
905 enum plane_id plane_id = plane->id; in icl_plane_disable_arm()
906 enum pipe pipe = plane->pipe; in icl_plane_disable_arm() local
908 if (icl_is_hdr_plane(display, plane_id)) in icl_plane_disable_arm()
909 intel_de_write_dsb(display, dsb, PLANE_CUS_CTL(pipe, plane_id), 0); in icl_plane_disable_arm()
914 intel_de_write_dsb(display, dsb, PLANE_CTL(pipe, plane_id), 0); in icl_plane_disable_arm()
915 intel_de_write_dsb(display, dsb, PLANE_SURF(pipe, plane_id), 0); in icl_plane_disable_arm()
920 enum pipe *pipe) in skl_plane_get_hw_state() argument
922 struct intel_display *display = to_intel_display(plane); in skl_plane_get_hw_state() local
924 enum plane_id plane_id = plane->id; in skl_plane_get_hw_state()
928 power_domain = POWER_DOMAIN_PIPE(plane->pipe); in skl_plane_get_hw_state()
929 wakeref = intel_display_power_get_if_enabled(display, power_domain); in skl_plane_get_hw_state()
933 ret = intel_de_read(display, PLANE_CTL(plane->pipe, plane_id)) & PLANE_CTL_ENABLE; in skl_plane_get_hw_state()
935 *pipe = plane->pipe; in skl_plane_get_hw_state()
937 intel_display_power_put(display, power_domain, wakeref); in skl_plane_get_hw_state()
1006 if (!plane_state->hw.fb->format->has_alpha) in skl_plane_ctl_alpha()
1009 switch (plane_state->hw.pixel_blend_mode) { in skl_plane_ctl_alpha()
1017 MISSING_CASE(plane_state->hw.pixel_blend_mode); in skl_plane_ctl_alpha()
1024 if (!plane_state->hw.fb->format->has_alpha) in glk_plane_color_ctl_alpha()
1027 switch (plane_state->hw.pixel_blend_mode) { in glk_plane_color_ctl_alpha()
1035 MISSING_CASE(plane_state->hw.pixel_blend_mode); in glk_plane_color_ctl_alpha()
1131 const struct drm_framebuffer *fb = plane_state->hw.fb; in adlp_plane_ctl_arb_slots()
1133 if (intel_format_info_is_yuv_semiplanar(fb->format, fb->modifier)) { in adlp_plane_ctl_arb_slots()
1134 switch (fb->format->cpp[0]) { in adlp_plane_ctl_arb_slots()
1141 switch (fb->format->cpp[0]) { in adlp_plane_ctl_arb_slots()
1154 struct intel_display *display = to_intel_display(crtc_state); in skl_plane_ctl_crtc() local
1157 if (DISPLAY_VER(display) >= 10) in skl_plane_ctl_crtc()
1160 if (crtc_state->gamma_enable) in skl_plane_ctl_crtc()
1163 if (crtc_state->csc_enable) in skl_plane_ctl_crtc()
1172 struct intel_display *display = to_intel_display(plane_state); in skl_plane_ctl() local
1173 const struct drm_framebuffer *fb = plane_state->hw.fb; in skl_plane_ctl()
1174 unsigned int rotation = plane_state->hw.rotation; in skl_plane_ctl()
1175 const struct drm_intel_sprite_colorkey *key = &plane_state->ckey; in skl_plane_ctl()
1180 if (DISPLAY_VER(display) < 10) { in skl_plane_ctl()
1184 if (plane_state->hw.color_encoding == DRM_COLOR_YCBCR_BT709) in skl_plane_ctl()
1187 if (plane_state->hw.color_range == DRM_COLOR_YCBCR_FULL_RANGE) in skl_plane_ctl()
1191 plane_ctl |= skl_plane_ctl_format(fb->format->format); in skl_plane_ctl()
1192 plane_ctl |= skl_plane_ctl_tiling(fb->modifier); in skl_plane_ctl()
1195 if (DISPLAY_VER(display) >= 11) in skl_plane_ctl()
1199 if (key->flags & I915_SET_COLORKEY_DESTINATION) in skl_plane_ctl()
1201 else if (key->flags & I915_SET_COLORKEY_SOURCE) in skl_plane_ctl()
1204 /* Wa_22012358565:adl-p */ in skl_plane_ctl()
1205 if (DISPLAY_VER(display) == 13) in skl_plane_ctl()
1213 struct intel_display *display = to_intel_display(crtc_state); in glk_plane_color_ctl_crtc() local
1216 if (DISPLAY_VER(display) >= 11) in glk_plane_color_ctl_crtc()
1219 if (crtc_state->gamma_enable) in glk_plane_color_ctl_crtc()
1222 if (crtc_state->csc_enable) in glk_plane_color_ctl_crtc()
1231 struct intel_display *display = to_intel_display(plane_state); in glk_plane_color_ctl() local
1232 const struct drm_framebuffer *fb = plane_state->hw.fb; in glk_plane_color_ctl()
1233 struct intel_plane *plane = to_intel_plane(plane_state->uapi.plane); in glk_plane_color_ctl()
1239 if (fb->format->is_yuv && !icl_is_hdr_plane(display, plane->id)) { in glk_plane_color_ctl()
1240 switch (plane_state->hw.color_encoding) { in glk_plane_color_ctl()
1252 if (plane_state->hw.color_range == DRM_COLOR_YCBCR_FULL_RANGE) in glk_plane_color_ctl()
1254 } else if (fb->format->is_yuv) { in glk_plane_color_ctl()
1256 if (plane_state->hw.color_range == DRM_COLOR_YCBCR_FULL_RANGE) in glk_plane_color_ctl()
1260 if (plane_state->force_black) in glk_plane_color_ctl()
1269 struct intel_display *display = to_intel_display(plane_state); in skl_surf_address() local
1270 const struct drm_framebuffer *fb = plane_state->hw.fb; in skl_surf_address()
1271 u32 offset = plane_state->view.color_plane[color_plane].offset; in skl_surf_address()
1278 drm_WARN_ON(display->drm, plane_state->dpt_vma && in skl_surf_address()
1279 intel_dpt_offset(plane_state->dpt_vma)); in skl_surf_address()
1280 drm_WARN_ON(display->drm, offset & 0x1fffff); in skl_surf_address()
1283 drm_WARN_ON(display->drm, offset & 0xfff); in skl_surf_address()
1296 if (plane_state->decrypt) in skl_plane_surf()
1305 struct intel_display *display = to_intel_display(plane_state); in skl_plane_aux_dist() local
1306 const struct drm_framebuffer *fb = plane_state->hw.fb; in skl_plane_aux_dist()
1313 aux_dist = skl_surf_address(plane_state, aux_plane) - in skl_plane_aux_dist()
1316 if (DISPLAY_VER(display) < 12) in skl_plane_aux_dist()
1324 const struct drm_intel_sprite_colorkey *key = &plane_state->ckey; in skl_plane_keyval()
1326 return key->min_value; in skl_plane_keyval()
1331 const struct drm_intel_sprite_colorkey *key = &plane_state->ckey; in skl_plane_keymax()
1332 u8 alpha = plane_state->hw.alpha >> 8; in skl_plane_keymax()
1334 return (key->max_value & 0xffffff) | PLANE_KEYMAX_ALPHA(alpha); in skl_plane_keymax()
1339 const struct drm_intel_sprite_colorkey *key = &plane_state->ckey; in skl_plane_keymsk()
1340 u8 alpha = plane_state->hw.alpha >> 8; in skl_plane_keymsk()
1343 keymsk = key->channel_mask & 0x7ffffff; in skl_plane_keymsk()
1354 struct intel_display *display = to_intel_display(plane); in icl_plane_csc_load_black() local
1355 enum plane_id plane_id = plane->id; in icl_plane_csc_load_black()
1356 enum pipe pipe = plane->pipe; in icl_plane_csc_load_black() local
1358 intel_de_write_dsb(display, dsb, PLANE_CSC_COEFF(pipe, plane_id, 0), 0); in icl_plane_csc_load_black()
1359 intel_de_write_dsb(display, dsb, PLANE_CSC_COEFF(pipe, plane_id, 1), 0); in icl_plane_csc_load_black()
1361 intel_de_write_dsb(display, dsb, PLANE_CSC_COEFF(pipe, plane_id, 2), 0); in icl_plane_csc_load_black()
1362 intel_de_write_dsb(display, dsb, PLANE_CSC_COEFF(pipe, plane_id, 3), 0); in icl_plane_csc_load_black()
1364 intel_de_write_dsb(display, dsb, PLANE_CSC_COEFF(pipe, plane_id, 4), 0); in icl_plane_csc_load_black()
1365 intel_de_write_dsb(display, dsb, PLANE_CSC_COEFF(pipe, plane_id, 5), 0); in icl_plane_csc_load_black()
1367 intel_de_write_dsb(display, dsb, PLANE_CSC_PREOFF(pipe, plane_id, 0), 0); in icl_plane_csc_load_black()
1368 intel_de_write_dsb(display, dsb, PLANE_CSC_PREOFF(pipe, plane_id, 1), 0); in icl_plane_csc_load_black()
1369 intel_de_write_dsb(display, dsb, PLANE_CSC_PREOFF(pipe, plane_id, 2), 0); in icl_plane_csc_load_black()
1371 intel_de_write_dsb(display, dsb, PLANE_CSC_POSTOFF(pipe, plane_id, 0), 0); in icl_plane_csc_load_black()
1372 intel_de_write_dsb(display, dsb, PLANE_CSC_POSTOFF(pipe, plane_id, 1), 0); in icl_plane_csc_load_black()
1373 intel_de_write_dsb(display, dsb, PLANE_CSC_POSTOFF(pipe, plane_id, 2), 0); in icl_plane_csc_load_black()
1378 if (plane_state->planar_linked_plane && !plane_state->is_y_plane) in icl_plane_color_plane()
1390 struct intel_display *display = to_intel_display(plane); in skl_plane_update_noarm() local
1391 enum plane_id plane_id = plane->id; in skl_plane_update_noarm()
1392 enum pipe pipe = plane->pipe; in skl_plane_update_noarm() local
1394 int crtc_x = plane_state->uapi.dst.x1; in skl_plane_update_noarm()
1395 int crtc_y = plane_state->uapi.dst.y1; in skl_plane_update_noarm()
1396 u32 src_w = drm_rect_width(&plane_state->uapi.src) >> 16; in skl_plane_update_noarm()
1397 u32 src_h = drm_rect_height(&plane_state->uapi.src) >> 16; in skl_plane_update_noarm()
1400 if (plane_state->scaler_id >= 0) { in skl_plane_update_noarm()
1405 intel_de_write_dsb(display, dsb, PLANE_STRIDE(pipe, plane_id), in skl_plane_update_noarm()
1407 intel_de_write_dsb(display, dsb, PLANE_POS(pipe, plane_id), in skl_plane_update_noarm()
1409 intel_de_write_dsb(display, dsb, PLANE_SIZE(pipe, plane_id), in skl_plane_update_noarm()
1410 PLANE_HEIGHT(src_h - 1) | PLANE_WIDTH(src_w - 1)); in skl_plane_update_noarm()
1421 struct intel_display *display = to_intel_display(plane); in skl_plane_update_arm() local
1422 enum plane_id plane_id = plane->id; in skl_plane_update_arm()
1423 enum pipe pipe = plane->pipe; in skl_plane_update_arm() local
1424 u32 x = plane_state->view.color_plane[0].x; in skl_plane_update_arm()
1425 u32 y = plane_state->view.color_plane[0].y; in skl_plane_update_arm()
1428 plane_ctl = plane_state->ctl | in skl_plane_update_arm()
1432 if (plane->need_async_flip_toggle_wa && in skl_plane_update_arm()
1433 crtc_state->async_flip_planes & BIT(plane->id)) in skl_plane_update_arm()
1436 if (DISPLAY_VER(display) >= 10) in skl_plane_update_arm()
1437 plane_color_ctl = plane_state->color_ctl | in skl_plane_update_arm()
1440 intel_de_write_dsb(display, dsb, PLANE_KEYVAL(pipe, plane_id), in skl_plane_update_arm()
1442 intel_de_write_dsb(display, dsb, PLANE_KEYMSK(pipe, plane_id), in skl_plane_update_arm()
1444 intel_de_write_dsb(display, dsb, PLANE_KEYMAX(pipe, plane_id), in skl_plane_update_arm()
1447 intel_de_write_dsb(display, dsb, PLANE_OFFSET(pipe, plane_id), in skl_plane_update_arm()
1450 intel_de_write_dsb(display, dsb, PLANE_AUX_DIST(pipe, plane_id), in skl_plane_update_arm()
1453 intel_de_write_dsb(display, dsb, PLANE_AUX_OFFSET(pipe, plane_id), in skl_plane_update_arm()
1454 PLANE_OFFSET_Y(plane_state->view.color_plane[1].y) | in skl_plane_update_arm()
1455 PLANE_OFFSET_X(plane_state->view.color_plane[1].x)); in skl_plane_update_arm()
1457 if (DISPLAY_VER(display) >= 10) in skl_plane_update_arm()
1458 intel_de_write_dsb(display, dsb, PLANE_COLOR_CTL(pipe, plane_id), in skl_plane_update_arm()
1468 if (plane_state->scaler_id >= 0) in skl_plane_update_arm()
1472 * The control register self-arms if the plane was previously in skl_plane_update_arm()
1476 intel_de_write_dsb(display, dsb, PLANE_CTL(pipe, plane_id), in skl_plane_update_arm()
1478 intel_de_write_dsb(display, dsb, PLANE_SURF(pipe, plane_id), in skl_plane_update_arm()
1488 struct intel_display *display = to_intel_display(plane); in icl_plane_update_sel_fetch_noarm() local
1489 enum pipe pipe = plane->pipe; in icl_plane_update_sel_fetch_noarm() local
1494 if (!crtc_state->enable_psr2_sel_fetch) in icl_plane_update_sel_fetch_noarm()
1497 clip = &plane_state->psr2_sel_fetch_area; in icl_plane_update_sel_fetch_noarm()
1499 if (crtc_state->enable_psr2_su_region_et) in icl_plane_update_sel_fetch_noarm()
1500 y = max(0, plane_state->uapi.dst.y1 - crtc_state->psr2_su_area.y1); in icl_plane_update_sel_fetch_noarm()
1502 y = (clip->y1 + plane_state->uapi.dst.y1); in icl_plane_update_sel_fetch_noarm()
1504 val |= plane_state->uapi.dst.x1; in icl_plane_update_sel_fetch_noarm()
1505 intel_de_write_dsb(display, dsb, SEL_FETCH_PLANE_POS(pipe, plane->id), val); in icl_plane_update_sel_fetch_noarm()
1507 x = plane_state->view.color_plane[color_plane].x; in icl_plane_update_sel_fetch_noarm()
1514 y = plane_state->view.color_plane[color_plane].y + clip->y1; in icl_plane_update_sel_fetch_noarm()
1516 y = plane_state->view.color_plane[color_plane].y + clip->y1 / 2; in icl_plane_update_sel_fetch_noarm()
1520 intel_de_write_dsb(display, dsb, SEL_FETCH_PLANE_OFFSET(pipe, plane->id), val); in icl_plane_update_sel_fetch_noarm()
1523 val = (drm_rect_height(clip) - 1) << 16; in icl_plane_update_sel_fetch_noarm()
1524 val |= (drm_rect_width(&plane_state->uapi.src) >> 16) - 1; in icl_plane_update_sel_fetch_noarm()
1525 intel_de_write_dsb(display, dsb, SEL_FETCH_PLANE_SIZE(pipe, plane->id), val); in icl_plane_update_sel_fetch_noarm()
1534 struct intel_display *display = to_intel_display(plane); in icl_plane_update_noarm() local
1535 enum plane_id plane_id = plane->id; in icl_plane_update_noarm()
1536 enum pipe pipe = plane->pipe; in icl_plane_update_noarm() local
1539 const struct drm_framebuffer *fb = plane_state->hw.fb; in icl_plane_update_noarm()
1540 int crtc_x = plane_state->uapi.dst.x1; in icl_plane_update_noarm()
1541 int crtc_y = plane_state->uapi.dst.y1; in icl_plane_update_noarm()
1542 int x = plane_state->view.color_plane[color_plane].x; in icl_plane_update_noarm()
1543 int y = plane_state->view.color_plane[color_plane].y; in icl_plane_update_noarm()
1544 int src_w = drm_rect_width(&plane_state->uapi.src) >> 16; in icl_plane_update_noarm()
1545 int src_h = drm_rect_height(&plane_state->uapi.src) >> 16; in icl_plane_update_noarm()
1548 plane_color_ctl = plane_state->color_ctl | in icl_plane_update_noarm()
1552 if (plane_state->scaler_id >= 0) { in icl_plane_update_noarm()
1557 intel_de_write_dsb(display, dsb, PLANE_STRIDE(pipe, plane_id), in icl_plane_update_noarm()
1559 intel_de_write_dsb(display, dsb, PLANE_POS(pipe, plane_id), in icl_plane_update_noarm()
1561 intel_de_write_dsb(display, dsb, PLANE_SIZE(pipe, plane_id), in icl_plane_update_noarm()
1562 PLANE_HEIGHT(src_h - 1) | PLANE_WIDTH(src_w - 1)); in icl_plane_update_noarm()
1564 intel_de_write_dsb(display, dsb, PLANE_KEYVAL(pipe, plane_id), in icl_plane_update_noarm()
1566 intel_de_write_dsb(display, dsb, PLANE_KEYMSK(pipe, plane_id), in icl_plane_update_noarm()
1568 intel_de_write_dsb(display, dsb, PLANE_KEYMAX(pipe, plane_id), in icl_plane_update_noarm()
1571 intel_de_write_dsb(display, dsb, PLANE_OFFSET(pipe, plane_id), in icl_plane_update_noarm()
1574 if (intel_fb_is_rc_ccs_cc_modifier(fb->modifier)) { in icl_plane_update_noarm()
1575 intel_de_write_dsb(display, dsb, PLANE_CC_VAL(pipe, plane_id, 0), in icl_plane_update_noarm()
1576 lower_32_bits(plane_state->ccval)); in icl_plane_update_noarm()
1577 intel_de_write_dsb(display, dsb, PLANE_CC_VAL(pipe, plane_id, 1), in icl_plane_update_noarm()
1578 upper_32_bits(plane_state->ccval)); in icl_plane_update_noarm()
1582 if (!HAS_FLAT_CCS(to_i915(display->drm)) && DISPLAY_VER(display) < 20) in icl_plane_update_noarm()
1583 intel_de_write_dsb(display, dsb, PLANE_AUX_DIST(pipe, plane_id), in icl_plane_update_noarm()
1586 if (icl_is_hdr_plane(display, plane_id)) in icl_plane_update_noarm()
1587 intel_de_write_dsb(display, dsb, PLANE_CUS_CTL(pipe, plane_id), in icl_plane_update_noarm()
1588 plane_state->cus_ctl); in icl_plane_update_noarm()
1590 intel_de_write_dsb(display, dsb, PLANE_COLOR_CTL(pipe, plane_id), in icl_plane_update_noarm()
1593 if (fb->format->is_yuv && icl_is_hdr_plane(display, plane_id)) in icl_plane_update_noarm()
1600 * or after the commit, display content will be garbage. in icl_plane_update_noarm()
1602 if (plane_state->force_black) in icl_plane_update_noarm()
1613 struct intel_display *display = to_intel_display(plane); in icl_plane_update_sel_fetch_arm() local
1614 enum pipe pipe = plane->pipe; in icl_plane_update_sel_fetch_arm() local
1616 if (!crtc_state->enable_psr2_sel_fetch) in icl_plane_update_sel_fetch_arm()
1619 if (drm_rect_height(&plane_state->psr2_sel_fetch_area) > 0) in icl_plane_update_sel_fetch_arm()
1620 intel_de_write_dsb(display, dsb, SEL_FETCH_PLANE_CTL(pipe, plane->id), in icl_plane_update_sel_fetch_arm()
1632 struct intel_display *display = to_intel_display(plane); in icl_plane_update_arm() local
1633 enum plane_id plane_id = plane->id; in icl_plane_update_arm()
1634 enum pipe pipe = plane->pipe; in icl_plane_update_arm() local
1638 plane_ctl = plane_state->ctl | in icl_plane_update_arm()
1648 if (plane_state->scaler_id >= 0) in icl_plane_update_arm()
1654 * The control register self-arms if the plane was previously in icl_plane_update_arm()
1658 intel_de_write_dsb(display, dsb, PLANE_CTL(pipe, plane_id), in icl_plane_update_arm()
1660 intel_de_write_dsb(display, dsb, PLANE_SURF(pipe, plane_id), in icl_plane_update_arm()
1668 struct intel_display *display = to_intel_display(plane); in skl_plane_capture_error() local
1670 error->ctl = intel_de_read(display, PLANE_CTL(crtc->pipe, plane->id)); in skl_plane_capture_error()
1671 error->surf = intel_de_read(display, PLANE_SURF(crtc->pipe, plane->id)); in skl_plane_capture_error()
1672 error->surflive = intel_de_read(display, PLANE_SURFLIVE(crtc->pipe, plane->id)); in skl_plane_capture_error()
1682 struct intel_display *display = to_intel_display(plane); in skl_plane_async_flip() local
1683 enum plane_id plane_id = plane->id; in skl_plane_async_flip()
1684 enum pipe pipe = plane->pipe; in skl_plane_async_flip() local
1685 u32 plane_ctl = plane_state->ctl, plane_surf; in skl_plane_async_flip()
1691 if (DISPLAY_VER(display) >= 30) in skl_plane_async_flip()
1697 intel_de_write_dsb(display, dsb, PLANE_CTL(pipe, plane_id), in skl_plane_async_flip()
1699 intel_de_write_dsb(display, dsb, PLANE_SURF(pipe, plane_id), in skl_plane_async_flip()
1718 struct intel_display *display = to_intel_display(plane_state); in skl_plane_check_fb() local
1719 struct intel_plane *plane = to_intel_plane(plane_state->uapi.plane); in skl_plane_check_fb()
1720 const struct drm_framebuffer *fb = plane_state->hw.fb; in skl_plane_check_fb()
1721 unsigned int rotation = plane_state->hw.rotation; in skl_plane_check_fb()
1727 intel_fb_is_ccs_modifier(fb->modifier)) { in skl_plane_check_fb()
1728 drm_dbg_kms(display->drm, in skl_plane_check_fb()
1730 plane->base.base.id, plane->base.name, rotation); in skl_plane_check_fb()
1731 return -EINVAL; in skl_plane_check_fb()
1735 fb->modifier == DRM_FORMAT_MOD_LINEAR) { in skl_plane_check_fb()
1736 drm_dbg_kms(display->drm, in skl_plane_check_fb()
1738 plane->base.base.id, plane->base.name); in skl_plane_check_fb()
1739 return -EINVAL; in skl_plane_check_fb()
1746 intel_fb_is_tile4_modifier(fb->modifier) && in skl_plane_check_fb()
1747 DISPLAY_VER(display) >= 20) { in skl_plane_check_fb()
1748 drm_dbg_kms(display->drm, in skl_plane_check_fb()
1750 plane->base.base.id, plane->base.name); in skl_plane_check_fb()
1751 return -EINVAL; in skl_plane_check_fb()
1756 drm_dbg_kms(display->drm, in skl_plane_check_fb()
1758 plane->base.base.id, plane->base.name); in skl_plane_check_fb()
1759 return -EINVAL; in skl_plane_check_fb()
1764 * Indexed 8-bit. RGB 16-bit 5:6:5 is allowed gen11 onwards. in skl_plane_check_fb()
1766 switch (fb->format->format) { in skl_plane_check_fb()
1768 if (DISPLAY_VER(display) >= 11) in skl_plane_check_fb()
1781 drm_dbg_kms(display->drm, in skl_plane_check_fb()
1783 plane->base.base.id, plane->base.name, &fb->format->format); in skl_plane_check_fb()
1784 return -EINVAL; in skl_plane_check_fb()
1790 /* Y-tiling is not supported in IF-ID Interlace mode */ in skl_plane_check_fb()
1791 if (crtc_state->hw.enable && in skl_plane_check_fb()
1792 crtc_state->hw.adjusted_mode.flags & DRM_MODE_FLAG_INTERLACE && in skl_plane_check_fb()
1793 fb->modifier != DRM_FORMAT_MOD_LINEAR && in skl_plane_check_fb()
1794 fb->modifier != I915_FORMAT_MOD_X_TILED) { in skl_plane_check_fb()
1795 drm_dbg_kms(display->drm, in skl_plane_check_fb()
1796 "[PLANE:%d:%s] Y/Yf tiling not supported in IF-ID mode\n", in skl_plane_check_fb()
1797 plane->base.base.id, plane->base.name); in skl_plane_check_fb()
1798 return -EINVAL; in skl_plane_check_fb()
1801 /* Wa_1606054188:tgl,adl-s */ in skl_plane_check_fb()
1802 if ((display->platform.alderlake_s || display->platform.tigerlake) && in skl_plane_check_fb()
1803 plane_state->ckey.flags & I915_SET_COLORKEY_SOURCE && in skl_plane_check_fb()
1804 intel_format_is_p01x(fb->format->format)) { in skl_plane_check_fb()
1805 drm_dbg_kms(display->drm, in skl_plane_check_fb()
1807 plane->base.base.id, plane->base.name); in skl_plane_check_fb()
1808 return -EINVAL; in skl_plane_check_fb()
1817 struct intel_display *display = to_intel_display(plane_state); in skl_plane_check_dst_coordinates() local
1818 struct intel_plane *plane = to_intel_plane(plane_state->uapi.plane); in skl_plane_check_dst_coordinates()
1819 int crtc_x = plane_state->uapi.dst.x1; in skl_plane_check_dst_coordinates()
1820 int crtc_w = drm_rect_width(&plane_state->uapi.dst); in skl_plane_check_dst_coordinates()
1821 int pipe_src_w = drm_rect_width(&crtc_state->pipe_src); in skl_plane_check_dst_coordinates()
1824 * Display WA #1175: glk in skl_plane_check_dst_coordinates()
1825 * Planes other than the cursor may cause FIFO underflow and display in skl_plane_check_dst_coordinates()
1830 * screen may cause FIFO underflow and display corruption. in skl_plane_check_dst_coordinates()
1832 if (DISPLAY_VER(display) == 10 && in skl_plane_check_dst_coordinates()
1833 (crtc_x + crtc_w < 4 || crtc_x > pipe_src_w - 4)) { in skl_plane_check_dst_coordinates()
1834 drm_dbg_kms(display->drm, in skl_plane_check_dst_coordinates()
1835 "[PLANE:%d:%s] requested plane X %s position %d invalid (valid range %d-%d)\n", in skl_plane_check_dst_coordinates()
1836 plane->base.base.id, plane->base.name, in skl_plane_check_dst_coordinates()
1839 4, pipe_src_w - 4); in skl_plane_check_dst_coordinates()
1840 return -ERANGE; in skl_plane_check_dst_coordinates()
1848 struct intel_display *display = to_intel_display(plane_state); in skl_plane_check_nv12_rotation() local
1849 struct intel_plane *plane = to_intel_plane(plane_state->uapi.plane); in skl_plane_check_nv12_rotation()
1850 const struct drm_framebuffer *fb = plane_state->hw.fb; in skl_plane_check_nv12_rotation()
1851 unsigned int rotation = plane_state->hw.rotation; in skl_plane_check_nv12_rotation()
1852 int src_w = drm_rect_width(&plane_state->uapi.src) >> 16; in skl_plane_check_nv12_rotation()
1854 /* Display WA #1106 */ in skl_plane_check_nv12_rotation()
1855 if (intel_format_info_is_yuv_semiplanar(fb->format, fb->modifier) && in skl_plane_check_nv12_rotation()
1859 drm_dbg_kms(display->drm, in skl_plane_check_nv12_rotation()
1861 plane->base.base.id, plane->base.name); in skl_plane_check_nv12_rotation()
1862 return -EINVAL; in skl_plane_check_nv12_rotation()
1868 static int skl_plane_max_scale(struct intel_display *display, in skl_plane_max_scale() argument
1877 if (DISPLAY_VER(display) >= 10 || in skl_plane_max_scale()
1878 !intel_format_info_is_yuv_semiplanar(fb->format, fb->modifier)) in skl_plane_max_scale()
1879 return 0x30000 - 1; in skl_plane_max_scale()
1881 return 0x20000 - 1; in skl_plane_max_scale()
1889 if (plane->min_width) in intel_plane_min_width()
1890 return plane->min_width(fb, color_plane, rotation); in intel_plane_min_width()
1900 if (plane->max_width) in intel_plane_max_width()
1901 return plane->max_width(fb, color_plane, rotation); in intel_plane_max_width()
1911 if (plane->max_height) in intel_plane_max_height()
1912 return plane->max_height(fb, color_plane, rotation); in intel_plane_max_height()
1922 struct intel_plane *plane = to_intel_plane(plane_state->uapi.plane); in skl_check_main_ccs_coordinates()
1923 const struct drm_framebuffer *fb = plane_state->hw.fb; in skl_check_main_ccs_coordinates()
1924 int aux_x = plane_state->view.color_plane[ccs_plane].x; in skl_check_main_ccs_coordinates()
1925 int aux_y = plane_state->view.color_plane[ccs_plane].y; in skl_check_main_ccs_coordinates()
1926 u32 aux_offset = plane_state->view.color_plane[ccs_plane].offset; in skl_check_main_ccs_coordinates()
1927 unsigned int alignment = plane->min_alignment(plane, fb, ccs_plane); in skl_check_main_ccs_coordinates()
1947 aux_offset - alignment); in skl_check_main_ccs_coordinates()
1955 plane_state->view.color_plane[ccs_plane].offset = aux_offset; in skl_check_main_ccs_coordinates()
1956 plane_state->view.color_plane[ccs_plane].x = aux_x; in skl_check_main_ccs_coordinates()
1957 plane_state->view.color_plane[ccs_plane].y = aux_y; in skl_check_main_ccs_coordinates()
1966 struct intel_display *display = to_intel_display(plane_state); in skl_calc_main_surface_offset() local
1967 struct intel_plane *plane = to_intel_plane(plane_state->uapi.plane); in skl_calc_main_surface_offset()
1968 const struct drm_framebuffer *fb = plane_state->hw.fb; in skl_calc_main_surface_offset()
1970 u32 aux_offset = plane_state->view.color_plane[aux_plane].offset; in skl_calc_main_surface_offset()
1971 unsigned int alignment = plane->min_alignment(plane, fb, 0); in skl_calc_main_surface_offset()
1972 int w = drm_rect_width(&plane_state->uapi.src) >> 16; in skl_calc_main_surface_offset()
1976 if (drm_WARN_ON(display->drm, alignment && !is_power_of_2(alignment))) in skl_calc_main_surface_offset()
1977 return -EINVAL; in skl_calc_main_surface_offset()
1981 * main surface offset, and it must be non-negative. Make in skl_calc_main_surface_offset()
1987 aux_offset & ~(alignment - 1)); in skl_calc_main_surface_offset()
1990 * When using an X-tiled surface, the plane blows up in skl_calc_main_surface_offset()
1993 * TODO: linear and Y-tiled seem fine, Yf untested, in skl_calc_main_surface_offset()
1995 if (fb->modifier == I915_FORMAT_MOD_X_TILED) { in skl_calc_main_surface_offset()
1996 int cpp = fb->format->cpp[0]; in skl_calc_main_surface_offset()
1998 while ((*x + w) * cpp > plane_state->view.color_plane[0].mapping_stride) { in skl_calc_main_surface_offset()
2000 drm_dbg_kms(display->drm, in skl_calc_main_surface_offset()
2001 "[PLANE:%d:%s] unable to find suitable display surface offset due to X-tiling\n", in skl_calc_main_surface_offset()
2002 plane->base.base.id, plane->base.name); in skl_calc_main_surface_offset()
2003 return -EINVAL; in skl_calc_main_surface_offset()
2008 *offset - alignment); in skl_calc_main_surface_offset()
2017 struct intel_display *display = to_intel_display(plane_state); in skl_check_main_surface() local
2018 struct intel_plane *plane = to_intel_plane(plane_state->uapi.plane); in skl_check_main_surface()
2019 const struct drm_framebuffer *fb = plane_state->hw.fb; in skl_check_main_surface()
2020 unsigned int rotation = plane_state->hw.rotation; in skl_check_main_surface()
2021 int x = plane_state->uapi.src.x1 >> 16; in skl_check_main_surface()
2022 int y = plane_state->uapi.src.y1 >> 16; in skl_check_main_surface()
2023 int w = drm_rect_width(&plane_state->uapi.src) >> 16; in skl_check_main_surface()
2024 int h = drm_rect_height(&plane_state->uapi.src) >> 16; in skl_check_main_surface()
2028 unsigned int alignment = plane->min_alignment(plane, fb, 0); in skl_check_main_surface()
2034 drm_dbg_kms(display->drm, in skl_check_main_surface()
2036 plane->base.base.id, plane->base.name, in skl_check_main_surface()
2038 return -EINVAL; in skl_check_main_surface()
2050 if (intel_fb_is_ccs_modifier(fb->modifier) && aux_plane) { in skl_check_main_surface()
2057 offset, offset - alignment); in skl_check_main_surface()
2060 if (x != plane_state->view.color_plane[aux_plane].x || in skl_check_main_surface()
2061 y != plane_state->view.color_plane[aux_plane].y) { in skl_check_main_surface()
2062 drm_dbg_kms(display->drm, in skl_check_main_surface()
2063 "[PLANE:%d:%s] unable to find suitable display surface offset due to CCS\n", in skl_check_main_surface()
2064 plane->base.base.id, plane->base.name); in skl_check_main_surface()
2065 return -EINVAL; in skl_check_main_surface()
2069 if (DISPLAY_VER(display) >= 13) in skl_check_main_surface()
2070 drm_WARN_ON(display->drm, x > 65535 || y > 65535); in skl_check_main_surface()
2072 drm_WARN_ON(display->drm, x > 8191 || y > 8191); in skl_check_main_surface()
2074 plane_state->view.color_plane[0].offset = offset; in skl_check_main_surface()
2075 plane_state->view.color_plane[0].x = x; in skl_check_main_surface()
2076 plane_state->view.color_plane[0].y = y; in skl_check_main_surface()
2082 drm_rect_translate_to(&plane_state->uapi.src, in skl_check_main_surface()
2090 struct intel_display *display = to_intel_display(plane_state); in skl_check_nv12_aux_surface() local
2091 struct intel_plane *plane = to_intel_plane(plane_state->uapi.plane); in skl_check_nv12_aux_surface()
2092 const struct drm_framebuffer *fb = plane_state->hw.fb; in skl_check_nv12_aux_surface()
2093 unsigned int rotation = plane_state->hw.rotation; in skl_check_nv12_aux_surface()
2095 int ccs_plane = intel_fb_is_ccs_modifier(fb->modifier) ? in skl_check_nv12_aux_surface()
2099 int x = plane_state->uapi.src.x1 >> 17; in skl_check_nv12_aux_surface()
2100 int y = plane_state->uapi.src.y1 >> 17; in skl_check_nv12_aux_surface()
2101 int w = drm_rect_width(&plane_state->uapi.src) >> 17; in skl_check_nv12_aux_surface()
2102 int h = drm_rect_height(&plane_state->uapi.src) >> 17; in skl_check_nv12_aux_surface()
2107 drm_dbg_kms(display->drm, in skl_check_nv12_aux_surface()
2109 plane->base.base.id, plane->base.name, in skl_check_nv12_aux_surface()
2111 return -EINVAL; in skl_check_nv12_aux_surface()
2119 u32 aux_offset = plane_state->view.color_plane[ccs_plane].offset; in skl_check_nv12_aux_surface()
2120 unsigned int alignment = plane->min_alignment(plane, fb, uv_plane); in skl_check_nv12_aux_surface()
2127 aux_offset & ~(alignment - 1)); in skl_check_nv12_aux_surface()
2137 offset, offset - alignment); in skl_check_nv12_aux_surface()
2140 if (x != plane_state->view.color_plane[ccs_plane].x || in skl_check_nv12_aux_surface()
2141 y != plane_state->view.color_plane[ccs_plane].y) { in skl_check_nv12_aux_surface()
2142 drm_dbg_kms(display->drm, in skl_check_nv12_aux_surface()
2143 "[PLANE:%d:%s] unable to find suitable display surface offset due to CCS\n", in skl_check_nv12_aux_surface()
2144 plane->base.base.id, plane->base.name); in skl_check_nv12_aux_surface()
2145 return -EINVAL; in skl_check_nv12_aux_surface()
2149 if (DISPLAY_VER(display) >= 13) in skl_check_nv12_aux_surface()
2150 drm_WARN_ON(display->drm, x > 65535 || y > 65535); in skl_check_nv12_aux_surface()
2152 drm_WARN_ON(display->drm, x > 8191 || y > 8191); in skl_check_nv12_aux_surface()
2154 plane_state->view.color_plane[uv_plane].offset = offset; in skl_check_nv12_aux_surface()
2155 plane_state->view.color_plane[uv_plane].x = x; in skl_check_nv12_aux_surface()
2156 plane_state->view.color_plane[uv_plane].y = y; in skl_check_nv12_aux_surface()
2163 const struct drm_framebuffer *fb = plane_state->hw.fb; in skl_check_ccs_aux_surface()
2164 int src_x = plane_state->uapi.src.x1 >> 16; in skl_check_ccs_aux_surface()
2165 int src_y = plane_state->uapi.src.y1 >> 16; in skl_check_ccs_aux_surface()
2169 for (ccs_plane = 0; ccs_plane < fb->format->num_planes; ccs_plane++) { in skl_check_ccs_aux_surface()
2192 plane_state->view.color_plane[ccs_plane].offset = offset; in skl_check_ccs_aux_surface()
2193 plane_state->view.color_plane[ccs_plane].x = (x * hsub + src_x % hsub) / main_hsub; in skl_check_ccs_aux_surface()
2194 plane_state->view.color_plane[ccs_plane].y = (y * vsub + src_y % vsub) / main_vsub; in skl_check_ccs_aux_surface()
2202 const struct drm_framebuffer *fb = plane_state->hw.fb; in skl_check_plane_surface()
2209 if (!plane_state->uapi.visible) in skl_check_plane_surface()
2216 if (intel_fb_is_ccs_modifier(fb->modifier)) { in skl_check_plane_surface()
2222 if (intel_format_info_is_yuv_semiplanar(fb->format, in skl_check_plane_surface()
2223 fb->modifier)) { in skl_check_plane_surface()
2238 struct intel_display *display; in skl_fb_scalable() local
2243 display = to_intel_display(fb->dev); in skl_fb_scalable()
2245 switch (fb->format->format) { in skl_fb_scalable()
2252 return DISPLAY_VER(display) >= 11; in skl_fb_scalable()
2260 struct intel_display *display = to_intel_display(plane_state); in check_protection() local
2261 const struct drm_framebuffer *fb = plane_state->hw.fb; in check_protection()
2264 if (DISPLAY_VER(display) < 11) in check_protection()
2267 plane_state->decrypt = intel_pxp_key_check(obj, false) == 0; in check_protection()
2268 plane_state->force_black = intel_bo_is_protected(obj) && in check_protection()
2269 !plane_state->decrypt; in check_protection()
2275 const struct drm_framebuffer *fb = plane_state->hw.fb; in make_damage_viewport_relative()
2276 const struct drm_rect *src = &plane_state->uapi.src; in make_damage_viewport_relative()
2277 unsigned int rotation = plane_state->hw.rotation; in make_damage_viewport_relative()
2278 struct drm_rect *damage = &plane_state->damage; in make_damage_viewport_relative()
2283 if (!fb || !plane_state->uapi.visible) { in make_damage_viewport_relative()
2284 plane_state->damage = DRM_RECT_INIT(0, 0, 0, 0); in make_damage_viewport_relative()
2289 drm_rect_rotate(damage, fb->width, fb->height, in make_damage_viewport_relative()
2291 drm_rect_translate(damage, -(src->y1 >> 16), -(src->x1 >> 16)); in make_damage_viewport_relative()
2293 drm_rect_translate(damage, -(src->x1 >> 16), -(src->y1 >> 16)); in make_damage_viewport_relative()
2299 struct drm_rect *damage = &plane_state->damage; in clip_damage()
2305 drm_rect_fp_to_int(&src, &plane_state->uapi.src); in clip_damage()
2313 struct intel_display *display = to_intel_display(plane_state); in skl_plane_check() local
2314 struct intel_plane *plane = to_intel_plane(plane_state->uapi.plane); in skl_plane_check()
2315 const struct drm_framebuffer *fb = plane_state->hw.fb; in skl_plane_check()
2325 if (!plane_state->ckey.flags && skl_fb_scalable(fb)) { in skl_plane_check()
2327 max_scale = skl_plane_max_scale(display, fb); in skl_plane_check()
2341 if (!plane_state->uapi.visible) in skl_plane_check()
2361 if (!(plane_state->hw.alpha >> 8)) { in skl_plane_check()
2362 plane_state->uapi.visible = false; in skl_plane_check()
2363 plane_state->damage = DRM_RECT_INIT(0, 0, 0, 0); in skl_plane_check()
2366 plane_state->ctl = skl_plane_ctl(crtc_state, plane_state); in skl_plane_check()
2368 if (DISPLAY_VER(display) >= 10) in skl_plane_check()
2369 plane_state->color_ctl = glk_plane_color_ctl(crtc_state, in skl_plane_check()
2372 if (intel_format_info_is_yuv_semiplanar(fb->format, fb->modifier) && in skl_plane_check()
2373 icl_is_hdr_plane(display, plane->id)) in skl_plane_check()
2374 /* Enable and use MPEG-2 chroma siting */ in skl_plane_check()
2375 plane_state->cus_ctl = PLANE_CUS_ENABLE | in skl_plane_check()
2379 plane_state->cus_ctl = 0; in skl_plane_check()
2387 struct intel_display *display = to_intel_display(uv_plane_state); in icl_link_nv12_planes() local
2388 struct intel_plane *uv_plane = to_intel_plane(uv_plane_state->uapi.plane); in icl_link_nv12_planes()
2389 struct intel_plane *y_plane = to_intel_plane(y_plane_state->uapi.plane); in icl_link_nv12_planes()
2391 drm_WARN_ON(display->drm, icl_is_nv12_y_plane(display, uv_plane->id)); in icl_link_nv12_planes()
2392 drm_WARN_ON(display->drm, !icl_is_nv12_y_plane(display, y_plane->id)); in icl_link_nv12_planes()
2394 y_plane_state->ctl |= PLANE_CTL_YUV420_Y_PLANE; in icl_link_nv12_planes()
2396 if (icl_is_hdr_plane(display, uv_plane->id)) { in icl_link_nv12_planes()
2397 switch (y_plane->id) { in icl_link_nv12_planes()
2399 uv_plane_state->cus_ctl |= PLANE_CUS_Y_PLANE_7_ICL; in icl_link_nv12_planes()
2402 uv_plane_state->cus_ctl |= PLANE_CUS_Y_PLANE_6_ICL; in icl_link_nv12_planes()
2405 uv_plane_state->cus_ctl |= PLANE_CUS_Y_PLANE_5_RKL; in icl_link_nv12_planes()
2408 uv_plane_state->cus_ctl |= PLANE_CUS_Y_PLANE_4_RKL; in icl_link_nv12_planes()
2411 MISSING_CASE(y_plane->id); in icl_link_nv12_planes()
2416 static enum intel_fbc_id skl_fbc_id_for_pipe(enum pipe pipe) in skl_fbc_id_for_pipe() argument
2418 return pipe - PIPE_A + INTEL_FBC_A; in skl_fbc_id_for_pipe()
2421 static bool skl_plane_has_fbc(struct intel_display *display, in skl_plane_has_fbc() argument
2424 if ((DISPLAY_RUNTIME_INFO(display)->fbc_mask & BIT(fbc_id)) == 0) in skl_plane_has_fbc()
2427 if (DISPLAY_VER(display) >= 20) in skl_plane_has_fbc()
2428 return icl_is_hdr_plane(display, plane_id); in skl_plane_has_fbc()
2433 static struct intel_fbc *skl_plane_fbc(struct intel_display *display, in skl_plane_fbc() argument
2434 enum pipe pipe, enum plane_id plane_id) in skl_plane_fbc() argument
2436 enum intel_fbc_id fbc_id = skl_fbc_id_for_pipe(pipe); in skl_plane_fbc()
2438 if (skl_plane_has_fbc(display, fbc_id, plane_id)) in skl_plane_fbc()
2439 return display->fbc[fbc_id]; in skl_plane_fbc()
2444 static bool skl_plane_has_planar(struct intel_display *display, in skl_plane_has_planar() argument
2445 enum pipe pipe, enum plane_id plane_id) in skl_plane_has_planar() argument
2447 /* Display WA #0870: skl, bxt */ in skl_plane_has_planar()
2448 if (display->platform.skylake || display->platform.broxton) in skl_plane_has_planar()
2451 if (DISPLAY_VER(display) == 9 && pipe == PIPE_C) in skl_plane_has_planar()
2460 static const u32 *skl_get_plane_formats(struct intel_display *display, in skl_get_plane_formats() argument
2461 enum pipe pipe, enum plane_id plane_id, in skl_get_plane_formats() argument
2464 if (skl_plane_has_planar(display, pipe, plane_id)) { in skl_get_plane_formats()
2473 static const u32 *glk_get_plane_formats(struct intel_display *display, in glk_get_plane_formats() argument
2474 enum pipe pipe, enum plane_id plane_id, in glk_get_plane_formats() argument
2477 if (skl_plane_has_planar(display, pipe, plane_id)) { in glk_get_plane_formats()
2486 static const u32 *icl_get_plane_formats(struct intel_display *display, in icl_get_plane_formats() argument
2487 enum pipe pipe, enum plane_id plane_id, in icl_get_plane_formats() argument
2490 if (icl_is_hdr_plane(display, plane_id)) { in icl_get_plane_formats()
2493 } else if (icl_is_nv12_y_plane(display, plane_id)) { in icl_get_plane_formats()
2692 struct drm_i915_private *i915 = to_i915(plane->base.dev); in skl_plane_enable_flip_done()
2693 enum pipe pipe = plane->pipe; in skl_plane_enable_flip_done() local
2695 spin_lock_irq(&i915->irq_lock); in skl_plane_enable_flip_done()
2696 bdw_enable_pipe_irq(i915, pipe, GEN9_PIPE_PLANE_FLIP_DONE(plane->id)); in skl_plane_enable_flip_done()
2697 spin_unlock_irq(&i915->irq_lock); in skl_plane_enable_flip_done()
2703 struct drm_i915_private *i915 = to_i915(plane->base.dev); in skl_plane_disable_flip_done()
2704 enum pipe pipe = plane->pipe; in skl_plane_disable_flip_done() local
2706 spin_lock_irq(&i915->irq_lock); in skl_plane_disable_flip_done()
2707 bdw_disable_pipe_irq(i915, pipe, GEN9_PIPE_PLANE_FLIP_DONE(plane->id)); in skl_plane_disable_flip_done()
2708 spin_unlock_irq(&i915->irq_lock); in skl_plane_disable_flip_done()
2711 static bool skl_plane_has_rc_ccs(struct intel_display *display, in skl_plane_has_rc_ccs() argument
2712 enum pipe pipe, enum plane_id plane_id) in skl_plane_has_rc_ccs() argument
2714 return pipe != PIPE_C && in skl_plane_has_rc_ccs()
2718 static u8 skl_plane_caps(struct intel_display *display, in skl_plane_caps() argument
2719 enum pipe pipe, enum plane_id plane_id) in skl_plane_caps() argument
2725 if (skl_plane_has_rc_ccs(display, pipe, plane_id)) in skl_plane_caps()
2731 static bool glk_plane_has_rc_ccs(struct intel_display *display, in glk_plane_has_rc_ccs() argument
2732 enum pipe pipe) in glk_plane_has_rc_ccs() argument
2734 return pipe != PIPE_C; in glk_plane_has_rc_ccs()
2737 static u8 glk_plane_caps(struct intel_display *display, in glk_plane_caps() argument
2738 enum pipe pipe, enum plane_id plane_id) in glk_plane_caps() argument
2744 if (glk_plane_has_rc_ccs(display, pipe)) in glk_plane_caps()
2750 static u8 icl_plane_caps(struct intel_display *display, in icl_plane_caps() argument
2751 enum pipe pipe, enum plane_id plane_id) in icl_plane_caps() argument
2759 static bool tgl_plane_has_mc_ccs(struct intel_display *display, in tgl_plane_has_mc_ccs() argument
2763 if (display->platform.dg1 || display->platform.rocketlake || in tgl_plane_has_mc_ccs()
2764 (display->platform.tigerlake && IS_DISPLAY_STEP(display, STEP_A0, STEP_D0))) in tgl_plane_has_mc_ccs()
2770 static u8 tgl_plane_caps(struct intel_display *display, in tgl_plane_caps() argument
2771 enum pipe pipe, enum plane_id plane_id) in tgl_plane_caps() argument
2777 if (HAS_4TILE(display)) in tgl_plane_caps()
2782 if (tgl_plane_has_mc_ccs(display, plane_id)) in tgl_plane_caps()
2785 if (DISPLAY_VER(display) >= 14 && display->platform.dgfx) in tgl_plane_caps()
2792 skl_universal_plane_create(struct intel_display *display, in skl_universal_plane_create() argument
2793 enum pipe pipe, enum plane_id plane_id) in skl_universal_plane_create() argument
2810 plane->pipe = pipe; in skl_universal_plane_create()
2811 plane->id = plane_id; in skl_universal_plane_create()
2812 plane->frontbuffer_bit = INTEL_FRONTBUFFER(pipe, plane_id); in skl_universal_plane_create()
2814 intel_fbc_add_plane(skl_plane_fbc(display, pipe, plane_id), plane); in skl_universal_plane_create()
2816 if (DISPLAY_VER(display) >= 30) { in skl_universal_plane_create()
2817 plane->max_width = xe3_plane_max_width; in skl_universal_plane_create()
2818 plane->max_height = icl_plane_max_height; in skl_universal_plane_create()
2819 plane->min_cdclk = icl_plane_min_cdclk; in skl_universal_plane_create()
2820 } else if (DISPLAY_VER(display) >= 11) { in skl_universal_plane_create()
2821 plane->min_width = icl_plane_min_width; in skl_universal_plane_create()
2822 if (icl_is_hdr_plane(display, plane_id)) in skl_universal_plane_create()
2823 plane->max_width = icl_hdr_plane_max_width; in skl_universal_plane_create()
2825 plane->max_width = icl_sdr_plane_max_width; in skl_universal_plane_create()
2826 plane->max_height = icl_plane_max_height; in skl_universal_plane_create()
2827 plane->min_cdclk = icl_plane_min_cdclk; in skl_universal_plane_create()
2828 } else if (DISPLAY_VER(display) >= 10) { in skl_universal_plane_create()
2829 plane->max_width = glk_plane_max_width; in skl_universal_plane_create()
2830 plane->max_height = skl_plane_max_height; in skl_universal_plane_create()
2831 plane->min_cdclk = glk_plane_min_cdclk; in skl_universal_plane_create()
2833 plane->max_width = skl_plane_max_width; in skl_universal_plane_create()
2834 plane->max_height = skl_plane_max_height; in skl_universal_plane_create()
2835 plane->min_cdclk = skl_plane_min_cdclk; in skl_universal_plane_create()
2838 if (DISPLAY_VER(display) >= 13) in skl_universal_plane_create()
2839 plane->max_stride = adl_plane_max_stride; in skl_universal_plane_create()
2841 plane->max_stride = skl_plane_max_stride; in skl_universal_plane_create()
2843 if (DISPLAY_VER(display) >= 12) in skl_universal_plane_create()
2844 plane->min_alignment = tgl_plane_min_alignment; in skl_universal_plane_create()
2846 plane->min_alignment = skl_plane_min_alignment; in skl_universal_plane_create()
2848 if (intel_scanout_needs_vtd_wa(display)) in skl_universal_plane_create()
2849 plane->vtd_guard = DISPLAY_VER(display) >= 10 ? 168 : 136; in skl_universal_plane_create()
2851 if (DISPLAY_VER(display) >= 11) { in skl_universal_plane_create()
2852 plane->update_noarm = icl_plane_update_noarm; in skl_universal_plane_create()
2853 plane->update_arm = icl_plane_update_arm; in skl_universal_plane_create()
2854 plane->disable_arm = icl_plane_disable_arm; in skl_universal_plane_create()
2856 plane->update_noarm = skl_plane_update_noarm; in skl_universal_plane_create()
2857 plane->update_arm = skl_plane_update_arm; in skl_universal_plane_create()
2858 plane->disable_arm = skl_plane_disable_arm; in skl_universal_plane_create()
2860 plane->capture_error = skl_plane_capture_error; in skl_universal_plane_create()
2861 plane->get_hw_state = skl_plane_get_hw_state; in skl_universal_plane_create()
2862 plane->check_plane = skl_plane_check; in skl_universal_plane_create()
2864 if (HAS_ASYNC_FLIPS(display) && plane_id == PLANE_1) { in skl_universal_plane_create()
2865 plane->need_async_flip_toggle_wa = IS_DISPLAY_VER(display, 9, 10); in skl_universal_plane_create()
2866 plane->async_flip = skl_plane_async_flip; in skl_universal_plane_create()
2867 plane->enable_flip_done = skl_plane_enable_flip_done; in skl_universal_plane_create()
2868 plane->disable_flip_done = skl_plane_disable_flip_done; in skl_universal_plane_create()
2870 if (DISPLAY_VER(display) >= 12) in skl_universal_plane_create()
2871 plane->can_async_flip = tgl_plane_can_async_flip; in skl_universal_plane_create()
2872 else if (DISPLAY_VER(display) == 11) in skl_universal_plane_create()
2873 plane->can_async_flip = icl_plane_can_async_flip; in skl_universal_plane_create()
2875 plane->can_async_flip = skl_plane_can_async_flip; in skl_universal_plane_create()
2878 if (DISPLAY_VER(display) >= 11) in skl_universal_plane_create()
2879 formats = icl_get_plane_formats(display, pipe, in skl_universal_plane_create()
2881 else if (DISPLAY_VER(display) >= 10) in skl_universal_plane_create()
2882 formats = glk_get_plane_formats(display, pipe, in skl_universal_plane_create()
2885 formats = skl_get_plane_formats(display, pipe, in skl_universal_plane_create()
2888 if (DISPLAY_VER(display) >= 12) in skl_universal_plane_create()
2890 else if (DISPLAY_VER(display) == 11) in skl_universal_plane_create()
2900 if (DISPLAY_VER(display) >= 12) in skl_universal_plane_create()
2901 caps = tgl_plane_caps(display, pipe, plane_id); in skl_universal_plane_create()
2902 else if (DISPLAY_VER(display) == 11) in skl_universal_plane_create()
2903 caps = icl_plane_caps(display, pipe, plane_id); in skl_universal_plane_create()
2904 else if (DISPLAY_VER(display) == 10) in skl_universal_plane_create()
2905 caps = glk_plane_caps(display, pipe, plane_id); in skl_universal_plane_create()
2907 caps = skl_plane_caps(display, pipe, plane_id); in skl_universal_plane_create()
2910 if (!IS_ENABLED(I915) && !HAS_FLAT_CCS(to_i915(display->drm))) in skl_universal_plane_create()
2915 modifiers = intel_fb_plane_get_modifiers(display, caps); in skl_universal_plane_create()
2917 ret = drm_universal_plane_init(display->drm, &plane->base, in skl_universal_plane_create()
2922 pipe_name(pipe)); in skl_universal_plane_create()
2929 if (DISPLAY_VER(display) >= 13) in skl_universal_plane_create()
2936 if (DISPLAY_VER(display) >= 11) in skl_universal_plane_create()
2939 drm_plane_create_rotation_property(&plane->base, in skl_universal_plane_create()
2945 if (DISPLAY_VER(display) >= 10) in skl_universal_plane_create()
2948 drm_plane_create_color_properties(&plane->base, in skl_universal_plane_create()
2955 drm_plane_create_alpha_property(&plane->base); in skl_universal_plane_create()
2956 drm_plane_create_blend_mode_property(&plane->base, in skl_universal_plane_create()
2961 drm_plane_create_zpos_immutable_property(&plane->base, plane_id); in skl_universal_plane_create()
2963 if (DISPLAY_VER(display) >= 12) in skl_universal_plane_create()
2964 drm_plane_enable_fb_damage_clips(&plane->base); in skl_universal_plane_create()
2966 if (DISPLAY_VER(display) >= 11) in skl_universal_plane_create()
2967 drm_plane_create_scaling_filter_property(&plane->base, in skl_universal_plane_create()
2985 struct intel_display *display = to_intel_display(crtc); in skl_get_initial_plane_config() local
2986 struct intel_crtc_state *crtc_state = to_intel_crtc_state(crtc->base.state); in skl_get_initial_plane_config()
2987 struct intel_plane *plane = to_intel_plane(crtc->base.primary); in skl_get_initial_plane_config()
2988 enum plane_id plane_id = plane->id; in skl_get_initial_plane_config()
2989 enum pipe pipe; in skl_get_initial_plane_config() local
2997 if (!plane->get_hw_state(plane, &pipe)) in skl_get_initial_plane_config()
3000 drm_WARN_ON(display->drm, pipe != crtc->pipe); in skl_get_initial_plane_config()
3002 if (crtc_state->joiner_pipes) { in skl_get_initial_plane_config()
3003 drm_dbg_kms(display->drm, in skl_get_initial_plane_config()
3005 crtc->base.base.id, crtc->base.name); in skl_get_initial_plane_config()
3011 drm_dbg_kms(display->drm, "failed to alloc fb\n"); in skl_get_initial_plane_config()
3015 fb = &intel_fb->base; in skl_get_initial_plane_config()
3017 fb->dev = display->drm; in skl_get_initial_plane_config()
3019 val = intel_de_read(display, PLANE_CTL(pipe, plane_id)); in skl_get_initial_plane_config()
3021 if (DISPLAY_VER(display) >= 11) in skl_get_initial_plane_config()
3026 if (DISPLAY_VER(display) >= 10) { in skl_get_initial_plane_config()
3029 color_ctl = intel_de_read(display, PLANE_COLOR_CTL(pipe, plane_id)); in skl_get_initial_plane_config()
3037 fb->format = drm_format_info(fourcc); in skl_get_initial_plane_config()
3042 fb->modifier = DRM_FORMAT_MOD_LINEAR; in skl_get_initial_plane_config()
3045 plane_config->tiling = I915_TILING_X; in skl_get_initial_plane_config()
3046 fb->modifier = I915_FORMAT_MOD_X_TILED; in skl_get_initial_plane_config()
3049 plane_config->tiling = I915_TILING_Y; in skl_get_initial_plane_config()
3051 if (DISPLAY_VER(display) >= 14) in skl_get_initial_plane_config()
3052 fb->modifier = I915_FORMAT_MOD_4_TILED_MTL_RC_CCS; in skl_get_initial_plane_config()
3053 else if (DISPLAY_VER(display) >= 12) in skl_get_initial_plane_config()
3054 fb->modifier = I915_FORMAT_MOD_Y_TILED_GEN12_RC_CCS; in skl_get_initial_plane_config()
3056 fb->modifier = I915_FORMAT_MOD_Y_TILED_CCS; in skl_get_initial_plane_config()
3058 if (DISPLAY_VER(display) >= 14) in skl_get_initial_plane_config()
3059 fb->modifier = I915_FORMAT_MOD_4_TILED_MTL_MC_CCS; in skl_get_initial_plane_config()
3061 fb->modifier = I915_FORMAT_MOD_Y_TILED_GEN12_MC_CCS; in skl_get_initial_plane_config()
3063 fb->modifier = I915_FORMAT_MOD_Y_TILED; in skl_get_initial_plane_config()
3066 if (HAS_4TILE(display)) { in skl_get_initial_plane_config()
3071 fb->modifier = I915_FORMAT_MOD_4_TILED_DG2_RC_CCS; in skl_get_initial_plane_config()
3073 fb->modifier = I915_FORMAT_MOD_4_TILED_DG2_MC_CCS; in skl_get_initial_plane_config()
3075 fb->modifier = I915_FORMAT_MOD_4_TILED_DG2_RC_CCS_CC; in skl_get_initial_plane_config()
3077 fb->modifier = I915_FORMAT_MOD_4_TILED; in skl_get_initial_plane_config()
3080 fb->modifier = I915_FORMAT_MOD_Yf_TILED_CCS; in skl_get_initial_plane_config()
3082 fb->modifier = I915_FORMAT_MOD_Yf_TILED; in skl_get_initial_plane_config()
3090 if (!display->params.enable_dpt && in skl_get_initial_plane_config()
3091 intel_fb_modifier_uses_dpt(display, fb->modifier)) { in skl_get_initial_plane_config()
3092 drm_dbg_kms(display->drm, "DPT disabled, skipping initial FB\n"); in skl_get_initial_plane_config()
3102 plane_config->rotation = DRM_MODE_ROTATE_0; in skl_get_initial_plane_config()
3105 plane_config->rotation = DRM_MODE_ROTATE_270; in skl_get_initial_plane_config()
3108 plane_config->rotation = DRM_MODE_ROTATE_180; in skl_get_initial_plane_config()
3111 plane_config->rotation = DRM_MODE_ROTATE_90; in skl_get_initial_plane_config()
3115 if (DISPLAY_VER(display) >= 11 && val & PLANE_CTL_FLIP_HORIZONTAL) in skl_get_initial_plane_config()
3116 plane_config->rotation |= DRM_MODE_REFLECT_X; in skl_get_initial_plane_config()
3119 if (drm_rotation_90_or_270(plane_config->rotation)) in skl_get_initial_plane_config()
3122 base = intel_de_read(display, PLANE_SURF(pipe, plane_id)) & PLANE_SURF_ADDR_MASK; in skl_get_initial_plane_config()
3123 plane_config->base = base; in skl_get_initial_plane_config()
3125 offset = intel_de_read(display, PLANE_OFFSET(pipe, plane_id)); in skl_get_initial_plane_config()
3126 drm_WARN_ON(display->drm, offset != 0); in skl_get_initial_plane_config()
3128 val = intel_de_read(display, PLANE_SIZE(pipe, plane_id)); in skl_get_initial_plane_config()
3129 fb->height = REG_FIELD_GET(PLANE_HEIGHT_MASK, val) + 1; in skl_get_initial_plane_config()
3130 fb->width = REG_FIELD_GET(PLANE_WIDTH_MASK, val) + 1; in skl_get_initial_plane_config()
3132 val = intel_de_read(display, PLANE_STRIDE(pipe, plane_id)); in skl_get_initial_plane_config()
3135 fb->pitches[0] = REG_FIELD_GET(PLANE_STRIDE__MASK, val) * stride_mult; in skl_get_initial_plane_config()
3137 aligned_height = intel_fb_align_height(fb, 0, fb->height); in skl_get_initial_plane_config()
3139 plane_config->size = fb->pitches[0] * aligned_height; in skl_get_initial_plane_config()
3141 drm_dbg_kms(display->drm, in skl_get_initial_plane_config()
3143 crtc->base.base.id, crtc->base.name, in skl_get_initial_plane_config()
3144 plane->base.base.id, plane->base.name, in skl_get_initial_plane_config()
3145 fb->width, fb->height, fb->format->cpp[0] * 8, in skl_get_initial_plane_config()
3146 base, fb->pitches[0], plane_config->size); in skl_get_initial_plane_config()
3148 plane_config->fb = intel_fb; in skl_get_initial_plane_config()
3158 struct intel_display *display = to_intel_display(crtc); in skl_fixup_initial_plane_config() local
3159 struct intel_plane *plane = to_intel_plane(crtc->base.primary); in skl_fixup_initial_plane_config()
3161 to_intel_plane_state(plane->base.state); in skl_fixup_initial_plane_config()
3162 enum plane_id plane_id = plane->id; in skl_fixup_initial_plane_config()
3163 enum pipe pipe = crtc->pipe; in skl_fixup_initial_plane_config() local
3166 if (!plane_state->uapi.visible) in skl_fixup_initial_plane_config()
3175 if (plane_config->base == base) in skl_fixup_initial_plane_config()
3178 intel_de_write(display, PLANE_SURF(pipe, plane_id), base); in skl_fixup_initial_plane_config()