soc/intel: Create common function to check PCH slot
BUG=none TEST=Build and boot to google/taniks. Check dmesg and make sure that there is no regression. Also confirm that there is no change in ACPI _PRT and IO-APCI interrupt assignment. IO-APIC interrupts before and after this patch: 1: IO-APIC 1-edge i8042 8: IO-APIC 8-edge rtc0 9: IO-APIC 9-fasteoi acpi 14: IO-APIC 14-fasteoi INTC1055:00 23: IO-APIC 23-fasteoi idma64.5, ttyS0 37: IO-APIC 37-fasteoi idma64.0, i2c_designware.0 38: IO-APIC 38-fasteoi idma64.1, i2c_designware.1 40: IO-APIC 40-fasteoi idma64.2, i2c_designware.2 41: IO-APIC 41-fasteoi idma64.3, i2c_designware.3 42: IO-APIC 42-fasteoi idma64.4, i2c_designware.4 45: IO-APIC 45-fasteoi idma64.6, pxa2xx-spi.6 77: IO-APIC 77-edge cr50_i2c 100: IO-APIC 100-fasteoi ELAN0000:00 103: IO-APIC 103-fasteoi chromeos-ec _PRT before and after this patch: Package (0x04) ==> 0x0001FFFF, 0x00, 0x00, 0x00000010 Package (0x04) ==> 0x0002FFFF, 0x00, 0x00, 0x00000011 Package (0x04) ==> 0x0004FFFF, 0x00, 0x00, 0x00000012 Package (0x04) ==> 0x0005FFFF, 0x00, 0x00, 0x00000010 Package (0x04) ==> 0x0006FFFF, 0x00, 0x00, 0x00000010 Package (0x04) ==> 0x0006FFFF, 0x02, 0x00, 0x00000012 Package (0x04) ==> 0x0007FFFF, 0x00, 0x00, 0x00000013 Package (0x04) ==> 0x0007FFFF, 0x01, 0x00, 0x00000014 Package (0x04) ==> 0x0007FFFF, 0x02, 0x00, 0x00000015 Package (0x04) ==> 0x0007FFFF, 0x03, 0x00, 0x00000016 Package (0x04) ==> 0x0008FFFF, 0x00, 0x00, 0x00000017 Package (0x04) ==> 0x000DFFFF, 0x00, 0x00, 0x00000011 Package (0x04) ==> 0x000DFFFF, 0x01, 0x00, 0x00000013 Package (0x04) ==> 0x0010FFFF, 0x00, 0x00, 0x00000018 Package (0x04) ==> 0x0010FFFF, 0x01, 0x00, 0x00000019 Package (0x04) ==> 0x0010FFFF, 0x02, 0x00, 0x00000014 Package (0x04) ==> 0x0010FFFF, 0x03, 0x00, 0x00000015 Package (0x04) ==> 0x0011FFFF, 0x00, 0x00, 0x0000001A Package (0x04) ==> 0x0011FFFF, 0x01, 0x00, 0x0000001B Package (0x04) ==> 0x0011FFFF, 0x02, 0x00, 0x0000001C Package (0x04) ==> 0x0011FFFF, 0x03, 0x00, 0x0000001D Package (0x04) ==> 0x0012FFFF, 0x00, 0x00, 0x0000001E Package (0x04) ==> 0x0012FFFF, 0x01, 0x00, 0x0000001F Package (0x04) ==> 0x0012FFFF, 0x02, 0x00, 0x00000016 Package (0x04) ==> 0x0013FFFF, 0x00, 0x00, 0x00000020 Package (0x04) ==> 0x0013FFFF, 0x01, 0x00, 0x00000021 Package (0x04) ==> 0x0013FFFF, 0x02, 0x00, 0x00000022 Package (0x04) ==> 0x0013FFFF, 0x03, 0x00, 0x00000023 Package (0x04) ==> 0x0014FFFF, 0x01, 0x00, 0x00000017 Package (0x04) ==> 0x0014FFFF, 0x00, 0x00, 0x00000024 Package (0x04) ==> 0x0014FFFF, 0x02, 0x00, 0x00000011 Package (0x04) ==> 0x0015FFFF, 0x00, 0x00, 0x00000025 Package (0x04) ==> 0x0015FFFF, 0x01, 0x00, 0x00000026 Package (0x04) ==> 0x0015FFFF, 0x02, 0x00, 0x00000027 Package (0x04) ==> 0x0015FFFF, 0x03, 0x00, 0x00000028 Package (0x04) ==> 0x0016FFFF, 0x00, 0x00, 0x00000012 Package (0x04) ==> 0x0016FFFF, 0x01, 0x00, 0x00000013 Package (0x04) ==> 0x0016FFFF, 0x02, 0x00, 0x00000014 Package (0x04) ==> 0x0016FFFF, 0x03, 0x00, 0x00000015 Package (0x04) ==> 0x0017FFFF, 0x00, 0x00, 0x00000016 Package (0x04) ==> 0x0019FFFF, 0x00, 0x00, 0x00000029 Package (0x04) ==> 0x0019FFFF, 0x01, 0x00, 0x0000002A Package (0x04) ==> 0x0019FFFF, 0x02, 0x00, 0x0000002B Package (0x04) ==> 0x001CFFFF, 0x00, 0x00, 0x00000010 Package (0x04) ==> 0x001CFFFF, 0x01, 0x00, 0x00000011 Package (0x04) ==> 0x001CFFFF, 0x02, 0x00, 0x00000012 Package (0x04) ==> 0x001CFFFF, 0x03, 0x00, 0x00000013 Package (0x04) ==> 0x001DFFFF, 0x00, 0x00, 0x00000010 Package (0x04) ==> 0x001DFFFF, 0x01, 0x00, 0x00000011 Package (0x04) ==> 0x001DFFFF, 0x02, 0x00, 0x00000012 Package (0x04) ==> 0x001DFFFF, 0x03, 0x00, 0x00000013 Package (0x04) ==> 0x001EFFFF, 0x00, 0x00, 0x00000017 Package (0x04) ==> 0x001EFFFF, 0x01, 0x00, 0x00000014 Package (0x04) ==> 0x001EFFFF, 0x02, 0x00, 0x0000002C Package (0x04) ==> 0x001EFFFF, 0x03, 0x00, 0x0000002D Package (0x04) ==> 0x001FFFFF, 0x01, 0x00, 0x00000016 Package (0x04) ==> 0x001FFFFF, 0x02, 0x00, 0x00000017 Package (0x04) ==> 0x001FFFFF, 0x03, 0x00, 0x00000014 Package (0x04) ==> 0x001FFFFF, 0x00, 0x00, 0x00000015 Signed-off-by: Kapil Porwal <kapilporwal@google.com> Change-Id: Ib4fc850228b7ddbf84e2feb2433adff5e4002033 Reviewed-on: https://review.coreboot.org/c/coreboot/+/71236 Reviewed-by: Subrata Banik <subratabanik@google.com> Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
This commit is contained in:
		
				
					committed by
					
						
						Jakub Czapiga
					
				
			
			
				
	
			
			
			
						parent
						
							f82e68c900
						
					
				
				
					commit
					9395cf9a2f
				
			@@ -429,7 +429,7 @@ static const SI_PCH_DEVICE_INTERRUPT_CONFIG *pci_irq_to_fsp(size_t *out_count)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	/* Count PCH devices */
 | 
						/* Count PCH devices */
 | 
				
			||||||
	while (entry) {
 | 
						while (entry) {
 | 
				
			||||||
		if (PCI_SLOT(entry->devfn) >= MIN_PCH_SLOT)
 | 
							if (is_pch_slot(entry->devfn))
 | 
				
			||||||
			++pch_total;
 | 
								++pch_total;
 | 
				
			||||||
		entry = entry->next;
 | 
							entry = entry->next;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -438,7 +438,7 @@ static const SI_PCH_DEVICE_INTERRUPT_CONFIG *pci_irq_to_fsp(size_t *out_count)
 | 
				
			|||||||
	config = calloc(pch_total, sizeof(*config));
 | 
						config = calloc(pch_total, sizeof(*config));
 | 
				
			||||||
	entry = get_cached_pci_irqs();
 | 
						entry = get_cached_pci_irqs();
 | 
				
			||||||
	while (entry) {
 | 
						while (entry) {
 | 
				
			||||||
		if (PCI_SLOT(entry->devfn) < MIN_PCH_SLOT) {
 | 
							if (!is_pch_slot(entry->devfn)) {
 | 
				
			||||||
			entry = entry->next;
 | 
								entry = entry->next;
 | 
				
			||||||
			continue;
 | 
								continue;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -298,7 +298,7 @@ static const SI_PCH_DEVICE_INTERRUPT_CONFIG *pci_irq_to_fsp(size_t *out_count)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	/* Count PCH devices */
 | 
						/* Count PCH devices */
 | 
				
			||||||
	while (entry) {
 | 
						while (entry) {
 | 
				
			||||||
		if (PCI_SLOT(entry->devfn) >= MIN_PCH_SLOT)
 | 
							if (is_pch_slot(entry->devfn))
 | 
				
			||||||
			++pch_total;
 | 
								++pch_total;
 | 
				
			||||||
		entry = entry->next;
 | 
							entry = entry->next;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -307,7 +307,7 @@ static const SI_PCH_DEVICE_INTERRUPT_CONFIG *pci_irq_to_fsp(size_t *out_count)
 | 
				
			|||||||
	config = calloc(pch_total, sizeof(*config));
 | 
						config = calloc(pch_total, sizeof(*config));
 | 
				
			||||||
	entry = get_cached_pci_irqs();
 | 
						entry = get_cached_pci_irqs();
 | 
				
			||||||
	while (entry) {
 | 
						while (entry) {
 | 
				
			||||||
		if (PCI_SLOT(entry->devfn) < MIN_PCH_SLOT) {
 | 
							if (!is_pch_slot(entry->devfn)) {
 | 
				
			||||||
			entry = entry->next;
 | 
								entry = entry->next;
 | 
				
			||||||
			continue;
 | 
								continue;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -66,4 +66,10 @@ const struct pci_irq_entry *get_cached_pci_irqs(void);
 | 
				
			|||||||
   return the corresponding IRQ, or INVALID_IRQ if not found. */
 | 
					   return the corresponding IRQ, or INVALID_IRQ if not found. */
 | 
				
			||||||
int get_pci_devfn_irq(unsigned int devfn);
 | 
					int get_pci_devfn_irq(unsigned int devfn);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Check if a given slot is a PCH slot.
 | 
				
			||||||
 | 
					 * Note: For PCH less SoC platforms, like MeteorLake and onwards, this function
 | 
				
			||||||
 | 
					 * can be utilized to check if a slot belongs to the SoC or IOE die.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					bool is_pch_slot(unsigned int devfn);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif /* SOC_INTEL_COMMON_IRQ_H */
 | 
					#endif /* SOC_INTEL_COMMON_IRQ_H */
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -404,6 +404,13 @@ bool generate_pin_irq_map(void)
 | 
				
			|||||||
	return true;
 | 
						return true;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bool __weak is_pch_slot(unsigned int devfn)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						if (PCI_SLOT(devfn) >= MIN_PCH_SLOT)
 | 
				
			||||||
 | 
							return true;
 | 
				
			||||||
 | 
						return false;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool irq_program_non_pch(void)
 | 
					bool irq_program_non_pch(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	const struct pci_irq_entry *entry = cached_entries;
 | 
						const struct pci_irq_entry *entry = cached_entries;
 | 
				
			||||||
@@ -412,7 +419,7 @@ bool irq_program_non_pch(void)
 | 
				
			|||||||
		return false;
 | 
							return false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	while (entry) {
 | 
						while (entry) {
 | 
				
			||||||
		if (PCI_SLOT(entry->devfn) >= MIN_PCH_SLOT) {
 | 
							if (is_pch_slot(entry->devfn)) {
 | 
				
			||||||
			entry = entry->next;
 | 
								entry = entry->next;
 | 
				
			||||||
			continue;
 | 
								continue;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -269,7 +269,7 @@ static const SI_PCH_DEVICE_INTERRUPT_CONFIG *pci_irq_to_fsp(size_t *out_count)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	/* Count PCH devices */
 | 
						/* Count PCH devices */
 | 
				
			||||||
	while (entry) {
 | 
						while (entry) {
 | 
				
			||||||
		if (PCI_SLOT(entry->devfn) >= MIN_PCH_SLOT)
 | 
							if (is_pch_slot(entry->devfn))
 | 
				
			||||||
			++pch_total;
 | 
								++pch_total;
 | 
				
			||||||
		entry = entry->next;
 | 
							entry = entry->next;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -278,7 +278,7 @@ static const SI_PCH_DEVICE_INTERRUPT_CONFIG *pci_irq_to_fsp(size_t *out_count)
 | 
				
			|||||||
	config = calloc(pch_total, sizeof(*config));
 | 
						config = calloc(pch_total, sizeof(*config));
 | 
				
			||||||
	entry = get_cached_pci_irqs();
 | 
						entry = get_cached_pci_irqs();
 | 
				
			||||||
	while (entry) {
 | 
						while (entry) {
 | 
				
			||||||
		if (PCI_SLOT(entry->devfn) < MIN_PCH_SLOT) {
 | 
							if (!is_pch_slot(entry->devfn)) {
 | 
				
			||||||
			entry = entry->next;
 | 
								entry = entry->next;
 | 
				
			||||||
			continue;
 | 
								continue;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user