mb/google: AMD: move tpm_tis to AMD common code

It moves cr50_plat_irq_status() to common code and adds Kconfig
option to specify GPIO used for interrupt.

BUG=b:277787305
TEST=Build all affected platform and confirm using right GPIO
number. Tested on Skyrim.

Change-Id: I775c4e24cffee99b6ac3e05b58a75425029a86c8
Signed-off-by: Grzegorz Bernacki <bernacki@google.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/75621
Reviewed-by: Raul Rangel <rrangel@chromium.org>
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Yu-Ping Wu <yupingso@google.com>
Reviewed-by: Eric Lai <eric_lai@quanta.corp-partner.google.com>
Reviewed-by: Martin L Roth <gaumless@gmail.com>
diff --git a/src/mainboard/google/guybrush/Kconfig b/src/mainboard/google/guybrush/Kconfig
index 50bcfa9..8ddd3b1 100644
--- a/src/mainboard/google/guybrush/Kconfig
+++ b/src/mainboard/google/guybrush/Kconfig
@@ -95,6 +95,11 @@
 	hex
 	default 0x50
 
+config GSC_IRQ_GPIO
+	int
+	default 3 if BOARD_GOOGLE_GUYBRUSH
+	default 85
+
 config AMDFW_CONFIG_FILE
 	string
 	default "src/mainboard/google/guybrush/variants/baseboard/amdfw.cfg"
diff --git a/src/mainboard/google/guybrush/variants/baseboard/Makefile.inc b/src/mainboard/google/guybrush/variants/baseboard/Makefile.inc
index d8fce0a..cfd3faa 100644
--- a/src/mainboard/google/guybrush/variants/baseboard/Makefile.inc
+++ b/src/mainboard/google/guybrush/variants/baseboard/Makefile.inc
@@ -2,14 +2,11 @@
 bootblock-y += helpers.c
 
 romstage-y += helpers.c
-romstage-y += tpm_tis.c
 romstage-y += gpio.c
 
 ramstage-y += gpio.c
 ramstage-y += helpers.c
-ramstage-y += tpm_tis.c
 
 verstage-y += gpio.c
-verstage-y += tpm_tis.c
 
 smm-y += gpio.c
diff --git a/src/mainboard/google/guybrush/variants/baseboard/tpm_tis.c b/src/mainboard/google/guybrush/variants/baseboard/tpm_tis.c
deleted file mode 100644
index bc40915..0000000
--- a/src/mainboard/google/guybrush/variants/baseboard/tpm_tis.c
+++ /dev/null
@@ -1,16 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-or-later */
-
-#include <boardid.h>
-#include <drivers/tpm/cr50.h>
-#include <gpio.h>
-
-int cr50_plat_irq_status(void)
-{
-	gpio_t irq_gpio = GPIO_85;
-	uint32_t board_ver = board_id();
-
-	if (CONFIG(BOARD_GOOGLE_GUYBRUSH) || (CONFIG(BOARD_GOOGLE_NIPPERKIN) && board_ver == 1))
-		irq_gpio = GPIO_3;
-
-	return gpio_interrupt_status(irq_gpio);
-}
diff --git a/src/mainboard/google/guybrush/variants/nipperkin/Makefile.inc b/src/mainboard/google/guybrush/variants/nipperkin/Makefile.inc
index d7ec6dd..14ecf5e 100644
--- a/src/mainboard/google/guybrush/variants/nipperkin/Makefile.inc
+++ b/src/mainboard/google/guybrush/variants/nipperkin/Makefile.inc
@@ -5,6 +5,10 @@
 ramstage-y += gpio.c
 verstage-y += gpio.c
 
+romstage-y += tpm_tis.c
+ramstage-y += tpm_tis.c
+verstage-y += tpm_tis.c
+
 bootblock-y += variant.c
 romstage-y += variant.c
 ramstage-y += variant.c
diff --git a/src/mainboard/google/guybrush/variants/nipperkin/tpm_tis.c b/src/mainboard/google/guybrush/variants/nipperkin/tpm_tis.c
new file mode 100644
index 0000000..010499f
--- /dev/null
+++ b/src/mainboard/google/guybrush/variants/nipperkin/tpm_tis.c
@@ -0,0 +1,13 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+
+#include <boardid.h>
+#include <gpio.h>
+#include <drivers/tpm/cr50.h>
+
+gpio_t cr50_override_gpio(gpio_t irq)
+{
+	if (board_id() == 1)
+		return GPIO_3;
+	else
+		return irq;
+}
diff --git a/src/mainboard/google/kahlee/Kconfig b/src/mainboard/google/kahlee/Kconfig
index 3507181..92896e9 100644
--- a/src/mainboard/google/kahlee/Kconfig
+++ b/src/mainboard/google/kahlee/Kconfig
@@ -116,6 +116,10 @@
 	hex
 	default 0x50
 
+config GSC_IRQ_GPIO
+	int
+	default 9
+
 config USE_OEM_BIN
 	bool "Add an oem.bin file"
 	help
