Lines Matching full:i915

35  * i915 is responsible to reserve stolen memory for FBC and configure its
88 struct drm_i915_private *i915; member
149 struct drm_i915_private *i915 = to_i915(plane_state->uapi.plane->dev); in skl_fbc_min_cfb_stride() local
163 if (DISPLAY_VER(i915) >= 11) in skl_fbc_min_cfb_stride()
179 struct drm_i915_private *i915 = to_i915(plane_state->uapi.plane->dev); in intel_fbc_cfb_stride() local
187 if (DISPLAY_VER(i915) >= 9) in intel_fbc_cfb_stride()
195 struct drm_i915_private *i915 = to_i915(plane_state->uapi.plane->dev); in intel_fbc_cfb_size() local
198 if (DISPLAY_VER(i915) == 7) in intel_fbc_cfb_size()
200 else if (DISPLAY_VER(i915) >= 8) in intel_fbc_cfb_size()
208 struct drm_i915_private *i915 = to_i915(plane_state->uapi.plane->dev); in intel_fbc_override_cfb_stride() local
221 (DISPLAY_VER(i915) == 9 && fb->modifier == DRM_FORMAT_MOD_LINEAR)) in intel_fbc_override_cfb_stride()
230 struct drm_i915_private *i915 = fbc->i915; in i8xx_fbc_ctl() local
237 if (DISPLAY_VER(i915) == 2) in i8xx_fbc_ctl()
246 if (IS_I945GM(i915)) in i8xx_fbc_ctl()
271 struct drm_i915_private *i915 = fbc->i915; in i8xx_fbc_deactivate() local
275 fbc_ctl = intel_de_read(i915, FBC_CONTROL); in i8xx_fbc_deactivate()
280 intel_de_write(i915, FBC_CONTROL, fbc_ctl); in i8xx_fbc_deactivate()
283 if (intel_de_wait_for_clear(i915, FBC_STATUS, in i8xx_fbc_deactivate()
285 drm_dbg_kms(&i915->drm, "FBC idle timed out\n"); in i8xx_fbc_deactivate()
293 struct drm_i915_private *i915 = fbc->i915; in i8xx_fbc_activate() local
298 intel_de_write(i915, FBC_TAG(i), 0); in i8xx_fbc_activate()
300 if (DISPLAY_VER(i915) == 4) { in i8xx_fbc_activate()
301 intel_de_write(i915, FBC_CONTROL2, in i8xx_fbc_activate()
303 intel_de_write(i915, FBC_FENCE_OFF, in i8xx_fbc_activate()
307 intel_de_write(i915, FBC_CONTROL, in i8xx_fbc_activate()
313 return intel_de_read(fbc->i915, FBC_CONTROL) & FBC_CTL_EN; in i8xx_fbc_is_active()
318 return intel_de_read(fbc->i915, FBC_STATUS) & in i8xx_fbc_is_compressing()
326 struct drm_i915_private *dev_priv = fbc->i915; in i8xx_fbc_nuke()
334 struct drm_i915_private *i915 = fbc->i915; in i8xx_fbc_program_cfb() local
336 drm_WARN_ON(&i915->drm, in i8xx_fbc_program_cfb()
337 range_overflows_end_t(u64, i915_gem_stolen_area_address(i915), in i8xx_fbc_program_cfb()
340 drm_WARN_ON(&i915->drm, in i8xx_fbc_program_cfb()
341 range_overflows_end_t(u64, i915_gem_stolen_area_address(i915), in i8xx_fbc_program_cfb()
344 intel_de_write(i915, FBC_CFB_BASE, in i8xx_fbc_program_cfb()
345 i915_gem_stolen_node_address(i915, &fbc->compressed_fb)); in i8xx_fbc_program_cfb()
346 intel_de_write(i915, FBC_LL_BASE, in i8xx_fbc_program_cfb()
347 i915_gem_stolen_node_address(i915, &fbc->compressed_llb)); in i8xx_fbc_program_cfb()
363 struct drm_i915_private *dev_priv = fbc->i915; in i965_fbc_nuke()
396 struct drm_i915_private *i915 = fbc->i915; in g4x_dpfc_ctl() local
402 if (IS_G4X(i915)) in g4x_dpfc_ctl()
408 if (DISPLAY_VER(i915) < 6) in g4x_dpfc_ctl()
418 struct drm_i915_private *i915 = fbc->i915; in g4x_fbc_activate() local
420 intel_de_write(i915, DPFC_FENCE_YOFF, in g4x_fbc_activate()
423 intel_de_write(i915, DPFC_CONTROL, in g4x_fbc_activate()
429 struct drm_i915_private *i915 = fbc->i915; in g4x_fbc_deactivate() local
433 dpfc_ctl = intel_de_read(i915, DPFC_CONTROL); in g4x_fbc_deactivate()
436 intel_de_write(i915, DPFC_CONTROL, dpfc_ctl); in g4x_fbc_deactivate()
442 return intel_de_read(fbc->i915, DPFC_CONTROL) & DPFC_CTL_EN; in g4x_fbc_is_active()
447 return intel_de_read(fbc->i915, DPFC_STATUS) & DPFC_COMP_SEG_MASK; in g4x_fbc_is_compressing()
452 struct drm_i915_private *i915 = fbc->i915; in g4x_fbc_program_cfb() local
454 intel_de_write(i915, DPFC_CB_BASE, in g4x_fbc_program_cfb()
470 struct drm_i915_private *i915 = fbc->i915; in ilk_fbc_activate() local
472 intel_de_write(i915, ILK_DPFC_FENCE_YOFF(fbc->id), in ilk_fbc_activate()
475 intel_de_write(i915, ILK_DPFC_CONTROL(fbc->id), in ilk_fbc_activate()
481 struct drm_i915_private *i915 = fbc->i915; in ilk_fbc_deactivate() local
485 dpfc_ctl = intel_de_read(i915, ILK_DPFC_CONTROL(fbc->id)); in ilk_fbc_deactivate()
488 intel_de_write(i915, ILK_DPFC_CONTROL(fbc->id), dpfc_ctl); in ilk_fbc_deactivate()
494 return intel_de_read(fbc->i915, ILK_DPFC_CONTROL(fbc->id)) & DPFC_CTL_EN; in ilk_fbc_is_active()
499 return intel_de_read(fbc->i915, ILK_DPFC_STATUS(fbc->id)) & DPFC_COMP_SEG_MASK; in ilk_fbc_is_compressing()
504 struct drm_i915_private *i915 = fbc->i915; in ilk_fbc_program_cfb() local
506 intel_de_write(i915, ILK_DPFC_CB_BASE(fbc->id), in ilk_fbc_program_cfb()
522 struct drm_i915_private *i915 = fbc->i915; in snb_fbc_program_fence() local
528 intel_de_write(i915, SNB_DPFC_CTL_SA, ctl); in snb_fbc_program_fence()
529 intel_de_write(i915, SNB_DPFC_CPU_FENCE_OFFSET, fbc_state->fence_y_offset); in snb_fbc_program_fence()
541 struct drm_i915_private *i915 = fbc->i915; in snb_fbc_nuke() local
543 intel_de_write(i915, MSG_FBC_REND_STATE(fbc->id), FBC_REND_NUKE); in snb_fbc_nuke()
544 intel_de_posting_read(i915, MSG_FBC_REND_STATE(fbc->id)); in snb_fbc_nuke()
559 struct drm_i915_private *i915 = fbc->i915; in glk_fbc_program_cfb_stride() local
566 intel_de_write(i915, GLK_FBC_STRIDE(fbc->id), val); in glk_fbc_program_cfb_stride()
572 struct drm_i915_private *i915 = fbc->i915; in skl_fbc_program_cfb_stride() local
580 intel_de_rmw(i915, CHICKEN_MISC_4, in skl_fbc_program_cfb_stride()
588 struct drm_i915_private *i915 = fbc->i915; in ivb_dpfc_ctl() local
593 if (IS_IVYBRIDGE(i915)) in ivb_dpfc_ctl()
596 if (DISPLAY_VER(i915) >= 20) in ivb_dpfc_ctl()
610 struct drm_i915_private *i915 = fbc->i915; in ivb_fbc_activate() local
613 if (DISPLAY_VER(i915) >= 10) in ivb_fbc_activate()
615 else if (DISPLAY_VER(i915) == 9) in ivb_fbc_activate()
618 if (intel_gt_support_legacy_fencing(to_gt(i915))) in ivb_fbc_activate()
623 if (DISPLAY_VER(i915) >= 20) in ivb_fbc_activate()
624 intel_de_write(i915, ILK_DPFC_CONTROL(fbc->id), dpfc_ctl); in ivb_fbc_activate()
626 intel_de_write(i915, ILK_DPFC_CONTROL(fbc->id), in ivb_fbc_activate()
632 return intel_de_read(fbc->i915, ILK_DPFC_STATUS2(fbc->id)) & DPFC_COMP_SEG_MASK_IVB; in ivb_fbc_is_compressing()
638 intel_de_rmw(fbc->i915, ILK_DPFC_CONTROL(fbc->id), in ivb_fbc_set_false_color()
683 struct drm_i915_private *i915 = fbc->i915; in intel_fbc_nuke() local
686 drm_WARN_ON(&i915->drm, fbc->flip_pending); in intel_fbc_nuke()
713 static u64 intel_fbc_cfb_base_max(struct drm_i915_private *i915) in intel_fbc_cfb_base_max() argument
715 if (DISPLAY_VER(i915) >= 5 || IS_G4X(i915)) in intel_fbc_cfb_base_max()
721 static u64 intel_fbc_stolen_end(struct drm_i915_private *i915) in intel_fbc_stolen_end() argument
729 if (IS_BROADWELL(i915) || in intel_fbc_stolen_end()
730 (DISPLAY_VER(i915) == 9 && !IS_BROXTON(i915))) in intel_fbc_stolen_end()
731 end = i915_gem_stolen_area_size(i915) - 8 * 1024 * 1024; in intel_fbc_stolen_end()
735 return min(end, intel_fbc_cfb_base_max(i915)); in intel_fbc_stolen_end()
743 static int intel_fbc_max_limit(struct drm_i915_private *i915) in intel_fbc_max_limit() argument
746 if (IS_G4X(i915)) in intel_fbc_max_limit()
759 struct drm_i915_private *i915 = fbc->i915; in find_compression_limit() local
760 u64 end = intel_fbc_stolen_end(i915); in find_compression_limit()
766 ret = i915_gem_stolen_insert_node_in_range(i915, &fbc->compressed_fb, in find_compression_limit()
771 for (; limit <= intel_fbc_max_limit(i915); limit <<= 1) { in find_compression_limit()
772 ret = i915_gem_stolen_insert_node_in_range(i915, &fbc->compressed_fb, in find_compression_limit()
784 struct drm_i915_private *i915 = fbc->i915; in intel_fbc_alloc_cfb() local
787 drm_WARN_ON(&i915->drm, in intel_fbc_alloc_cfb()
789 drm_WARN_ON(&i915->drm, in intel_fbc_alloc_cfb()
792 if (DISPLAY_VER(i915) < 5 && !IS_G4X(i915)) { in intel_fbc_alloc_cfb()
793 ret = i915_gem_stolen_insert_node(i915, &fbc->compressed_llb, in intel_fbc_alloc_cfb()
803 drm_info_once(&i915->drm, in intel_fbc_alloc_cfb()
808 drm_dbg_kms(&i915->drm, in intel_fbc_alloc_cfb()
815 i915_gem_stolen_remove_node(i915, &fbc->compressed_llb); in intel_fbc_alloc_cfb()
817 if (i915_gem_stolen_initialized(i915)) in intel_fbc_alloc_cfb()
818 …drm_info_once(&i915->drm, "not enough stolen space for compressed buffer (need %d more bytes), dis… in intel_fbc_alloc_cfb()
830 if (DISPLAY_VER(fbc->i915) >= 11 && !IS_DG2(fbc->i915)) in intel_fbc_program_workarounds()
831 intel_de_rmw(fbc->i915, ILK_DPFC_CHICKEN(fbc->id), 0, in intel_fbc_program_workarounds()
837 struct drm_i915_private *i915 = fbc->i915; in __intel_fbc_cleanup_cfb() local
843 i915_gem_stolen_remove_node(i915, &fbc->compressed_llb); in __intel_fbc_cleanup_cfb()
845 i915_gem_stolen_remove_node(i915, &fbc->compressed_fb); in __intel_fbc_cleanup_cfb()
848 void intel_fbc_cleanup(struct drm_i915_private *i915) in intel_fbc_cleanup() argument
853 for_each_intel_fbc(i915, fbc, fbc_id) { in intel_fbc_cleanup()
905 struct drm_i915_private *i915 = to_i915(plane_state->uapi.plane->dev); in stride_is_valid() local
907 if (DISPLAY_VER(i915) >= 11) in stride_is_valid()
909 else if (DISPLAY_VER(i915) >= 9) in stride_is_valid()
911 else if (DISPLAY_VER(i915) >= 5 || IS_G4X(i915)) in stride_is_valid()
913 else if (DISPLAY_VER(i915) == 4) in stride_is_valid()
921 struct drm_i915_private *i915 = to_i915(plane_state->uapi.plane->dev); in i8xx_fbc_pixel_format_is_valid() local
931 if (DISPLAY_VER(i915) == 2) in i8xx_fbc_pixel_format_is_valid()
941 struct drm_i915_private *i915 = to_i915(plane_state->uapi.plane->dev); in g4x_fbc_pixel_format_is_valid() local
950 if (IS_G4X(i915)) in g4x_fbc_pixel_format_is_valid()
976 struct drm_i915_private *i915 = to_i915(plane_state->uapi.plane->dev); in pixel_format_is_valid() local
978 if (DISPLAY_VER(i915) >= 20) in pixel_format_is_valid()
980 else if (DISPLAY_VER(i915) >= 5 || IS_G4X(i915)) in pixel_format_is_valid()
1010 struct drm_i915_private *i915 = to_i915(plane_state->uapi.plane->dev); in rotation_is_valid() local
1012 if (DISPLAY_VER(i915) >= 9) in rotation_is_valid()
1014 else if (DISPLAY_VER(i915) >= 5 || IS_G4X(i915)) in rotation_is_valid()
1028 struct drm_i915_private *i915 = to_i915(plane_state->uapi.plane->dev); in intel_fbc_hw_tracking_covers_screen() local
1031 if (DISPLAY_VER(i915) >= 11) { in intel_fbc_hw_tracking_covers_screen()
1034 } else if (DISPLAY_VER(i915) >= 10) { in intel_fbc_hw_tracking_covers_screen()
1037 } else if (DISPLAY_VER(i915) >= 7) { in intel_fbc_hw_tracking_covers_screen()
1040 } else if (IS_G4X(i915) || DISPLAY_VER(i915) >= 5) { in intel_fbc_hw_tracking_covers_screen()
1058 struct drm_i915_private *i915 = to_i915(plane_state->uapi.plane->dev); in intel_fbc_plane_size_valid() local
1061 if (DISPLAY_VER(i915) >= 10) { in intel_fbc_plane_size_valid()
1064 } else if (DISPLAY_VER(i915) >= 8 || IS_HASWELL(i915)) { in intel_fbc_plane_size_valid()
1067 } else if (IS_G4X(i915) || DISPLAY_VER(i915) >= 5) { in intel_fbc_plane_size_valid()
1106 struct drm_i915_private *i915 = to_i915(plane_state->uapi.plane->dev); in tiling_is_valid() local
1108 if (DISPLAY_VER(i915) >= 9) in tiling_is_valid()
1118 struct drm_i915_private *i915 = to_i915(state->base.dev); in intel_fbc_update_state() local
1136 drm_WARN_ON(&i915->drm, plane_state->flags & PLANE_HAS_FENCE && in intel_fbc_update_state()
1137 !intel_gt_support_legacy_fencing(to_gt(i915))); in intel_fbc_update_state()
1151 struct drm_i915_private *i915 = to_i915(plane_state->uapi.plane->dev); in intel_fbc_is_fence_ok() local
1165 return DISPLAY_VER(i915) >= 9 || in intel_fbc_is_fence_ok()
1190 struct drm_i915_private *i915 = to_i915(state->base.dev); in intel_fbc_check_plane() local
1201 if (!i915_gem_stolen_initialized(i915)) { in intel_fbc_check_plane()
1206 if (intel_vgpu_active(i915)) { in intel_fbc_check_plane()
1211 if (!i915->display.params.enable_fbc) { in intel_fbc_check_plane()
1238 if (IS_DISPLAY_VER(i915, 12, 14) && crtc_state->has_psr2) { in intel_fbc_check_plane()
1244 if ((IS_DISPLAY_VER(i915, 12, 13) || in intel_fbc_check_plane()
1245 IS_DISPLAY_IP_STEP(i915, IP_VER(14, 0), STEP_A0, STEP_C0)) && in intel_fbc_check_plane()
1271 if (DISPLAY_VER(i915) < 20 && in intel_fbc_check_plane()
1293 if (DISPLAY_VER(i915) >= 9 && in intel_fbc_check_plane()
1300 if (DISPLAY_VER(i915) >= 11 && in intel_fbc_check_plane()
1308 if (IS_HASWELL(i915) || IS_BROADWELL(i915)) { in intel_fbc_check_plane()
1376 struct drm_i915_private *i915 = to_i915(state->base.dev); in __intel_fbc_pre_update() local
1402 if (fbc->activated && DISPLAY_VER(i915) >= 10) in __intel_fbc_pre_update()
1436 struct drm_i915_private *i915 = fbc->i915; in __intel_fbc_disable() local
1440 drm_WARN_ON(&i915->drm, fbc->active); in __intel_fbc_disable()
1442 drm_dbg_kms(&i915->drm, "Disabling FBC on [PLANE:%d:%s]\n", in __intel_fbc_disable()
1512 void intel_fbc_invalidate(struct drm_i915_private *i915, in intel_fbc_invalidate() argument
1519 for_each_intel_fbc(i915, fbc, fbc_id) in intel_fbc_invalidate()
1551 void intel_fbc_flush(struct drm_i915_private *i915, in intel_fbc_flush() argument
1558 for_each_intel_fbc(i915, fbc, fbc_id) in intel_fbc_flush()
1583 struct drm_i915_private *i915 = to_i915(state->base.dev); in __intel_fbc_enable() local
1602 drm_WARN_ON(&i915->drm, fbc->active); in __intel_fbc_enable()
1624 drm_dbg_kms(&i915->drm, "Enabling FBC on [PLANE:%d:%s]\n", in __intel_fbc_enable()
1642 struct drm_i915_private *i915 = to_i915(crtc->base.dev); in intel_fbc_disable() local
1645 for_each_intel_plane(&i915->drm, plane) { in intel_fbc_disable()
1690 struct drm_i915_private *i915 = fbc->i915; in intel_fbc_underrun_work_fn() local
1698 drm_dbg_kms(&i915->drm, "Disabling FBC due to FIFO underrun.\n"); in intel_fbc_underrun_work_fn()
1703 intel_crtc_wait_for_next_vblank(intel_crtc_for_pipe(i915, fbc->state.plane->pipe)); in intel_fbc_underrun_work_fn()
1711 struct drm_i915_private *i915 = fbc->i915; in __intel_fbc_reset_underrun() local
1718 drm_dbg_kms(&i915->drm, in __intel_fbc_reset_underrun()
1729 * @i915: the i915 device
1734 void intel_fbc_reset_underrun(struct drm_i915_private *i915) in intel_fbc_reset_underrun() argument
1739 for_each_intel_fbc(i915, fbc, fbc_id) in intel_fbc_reset_underrun()
1756 queue_work(fbc->i915->unordered_wq, &fbc->underrun_work); in __intel_fbc_handle_fifo_underrun_irq()
1761 * @i915: i915 device
1773 void intel_fbc_handle_fifo_underrun_irq(struct drm_i915_private *i915) in intel_fbc_handle_fifo_underrun_irq() argument
1778 for_each_intel_fbc(i915, fbc, fbc_id) in intel_fbc_handle_fifo_underrun_irq()
1784 * i915.enable_fbc, so sanitize it by translating the default value into either
1789 * relies on being able to change i915.enable_fbc at runtime.
1791 static int intel_sanitize_fbc_option(struct drm_i915_private *i915) in intel_sanitize_fbc_option() argument
1793 if (i915->display.params.enable_fbc >= 0) in intel_sanitize_fbc_option()
1794 return !!i915->display.params.enable_fbc; in intel_sanitize_fbc_option()
1796 if (!HAS_FBC(i915)) in intel_sanitize_fbc_option()
1799 if (IS_BROADWELL(i915) || DISPLAY_VER(i915) >= 9) in intel_sanitize_fbc_option()
1805 static bool need_fbc_vtd_wa(struct drm_i915_private *i915) in need_fbc_vtd_wa() argument
1808 if (i915_vtd_active(i915) && in need_fbc_vtd_wa()
1809 (IS_SKYLAKE(i915) || IS_BROXTON(i915))) { in need_fbc_vtd_wa()
1810 drm_info(&i915->drm, in need_fbc_vtd_wa()
1823 static struct intel_fbc *intel_fbc_create(struct drm_i915_private *i915, in intel_fbc_create() argument
1833 fbc->i915 = i915; in intel_fbc_create()
1837 if (DISPLAY_VER(i915) >= 7) in intel_fbc_create()
1839 else if (DISPLAY_VER(i915) == 6) in intel_fbc_create()
1841 else if (DISPLAY_VER(i915) == 5) in intel_fbc_create()
1843 else if (IS_G4X(i915)) in intel_fbc_create()
1845 else if (DISPLAY_VER(i915) == 4) in intel_fbc_create()
1855 * @i915: the i915 device
1859 void intel_fbc_init(struct drm_i915_private *i915) in intel_fbc_init() argument
1863 if (need_fbc_vtd_wa(i915)) in intel_fbc_init()
1864 DISPLAY_RUNTIME_INFO(i915)->fbc_mask = 0; in intel_fbc_init()
1866 i915->display.params.enable_fbc = intel_sanitize_fbc_option(i915); in intel_fbc_init()
1867 drm_dbg_kms(&i915->drm, "Sanitized enable_fbc value: %d\n", in intel_fbc_init()
1868 i915->display.params.enable_fbc); in intel_fbc_init()
1870 for_each_fbc_id(i915, fbc_id) in intel_fbc_init()
1871 i915->display.fbc[fbc_id] = intel_fbc_create(i915, fbc_id); in intel_fbc_init()
1876 * @i915: the i915 device
1882 void intel_fbc_sanitize(struct drm_i915_private *i915) in intel_fbc_sanitize() argument
1887 for_each_intel_fbc(i915, fbc, fbc_id) { in intel_fbc_sanitize()
1896 struct drm_i915_private *i915 = fbc->i915; in intel_fbc_debugfs_status_show() local
1900 drm_modeset_lock_all(&i915->drm); in intel_fbc_debugfs_status_show()
1902 wakeref = intel_runtime_pm_get(&i915->runtime_pm); in intel_fbc_debugfs_status_show()
1913 for_each_intel_plane(&i915->drm, plane) { in intel_fbc_debugfs_status_show()
1927 intel_runtime_pm_put(&i915->runtime_pm, wakeref); in intel_fbc_debugfs_status_show()
1929 drm_modeset_unlock_all(&i915->drm); in intel_fbc_debugfs_status_show()
1986 void intel_fbc_debugfs_register(struct drm_i915_private *i915) in intel_fbc_debugfs_register() argument
1988 struct drm_minor *minor = i915->drm.primary; in intel_fbc_debugfs_register()
1991 fbc = i915->display.fbc[INTEL_FBC_A]; in intel_fbc_debugfs_register()