mirror-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
Makefile Revert "drm/i915: use localized __diag_ignore_all() instead of per file" 2023-07-17 13:39:04 +01:00
TODO.txt
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
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
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
i915_driver.c drm/i915: make i915_drm_client_fdinfo() reference conditional again 2023-06-20 08:54:43 +01:00
i915_driver.h
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
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
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
i915_ioc32.h
i915_ioctl.c
i915_ioctl.h
i915_iosf_mbi.h
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
i915_mitigations.h
i915_mm.c
i915_mm.h
i915_module.c
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
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
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
i915_scheduler_types.h
i915_selftest.h
i915_suspend.c
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
i915_sw_fence_work.c
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
i915_tasklet.h
i915_trace.h
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
i915_user_extensions.c
i915_user_extensions.h
i915_utils.c
i915_utils.h drm/i915/utils: drop kernel-doc from __wait_for() 2023-05-04 12:11:21 +03:00
i915_vgpu.c
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
intel_gvt.h
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
intel_pci_config.h
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
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
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
intel_sbi.h
intel_step.c drm/i915/display: Move display runtime info to display structure 2023-05-24 09:25:36 -07:00
intel_step.h
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
vlv_sideband_reg.h
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