Commit 64c3fd53 authored by Dave Airlie's avatar Dave Airlie
Browse files

Merge tag 'drm-intel-fixes-2020-03-05' of...

Merge tag 'drm-intel-fixes-2020-03-05' of git://anongit.freedesktop.org/drm/drm-intel

 into drm-fixes

drm/i915 fixes for v5.6-rc5:
- Break up long lists of object reclaim with cond_resched()
- PSR probe fix
- TGL workarounds
- Selftest return value fix
- Drop timeline mutex while waiting for retirement
- Wait for OA configuration completion before writes to OA buffer

Signed-off-by: default avatarDave Airlie <airlied@redhat.com>

From: Jani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/87eeu7nl6z.fsf@intel.com
parents 26398db1 169c0aa4
Loading
Loading
Loading
Loading
+24 −5
Original line number Diff line number Diff line
@@ -4466,13 +4466,19 @@ static void icl_dbuf_disable(struct drm_i915_private *dev_priv)

static void icl_mbus_init(struct drm_i915_private *dev_priv)
{
	u32 val;
	u32 mask, val;

	mask = MBUS_ABOX_BT_CREDIT_POOL1_MASK |
		MBUS_ABOX_BT_CREDIT_POOL2_MASK |
		MBUS_ABOX_B_CREDIT_MASK |
		MBUS_ABOX_BW_CREDIT_MASK;

	val = MBUS_ABOX_BT_CREDIT_POOL1(16) |
	val = I915_READ(MBUS_ABOX_CTL);
	val &= ~mask;
	val |= MBUS_ABOX_BT_CREDIT_POOL1(16) |
		MBUS_ABOX_BT_CREDIT_POOL2(16) |
		MBUS_ABOX_B_CREDIT(1) |
		MBUS_ABOX_BW_CREDIT(1);

	I915_WRITE(MBUS_ABOX_CTL, val);
}

@@ -4968,8 +4974,21 @@ static void tgl_bw_buddy_init(struct drm_i915_private *dev_priv)
		I915_WRITE(BW_BUDDY1_CTL, BW_BUDDY_DISABLE);
		I915_WRITE(BW_BUDDY2_CTL, BW_BUDDY_DISABLE);
	} else {
		u32 val;

		I915_WRITE(BW_BUDDY1_PAGE_MASK, table[i].page_mask);
		I915_WRITE(BW_BUDDY2_PAGE_MASK, table[i].page_mask);

		/* Wa_22010178259:tgl */
		val = I915_READ(BW_BUDDY1_CTL);
		val &= ~BW_BUDDY_TLB_REQ_TIMER_MASK;
		val |= REG_FIELD_PREP(BW_BUDDY_TLB_REQ_TIMER_MASK, 0x8);
		I915_WRITE(BW_BUDDY1_CTL, val);

		val = I915_READ(BW_BUDDY2_CTL);
		val &= ~BW_BUDDY_TLB_REQ_TIMER_MASK;
		val |= REG_FIELD_PREP(BW_BUDDY_TLB_REQ_TIMER_MASK, 0x8);
		I915_WRITE(BW_BUDDY2_CTL, val);
	}
}

+21 −4
Original line number Diff line number Diff line
@@ -852,10 +852,12 @@ void intel_psr_enable(struct intel_dp *intel_dp,
{
	struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);

	if (!crtc_state->has_psr)
	if (!CAN_PSR(dev_priv) || dev_priv->psr.dp != intel_dp)
		return;

	if (WARN_ON(!CAN_PSR(dev_priv)))
	dev_priv->psr.force_mode_changed = false;

	if (!crtc_state->has_psr)
		return;

	WARN_ON(dev_priv->drrs.dp);
@@ -1009,6 +1011,8 @@ void intel_psr_update(struct intel_dp *intel_dp,
	if (!CAN_PSR(dev_priv) || READ_ONCE(psr->dp) != intel_dp)
		return;

	dev_priv->psr.force_mode_changed = false;

	mutex_lock(&dev_priv->psr.lock);

	enable = crtc_state->has_psr && psr_global_enabled(psr->debug);
@@ -1534,7 +1538,7 @@ void intel_psr_atomic_check(struct drm_connector *connector,
	struct drm_crtc_state *crtc_state;

	if (!CAN_PSR(dev_priv) || !new_state->crtc ||
	    dev_priv->psr.initially_probed)
	    !dev_priv->psr.force_mode_changed)
		return;

	intel_connector = to_intel_connector(connector);
@@ -1545,5 +1549,18 @@ void intel_psr_atomic_check(struct drm_connector *connector,
	crtc_state = drm_atomic_get_new_crtc_state(new_state->state,
						   new_state->crtc);
	crtc_state->mode_changed = true;
	dev_priv->psr.initially_probed = true;
}

void intel_psr_set_force_mode_changed(struct intel_dp *intel_dp)
{
	struct drm_i915_private *dev_priv;

	if (!intel_dp)
		return;

	dev_priv = dp_to_i915(intel_dp);
	if (!CAN_PSR(dev_priv) || intel_dp != dev_priv->psr.dp)
		return;

	dev_priv->psr.force_mode_changed = true;
}
+1 −0
Original line number Diff line number Diff line
@@ -40,5 +40,6 @@ bool intel_psr_enabled(struct intel_dp *intel_dp);
void intel_psr_atomic_check(struct drm_connector *connector,
			    struct drm_connector_state *old_state,
			    struct drm_connector_state *new_state);
void intel_psr_set_force_mode_changed(struct intel_dp *intel_dp);

#endif /* __INTEL_PSR_H__ */
+1 −0
Original line number Diff line number Diff line
@@ -225,6 +225,7 @@ static void __i915_gem_free_objects(struct drm_i915_private *i915,

		/* But keep the pointer alive for RCU-protected lookups */
		call_rcu(&obj->rcu, __i915_gem_free_object_rcu);
		cond_resched();
	}
	intel_runtime_pm_put(&i915->runtime_pm, wakeref);
}
+1 −1
Original line number Diff line number Diff line
@@ -570,7 +570,7 @@ static bool assert_mmap_offset(struct drm_i915_private *i915,

	obj = i915_gem_object_create_internal(i915, size);
	if (IS_ERR(obj))
		return PTR_ERR(obj);
		return false;

	mmo = mmap_offset_attach(obj, I915_MMAP_OFFSET_GTT, NULL);
	i915_gem_object_put(obj);
Loading