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.
Reviewed-by: Thomas Zimmermann <tzimmermann@suse.de>
Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
---
v7:
* fix lkp failure
* Add tag
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..6b1a0ae254d3a 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)
{
@@ -1051,6 +1059,37 @@ void pci_remove_legacy_files(struct pci_bus *b)
}
#endif /* HAVE_PCI_LEGACY */
+/**
+ * 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
+}
+
#if defined(HAVE_PCI_MMAP) || defined(ARCH_GENERIC_PCI_MMAP_RESOURCE)
/**
* pci_mmap_resource - map a PCI resource into user memory space
@@ -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
Hi Mario, On Mon, Jul 14, 2025 at 04:21:46PM -0500, Mario Limonciello wrote: > 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. > > Reviewed-by: Thomas Zimmermann <tzimmermann@suse.de> > Signed-off-by: Mario Limonciello <mario.limonciello@amd.com> > --- > v7: > * fix lkp failure > * Add tag > 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". It would probably be a good idea to define what a "boot display" here is. I get what you mean, but it's pretty vague and could easily be misunderstood. Maxime
On 7/16/25 3:22 AM, Maxime Ripard wrote: > Hi Mario, > > On Mon, Jul 14, 2025 at 04:21:46PM -0500, Mario Limonciello wrote: >> 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. >> >> Reviewed-by: Thomas Zimmermann <tzimmermann@suse.de> >> Signed-off-by: Mario Limonciello <mario.limonciello@amd.com> >> --- >> v7: >> * fix lkp failure >> * Add tag >> 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". > > It would probably be a good idea to define what a "boot display" here > is. I get what you mean, but it's pretty vague and could easily be > misunderstood. > > Maxime Here's my proposal for updated text, can you please bikeshed or propose an alternative? This file indicates that displays connected to the device were used to display the boot sequence. If a display connected to the device was used to display the boot sequence the file will be present and contain "1".
© 2016 - 2025 Red Hat, Inc.