summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNico Huber <nico.h@gmx.de>2022-05-23 01:45:11 +0200
committerFelix Singer <felixsinger@posteo.net>2022-09-29 17:03:28 +0000
commitd6a50cb8c70464fa0e751a5616cf0f1725d145ac (patch)
tree131c0f24d6fcca977a12e88c2c41826e719febf7
parentbb83de61d14fb3130dd2615e96deee98ad2b04c4 (diff)
downloadflashrom-d6a50cb8c70464fa0e751a5616cf0f1725d145ac.tar.gz
flashrom-d6a50cb8c70464fa0e751a5616cf0f1725d145ac.tar.bz2
flashrom-d6a50cb8c70464fa0e751a5616cf0f1725d145ac.zip
pcidev: Always fetch ident info
As discovered earlier[1], the `vendor_id` and `device_id` fields are not always automatically set. However, we use these fields throughout flash- rom. To not lose track when we actually fetched them, let's always call pci_fill_info(PCI_FILL_IDENT) before returning a `pci_dev` handle. [1] Commit ca2e3bce0 (pcidev.c: populate IDs with pci_fill_info()) Backported to older versions where pcidev handling was much more scattered. Signed-off-by: Nico Huber <nico.h@gmx.de> Change-Id: Iae2511178bec44343cbe902722fdca9eda036059 Ticket: https://ticket.coreboot.org/issues/367 Reviewed-on: https://review.coreboot.org/c/flashrom/+/64573 Reviewed-on: https://review.coreboot.org/c/flashrom/+/67859 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Felix Singer <felixsinger@posteo.net>
-rw-r--r--board_enable.c1
-rw-r--r--internal.c22
2 files changed, 17 insertions, 6 deletions
diff --git a/board_enable.c b/board_enable.c
index 00809f71d..aec69fc6d 100644
--- a/board_enable.c
+++ b/board_enable.c
@@ -1510,6 +1510,7 @@ static int intel_ich_gpio_set(int gpio, int raise)
/* First, look for a known LPC bridge */
for (dev = pacc->devices; dev; dev = dev->next) {
+ pci_fill_info(dev, PCI_FILL_IDENT);
uint16_t device_class;
/* libpci before version 2.2.4 does not store class info. */
device_class = pci_read_word(dev, PCI_CLASS_DEVICE);
diff --git a/internal.c b/internal.c
index 1d6cff6b6..b596c5322 100644
--- a/internal.c
+++ b/internal.c
@@ -25,9 +25,12 @@ struct pci_dev *pci_dev_find_filter(struct pci_filter filter)
{
struct pci_dev *temp;
- for (temp = pacc->devices; temp; temp = temp->next)
- if (pci_filter_match(&filter, temp))
+ for (temp = pacc->devices; temp; temp = temp->next) {
+ if (pci_filter_match(&filter, temp)) {
+ pci_fill_info(temp, PCI_FILL_IDENT);
return temp;
+ }
+ }
return NULL;
}
@@ -45,8 +48,10 @@ struct pci_dev *pci_dev_find_vendorclass(uint16_t vendor, uint16_t devclass)
if (pci_filter_match(&filter, temp)) {
/* Read PCI class */
tmp2 = pci_read_word(temp, 0x0a);
- if (tmp2 == devclass)
+ if (tmp2 == devclass) {
+ pci_fill_info(temp, PCI_FILL_IDENT);
return temp;
+ }
}
return NULL;
@@ -61,9 +66,12 @@ struct pci_dev *pci_dev_find(uint16_t vendor, uint16_t device)
filter.vendor = vendor;
filter.device = device;
- for (temp = pacc->devices; temp; temp = temp->next)
- if (pci_filter_match(&filter, temp))
+ for (temp = pacc->devices; temp; temp = temp->next) {
+ if (pci_filter_match(&filter, temp)) {
+ pci_fill_info(temp, PCI_FILL_IDENT);
return temp;
+ }
+ }
return NULL;
}
@@ -83,8 +91,10 @@ struct pci_dev *pci_card_find(uint16_t vendor, uint16_t device,
if ((card_vendor ==
pci_read_word(temp, PCI_SUBSYSTEM_VENDOR_ID))
&& (card_device ==
- pci_read_word(temp, PCI_SUBSYSTEM_ID)))
+ pci_read_word(temp, PCI_SUBSYSTEM_ID))) {
+ pci_fill_info(temp, PCI_FILL_IDENT);
return temp;
+ }
}
return NULL;