summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/soc/intel/alderlake/Kconfig1
-rw-r--r--src/soc/intel/alderlake/gpio.c57
2 files changed, 58 insertions, 0 deletions
diff --git a/src/soc/intel/alderlake/Kconfig b/src/soc/intel/alderlake/Kconfig
index 9fe2668899..89570b102b 100644
--- a/src/soc/intel/alderlake/Kconfig
+++ b/src/soc/intel/alderlake/Kconfig
@@ -82,6 +82,7 @@ config CPU_SPECIFIC_OPTIONS
select SOC_INTEL_COMMON_BLOCK_SA
select SOC_INTEL_COMMON_BLOCK_SMM
select SOC_INTEL_COMMON_BLOCK_SMM_IO_TRAP
+ select SOC_INTEL_COMMON_BLOCK_SMM_LOCK_GPIO_PADS
select SOC_INTEL_COMMON_BLOCK_TCSS
select SOC_INTEL_COMMON_BLOCK_THERMAL_BEHIND_PMC
select SOC_INTEL_COMMON_BLOCK_USB4
diff --git a/src/soc/intel/alderlake/gpio.c b/src/soc/intel/alderlake/gpio.c
index 8275241c60..aa05136e94 100644
--- a/src/soc/intel/alderlake/gpio.c
+++ b/src/soc/intel/alderlake/gpio.c
@@ -247,3 +247,60 @@ const struct pmc_to_gpio_route *soc_pmc_gpio_routes(size_t *num)
*num = ARRAY_SIZE(routes);
return routes;
};
+
+/* GPIOs controllable by non-host (x86) agent, eg. ISH, THC, etc */
+static const struct gpio_lock_config gpios_to_lock[] = {
+ { GPP_A16, GPIO_LOCK_CONFIG }, /* ISH_GP5 NF4 */
+ { GPP_B3, GPIO_LOCK_CONFIG }, /* ISH_GP4B NF4 (not avail in ADL PCH-M) */
+ { GPP_B4, GPIO_LOCK_CONFIG }, /* ISH_GP5B NF4 (not avail in ADL PCH-M) */
+ { GPP_B5, GPIO_LOCK_CONFIG }, /* ISH_I2C0_SDA NF1 */
+ { GPP_B6, GPIO_LOCK_CONFIG }, /* ISH_I2C0_SCL NF1 */
+ { GPP_B7, GPIO_LOCK_CONFIG }, /* ISH_I2C1_SDA NF1 */
+ { GPP_B8, GPIO_LOCK_CONFIG }, /* ISH_I2C1_SCL NF1 */
+ { GPP_B14, GPIO_LOCK_CONFIG }, /* ISH_GP6 NF5 */
+ { GPP_B15, GPIO_LOCK_CONFIG }, /* ISH_GP7 NF5 */
+ { GPP_B16, GPIO_LOCK_CONFIG }, /* ISH_I2C2_SDA NF4 */
+ { GPP_B17, GPIO_LOCK_CONFIG }, /* ISH_I2C2_SCL NF4 */
+ { GPP_D0, GPIO_LOCK_CONFIG }, /* ISH_GP0 NF1 */
+ { GPP_D1, GPIO_LOCK_CONFIG }, /* ISH_GP1 NF1 */
+ { GPP_D2, GPIO_LOCK_CONFIG }, /* ISH_GP2 NF1 */
+ { GPP_D3, GPIO_LOCK_CONFIG }, /* ISH_GP3 NF1 */
+ { GPP_D9, GPIO_LOCK_CONFIG }, /* ISH_SPI_CS# NF1 */
+ { GPP_D10, GPIO_LOCK_CONFIG }, /* ISH_SPI_CLK NF1 */
+ { GPP_D11, GPIO_LOCK_CONFIG }, /* ISH_SPI_MISO NF1 */
+ { GPP_D12, GPIO_LOCK_CONFIG }, /* ISH_SPI_MOSI NF1 */
+ { GPP_D13, GPIO_LOCK_CONFIG }, /* ISH_UART0_RXD NF1 */
+ { GPP_D14, GPIO_LOCK_CONFIG }, /* ISH_UART0_TXD NF1 */
+ { GPP_D15, GPIO_LOCK_CONFIG }, /* ISH_UART0_RTS# NF1 */
+ { GPP_D16, GPIO_LOCK_CONFIG }, /* ISH_UART0_CTS# NF1 */
+ { GPP_D17, GPIO_LOCK_CONFIG }, /* ISH_UART1_RXD NF2 */
+ { GPP_D18, GPIO_LOCK_CONFIG }, /* ISH_UART1_TXD NF2 */
+ { GPP_E9, GPIO_LOCK_CONFIG }, /* ISH_GP4 NF2 */
+ { GPP_H12, GPIO_LOCK_CONFIG }, /* ISH_GP6B NF4 */
+ { GPP_H13, GPIO_LOCK_CONFIG }, /* ISH_GP7B NF4 */
+
+ { GPP_E1, GPIO_LOCK_CONFIG }, /* THC0_SPI1_IO2 NF2 */
+ { GPP_E2, GPIO_LOCK_CONFIG }, /* THC0_SPI1_IO3 NF2 */
+ { GPP_E6, GPIO_LOCK_CONFIG }, /* THC0_SPI1_RST# NF2 */
+ { GPP_E10, GPIO_LOCK_CONFIG }, /* THC0_SPI1_CS# NF2 */
+ { GPP_E11, GPIO_LOCK_CONFIG }, /* THC0_SPI1_CLK NF2 */
+ { GPP_E12, GPIO_LOCK_CONFIG }, /* THC0_SPI1_IO1 NF2 */
+ { GPP_E13, GPIO_LOCK_CONFIG }, /* THC0_SPI1_IO0 NF2 */
+ { GPP_E17, GPIO_LOCK_CONFIG }, /* THC0_SPI1_INT# NF2 */
+ { GPP_F11, GPIO_LOCK_CONFIG }, /* THC1_SPI2_CLK NF3 */
+ { GPP_F12, GPIO_LOCK_CONFIG }, /* THC1_SPI2_IO0 NF3 */
+ { GPP_F13, GPIO_LOCK_CONFIG }, /* THC1_SPI2_IO1 NF3 */
+ { GPP_F14, GPIO_LOCK_CONFIG }, /* THC1_SPI2_IO2 NF3 */
+ { GPP_F15, GPIO_LOCK_CONFIG }, /* THC1_SPI2_IO3 NF3 */
+ { GPP_F16, GPIO_LOCK_CONFIG }, /* THC1_SPI2_CS# NF3 */
+ { GPP_F17, GPIO_LOCK_CONFIG }, /* THC1_SPI2_RST# NF3 */
+ { GPP_F18, GPIO_LOCK_CONFIG }, /* THC1_SPI2_INT# NF3 */
+
+ { GPP_H3, GPIO_LOCK_CONFIG }, /* SX_EXIT_HOLDOFF# NF1 */
+};
+
+const struct gpio_lock_config *soc_gpio_lock_config(size_t *num)
+{
+ *num = ARRAY_SIZE(gpios_to_lock);
+ return gpios_to_lock;
+}