xref: /openbmc/linux/drivers/gpu/drm/i915/display/skl_watermark.h (revision 1ac731c529cd4d6adbce134754b51ff7d822b145)
142a0d256SVille Syrjälä /* SPDX-License-Identifier: MIT */
242a0d256SVille Syrjälä /*
342a0d256SVille Syrjälä  * Copyright © 2022 Intel Corporation
442a0d256SVille Syrjälä  */
542a0d256SVille Syrjälä 
642a0d256SVille Syrjälä #ifndef __SKL_WATERMARK_H__
742a0d256SVille Syrjälä #define __SKL_WATERMARK_H__
842a0d256SVille Syrjälä 
942a0d256SVille Syrjälä #include <linux/types.h>
1042a0d256SVille Syrjälä 
11acc855d3SJani Nikula #include "intel_display_limits.h"
1242a0d256SVille Syrjälä #include "intel_global_state.h"
13*4923e99fSJani Nikula #include "intel_wm_types.h"
1442a0d256SVille Syrjälä 
1542a0d256SVille Syrjälä struct drm_i915_private;
1642a0d256SVille Syrjälä struct intel_atomic_state;
1742a0d256SVille Syrjälä struct intel_bw_state;
1842a0d256SVille Syrjälä struct intel_crtc;
1942a0d256SVille Syrjälä struct intel_crtc_state;
2042a0d256SVille Syrjälä struct intel_plane;
2142a0d256SVille Syrjälä 
2242a0d256SVille Syrjälä u8 intel_enabled_dbuf_slices_mask(struct drm_i915_private *i915);
2342a0d256SVille Syrjälä 
2442a0d256SVille Syrjälä void intel_sagv_pre_plane_update(struct intel_atomic_state *state);
2542a0d256SVille Syrjälä void intel_sagv_post_plane_update(struct intel_atomic_state *state);
2642a0d256SVille Syrjälä bool intel_can_enable_sagv(struct drm_i915_private *i915,
2742a0d256SVille Syrjälä 			   const struct intel_bw_state *bw_state);
2842a0d256SVille Syrjälä 
2942a0d256SVille Syrjälä u32 skl_ddb_dbuf_slice_mask(struct drm_i915_private *i915,
3042a0d256SVille Syrjälä 			    const struct skl_ddb_entry *entry);
3142a0d256SVille Syrjälä 
3242a0d256SVille Syrjälä void skl_write_plane_wm(struct intel_plane *plane,
3342a0d256SVille Syrjälä 			const struct intel_crtc_state *crtc_state);
3442a0d256SVille Syrjälä void skl_write_cursor_wm(struct intel_plane *plane,
3542a0d256SVille Syrjälä 			 const struct intel_crtc_state *crtc_state);
3642a0d256SVille Syrjälä 
3742a0d256SVille Syrjälä bool skl_ddb_allocation_overlaps(const struct skl_ddb_entry *ddb,
3842a0d256SVille Syrjälä 				 const struct skl_ddb_entry *entries,
3942a0d256SVille Syrjälä 				 int num_entries, int ignore_idx);
4042a0d256SVille Syrjälä 
4142a0d256SVille Syrjälä void intel_wm_state_verify(struct intel_crtc *crtc,
4242a0d256SVille Syrjälä 			   struct intel_crtc_state *new_crtc_state);
4342a0d256SVille Syrjälä 
4423fbdb07SJani Nikula void skl_watermark_ipc_init(struct drm_i915_private *i915);
4523fbdb07SJani Nikula void skl_watermark_ipc_update(struct drm_i915_private *i915);
4623fbdb07SJani Nikula bool skl_watermark_ipc_enabled(struct drm_i915_private *i915);
4714f25bd0SVille Syrjälä void skl_watermark_debugfs_register(struct drm_i915_private *i915);
4842a0d256SVille Syrjälä 
4942a0d256SVille Syrjälä void skl_wm_init(struct drm_i915_private *i915);
5042a0d256SVille Syrjälä 
5142a0d256SVille Syrjälä struct intel_dbuf_state {
5242a0d256SVille Syrjälä 	struct intel_global_state base;
5342a0d256SVille Syrjälä 
5442a0d256SVille Syrjälä 	struct skl_ddb_entry ddb[I915_MAX_PIPES];
5542a0d256SVille Syrjälä 	unsigned int weight[I915_MAX_PIPES];
5642a0d256SVille Syrjälä 	u8 slices[I915_MAX_PIPES];
5742a0d256SVille Syrjälä 	u8 enabled_slices;
5842a0d256SVille Syrjälä 	u8 active_pipes;
5942a0d256SVille Syrjälä 	bool joined_mbus;
6042a0d256SVille Syrjälä };
6142a0d256SVille Syrjälä 
6242a0d256SVille Syrjälä struct intel_dbuf_state *
6342a0d256SVille Syrjälä intel_atomic_get_dbuf_state(struct intel_atomic_state *state);
6442a0d256SVille Syrjälä 
6542a0d256SVille Syrjälä #define to_intel_dbuf_state(x) container_of((x), struct intel_dbuf_state, base)
6642a0d256SVille Syrjälä #define intel_atomic_get_old_dbuf_state(state) \
6742a0d256SVille Syrjälä 	to_intel_dbuf_state(intel_atomic_get_old_global_obj_state(state, &to_i915(state->base.dev)->display.dbuf.obj))
6842a0d256SVille Syrjälä #define intel_atomic_get_new_dbuf_state(state) \
6942a0d256SVille Syrjälä 	to_intel_dbuf_state(intel_atomic_get_new_global_obj_state(state, &to_i915(state->base.dev)->display.dbuf.obj))
7042a0d256SVille Syrjälä 
7142a0d256SVille Syrjälä int intel_dbuf_init(struct drm_i915_private *i915);
7242a0d256SVille Syrjälä void intel_dbuf_pre_plane_update(struct intel_atomic_state *state);
7342a0d256SVille Syrjälä void intel_dbuf_post_plane_update(struct intel_atomic_state *state);
7442a0d256SVille Syrjälä void intel_mbus_dbox_update(struct intel_atomic_state *state);
7542a0d256SVille Syrjälä 
7642a0d256SVille Syrjälä #endif /* __SKL_WATERMARK_H__ */
7742a0d256SVille Syrjälä 
78