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

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
...@@ -62,10 +62,11 @@ config DRM_I915_FORCE_PROBE ...@@ -62,10 +62,11 @@ config DRM_I915_FORCE_PROBE
This is the default value for the i915.force_probe module This is the default value for the i915.force_probe module
parameter. Using the module parameter overrides this option. parameter. Using the module parameter overrides this option.
Force probe the i915 for Intel graphics devices that are Force probe the i915 driver for Intel graphics devices that are
recognized but not properly supported by this kernel version. It is recognized but not properly supported by this kernel version. Force
recommended to upgrade to a kernel version with proper support as soon probing an unsupported device taints the kernel. It is recommended to
as it is available. 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 It can also be used to block the probe of recognized and fully
supported devices. supported devices.
...@@ -75,7 +76,8 @@ config DRM_I915_FORCE_PROBE ...@@ -75,7 +76,8 @@ config DRM_I915_FORCE_PROBE
Use "<pci-id>[,<pci-id>,...]" to force probe the i915 for listed Use "<pci-id>[,<pci-id>,...]" to force probe the i915 for listed
devices. For example, "4500" or "4500,4571". 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 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 example, "4500,!4571" forces the probe of 4500 and blocks the probe of
......
...@@ -1028,7 +1028,7 @@ intel_prepare_plane_fb(struct drm_plane *_plane, ...@@ -1028,7 +1028,7 @@ intel_prepare_plane_fb(struct drm_plane *_plane,
int ret; int ret;
if (old_obj) { 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, intel_atomic_get_new_crtc_state(state,
to_intel_crtc(old_plane_state->hw.crtc)); to_intel_crtc(old_plane_state->hw.crtc));
...@@ -1043,7 +1043,7 @@ intel_prepare_plane_fb(struct drm_plane *_plane, ...@@ -1043,7 +1043,7 @@ intel_prepare_plane_fb(struct drm_plane *_plane,
* This should only fail upon a hung GPU, in which case we * This should only fail upon a hung GPU, in which case we
* can safely continue. * 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, ret = i915_sw_fence_await_reservation(&state->commit_ready,
old_obj->base.resv, old_obj->base.resv,
false, 0, false, 0,
......
...@@ -1601,6 +1601,11 @@ int intel_dp_dsc_compute_config(struct intel_dp *intel_dp, ...@@ -1601,6 +1601,11 @@ int intel_dp_dsc_compute_config(struct intel_dp *intel_dp,
pipe_config->dsc.slice_count = pipe_config->dsc.slice_count =
drm_dp_dsc_sink_max_slice_count(intel_dp->dsc_dpcd, drm_dp_dsc_sink_max_slice_count(intel_dp->dsc_dpcd,
true); 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 { } else {
u16 dsc_max_output_bpp = 0; u16 dsc_max_output_bpp = 0;
u8 dsc_dp_slice_count; u8 dsc_dp_slice_count;
......
...@@ -31,12 +31,14 @@ ...@@ -31,12 +31,14 @@
{ FORCEWAKE_MT, 0, 0, "FORCEWAKE" } { FORCEWAKE_MT, 0, 0, "FORCEWAKE" }
#define COMMON_GEN9BASE_GLOBAL \ #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" }, \ { ERROR_GEN6, 0, 0, "ERROR_GEN6" }, \
{ DONE_REG, 0, 0, "DONE_REG" }, \ { DONE_REG, 0, 0, "DONE_REG" }, \
{ HSW_GTT_CACHE_EN, 0, 0, "HSW_GTT_CACHE_EN" } { 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 \ #define COMMON_GEN12BASE_GLOBAL \
{ GEN12_FAULT_TLB_DATA0, 0, 0, "GEN12_FAULT_TLB_DATA0" }, \ { GEN12_FAULT_TLB_DATA0, 0, 0, "GEN12_FAULT_TLB_DATA0" }, \
{ GEN12_FAULT_TLB_DATA1, 0, 0, "GEN12_FAULT_TLB_DATA1" }, \ { 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[] = { ...@@ -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[] = { static const struct __guc_mmio_reg_descr default_global_regs[] = {
COMMON_BASE_GLOBAL, COMMON_BASE_GLOBAL,
COMMON_GEN9BASE_GLOBAL, COMMON_GEN9BASE_GLOBAL,
GEN9_GLOBAL,
}; };
static const struct __guc_mmio_reg_descr default_rc_class_regs[] = { static const struct __guc_mmio_reg_descr default_rc_class_regs[] = {
......
...@@ -1344,6 +1344,12 @@ static int i915_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent) ...@@ -1344,6 +1344,12 @@ static int i915_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
return -ENODEV; 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 /* Only bind to function 0 of the device. Early generations
* used function 1 as a placeholder for multi-head. This causes * used function 1 as a placeholder for multi-head. This causes
* us confusion instead, especially on the systems where both * us confusion instead, especially on the systems where both
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment