mirror of
				https://review.coreboot.org/flashrom.git
				synced 2025-10-31 21:30:42 +01:00 
			
		
		
		
	pcidev: Move scandev_inclass logic from internal to pcidev
BUG=b:220950271 TEST=```sudo ./flashrom -p internal -r /tmp/bios <snip> 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 <quasisec@google.com> Reviewed-on: https://review.coreboot.org/c/flashrom/+/59277 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Anastasia Klimchuk <aklm@chromium.org>
This commit is contained in:
		 Edward O'Callaghan
					Edward O'Callaghan
				
			
				
					committed by
					
						 Edward O'Callaghan
						Edward O'Callaghan
					
				
			
			
				
	
			
			
			 Edward O'Callaghan
						Edward O'Callaghan
					
				
			
						parent
						
							bc2e3b6b79
						
					
				
				
					commit
					6289508c5b
				
			| @@ -782,7 +782,7 @@ static int via_vt823x_gpio_set(uint8_t gpio, int raise) | |||||||
| 	uint16_t base; | 	uint16_t base; | ||||||
| 	uint8_t val, bit, offset; | 	uint8_t val, bit, offset; | ||||||
|  |  | ||||||
| 	dev = pci_dev_find_vendorclass(0x1106, 0x0601); | 	dev = pcidev_find_vendorclass(0x1106, 0x0601); | ||||||
| 	switch (dev->device_id) { | 	switch (dev->device_id) { | ||||||
| 	case 0x3177:	/* VT8235 */ | 	case 0x3177:	/* VT8235 */ | ||||||
| 	case 0x3227:	/* VT8237/VT8237R */ | 	case 0x3227:	/* VT8237/VT8237R */ | ||||||
| @@ -1073,7 +1073,7 @@ static int nvidia_mcp_gpio_set(int gpio, int raise) | |||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	/* Check for the ISA bridge first. */ | 	/* Check for the ISA bridge first. */ | ||||||
| 	dev = pci_dev_find_vendorclass(0x10DE, 0x0601); | 	dev = pcidev_find_vendorclass(0x10DE, 0x0601); | ||||||
| 	switch (dev->device_id) { | 	switch (dev->device_id) { | ||||||
| 	case 0x0030: /* CK804 */ | 	case 0x0030: /* CK804 */ | ||||||
| 	case 0x0050: /* MCP04 */ | 	case 0x0050: /* MCP04 */ | ||||||
|   | |||||||
| @@ -120,11 +120,11 @@ static struct pci_dev *find_southbridge(uint16_t vendor, const char *name) | |||||||
| { | { | ||||||
| 	struct pci_dev *sbdev; | 	struct pci_dev *sbdev; | ||||||
|  |  | ||||||
| 	sbdev = pci_dev_find_vendorclass(vendor, 0x0601); | 	sbdev = pcidev_find_vendorclass(vendor, 0x0601); | ||||||
| 	if (!sbdev) | 	if (!sbdev) | ||||||
| 		sbdev = pci_dev_find_vendorclass(vendor, 0x0680); | 		sbdev = pcidev_find_vendorclass(vendor, 0x0680); | ||||||
| 	if (!sbdev) | 	if (!sbdev) | ||||||
| 		sbdev = pci_dev_find_vendorclass(vendor, 0x0000); | 		sbdev = pcidev_find_vendorclass(vendor, 0x0000); | ||||||
| 	if (!sbdev) | 	if (!sbdev) | ||||||
| 		msg_perr("No southbridge found for %s!\n", name); | 		msg_perr("No southbridge found for %s!\n", name); | ||||||
| 	if (sbdev) | 	if (sbdev) | ||||||
|   | |||||||
							
								
								
									
										19
									
								
								internal.c
									
									
									
									
									
								
							
							
						
						
									
										19
									
								
								internal.c
									
									
									
									
									
								
							| @@ -34,25 +34,6 @@ int force_boardmismatch = 0; | |||||||
|  |  | ||||||
| enum chipbustype internal_buses_supported = BUS_NONE; | 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_dev *pci_dev_find(uint16_t vendor, uint16_t device) | ||||||
| { | { | ||||||
| 	struct pci_filter filter; | 	struct pci_filter filter; | ||||||
|   | |||||||
| @@ -124,7 +124,7 @@ int mcp6x_spi_init(int want_spi) | |||||||
| 	uint8_t mcp_gpiostate; | 	uint8_t mcp_gpiostate; | ||||||
|  |  | ||||||
| 	/* Look for the SMBus device (SMBus PCI class) */ | 	/* Look for the SMBus device (SMBus PCI class) */ | ||||||
| 	smbusdev = pci_dev_find_vendorclass(0x10de, 0x0c05); | 	smbusdev = pcidev_find_vendorclass(0x10de, 0x0c05); | ||||||
| 	if (!smbusdev) { | 	if (!smbusdev) { | ||||||
| 		if (want_spi) { | 		if (want_spi) { | ||||||
| 			msg_perr("ERROR: SMBus device not found. Not enabling " | 			msg_perr("ERROR: SMBus device not found. Not enabling " | ||||||
|   | |||||||
							
								
								
									
										19
									
								
								pcidev.c
									
									
									
									
									
								
							
							
						
						
									
										19
									
								
								pcidev.c
									
									
									
									
									
								
							| @@ -170,6 +170,25 @@ struct pci_dev *pcidev_getdevfn(struct pci_dev *dev, const int func) | |||||||
| #endif | #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) | static int pcidev_shutdown(void *data) | ||||||
| { | { | ||||||
| 	if (pacc == NULL) { | 	if (pacc == NULL) { | ||||||
|   | |||||||
| @@ -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_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_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_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 | /* rpci_write_* are reversible writes. The original PCI config space register | ||||||
|  * contents will be restored on shutdown. |  * contents will be restored on shutdown. | ||||||
|  * To clone the pci_dev instances internally, the `pacc` global |  * To clone the pci_dev instances internally, the `pacc` global | ||||||
| @@ -260,7 +261,6 @@ extern int superio_count; | |||||||
| #define SUPERIO_VENDOR_WINBOND	0x2 | #define SUPERIO_VENDOR_WINBOND	0x2 | ||||||
| #endif | #endif | ||||||
| #if NEED_PCI == 1 | #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_dev_find(uint16_t vendor, uint16_t device); | ||||||
| struct pci_dev *pci_card_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); | 			      uint16_t card_vendor, uint16_t card_device); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user