Commit 9235c21c authored by Dave Airlie's avatar Dave Airlie
Browse files

Merge tag 'drm-intel-fixes-2023-05-11-1' of...

Merge tag 'drm-intel-fixes-2023-05-11-1' of git://anongit.freedesktop.org/drm/drm-intel

 into drm-fixes

- Fix to taint kernel when force_probe is used
- Null deref and div-by-zero fixes for display
- GuC error capture fix for Xe devices

Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
From: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/ZFzdYV3O8lvVJ1DQ@jlahtine-mobl.ger.corp.intel.com
parents dc49c3b1 79c901c9
Loading
Loading
Loading
Loading
+7 −5
Original line number Diff line number Diff line
@@ -62,10 +62,11 @@ config DRM_I915_FORCE_PROBE
	  This is the default value for the i915.force_probe module
	  parameter. Using the module parameter overrides this option.

	  Force probe the i915 for Intel graphics devices that are
	  recognized but not properly supported by this kernel version. It is
	  recommended to upgrade to a kernel version with proper support as soon
	  as it is available.
	  Force probe the i915 driver for Intel graphics devices that are
	  recognized but not properly supported by this kernel version. Force
	  probing an unsupported device taints the kernel. It is recommended to
	  upgrade to a kernel version with proper support as soon as it is
	  available.

	  It can also be used to block the probe of recognized and fully
	  supported devices.
@@ -75,7 +76,8 @@ config DRM_I915_FORCE_PROBE
	  Use "<pci-id>[,<pci-id>,...]" to force probe the i915 for listed
	  devices. For example, "4500" or "4500,4571".

	  Use "*" to force probe the driver for all known devices.
	  Use "*" to force probe the driver for all known devices. Not
	  recommended.

	  Use "!" right before the ID to block the probe of the device. For
	  example, "4500,!4571" forces the probe of 4500 and blocks the probe of
+2 −2
Original line number Diff line number Diff line
@@ -1028,7 +1028,7 @@ intel_prepare_plane_fb(struct drm_plane *_plane,
	int ret;

	if (old_obj) {
		const struct intel_crtc_state *crtc_state =
		const struct intel_crtc_state *new_crtc_state =
			intel_atomic_get_new_crtc_state(state,
							to_intel_crtc(old_plane_state->hw.crtc));

@@ -1043,7 +1043,7 @@ intel_prepare_plane_fb(struct drm_plane *_plane,
		 * This should only fail upon a hung GPU, in which case we
		 * can safely continue.
		 */
		if (intel_crtc_needs_modeset(crtc_state)) {
		if (new_crtc_state && intel_crtc_needs_modeset(new_crtc_state)) {
			ret = i915_sw_fence_await_reservation(&state->commit_ready,
							      old_obj->base.resv,
							      false, 0,
+5 −0
Original line number Diff line number Diff line
@@ -1601,6 +1601,11 @@ int intel_dp_dsc_compute_config(struct intel_dp *intel_dp,
		pipe_config->dsc.slice_count =
			drm_dp_dsc_sink_max_slice_count(intel_dp->dsc_dpcd,
							true);
		if (!pipe_config->dsc.slice_count) {
			drm_dbg_kms(&dev_priv->drm, "Unsupported Slice Count %d\n",
				    pipe_config->dsc.slice_count);
			return -EINVAL;
		}
	} else {
		u16 dsc_max_output_bpp = 0;
		u8 dsc_dp_slice_count;
+5 −2
Original line number Diff line number Diff line
@@ -31,12 +31,14 @@
	{ FORCEWAKE_MT,             0,      0, "FORCEWAKE" }

#define COMMON_GEN9BASE_GLOBAL \
	{ GEN8_FAULT_TLB_DATA0,     0,      0, "GEN8_FAULT_TLB_DATA0" }, \
	{ GEN8_FAULT_TLB_DATA1,     0,      0, "GEN8_FAULT_TLB_DATA1" }, \
	{ ERROR_GEN6,               0,      0, "ERROR_GEN6" }, \
	{ DONE_REG,                 0,      0, "DONE_REG" }, \
	{ HSW_GTT_CACHE_EN,         0,      0, "HSW_GTT_CACHE_EN" }

#define GEN9_GLOBAL \
	{ GEN8_FAULT_TLB_DATA0,     0,      0, "GEN8_FAULT_TLB_DATA0" }, \
	{ GEN8_FAULT_TLB_DATA1,     0,      0, "GEN8_FAULT_TLB_DATA1" }

#define COMMON_GEN12BASE_GLOBAL \
	{ GEN12_FAULT_TLB_DATA0,    0,      0, "GEN12_FAULT_TLB_DATA0" }, \
	{ GEN12_FAULT_TLB_DATA1,    0,      0, "GEN12_FAULT_TLB_DATA1" }, \
@@ -142,6 +144,7 @@ static const struct __guc_mmio_reg_descr xe_lpd_gsc_inst_regs[] = {
static const struct __guc_mmio_reg_descr default_global_regs[] = {
	COMMON_BASE_GLOBAL,
	COMMON_GEN9BASE_GLOBAL,
	GEN9_GLOBAL,
};

static const struct __guc_mmio_reg_descr default_rc_class_regs[] = {
+6 −0
Original line number Diff line number Diff line
@@ -1344,6 +1344,12 @@ static int i915_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
		return -ENODEV;
	}

	if (intel_info->require_force_probe) {
		dev_info(&pdev->dev, "Force probing unsupported Device ID %04x, tainting kernel\n",
			 pdev->device);
		add_taint(TAINT_USER, LOCKDEP_STILL_OK);
	}

	/* Only bind to function 0 of the device. Early generations
	 * used function 1 as a placeholder for multi-head. This causes
	 * us confusion instead, especially on the systems where both