From: Pali Rohár <pali@kernel.org>
Date: Thu, 7 Oct 2021 12:51:00 +0000 (+0200)
Subject: pci: Fix showing bars
X-Git-Tag: v2025.01-rc5-pxa1908~1680^2~4
X-Git-Url: http://git.dujemihanovic.xyz/img/static/gitweb.css?a=commitdiff_plain;h=e6335d3eaafc60b74bd05761b2bf0e57ad429aa7;p=u-boot.git

pci: Fix showing bars

Header type is 7-bit number so properly clear upper 8th bit which
indicates multifunction device.

And do not try to show bars for unsupported header types.

Signed-off-by: Pali Rohár <pali@kernel.org>
Reviewed-by: Stefan Roese <sr@denx.de>
---

diff --git a/cmd/pci.c b/cmd/pci.c
index cfabdc0f30..4a82854db7 100644
--- a/cmd/pci.c
+++ b/cmd/pci.c
@@ -71,10 +71,15 @@ static int pci_bar_show(struct udevice *dev)
 	int prefetchable;
 
 	dm_pci_read_config8(dev, PCI_HEADER_TYPE, &header_type);
+	header_type &= 0x7f;
 
 	if (header_type == PCI_HEADER_TYPE_CARDBUS) {
 		printf("CardBus doesn't support BARs\n");
 		return -ENOSYS;
+	} else if (header_type != PCI_HEADER_TYPE_NORMAL &&
+		   header_type != PCI_HEADER_TYPE_BRIDGE) {
+		printf("unknown header type\n");
+		return -ENOSYS;
 	}
 
 	bar_cnt = (header_type == PCI_HEADER_TYPE_NORMAL) ? 6 : 2;