diff options
author | Kapil Porwal <kapilporwal@google.com> | 2022-12-22 23:08:26 +0530 |
---|---|---|
committer | Jakub Czapiga <jacz@semihalf.com> | 2023-01-04 14:12:29 +0000 |
commit | 9395cf9a2f867b5e5832fed3d0396962e4978e87 (patch) | |
tree | 1cf16da925fbcc977322ca4b087bc92ca71fefa3 /src/soc/intel | |
parent | f82e68c900151efae572e3bc19690e978b82ca1b (diff) |
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>
Diffstat (limited to 'src/soc/intel')
-rw-r--r-- | src/soc/intel/alderlake/fsp_params.c | 4 | ||||
-rw-r--r-- | src/soc/intel/cannonlake/fsp_params.c | 4 | ||||
-rw-r--r-- | src/soc/intel/common/block/include/intelblocks/irq.h | 6 | ||||
-rw-r--r-- | src/soc/intel/common/block/irq/irq.c | 9 | ||||
-rw-r--r-- | src/soc/intel/tigerlake/fsp_params.c | 4 |
5 files changed, 20 insertions, 7 deletions
diff --git a/src/soc/intel/alderlake/fsp_params.c b/src/soc/intel/alderlake/fsp_params.c index 08108f4f19..7c3ad912d9 100644 --- a/src/soc/intel/alderlake/fsp_params.c +++ b/src/soc/intel/alderlake/fsp_params.c @@ -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; } diff --git a/src/soc/intel/cannonlake/fsp_params.c b/src/soc/intel/cannonlake/fsp_params.c index 7051f513bd..c9ef548c08 100644 --- a/src/soc/intel/cannonlake/fsp_params.c +++ b/src/soc/intel/cannonlake/fsp_params.c @@ -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; } diff --git a/src/soc/intel/common/block/include/intelblocks/irq.h b/src/soc/intel/common/block/include/intelblocks/irq.h index 33c9b7e7ac..3945e3e7d7 100644 --- a/src/soc/intel/common/block/include/intelblocks/irq.h +++ b/src/soc/intel/common/block/include/intelblocks/irq.h @@ -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 */ diff --git a/src/soc/intel/common/block/irq/irq.c b/src/soc/intel/common/block/irq/irq.c index 8b0642f149..724061ee8c 100644 --- a/src/soc/intel/common/block/irq/irq.c +++ b/src/soc/intel/common/block/irq/irq.c @@ -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; } diff --git a/src/soc/intel/tigerlake/fsp_params.c b/src/soc/intel/tigerlake/fsp_params.c index 13c5fc0996..f67e205652 100644 --- a/src/soc/intel/tigerlake/fsp_params.c +++ b/src/soc/intel/tigerlake/fsp_params.c @@ -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; } |