Lines Matching full:fb

666  * @fb: Framebuffer
670 * Returns %true if @fb's color plane at index @color_plane is a CCS AUX plane.
672 bool intel_fb_is_ccs_aux_plane(const struct drm_framebuffer *fb, int color_plane) in intel_fb_is_ccs_aux_plane() argument
674 const struct intel_modifier_desc *md = lookup_modifier(fb->modifier); in intel_fb_is_ccs_aux_plane()
676 return ccs_aux_plane_mask(md, fb->format) & BIT(color_plane); in intel_fb_is_ccs_aux_plane()
681 * @fb: Framebuffer
685 * Returns %true if @fb's color plane at index @color_plane is a GEN12 CCS AUX plane.
687 static bool intel_fb_is_gen12_ccs_aux_plane(const struct drm_framebuffer *fb, int color_plane) in intel_fb_is_gen12_ccs_aux_plane() argument
689 const struct intel_modifier_desc *md = lookup_modifier(fb->modifier); in intel_fb_is_gen12_ccs_aux_plane()
692 ccs_aux_plane_mask(md, fb->format) & BIT(color_plane); in intel_fb_is_gen12_ccs_aux_plane()
697 * @fb: Framebuffer
700 * Returns the index of the color clear plane for @fb, or -1 if @fb is not a
703 int intel_fb_rc_ccs_cc_plane(const struct drm_framebuffer *fb) in intel_fb_rc_ccs_cc_plane() argument
705 const struct intel_modifier_desc *md = lookup_modifier(fb->modifier); in intel_fb_rc_ccs_cc_plane()
710 drm_WARN_ON_ONCE(fb->dev, hweight8(md->ccs.cc_planes) > 1); in intel_fb_rc_ccs_cc_plane()
715 static bool is_gen12_ccs_cc_plane(const struct drm_framebuffer *fb, int color_plane) in is_gen12_ccs_cc_plane() argument
717 return intel_fb_rc_ccs_cc_plane(fb) == color_plane; in is_gen12_ccs_cc_plane()
720 bool is_surface_linear(const struct drm_framebuffer *fb, int color_plane) in is_surface_linear() argument
722 return fb->modifier == DRM_FORMAT_MOD_LINEAR || in is_surface_linear()
723 intel_fb_is_gen12_ccs_aux_plane(fb, color_plane) || in is_surface_linear()
724 is_gen12_ccs_cc_plane(fb, color_plane); in is_surface_linear()
727 int main_to_ccs_plane(const struct drm_framebuffer *fb, int main_plane) in main_to_ccs_plane() argument
729 drm_WARN_ON(fb->dev, !intel_fb_is_ccs_modifier(fb->modifier) || in main_to_ccs_plane()
730 (main_plane && main_plane >= fb->format->num_planes / 2)); in main_to_ccs_plane()
732 return fb->format->num_planes / 2 + main_plane; in main_to_ccs_plane()
735 int skl_ccs_to_main_plane(const struct drm_framebuffer *fb, int ccs_plane) in skl_ccs_to_main_plane() argument
737 drm_WARN_ON(fb->dev, !intel_fb_is_ccs_modifier(fb->modifier) || in skl_ccs_to_main_plane()
738 ccs_plane < fb->format->num_planes / 2); in skl_ccs_to_main_plane()
740 if (is_gen12_ccs_cc_plane(fb, ccs_plane)) in skl_ccs_to_main_plane()
743 return ccs_plane - fb->format->num_planes / 2; in skl_ccs_to_main_plane()
746 static unsigned int gen12_ccs_aux_stride(struct intel_framebuffer *fb, int ccs_plane) in gen12_ccs_aux_stride() argument
748 int main_plane = skl_ccs_to_main_plane(&fb->base, ccs_plane); in gen12_ccs_aux_stride()
749 unsigned int main_stride = fb->base.pitches[main_plane]; in gen12_ccs_aux_stride()
750 unsigned int main_tile_width = intel_tile_width_bytes(&fb->base, main_plane); in gen12_ccs_aux_stride()
755 int skl_main_to_aux_plane(const struct drm_framebuffer *fb, int main_plane) in skl_main_to_aux_plane() argument
757 const struct intel_modifier_desc *md = lookup_modifier(fb->modifier); in skl_main_to_aux_plane()
758 struct intel_display *display = to_intel_display(fb->dev); in skl_main_to_aux_plane()
761 return main_to_ccs_plane(fb, main_plane); in skl_main_to_aux_plane()
763 format_is_yuv_semiplanar(md, fb->format)) in skl_main_to_aux_plane()
775 intel_tile_width_bytes(const struct drm_framebuffer *fb, int color_plane) in intel_tile_width_bytes() argument
777 struct intel_display *display = to_intel_display(fb->dev); in intel_tile_width_bytes()
778 unsigned int cpp = fb->format->cpp[color_plane]; in intel_tile_width_bytes()
780 switch (fb->modifier) { in intel_tile_width_bytes()
800 if (intel_fb_is_ccs_aux_plane(fb, color_plane)) in intel_tile_width_bytes()
809 if (intel_fb_is_ccs_aux_plane(fb, color_plane) || in intel_tile_width_bytes()
810 is_gen12_ccs_cc_plane(fb, color_plane)) in intel_tile_width_bytes()
819 if (intel_fb_is_ccs_aux_plane(fb, color_plane)) in intel_tile_width_bytes()
838 MISSING_CASE(fb->modifier); in intel_tile_width_bytes()
843 unsigned int intel_tile_height(const struct drm_framebuffer *fb, int color_plane) in intel_tile_height() argument
845 struct intel_display *display = to_intel_display(fb->dev); in intel_tile_height()
848 intel_tile_width_bytes(fb, color_plane); in intel_tile_height()
855 static void intel_tile_dims(const struct drm_framebuffer *fb, int color_plane, in intel_tile_dims() argument
859 unsigned int tile_width_bytes = intel_tile_width_bytes(fb, color_plane); in intel_tile_dims()
860 unsigned int cpp = fb->format->cpp[color_plane]; in intel_tile_dims()
863 *tile_height = intel_tile_height(fb, color_plane); in intel_tile_dims()
871 static void intel_tile_block_dims(const struct drm_framebuffer *fb, int color_plane, in intel_tile_block_dims() argument
875 intel_tile_dims(fb, color_plane, tile_width, tile_height); in intel_tile_block_dims()
877 if (intel_fb_is_gen12_ccs_aux_plane(fb, color_plane)) in intel_tile_block_dims()
881 unsigned int intel_tile_row_size(const struct drm_framebuffer *fb, int color_plane) in intel_tile_row_size() argument
885 intel_tile_dims(fb, color_plane, &tile_width, &tile_height); in intel_tile_row_size()
887 return fb->pitches[color_plane] * tile_height; in intel_tile_row_size()
891 intel_fb_align_height(const struct drm_framebuffer *fb, in intel_fb_align_height() argument
894 unsigned int tile_height = intel_tile_height(fb, color_plane); in intel_fb_align_height()
904 bool intel_fb_uses_dpt(const struct drm_framebuffer *fb) in intel_fb_uses_dpt() argument
906 struct intel_display *display = to_intel_display(fb->dev); in intel_fb_uses_dpt()
909 intel_fb_modifier_uses_dpt(display, fb->modifier); in intel_fb_uses_dpt()
913 const struct drm_framebuffer *fb, in intel_fb_plane_get_subsampling() argument
929 if (!intel_fb_is_gen12_ccs_aux_plane(fb, color_plane)) { in intel_fb_plane_get_subsampling()
930 *hsub = fb->format->hsub; in intel_fb_plane_get_subsampling()
931 *vsub = fb->format->vsub; in intel_fb_plane_get_subsampling()
936 main_plane = skl_ccs_to_main_plane(fb, color_plane); in intel_fb_plane_get_subsampling()
937 *hsub = drm_format_info_block_width(fb->format, color_plane) / in intel_fb_plane_get_subsampling()
938 drm_format_info_block_width(fb->format, main_plane); in intel_fb_plane_get_subsampling()
949 *hsub *= fb->format->hsub; in intel_fb_plane_get_subsampling()
954 static void intel_fb_plane_dims(const struct intel_framebuffer *fb, int color_plane, int *w, int *h) in intel_fb_plane_dims() argument
956 int main_plane = intel_fb_is_ccs_aux_plane(&fb->base, color_plane) ? in intel_fb_plane_dims()
957 skl_ccs_to_main_plane(&fb->base, color_plane) : 0; in intel_fb_plane_dims()
958 unsigned int main_width = fb->base.width; in intel_fb_plane_dims()
959 unsigned int main_height = fb->base.height; in intel_fb_plane_dims()
963 intel_fb_plane_get_subsampling(&main_hsub, &main_vsub, &fb->base, main_plane); in intel_fb_plane_dims()
964 intel_fb_plane_get_subsampling(&hsub, &vsub, &fb->base, color_plane); in intel_fb_plane_dims()
1012 const struct drm_framebuffer *fb, in intel_adjust_aligned_offset() argument
1018 struct intel_display *display = to_intel_display(fb->dev); in intel_adjust_aligned_offset()
1019 unsigned int cpp = fb->format->cpp[color_plane]; in intel_adjust_aligned_offset()
1023 if (!is_surface_linear(fb, color_plane)) { in intel_adjust_aligned_offset()
1028 intel_tile_dims(fb, color_plane, &tile_width, &tile_height); in intel_adjust_aligned_offset()
1057 return intel_adjust_aligned_offset(x, y, plane_state->hw.fb, color_plane, in intel_plane_adjust_aligned_offset()
1079 const struct drm_framebuffer *fb, in intel_compute_aligned_offset() argument
1085 unsigned int cpp = fb->format->cpp[color_plane]; in intel_compute_aligned_offset()
1088 if (!is_surface_linear(fb, color_plane)) { in intel_compute_aligned_offset()
1093 intel_tile_dims(fb, color_plane, &tile_width, &tile_height); in intel_compute_aligned_offset()
1138 const struct drm_framebuffer *fb = plane_state->hw.fb; in intel_plane_compute_aligned_offset() local
1141 unsigned int alignment = plane->min_alignment(plane, fb, color_plane); in intel_plane_compute_aligned_offset()
1143 return intel_compute_aligned_offset(display, x, y, fb, color_plane, in intel_plane_compute_aligned_offset()
1147 /* Convert the fb->offset[] into x/y offsets */
1149 const struct drm_framebuffer *fb, in intel_fb_offset_to_xy() argument
1152 struct intel_display *display = to_intel_display(fb->dev); in intel_fb_offset_to_xy()
1155 if (fb->modifier != DRM_FORMAT_MOD_LINEAR) in intel_fb_offset_to_xy()
1160 if (alignment != 0 && fb->offsets[color_plane] % alignment) { in intel_fb_offset_to_xy()
1163 fb->offsets[color_plane], color_plane); in intel_fb_offset_to_xy()
1167 height = drm_format_info_plane_height(fb->format, fb->height, color_plane); in intel_fb_offset_to_xy()
1168 height = ALIGN(height, intel_tile_height(fb, color_plane)); in intel_fb_offset_to_xy()
1171 if (check_add_overflow(mul_u32_u32(height, fb->pitches[color_plane]), in intel_fb_offset_to_xy()
1172 fb->offsets[color_plane], &unused)) { in intel_fb_offset_to_xy()
1175 fb->offsets[color_plane], fb->pitches[color_plane], in intel_fb_offset_to_xy()
1184 fb, color_plane, DRM_MODE_ROTATE_0, in intel_fb_offset_to_xy()
1185 fb->pitches[color_plane], in intel_fb_offset_to_xy()
1186 fb->offsets[color_plane], 0); in intel_fb_offset_to_xy()
1191 static int intel_fb_check_ccs_xy(const struct drm_framebuffer *fb, int ccs_plane, int x, int y) in intel_fb_check_ccs_xy() argument
1193 struct intel_display *display = to_intel_display(fb->dev); in intel_fb_check_ccs_xy()
1194 const struct intel_framebuffer *intel_fb = to_intel_framebuffer(fb); in intel_fb_check_ccs_xy()
1201 if (!intel_fb_is_ccs_aux_plane(fb, ccs_plane)) in intel_fb_check_ccs_xy()
1209 intel_tile_block_dims(fb, ccs_plane, &tile_width, &tile_height); in intel_fb_check_ccs_xy()
1210 intel_fb_plane_get_subsampling(&hsub, &vsub, fb, ccs_plane); in intel_fb_check_ccs_xy()
1218 main_plane = skl_ccs_to_main_plane(fb, ccs_plane); in intel_fb_check_ccs_xy()
1243 const struct drm_framebuffer *fb = plane_state->hw.fb; in intel_plane_can_remap() local
1263 if (intel_fb_is_ccs_modifier(fb->modifier)) in intel_plane_can_remap()
1267 if (fb->modifier == DRM_FORMAT_MOD_LINEAR) { in intel_plane_can_remap()
1270 for (i = 0; i < fb->format->num_planes; i++) { in intel_plane_can_remap()
1271 if (fb->pitches[i] & alignment) in intel_plane_can_remap()
1279 bool intel_fb_needs_pot_stride_remap(const struct intel_framebuffer *fb) in intel_fb_needs_pot_stride_remap() argument
1281 struct intel_display *display = to_intel_display(fb->base.dev); in intel_fb_needs_pot_stride_remap()
1284 intel_fb_uses_dpt(&fb->base); in intel_fb_needs_pot_stride_remap()
1297 static int intel_fb_pitch(const struct intel_framebuffer *fb, int color_plane, unsigned int rotatio… in intel_fb_pitch() argument
1300 return fb->rotated_view.color_plane[color_plane].mapping_stride; in intel_fb_pitch()
1301 else if (intel_fb_needs_pot_stride_remap(fb)) in intel_fb_pitch()
1302 return fb->remapped_view.color_plane[color_plane].mapping_stride; in intel_fb_pitch()
1304 return fb->normal_view.color_plane[color_plane].mapping_stride; in intel_fb_pitch()
1310 const struct intel_framebuffer *fb = to_intel_framebuffer(plane_state->hw.fb); in intel_plane_needs_remap() local
1328 stride = intel_fb_pitch(fb, 0, rotation); in intel_plane_needs_remap()
1329 max_stride = plane->max_stride(plane, fb->base.format, in intel_plane_needs_remap()
1330 fb->base.modifier, rotation); in intel_plane_needs_remap()
1335 static int convert_plane_offset_to_xy(const struct intel_framebuffer *fb, int color_plane, in convert_plane_offset_to_xy() argument
1338 struct intel_display *display = to_intel_display(fb->base.dev); in convert_plane_offset_to_xy()
1339 struct drm_gem_object *obj = intel_fb_bo(&fb->base); in convert_plane_offset_to_xy()
1342 ret = intel_fb_offset_to_xy(x, y, &fb->base, color_plane); in convert_plane_offset_to_xy()
1345 "bad fb plane %d offset: 0x%x\n", in convert_plane_offset_to_xy()
1346 color_plane, fb->base.offsets[color_plane]); in convert_plane_offset_to_xy()
1350 ret = intel_fb_check_ccs_xy(&fb->base, color_plane, *x, *y); in convert_plane_offset_to_xy()
1360 * fb layout agrees with the fence layout. We already check that the in convert_plane_offset_to_xy()
1361 * fb stride matches the fence stride elsewhere. in convert_plane_offset_to_xy()
1364 (*x + plane_width) * fb->base.format->cpp[color_plane] > fb->base.pitches[color_plane]) { in convert_plane_offset_to_xy()
1366 "bad fb plane %d offset: 0x%x\n", in convert_plane_offset_to_xy()
1367 color_plane, fb->base.offsets[color_plane]); in convert_plane_offset_to_xy()
1374 static u32 calc_plane_aligned_offset(const struct intel_framebuffer *fb, int color_plane, int *x, i… in calc_plane_aligned_offset() argument
1376 struct intel_display *display = to_intel_display(fb->base.dev); in calc_plane_aligned_offset()
1380 offset = intel_compute_aligned_offset(display, x, y, &fb->base, color_plane, in calc_plane_aligned_offset()
1381 fb->base.pitches[color_plane], in calc_plane_aligned_offset()
1393 static void init_plane_view_dims(const struct intel_framebuffer *fb, int color_plane, in init_plane_view_dims() argument
1400 intel_tile_dims(&fb->base, color_plane, &dims->tile_width, &dims->tile_height); in init_plane_view_dims()
1404 plane_view_src_stride_tiles(const struct intel_framebuffer *fb, int color_plane, in plane_view_src_stride_tiles() argument
1407 return DIV_ROUND_UP(fb->base.pitches[color_plane], in plane_view_src_stride_tiles()
1408 dims->tile_width * fb->base.format->cpp[color_plane]); in plane_view_src_stride_tiles()
1412 plane_view_dst_stride_tiles(const struct intel_framebuffer *fb, int color_plane, in plane_view_dst_stride_tiles() argument
1415 if (intel_fb_needs_pot_stride_remap(fb)) { in plane_view_dst_stride_tiles()
1427 plane_view_scanout_stride(const struct intel_framebuffer *fb, int color_plane, in plane_view_scanout_stride() argument
1431 struct intel_display *display = to_intel_display(fb->base.dev); in plane_view_scanout_stride()
1440 return stride_tiles * tile_width * fb->base.format->cpp[color_plane]; in plane_view_scanout_stride()
1444 plane_view_width_tiles(const struct intel_framebuffer *fb, int color_plane, in plane_view_width_tiles() argument
1452 plane_view_height_tiles(const struct intel_framebuffer *fb, int color_plane, in plane_view_height_tiles() argument
1460 plane_view_linear_tiles(const struct intel_framebuffer *fb, int color_plane, in plane_view_linear_tiles() argument
1464 struct intel_display *display = to_intel_display(fb->base.dev); in plane_view_linear_tiles()
1467 size = (y + dims->height) * fb->base.pitches[color_plane] + in plane_view_linear_tiles()
1468 x * fb->base.format->cpp[color_plane]; in plane_view_linear_tiles()
1484 static u32 calc_plane_remap_info(const struct intel_framebuffer *fb, int color_plane, in calc_plane_remap_info() argument
1489 struct intel_display *display = to_intel_display(fb->base.dev); in calc_plane_remap_info()
1500 if (intel_fb_is_gen12_ccs_aux_plane(&fb->base, color_plane)) { in calc_plane_remap_info()
1504 plane_view_linear_tiles(fb, color_plane, dims, x, y)); in calc_plane_remap_info()
1509 plane_view_src_stride_tiles(fb, color_plane, dims)); in calc_plane_remap_info()
1511 plane_view_width_tiles(fb, color_plane, dims, x)); in calc_plane_remap_info()
1513 plane_view_height_tiles(fb, color_plane, dims, y)); in calc_plane_remap_info()
1521 plane_view_dst_stride_tiles(fb, color_plane, remap_info->height)); in calc_plane_remap_info()
1557 color_plane_info->mapping_stride = fb->base.pitches[color_plane]; in calc_plane_remap_info()
1569 if (intel_fb_needs_pot_stride_remap(fb) && in calc_plane_remap_info()
1570 intel_fb_is_ccs_modifier(fb->base.modifier)) in calc_plane_remap_info()
1575 dst_stride = plane_view_dst_stride_tiles(fb, color_plane, dst_stride); in calc_plane_remap_info()
1580 fb->base.format->cpp[color_plane]; in calc_plane_remap_info()
1582 plane_view_scanout_stride(fb, color_plane, tile_width, in calc_plane_remap_info()
1597 fb->base.format->cpp[color_plane], in calc_plane_remap_info()
1613 calc_plane_normal_size(const struct intel_framebuffer *fb, int color_plane, in calc_plane_normal_size() argument
1619 if (is_surface_linear(&fb->base, color_plane)) { in calc_plane_normal_size()
1620 tiles = plane_view_linear_tiles(fb, color_plane, dims, x, y); in calc_plane_normal_size()
1622 tiles = plane_view_src_stride_tiles(fb, color_plane, dims) * in calc_plane_normal_size()
1623 plane_view_height_tiles(fb, color_plane, dims, y); in calc_plane_normal_size()
1647 bool intel_fb_supports_90_270_rotation(const struct intel_framebuffer *fb) in intel_fb_supports_90_270_rotation() argument
1649 struct intel_display *display = to_intel_display(fb->base.dev); in intel_fb_supports_90_270_rotation()
1654 return fb->base.modifier == I915_FORMAT_MOD_Y_TILED || in intel_fb_supports_90_270_rotation()
1655 fb->base.modifier == I915_FORMAT_MOD_Yf_TILED; in intel_fb_supports_90_270_rotation()
1658 static unsigned int intel_fb_min_alignment(const struct drm_framebuffer *fb) in intel_fb_min_alignment() argument
1660 struct intel_display *display = to_intel_display(fb->dev); in intel_fb_min_alignment()
1667 if (!drm_plane_has_format(&plane->base, fb->format->format, fb->modifier)) in intel_fb_min_alignment()
1670 plane_min_alignment = plane->min_alignment(plane, fb, 0); in intel_fb_min_alignment()
1684 static unsigned int intel_fb_vtd_guard(const struct drm_framebuffer *fb) in intel_fb_vtd_guard() argument
1686 struct intel_display *display = to_intel_display(fb->dev); in intel_fb_vtd_guard()
1691 if (!drm_plane_has_format(&plane->base, fb->format->format, fb->modifier)) in intel_fb_vtd_guard()
1700 int intel_fill_fb_info(struct intel_display *display, struct intel_framebuffer *fb) in intel_fill_fb_info() argument
1702 struct drm_gem_object *obj = intel_fb_bo(&fb->base); in intel_fill_fb_info()
1706 int i, num_planes = fb->base.format->num_planes; in intel_fill_fb_info()
1709 intel_fb_view_init(display, &fb->normal_view, I915_GTT_VIEW_NORMAL); in intel_fill_fb_info()
1712 intel_fb_supports_90_270_rotation(fb) && in intel_fill_fb_info()
1713 intel_fb_needs_pot_stride_remap(fb)); in intel_fill_fb_info()
1715 if (intel_fb_supports_90_270_rotation(fb)) in intel_fill_fb_info()
1716 intel_fb_view_init(display, &fb->rotated_view, I915_GTT_VIEW_ROTATED); in intel_fill_fb_info()
1717 if (intel_fb_needs_pot_stride_remap(fb)) in intel_fill_fb_info()
1718 intel_fb_view_init(display, &fb->remapped_view, I915_GTT_VIEW_REMAPPED); in intel_fill_fb_info()
1729 * Plane 2 of Render Compression with Clear Color fb modifier in intel_fill_fb_info()
1733 if (is_gen12_ccs_cc_plane(&fb->base, i)) { in intel_fill_fb_info()
1736 if (!IS_ALIGNED(fb->base.offsets[i], 64)) { in intel_fill_fb_info()
1738 "fb misaligned clear color plane %d offset (0x%x)\n", in intel_fill_fb_info()
1739 i, fb->base.offsets[i]); in intel_fill_fb_info()
1743 if (check_add_overflow(fb->base.offsets[i], 64, &end)) { in intel_fill_fb_info()
1745 "fb bad clear color plane %d offset (0x%x)\n", in intel_fill_fb_info()
1746 i, fb->base.offsets[i]); in intel_fill_fb_info()
1754 intel_fb_plane_dims(fb, i, &width, &height); in intel_fill_fb_info()
1756 ret = convert_plane_offset_to_xy(fb, i, width, &x, &y); in intel_fill_fb_info()
1760 init_plane_view_dims(fb, i, width, height, &view_dims); in intel_fill_fb_info()
1766 fb->normal_view.color_plane[i].x = x; in intel_fill_fb_info()
1767 fb->normal_view.color_plane[i].y = y; in intel_fill_fb_info()
1768 fb->normal_view.color_plane[i].mapping_stride = fb->base.pitches[i]; in intel_fill_fb_info()
1769 fb->normal_view.color_plane[i].scanout_stride = in intel_fill_fb_info()
1770 fb->normal_view.color_plane[i].mapping_stride; in intel_fill_fb_info()
1772 offset = calc_plane_aligned_offset(fb, i, &x, &y); in intel_fill_fb_info()
1774 if (intel_fb_supports_90_270_rotation(fb)) in intel_fill_fb_info()
1775 gtt_offset_rotated += calc_plane_remap_info(fb, i, &view_dims, in intel_fill_fb_info()
1777 &fb->rotated_view); in intel_fill_fb_info()
1779 if (intel_fb_needs_pot_stride_remap(fb)) in intel_fill_fb_info()
1780 gtt_offset_remapped += calc_plane_remap_info(fb, i, &view_dims, in intel_fill_fb_info()
1782 &fb->remapped_view); in intel_fill_fb_info()
1784 size = calc_plane_normal_size(fb, i, &view_dims, x, y); in intel_fill_fb_info()
1791 "fb too big for bo (need %llu bytes, have %zu bytes)\n", in intel_fill_fb_info()
1796 fb->min_alignment = intel_fb_min_alignment(&fb->base); in intel_fill_fb_info()
1797 fb->vtd_guard = intel_fb_vtd_guard(&fb->base); in intel_fill_fb_info()
1802 unsigned int intel_fb_view_vtd_guard(const struct drm_framebuffer *fb, in intel_fb_view_vtd_guard() argument
1809 vtd_guard = to_intel_framebuffer(fb)->vtd_guard; in intel_fb_view_vtd_guard()
1813 for (color_plane = 0; color_plane < fb->format->num_planes; color_plane++) { in intel_fb_view_vtd_guard()
1816 if (intel_fb_is_ccs_aux_plane(fb, color_plane) || in intel_fb_view_vtd_guard()
1817 is_gen12_ccs_cc_plane(fb, color_plane)) in intel_fb_view_vtd_guard()
1823 tile = intel_tile_height(fb, color_plane); in intel_fb_view_vtd_guard()
1825 tile = intel_tile_width_bytes(fb, color_plane); in intel_fb_view_vtd_guard()
1836 struct drm_framebuffer *fb = plane_state->hw.fb; in intel_plane_remap_gtt() local
1837 struct intel_framebuffer *intel_fb = to_intel_framebuffer(fb); in intel_plane_remap_gtt()
1839 int i, num_planes = fb->format->num_planes; in intel_plane_remap_gtt()
1853 drm_WARN_ON(display->drm, intel_fb_is_ccs_modifier(fb->modifier)); in intel_plane_remap_gtt()
1866 unsigned int hsub = i ? fb->format->hsub : 1; in intel_plane_remap_gtt()
1867 unsigned int vsub = i ? fb->format->vsub : 1; in intel_plane_remap_gtt()
1931 void intel_fb_fill_view(const struct intel_framebuffer *fb, unsigned int rotation, in intel_fb_fill_view() argument
1935 *view = fb->rotated_view; in intel_fb_fill_view()
1936 else if (intel_fb_needs_pot_stride_remap(fb)) in intel_fb_fill_view()
1937 *view = fb->remapped_view; in intel_fb_fill_view()
1939 *view = fb->normal_view; in intel_fb_fill_view()
1952 const struct drm_framebuffer *fb = plane_state->hw.fb; in intel_fb_xy_to_linear() local
1953 unsigned int cpp = fb->format->cpp[color_plane]; in intel_fb_xy_to_linear()
1960 * Add the x/y offsets derived from fb->offsets[] to the user
1994 intel_fb_stride_alignment(const struct drm_framebuffer *fb, int color_plane) in intel_fb_stride_alignment() argument
1996 struct intel_display *display = to_intel_display(fb->dev); in intel_fb_stride_alignment()
1999 if (is_surface_linear(fb, color_plane)) { in intel_fb_stride_alignment()
2001 fb->format, in intel_fb_stride_alignment()
2002 fb->modifier); in intel_fb_stride_alignment()
2008 if (fb->pitches[color_plane] > max_stride && in intel_fb_stride_alignment()
2009 !intel_fb_is_ccs_modifier(fb->modifier)) in intel_fb_stride_alignment()
2015 tile_width = intel_tile_width_bytes(fb, color_plane); in intel_fb_stride_alignment()
2016 if (intel_fb_is_ccs_modifier(fb->modifier)) { in intel_fb_stride_alignment()
2029 * require the entire fb to accommodate that to avoid in intel_fb_stride_alignment()
2033 color_plane == 0 && fb->width > 3840) in intel_fb_stride_alignment()
2043 const struct drm_framebuffer *fb = plane_state->hw.fb; in intel_plane_check_stride() local
2059 max_stride = plane->max_stride(plane, fb->format, in intel_plane_check_stride()
2060 fb->modifier, rotation); in intel_plane_check_stride()
2064 "[FB:%d] stride (%d) exceeds [PLANE:%d:%s] max stride (%d)\n", in intel_plane_check_stride()
2065 fb->base.id, stride, in intel_plane_check_stride()
2075 const struct intel_framebuffer *fb = in intel_plane_compute_gtt() local
2076 to_intel_framebuffer(plane_state->hw.fb); in intel_plane_compute_gtt()
2079 if (!fb) in intel_plane_compute_gtt()
2094 intel_fb_fill_view(fb, rotation, &plane_state->view); in intel_plane_compute_gtt()
2099 fb->base.width << 16, fb->base.height << 16, in intel_plane_compute_gtt()
2105 static void intel_user_framebuffer_destroy(struct drm_framebuffer *fb) in intel_user_framebuffer_destroy() argument
2107 struct intel_framebuffer *intel_fb = to_intel_framebuffer(fb); in intel_user_framebuffer_destroy()
2109 drm_framebuffer_cleanup(fb); in intel_user_framebuffer_destroy()
2111 if (intel_fb_uses_dpt(fb)) in intel_user_framebuffer_destroy()
2114 intel_fb_bo_framebuffer_fini(intel_fb_bo(fb)); in intel_user_framebuffer_destroy()
2122 static int intel_user_framebuffer_create_handle(struct drm_framebuffer *fb, in intel_user_framebuffer_create_handle() argument
2126 struct drm_gem_object *obj = intel_fb_bo(fb); in intel_user_framebuffer_create_handle()
2153 static int intel_user_framebuffer_dirty(struct drm_framebuffer *fb, in intel_user_framebuffer_dirty() argument
2159 struct drm_gem_object *obj = intel_fb_bo(fb); in intel_user_framebuffer_dirty()
2160 struct intel_frontbuffer *front = to_intel_frontbuffer(fb); in intel_user_framebuffer_dirty()
2214 struct drm_framebuffer *fb = &intel_fb->base; in intel_framebuffer_init() local
2267 drm_helper_mode_fill_fb_struct(display->drm, fb, info, mode_cmd); in intel_framebuffer_init()
2269 for (i = 0; i < fb->format->num_planes; i++) { in intel_framebuffer_init()
2278 stride_alignment = intel_fb_stride_alignment(fb, i); in intel_framebuffer_init()
2279 if (fb->pitches[i] & (stride_alignment - 1)) { in intel_framebuffer_init()
2282 i, fb->pitches[i], stride_alignment); in intel_framebuffer_init()
2287 if (intel_fb_is_gen12_ccs_aux_plane(fb, i)) { in intel_framebuffer_init()
2290 if (fb->pitches[i] != ccs_aux_stride) { in intel_framebuffer_init()
2293 i, fb->pitches[i], ccs_aux_stride); in intel_framebuffer_init()
2299 fb->obj[i] = obj; in intel_framebuffer_init()
2306 if (intel_fb_uses_dpt(fb)) { in intel_framebuffer_init()
2319 ret = drm_framebuffer_init(display->drm, fb, &intel_fb_funcs); in intel_framebuffer_init()
2328 if (intel_fb_uses_dpt(fb)) in intel_framebuffer_init()
2346 struct drm_framebuffer *fb; in intel_user_framebuffer_create() local
2354 fb = intel_framebuffer_create(obj, info, &mode_cmd); in intel_user_framebuffer_create()
2357 return fb; in intel_user_framebuffer_create()
2394 struct drm_gem_object *intel_fb_bo(const struct drm_framebuffer *fb) in intel_fb_bo() argument
2396 return fb ? fb->obj[0] : NULL; in intel_fb_bo()