Lines Matching full:plane
341 * - pipe and plane scaling (TODO verify this) in skl_plane_max_width()
349 /* FIXME AUX plane? */ in skl_plane_max_width()
377 /* FIXME AUX plane? */ in glk_plane_max_width()
472 plane_max_stride(struct intel_plane *plane, in plane_max_stride() argument
488 adl_plane_max_stride(struct intel_plane *plane, in adl_plane_max_stride() argument
495 return plane_max_stride(plane, pixel_format, in adl_plane_max_stride()
501 skl_plane_max_stride(struct intel_plane *plane, in skl_plane_max_stride() argument
508 return plane_max_stride(plane, pixel_format, in skl_plane_max_stride()
586 static u32 tgl_plane_min_alignment(struct intel_plane *plane, in tgl_plane_min_alignment() argument
590 struct intel_display *display = to_intel_display(plane); in tgl_plane_min_alignment()
604 intel_plane_can_async_flip(plane, fb->modifier)) in tgl_plane_min_alignment()
635 static u32 skl_plane_min_alignment(struct intel_plane *plane, in skl_plane_min_alignment() argument
682 struct intel_plane *plane, in icl_program_input_csc() argument
685 struct intel_display *display = to_intel_display(plane); in icl_program_input_csc()
686 enum pipe pipe = plane->pipe; in icl_program_input_csc()
687 enum plane_id plane_id = plane->id; in icl_program_input_csc()
827 struct intel_plane *plane, in skl_write_plane_wm() argument
830 struct intel_display *display = to_intel_display(plane); in skl_write_plane_wm()
831 enum plane_id plane_id = plane->id; in skl_write_plane_wm()
832 enum pipe pipe = plane->pipe; in skl_write_plane_wm()
873 struct intel_plane *plane, in skl_plane_disable_arm() argument
876 struct intel_display *display = to_intel_display(plane); in skl_plane_disable_arm()
877 enum plane_id plane_id = plane->id; in skl_plane_disable_arm()
878 enum pipe pipe = plane->pipe; in skl_plane_disable_arm()
880 skl_write_plane_wm(dsb, plane, crtc_state); in skl_plane_disable_arm()
887 struct intel_plane *plane, in icl_plane_disable_sel_fetch_arm() argument
890 struct intel_display *display = to_intel_display(plane); in icl_plane_disable_sel_fetch_arm()
891 enum pipe pipe = plane->pipe; 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()
901 struct intel_plane *plane, in icl_plane_disable_arm() argument
904 struct intel_display *display = to_intel_display(plane); in icl_plane_disable_arm()
905 enum plane_id plane_id = plane->id; in icl_plane_disable_arm()
906 enum pipe pipe = plane->pipe; in icl_plane_disable_arm()
911 skl_write_plane_wm(dsb, plane, crtc_state); in icl_plane_disable_arm()
913 icl_plane_disable_sel_fetch_arm(dsb, plane, crtc_state); in icl_plane_disable_arm()
919 skl_plane_get_hw_state(struct intel_plane *plane, in skl_plane_get_hw_state() argument
922 struct intel_display *display = to_intel_display(plane); in skl_plane_get_hw_state()
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()
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()
1233 struct intel_plane *plane = to_intel_plane(plane_state->uapi.plane); in glk_plane_color_ctl() local
1239 if (fb->format->is_yuv && !icl_is_hdr_plane(display, plane->id)) { in glk_plane_color_ctl()
1351 struct intel_plane *plane, in icl_plane_csc_load_black() argument
1354 struct intel_display *display = to_intel_display(plane); in icl_plane_csc_load_black()
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()
1386 struct intel_plane *plane, in skl_plane_update_noarm() argument
1390 struct intel_display *display = to_intel_display(plane); in skl_plane_update_noarm()
1391 enum plane_id plane_id = plane->id; in skl_plane_update_noarm()
1392 enum pipe pipe = plane->pipe; in skl_plane_update_noarm()
1412 skl_write_plane_wm(dsb, plane, crtc_state); in skl_plane_update_noarm()
1417 struct intel_plane *plane, in skl_plane_update_arm() argument
1421 struct intel_display *display = to_intel_display(plane); in skl_plane_update_arm()
1422 enum plane_id plane_id = plane->id; in skl_plane_update_arm()
1423 enum pipe pipe = plane->pipe; 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()
1462 * Enable the scaler before the plane so that we don't in skl_plane_update_arm()
1469 skl_program_plane_scaler(dsb, plane, crtc_state, plane_state); in skl_plane_update_arm()
1472 * The control register self-arms if the plane was previously in skl_plane_update_arm()
1473 * disabled. Try to make the plane enable atomic by writing in skl_plane_update_arm()
1483 struct intel_plane *plane, in icl_plane_update_sel_fetch_noarm() argument
1488 struct intel_display *display = to_intel_display(plane); in icl_plane_update_sel_fetch_noarm()
1489 enum pipe pipe = plane->pipe; 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()
1510 * From Bspec: UV surface Start Y Position = half of Y plane Y 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()
1525 intel_de_write_dsb(display, dsb, SEL_FETCH_PLANE_SIZE(pipe, plane->id), val); in icl_plane_update_sel_fetch_noarm()
1530 struct intel_plane *plane, in icl_plane_update_noarm() argument
1534 struct intel_display *display = to_intel_display(plane); in icl_plane_update_noarm()
1535 enum plane_id plane_id = plane->id; in icl_plane_update_noarm()
1536 enum pipe pipe = plane->pipe; in icl_plane_update_noarm()
1594 icl_program_input_csc(dsb, plane, plane_state); in icl_plane_update_noarm()
1596 skl_write_plane_wm(dsb, plane, crtc_state); in icl_plane_update_noarm()
1603 icl_plane_csc_load_black(dsb, plane, crtc_state); in icl_plane_update_noarm()
1605 icl_plane_update_sel_fetch_noarm(dsb, plane, crtc_state, plane_state, color_plane); in icl_plane_update_noarm()
1609 struct intel_plane *plane, in icl_plane_update_sel_fetch_arm() argument
1613 struct intel_display *display = to_intel_display(plane); in icl_plane_update_sel_fetch_arm()
1614 enum pipe pipe = plane->pipe; 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()
1623 icl_plane_disable_sel_fetch_arm(dsb, plane, crtc_state); in icl_plane_update_sel_fetch_arm()
1628 struct intel_plane *plane, in icl_plane_update_arm() argument
1632 struct intel_display *display = to_intel_display(plane); in icl_plane_update_arm()
1633 enum plane_id plane_id = plane->id; in icl_plane_update_arm()
1634 enum pipe pipe = plane->pipe; in icl_plane_update_arm()
1642 * Enable the scaler before the plane so that we don't in icl_plane_update_arm()
1649 skl_program_plane_scaler(dsb, plane, crtc_state, plane_state); in icl_plane_update_arm()
1651 icl_plane_update_sel_fetch_arm(dsb, plane, crtc_state, plane_state); in icl_plane_update_arm()
1654 * The control register self-arms if the plane was previously in icl_plane_update_arm()
1655 * disabled. Try to make the plane enable atomic by writing in icl_plane_update_arm()
1665 struct intel_plane *plane, in skl_plane_capture_error() argument
1668 struct intel_display *display = to_intel_display(plane); in skl_plane_capture_error()
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()
1677 struct intel_plane *plane, in skl_plane_async_flip() argument
1682 struct intel_display *display = to_intel_display(plane); in skl_plane_async_flip()
1683 enum plane_id plane_id = plane->id; in skl_plane_async_flip()
1684 enum pipe pipe = plane->pipe; in skl_plane_async_flip()
1719 struct intel_plane *plane = to_intel_plane(plane_state->uapi.plane); in skl_plane_check_fb() local
1729 "[PLANE:%d:%s] RC support only with 0/180 degree rotation (%x)\n", in skl_plane_check_fb()
1730 plane->base.base.id, plane->base.name, rotation); in skl_plane_check_fb()
1737 "[PLANE:%d:%s] horizontal flip is not supported with linear surface formats\n", in skl_plane_check_fb()
1738 plane->base.base.id, plane->base.name); in skl_plane_check_fb()
1749 "[PLANE:%d:%s] horizontal flip is not supported with tile4 surface formats\n", in skl_plane_check_fb()
1750 plane->base.base.id, plane->base.name); in skl_plane_check_fb()
1757 "[PLANE:%d:%s] Y/Yf tiling required for 90/270!\n", in skl_plane_check_fb()
1758 plane->base.base.id, plane->base.name); in skl_plane_check_fb()
1782 "[PLANE:%d:%s] unsupported pixel format %p4cc for 90/270!\n", in skl_plane_check_fb()
1783 plane->base.base.id, plane->base.name, &fb->format->format); 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()
1806 "[PLANE:%d:%s] source color keying not supported with P01x formats\n", in skl_plane_check_fb()
1807 plane->base.base.id, plane->base.name); in skl_plane_check_fb()
1818 struct intel_plane *plane = to_intel_plane(plane_state->uapi.plane); in skl_plane_check_dst_coordinates() local
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()
1849 struct intel_plane *plane = to_intel_plane(plane_state->uapi.plane); in skl_plane_check_nv12_rotation() local
1860 "[PLANE:%d:%s] src width must be multiple of 4 for rotated planar YUV\n", in skl_plane_check_nv12_rotation()
1861 plane->base.base.id, plane->base.name); in skl_plane_check_nv12_rotation()
1884 static int intel_plane_min_width(struct intel_plane *plane, in intel_plane_min_width() argument
1889 if (plane->min_width) in intel_plane_min_width()
1890 return plane->min_width(fb, color_plane, rotation); in intel_plane_min_width()
1895 static int intel_plane_max_width(struct intel_plane *plane, in intel_plane_max_width() argument
1900 if (plane->max_width) in intel_plane_max_width()
1901 return plane->max_width(fb, color_plane, rotation); in intel_plane_max_width()
1906 static int intel_plane_max_height(struct intel_plane *plane, in intel_plane_max_height() argument
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() local
1927 unsigned int alignment = plane->min_alignment(plane, fb, ccs_plane); in skl_check_main_ccs_coordinates()
1967 struct intel_plane *plane = to_intel_plane(plane_state->uapi.plane); in skl_calc_main_surface_offset() local
1971 unsigned int alignment = plane->min_alignment(plane, fb, 0); in skl_calc_main_surface_offset()
1990 * When using an X-tiled surface, the plane blows up 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()
2018 struct intel_plane *plane = to_intel_plane(plane_state->uapi.plane); in skl_check_main_surface() local
2025 int min_width = intel_plane_min_width(plane, fb, 0, rotation); in skl_check_main_surface()
2026 int max_width = intel_plane_max_width(plane, fb, 0, rotation); in skl_check_main_surface()
2027 int max_height = intel_plane_max_height(plane, fb, 0, rotation); in skl_check_main_surface()
2028 unsigned int alignment = plane->min_alignment(plane, fb, 0); in skl_check_main_surface()
2035 "[PLANE:%d:%s] requested Y/RGB source size %dx%d outside limits (min: %dx1 max: %dx%d)\n", in skl_check_main_surface()
2036 plane->base.base.id, plane->base.name, in skl_check_main_surface()
2048 * there's no aux plane on fb so skip this checking. 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()
2091 struct intel_plane *plane = to_intel_plane(plane_state->uapi.plane); in skl_check_nv12_aux_surface() local
2097 int max_width = intel_plane_max_width(plane, fb, uv_plane, rotation); in skl_check_nv12_aux_surface()
2098 int max_height = intel_plane_max_height(plane, fb, uv_plane, rotation); in skl_check_nv12_aux_surface()
2105 /* FIXME not quite sure how/if these apply to the chroma plane */ in skl_check_nv12_aux_surface()
2108 "[PLANE:%d:%s] CbCr source size %dx%d too big (limit %dx%d)\n", in skl_check_nv12_aux_surface()
2109 plane->base.base.id, plane->base.name, in skl_check_nv12_aux_surface()
2120 unsigned int alignment = plane->min_alignment(plane, fb, uv_plane); 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()
2314 struct intel_plane *plane = to_intel_plane(plane_state->uapi.plane); in skl_plane_check() local
2360 /* HW only has 8 bits pixel precision, disable plane if invisible */ in skl_plane_check()
2373 icl_is_hdr_plane(display, plane->id)) in skl_plane_check()
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()
2505 struct intel_plane *plane = to_intel_plane(_plane); in skl_plane_format_mod_supported() local
2507 if (!intel_fb_plane_supports_modifier(plane, modifier)) in skl_plane_format_mod_supported()
2559 struct intel_plane *plane = to_intel_plane(_plane); in icl_plane_format_mod_supported() local
2561 if (!intel_fb_plane_supports_modifier(plane, modifier)) in icl_plane_format_mod_supported()
2613 struct intel_plane *plane = to_intel_plane(_plane); in tgl_plane_format_mod_supported() local
2615 if (!intel_fb_plane_supports_modifier(plane, modifier)) in tgl_plane_format_mod_supported()
2690 skl_plane_enable_flip_done(struct intel_plane *plane) in skl_plane_enable_flip_done() argument
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()
2696 bdw_enable_pipe_irq(i915, pipe, GEN9_PIPE_PLANE_FLIP_DONE(plane->id)); in skl_plane_enable_flip_done()
2701 skl_plane_disable_flip_done(struct intel_plane *plane) in skl_plane_disable_flip_done() argument
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()
2707 bdw_disable_pipe_irq(i915, pipe, GEN9_PIPE_PLANE_FLIP_DONE(plane->id)); in skl_plane_disable_flip_done()
2796 struct intel_plane *plane; in skl_universal_plane_create() local
2806 plane = intel_plane_alloc(); in skl_universal_plane_create()
2807 if (IS_ERR(plane)) in skl_universal_plane_create()
2808 return plane; in skl_universal_plane_create()
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()
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()
2821 plane->min_width = icl_plane_min_width; 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()
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()
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()
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()
2849 plane->vtd_guard = DISPLAY_VER(display) >= 10 ? 168 : 136; 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()
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()
2871 plane->can_async_flip = tgl_plane_can_async_flip; 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()
2917 ret = drm_universal_plane_init(display->drm, &plane->base, in skl_universal_plane_create()
2921 "plane %d%c", plane_id + 1, in skl_universal_plane_create()
2939 drm_plane_create_rotation_property(&plane->base, 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()
2964 drm_plane_enable_fb_damage_clips(&plane->base); in skl_universal_plane_create()
2967 drm_plane_create_scaling_filter_property(&plane->base, in skl_universal_plane_create()
2971 intel_plane_helper_add(plane); in skl_universal_plane_create()
2973 return plane; in skl_universal_plane_create()
2976 intel_plane_free(plane); in skl_universal_plane_create()
2987 struct intel_plane *plane = to_intel_plane(crtc->base.primary); in skl_get_initial_plane_config() local
2988 enum plane_id plane_id = plane->id; in skl_get_initial_plane_config()
2997 if (!plane->get_hw_state(plane, &pipe)) in skl_get_initial_plane_config()
3142 "[CRTC:%d:%s][PLANE:%d:%s] with fb: size=%dx%d@%d, offset=%x, pitch %d, size 0x%x\n", in skl_get_initial_plane_config()
3144 plane->base.base.id, plane->base.name, in skl_get_initial_plane_config()
3159 struct intel_plane *plane = to_intel_plane(crtc->base.primary); in skl_fixup_initial_plane_config() local
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()
3173 * part of ggtt, make the plane aware of that. in skl_fixup_initial_plane_config()