diff --git a/src/mainboard/google/kahlee/variants/baseboard/Makefile.inc b/src/mainboard/google/kahlee/variants/baseboard/Makefile.inc
index a41ba22..be4074d 100644
--- a/src/mainboard/google/kahlee/variants/baseboard/Makefile.inc
+++ b/src/mainboard/google/kahlee/variants/baseboard/Makefile.inc
@@ -3,16 +3,12 @@
 bootblock-y += gpio.c
 bootblock-y += OemCustomize.c
 
-verstage-y += tpm_tis.c
-
 romstage-y += OemCustomize.c
 romstage-y += gpio.c
 romstage-y += memory.c
-romstage-y += tpm_tis.c
 
 ramstage-y += gpio.c
 ramstage-y += mainboard.c
-ramstage-y += tpm_tis.c
 
 # Add OEM ID table
 ifeq ($(CONFIG_USE_OEM_BIN),y)
diff --git a/src/mainboard/google/kahlee/variants/baseboard/tpm_tis.c b/src/mainboard/google/kahlee/variants/baseboard/tpm_tis.c
deleted file mode 100644
index 87b7f45..0000000
--- a/src/mainboard/google/kahlee/variants/baseboard/tpm_tis.c
+++ /dev/null
@@ -1,10 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-only */
-
-#include <drivers/tpm/cr50.h>
-#include <gpio.h>
-#include <variant/gpio.h>
-
-int cr50_plat_irq_status(void)
-{
-	return gpio_interrupt_status(GPIO_9);
-}
diff --git a/src/mainboard/google/myst/Kconfig b/src/mainboard/google/myst/Kconfig
index bfa4d03..3680e18 100644
--- a/src/mainboard/google/myst/Kconfig
+++ b/src/mainboard/google/myst/Kconfig
@@ -44,6 +44,10 @@
 	hex
 	default 0x50
 
+config GSC_IRQ_GPIO
+	int
+	default 84
+
 config FMDFILE
 	default "src/mainboard/\$(CONFIG_MAINBOARD_DIR)/chromeos.fmd"
 
diff --git a/src/mainboard/google/myst/variants/baseboard/Makefile.inc b/src/mainboard/google/myst/variants/baseboard/Makefile.inc
index 74839fa..9e9ec0d 100644
--- a/src/mainboard/google/myst/variants/baseboard/Makefile.inc
+++ b/src/mainboard/google/myst/variants/baseboard/Makefile.inc
@@ -2,12 +2,9 @@
 
 ramstage-$(CONFIG_FW_CONFIG) += fw_config.c
 ramstage-y += gpio.c
-ramstage-y += tpm_tis.c
 
 romstage-y += gpio.c
-romstage-y += tpm_tis.c
 
-verstage-y += tpm_tis.c
 verstage-$(CONFIG_VBOOT_STARTS_BEFORE_BOOTBLOCK) += gpio.c
 
 smm-y += smihandler.c
diff --git a/src/mainboard/google/myst/variants/baseboard/tpm_tis.c b/src/mainboard/google/myst/variants/baseboard/tpm_tis.c
deleted file mode 100644
index 3641e7a..0000000
--- a/src/mainboard/google/myst/variants/baseboard/tpm_tis.c
+++ /dev/null
@@ -1,9 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-or-later */
-
-#include <drivers/tpm/cr50.h>
-#include <gpio.h>
-
-int cr50_plat_irq_status(void)
-{
-	return gpio_interrupt_status(GPIO_84);
-}
diff --git a/src/mainboard/google/skyrim/Kconfig b/src/mainboard/google/skyrim/Kconfig
index 49762dc..9b81502c 100644
--- a/src/mainboard/google/skyrim/Kconfig
+++ b/src/mainboard/google/skyrim/Kconfig
@@ -60,6 +60,10 @@
 	hex
 	default 0x50
 
+config GSC_IRQ_GPIO
+	int
+	default 18
+
 config AMDFW_CONFIG_FILE
 	string
 	default "src/mainboard/\$(CONFIG_MAINBOARD_DIR)/amdfw.cfg"
diff --git a/src/mainboard/google/skyrim/variants/baseboard/Makefile.inc b/src/mainboard/google/skyrim/variants/baseboard/Makefile.inc
index bd27f68..7828cf1 100644
--- a/src/mainboard/google/skyrim/variants/baseboard/Makefile.inc
+++ b/src/mainboard/google/skyrim/variants/baseboard/Makefile.inc
@@ -1,12 +1,9 @@
 bootblock-y += gpio.c
 
 romstage-y += gpio.c
-romstage-y += tpm_tis.c
 
 ramstage-y += gpio.c
-ramstage-y += tpm_tis.c
 
-verstage-y += tpm_tis.c
 verstage-$(CONFIG_VBOOT_STARTS_BEFORE_BOOTBLOCK) += gpio.c
 
 smm-y += gpio.c
