On Mon, 06 Feb 2023, Imre Deak <imre.deak@xxxxxxxxx> wrote: > DG1/DG2 and MTL+ has added a new display-present HW flag. Check this > flag and if cleared, disable the driver's display functionality. > > So far the missing check resulted in running the display initialization > sequence, and the WARNs below, due to the display register accesses > timing out: > > [ 3.902843] ------------[ cut here ]------------ > [ 3.902848] i915 0000:03:00.0: drm_WARN_ON(intel_de_wait_for_set(dev_priv, ((const i915_reg_t){ .reg = (0x42000) }), (1 << (27 - (pg))), 1)) > [ 3.902879] WARNING: CPU: 6 PID: 462 at drivers/gpu/drm/i915/display/intel_display_power_well.c:326 gen9_wait_for_power_well_fuses+0x71/0x80 [i915] > [ 3.903009] Modules linked in: hid_sensor_hub intel_ishtp_hid i915(+) rtsx_pci_sdmmc drm_buddy mmc_core drm_display_helper crct10dif_pclmul nvme cec crc32_pclmul intel_ish_ipc crc32c_intel ucsi_acpi hid_multitouch nvme_core ghash_clmulni_intel typec_ucsi rtsx_pci ttm sha512_ssse3 serio_raw intel_ishtp typec video i2c_hid_acpi i2c_hid wmi pinctrl_tigerlake ip6_tables ip_tables x_tables fuse > [ 3.903021] CPU: 6 PID: 462 Comm: systemd-udevd Tainted: G U 6.2.0-rc6+ #50 > [ 3.903023] Hardware name: LENOVO 82VB/LNVNB161216, BIOS KMCN09WW 04/26/2022 > [ 3.903023] RIP: 0010:gen9_wait_for_power_well_fuses+0x71/0x80 [i915] > [ 3.903105] Code: 48 8b 5f 50 48 85 db 75 03 48 8b 1f e8 98 bb 0d e9 48 c7 c1 00 65 a1 c0 48 89 da 48 c7 c7 4b c5 a3 c0 48 89 c6 e8 e3 df 53 e9 <0f> 0b 5b c3 cc cc cc cc 0f 1f 80 00 00 00 00 90 90 90 90 90 90 90 > [ 3.903106] RSP: 0018:ffffa7cec0b07a98 EFLAGS: 00010292 > [ 3.903107] RAX: 0000000000000080 RBX: ffff9a05430eaaa0 RCX: 0000000000000000 > [ 3.903108] RDX: 0000000000000001 RSI: ffffffffaa7ab69e RDI: 00000000ffffffff > [ 3.903108] RBP: ffff9a0552ba2020 R08: ffffffffab062ce0 R09: 00000000abd3ffc2 > [ 3.903109] R10: ffffffffffffffff R11: 0000000000000081 R12: 0000000000000000 > [ 3.903109] R13: ffff9a05532a9cb0 R14: ffffffffc09e1670 R15: ffff9a0543132000 > [ 3.903110] FS: 00007f24d0fe5b40(0000) GS:ffff9a0ccf780000(0000) knlGS:0000000000000000 > [ 3.903110] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 > [ 3.903111] CR2: 00005643d7a31a28 CR3: 0000000111614002 CR4: 0000000000770ee0 > [ 3.903112] PKRU: 55555554 > [ 3.903112] Call Trace: > [ 3.903113] <TASK> > [ 3.903114] hsw_power_well_enable+0x12f/0x1a0 [i915] > [ 3.903191] intel_power_well_enable+0x21/0x70 [i915] > [ 3.903265] icl_display_core_init+0x92/0x6a0 [i915] > [ 3.903346] intel_power_domains_init_hw+0x1da/0x5b0 [i915] > [ 3.903422] intel_modeset_init_noirq+0x60/0x250 [i915] > [ 3.903497] i915_driver_probe+0x562/0xe10 [i915] > [ 3.903557] ? i915_pci_probe+0x87/0x180 [i915] > [ 3.903617] local_pci_probe+0x3e/0x80 > [ 3.903621] pci_device_probe+0xb3/0x210 > [ 3.903622] really_probe+0xdb/0x380 > [ 3.903624] ? pm_runtime_barrier+0x50/0x90 > [ 3.903626] __driver_probe_device+0x78/0x170 > [ 3.903627] driver_probe_device+0x1f/0x90 > [ 3.903628] __driver_attach+0xce/0x1c0 > [ 3.903629] ? __pfx___driver_attach+0x10/0x10 > [ 3.903630] bus_for_each_dev+0x5f/0x90 > [ 3.903631] bus_add_driver+0x1ae/0x200 > [ 3.903632] driver_register+0x89/0xe0 > [ 3.903634] i915_init+0x1f/0x7f [i915] > [ 3.903695] ? __pfx_init_module+0x10/0x10 [i915] > [ 3.903751] do_one_initcall+0x43/0x220 > [ 3.903753] ? kmalloc_trace+0x26/0x90 > [ 3.903756] do_init_module+0x4a/0x200 > [ 3.903758] __do_sys_init_module+0x157/0x180 > [ 3.903760] do_syscall_64+0x58/0xc0 > [ 3.903762] ? do_syscall_64+0x67/0xc0 > [ 3.903762] ? exc_page_fault+0x70/0x170 > [ 3.903764] entry_SYSCALL_64_after_hwframe+0x72/0xdc > > Bspec: 49189, 53112 > > Closes: https://gitlab.freedesktop.org/drm/intel/-/issues/8015 > Signed-off-by: Imre Deak <imre.deak@xxxxxxxxx> > --- > drivers/gpu/drm/i915/i915_reg.h | 3 +++ > drivers/gpu/drm/i915/intel_device_info.c | 13 +++++++++++++ > 2 files changed, 16 insertions(+) > > diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h > index 596efc940ee70..a22a0fa299645 100644 > --- a/drivers/gpu/drm/i915/i915_reg.h > +++ b/drivers/gpu/drm/i915/i915_reg.h > @@ -116,6 +116,9 @@ > * #define GEN8_BAR _MMIO(0xb888) > */ > > +#define GU_CNTL_PROTECTED _MMIO(0x10100C) > +#define DEPRESENT REG_BIT(9) > + > #define GU_CNTL _MMIO(0x101010) > #define LMEM_INIT REG_BIT(7) > #define DRIVERFLR REG_BIT(31) > diff --git a/drivers/gpu/drm/i915/intel_device_info.c b/drivers/gpu/drm/i915/intel_device_info.c > index 98769e5f2c3d1..044ac552c9280 100644 > --- a/drivers/gpu/drm/i915/intel_device_info.c > +++ b/drivers/gpu/drm/i915/intel_device_info.c > @@ -501,6 +501,19 @@ void intel_device_info_runtime_init(struct drm_i915_private *dev_priv) > runtime->has_dsc = 0; > } > > + if ((IS_DGFX(dev_priv) || DISPLAY_VER(dev_priv) >= 14) && > + !(intel_de_read(dev_priv, GU_CNTL_PROTECTED) & DEPRESENT)) { > + drm_info(&dev_priv->drm, "Display fused off, disabling\n"); I think that's a slightly misleading message because we can hit this on platforms that simply don't have display hardware at all. Maybe we should add HAS_DISPLAY() in the condition to skip this when we've already determined there's no display. > + > + runtime->pipe_mask = 0; This is sufficient. > + runtime->cpu_transcoder_mask = 0; > + runtime->fbc_mask = 0; > + runtime->has_hdcp = 0; > + runtime->fbc_mask = 0; > + runtime->has_dmc = 0; > + runtime->has_dsc = 0; Please drop all of these. There's an if (!HAS_DISPLAY()) just a few lines down the purpose of which is to cover all of it in a unified manner. BR, Jani. > + } > + > if (GRAPHICS_VER(dev_priv) == 6 && i915_vtd_active(dev_priv)) { > drm_info(&dev_priv->drm, > "Disabling ppGTT for VT-d support\n"); -- Jani Nikula, Intel Open Source Graphics Center