Re: ThinkPad X1 Carbon gen 13, blank screen with inteldrm enabled, -current May 2026

Mikolaj Kucharski <[email protected]> Fri, 22 May 2026 18:33:06 +0000
Newsgroups gmane.os.openbsd.bugs
Message-ID <[email protected]>
Hi Jonathan.

On Sat, May 23, 2026 at 12:37:30AM +1000, Jonathan Gray wrote:
> On Fri, May 22, 2026 at 12:26:05PM +0000, Mikolaj Kucharski wrote:
> > >Synopsis:	Fresh install ends up with blank screen, disabling inteldrm brings console back.
> > >Category:	kernel
> > >Environment:
> > 	System      : OpenBSD 7.9
> > 	Details     : OpenBSD 7.9-current (GENERIC.MP) #501: Thu May 21 19:28:37 MDT 2026
> > 			 [email protected]:/usr/src/sys/arch/amd64/compile/GENERIC.MP
> > 
> > 	Architecture: OpenBSD.amd64
> > 	Machine     : amd64
> > >Description:
> > 	OpenBSD fresh install, every boot with non-modified GENERIC.MP. Initial dmesg is visible. Blue
> > background, white font progresses with boot up. The moment filesystem is mounted and firmware files are
> > fetchable screen goes dark pitch black. System boots up as I can SSH into the laptop and from inside all
> > seems to be good. Except no glass console.
> > >How-To-Repeat:
> > 	Fresh install of OpenBSD/amd64 on ThinkPad X1 Carbon Gen 13 Aurora Edition.
> > >Fix:
> > 	Unknown. Workaround is to boot -c and `disable inteldrm*`. Below are details fetched over SSH with
> 
> Does this diff to disable GuC submission (and low power states)
> make the screen light up?
> 
> Index: sys/dev/pci/drm/i915/i915_driver.c
> ===================================================================
> RCS file: /cvs/src/sys/dev/pci/drm/i915/i915_driver.c,v
> diff -u -p -r1.30 i915_driver.c
> --- sys/dev/pci/drm/i915/i915_driver.c	30 Apr 2026 04:33:06 -0000	1.30
> +++ sys/dev/pci/drm/i915/i915_driver.c	22 May 2026 14:27:18 -0000
> @@ -2322,12 +2322,10 @@ inteldrm_attach(struct device *parent, s
>  
>  	dev_priv->display = display;
>  
> -	/*
> -	 * with GuC submission, init sometimes fails on Alder Lake-P
> -	 * and Raptor Lake-S, too early for IS_ALDERLAKE
> -	 */
> -	if (info->platform == INTEL_ALDERLAKE_P ||
> -	    info->platform == INTEL_ALDERLAKE_S)
> +	/* uc_expand_default_options() with no GuC submission */
> +	if (GRAPHICS_VER(dev_priv) >= 12 &&
> +	    (INTEL_INFO(dev_priv)->platform != INTEL_TIGERLAKE) &&
> +	    (INTEL_INFO(dev_priv)->platform != INTEL_ROCKETLAKE))
>  		dev_priv->params.enable_guc = ENABLE_GUC_LOAD_HUC;
>  
>  	mmio_bar = (GRAPHICS_VER(dev_priv) == 2) ? 0x14 : 0x10;
> Index: sys/dev/pci/drm/i915/i915_pci.c
> ===================================================================
> RCS file: /cvs/src/sys/dev/pci/drm/i915/i915_pci.c,v
> diff -u -p -r1.25 i915_pci.c
> --- sys/dev/pci/drm/i915/i915_pci.c	9 Mar 2026 23:58:01 -0000	1.25
> +++ sys/dev/pci/drm/i915/i915_pci.c	22 May 2026 14:21:40 -0000
> @@ -771,7 +771,7 @@ static const struct intel_device_info mt
>  	.has_flat_ccs = 0,
>  	.has_gmd_id = 1,
>  	.has_guc_deprivilege = 1,
> -	.has_guc_tlb_invalidation = 1,
> +	.has_guc_tlb_invalidation = 0,
>  	.has_llc = 0,
>  	.has_mslice_steering = 0,
>  	.has_snoop = 1,
> 

Above diff didn't help.

After booting with your diff, I then did following change:

Index: sys/dev/pci/drm/i915/i915_driver.c
===================================================================
RCS file: /cvs/src/sys/dev/pci/drm/i915/i915_driver.c,v
diff -u -p -u -r1.30 i915_driver.c
--- sys/dev/pci/drm/i915/i915_driver.c	30 Apr 2026 04:33:06 -0000	1.30
+++ sys/dev/pci/drm/i915/i915_driver.c	22 May 2026 18:31:12 -0000
@@ -2322,13 +2322,16 @@ inteldrm_attach(struct device *parent, s
 
 	dev_priv->display = display;
 
-	/*
-	 * with GuC submission, init sometimes fails on Alder Lake-P
-	 * and Raptor Lake-S, too early for IS_ALDERLAKE
-	 */
-	if (info->platform == INTEL_ALDERLAKE_P ||
-	    info->platform == INTEL_ALDERLAKE_S)
+        printf("MMM %s: drm graphics_ver=%d platform=%d\n", __func__, GRAPHICS_VER(dev_priv), INTEL_INFO(dev_priv)->platform);
+	/* uc_expand_default_options() with no GuC submission */
+	if (GRAPHICS_VER(dev_priv) >= 12 &&
+	    (INTEL_INFO(dev_priv)->platform != INTEL_TIGERLAKE) &&
+	    (INTEL_INFO(dev_priv)->platform != INTEL_ROCKETLAKE)) {
 		dev_priv->params.enable_guc = ENABLE_GUC_LOAD_HUC;
+                printf("MMM %s: drm enable_guc=%d (inside if-statment)\n", __func__, dev_priv->params.enable_guc);
+        } else {
+                printf("MMM %s: drm enable_guc=%d (outside if-statment)\n", __func__, dev_priv->params.enable_guc);
+        }
 
 	mmio_bar = (GRAPHICS_VER(dev_priv) == 2) ? 0x14 : 0x10;
 
Index: sys/dev/pci/drm/i915/i915_pci.c
===================================================================
RCS file: /cvs/src/sys/dev/pci/drm/i915/i915_pci.c,v
diff -u -p -u -r1.25 i915_pci.c
--- sys/dev/pci/drm/i915/i915_pci.c	9 Mar 2026 23:58:01 -0000	1.25
+++ sys/dev/pci/drm/i915/i915_pci.c	22 May 2026 18:31:12 -0000
@@ -771,7 +771,7 @@ static const struct intel_device_info mt
 	.has_flat_ccs = 0,
 	.has_gmd_id = 1,
 	.has_guc_deprivilege = 1,
-	.has_guc_tlb_invalidation = 1,
+	.has_guc_tlb_invalidation = 0,
 	.has_llc = 0,
 	.has_mslice_steering = 0,
 	.has_snoop = 1,


dmesg says with above patch:

drm0 at inteldrm0
MMM inteldrm_attach: drm graphics_ver=12 platform=37
MMM inteldrm_attach: drm enable_guc=2 (inside if-statment)
inteldrm0: msi, METEORLAKE, gen 12


-- 
Regards,
 Mikolaj