From 6289508c5bb028fa4f6ed58dfef974302c5616f9 Mon Sep 17 00:00:00 2001 From: Edward O'Callaghan Date: Sat, 26 Feb 2022 11:36:17 +1100 Subject: pcidev: Move scandev_inclass logic from internal to pcidev BUG=b:220950271 TEST=```sudo ./flashrom -p internal -r /tmp/bios Found Programmer flash chip "Opaque flash chip" (16384 kB, Programmer-specific) mapped at physical address 0x0000000000000000. Reading flash... done. ``` Change-Id: I1978e178fb73485f1c5c7e732853522847267cee Signed-off-by: Edward O'Callaghan Reviewed-on: https://review.coreboot.org/c/flashrom/+/59277 Tested-by: build bot (Jenkins) Reviewed-by: Anastasia Klimchuk --- board_enable.c | 4 ++-- chipset_enable.c | 6 +++--- internal.c | 19 ------------------- mcp6x_spi.c | 2 +- pcidev.c | 19 +++++++++++++++++++ programmer.h | 2 +- 6 files changed, 26 insertions(+), 26 deletions(-) diff --git a/board_enable.c b/board_enable.c index 194357a3..0ac522e5 100644 --- a/board_enable.c +++ b/board_enable.c @@ -782,7 +782,7 @@ static int via_vt823x_gpio_set(uint8_t gpio, int raise) uint16_t base; uint8_t val, bit, offset; - dev = pci_dev_find_vendorclass(0x1106, 0x0601); + dev = pcidev_find_vendorclass(0x1106, 0x0601); switch (dev->device_id) { case 0x3177: /* VT8235 */ case 0x3227: /* VT8237/VT8237R */ @@ -1073,7 +1073,7 @@ static int nvidia_mcp_gpio_set(int gpio, int raise) } /* Check for the ISA bridge first. */ - dev = pci_dev_find_vendorclass(0x10DE, 0x0601); + dev = pcidev_find_vendorclass(0x10DE, 0x0601); switch (dev->device_id) { case 0x0030: /* CK804 */ case 0x0050: /* MCP04 */ diff --git a/chipset_enable.c b/chipset_enable.c index d9a1d3a7..d4285a58 100644 --- a/chipset_enable.c +++ b/chipset_enable.c @@ -120,11 +120,11 @@ static struct pci_dev *find_southbridge(uint16_t vendor, const char *name) { struct pci_dev *sbdev; - sbdev = pci_dev_find_vendorclass(vendor, 0x0601); + sbdev = pcidev_find_vendorclass(vendor, 0x0601); if (!sbdev) - sbdev = pci_dev_find_vendorclass(vendor, 0x0680); + sbdev = pcidev_find_vendorclass(vendor, 0x0680); if (!sbdev) - sbdev = pci_dev_find_vendorclass(vendor, 0x0000); + sbdev = pcidev_find_vendorclass(vendor, 0x0000); if (!sbdev) msg_perr("No southbridge found for %s!\n", name); if (sbdev) diff --git a/internal.c b/internal.c index dcb83cdb..7a326fc2 100644 --- a/internal.c +++ b/internal.c @@ -34,25 +34,6 @@ int force_boardmismatch = 0; enum chipbustype internal_buses_supported = BUS_NONE; -struct pci_dev *pci_dev_find_vendorclass(uint16_t vendor, uint16_t devclass) -{ - struct pci_dev *temp = NULL; - struct pci_filter filter; - uint16_t tmp2; - - pci_filter_init(NULL, &filter); - filter.vendor = vendor; - - while ((temp = pcidev_scandev(&filter, temp))) { - /* Read PCI class */ - tmp2 = pci_read_word(temp, 0x0a); - if (tmp2 == devclass) - return temp; - } - - return NULL; -} - struct pci_dev *pci_dev_find(uint16_t vendor, uint16_t device) { struct pci_filter filter; diff --git a/mcp6x_spi.c b/mcp6x_spi.c index 81ef1b51..d136be47 100644 --- a/mcp6x_spi.c +++ b/mcp6x_spi.c @@ -124,7 +124,7 @@ int mcp6x_spi_init(int want_spi) uint8_t mcp_gpiostate; /* Look for the SMBus device (SMBus PCI class) */ - smbusdev = pci_dev_find_vendorclass(0x10de, 0x0c05); + smbusdev = pcidev_find_vendorclass(0x10de, 0x0c05); if (!smbusdev) { if (want_spi) { msg_perr("ERROR: SMBus device not found. Not enabling " diff --git a/pcidev.c b/pcidev.c index 0f8c4e5d..8b8b4788 100644 --- a/pcidev.c +++ b/pcidev.c @@ -170,6 +170,25 @@ struct pci_dev *pcidev_getdevfn(struct pci_dev *dev, const int func) #endif } +struct pci_dev *pcidev_find_vendorclass(uint16_t vendor, uint16_t devclass) +{ + struct pci_dev *temp = NULL; + struct pci_filter filter; + uint16_t tmp2; + + pci_filter_init(NULL, &filter); + filter.vendor = vendor; + + while ((temp = pcidev_scandev(&filter, temp))) { + /* Read PCI class */ + tmp2 = pci_read_word(temp, PCI_CLASS_DEVICE); + if (tmp2 == devclass) + return temp; + } + + return NULL; +} + static int pcidev_shutdown(void *data) { if (pacc == NULL) { diff --git a/programmer.h b/programmer.h index d0e86a46..9305afb8 100644 --- a/programmer.h +++ b/programmer.h @@ -127,6 +127,7 @@ uintptr_t pcidev_readbar(struct pci_dev *dev, int bar); struct pci_dev *pcidev_init(const struct dev_entry *devs, int bar); struct pci_dev *pcidev_scandev(struct pci_filter *filter, struct pci_dev *start); struct pci_dev *pcidev_getdevfn(struct pci_dev *dev, const int func); +struct pci_dev *pcidev_find_vendorclass(uint16_t vendor, uint16_t devclass); /* rpci_write_* are reversible writes. The original PCI config space register * contents will be restored on shutdown. * To clone the pci_dev instances internally, the `pacc` global @@ -260,7 +261,6 @@ extern int superio_count; #define SUPERIO_VENDOR_WINBOND 0x2 #endif #if NEED_PCI == 1 -struct pci_dev *pci_dev_find_vendorclass(uint16_t vendor, uint16_t devclass); struct pci_dev *pci_dev_find(uint16_t vendor, uint16_t device); struct pci_dev *pci_card_find(uint16_t vendor, uint16_t device, uint16_t card_vendor, uint16_t card_device); -- cgit v1.2.3