void gen9_dbuf_slices_update(struct drm_i915_private *dev_priv,
u8 req_slices)
{
- int num_slices = INTEL_INFO(dev_priv)->dbuf.num_slices;
+ int num_slices = intel_dbuf_num_slices(dev_priv);
struct i915_power_domains *power_domains = &dev_priv->power_domains;
enum dbuf_slice slice;
static void gen12_dbuf_slices_config(struct drm_i915_private *dev_priv)
{
- int num_slices = INTEL_INFO(dev_priv)->dbuf.num_slices;
+ int num_slices = intel_dbuf_num_slices(dev_priv);
enum dbuf_slice slice;
for (slice = DBUF_S1; slice < (DBUF_S1 + num_slices); slice++)
.display.has_hdcp = 1, \
.display.has_ipc = 1, \
.dbuf.size = 896 - 4, /* 4 blocks for bypass path allocation */ \
- .dbuf.num_slices = 1
+ .dbuf.slice_mask = BIT(DBUF_S1)
#define SKL_PLATFORM \
GEN9_FEATURES, \
#define GEN9_LP_FEATURES \
GEN(9), \
.is_lp = 1, \
- .dbuf.num_slices = 1, \
+ .dbuf.slice_mask = BIT(DBUF_S1), \
.display.has_hotplug = 1, \
.platform_engine_mask = BIT(RCS0) | BIT(VCS0) | BIT(BCS0) | BIT(VECS0), \
.pipe_mask = BIT(PIPE_A) | BIT(PIPE_B) | BIT(PIPE_C), \
}, \
GEN(11), \
.dbuf.size = 2048, \
- .dbuf.num_slices = 2, \
+ .dbuf.slice_mask = BIT(DBUF_S1) | BIT(DBUF_S2), \
.has_logical_ring_elsq = 1, \
.color = { .degamma_lut_size = 33, .gamma_lut_size = 262145 }
struct {
u16 size; /* in blocks */
- u8 num_slices;
+ u8 slice_mask;
} dbuf;
/* Register offsets for the various display pipes and transcoders */
u8 intel_enabled_dbuf_slices_mask(struct drm_i915_private *dev_priv)
{
int i;
- int num_slices = INTEL_INFO(dev_priv)->dbuf.num_slices;
+ int num_slices = intel_dbuf_num_slices(dev_priv);
u8 enabled_slices_mask = 0;
for (i = 0; i < num_slices; i++) {
return INTEL_INFO(dev_priv)->dbuf.size;
}
+int intel_dbuf_num_slices(struct drm_i915_private *dev_priv)
+{
+ return hweight8(INTEL_INFO(dev_priv)->dbuf.slice_mask);
+}
+
static int intel_dbuf_slice_size(struct drm_i915_private *dev_priv)
{
return intel_dbuf_size(dev_priv) /
- INTEL_INFO(dev_priv)->dbuf.num_slices;
+ intel_dbuf_num_slices(dev_priv);
}
static void
{
u32 slice_mask = 0;
u16 ddb_size = intel_dbuf_size(dev_priv);
- int num_slices = INTEL_INFO(dev_priv)->dbuf.num_slices;
+ int num_slices = intel_dbuf_num_slices(dev_priv);
u16 slice_size = ddb_size / num_slices;
u16 start_slice;
u16 end_slice;
"Enabled dbuf slices 0x%x -> 0x%x (out of %d dbuf slices)\n",
old_dbuf_state->enabled_slices,
new_dbuf_state->enabled_slices,
- INTEL_INFO(dev_priv)->dbuf.num_slices);
+ intel_dbuf_num_slices(dev_priv));
}
for_each_new_intel_crtc_in_state(state, crtc, new_crtc_state, i) {
void ilk_wm_get_hw_state(struct drm_i915_private *dev_priv);
void skl_wm_get_hw_state(struct drm_i915_private *dev_priv);
u8 intel_enabled_dbuf_slices_mask(struct drm_i915_private *dev_priv);
+int intel_dbuf_num_slices(struct drm_i915_private *dev_priv);
void skl_pipe_ddb_get_hw_state(struct intel_crtc *crtc,
struct skl_ddb_entry *ddb_y,
struct skl_ddb_entry *ddb_uv);