From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-qv1-f98.google.com (mail-qv1-f98.google.com [209.85.219.98]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 440662E613A for ; Mon, 29 Dec 2025 22:05:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.219.98 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767045918; cv=none; b=UMhCIswDqbFcPEL3JzFpdyJZ1ipcYU4KuabSEr8zOCuvnV8E6y8NqAr7Gb3SGvJUIjRP8DNl9g6qnwM8rwgAKNYxv+t7uJ9yU63kpAe1riC9LuzXaBcQAGwtLgFcTZ2qXyYqFMRm9SQbPBCPRx8bF9fw1blUEr0zkJnpdys4tdI= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767045918; c=relaxed/simple; bh=y5YIqKVzOgea1hEskvVJXNFijZ0oP6nkRby64GmSm8c=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version:Content-Type; b=kUtipMHNixxqDQcGKaNJa+QE37ld+6bWrXdXybft+XtxStSyjoCuUwTLLbbV1yu89x3E80/lMTA3VUBn3g4/KsEZSlneg8vAFWt3R55FwZEa6BiDHQS4w5jJPx7kXhtTwPz9dPeY6xcnSiwDU2gu3kNB0CKtKlMt1XZfFcWu4DA= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=broadcom.com; spf=fail smtp.mailfrom=broadcom.com; dkim=pass (1024-bit key) header.d=broadcom.com header.i=@broadcom.com header.b=Ozdoorpa; arc=none smtp.client-ip=209.85.219.98 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=broadcom.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=broadcom.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=broadcom.com header.i=@broadcom.com header.b="Ozdoorpa" Received: by mail-qv1-f98.google.com with SMTP id 6a1803df08f44-8888546d570so137133586d6.2 for ; Mon, 29 Dec 2025 14:05:16 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767045915; x=1767650715; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:dkim-signature:x-gm-gg:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=UwzcNp2HYOV4Z1mSXVXCsNd5TObEfxUddJJZvW7JJZk=; b=kA82PqxWP64eWBeGS89utgq9z2JrKvuiLrEJPtk9AYI2H8nTM51Ovo0m39BnC7YpCt 69knFV65G3JdM3ys0Uz6LhxkFtJvtXQKNPzeaJqqcQMFu7p1OgKSA+XZA2wN4E132RF/ VI7AWKIpKJbcBIJGXmr2Vg/KWVr1EMUKBNgf6WMdRa4f/kqgnlTe8c2T9l8DOIVzH+uH SIzCB+SK258XmGxX5Y3mhd/J8TZl5q2rTUoEoylddUAkwkfclFqmvh9Xx69HRpoGTVgY T/Wx6HunljuJ/QUpNyeekmf/jvjxdls0pz50dvowJsaIdxIEJoxCF3JXNf/9YO8JQCV9 yrsg== X-Forwarded-Encrypted: i=1; AJvYcCXyMK/fCt6v3HvqtNgLhNnnB+0JhFBPE1WTULQn02lhP5QvPSZIsv9YtrnbqZ4TLOLki+qHv+UXYVzqKG4=@vger.kernel.org X-Gm-Message-State: AOJu0YxaOR0NmdSm8C+J6hEws7NcroZn4MdzL9mC48E4wDfgFLZxsz7B oiG4S1ZMHJ9K1XwtVX3/Ya4Agf+HfC+vHV1nr7q1auPk73s/UBwigNLora/VLsp866wIA8nsvY0 Ng41ZwazMCq01GDeQmly63clqvgMgtP4Dg6Vm/QTNTzRAijNTN1YNkv6g36EtSZzWWaVxUUCMMn Ma7FuQSZCWClwfVXISFnSXhO2iXLf264oIFUe/oA4/pvHgi+UzwvWW6dEmGcM3AUoMbjqVi+bvm 5p392+spYP8q7Jb X-Gm-Gg: AY/fxX45e4jDC5JBGA6GBVgUNxxzi/sFhEUA8oBegeB/1w11+o957CBcsHGouYniqbF Lzf3EXvj5P4zhSp1wFuIDyEOUWfq37ZLL7Y7KabcUGBU2zsndea8kuWy8iMYiCQRro9TRX/4/yV 3FFO80O4SR2d7Z56B2E37uvoqAYjR78nUqBzi2iKXTrJXGl4RJeUG9tIa6xC78OEJ/IoRSPOnnG iBqUhRMq3vT9ydWGiQnngOzAeoxobrNbyouc63rXKVrTE25bOCe60IOVevnt6Auq65kUV/SgBLG ahMdPGSg7Ime6ozE3FYFvOXSlyArZnPWA/YdHWYlZUW15WEDrYNAklglNvJDJ/S7cZDajn7e9Jh J9sVmumIGGBtDu9vDloCrF8H3TDGEuZyKLFwZ9Ltg+qfOmqbn05Nev3yDmieiH7SBzYBCRGJYHK RtxsioKj83jcfhNpis1K1mlRR/CUuUZM4FzRLAkF8x0+Md X-Google-Smtp-Source: AGHT+IHhQhudQn9rKe6J7vqxHeS/HWpYsH5EKgabThjBmnne5SYH+ovpgcdbDnOtezXV/rxu7N82phthZWoE X-Received: by 2002:a05:6214:c2e:b0:888:6398:79e1 with SMTP id 6a1803df08f44-88d87606531mr500267916d6.45.1767045915025; Mon, 29 Dec 2025 14:05:15 -0800 (PST) Received: from smtp-us-east1-p01-i01-si01.dlp.protect.broadcom.com (address-144-49-247-101.dlp.protect.broadcom.com. [144.49.247.101]) by smtp-relay.gmail.com with ESMTPS id 6a1803df08f44-88d94fcbfc5sm42418616d6.2.2025.12.29.14.05.14 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 29 Dec 2025 14:05:15 -0800 (PST) X-Relaying-Domain: broadcom.com X-CFilter-Loop: Reflected Received: by mail-pl1-f200.google.com with SMTP id d9443c01a7336-2a377e15716so66012945ad.3 for ; Mon, 29 Dec 2025 14:05:14 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com; s=google; t=1767045914; x=1767650714; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=UwzcNp2HYOV4Z1mSXVXCsNd5TObEfxUddJJZvW7JJZk=; b=Ozdoorpa4Jxe1RsKqKXHgEfZH+OBW04Bjo76y8+X7FbMbvdyF+PWL13mlmdkcFZ+xa /ZcFJ5qYSMa6mFZFGd7oXnI9pZCJmdICRuLuzdl8pD6ZdaYrgOC9/His0qagtJEbZVwk SggyU0UNKPCwDQqD6gh2oVkQqW8wok76YH1rU= X-Forwarded-Encrypted: i=1; AJvYcCXktNbD4mztn5rvhpGjgBbcBHEUg2XuFYmOt4BVhclZXl/xE677A6P86jGp54WUVI6CyfwVtIx5WHdytV0=@vger.kernel.org X-Received: by 2002:a05:6214:428e:b0:88a:3681:1d96 with SMTP id 6a1803df08f44-88d881b984fmr478635916d6.63.1767045551432; Mon, 29 Dec 2025 13:59:11 -0800 (PST) X-Received: by 2002:a05:6214:428e:b0:88a:3681:1d96 with SMTP id 6a1803df08f44-88d881b984fmr478635666d6.63.1767045550918; Mon, 29 Dec 2025 13:59:10 -0800 (PST) Received: from localhost.localdomain (pool-173-49-113-140.phlapa.fios.verizon.net. [173.49.113.140]) by smtp.gmail.com with ESMTPSA id 6a1803df08f44-88d9759f164sm231530026d6.24.2025.12.29.13.59.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 29 Dec 2025 13:59:10 -0800 (PST) From: Zack Rusin To: dri-devel@lists.freedesktop.org Cc: Alex Deucher , amd-gfx@lists.freedesktop.org, Ard Biesheuvel , Ce Sun , Chia-I Wu , =?UTF-8?q?Christian=20K=C3=B6nig?= , Danilo Krummrich , Dave Airlie , Deepak Rawat , Dmitry Osipenko , Gerd Hoffmann , Gurchetan Singh , Hans de Goede , Hawking Zhang , Helge Deller , intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org, Jani Nikula , Javier Martinez Canillas , Jocelyn Falempe , Joonas Lahtinen , Lijo Lazar , linux-efi@vger.kernel.org, linux-fbdev@vger.kernel.org, linux-hyperv@vger.kernel.org, linux-kernel@vger.kernel.org, Lucas De Marchi , Lyude Paul , Maarten Lankhorst , "Mario Limonciello (AMD)" , Mario Limonciello , Maxime Ripard , nouveau@lists.freedesktop.org, Rodrigo Vivi , Simona Vetter , spice-devel@lists.freedesktop.org, =?UTF-8?q?Thomas=20Hellstr=C3=B6m?= , Thomas Zimmermann , =?UTF-8?q?Timur=20Krist=C3=B3f?= , Tvrtko Ursulin , virtualization@lists.linux.dev, Vitaly Prosyak Subject: [PATCH 00/12] Recover sysfb after DRM probe failure Date: Mon, 29 Dec 2025 16:58:06 -0500 Message-ID: <20251229215906.3688205-1-zack.rusin@broadcom.com> X-Mailer: git-send-email 2.48.1 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-DetectorID-Processed: b00c1d49-9d2e-4205-b15f-d015386d3d5e Almost a rite of passage for every DRM developer and most Linux users is upgrading your DRM driver/updating boot flags/changing some config and having DRM driver fail at probe resulting in a blank screen. Currently there's no way to recover from DRM driver probe failure. PCI DRM driver explicitly throw out the existing sysfb to get exclusive access to PCI resources so if the probe fails the system is left without a functioning display driver. Add code to sysfb to recever system framebuffer when DRM driver's probe fails. This means that a DRM driver that fails to load reloads the system framebuffer driver. This works best with simpledrm. Without it Xorg won't recover because it still tries to load the vendor specific driver which ends up usually not working at all. With simpledrm the system recovers really nicely ending up with a working console and not a blank screen. There's a caveat in that some hardware might require some special magic register write to recover EFI display. I'd appreciate it a lot if maintainers could introduce a temporary failure in their drivers probe to validate that the sysfb recovers and they get a working console. The easiest way to double check it is by adding: /* XXX: Temporary failure to test sysfb restore - REMOVE BEFORE COMMIT */ dev_info(&pdev->dev, "Testing sysfb restore: forcing probe failure\n"); ret = -EINVAL; goto out_error; or such right after the devm_aperture_remove_conflicting_pci_devices . Cc: Alex Deucher Cc: amd-gfx@lists.freedesktop.org Cc: Ard Biesheuvel Cc: Ce Sun Cc: Chia-I Wu Cc: "Christian König" Cc: Danilo Krummrich Cc: Dave Airlie Cc: Deepak Rawat Cc: Dmitry Osipenko Cc: dri-devel@lists.freedesktop.org Cc: Gerd Hoffmann Cc: Gurchetan Singh Cc: Hans de Goede Cc: Hawking Zhang Cc: Helge Deller Cc: intel-gfx@lists.freedesktop.org Cc: intel-xe@lists.freedesktop.org Cc: Jani Nikula Cc: Javier Martinez Canillas Cc: Jocelyn Falempe Cc: Joonas Lahtinen Cc: Lijo Lazar Cc: linux-efi@vger.kernel.org Cc: linux-fbdev@vger.kernel.org Cc: linux-hyperv@vger.kernel.org Cc: linux-kernel@vger.kernel.org Cc: Lucas De Marchi Cc: Lyude Paul Cc: Maarten Lankhorst Cc: "Mario Limonciello (AMD)" Cc: Mario Limonciello Cc: Maxime Ripard Cc: nouveau@lists.freedesktop.org Cc: Rodrigo Vivi Cc: Simona Vetter Cc: spice-devel@lists.freedesktop.org Cc: "Thomas Hellström" Cc: Thomas Zimmermann Cc: "Timur Kristóf" Cc: Tvrtko Ursulin Cc: virtualization@lists.linux.dev Cc: Vitaly Prosyak Zack Rusin (12): video/aperture: Add sysfb restore on DRM probe failure drm/vmwgfx: Use devm aperture helpers for sysfb restore on probe failure drm/xe: Use devm aperture helpers for sysfb restore on probe failure drm/amdgpu: Use devm aperture helpers for sysfb restore on probe failure drm/virtio: Add sysfb restore on probe failure drm/nouveau: Use devm aperture helpers for sysfb restore on probe failure drm/qxl: Use devm aperture helpers for sysfb restore on probe failure drm/vboxvideo: Use devm aperture helpers for sysfb restore on probe failure drm/hyperv: Add sysfb restore on probe failure drm/ast: Use devm aperture helpers for sysfb restore on probe failure drm/radeon: Use devm aperture helpers for sysfb restore on probe failure drm/i915: Use devm aperture helpers for sysfb restore on probe failure drivers/firmware/efi/sysfb_efi.c | 2 +- drivers/firmware/sysfb.c | 191 +++++++++++++-------- drivers/firmware/sysfb_simplefb.c | 10 +- drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 9 +- drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 7 + drivers/gpu/drm/ast/ast_drv.c | 13 +- drivers/gpu/drm/hyperv/hyperv_drm_drv.c | 23 +++ drivers/gpu/drm/i915/i915_driver.c | 13 +- drivers/gpu/drm/nouveau/nouveau_drm.c | 16 +- drivers/gpu/drm/qxl/qxl_drv.c | 14 +- drivers/gpu/drm/radeon/radeon_drv.c | 15 +- drivers/gpu/drm/vboxvideo/vbox_drv.c | 13 +- drivers/gpu/drm/virtio/virtgpu_drv.c | 29 ++++ drivers/gpu/drm/vmwgfx/vmwgfx_drv.c | 13 +- drivers/gpu/drm/xe/xe_device.c | 7 +- drivers/gpu/drm/xe/xe_pci.c | 7 + drivers/video/aperture.c | 54 ++++++ include/linux/aperture.h | 14 ++ include/linux/sysfb.h | 6 + 19 files changed, 368 insertions(+), 88 deletions(-) -- 2.48.1