* [PATCH v6 0/9] Adjust fbcon console device detection
@ 2025-06-27 4:30 Mario Limonciello
2025-06-27 4:31 ` [PATCH v6 1/9] PCI: Add helper for checking if a PCI device is a display controller Mario Limonciello
` (8 more replies)
0 siblings, 9 replies; 18+ messages in thread
From: Mario Limonciello @ 2025-06-27 4:30 UTC (permalink / raw)
To: Bjorn Helgaas
Cc: Alex Deucher, Christian König, David Airlie, Simona Vetter,
Lukas Wunner, Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann,
David Woodhouse, Lu Baolu, Joerg Roedel, Will Deacon,
Robin Murphy, Alex Williamson, Jaroslav Kysela, Takashi Iwai,
open list:DRM DRIVERS, open list, open list:INTEL IOMMU (VT-d),
open list:PCI SUBSYSTEM, open list:VFIO DRIVER, open list:SOUND,
Daniel Dadap, Mario Limonciello
From: Mario Limonciello <mario.limonciello@amd.com>
This series started out as changes to VGA arbiter to try to handle a case
of a system with 2 GPUs that are not VGA devices [1]. This was discussed
but decided not to overload the VGA arbiter for non VGA devices.
Instead move the x86 specific detection of framebuffer resources into x86
specific code that the fbcon can use to properly identify the primary
device. This code is still called from the VGA arbiter, and the logic does
not change there. To avoid regression default to VGA arbiter and only fall
back to looking up with x86 specific detection method.
In order for userspace to also be able to discover which device was the
primary video display device create a new sysfs file 'boot_display'.
A matching userspace implementation for this file is available here:
https://gitlab.freedesktop.org/xorg/lib/libpciaccess/-/merge_requests/39
https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2038
It is suggested that this series merge entirely through the PCI tree.
Mario Limonciello (9):
PCI: Add helper for checking if a PCI device is a display controller
vfio/pci: Use pci_is_display()
vga_switcheroo: Use pci_is_display()
iommu/vt-d: Use pci_is_display()
ALSA: hda: Use pci_is_display()
Fix access to video_is_primary_device() when compiled without
CONFIG_VIDEO
PCI/VGA: Replace vga_is_firmware_default() with a screen info check
fbcon: Use screen info to find primary device
PCI: Add a new 'boot_display' attribute
Documentation/ABI/testing/sysfs-bus-pci | 8 +++++
arch/parisc/include/asm/video.h | 2 +-
arch/sparc/include/asm/video.h | 2 ++
arch/x86/include/asm/video.h | 2 ++
arch/x86/video/video-common.c | 13 ++++++-
drivers/gpu/vga/vga_switcheroo.c | 2 +-
drivers/iommu/intel/iommu.c | 2 +-
drivers/pci/pci-sysfs.c | 46 +++++++++++++++++++++++++
drivers/pci/vgaarb.c | 31 +++--------------
drivers/vfio/pci/vfio_pci_igd.c | 3 +-
include/linux/pci.h | 15 ++++++++
sound/hda/hdac_i915.c | 2 +-
sound/pci/hda/hda_intel.c | 4 +--
13 files changed, 97 insertions(+), 35 deletions(-)
--
2.43.0
^ permalink raw reply [flat|nested] 18+ messages in thread
* [PATCH v6 1/9] PCI: Add helper for checking if a PCI device is a display controller
2025-06-27 4:30 [PATCH v6 0/9] Adjust fbcon console device detection Mario Limonciello
@ 2025-06-27 4:31 ` Mario Limonciello
2025-06-27 4:31 ` [PATCH v6 2/9] vfio/pci: Use pci_is_display() Mario Limonciello
` (7 subsequent siblings)
8 siblings, 0 replies; 18+ messages in thread
From: Mario Limonciello @ 2025-06-27 4:31 UTC (permalink / raw)
To: Bjorn Helgaas
Cc: Alex Deucher, Christian König, David Airlie, Simona Vetter,
Lukas Wunner, Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann,
David Woodhouse, Lu Baolu, Joerg Roedel, Will Deacon,
Robin Murphy, Alex Williamson, Jaroslav Kysela, Takashi Iwai,
open list:DRM DRIVERS, open list, open list:INTEL IOMMU (VT-d),
open list:PCI SUBSYSTEM, open list:VFIO DRIVER, open list:SOUND,
Daniel Dadap, Mario Limonciello, Simona Vetter
From: Mario Limonciello <mario.limonciello@amd.com>
Several places in the kernel do class shifting to match whether a
PCI device is display class. Introduce a helper for those places to
use.
Acked-by: Bjorn Helgaas <bhelgaas@google.com>
Reviewed-by: Daniel Dadap <ddadap@nvidia.com>
Reviewed-by: Simona Vetter <simona.vetter@ffwll.ch>
Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
---
include/linux/pci.h | 15 +++++++++++++++
1 file changed, 15 insertions(+)
diff --git a/include/linux/pci.h b/include/linux/pci.h
index 05e68f35f3923..e77754e43c629 100644
--- a/include/linux/pci.h
+++ b/include/linux/pci.h
@@ -744,6 +744,21 @@ static inline bool pci_is_vga(struct pci_dev *pdev)
return false;
}
+/**
+ * pci_is_display - Check if a PCI device is a display controller
+ * @pdev: Pointer to the PCI device structure
+ *
+ * This function determines whether the given PCI device corresponds
+ * to a display controller. Display controllers are typically used
+ * for graphical output and are identified based on their class code.
+ *
+ * Return: true if the PCI device is a display controller, false otherwise.
+ */
+static inline bool pci_is_display(struct pci_dev *pdev)
+{
+ return (pdev->class >> 16) == PCI_BASE_CLASS_DISPLAY;
+}
+
#define for_each_pci_bridge(dev, bus) \
list_for_each_entry(dev, &bus->devices, bus_list) \
if (!pci_is_bridge(dev)) {} else
--
2.43.0
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH v6 2/9] vfio/pci: Use pci_is_display()
2025-06-27 4:30 [PATCH v6 0/9] Adjust fbcon console device detection Mario Limonciello
2025-06-27 4:31 ` [PATCH v6 1/9] PCI: Add helper for checking if a PCI device is a display controller Mario Limonciello
@ 2025-06-27 4:31 ` Mario Limonciello
2025-06-27 4:31 ` [PATCH v6 3/9] vga_switcheroo: " Mario Limonciello
` (6 subsequent siblings)
8 siblings, 0 replies; 18+ messages in thread
From: Mario Limonciello @ 2025-06-27 4:31 UTC (permalink / raw)
To: Bjorn Helgaas
Cc: Alex Deucher, Christian König, David Airlie, Simona Vetter,
Lukas Wunner, Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann,
David Woodhouse, Lu Baolu, Joerg Roedel, Will Deacon,
Robin Murphy, Alex Williamson, Jaroslav Kysela, Takashi Iwai,
open list:DRM DRIVERS, open list, open list:INTEL IOMMU (VT-d),
open list:PCI SUBSYSTEM, open list:VFIO DRIVER, open list:SOUND,
Daniel Dadap, Mario Limonciello, Simona Vetter, Bjorn Helgaas
From: Mario Limonciello <mario.limonciello@amd.com>
The inline pci_is_display() helper does the same thing. Use it.
Acked-by: Alex Williamson <alex.williamson@redhat.com>
Reviewed-by: Daniel Dadap <ddadap@nvidia.com>
Reviewed-by: Simona Vetter <simona.vetter@ffwll.ch>
Suggested-by: Bjorn Helgaas <helgaas@kernel.org>
Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
---
drivers/vfio/pci/vfio_pci_igd.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/drivers/vfio/pci/vfio_pci_igd.c b/drivers/vfio/pci/vfio_pci_igd.c
index ef490a4545f48..988b6919c2c31 100644
--- a/drivers/vfio/pci/vfio_pci_igd.c
+++ b/drivers/vfio/pci/vfio_pci_igd.c
@@ -437,8 +437,7 @@ static int vfio_pci_igd_cfg_init(struct vfio_pci_core_device *vdev)
bool vfio_pci_is_intel_display(struct pci_dev *pdev)
{
- return (pdev->vendor == PCI_VENDOR_ID_INTEL) &&
- ((pdev->class >> 16) == PCI_BASE_CLASS_DISPLAY);
+ return (pdev->vendor == PCI_VENDOR_ID_INTEL) && pci_is_display(pdev);
}
int vfio_pci_igd_init(struct vfio_pci_core_device *vdev)
--
2.43.0
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH v6 3/9] vga_switcheroo: Use pci_is_display()
2025-06-27 4:30 [PATCH v6 0/9] Adjust fbcon console device detection Mario Limonciello
2025-06-27 4:31 ` [PATCH v6 1/9] PCI: Add helper for checking if a PCI device is a display controller Mario Limonciello
2025-06-27 4:31 ` [PATCH v6 2/9] vfio/pci: Use pci_is_display() Mario Limonciello
@ 2025-06-27 4:31 ` Mario Limonciello
2025-06-27 4:31 ` [PATCH v6 4/9] iommu/vt-d: " Mario Limonciello
` (5 subsequent siblings)
8 siblings, 0 replies; 18+ messages in thread
From: Mario Limonciello @ 2025-06-27 4:31 UTC (permalink / raw)
To: Bjorn Helgaas
Cc: Alex Deucher, Christian König, David Airlie, Simona Vetter,
Lukas Wunner, Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann,
David Woodhouse, Lu Baolu, Joerg Roedel, Will Deacon,
Robin Murphy, Alex Williamson, Jaroslav Kysela, Takashi Iwai,
open list:DRM DRIVERS, open list, open list:INTEL IOMMU (VT-d),
open list:PCI SUBSYSTEM, open list:VFIO DRIVER, open list:SOUND,
Daniel Dadap, Mario Limonciello, Simona Vetter, Bjorn Helgaas
From: Mario Limonciello <mario.limonciello@amd.com>
The inline pci_is_display() helper does the same thing. Use it.
Reviewed-by: Daniel Dadap <ddadap@nvidia.com>
Reviewed-by: Simona Vetter <simona.vetter@ffwll.ch>
Suggested-by: Bjorn Helgaas <helgaas@kernel.org>
Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
---
drivers/gpu/vga/vga_switcheroo.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/gpu/vga/vga_switcheroo.c b/drivers/gpu/vga/vga_switcheroo.c
index 18f2c92beff8e..68e45a26e85f7 100644
--- a/drivers/gpu/vga/vga_switcheroo.c
+++ b/drivers/gpu/vga/vga_switcheroo.c
@@ -437,7 +437,7 @@ find_active_client(struct list_head *head)
*/
bool vga_switcheroo_client_probe_defer(struct pci_dev *pdev)
{
- if ((pdev->class >> 16) == PCI_BASE_CLASS_DISPLAY) {
+ if (pci_is_display(pdev)) {
/*
* apple-gmux is needed on pre-retina MacBook Pro
* to probe the panel if pdev is the inactive GPU.
--
2.43.0
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH v6 4/9] iommu/vt-d: Use pci_is_display()
2025-06-27 4:30 [PATCH v6 0/9] Adjust fbcon console device detection Mario Limonciello
` (2 preceding siblings ...)
2025-06-27 4:31 ` [PATCH v6 3/9] vga_switcheroo: " Mario Limonciello
@ 2025-06-27 4:31 ` Mario Limonciello
2025-06-27 4:31 ` [PATCH v6 5/9] ALSA: hda: " Mario Limonciello
` (4 subsequent siblings)
8 siblings, 0 replies; 18+ messages in thread
From: Mario Limonciello @ 2025-06-27 4:31 UTC (permalink / raw)
To: Bjorn Helgaas
Cc: Alex Deucher, Christian König, David Airlie, Simona Vetter,
Lukas Wunner, Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann,
David Woodhouse, Lu Baolu, Joerg Roedel, Will Deacon,
Robin Murphy, Alex Williamson, Jaroslav Kysela, Takashi Iwai,
open list:DRM DRIVERS, open list, open list:INTEL IOMMU (VT-d),
open list:PCI SUBSYSTEM, open list:VFIO DRIVER, open list:SOUND,
Daniel Dadap, Mario Limonciello, Simona Vetter, Bjorn Helgaas
From: Mario Limonciello <mario.limonciello@amd.com>
The inline pci_is_display() helper does the same thing. Use it.
Reviewed-by: Lu Baolu <baolu.lu@linux.intel.com>
Reviewed-by: Daniel Dadap <ddadap@nvidia.com>
Reviewed-by: Simona Vetter <simona.vetter@ffwll.ch>
Suggested-by: Bjorn Helgaas <helgaas@kernel.org>
Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
---
drivers/iommu/intel/iommu.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/iommu/intel/iommu.c b/drivers/iommu/intel/iommu.c
index 7aa3932251b2f..17267cd476ce7 100644
--- a/drivers/iommu/intel/iommu.c
+++ b/drivers/iommu/intel/iommu.c
@@ -34,7 +34,7 @@
#define ROOT_SIZE VTD_PAGE_SIZE
#define CONTEXT_SIZE VTD_PAGE_SIZE
-#define IS_GFX_DEVICE(pdev) ((pdev->class >> 16) == PCI_BASE_CLASS_DISPLAY)
+#define IS_GFX_DEVICE(pdev) pci_is_display(pdev)
#define IS_USB_DEVICE(pdev) ((pdev->class >> 8) == PCI_CLASS_SERIAL_USB)
#define IS_ISA_DEVICE(pdev) ((pdev->class >> 8) == PCI_CLASS_BRIDGE_ISA)
#define IS_AZALIA(pdev) ((pdev)->vendor == 0x8086 && (pdev)->device == 0x3a3e)
--
2.43.0
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH v6 5/9] ALSA: hda: Use pci_is_display()
2025-06-27 4:30 [PATCH v6 0/9] Adjust fbcon console device detection Mario Limonciello
` (3 preceding siblings ...)
2025-06-27 4:31 ` [PATCH v6 4/9] iommu/vt-d: " Mario Limonciello
@ 2025-06-27 4:31 ` Mario Limonciello
2025-06-27 4:31 ` [PATCH v6 6/9] Fix access to video_is_primary_device() when compiled without CONFIG_VIDEO Mario Limonciello
` (3 subsequent siblings)
8 siblings, 0 replies; 18+ messages in thread
From: Mario Limonciello @ 2025-06-27 4:31 UTC (permalink / raw)
To: Bjorn Helgaas
Cc: Alex Deucher, Christian König, David Airlie, Simona Vetter,
Lukas Wunner, Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann,
David Woodhouse, Lu Baolu, Joerg Roedel, Will Deacon,
Robin Murphy, Alex Williamson, Jaroslav Kysela, Takashi Iwai,
open list:DRM DRIVERS, open list, open list:INTEL IOMMU (VT-d),
open list:PCI SUBSYSTEM, open list:VFIO DRIVER, open list:SOUND,
Daniel Dadap, Mario Limonciello, Takashi Iwai, Simona Vetter,
Bjorn Helgaas
From: Mario Limonciello <mario.limonciello@amd.com>
The inline pci_is_display() helper does the same thing. Use it.
Reviewed-by: Takashi Iwai <tiwai@suse.de>
Reviewed-by: Daniel Dadap <ddadap@nvidia.com>
Reviewed-by: Simona Vetter <simona.vetter@ffwll.ch>
Suggested-by: Bjorn Helgaas <helgaas@kernel.org>
Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
---
sound/hda/hdac_i915.c | 2 +-
sound/pci/hda/hda_intel.c | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/sound/hda/hdac_i915.c b/sound/hda/hdac_i915.c
index e9425213320ea..44438c799f957 100644
--- a/sound/hda/hdac_i915.c
+++ b/sound/hda/hdac_i915.c
@@ -155,7 +155,7 @@ static int i915_gfx_present(struct pci_dev *hdac_pci)
for_each_pci_dev(display_dev) {
if (display_dev->vendor != PCI_VENDOR_ID_INTEL ||
- (display_dev->class >> 16) != PCI_BASE_CLASS_DISPLAY)
+ !pci_is_display(display_dev))
continue;
if (pci_match_id(denylist, display_dev))
diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c
index 439cf1bda6e66..75badb5c69b8e 100644
--- a/sound/pci/hda/hda_intel.c
+++ b/sound/pci/hda/hda_intel.c
@@ -1465,7 +1465,7 @@ static struct pci_dev *get_bound_vga(struct pci_dev *pci)
* the dGPU is the one who is involved in
* vgaswitcheroo.
*/
- if (((p->class >> 16) == PCI_BASE_CLASS_DISPLAY) &&
+ if (pci_is_display(p) &&
(atpx_present() || apple_gmux_detect(NULL, NULL)))
return p;
pci_dev_put(p);
@@ -1477,7 +1477,7 @@ static struct pci_dev *get_bound_vga(struct pci_dev *pci)
p = pci_get_domain_bus_and_slot(pci_domain_nr(pci->bus),
pci->bus->number, 0);
if (p) {
- if ((p->class >> 16) == PCI_BASE_CLASS_DISPLAY)
+ if (pci_is_display(p))
return p;
pci_dev_put(p);
}
--
2.43.0
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH v6 6/9] Fix access to video_is_primary_device() when compiled without CONFIG_VIDEO
2025-06-27 4:30 [PATCH v6 0/9] Adjust fbcon console device detection Mario Limonciello
` (4 preceding siblings ...)
2025-06-27 4:31 ` [PATCH v6 5/9] ALSA: hda: " Mario Limonciello
@ 2025-06-27 4:31 ` Mario Limonciello
2025-06-27 4:31 ` [PATCH v6 7/9] PCI/VGA: Replace vga_is_firmware_default() with a screen info check Mario Limonciello
` (2 subsequent siblings)
8 siblings, 0 replies; 18+ messages in thread
From: Mario Limonciello @ 2025-06-27 4:31 UTC (permalink / raw)
To: Bjorn Helgaas
Cc: Alex Deucher, Christian König, David Airlie, Simona Vetter,
Lukas Wunner, Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann,
David Woodhouse, Lu Baolu, Joerg Roedel, Will Deacon,
Robin Murphy, Alex Williamson, Jaroslav Kysela, Takashi Iwai,
open list:DRM DRIVERS, open list, open list:INTEL IOMMU (VT-d),
open list:PCI SUBSYSTEM, open list:VFIO DRIVER, open list:SOUND,
Daniel Dadap, Mario Limonciello, kernel test robot
From: Mario Limonciello <mario.limonciello@amd.com>
When compiled without CONFIG_VIDEO the architecture specific
implementations of video_is_primary_device() include prototypes and
assume that video-common.c will be linked. Guard against this so that the
fallback inline implementation that returns false will be used when
compiled without CONFIG_VIDEO.
Acked-by: Thomas Zimmermann <tzimmermann@suse.de>
Reported-by: kernel test robot <lkp@intel.com>
Closes: https://lore.kernel.org/oe-kbuild-all/202506221312.49Fy1aNA-lkp@intel.com/
Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
---
v5:
* add tag
v4:
* new patch
---
arch/parisc/include/asm/video.h | 2 +-
arch/sparc/include/asm/video.h | 2 ++
arch/x86/include/asm/video.h | 2 ++
3 files changed, 5 insertions(+), 1 deletion(-)
diff --git a/arch/parisc/include/asm/video.h b/arch/parisc/include/asm/video.h
index c5dff3223194a..a9d50ebd6e769 100644
--- a/arch/parisc/include/asm/video.h
+++ b/arch/parisc/include/asm/video.h
@@ -6,7 +6,7 @@
struct device;
-#if defined(CONFIG_STI_CORE)
+#if defined(CONFIG_STI_CORE) && defined(CONFIG_VIDEO)
bool video_is_primary_device(struct device *dev);
#define video_is_primary_device video_is_primary_device
#endif
diff --git a/arch/sparc/include/asm/video.h b/arch/sparc/include/asm/video.h
index a6f48f52db584..773717b6d4914 100644
--- a/arch/sparc/include/asm/video.h
+++ b/arch/sparc/include/asm/video.h
@@ -19,8 +19,10 @@ static inline pgprot_t pgprot_framebuffer(pgprot_t prot,
#define pgprot_framebuffer pgprot_framebuffer
#endif
+#ifdef CONFIG_VIDEO
bool video_is_primary_device(struct device *dev);
#define video_is_primary_device video_is_primary_device
+#endif
static inline void fb_memcpy_fromio(void *to, const volatile void __iomem *from, size_t n)
{
diff --git a/arch/x86/include/asm/video.h b/arch/x86/include/asm/video.h
index 0950c9535fae9..08ec328203ef8 100644
--- a/arch/x86/include/asm/video.h
+++ b/arch/x86/include/asm/video.h
@@ -13,8 +13,10 @@ pgprot_t pgprot_framebuffer(pgprot_t prot,
unsigned long offset);
#define pgprot_framebuffer pgprot_framebuffer
+#ifdef CONFIG_VIDEO
bool video_is_primary_device(struct device *dev);
#define video_is_primary_device video_is_primary_device
+#endif
#include <asm-generic/video.h>
--
2.43.0
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH v6 7/9] PCI/VGA: Replace vga_is_firmware_default() with a screen info check
2025-06-27 4:30 [PATCH v6 0/9] Adjust fbcon console device detection Mario Limonciello
` (5 preceding siblings ...)
2025-06-27 4:31 ` [PATCH v6 6/9] Fix access to video_is_primary_device() when compiled without CONFIG_VIDEO Mario Limonciello
@ 2025-06-27 4:31 ` Mario Limonciello
2025-06-27 4:31 ` [PATCH v6 8/9] fbcon: Use screen info to find primary device Mario Limonciello
2025-06-27 4:31 ` [PATCH v6 9/9] PCI: Add a new 'boot_display' attribute Mario Limonciello
8 siblings, 0 replies; 18+ messages in thread
From: Mario Limonciello @ 2025-06-27 4:31 UTC (permalink / raw)
To: Bjorn Helgaas
Cc: Alex Deucher, Christian König, David Airlie, Simona Vetter,
Lukas Wunner, Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann,
David Woodhouse, Lu Baolu, Joerg Roedel, Will Deacon,
Robin Murphy, Alex Williamson, Jaroslav Kysela, Takashi Iwai,
open list:DRM DRIVERS, open list, open list:INTEL IOMMU (VT-d),
open list:PCI SUBSYSTEM, open list:VFIO DRIVER, open list:SOUND,
Daniel Dadap, Mario Limonciello
From: Mario Limonciello <mario.limonciello@amd.com>
vga_is_firmware_default() checks firmware resources to find the owner
framebuffer resources to find the firmware PCI device. This is an
open coded implementation of screen_info_pci_dev(). Switch to using
screen_info_pci_dev() instead.
Acked-by: Bjorn Helgaas <bhelgaas@google.com>
Suggested-by: Thomas Zimmermann <tzimmermann@suse.de>
Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
---
v6:
* fix lkp robot error
v5:
* split from next patch
---
drivers/pci/vgaarb.c | 31 +++++--------------------------
1 file changed, 5 insertions(+), 26 deletions(-)
diff --git a/drivers/pci/vgaarb.c b/drivers/pci/vgaarb.c
index 78748e8d2dbae..b58f94ee48916 100644
--- a/drivers/pci/vgaarb.c
+++ b/drivers/pci/vgaarb.c
@@ -556,34 +556,13 @@ EXPORT_SYMBOL(vga_put);
static bool vga_is_firmware_default(struct pci_dev *pdev)
{
-#if defined(CONFIG_X86)
- u64 base = screen_info.lfb_base;
- u64 size = screen_info.lfb_size;
- struct resource *r;
- u64 limit;
+#ifdef CONFIG_SCREEN_INFO
+ struct screen_info *si = &screen_info;
- /* Select the device owning the boot framebuffer if there is one */
-
- if (screen_info.capabilities & VIDEO_CAPABILITY_64BIT_BASE)
- base |= (u64)screen_info.ext_lfb_base << 32;
-
- limit = base + size;
-
- /* Does firmware framebuffer belong to us? */
- pci_dev_for_each_resource(pdev, r) {
- if (resource_type(r) != IORESOURCE_MEM)
- continue;
-
- if (!r->start || !r->end)
- continue;
-
- if (base < r->start || limit >= r->end)
- continue;
-
- return true;
- }
-#endif
+ return pdev == screen_info_pci_dev(si);
+#else
return false;
+#endif
}
static bool vga_arb_integrated_gpu(struct device *dev)
--
2.43.0
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH v6 8/9] fbcon: Use screen info to find primary device
2025-06-27 4:30 [PATCH v6 0/9] Adjust fbcon console device detection Mario Limonciello
` (6 preceding siblings ...)
2025-06-27 4:31 ` [PATCH v6 7/9] PCI/VGA: Replace vga_is_firmware_default() with a screen info check Mario Limonciello
@ 2025-06-27 4:31 ` Mario Limonciello
2025-06-27 6:51 ` Thomas Zimmermann
2025-06-27 4:31 ` [PATCH v6 9/9] PCI: Add a new 'boot_display' attribute Mario Limonciello
8 siblings, 1 reply; 18+ messages in thread
From: Mario Limonciello @ 2025-06-27 4:31 UTC (permalink / raw)
To: Bjorn Helgaas
Cc: Alex Deucher, Christian König, David Airlie, Simona Vetter,
Lukas Wunner, Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann,
David Woodhouse, Lu Baolu, Joerg Roedel, Will Deacon,
Robin Murphy, Alex Williamson, Jaroslav Kysela, Takashi Iwai,
open list:DRM DRIVERS, open list, open list:INTEL IOMMU (VT-d),
open list:PCI SUBSYSTEM, open list:VFIO DRIVER, open list:SOUND,
Daniel Dadap, Mario Limonciello
From: Mario Limonciello <mario.limonciello@amd.com>
On systems with non VGA GPUs fbcon can't find the primary GPU because
video_is_primary_device() only checks the VGA arbiter.
Add a screen info check to video_is_primary_device() so that callers
can get accurate data on such systems.
Suggested-by: Thomas Zimmermann <tzimmermann@suse.de>
Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
---
v5:
* Only change video-common.c
v4:
* use helper
---
arch/x86/video/video-common.c | 13 ++++++++++++-
1 file changed, 12 insertions(+), 1 deletion(-)
diff --git a/arch/x86/video/video-common.c b/arch/x86/video/video-common.c
index 81fc97a2a837a..917568e4d7fb1 100644
--- a/arch/x86/video/video-common.c
+++ b/arch/x86/video/video-common.c
@@ -9,6 +9,7 @@
#include <linux/module.h>
#include <linux/pci.h>
+#include <linux/screen_info.h>
#include <linux/vgaarb.h>
#include <asm/video.h>
@@ -27,6 +28,7 @@ EXPORT_SYMBOL(pgprot_framebuffer);
bool video_is_primary_device(struct device *dev)
{
+ struct screen_info *si = &screen_info;
struct pci_dev *pdev;
if (!dev_is_pci(dev))
@@ -34,7 +36,16 @@ bool video_is_primary_device(struct device *dev)
pdev = to_pci_dev(dev);
- return (pdev == vga_default_device());
+ if (!pci_is_display(pdev))
+ return false;
+
+ if (pdev == vga_default_device())
+ return true;
+
+ if (pdev == screen_info_pci_dev(si))
+ return true;
+
+ return false;
}
EXPORT_SYMBOL(video_is_primary_device);
--
2.43.0
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH v6 9/9] PCI: Add a new 'boot_display' attribute
2025-06-27 4:30 [PATCH v6 0/9] Adjust fbcon console device detection Mario Limonciello
` (7 preceding siblings ...)
2025-06-27 4:31 ` [PATCH v6 8/9] fbcon: Use screen info to find primary device Mario Limonciello
@ 2025-06-27 4:31 ` Mario Limonciello
2025-06-27 7:07 ` Thomas Zimmermann
` (2 more replies)
8 siblings, 3 replies; 18+ messages in thread
From: Mario Limonciello @ 2025-06-27 4:31 UTC (permalink / raw)
To: Bjorn Helgaas
Cc: Alex Deucher, Christian König, David Airlie, Simona Vetter,
Lukas Wunner, Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann,
David Woodhouse, Lu Baolu, Joerg Roedel, Will Deacon,
Robin Murphy, Alex Williamson, Jaroslav Kysela, Takashi Iwai,
open list:DRM DRIVERS, open list, open list:INTEL IOMMU (VT-d),
open list:PCI SUBSYSTEM, open list:VFIO DRIVER, open list:SOUND,
Daniel Dadap, Mario Limonciello
From: Mario Limonciello <mario.limonciello@amd.com>
On systems with multiple GPUs there can be uncertainty which GPU is the
primary one used to drive the display at bootup. In order to disambiguate
this add a new sysfs attribute 'boot_display' that uses the output of
video_is_primary_device() to populate whether a PCI device was used for
driving the display.
Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
---
v6:
* Only show for the device that is boot display
* Only create after PCI device sysfs files are initialized to ensure
that resources are ready.
v4:
* new patch
---
Documentation/ABI/testing/sysfs-bus-pci | 8 +++++
drivers/pci/pci-sysfs.c | 46 +++++++++++++++++++++++++
2 files changed, 54 insertions(+)
diff --git a/Documentation/ABI/testing/sysfs-bus-pci b/Documentation/ABI/testing/sysfs-bus-pci
index 69f952fffec72..8b455b1a58852 100644
--- a/Documentation/ABI/testing/sysfs-bus-pci
+++ b/Documentation/ABI/testing/sysfs-bus-pci
@@ -612,3 +612,11 @@ Description:
# ls doe_features
0001:01 0001:02 doe_discovery
+
+What: /sys/bus/pci/devices/.../boot_display
+Date: October 2025
+Contact: Linux PCI developers <linux-pci@vger.kernel.org>
+Description:
+ This file indicates the device was used as a boot
+ display. If the device was used as the boot display, the file
+ will be present and contain "1".
diff --git a/drivers/pci/pci-sysfs.c b/drivers/pci/pci-sysfs.c
index 268c69daa4d57..cc766461de1da 100644
--- a/drivers/pci/pci-sysfs.c
+++ b/drivers/pci/pci-sysfs.c
@@ -30,6 +30,7 @@
#include <linux/msi.h>
#include <linux/of.h>
#include <linux/aperture.h>
+#include <asm/video.h>
#include "pci.h"
#ifndef ARCH_PCI_DEV_GROUPS
@@ -679,6 +680,13 @@ const struct attribute_group *pcibus_groups[] = {
NULL,
};
+static ssize_t boot_display_show(struct device *dev, struct device_attribute *attr,
+ char *buf)
+{
+ return sysfs_emit(buf, "1\n");
+}
+static DEVICE_ATTR_RO(boot_display);
+
static ssize_t boot_vga_show(struct device *dev, struct device_attribute *attr,
char *buf)
{
@@ -1246,6 +1254,37 @@ static int pci_create_attr(struct pci_dev *pdev, int num, int write_combine)
return 0;
}
+/**
+ * pci_create_boot_display_file - create a file in sysfs for @dev
+ * @pdev: dev in question
+ *
+ * Creates a file `boot_display` in sysfs for the PCI device @pdev
+ * if it is the boot display device.
+ */
+static int pci_create_boot_display_file(struct pci_dev *pdev)
+{
+#ifdef CONFIG_VIDEO
+ if (video_is_primary_device(&pdev->dev))
+ return sysfs_create_file(&pdev->dev.kobj, &dev_attr_boot_display.attr);
+#endif
+ return 0;
+}
+
+/**
+ * pci_remove_boot_display_file - remove the boot display file for @dev
+ * @pdev: dev in question
+ *
+ * Removes the file `boot_display` in sysfs for the PCI device @pdev
+ * if it is the boot display device.
+ */
+static void pci_remove_boot_display_file(struct pci_dev *pdev)
+{
+#ifdef CONFIG_VIDEO
+ if (video_is_primary_device(&pdev->dev))
+ sysfs_remove_file(&pdev->dev.kobj, &dev_attr_boot_display.attr);
+#endif
+}
+
/**
* pci_create_resource_files - create resource files in sysfs for @dev
* @pdev: dev in question
@@ -1654,9 +1693,15 @@ static const struct attribute_group pci_dev_resource_resize_group = {
int __must_check pci_create_sysfs_dev_files(struct pci_dev *pdev)
{
+ int retval;
+
if (!sysfs_initialized)
return -EACCES;
+ retval = pci_create_boot_display_file(pdev);
+ if (retval)
+ return retval;
+
return pci_create_resource_files(pdev);
}
@@ -1671,6 +1716,7 @@ void pci_remove_sysfs_dev_files(struct pci_dev *pdev)
if (!sysfs_initialized)
return;
+ pci_remove_boot_display_file(pdev);
pci_remove_resource_files(pdev);
}
--
2.43.0
^ permalink raw reply related [flat|nested] 18+ messages in thread
* Re: [PATCH v6 8/9] fbcon: Use screen info to find primary device
2025-06-27 4:31 ` [PATCH v6 8/9] fbcon: Use screen info to find primary device Mario Limonciello
@ 2025-06-27 6:51 ` Thomas Zimmermann
0 siblings, 0 replies; 18+ messages in thread
From: Thomas Zimmermann @ 2025-06-27 6:51 UTC (permalink / raw)
To: Mario Limonciello, Bjorn Helgaas
Cc: Alex Deucher, Christian König, David Airlie, Simona Vetter,
Lukas Wunner, Maarten Lankhorst, Maxime Ripard, David Woodhouse,
Lu Baolu, Joerg Roedel, Will Deacon, Robin Murphy,
Alex Williamson, Jaroslav Kysela, Takashi Iwai,
open list:DRM DRIVERS, open list, open list:INTEL IOMMU (VT-d),
open list:PCI SUBSYSTEM, open list:VFIO DRIVER, open list:SOUND,
Daniel Dadap, Mario Limonciello
Hi
Am 27.06.25 um 06:31 schrieb Mario Limonciello:
> From: Mario Limonciello <mario.limonciello@amd.com>
>
> On systems with non VGA GPUs fbcon can't find the primary GPU because
> video_is_primary_device() only checks the VGA arbiter.
>
> Add a screen info check to video_is_primary_device() so that callers
> can get accurate data on such systems.
>
> Suggested-by: Thomas Zimmermann <tzimmermann@suse.de>
> Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
Thanks for sticking with it. This patch is also useful without the sysfs
interface.
Reviewed-by: Thomas Zimmermann <tzimmermann@suse.de>
Best regards
Thomas
> ---
> v5:
> * Only change video-common.c
> v4:
> * use helper
> ---
> arch/x86/video/video-common.c | 13 ++++++++++++-
> 1 file changed, 12 insertions(+), 1 deletion(-)
>
> diff --git a/arch/x86/video/video-common.c b/arch/x86/video/video-common.c
> index 81fc97a2a837a..917568e4d7fb1 100644
> --- a/arch/x86/video/video-common.c
> +++ b/arch/x86/video/video-common.c
> @@ -9,6 +9,7 @@
>
> #include <linux/module.h>
> #include <linux/pci.h>
> +#include <linux/screen_info.h>
> #include <linux/vgaarb.h>
>
> #include <asm/video.h>
> @@ -27,6 +28,7 @@ EXPORT_SYMBOL(pgprot_framebuffer);
>
> bool video_is_primary_device(struct device *dev)
> {
> + struct screen_info *si = &screen_info;
> struct pci_dev *pdev;
>
> if (!dev_is_pci(dev))
> @@ -34,7 +36,16 @@ bool video_is_primary_device(struct device *dev)
>
> pdev = to_pci_dev(dev);
>
> - return (pdev == vga_default_device());
> + if (!pci_is_display(pdev))
> + return false;
> +
> + if (pdev == vga_default_device())
> + return true;
> +
> + if (pdev == screen_info_pci_dev(si))
> + return true;
> +
> + return false;
> }
> EXPORT_SYMBOL(video_is_primary_device);
>
--
--
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Frankenstrasse 146, 90461 Nuernberg, Germany
GF: Ivo Totev, Andrew Myers, Andrew McDonald, Boudien Moerman
HRB 36809 (AG Nuernberg)
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH v6 9/9] PCI: Add a new 'boot_display' attribute
2025-06-27 4:31 ` [PATCH v6 9/9] PCI: Add a new 'boot_display' attribute Mario Limonciello
@ 2025-06-27 7:07 ` Thomas Zimmermann
2025-06-27 15:37 ` Mario Limonciello
2025-06-28 5:28 ` kernel test robot
2025-06-28 14:39 ` kernel test robot
2 siblings, 1 reply; 18+ messages in thread
From: Thomas Zimmermann @ 2025-06-27 7:07 UTC (permalink / raw)
To: Mario Limonciello, Bjorn Helgaas
Cc: Alex Deucher, Christian König, David Airlie, Simona Vetter,
Lukas Wunner, Maarten Lankhorst, Maxime Ripard, David Woodhouse,
Lu Baolu, Joerg Roedel, Will Deacon, Robin Murphy,
Alex Williamson, Jaroslav Kysela, Takashi Iwai,
open list:DRM DRIVERS, open list, open list:INTEL IOMMU (VT-d),
open list:PCI SUBSYSTEM, open list:VFIO DRIVER, open list:SOUND,
Daniel Dadap, Mario Limonciello
Hi
Am 27.06.25 um 06:31 schrieb Mario Limonciello:
> From: Mario Limonciello <mario.limonciello@amd.com>
>
> On systems with multiple GPUs there can be uncertainty which GPU is the
> primary one used to drive the display at bootup. In order to disambiguate
> this add a new sysfs attribute 'boot_display' that uses the output of
> video_is_primary_device() to populate whether a PCI device was used for
> driving the display.
>
> Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
> ---
> v6:
> * Only show for the device that is boot display
> * Only create after PCI device sysfs files are initialized to ensure
> that resources are ready.
> v4:
> * new patch
> ---
> Documentation/ABI/testing/sysfs-bus-pci | 8 +++++
> drivers/pci/pci-sysfs.c | 46 +++++++++++++++++++++++++
The code looks good. Just one more question: could this be added
independently from the PCI bus (at a reasonable cost)? There are other
busses that can host the boot display. Alternatively, we'd add this
attribute per bus as needed.
Best regards
Thomas
> 2 files changed, 54 insertions(+)
>
> diff --git a/Documentation/ABI/testing/sysfs-bus-pci b/Documentation/ABI/testing/sysfs-bus-pci
> index 69f952fffec72..8b455b1a58852 100644
> --- a/Documentation/ABI/testing/sysfs-bus-pci
> +++ b/Documentation/ABI/testing/sysfs-bus-pci
> @@ -612,3 +612,11 @@ Description:
>
> # ls doe_features
> 0001:01 0001:02 doe_discovery
> +
> +What: /sys/bus/pci/devices/.../boot_display
> +Date: October 2025
> +Contact: Linux PCI developers <linux-pci@vger.kernel.org>
> +Description:
> + This file indicates the device was used as a boot
> + display. If the device was used as the boot display, the file
> + will be present and contain "1".
> diff --git a/drivers/pci/pci-sysfs.c b/drivers/pci/pci-sysfs.c
> index 268c69daa4d57..cc766461de1da 100644
> --- a/drivers/pci/pci-sysfs.c
> +++ b/drivers/pci/pci-sysfs.c
> @@ -30,6 +30,7 @@
> #include <linux/msi.h>
> #include <linux/of.h>
> #include <linux/aperture.h>
> +#include <asm/video.h>
> #include "pci.h"
>
> #ifndef ARCH_PCI_DEV_GROUPS
> @@ -679,6 +680,13 @@ const struct attribute_group *pcibus_groups[] = {
> NULL,
> };
>
> +static ssize_t boot_display_show(struct device *dev, struct device_attribute *attr,
> + char *buf)
> +{
> + return sysfs_emit(buf, "1\n");
> +}
> +static DEVICE_ATTR_RO(boot_display);
> +
> static ssize_t boot_vga_show(struct device *dev, struct device_attribute *attr,
> char *buf)
> {
> @@ -1246,6 +1254,37 @@ static int pci_create_attr(struct pci_dev *pdev, int num, int write_combine)
> return 0;
> }
>
> +/**
> + * pci_create_boot_display_file - create a file in sysfs for @dev
> + * @pdev: dev in question
> + *
> + * Creates a file `boot_display` in sysfs for the PCI device @pdev
> + * if it is the boot display device.
> + */
> +static int pci_create_boot_display_file(struct pci_dev *pdev)
> +{
> +#ifdef CONFIG_VIDEO
> + if (video_is_primary_device(&pdev->dev))
> + return sysfs_create_file(&pdev->dev.kobj, &dev_attr_boot_display.attr);
> +#endif
> + return 0;
> +}
> +
> +/**
> + * pci_remove_boot_display_file - remove the boot display file for @dev
> + * @pdev: dev in question
> + *
> + * Removes the file `boot_display` in sysfs for the PCI device @pdev
> + * if it is the boot display device.
> + */
> +static void pci_remove_boot_display_file(struct pci_dev *pdev)
> +{
> +#ifdef CONFIG_VIDEO
> + if (video_is_primary_device(&pdev->dev))
> + sysfs_remove_file(&pdev->dev.kobj, &dev_attr_boot_display.attr);
> +#endif
> +}
> +
> /**
> * pci_create_resource_files - create resource files in sysfs for @dev
> * @pdev: dev in question
> @@ -1654,9 +1693,15 @@ static const struct attribute_group pci_dev_resource_resize_group = {
>
> int __must_check pci_create_sysfs_dev_files(struct pci_dev *pdev)
> {
> + int retval;
> +
> if (!sysfs_initialized)
> return -EACCES;
>
> + retval = pci_create_boot_display_file(pdev);
> + if (retval)
> + return retval;
> +
> return pci_create_resource_files(pdev);
> }
>
> @@ -1671,6 +1716,7 @@ void pci_remove_sysfs_dev_files(struct pci_dev *pdev)
> if (!sysfs_initialized)
> return;
>
> + pci_remove_boot_display_file(pdev);
> pci_remove_resource_files(pdev);
> }
>
--
--
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Frankenstrasse 146, 90461 Nuernberg, Germany
GF: Ivo Totev, Andrew Myers, Andrew McDonald, Boudien Moerman
HRB 36809 (AG Nuernberg)
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH v6 9/9] PCI: Add a new 'boot_display' attribute
2025-06-27 7:07 ` Thomas Zimmermann
@ 2025-06-27 15:37 ` Mario Limonciello
2025-06-30 6:24 ` Thomas Zimmermann
0 siblings, 1 reply; 18+ messages in thread
From: Mario Limonciello @ 2025-06-27 15:37 UTC (permalink / raw)
To: Thomas Zimmermann, Bjorn Helgaas
Cc: Alex Deucher, Christian König, David Airlie, Simona Vetter,
Lukas Wunner, Maarten Lankhorst, Maxime Ripard, David Woodhouse,
Lu Baolu, Joerg Roedel, Will Deacon, Robin Murphy,
Alex Williamson, Jaroslav Kysela, Takashi Iwai,
open list:DRM DRIVERS, open list, open list:INTEL IOMMU (VT-d),
open list:PCI SUBSYSTEM, open list:VFIO DRIVER, open list:SOUND,
Daniel Dadap, Mario Limonciello
On 6/27/2025 2:07 AM, Thomas Zimmermann wrote:
> Hi
>
> Am 27.06.25 um 06:31 schrieb Mario Limonciello:
>> From: Mario Limonciello <mario.limonciello@amd.com>
>>
>> On systems with multiple GPUs there can be uncertainty which GPU is the
>> primary one used to drive the display at bootup. In order to disambiguate
>> this add a new sysfs attribute 'boot_display' that uses the output of
>> video_is_primary_device() to populate whether a PCI device was used for
>> driving the display.
>>
>> Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
>> ---
>> v6:
>> * Only show for the device that is boot display
>> * Only create after PCI device sysfs files are initialized to ensure
>> that resources are ready.
>> v4:
>> * new patch
>> ---
>> Documentation/ABI/testing/sysfs-bus-pci | 8 +++++
>> drivers/pci/pci-sysfs.c | 46 +++++++++++++++++++++++++
>
> The code looks good. Just one more question: could this be added
> independently from the PCI bus (at a reasonable cost)? There are other
> busses that can host the boot display. Alternatively, we'd add this
> attribute per bus as needed.
It depends upon the underlying hardware implementation. On x86 it's
always PCI and so I realized there is a requirement that PCI resources
are setup before screen_info event works.
That is the v5 version of this patch would have had a potential race
condition with userspace where boot_display didn't always show '1' if
userspace read it too quickly.
Other architecture's hardware implementation might have similar problem.
So in summary I think it would be better to do it per-bus. If we
realize there is indeed code duplication we can always move this to a
common helper at that point.
>
> Best regards
> Thomas
>
>> 2 files changed, 54 insertions(+)
>>
>> diff --git a/Documentation/ABI/testing/sysfs-bus-pci b/Documentation/
>> ABI/testing/sysfs-bus-pci
>> index 69f952fffec72..8b455b1a58852 100644
>> --- a/Documentation/ABI/testing/sysfs-bus-pci
>> +++ b/Documentation/ABI/testing/sysfs-bus-pci
>> @@ -612,3 +612,11 @@ Description:
>> # ls doe_features
>> 0001:01 0001:02 doe_discovery
>> +
>> +What: /sys/bus/pci/devices/.../boot_display
>> +Date: October 2025
>> +Contact: Linux PCI developers <linux-pci@vger.kernel.org>
>> +Description:
>> + This file indicates the device was used as a boot
>> + display. If the device was used as the boot display, the file
>> + will be present and contain "1".
>> diff --git a/drivers/pci/pci-sysfs.c b/drivers/pci/pci-sysfs.c
>> index 268c69daa4d57..cc766461de1da 100644
>> --- a/drivers/pci/pci-sysfs.c
>> +++ b/drivers/pci/pci-sysfs.c
>> @@ -30,6 +30,7 @@
>> #include <linux/msi.h>
>> #include <linux/of.h>
>> #include <linux/aperture.h>
>> +#include <asm/video.h>
>> #include "pci.h"
>> #ifndef ARCH_PCI_DEV_GROUPS
>> @@ -679,6 +680,13 @@ const struct attribute_group *pcibus_groups[] = {
>> NULL,
>> };
>> +static ssize_t boot_display_show(struct device *dev, struct
>> device_attribute *attr,
>> + char *buf)
>> +{
>> + return sysfs_emit(buf, "1\n");
>> +}
>> +static DEVICE_ATTR_RO(boot_display);
>> +
>> static ssize_t boot_vga_show(struct device *dev, struct
>> device_attribute *attr,
>> char *buf)
>> {
>> @@ -1246,6 +1254,37 @@ static int pci_create_attr(struct pci_dev
>> *pdev, int num, int write_combine)
>> return 0;
>> }
>> +/**
>> + * pci_create_boot_display_file - create a file in sysfs for @dev
>> + * @pdev: dev in question
>> + *
>> + * Creates a file `boot_display` in sysfs for the PCI device @pdev
>> + * if it is the boot display device.
>> + */
>> +static int pci_create_boot_display_file(struct pci_dev *pdev)
>> +{
>> +#ifdef CONFIG_VIDEO
>> + if (video_is_primary_device(&pdev->dev))
>> + return sysfs_create_file(&pdev->dev.kobj,
>> &dev_attr_boot_display.attr);
>> +#endif
>> + return 0;
>> +}
>> +
>> +/**
>> + * pci_remove_boot_display_file - remove the boot display file for @dev
>> + * @pdev: dev in question
>> + *
>> + * Removes the file `boot_display` in sysfs for the PCI device @pdev
>> + * if it is the boot display device.
>> + */
>> +static void pci_remove_boot_display_file(struct pci_dev *pdev)
>> +{
>> +#ifdef CONFIG_VIDEO
>> + if (video_is_primary_device(&pdev->dev))
>> + sysfs_remove_file(&pdev->dev.kobj, &dev_attr_boot_display.attr);
>> +#endif
>> +}
>> +
>> /**
>> * pci_create_resource_files - create resource files in sysfs for @dev
>> * @pdev: dev in question
>> @@ -1654,9 +1693,15 @@ static const struct attribute_group
>> pci_dev_resource_resize_group = {
>> int __must_check pci_create_sysfs_dev_files(struct pci_dev *pdev)
>> {
>> + int retval;
>> +
>> if (!sysfs_initialized)
>> return -EACCES;
>> + retval = pci_create_boot_display_file(pdev);
>> + if (retval)
>> + return retval;
>> +
>> return pci_create_resource_files(pdev);
>> }
>> @@ -1671,6 +1716,7 @@ void pci_remove_sysfs_dev_files(struct pci_dev
>> *pdev)
>> if (!sysfs_initialized)
>> return;
>> + pci_remove_boot_display_file(pdev);
>> pci_remove_resource_files(pdev);
>> }
>
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH v6 9/9] PCI: Add a new 'boot_display' attribute
2025-06-27 4:31 ` [PATCH v6 9/9] PCI: Add a new 'boot_display' attribute Mario Limonciello
2025-06-27 7:07 ` Thomas Zimmermann
@ 2025-06-28 5:28 ` kernel test robot
2025-06-28 14:39 ` kernel test robot
2 siblings, 0 replies; 18+ messages in thread
From: kernel test robot @ 2025-06-28 5:28 UTC (permalink / raw)
To: Mario Limonciello, Bjorn Helgaas
Cc: oe-kbuild-all, Alex Deucher, Christian König, David Airlie,
Simona Vetter, Lukas Wunner, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Woodhouse, Lu Baolu, Joerg Roedel,
Will Deacon, Robin Murphy, Alex Williamson, Jaroslav Kysela,
Takashi Iwai, dri-devel, linux-kernel,
(open list:INTEL IOMMU (VT-d)), linux-pci, kvm, linux-sound,
Daniel Dadap, Mario Limonciello
Hi Mario,
kernel test robot noticed the following build errors:
[auto build test ERROR on pci/next]
[also build test ERROR on pci/for-linus tiwai-sound/for-next tiwai-sound/for-linus tip/x86/core linus/master v6.16-rc3 next-20250627]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Mario-Limonciello/PCI-Add-helper-for-checking-if-a-PCI-device-is-a-display-controller/20250627-123349
base: https://git.kernel.org/pub/scm/linux/kernel/git/pci/pci.git next
patch link: https://lore.kernel.org/r/20250627043108.3141206-10-superm1%40kernel.org
patch subject: [PATCH v6 9/9] PCI: Add a new 'boot_display' attribute
config: arc-randconfig-001-20250628 (https://download.01.org/0day-ci/archive/20250628/202506281332.JQb144bv-lkp@intel.com/config)
compiler: arc-linux-gcc (GCC) 8.5.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250628/202506281332.JQb144bv-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202506281332.JQb144bv-lkp@intel.com/
All error/warnings (new ones prefixed by >>):
drivers/pci/pci-sysfs.c: In function 'pci_create_sysfs_dev_files':
>> drivers/pci/pci-sysfs.c:1701:11: error: implicit declaration of function 'pci_create_boot_display_file'; did you mean 'pci_create_sysfs_dev_files'? [-Werror=implicit-function-declaration]
retval = pci_create_boot_display_file(pdev);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~
pci_create_sysfs_dev_files
drivers/pci/pci-sysfs.c: In function 'pci_remove_sysfs_dev_files':
>> drivers/pci/pci-sysfs.c:1719:2: error: implicit declaration of function 'pci_remove_boot_display_file'; did you mean 'pci_remove_sysfs_dev_files'? [-Werror=implicit-function-declaration]
pci_remove_boot_display_file(pdev);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~
pci_remove_sysfs_dev_files
In file included from include/linux/pci.h:37,
from drivers/pci/pci-sysfs.c:19:
At top level:
>> include/linux/device.h:199:26: warning: 'dev_attr_boot_display' defined but not used [-Wunused-variable]
struct device_attribute dev_attr_##_name = __ATTR_RO(_name)
^~~~~~~~~
drivers/pci/pci-sysfs.c:688:8: note: in expansion of macro 'DEVICE_ATTR_RO'
static DEVICE_ATTR_RO(boot_display);
^~~~~~~~~~~~~~
cc1: some warnings being treated as errors
vim +1701 drivers/pci/pci-sysfs.c
1693
1694 int __must_check pci_create_sysfs_dev_files(struct pci_dev *pdev)
1695 {
1696 int retval;
1697
1698 if (!sysfs_initialized)
1699 return -EACCES;
1700
> 1701 retval = pci_create_boot_display_file(pdev);
1702 if (retval)
1703 return retval;
1704
1705 return pci_create_resource_files(pdev);
1706 }
1707
1708 /**
1709 * pci_remove_sysfs_dev_files - cleanup PCI specific sysfs files
1710 * @pdev: device whose entries we should free
1711 *
1712 * Cleanup when @pdev is removed from sysfs.
1713 */
1714 void pci_remove_sysfs_dev_files(struct pci_dev *pdev)
1715 {
1716 if (!sysfs_initialized)
1717 return;
1718
> 1719 pci_remove_boot_display_file(pdev);
1720 pci_remove_resource_files(pdev);
1721 }
1722
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH v6 9/9] PCI: Add a new 'boot_display' attribute
2025-06-27 4:31 ` [PATCH v6 9/9] PCI: Add a new 'boot_display' attribute Mario Limonciello
2025-06-27 7:07 ` Thomas Zimmermann
2025-06-28 5:28 ` kernel test robot
@ 2025-06-28 14:39 ` kernel test robot
2 siblings, 0 replies; 18+ messages in thread
From: kernel test robot @ 2025-06-28 14:39 UTC (permalink / raw)
To: Mario Limonciello, Bjorn Helgaas
Cc: llvm, oe-kbuild-all, Alex Deucher, Christian König,
David Airlie, Simona Vetter, Lukas Wunner, Maarten Lankhorst,
Maxime Ripard, Thomas Zimmermann, David Woodhouse, Lu Baolu,
Joerg Roedel, Will Deacon, Robin Murphy, Alex Williamson,
Jaroslav Kysela, Takashi Iwai, dri-devel, linux-kernel,
(open list:INTEL IOMMU (VT-d)), linux-pci, kvm, linux-sound,
Daniel Dadap, Mario Limonciello
Hi Mario,
kernel test robot noticed the following build warnings:
[auto build test WARNING on pci/next]
[also build test WARNING on pci/for-linus tiwai-sound/for-next tiwai-sound/for-linus tip/x86/core linus/master v6.16-rc3 next-20250627]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Mario-Limonciello/PCI-Add-helper-for-checking-if-a-PCI-device-is-a-display-controller/20250627-123349
base: https://git.kernel.org/pub/scm/linux/kernel/git/pci/pci.git next
patch link: https://lore.kernel.org/r/20250627043108.3141206-10-superm1%40kernel.org
patch subject: [PATCH v6 9/9] PCI: Add a new 'boot_display' attribute
config: powerpc-bluestone_defconfig (https://download.01.org/0day-ci/archive/20250628/202506282240.aqA0j5M3-lkp@intel.com/config)
compiler: clang version 21.0.0git (https://github.com/llvm/llvm-project e04c938cc08a90ae60440ce22d072ebc69d67ee8)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250628/202506282240.aqA0j5M3-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202506282240.aqA0j5M3-lkp@intel.com/
All warnings (new ones prefixed by >>):
>> drivers/pci/pci-sysfs.c:688:8: warning: unused variable 'dev_attr_boot_display' [-Wunused-variable]
688 | static DEVICE_ATTR_RO(boot_display);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/device.h:199:26: note: expanded from macro 'DEVICE_ATTR_RO'
199 | struct device_attribute dev_attr_##_name = __ATTR_RO(_name)
| ^~~~~~~~~~~~~~~~
<scratch space>:54:1: note: expanded from here
54 | dev_attr_boot_display
| ^~~~~~~~~~~~~~~~~~~~~
1 warning generated.
vim +/dev_attr_boot_display +688 drivers/pci/pci-sysfs.c
682
683 static ssize_t boot_display_show(struct device *dev, struct device_attribute *attr,
684 char *buf)
685 {
686 return sysfs_emit(buf, "1\n");
687 }
> 688 static DEVICE_ATTR_RO(boot_display);
689
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH v6 9/9] PCI: Add a new 'boot_display' attribute
2025-06-27 15:37 ` Mario Limonciello
@ 2025-06-30 6:24 ` Thomas Zimmermann
2025-06-30 18:37 ` Mario Limonciello
0 siblings, 1 reply; 18+ messages in thread
From: Thomas Zimmermann @ 2025-06-30 6:24 UTC (permalink / raw)
To: Mario Limonciello, Bjorn Helgaas
Cc: Alex Deucher, Christian König, David Airlie, Simona Vetter,
Lukas Wunner, Maarten Lankhorst, Maxime Ripard, David Woodhouse,
Lu Baolu, Joerg Roedel, Will Deacon, Robin Murphy,
Alex Williamson, Jaroslav Kysela, Takashi Iwai,
open list:DRM DRIVERS, open list, open list:INTEL IOMMU (VT-d),
open list:PCI SUBSYSTEM, open list:VFIO DRIVER, open list:SOUND,
Daniel Dadap, Mario Limonciello
Hi
Am 27.06.25 um 17:37 schrieb Mario Limonciello:
> On 6/27/2025 2:07 AM, Thomas Zimmermann wrote:
>> Hi
>>
>> Am 27.06.25 um 06:31 schrieb Mario Limonciello:
>>> From: Mario Limonciello <mario.limonciello@amd.com>
>>>
>>> On systems with multiple GPUs there can be uncertainty which GPU is the
>>> primary one used to drive the display at bootup. In order to
>>> disambiguate
>>> this add a new sysfs attribute 'boot_display' that uses the output of
>>> video_is_primary_device() to populate whether a PCI device was used for
>>> driving the display.
>>>
>>> Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
>>> ---
>>> v6:
>>> * Only show for the device that is boot display
>>> * Only create after PCI device sysfs files are initialized to ensure
>>> that resources are ready.
>>> v4:
>>> * new patch
>>> ---
>>> Documentation/ABI/testing/sysfs-bus-pci | 8 +++++
>>> drivers/pci/pci-sysfs.c | 46
>>> +++++++++++++++++++++++++
>>
>> The code looks good. Just one more question: could this be added
>> independently from the PCI bus (at a reasonable cost)? There are
>> other busses that can host the boot display. Alternatively, we'd add
>> this attribute per bus as needed.
>
> It depends upon the underlying hardware implementation. On x86 it's
> always PCI and so I realized there is a requirement that PCI resources
> are setup before screen_info event works.
>
> That is the v5 version of this patch would have had a potential race
> condition with userspace where boot_display didn't always show '1' if
> userspace read it too quickly.
>
> Other architecture's hardware implementation might have similar problem.
>
> So in summary I think it would be better to do it per-bus. If we
> realize there is indeed code duplication we can always move this to a
> common helper at that point.
Ok, makes sense. With the kernel test robot's issues fixed:
Reviewed-by: Thomas Zimmermann <tzimmermann@suse.de>
I guess that interface also needs some sort of OK from user-space devs?
Best regards
Thomas
>
>>
>> Best regards
>> Thomas
>>
>>> 2 files changed, 54 insertions(+)
>>>
>>> diff --git a/Documentation/ABI/testing/sysfs-bus-pci
>>> b/Documentation/ ABI/testing/sysfs-bus-pci
>>> index 69f952fffec72..8b455b1a58852 100644
>>> --- a/Documentation/ABI/testing/sysfs-bus-pci
>>> +++ b/Documentation/ABI/testing/sysfs-bus-pci
>>> @@ -612,3 +612,11 @@ Description:
>>> # ls doe_features
>>> 0001:01 0001:02 doe_discovery
>>> +
>>> +What: /sys/bus/pci/devices/.../boot_display
>>> +Date: October 2025
>>> +Contact: Linux PCI developers <linux-pci@vger.kernel.org>
>>> +Description:
>>> + This file indicates the device was used as a boot
>>> + display. If the device was used as the boot display, the file
>>> + will be present and contain "1".
>>> diff --git a/drivers/pci/pci-sysfs.c b/drivers/pci/pci-sysfs.c
>>> index 268c69daa4d57..cc766461de1da 100644
>>> --- a/drivers/pci/pci-sysfs.c
>>> +++ b/drivers/pci/pci-sysfs.c
>>> @@ -30,6 +30,7 @@
>>> #include <linux/msi.h>
>>> #include <linux/of.h>
>>> #include <linux/aperture.h>
>>> +#include <asm/video.h>
>>> #include "pci.h"
>>> #ifndef ARCH_PCI_DEV_GROUPS
>>> @@ -679,6 +680,13 @@ const struct attribute_group *pcibus_groups[] = {
>>> NULL,
>>> };
>>> +static ssize_t boot_display_show(struct device *dev, struct
>>> device_attribute *attr,
>>> + char *buf)
>>> +{
>>> + return sysfs_emit(buf, "1\n");
>>> +}
>>> +static DEVICE_ATTR_RO(boot_display);
>>> +
>>> static ssize_t boot_vga_show(struct device *dev, struct
>>> device_attribute *attr,
>>> char *buf)
>>> {
>>> @@ -1246,6 +1254,37 @@ static int pci_create_attr(struct pci_dev
>>> *pdev, int num, int write_combine)
>>> return 0;
>>> }
>>> +/**
>>> + * pci_create_boot_display_file - create a file in sysfs for @dev
>>> + * @pdev: dev in question
>>> + *
>>> + * Creates a file `boot_display` in sysfs for the PCI device @pdev
>>> + * if it is the boot display device.
>>> + */
>>> +static int pci_create_boot_display_file(struct pci_dev *pdev)
>>> +{
>>> +#ifdef CONFIG_VIDEO
>>> + if (video_is_primary_device(&pdev->dev))
>>> + return sysfs_create_file(&pdev->dev.kobj,
>>> &dev_attr_boot_display.attr);
>>> +#endif
>>> + return 0;
>>> +}
>>> +
>>> +/**
>>> + * pci_remove_boot_display_file - remove the boot display file for
>>> @dev
>>> + * @pdev: dev in question
>>> + *
>>> + * Removes the file `boot_display` in sysfs for the PCI device @pdev
>>> + * if it is the boot display device.
>>> + */
>>> +static void pci_remove_boot_display_file(struct pci_dev *pdev)
>>> +{
>>> +#ifdef CONFIG_VIDEO
>>> + if (video_is_primary_device(&pdev->dev))
>>> + sysfs_remove_file(&pdev->dev.kobj,
>>> &dev_attr_boot_display.attr);
>>> +#endif
>>> +}
>>> +
>>> /**
>>> * pci_create_resource_files - create resource files in sysfs for
>>> @dev
>>> * @pdev: dev in question
>>> @@ -1654,9 +1693,15 @@ static const struct attribute_group
>>> pci_dev_resource_resize_group = {
>>> int __must_check pci_create_sysfs_dev_files(struct pci_dev *pdev)
>>> {
>>> + int retval;
>>> +
>>> if (!sysfs_initialized)
>>> return -EACCES;
>>> + retval = pci_create_boot_display_file(pdev);
>>> + if (retval)
>>> + return retval;
>>> +
>>> return pci_create_resource_files(pdev);
>>> }
>>> @@ -1671,6 +1716,7 @@ void pci_remove_sysfs_dev_files(struct pci_dev
>>> *pdev)
>>> if (!sysfs_initialized)
>>> return;
>>> + pci_remove_boot_display_file(pdev);
>>> pci_remove_resource_files(pdev);
>>> }
>>
>
--
--
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Frankenstrasse 146, 90461 Nuernberg, Germany
GF: Ivo Totev, Andrew Myers, Andrew McDonald, Boudien Moerman
HRB 36809 (AG Nuernberg)
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH v6 9/9] PCI: Add a new 'boot_display' attribute
2025-06-30 6:24 ` Thomas Zimmermann
@ 2025-06-30 18:37 ` Mario Limonciello
2025-07-02 7:49 ` Thomas Zimmermann
0 siblings, 1 reply; 18+ messages in thread
From: Mario Limonciello @ 2025-06-30 18:37 UTC (permalink / raw)
To: Thomas Zimmermann, David Airlie
Cc: Alex Deucher, Christian König, Simona Vetter, Lukas Wunner,
Maarten Lankhorst, Maxime Ripard, David Woodhouse, Lu Baolu,
Joerg Roedel, Will Deacon, Robin Murphy, Alex Williamson,
Jaroslav Kysela, Takashi Iwai, open list:DRM DRIVERS, open list,
open list:INTEL IOMMU (VT-d), open list:PCI SUBSYSTEM,
open list:VFIO DRIVER, open list:SOUND, Daniel Dadap,
Mario Limonciello, Bjorn Helgaas
On 6/30/2025 2:24 AM, Thomas Zimmermann wrote:
> Hi
>
> Am 27.06.25 um 17:37 schrieb Mario Limonciello:
>> On 6/27/2025 2:07 AM, Thomas Zimmermann wrote:
>>> Hi
>>>
>>> Am 27.06.25 um 06:31 schrieb Mario Limonciello:
>>>> From: Mario Limonciello <mario.limonciello@amd.com>
>>>>
>>>> On systems with multiple GPUs there can be uncertainty which GPU is the
>>>> primary one used to drive the display at bootup. In order to
>>>> disambiguate
>>>> this add a new sysfs attribute 'boot_display' that uses the output of
>>>> video_is_primary_device() to populate whether a PCI device was used for
>>>> driving the display.
>>>>
>>>> Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
>>>> ---
>>>> v6:
>>>> * Only show for the device that is boot display
>>>> * Only create after PCI device sysfs files are initialized to ensure
>>>> that resources are ready.
>>>> v4:
>>>> * new patch
>>>> ---
>>>> Documentation/ABI/testing/sysfs-bus-pci | 8 +++++
>>>> drivers/pci/pci-sysfs.c | 46 +++++++++++++++++++++
>>>> ++++
>>>
>>> The code looks good. Just one more question: could this be added
>>> independently from the PCI bus (at a reasonable cost)? There are
>>> other busses that can host the boot display. Alternatively, we'd add
>>> this attribute per bus as needed.
>>
>> It depends upon the underlying hardware implementation. On x86 it's
>> always PCI and so I realized there is a requirement that PCI resources
>> are setup before screen_info event works.
>>
>> That is the v5 version of this patch would have had a potential race
>> condition with userspace where boot_display didn't always show '1' if
>> userspace read it too quickly.
>>
>> Other architecture's hardware implementation might have similar problem.
>>
>> So in summary I think it would be better to do it per-bus. If we
>> realize there is indeed code duplication we can always move this to a
>> common helper at that point.
>
> Ok, makes sense. With the kernel test robot's issues fixed:
>
> Reviewed-by: Thomas Zimmermann <tzimmermann@suse.de>
Thanks, I've got a fix locally for it.
>
> I guess that interface also needs some sort of OK from user-space devs?
>
Who needs to OK it? I do have MR's for matching userspace
implementations mentioned in the cover letter already.
> Best regards
> Thomas
>
>>
>>>
>>> Best regards
>>> Thomas
>>>
>>>> 2 files changed, 54 insertions(+)
>>>>
>>>> diff --git a/Documentation/ABI/testing/sysfs-bus-pci b/
>>>> Documentation/ ABI/testing/sysfs-bus-pci
>>>> index 69f952fffec72..8b455b1a58852 100644
>>>> --- a/Documentation/ABI/testing/sysfs-bus-pci
>>>> +++ b/Documentation/ABI/testing/sysfs-bus-pci
>>>> @@ -612,3 +612,11 @@ Description:
>>>> # ls doe_features
>>>> 0001:01 0001:02 doe_discovery
>>>> +
>>>> +What: /sys/bus/pci/devices/.../boot_display
>>>> +Date: October 2025
>>>> +Contact: Linux PCI developers <linux-pci@vger.kernel.org>
>>>> +Description:
>>>> + This file indicates the device was used as a boot
>>>> + display. If the device was used as the boot display, the file
>>>> + will be present and contain "1".
>>>> diff --git a/drivers/pci/pci-sysfs.c b/drivers/pci/pci-sysfs.c
>>>> index 268c69daa4d57..cc766461de1da 100644
>>>> --- a/drivers/pci/pci-sysfs.c
>>>> +++ b/drivers/pci/pci-sysfs.c
>>>> @@ -30,6 +30,7 @@
>>>> #include <linux/msi.h>
>>>> #include <linux/of.h>
>>>> #include <linux/aperture.h>
>>>> +#include <asm/video.h>
>>>> #include "pci.h"
>>>> #ifndef ARCH_PCI_DEV_GROUPS
>>>> @@ -679,6 +680,13 @@ const struct attribute_group *pcibus_groups[] = {
>>>> NULL,
>>>> };
>>>> +static ssize_t boot_display_show(struct device *dev, struct
>>>> device_attribute *attr,
>>>> + char *buf)
>>>> +{
>>>> + return sysfs_emit(buf, "1\n");
>>>> +}
>>>> +static DEVICE_ATTR_RO(boot_display);
>>>> +
>>>> static ssize_t boot_vga_show(struct device *dev, struct
>>>> device_attribute *attr,
>>>> char *buf)
>>>> {
>>>> @@ -1246,6 +1254,37 @@ static int pci_create_attr(struct pci_dev
>>>> *pdev, int num, int write_combine)
>>>> return 0;
>>>> }
>>>> +/**
>>>> + * pci_create_boot_display_file - create a file in sysfs for @dev
>>>> + * @pdev: dev in question
>>>> + *
>>>> + * Creates a file `boot_display` in sysfs for the PCI device @pdev
>>>> + * if it is the boot display device.
>>>> + */
>>>> +static int pci_create_boot_display_file(struct pci_dev *pdev)
>>>> +{
>>>> +#ifdef CONFIG_VIDEO
>>>> + if (video_is_primary_device(&pdev->dev))
>>>> + return sysfs_create_file(&pdev->dev.kobj,
>>>> &dev_attr_boot_display.attr);
>>>> +#endif
>>>> + return 0;
>>>> +}
>>>> +
>>>> +/**
>>>> + * pci_remove_boot_display_file - remove the boot display file for
>>>> @dev
>>>> + * @pdev: dev in question
>>>> + *
>>>> + * Removes the file `boot_display` in sysfs for the PCI device @pdev
>>>> + * if it is the boot display device.
>>>> + */
>>>> +static void pci_remove_boot_display_file(struct pci_dev *pdev)
>>>> +{
>>>> +#ifdef CONFIG_VIDEO
>>>> + if (video_is_primary_device(&pdev->dev))
>>>> + sysfs_remove_file(&pdev->dev.kobj,
>>>> &dev_attr_boot_display.attr);
>>>> +#endif
>>>> +}
>>>> +
>>>> /**
>>>> * pci_create_resource_files - create resource files in sysfs for
>>>> @dev
>>>> * @pdev: dev in question
>>>> @@ -1654,9 +1693,15 @@ static const struct attribute_group
>>>> pci_dev_resource_resize_group = {
>>>> int __must_check pci_create_sysfs_dev_files(struct pci_dev *pdev)
>>>> {
>>>> + int retval;
>>>> +
>>>> if (!sysfs_initialized)
>>>> return -EACCES;
>>>> + retval = pci_create_boot_display_file(pdev);
>>>> + if (retval)
>>>> + return retval;
>>>> +
>>>> return pci_create_resource_files(pdev);
>>>> }
>>>> @@ -1671,6 +1716,7 @@ void pci_remove_sysfs_dev_files(struct pci_dev
>>>> *pdev)
>>>> if (!sysfs_initialized)
>>>> return;
>>>> + pci_remove_boot_display_file(pdev);
>>>> pci_remove_resource_files(pdev);
>>>> }
>>>
>>
>
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH v6 9/9] PCI: Add a new 'boot_display' attribute
2025-06-30 18:37 ` Mario Limonciello
@ 2025-07-02 7:49 ` Thomas Zimmermann
0 siblings, 0 replies; 18+ messages in thread
From: Thomas Zimmermann @ 2025-07-02 7:49 UTC (permalink / raw)
To: Mario Limonciello, David Airlie
Cc: Alex Deucher, Christian König, Simona Vetter, Lukas Wunner,
Maarten Lankhorst, Maxime Ripard, David Woodhouse, Lu Baolu,
Joerg Roedel, Will Deacon, Robin Murphy, Alex Williamson,
Jaroslav Kysela, Takashi Iwai, open list:DRM DRIVERS, open list,
open list:INTEL IOMMU (VT-d), open list:PCI SUBSYSTEM,
open list:VFIO DRIVER, open list:SOUND, Daniel Dadap,
Mario Limonciello, Bjorn Helgaas
Hi
Am 30.06.25 um 20:37 schrieb Mario Limonciello:
> On 6/30/2025 2:24 AM, Thomas Zimmermann wrote:
>> Hi
>>
>> Am 27.06.25 um 17:37 schrieb Mario Limonciello:
>>> On 6/27/2025 2:07 AM, Thomas Zimmermann wrote:
>>>> Hi
>>>>
>>>> Am 27.06.25 um 06:31 schrieb Mario Limonciello:
>>>>> From: Mario Limonciello <mario.limonciello@amd.com>
>>>>>
>>>>> On systems with multiple GPUs there can be uncertainty which GPU
>>>>> is the
>>>>> primary one used to drive the display at bootup. In order to
>>>>> disambiguate
>>>>> this add a new sysfs attribute 'boot_display' that uses the output of
>>>>> video_is_primary_device() to populate whether a PCI device was
>>>>> used for
>>>>> driving the display.
>>>>>
>>>>> Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
>>>>> ---
>>>>> v6:
>>>>> * Only show for the device that is boot display
>>>>> * Only create after PCI device sysfs files are initialized to
>>>>> ensure
>>>>> that resources are ready.
>>>>> v4:
>>>>> * new patch
>>>>> ---
>>>>> Documentation/ABI/testing/sysfs-bus-pci | 8 +++++
>>>>> drivers/pci/pci-sysfs.c | 46
>>>>> +++++++++++++++++++++ ++++
>>>>
>>>> The code looks good. Just one more question: could this be added
>>>> independently from the PCI bus (at a reasonable cost)? There are
>>>> other busses that can host the boot display. Alternatively, we'd
>>>> add this attribute per bus as needed.
>>>
>>> It depends upon the underlying hardware implementation. On x86 it's
>>> always PCI and so I realized there is a requirement that PCI
>>> resources are setup before screen_info event works.
>>>
>>> That is the v5 version of this patch would have had a potential race
>>> condition with userspace where boot_display didn't always show '1'
>>> if userspace read it too quickly.
>>>
>>> Other architecture's hardware implementation might have similar
>>> problem.
>>>
>>> So in summary I think it would be better to do it per-bus. If we
>>> realize there is indeed code duplication we can always move this to
>>> a common helper at that point.
>>
>> Ok, makes sense. With the kernel test robot's issues fixed:
>>
>> Reviewed-by: Thomas Zimmermann <tzimmermann@suse.de>
>
> Thanks, I've got a fix locally for it.
>>
>> I guess that interface also needs some sort of OK from user-space devs?
>>
>
> Who needs to OK it? I do have MR's for matching userspace
> implementations mentioned in the cover letter already.
The MRs are the right place. Maybe ask Dave Airlie for a comment. He was
most outspoken against the original approach.
Best regards
Thomas
>
>> Best regards
>> Thomas
>>
>>>
>>>>
>>>> Best regards
>>>> Thomas
>>>>
>>>>> 2 files changed, 54 insertions(+)
>>>>>
>>>>> diff --git a/Documentation/ABI/testing/sysfs-bus-pci b/
>>>>> Documentation/ ABI/testing/sysfs-bus-pci
>>>>> index 69f952fffec72..8b455b1a58852 100644
>>>>> --- a/Documentation/ABI/testing/sysfs-bus-pci
>>>>> +++ b/Documentation/ABI/testing/sysfs-bus-pci
>>>>> @@ -612,3 +612,11 @@ Description:
>>>>> # ls doe_features
>>>>> 0001:01 0001:02 doe_discovery
>>>>> +
>>>>> +What: /sys/bus/pci/devices/.../boot_display
>>>>> +Date: October 2025
>>>>> +Contact: Linux PCI developers <linux-pci@vger.kernel.org>
>>>>> +Description:
>>>>> + This file indicates the device was used as a boot
>>>>> + display. If the device was used as the boot display, the
>>>>> file
>>>>> + will be present and contain "1".
>>>>> diff --git a/drivers/pci/pci-sysfs.c b/drivers/pci/pci-sysfs.c
>>>>> index 268c69daa4d57..cc766461de1da 100644
>>>>> --- a/drivers/pci/pci-sysfs.c
>>>>> +++ b/drivers/pci/pci-sysfs.c
>>>>> @@ -30,6 +30,7 @@
>>>>> #include <linux/msi.h>
>>>>> #include <linux/of.h>
>>>>> #include <linux/aperture.h>
>>>>> +#include <asm/video.h>
>>>>> #include "pci.h"
>>>>> #ifndef ARCH_PCI_DEV_GROUPS
>>>>> @@ -679,6 +680,13 @@ const struct attribute_group *pcibus_groups[]
>>>>> = {
>>>>> NULL,
>>>>> };
>>>>> +static ssize_t boot_display_show(struct device *dev, struct
>>>>> device_attribute *attr,
>>>>> + char *buf)
>>>>> +{
>>>>> + return sysfs_emit(buf, "1\n");
>>>>> +}
>>>>> +static DEVICE_ATTR_RO(boot_display);
>>>>> +
>>>>> static ssize_t boot_vga_show(struct device *dev, struct
>>>>> device_attribute *attr,
>>>>> char *buf)
>>>>> {
>>>>> @@ -1246,6 +1254,37 @@ static int pci_create_attr(struct pci_dev
>>>>> *pdev, int num, int write_combine)
>>>>> return 0;
>>>>> }
>>>>> +/**
>>>>> + * pci_create_boot_display_file - create a file in sysfs for @dev
>>>>> + * @pdev: dev in question
>>>>> + *
>>>>> + * Creates a file `boot_display` in sysfs for the PCI device @pdev
>>>>> + * if it is the boot display device.
>>>>> + */
>>>>> +static int pci_create_boot_display_file(struct pci_dev *pdev)
>>>>> +{
>>>>> +#ifdef CONFIG_VIDEO
>>>>> + if (video_is_primary_device(&pdev->dev))
>>>>> + return sysfs_create_file(&pdev->dev.kobj,
>>>>> &dev_attr_boot_display.attr);
>>>>> +#endif
>>>>> + return 0;
>>>>> +}
>>>>> +
>>>>> +/**
>>>>> + * pci_remove_boot_display_file - remove the boot display file
>>>>> for @dev
>>>>> + * @pdev: dev in question
>>>>> + *
>>>>> + * Removes the file `boot_display` in sysfs for the PCI device @pdev
>>>>> + * if it is the boot display device.
>>>>> + */
>>>>> +static void pci_remove_boot_display_file(struct pci_dev *pdev)
>>>>> +{
>>>>> +#ifdef CONFIG_VIDEO
>>>>> + if (video_is_primary_device(&pdev->dev))
>>>>> + sysfs_remove_file(&pdev->dev.kobj,
>>>>> &dev_attr_boot_display.attr);
>>>>> +#endif
>>>>> +}
>>>>> +
>>>>> /**
>>>>> * pci_create_resource_files - create resource files in sysfs
>>>>> for @dev
>>>>> * @pdev: dev in question
>>>>> @@ -1654,9 +1693,15 @@ static const struct attribute_group
>>>>> pci_dev_resource_resize_group = {
>>>>> int __must_check pci_create_sysfs_dev_files(struct pci_dev *pdev)
>>>>> {
>>>>> + int retval;
>>>>> +
>>>>> if (!sysfs_initialized)
>>>>> return -EACCES;
>>>>> + retval = pci_create_boot_display_file(pdev);
>>>>> + if (retval)
>>>>> + return retval;
>>>>> +
>>>>> return pci_create_resource_files(pdev);
>>>>> }
>>>>> @@ -1671,6 +1716,7 @@ void pci_remove_sysfs_dev_files(struct
>>>>> pci_dev *pdev)
>>>>> if (!sysfs_initialized)
>>>>> return;
>>>>> + pci_remove_boot_display_file(pdev);
>>>>> pci_remove_resource_files(pdev);
>>>>> }
>>>>
>>>
>>
>
--
--
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Frankenstrasse 146, 90461 Nuernberg, Germany
GF: Ivo Totev, Andrew Myers, Andrew McDonald, Boudien Moerman
HRB 36809 (AG Nuernberg)
^ permalink raw reply [flat|nested] 18+ messages in thread
end of thread, other threads:[~2025-07-02 7:49 UTC | newest]
Thread overview: 18+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-06-27 4:30 [PATCH v6 0/9] Adjust fbcon console device detection Mario Limonciello
2025-06-27 4:31 ` [PATCH v6 1/9] PCI: Add helper for checking if a PCI device is a display controller Mario Limonciello
2025-06-27 4:31 ` [PATCH v6 2/9] vfio/pci: Use pci_is_display() Mario Limonciello
2025-06-27 4:31 ` [PATCH v6 3/9] vga_switcheroo: " Mario Limonciello
2025-06-27 4:31 ` [PATCH v6 4/9] iommu/vt-d: " Mario Limonciello
2025-06-27 4:31 ` [PATCH v6 5/9] ALSA: hda: " Mario Limonciello
2025-06-27 4:31 ` [PATCH v6 6/9] Fix access to video_is_primary_device() when compiled without CONFIG_VIDEO Mario Limonciello
2025-06-27 4:31 ` [PATCH v6 7/9] PCI/VGA: Replace vga_is_firmware_default() with a screen info check Mario Limonciello
2025-06-27 4:31 ` [PATCH v6 8/9] fbcon: Use screen info to find primary device Mario Limonciello
2025-06-27 6:51 ` Thomas Zimmermann
2025-06-27 4:31 ` [PATCH v6 9/9] PCI: Add a new 'boot_display' attribute Mario Limonciello
2025-06-27 7:07 ` Thomas Zimmermann
2025-06-27 15:37 ` Mario Limonciello
2025-06-30 6:24 ` Thomas Zimmermann
2025-06-30 18:37 ` Mario Limonciello
2025-07-02 7:49 ` Thomas Zimmermann
2025-06-28 5:28 ` kernel test robot
2025-06-28 14:39 ` kernel test robot
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).