mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-13 06:26:38 +07:00
drm/i915: Add IVB DDB partitioning control
On IVB the display data buffer partitioning control lives in the DISP_ARB_CTL2 register. Add the relevant defines/code for it. Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Reviewed-by: Imre Deak <imre.deak@intel.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
This commit is contained in:
parent
243eaf381d
commit
ac9545fda6
@ -4148,6 +4148,8 @@
|
||||
#define DISP_ARB_CTL 0x45000
|
||||
#define DISP_TILE_SURFACE_SWIZZLING (1<<13)
|
||||
#define DISP_FBC_WM_DIS (1<<15)
|
||||
#define DISP_ARB_CTL2 0x45004
|
||||
#define DISP_DATA_PARTITION_5_6 (1<<6)
|
||||
#define GEN7_MSG_CTL 0x45010
|
||||
#define WAIT_FOR_PCH_RESET_ACK (1<<1)
|
||||
#define WAIT_FOR_PCH_FLR_ACK (1<<0)
|
||||
|
@ -2864,6 +2864,7 @@ static unsigned int ilk_compute_wm_dirty(struct drm_device *dev,
|
||||
static void hsw_write_wm_values(struct drm_i915_private *dev_priv,
|
||||
struct hsw_wm_values *results)
|
||||
{
|
||||
struct drm_device *dev = dev_priv->dev;
|
||||
struct hsw_wm_values *previous = &dev_priv->wm.hw;
|
||||
unsigned int dirty;
|
||||
uint32_t val;
|
||||
@ -2894,12 +2895,21 @@ static void hsw_write_wm_values(struct drm_i915_private *dev_priv,
|
||||
I915_WRITE(PIPE_WM_LINETIME(PIPE_C), results->wm_linetime[2]);
|
||||
|
||||
if (dirty & WM_DIRTY_DDB) {
|
||||
val = I915_READ(WM_MISC);
|
||||
if (results->partitioning == INTEL_DDB_PART_1_2)
|
||||
val &= ~WM_MISC_DATA_PARTITION_5_6;
|
||||
else
|
||||
val |= WM_MISC_DATA_PARTITION_5_6;
|
||||
I915_WRITE(WM_MISC, val);
|
||||
if (IS_HASWELL(dev)) {
|
||||
val = I915_READ(WM_MISC);
|
||||
if (results->partitioning == INTEL_DDB_PART_1_2)
|
||||
val &= ~WM_MISC_DATA_PARTITION_5_6;
|
||||
else
|
||||
val |= WM_MISC_DATA_PARTITION_5_6;
|
||||
I915_WRITE(WM_MISC, val);
|
||||
} else {
|
||||
val = I915_READ(DISP_ARB_CTL2);
|
||||
if (results->partitioning == INTEL_DDB_PART_1_2)
|
||||
val &= ~DISP_DATA_PARTITION_5_6;
|
||||
else
|
||||
val |= DISP_DATA_PARTITION_5_6;
|
||||
I915_WRITE(DISP_ARB_CTL2, val);
|
||||
}
|
||||
}
|
||||
|
||||
if (dirty & WM_DIRTY_FBC) {
|
||||
@ -3210,8 +3220,12 @@ void ilk_wm_get_hw_state(struct drm_device *dev)
|
||||
hw->wm_lp_spr[1] = I915_READ(WM2S_LP_IVB);
|
||||
hw->wm_lp_spr[2] = I915_READ(WM3S_LP_IVB);
|
||||
|
||||
hw->partitioning = (I915_READ(WM_MISC) & WM_MISC_DATA_PARTITION_5_6) ?
|
||||
INTEL_DDB_PART_5_6 : INTEL_DDB_PART_1_2;
|
||||
if (IS_HASWELL(dev))
|
||||
hw->partitioning = (I915_READ(WM_MISC) & WM_MISC_DATA_PARTITION_5_6) ?
|
||||
INTEL_DDB_PART_5_6 : INTEL_DDB_PART_1_2;
|
||||
else if (IS_IVYBRIDGE(dev))
|
||||
hw->partitioning = (I915_READ(DISP_ARB_CTL2) & DISP_DATA_PARTITION_5_6) ?
|
||||
INTEL_DDB_PART_5_6 : INTEL_DDB_PART_1_2;
|
||||
|
||||
hw->enable_fbc_wm =
|
||||
!(I915_READ(DISP_ARB_CTL) & DISP_FBC_WM_DIS);
|
||||
|
Loading…
Reference in New Issue
Block a user