blob: 2f0fd97a77c99a57a86ff8881425f09f3d9df7a9 [file] [log] [blame]
Angel Pons3bd1e3d2020-04-05 15:47:17 +02001/* SPDX-License-Identifier: GPL-2.0-only */
Naresh G Solankia2d40622016-08-30 20:47:13 +05302
3#include <device/device.h>
4#include <device/pci.h>
Kyösti Mälkkif1b58b72019-03-01 13:43:02 +02005#include <device/pci_ops.h>
Ravi Sarawadi1483d1f2017-09-28 17:06:01 -07006#include <intelblocks/lpc_lib.h>
7#include <intelblocks/itss.h>
Naresh G Solankia2d40622016-08-30 20:47:13 +05308#include <soc/ramstage.h>
9#include <soc/interrupt.h>
10#include <soc/irq.h>
11#include <string.h>
12
13static const SI_PCH_DEVICE_INTERRUPT_CONFIG devintconfig[] = {
14 /*
15 * cAVS(Audio, Voice, Speech), INTA is default, programmed in
16 * PciCfgSpace 3Dh
17 */
Kyösti Mälkki85b6c662019-09-30 22:40:53 +030018 DEVICE_INT_CONFIG(PCH_DEVFN_HDA, int_A, cAVS_INTA_IRQ),
Naresh G Solankia2d40622016-08-30 20:47:13 +053019 /*
20 * SMBus Controller, no default value, programmed in
21 * PciCfgSpace 3Dh
22 */
Kyösti Mälkki85b6c662019-09-30 22:40:53 +030023 DEVICE_INT_CONFIG(PCH_DEVFN_SMBUS, int_A, SMBUS_INTA_IRQ),
Naresh G Solankia2d40622016-08-30 20:47:13 +053024 /* GbE Controller, INTA is default, programmed in PciCfgSpace 3Dh */
Kyösti Mälkki85b6c662019-09-30 22:40:53 +030025 DEVICE_INT_CONFIG(PCH_DEVFN_GBE, int_A, GbE_INTA_IRQ),
Naresh G Solankia2d40622016-08-30 20:47:13 +053026 /* TraceHub, INTA is default, RO register */
Kyösti Mälkki85b6c662019-09-30 22:40:53 +030027 DEVICE_INT_CONFIG(PCH_DEVFN_TRACEHUB, int_A, TRACE_HUB_INTA_IRQ),
Naresh G Solankia2d40622016-08-30 20:47:13 +053028 /*
29 * SerialIo: UART #0, INTA is default,
30 * programmed in PCR[SERIALIO] + PCICFGCTRL[7]
31 */
Kyösti Mälkki85b6c662019-09-30 22:40:53 +030032 DEVICE_INT_CONFIG(PCH_DEVFN_UART0, int_A, LPSS_UART0_IRQ),
Naresh G Solankia2d40622016-08-30 20:47:13 +053033 /*
34 * SerialIo: UART #1, INTA is default,
35 * programmed in PCR[SERIALIO] + PCICFGCTRL[8]
36 */
Kyösti Mälkki85b6c662019-09-30 22:40:53 +030037 DEVICE_INT_CONFIG(PCH_DEVFN_UART1, int_B, LPSS_UART1_IRQ),
Naresh G Solankia2d40622016-08-30 20:47:13 +053038 /*
39 * SerialIo: SPI #0, INTA is default,
40 * programmed in PCR[SERIALIO] + PCICFGCTRL[10]
41 */
Kyösti Mälkki85b6c662019-09-30 22:40:53 +030042 DEVICE_INT_CONFIG(PCH_DEVFN_GSPI0, int_C, LPSS_SPI0_IRQ),
Naresh G Solankia2d40622016-08-30 20:47:13 +053043 /*
44 * SerialIo: SPI #1, INTA is default,
45 * programmed in PCR[SERIALIO] + PCICFGCTRL[11]
46 */
Kyösti Mälkki85b6c662019-09-30 22:40:53 +030047 DEVICE_INT_CONFIG(PCH_DEVFN_GSPI1, int_D, LPSS_SPI1_IRQ),
Naresh G Solankia2d40622016-08-30 20:47:13 +053048 /* SCS: eMMC (SKL PCH-LP Only) */
Kyösti Mälkki85b6c662019-09-30 22:40:53 +030049 DEVICE_INT_CONFIG(PCH_DEVFN_EMMC, int_B, eMMC_IRQ),
Naresh G Solankia2d40622016-08-30 20:47:13 +053050 /* SCS: SDIO (SKL PCH-LP Only) */
Kyösti Mälkki85b6c662019-09-30 22:40:53 +030051 DEVICE_INT_CONFIG(PCH_DEVFN_SDIO, int_C, SDIO_IRQ),
Naresh G Solankia2d40622016-08-30 20:47:13 +053052 /* SCS: SDCard (SKL PCH-LP Only) */
Kyösti Mälkki85b6c662019-09-30 22:40:53 +030053 DEVICE_INT_CONFIG(PCH_DEVFN_SDCARD, int_D, SD_IRQ),
Naresh G Solankia2d40622016-08-30 20:47:13 +053054 /* PCI Express Port, INT is default,
55 * programmed in PciCfgSpace + FCh
56 */
Kyösti Mälkki85b6c662019-09-30 22:40:53 +030057 DEVICE_INT_CONFIG(PCH_DEVFN_PCIE9, int_A, PCIE_9_IRQ),
58 DEVICE_INT_CONFIG(PCH_DEVFN_PCIE10, int_B, PCIE_10_IRQ),
59 DEVICE_INT_CONFIG(PCH_DEVFN_PCIE11, int_C, PCIE_11_IRQ),
60 DEVICE_INT_CONFIG(PCH_DEVFN_PCIE12, int_D, PCIE_12_IRQ),
Naresh G Solankia2d40622016-08-30 20:47:13 +053061 /*
62 * PCI Express Port 1, INT is default,
63 * programmed in PciCfgSpace + FCh
64 */
Kyösti Mälkki85b6c662019-09-30 22:40:53 +030065 DEVICE_INT_CONFIG(PCH_DEVFN_PCIE1, int_A, PCIE_1_IRQ),
Naresh G Solankia2d40622016-08-30 20:47:13 +053066 /*
67 * PCI Express Port 2, INT is default,
68 * programmed in PciCfgSpace + FCh
69 */
Kyösti Mälkki85b6c662019-09-30 22:40:53 +030070 DEVICE_INT_CONFIG(PCH_DEVFN_PCIE2, int_B, PCIE_2_IRQ),
Naresh G Solankia2d40622016-08-30 20:47:13 +053071 /*
72 * PCI Express Port 3, INT is default,
73 * programmed in PciCfgSpace + FCh
74 */
Kyösti Mälkki85b6c662019-09-30 22:40:53 +030075 DEVICE_INT_CONFIG(PCH_DEVFN_PCIE3, int_C, PCIE_3_IRQ),
Naresh G Solankia2d40622016-08-30 20:47:13 +053076 /*
77 * PCI Express Port 4, INT is default,
78 * programmed in PciCfgSpace + FCh
79 */
Kyösti Mälkki85b6c662019-09-30 22:40:53 +030080 DEVICE_INT_CONFIG(PCH_DEVFN_PCIE4, int_D, PCIE_4_IRQ),
Naresh G Solankia2d40622016-08-30 20:47:13 +053081 /*
82 * PCI Express Port 5, INT is default,
83 * programmed in PciCfgSpace + FCh
84 */
Kyösti Mälkki85b6c662019-09-30 22:40:53 +030085 DEVICE_INT_CONFIG(PCH_DEVFN_PCIE5, int_A, PCIE_5_IRQ),
Naresh G Solankia2d40622016-08-30 20:47:13 +053086 /*
87 * PCI Express Port 6, INT is default,
88 * programmed in PciCfgSpace + FCh
89 */
Kyösti Mälkki85b6c662019-09-30 22:40:53 +030090 DEVICE_INT_CONFIG(PCH_DEVFN_PCIE6, int_B, PCIE_6_IRQ),
Naresh G Solankia2d40622016-08-30 20:47:13 +053091 /*
92 * PCI Express Port 7, INT is default,
93 * programmed in PciCfgSpace + FCh
94 */
Kyösti Mälkki85b6c662019-09-30 22:40:53 +030095 DEVICE_INT_CONFIG(PCH_DEVFN_PCIE7, int_C, PCIE_7_IRQ),
Naresh G Solankia2d40622016-08-30 20:47:13 +053096 /*
97 * PCI Express Port 8, INT is default,
98 * programmed in PciCfgSpace + FCh
99 */
Kyösti Mälkki85b6c662019-09-30 22:40:53 +0300100 DEVICE_INT_CONFIG(PCH_DEVFN_PCIE8, int_D, PCIE_8_IRQ),
Naresh G Solankia2d40622016-08-30 20:47:13 +0530101 /*
102 * SerialIo UART Controller #2, INTA is default,
103 * programmed in PCR[SERIALIO] + PCICFGCTRL[9]
104 */
Kyösti Mälkki85b6c662019-09-30 22:40:53 +0300105 DEVICE_INT_CONFIG(PCH_DEVFN_UART2, int_A, LPSS_UART2_IRQ),
Naresh G Solankia2d40622016-08-30 20:47:13 +0530106 /*
107 * SerialIo UART Controller #5, INTA is default,
108 * programmed in PCR[SERIALIO] + PCICFGCTRL[6]
109 */
Kyösti Mälkki85b6c662019-09-30 22:40:53 +0300110 DEVICE_INT_CONFIG(PCH_DEVFN_I2C5, int_B, LPSS_I2C5_IRQ),
Naresh G Solankia2d40622016-08-30 20:47:13 +0530111 /*
112 * SerialIo UART Controller #4, INTA is default,
113 * programmed in PCR[SERIALIO] + PCICFGCTRL[5]
114 */
Kyösti Mälkki85b6c662019-09-30 22:40:53 +0300115 DEVICE_INT_CONFIG(PCH_DEVFN_I2C4, int_C, LPSS_I2C4_IRQ),
Naresh G Solankia2d40622016-08-30 20:47:13 +0530116 /*
117 * SATA Controller, INTA is default,
118 * programmed in PciCfgSpace + 3Dh
119 */
Kyösti Mälkki85b6c662019-09-30 22:40:53 +0300120 DEVICE_INT_CONFIG(PCH_DEVFN_SATA, int_A, SATA_IRQ),
Naresh G Solankia2d40622016-08-30 20:47:13 +0530121 /* CSME: HECI #1 */
Kyösti Mälkki85b6c662019-09-30 22:40:53 +0300122 DEVICE_INT_CONFIG(PCH_DEVFN_CSE, int_A, HECI_1_IRQ),
Naresh G Solankia2d40622016-08-30 20:47:13 +0530123 /* CSME: HECI #2 */
Kyösti Mälkki85b6c662019-09-30 22:40:53 +0300124 DEVICE_INT_CONFIG(PCH_DEVFN_CSE_2, int_B, HECI_2_IRQ),
Naresh G Solankia2d40622016-08-30 20:47:13 +0530125 /* CSME: IDE-Redirection (IDE-R) */
Kyösti Mälkki85b6c662019-09-30 22:40:53 +0300126 DEVICE_INT_CONFIG(PCH_DEVFN_CSE_IDER, int_C, IDER_IRQ),
Naresh G Solankia2d40622016-08-30 20:47:13 +0530127 /* CSME: Keyboard and Text (KT) Redirection */
Kyösti Mälkki85b6c662019-09-30 22:40:53 +0300128 DEVICE_INT_CONFIG(PCH_DEVFN_CSE_KT, int_D, KT_IRQ),
Naresh G Solankia2d40622016-08-30 20:47:13 +0530129 /* CSME: HECI #3 */
Kyösti Mälkki85b6c662019-09-30 22:40:53 +0300130 DEVICE_INT_CONFIG(PCH_DEVFN_CSE_3, int_A, HECI_3_IRQ),
Naresh G Solankia2d40622016-08-30 20:47:13 +0530131 /*
132 * SerialIo I2C Controller #0, INTA is default,
133 * programmed in PCR[SERIALIO] + PCICFGCTRL[1]
134 */
Kyösti Mälkki85b6c662019-09-30 22:40:53 +0300135 DEVICE_INT_CONFIG(PCH_DEVFN_I2C0, int_A, LPSS_I2C0_IRQ),
Naresh G Solankia2d40622016-08-30 20:47:13 +0530136 /*
137 * SerialIo I2C Controller #1, INTA is default,
138 * programmed in PCR[SERIALIO] + PCICFGCTRL[2]
139 */
Kyösti Mälkki85b6c662019-09-30 22:40:53 +0300140 DEVICE_INT_CONFIG(PCH_DEVFN_I2C1, int_B, LPSS_I2C1_IRQ),
Naresh G Solankia2d40622016-08-30 20:47:13 +0530141 /*
142 * SerialIo I2C Controller #2, INTA is default,
143 * programmed in PCR[SERIALIO] + PCICFGCTRL[3]
144 */
Kyösti Mälkki85b6c662019-09-30 22:40:53 +0300145 DEVICE_INT_CONFIG(PCH_DEVFN_I2C2, int_C, LPSS_I2C2_IRQ),
Naresh G Solankia2d40622016-08-30 20:47:13 +0530146 /*
147 * SerialIo I2C Controller #3, INTA is default,
148 * programmed in PCR[SERIALIO] + PCICFGCTRL[4]
149 */
Kyösti Mälkki85b6c662019-09-30 22:40:53 +0300150 DEVICE_INT_CONFIG(PCH_DEVFN_I2C3, int_D, LPSS_I2C3_IRQ),
Naresh G Solankia2d40622016-08-30 20:47:13 +0530151 /*
152 * USB 3.0 xHCI Controller, no default value,
153 * programmed in PciCfgSpace 3Dh
154 */
Kyösti Mälkki85b6c662019-09-30 22:40:53 +0300155 DEVICE_INT_CONFIG(PCH_DEVFN_XHCI, int_A, XHCI_IRQ),
Naresh G Solankia2d40622016-08-30 20:47:13 +0530156 /* USB Device Controller (OTG) */
Kyösti Mälkki85b6c662019-09-30 22:40:53 +0300157 DEVICE_INT_CONFIG(PCH_DEVFN_USBOTG, int_B, OTG_IRQ),
Naresh G Solankia2d40622016-08-30 20:47:13 +0530158 /* Thermal Subsystem */
Kyösti Mälkki85b6c662019-09-30 22:40:53 +0300159 DEVICE_INT_CONFIG(PCH_DEVFN_THERMAL, int_C, THERMAL_IRQ),
Naresh G Solankia2d40622016-08-30 20:47:13 +0530160 /* Camera IO Host Controller */
Kyösti Mälkki85b6c662019-09-30 22:40:53 +0300161 DEVICE_INT_CONFIG(PCH_DEVFN_CIO, int_A, CIO_INTA_IRQ),
Naresh G Solankia2d40622016-08-30 20:47:13 +0530162 /* Integrated Sensor Hub */
Kyösti Mälkki85b6c662019-09-30 22:40:53 +0300163 DEVICE_INT_CONFIG(PCH_DEVFN_ISH, int_A, ISH_IRQ)
Naresh G Solankia2d40622016-08-30 20:47:13 +0530164};
165
166void soc_irq_settings(FSP_SIL_UPD *params)
167{
168
169 uint32_t i, intdeventry;
170 u8 irq_config[PCH_MAX_IRQ_CONFIG];
Kyösti Mälkki903b40a2019-07-03 07:25:59 +0300171 const struct device *dev = pcidev_path_on_root(PCH_DEVFN_LPC);
Kyösti Mälkki8950cfb2019-07-13 22:16:25 +0300172 const struct soc_intel_skylake_config *config = config_of(dev);
Naresh G Solankia2d40622016-08-30 20:47:13 +0530173
174 /* Get Device Int Count */
175 intdeventry = ARRAY_SIZE(devintconfig);
176 /* update irq table */
177 memcpy((SI_PCH_DEVICE_INTERRUPT_CONFIG *)
Patrick Rudolph03a33912020-11-30 17:45:42 +0100178 (uintptr_t)(params->DevIntConfigPtr), devintconfig, intdeventry *
Naresh G Solankia2d40622016-08-30 20:47:13 +0530179 sizeof(SI_PCH_DEVICE_INTERRUPT_CONFIG));
180
181 params->NumOfDevIntConfig = intdeventry;
Jonathan Neuschäfer5268b762018-02-12 12:24:25 +0100182 /* PxRC to IRQ programming */
Naresh G Solankia2d40622016-08-30 20:47:13 +0530183 for (i = 0; i < PCH_MAX_IRQ_CONFIG; i++) {
184 switch (i) {
185 case PCH_PARC:
186 case PCH_PCRC:
187 case PCH_PDRC:
188 case PCH_PERC:
189 case PCH_PFRC:
190 case PCH_PGRC:
191 case PCH_PHRC:
192 irq_config[i] = PCH_IRQ11;
193 break;
194 case PCH_PBRC:
195 irq_config[i] = PCH_IRQ10;
196 break;
197 }
198 }
199 memcpy(params->PxRcConfig, irq_config, PCH_MAX_IRQ_CONFIG);
200 /* GPIO IRQ Route The valid values is 14 or 15 */
201 if (config->GpioIrqSelect == 0)
202 params->GpioIrqRoute = GPIO_IRQ14;
203 else
204 params->GpioIrqRoute = config->GpioIrqSelect;
205 /* SCI IRQ Select The valid values is 9, 10, 11 and 20 21, 22, 23 */
206 if (config->SciIrqSelect == 0)
207 params->SciIrqSelect = SCI_IRQ9;
208 else
209 params->SciIrqSelect = config->SciIrqSelect;
210 /* TCO IRQ Select The valid values is 9, 10, 11, 20 21, 22, 23 */
211 if (config->TcoIrqSelect == 0)
212 params->TcoIrqSelect = TCO_IRQ9;
213 else
214 params->TcoIrqSelect = config->TcoIrqSelect;
215 /* TCO Irq enable/disable */
216 params->TcoIrqEnable = config->TcoIrqEnable;
217}