diff --git a/src/mainboard/google/skyrim/variants/baseboard/tpm_tis.c b/src/mainboard/google/skyrim/variants/baseboard/tpm_tis.c
deleted file mode 100644
index b3ab49a..0000000
--- a/src/mainboard/google/skyrim/variants/baseboard/tpm_tis.c
+++ /dev/null
@@ -1,9 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-or-later */
-
-#include <drivers/tpm/cr50.h>
-#include <gpio.h>
-
-int cr50_plat_irq_status(void)
-{
-	return gpio_interrupt_status(GPIO_18);
-}
diff --git a/src/mainboard/google/zork/Kconfig b/src/mainboard/google/zork/Kconfig
index 3481810..d01b023 100644
--- a/src/mainboard/google/zork/Kconfig
+++ b/src/mainboard/google/zork/Kconfig
@@ -138,6 +138,10 @@
 	hex
 	default 0x50
 
+config GSC_IRQ_GPIO
+	int
+	default 3
+
 config VARIANT_SUPPORTS_PRE_V3_SCHEMATICS
 	bool
 	default y if BOARD_GOOGLE_TREMBYLE
diff --git a/src/mainboard/google/zork/variants/baseboard/Makefile.inc b/src/mainboard/google/zork/variants/baseboard/Makefile.inc
index 2a35748..21d6a8f9 100644
--- a/src/mainboard/google/zork/variants/baseboard/Makefile.inc
+++ b/src/mainboard/google/zork/variants/baseboard/Makefile.inc
@@ -2,9 +2,6 @@
 
 all-y += helpers.c
 
-verstage-y += tpm_tis.c
-romstage-y += tpm_tis.c
-ramstage-y += tpm_tis.c
 ramstage-y += ramstage_common.c
 
 # Add OEM ID table
diff --git a/src/mainboard/google/zork/variants/baseboard/tpm_tis.c b/src/mainboard/google/zork/variants/baseboard/tpm_tis.c
deleted file mode 100644
index 8223492..0000000
--- a/src/mainboard/google/zork/variants/baseboard/tpm_tis.c
+++ /dev/null
@@ -1,10 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-or-later */
-
-#include <drivers/tpm/cr50.h>
-#include <gpio.h>
-#include <variant/gpio.h>
-
-int cr50_plat_irq_status(void)
-{
-	return gpio_interrupt_status(GPIO_3);
-}
diff --git a/src/soc/amd/common/block/gpio/Kconfig b/src/soc/amd/common/block/gpio/Kconfig
index 0a1bffe..707c6d0 100644
--- a/src/soc/amd/common/block/gpio/Kconfig
+++ b/src/soc/amd/common/block/gpio/Kconfig
@@ -18,3 +18,9 @@
 	  code.
 
 endif # SOC_AMD_COMMON_BLOCK_BANKED_GPIOS
+
+config GSC_IRQ_GPIO
+	int
+	help
+	  gpio_interrupt_status() is used to provide interrupt status to TPM layer.
+	  This option specifies the GPIO number.
diff --git a/src/soc/amd/common/block/gpio/Makefile.inc b/src/soc/amd/common/block/gpio/Makefile.inc
index 64fbe27..3de522e 100644
--- a/src/soc/amd/common/block/gpio/Makefile.inc
+++ b/src/soc/amd/common/block/gpio/Makefile.inc
@@ -4,4 +4,8 @@
 all-y += gpio.c
 smm-y += gpio.c
 
+romstage-$(CONFIG_TPM_GOOGLE) += tpm_tis.c
+ramstage-$(CONFIG_TPM_GOOGLE) += tpm_tis.c
+verstage-$(CONFIG_TPM_GOOGLE) += tpm_tis.c
+
 endif # CONFIG_SOC_AMD_COMMON_BLOCK_BANKED_GPIOS
diff --git a/src/soc/amd/common/block/gpio/tpm_tis.c b/src/soc/amd/common/block/gpio/tpm_tis.c
new file mode 100644
index 0000000..785bd58
--- /dev/null
+++ b/src/soc/amd/common/block/gpio/tpm_tis.c
@@ -0,0 +1,18 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+
+#include <drivers/tpm/cr50.h>
+#include <gpio.h>
+
+__weak gpio_t cr50_override_gpio(gpio_t irq)
+{
+	return irq;
+}
+
+int cr50_plat_irq_status(void)
+{
+	gpio_t irq_gpio = CONFIG_GSC_IRQ_GPIO;
+
+	irq_gpio = cr50_override_gpio(irq_gpio);
+
+	return gpio_interrupt_status(irq_gpio);
+}
diff --git a/src/soc/amd/common/block/include/amdblocks/gpio.h b/src/soc/amd/common/block/include/amdblocks/gpio.h
index 020a09d..6c4857d 100644
--- a/src/soc/amd/common/block/include/amdblocks/gpio.h
+++ b/src/soc/amd/common/block/include/amdblocks/gpio.h
@@ -92,4 +92,7 @@
 void gpio_save_pin_registers(gpio_t gpio, struct soc_amd_gpio_register_save *save);
 void gpio_restore_pin_registers(gpio_t gpio, struct soc_amd_gpio_register_save *save);
 
+/* Overrides Kconfig GPIO number */
+gpio_t cr50_override_gpio(gpio_t irq);
+
 #endif /* AMD_BLOCK_GPIO_BANKS_H */