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:
Kapil Porwal 2022-12-22 23:08:26 +05:30 committed by Jakub Czapiga
parent f82e68c900
commit 9395cf9a2f
5 changed files with 20 additions and 7 deletions

View File

@ -429,7 +429,7 @@ static const SI_PCH_DEVICE_INTERRUPT_CONFIG *pci_irq_to_fsp(size_t *out_count)
/* Count PCH devices */
while (entry) {
if (PCI_SLOT(entry->devfn) >= MIN_PCH_SLOT)
if (is_pch_slot(entry->devfn))
++pch_total;
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));
entry = get_cached_pci_irqs();
while (entry) {
if (PCI_SLOT(entry->devfn) < MIN_PCH_SLOT) {
if (!is_pch_slot(entry->devfn)) {
entry = entry->next;
continue;
}

View File

@ -298,7 +298,7 @@ static const SI_PCH_DEVICE_INTERRUPT_CONFIG *pci_irq_to_fsp(size_t *out_count)
/* Count PCH devices */
while (entry) {
if (PCI_SLOT(entry->devfn) >= MIN_PCH_SLOT)
if (is_pch_slot(entry->devfn))
++pch_total;
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));
entry = get_cached_pci_irqs();
while (entry) {
if (PCI_SLOT(entry->devfn) < MIN_PCH_SLOT) {
if (!is_pch_slot(entry->devfn)) {
entry = entry->next;
continue;
}

View File

@ -66,4 +66,10 @@ const struct pci_irq_entry *get_cached_pci_irqs(void);
return the corresponding IRQ, or INVALID_IRQ if not found. */
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 */

View File

@ -404,6 +404,13 @@ bool generate_pin_irq_map(void)
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)
{
const struct pci_irq_entry *entry = cached_entries;
@ -412,7 +419,7 @@ bool irq_program_non_pch(void)
return false;
while (entry) {
if (PCI_SLOT(entry->devfn) >= MIN_PCH_SLOT) {
if (is_pch_slot(entry->devfn)) {
entry = entry->next;
continue;
}

View File

@ -269,7 +269,7 @@ static const SI_PCH_DEVICE_INTERRUPT_CONFIG *pci_irq_to_fsp(size_t *out_count)
/* Count PCH devices */
while (entry) {
if (PCI_SLOT(entry->devfn) >= MIN_PCH_SLOT)
if (is_pch_slot(entry->devfn))
++pch_total;
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));
entry = get_cached_pci_irqs();
while (entry) {
if (PCI_SLOT(entry->devfn) < MIN_PCH_SLOT) {
if (!is_pch_slot(entry->devfn)) {
entry = entry->next;
continue;
}