On Mon, 06 Feb 2023, Imre Deak <imre.d...@intel.com> 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.d...@intel.com>
> ---
>  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

Reply via email to