linux/drivers/gpu/drm/i915
Jani Nikula 423ffe62c0 drm/i915: fix display probe for IVB Q and IVB D GT2 server
The current display probe is unable to differentiate between IVB Q and
IVB D GT2 server, as they both have the same device id, but different
subvendor and subdevice. This leads to the latter being misidentified as
the former, and should just end up not having a display. However, the no
display case returns a NULL as the display device info, and promptly
oopses.

As the IVB Q case is rare, and we're anyway moving towards GMD ID,
handle the identification requiring subvendor and subdevice as a special
case first, instead of unnecessarily growing the intel_display_ids[]
array with subvendor and subdevice.

[    5.425298] BUG: kernel NULL pointer dereference, address: 0000000000000000
[    5.426059] #PF: supervisor read access in kernel mode
[    5.426810] #PF: error_code(0x0000) - not-present page
[    5.427570] PGD 0 P4D 0
[    5.428285] Oops: 0000 [#1] PREEMPT SMP PTI
[    5.429035] CPU: 0 PID: 137 Comm: (udev-worker) Not tainted 6.4.0-1-amd64 #1  Debian 6.4.4-1
[    5.429759] Hardware name: HP HP Z220 SFF Workstation/HP Z220 SFF Workstation, BIOS 4.19-218-gb184e6e0a1 02/02/2023
[    5.430485] RIP: 0010:intel_device_info_driver_create+0xf1/0x120 [i915]
[    5.431338] Code: 48 8b 97 80 1b 00 00 89 8f c0 1b 00 00 48 89 b7 b0 1b 00 00 48 89 97 b8 1b 00 00 0f b7 fd e8 76 e8 14 00 48 89 83 50 1b 00 00 <48> 8b 08 48 89 8b c4 1b 00 00 48 8b 48 08 48 89 8b cc 1b 00 00 8b
[    5.432920] RSP: 0018:ffffb8254044fb98 EFLAGS: 00010206
[    5.433707] RAX: 0000000000000000 RBX: ffff923076e80000 RCX: 0000000000000000
[    5.434494] RDX: 0000000000000260 RSI: 0000000100001000 RDI: 000000000000016a
[    5.435277] RBP: 000000000000016a R08: ffffb8254044fb00 R09: 0000000000000000
[    5.436055] R10: ffff922d02761de8 R11: 00657361656c6572 R12: ffffffffc0e5d140
[    5.436867] R13: ffff922d00b720d0 R14: 0000000076e80000 R15: ffff923078c0cae8
[    5.437646] FS:  00007febd19a18c0(0000) GS:ffff92307c000000(0000) knlGS:0000000000000000
[    5.438434] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[    5.439218] CR2: 0000000000000000 CR3: 000000010256e002 CR4: 00000000001706f0
[    5.440009] Call Trace:
[    5.440824]  <TASK>
[    5.441611]  ? __die+0x23/0x70
[    5.442394]  ? page_fault_oops+0x17d/0x4c0
[    5.443173]  ? exc_page_fault+0x7f/0x180
[    5.443949]  ? asm_exc_page_fault+0x26/0x30
[    5.444756]  ? intel_device_info_driver_create+0xf1/0x120 [i915]
[    5.445652]  ? intel_device_info_driver_create+0xea/0x120 [i915]
[    5.446545]  i915_driver_probe+0x7f/0xb60 [i915]
[    5.447431]  ? drm_privacy_screen_get+0x15c/0x1a0 [drm]
[    5.448240]  local_pci_probe+0x45/0xa0
[    5.449013]  pci_device_probe+0xc7/0x240
[    5.449748]  really_probe+0x19e/0x3e0
[    5.450464]  ? __pfx___driver_attach+0x10/0x10
[    5.451172]  __driver_probe_device+0x78/0x160
[    5.451870]  driver_probe_device+0x1f/0x90
[    5.452601]  __driver_attach+0xd2/0x1c0
[    5.453293]  bus_for_each_dev+0x88/0xd0
[    5.453989]  bus_add_driver+0x116/0x220
[    5.454672]  driver_register+0x59/0x100
[    5.455336]  i915_init+0x25/0xc0 [i915]
[    5.456104]  ? __pfx_i915_init+0x10/0x10 [i915]
[    5.456882]  do_one_initcall+0x5d/0x240
[    5.457511]  do_init_module+0x60/0x250
[    5.458126]  __do_sys_finit_module+0xac/0x120
[    5.458721]  do_syscall_64+0x60/0xc0
[    5.459314]  ? syscall_exit_to_user_mode+0x1b/0x40
[    5.459897]  ? do_syscall_64+0x6c/0xc0
[    5.460510]  entry_SYSCALL_64_after_hwframe+0x72/0xdc
[    5.461082] RIP: 0033:0x7febd20b0eb9
[    5.461648] Code: 08 89 e8 5b 5d c3 66 2e 0f 1f 84 00 00 00 00 00 90 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 8b 0d 2f 1f 0d 00 f7 d8 64 89 01 48
[    5.462905] RSP: 002b:00007fffabb1ba78 EFLAGS: 00000246 ORIG_RAX: 0000000000000139
[    5.463554] RAX: ffffffffffffffda RBX: 0000561e6304f410 RCX: 00007febd20b0eb9
[    5.464201] RDX: 0000000000000000 RSI: 00007febd2244f0d RDI: 0000000000000015
[    5.464869] RBP: 00007febd2244f0d R08: 0000000000000000 R09: 000000000000000a
[    5.465512] R10: 0000000000000015 R11: 0000000000000246 R12: 0000000000020000
[    5.466124] R13: 0000000000000000 R14: 0000561e63032b60 R15: 000000000000000a
[    5.466700]  </TASK>
[    5.467271] Modules linked in: i915(+) drm_buddy video crc32_pclmul sr_mod hid_generic wmi crc32c_intel i2c_algo_bit sd_mod cdrom drm_display_helper cec usbhid rc_core ghash_clmulni_intel hid sha512_ssse3 ttm sha512_generic xhci_pci ehci_pci xhci_hcd ehci_hcd nvme ahci drm_kms_helper nvme_core libahci t10_pi libata psmouse aesni_intel scsi_mod crypto_simd i2c_i801 scsi_common crc64_rocksoft_generic cryptd i2c_smbus drm lpc_ich crc64_rocksoft crc_t10dif e1000e usbcore crct10dif_generic usb_common crct10dif_pclmul crc64 crct10dif_common button
[    5.469750] CR2: 0000000000000000
[    5.470364] ---[ end trace 0000000000000000 ]---
[    5.470971] RIP: 0010:intel_device_info_driver_create+0xf1/0x120 [i915]
[    5.471699] Code: 48 8b 97 80 1b 00 00 89 8f c0 1b 00 00 48 89 b7 b0 1b 00 00 48 89 97 b8 1b 00 00 0f b7 fd e8 76 e8 14 00 48 89 83 50 1b 00 00 <48> 8b 08 48 89 8b c4 1b 00 00 48 8b 48 08 48 89 8b cc 1b 00 00 8b
[    5.473034] RSP: 0018:ffffb8254044fb98 EFLAGS: 00010206
[    5.473698] RAX: 0000000000000000 RBX: ffff923076e80000 RCX: 0000000000000000
[    5.474371] RDX: 0000000000000260 RSI: 0000000100001000 RDI: 000000000000016a
[    5.475045] RBP: 000000000000016a R08: ffffb8254044fb00 R09: 0000000000000000
[    5.475725] R10: ffff922d02761de8 R11: 00657361656c6572 R12: ffffffffc0e5d140
[    5.476405] R13: ffff922d00b720d0 R14: 0000000076e80000 R15: ffff923078c0cae8
[    5.477124] FS:  00007febd19a18c0(0000) GS:ffff92307c000000(0000) knlGS:0000000000000000
[    5.477811] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[    5.478499] CR2: 0000000000000000 CR3: 000000010256e002 CR4: 00000000001706f0

Fixes: 69d439818f ("drm/i915/display: Make display responsible for probing its own IP")
Closes: https://gitlab.freedesktop.org/drm/intel/-/issues/8991
Cc: Matt Roper <matthew.d.roper@intel.com>
Cc: Andrzej Hajda <andrzej.hajda@intel.com>
Reviewed-by: Luca Coelho <luciano.coelho@intel.com>
Reviewed-by: Matt Roper <matthew.d.roper@intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20230804084600.1005818-1-jani.nikula@intel.com
(cherry picked from commit 1435188307)
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
2023-08-14 11:59:30 -04:00
..
display drm/i915: fix display probe for IVB Q and IVB D GT2 server 2023-08-14 11:59:30 -04:00
gem drm/i915: Fix an error handling path in igt_write_huge() 2023-07-25 08:38:12 +01:00
gt drm/i915/guc/slpc: Restore efficient freq earlier 2023-08-14 11:59:22 -04:00
gvt drm/i915/gvt: Fix bug in getting msg length in AUX CH registers handler 2023-08-01 11:21:09 +08:00
pxp drm/i915/mtl/huc: auth HuC via GSC 2023-06-05 09:53:51 -07:00
selftests drm/i915: use mock device info for creating mock device 2023-07-04 10:40:29 +01:00
soc drm/i915: move memory frequency detection to intel_dram.c 2023-02-15 12:00:50 +02:00
.gitignore
Kconfig drm/i915: Implement dedicated fbdev I/O helpers 2023-06-01 12:41:40 +02:00
Kconfig.debug drm/i915/guc: Track all sent actions to GuC 2023-05-30 15:18:21 -07:00
Kconfig.profile drm/i915: Improve long running compute w/a for GuC submission 2022-10-24 12:12:47 -07:00
Makefile Revert "drm/i915: use localized __diag_ignore_all() instead of per file" 2023-07-17 13:39:04 +01:00
TODO.txt drm/i915/tasklet: separate local hacks around struct tasklet_struct 2022-06-07 21:47:19 +03:00
i915_active.c drm/i915: Fix premature release of request's reusable memory 2023-08-01 10:56:34 +01:00
i915_active.h drm/i915/active: fix kernel-doc for function parameters 2023-05-04 12:11:56 +03:00
i915_active_types.h drm/i915/active: remove useless i915_utils.h include 2021-12-13 12:04:44 +02:00
i915_cmd_parser.c drm/i915: Wrap all access to i915_vma.node.start|size 2022-12-06 10:52:42 +01:00
i915_cmd_parser.h drm/i915: split out i915_cmd_parser.h from i915_drv.h 2022-01-10 15:43:09 +02:00
i915_config.c drm/i915: add i915_config.h and move relevant declarations there 2023-01-20 10:13:50 +02:00
i915_config.h drm/i915: add i915_config.h and move relevant declarations there 2023-01-20 10:13:50 +02:00
i915_debugfs.c Merge drm/drm-next into drm-intel-next 2023-05-31 12:01:51 +03:00
i915_debugfs.h
i915_debugfs_params.c drm/i915/params: use generics for parameter debugfs file creation 2023-01-25 16:25:36 +02:00
i915_debugfs_params.h
i915_deps.c drm/ttm: merge ttm_bo_api.h and ttm_bo_driver.h v2 2022-12-06 12:54:14 +01:00
i915_deps.h drm/i915: Break out the i915_deps utility 2021-12-22 08:52:57 +01:00
i915_driver.c drm/i915: make i915_drm_client_fdinfo() reference conditional again 2023-06-20 08:54:43 +01:00
i915_driver.h drm/i915: Move intel_vtd_active and run_as_guest to i915_utils 2022-03-30 12:04:01 +01:00
i915_drm_client.c drm/i915: Use the fdinfo helper 2023-06-06 10:01:06 +01:00
i915_drm_client.h drm/i915: make i915_drm_client_fdinfo() reference conditional again 2023-06-20 08:54:43 +01:00
i915_drv.h Merge drm/drm-next into drm-intel-next 2023-06-10 10:04:00 +03:00
i915_file_private.h drm/i915: Use i915 instead of dev_priv insied the file_priv structure 2023-03-23 01:53:44 +01:00
i915_fixed.h
i915_gem.c drm/i915: Use the fdinfo helper 2023-06-06 10:01:06 +01:00
i915_gem.h drm/i915: move I915_GEM_GPU_DOMAINS to i915_gem.h 2023-01-20 10:14:31 +02:00
i915_gem_evict.c drm/i915: improve the catch-all evict to handle lock contention 2022-12-30 03:04:39 -05:00
i915_gem_evict.h drm/i915: improve the catch-all evict to handle lock contention 2022-12-30 03:04:39 -05:00
i915_gem_gtt.c treewide: use get_random_u32() when possible 2022-10-11 17:42:58 -06:00
i915_gem_gtt.h Merge drm/drm-next into drm-intel-next 2023-01-25 11:41:16 +02:00
i915_gem_ww.c
i915_gem_ww.h
i915_getparam.c drm/i915/mtl/huc: Use the media gt for the HuC getparam 2023-06-05 09:53:51 -07:00
i915_getparam.h drm/i915: split out i915_getparam.h from i915_drv.h 2022-01-10 15:43:05 +02:00
i915_gpu_error.c drm changes for 6.5-rc1: 2023-06-29 11:00:17 -07:00
i915_gpu_error.h drm/i915: Dump error capture to kernel log 2023-05-16 12:26:46 -07:00
i915_hwmon.c Merge drm/drm-next into drm-intel-next 2023-05-31 12:01:51 +03:00
i915_hwmon.h drm/i915/guc: Disable PL1 power limit when loading GuC firmware 2023-04-26 18:02:40 -04:00
i915_ioc32.c drm/i915: split out i915_getparam.h from i915_drv.h 2022-01-10 15:43:05 +02:00
i915_ioc32.h
i915_ioctl.c drm/i915: split out i915_reg_read_ioctl() to i915_ioctl.[ch] 2022-01-21 09:59:22 +02:00
i915_ioctl.h drm/i915: split out i915_reg_read_ioctl() to i915_ioctl.[ch] 2022-01-21 09:59:22 +02:00
i915_iosf_mbi.h drm/i915: abstraction for iosf to compile on all archs 2021-10-27 00:32:01 -07:00
i915_irq.c Merge drm/drm-next into drm-intel-next 2023-05-31 12:01:51 +03:00
i915_irq.h drm/i915/irq: split out display irq handling 2023-05-16 10:31:27 +03:00
i915_memcpy.c
i915_memcpy.h
i915_mitigations.c drm/i915: move the DRIVER_* macros to i915_driver.[ch] 2022-02-10 11:44:25 +02:00
i915_mitigations.h
i915_mm.c drm/i915: Skip remap_io_mapping() for non-x86 platforms 2021-12-08 13:26:14 -08:00
i915_mm.h drm/i915: Fix header test for !CONFIG_X86 2022-02-07 12:56:49 +00:00
i915_module.c Merge tag 'drm-intel-gt-next-2022-02-17' of git://anongit.freedesktop.org/drm/drm-intel into drm-intel-next 2022-02-23 15:03:51 -05:00
i915_params.c drm/i915: Add i915.enable_sagv modparam 2023-03-25 00:16:36 +02:00
i915_params.h drm/i915: Add i915.enable_sagv modparam 2023-03-25 00:16:36 +02:00
i915_pci.c Revert "drm/i915: use localized __diag_ignore_all() instead of per file" 2023-07-17 13:39:04 +01:00
i915_pci.h drm/i915: Sanitycheck PCI BARs 2022-08-10 13:11:17 +03:00
i915_perf.c drm/i915/perf: add sentinel to xehp_oa_b_counters 2023-07-17 13:39:01 +01:00
i915_perf.h drm/i915/perf: Pass i915 object to perf revision helper 2023-03-24 08:50:16 -07:00
i915_perf_oa_regs.h drm/i915/mtl: Implement Wa_14019141245 2023-04-26 15:56:46 -07:00
i915_perf_types.h i915/perf: Drop the aging_tail logic in perf OA 2023-06-07 12:54:59 -07:00
i915_pmu.c drm/i915: rename I915_PMU_MAX_GTS to I915_PMU_MAX_GT 2023-06-06 09:23:47 -07:00
i915_pmu.h drm/i915: rename I915_PMU_MAX_GTS to I915_PMU_MAX_GT 2023-06-06 09:23:47 -07:00
i915_priolist_types.h
i915_pvinfo.h
i915_query.c drm/i915: Partial abandonment of legacy DRM logging macros 2022-11-10 12:35:46 +00:00
i915_query.h
i915_reg.h Merge drm/drm-next into drm-intel-next 2023-06-10 10:04:00 +03:00
i915_reg_defs.h drm/i915: Add 16bit register/mask operators 2023-05-19 10:02:34 -07:00
i915_request.c drm/i915: Fix premature release of request's reusable memory 2023-08-01 10:56:34 +01:00
i915_request.h drm/i915/request: drop kernel-doc 2023-05-04 12:11:29 +03:00
i915_scatterlist.c Merge tag 'drm-intel-gt-next-2023-04-06' of git://anongit.freedesktop.org/drm/drm-intel into drm-next 2023-04-06 14:21:00 +02:00
i915_scatterlist.h drm/i915/scatterlist: fix kernel-doc 2023-05-05 11:28:43 +03:00
i915_scheduler.c
i915_scheduler.h drm/i915/tasklet: separate local hacks around struct tasklet_struct 2022-06-07 21:47:19 +03:00
i915_scheduler_types.h
i915_selftest.h drm/i915/guc: Delay disabling guc_id scheduling for better hysteresis 2022-10-26 17:29:43 -07:00
i915_suspend.c drm/i915/fbc: Remove intel_fbc_global_disable() 2022-04-13 17:19:04 +03:00
i915_suspend.h
i915_sw_fence.c treewide: Convert del_timer*() to timer_shutdown*() 2022-12-25 13:38:09 -08:00
i915_sw_fence.h drm/i915: Remove unused function parameter 2022-09-24 00:59:13 -04:00
i915_sw_fence_work.c drm/i915: Drop stealing of bits from i915_sw_fence function pointer 2021-11-30 17:52:15 -08:00
i915_sw_fence_work.h
i915_switcheroo.c drm/i915: Allow switching away via vga-switcheroo if uninitialized 2023-01-18 17:12:23 +01:00
i915_switcheroo.h
i915_syncmap.c
i915_syncmap.h
i915_sysfs.c drm/i915: remove unnecessary intel_pm.h includes 2023-03-06 18:26:30 +02:00
i915_sysfs.h drm/i915/gt: create per-tile sysfs interface 2022-03-21 08:37:39 +00:00
i915_tasklet.h drm/i915/tasklet: separate local hacks around struct tasklet_struct 2022-06-07 21:47:19 +03:00
i915_trace.h Merge drm/drm-next into drm-intel-next 2022-11-14 14:32:34 -05:00
i915_trace_points.c
i915_ttm_buddy_manager.c drm/i915/ttm: remove the virtualized start hack 2023-02-24 11:39:15 +00:00
i915_ttm_buddy_manager.h drm/i915/uapi: expose the avail tracking 2022-07-01 08:29:59 +01:00
i915_user_extensions.c overflow: Introduce overflows_type() and castable_to_type() 2022-11-02 12:39:27 -07:00
i915_user_extensions.h
i915_utils.c drm/i915: Move intel_vtd_active and run_as_guest to i915_utils 2022-03-30 12:04:01 +01:00
i915_utils.h drm/i915/utils: drop kernel-doc from __wait_for() 2023-05-04 12:11:21 +03:00
i915_vgpu.c drm/i915: Add object locking to i915_gem_evict_for_node and i915_gem_evict_something, v2. 2022-01-18 12:18:03 +01:00
i915_vgpu.h
i915_vma.c Merge drm/drm-next into drm-intel-next 2023-05-31 12:01:51 +03:00
i915_vma.h drm/i915: use pat_index instead of cache_level 2023-05-11 17:38:55 +02:00
i915_vma_resource.c drm/i915: Introduce guard pages to i915_vma 2022-12-06 10:52:45 +01:00
i915_vma_resource.h drm/i915/vma: fix struct i915_vma_bindinfo kernel-doc 2023-05-05 11:28:09 +03:00
i915_vma_types.h drm/i915: use pat_index instead of cache_level 2023-05-11 17:38:55 +02:00
intel_clock_gating.c drm/i915/psr: Define more PSR mask bits 2023-04-20 21:45:19 +03:00
intel_clock_gating.h drm/i915: rename intel_pm.[ch] to intel_clock_gating.[ch] 2023-04-05 19:54:13 +03:00
intel_device_info.c drm/i915/display: Extract display init from intel_device_info_runtime_init 2023-06-05 16:00:37 -07:00
intel_device_info.h Merge drm/drm-next into drm-intel-next 2023-05-31 12:01:51 +03:00
intel_gvt.c drm/i915/gvt: Fix the compiling error when CONFIG_DRM_I915_DEBUG_RUNTIME_PM=n 2022-04-28 17:01:17 -04:00
intel_gvt.h drm/i915/gvt: move the gvt code into kvmgt.ko 2022-04-21 07:36:56 -04:00
intel_gvt_mmio_table.c drm/i915/psr: split out PSR regs to a separate file 2023-04-04 10:05:38 +03:00
intel_mchbar_regs.h drm/i915/hwmon: Display clamped PL1 limit 2023-01-06 15:53:59 +05:30
intel_memory_region.c drm/i915: drop cast from DEFINE_RES_MEM() usage 2023-01-18 11:45:23 +02:00
intel_memory_region.h drm/i915: remove intel_memory_region avail 2022-07-01 08:29:59 +01:00
intel_pci_config.h drm/i915: Name our BARs based on the spec 2022-10-20 21:08:42 +03:00
intel_pcode.c drm/i915/pcode: Give the punit time to settle before fatally failing 2023-02-07 18:29:43 +01:00
intel_pcode.h drm/i915/pcode: Add a couple of pcode helpers 2022-05-20 09:11:45 +01:00
intel_region_ttm.c drm/i915/intel_region_ttm: Provide missing description for 'offset' param 2023-04-03 17:48:39 +03:00
intel_region_ttm.h drm/i915/ttm: fix 32b build 2022-07-17 14:53:47 -04:00
intel_runtime_pm.c drm/i915: use pointer to i915 instead of rpm in wakeref 2023-06-10 06:32:58 +03:00
intel_runtime_pm.h drm/i915: Remove i915_drm_suspend_mode 2023-06-02 20:25:00 +03:00
intel_sbi.c drm/i915: Only include i915_reg.h from .c files 2022-02-02 07:59:54 -08:00
intel_sbi.h drm/i915: rename intel_sideband.[ch] to intel_sbi.[ch] 2021-10-14 18:05:04 +03:00
intel_step.c drm/i915/display: Move display runtime info to display structure 2023-05-24 09:25:36 -07:00
intel_step.h drm/i915: Parse and set stepping for platforms with GMD 2022-09-23 17:37:23 -07:00
intel_uncore.c Merge tag 'drm-intel-gt-next-2023-04-06' of git://anongit.freedesktop.org/drm/drm-intel into drm-next 2023-04-06 14:21:00 +02:00
intel_uncore.h drm/i915/gsc: Do a driver-FLR on unload if GSC was loaded 2022-12-09 08:28:46 -08:00
intel_wakeref.c drm/i915: add a dedicated workqueue inside drm_i915_private 2023-06-10 06:33:11 +03:00
intel_wakeref.h drm/i915: use pointer to i915 instead of rpm in wakeref 2023-06-10 06:32:58 +03:00
vlv_sideband.c drm/i915/display: add intel_display_limits.h for key enums 2023-01-25 13:59:12 +02:00
vlv_sideband.h drm/i915: split out vlv sideband registers from i915_reg.h 2022-01-10 16:17:50 +02:00
vlv_sideband_reg.h drm/i915: split out vlv sideband registers from i915_reg.h 2022-01-10 16:17:50 +02:00
vlv_suspend.c drm/i915: rename intel_pm.[ch] to intel_clock_gating.[ch] 2023-04-05 19:54:13 +03:00
vlv_suspend.h