[PATCH 3/4] pci: add pci_is_bridge() helper

Sascha Hauer s.hauer at pengutronix.de
Thu May 21 01:36:57 PDT 2026


Mirror the Linux helper of the same name so callers don't have to
open-code the header-type compare.

Replace the open-coded site in pci_ea_init().

Assisted-by: Claude Opus 4.7
Signed-off-by: Sascha Hauer <s.hauer at pengutronix.de>
---
 drivers/pci/pci.c   |  2 +-
 include/linux/pci.h | 14 ++++++++++++++
 2 files changed, 15 insertions(+), 1 deletion(-)

diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
index 8d18889109..fc00ec2249 100644
--- a/drivers/pci/pci.c
+++ b/drivers/pci/pci.c
@@ -334,7 +334,7 @@ static void pci_ea_init(struct pci_dev *dev)
 	offset = ea + PCI_EA_FIRST_ENT;
 
 	/* Skip DWORD 2 for type 1 functions */
-	if (dev->hdr_type == PCI_HEADER_TYPE_BRIDGE)
+	if (pci_is_bridge(dev))
 		offset += 4;
 
 	/* parse each EA entry */
diff --git a/include/linux/pci.h b/include/linux/pci.h
index f6511e0095..a2dbaf6ec2 100644
--- a/include/linux/pci.h
+++ b/include/linux/pci.h
@@ -123,6 +123,20 @@ struct pci_dev {
 };
 #define	to_pci_dev(d) container_of(d, struct pci_dev, dev)
 
+/**
+ * pci_is_bridge - check if the PCI device is a bridge
+ * @dev: PCI device
+ *
+ * Return true if the PCI device is a bridge of PCI-to-PCI type. Masks the
+ * multi-function flag so a multi-function bridge is still recognised.
+ */
+static inline bool pci_is_bridge(struct pci_dev *dev)
+{
+	u8 type = dev->hdr_type & PCI_HEADER_TYPE_MASK;
+
+	return type == PCI_HEADER_TYPE_BRIDGE;
+}
+
 #define pci_resource_start(dev, bar)	((dev)->resource[(bar)].start)
 #define pci_resource_end(dev, bar)	((dev)->resource[(bar)].end)
 #define pci_resource_flags(dev, bar)	((dev)->resource[(bar)].flags)

-- 
2.47.3




More information about the barebox mailing list