T Michael Turney | b97e6f7 | 2021-03-18 09:16:44 -0700 | [diff] [blame] | 1 | /* SPDX-License-Identifier: GPL-2.0-only */ |
| 2 | |
| 3 | #include <boot/coreboot_tables.h> |
| 4 | #include <bootmode.h> |
| 5 | #include "board.h" |
Grzegorz Bernacki | 7758b47 | 2023-06-14 12:01:32 +0000 | [diff] [blame^] | 6 | #include <drivers/tpm/cr50.h> |
T Michael Turney | b97e6f7 | 2021-03-18 09:16:44 -0700 | [diff] [blame] | 7 | |
| 8 | void setup_chromeos_gpios(void) |
| 9 | { |
Shelley Chen | 3538461 | 2022-01-05 17:15:31 -0800 | [diff] [blame] | 10 | if (CONFIG(EC_GOOGLE_CHROMEEC)) { |
| 11 | gpio_input_pullup(GPIO_EC_IN_RW); |
| 12 | gpio_input_pullup(GPIO_AP_EC_INT); |
| 13 | } |
| 14 | if (CONFIG(MAINBOARD_HAS_TPM2)) |
| 15 | gpio_input_irq(GPIO_H1_AP_INT, IRQ_TYPE_RISING_EDGE, GPIO_PULL_UP); |
| 16 | |
Shaik Sajida Bhanu | cd1257a | 2021-01-19 20:14:48 +0530 | [diff] [blame] | 17 | gpio_input_pullup(GPIO_SD_CD_L); |
Shelley Chen | ffebd49 | 2021-09-28 12:42:11 -0700 | [diff] [blame] | 18 | |
| 19 | if (CONFIG(HEROBRINE_HAS_FINGERPRINT)) { |
| 20 | gpio_output(GPIO_FPMCU_BOOT0, 0); |
| 21 | gpio_output(GPIO_FP_RST_L, 0); |
| 22 | gpio_output(GPIO_EN_FP_RAILS, 0); |
| 23 | } |
Srinivasa Rao Mandadapu | 2360d7c | 2021-08-27 19:31:34 +0530 | [diff] [blame] | 24 | gpio_output(GPIO_AMP_ENABLE, 0); |
T Michael Turney | b97e6f7 | 2021-03-18 09:16:44 -0700 | [diff] [blame] | 25 | } |
| 26 | |
| 27 | void fill_lb_gpios(struct lb_gpios *gpios) |
| 28 | { |
Shelley Chen | 3538461 | 2022-01-05 17:15:31 -0800 | [diff] [blame] | 29 | const struct lb_gpio chromeos_gpios[] = { |
Shaik Sajida Bhanu | cd1257a | 2021-01-19 20:14:48 +0530 | [diff] [blame] | 30 | {GPIO_SD_CD_L.addr, ACTIVE_LOW, gpio_get(GPIO_SD_CD_L), |
| 31 | "SD card detect"}, |
Srinivasa Rao Mandadapu | 2360d7c | 2021-08-27 19:31:34 +0530 | [diff] [blame] | 32 | {GPIO_AMP_ENABLE.addr, ACTIVE_HIGH, gpio_get(GPIO_AMP_ENABLE), |
| 33 | "speaker enable"}, |
Shelley Chen | 3538461 | 2022-01-05 17:15:31 -0800 | [diff] [blame] | 34 | #if CONFIG(EC_GOOGLE_CHROMEEC) |
| 35 | {GPIO_EC_IN_RW.addr, ACTIVE_LOW, gpio_get(GPIO_EC_IN_RW), |
| 36 | "EC in RW"}, |
| 37 | {GPIO_AP_EC_INT.addr, ACTIVE_LOW, gpio_get(GPIO_AP_EC_INT), |
| 38 | "EC interrupt"}, |
| 39 | #endif |
| 40 | #if CONFIG(MAINBOARD_HAS_TPM2) |
| 41 | {GPIO_H1_AP_INT.addr, ACTIVE_HIGH, gpio_get(GPIO_H1_AP_INT), |
| 42 | "TPM interrupt"}, |
| 43 | #endif |
Shaik Sajida Bhanu | cd1257a | 2021-01-19 20:14:48 +0530 | [diff] [blame] | 44 | }; |
T Michael Turney | b97e6f7 | 2021-03-18 09:16:44 -0700 | [diff] [blame] | 45 | |
Shaik Sajida Bhanu | cd1257a | 2021-01-19 20:14:48 +0530 | [diff] [blame] | 46 | lb_add_gpios(gpios, chromeos_gpios, ARRAY_SIZE(chromeos_gpios)); |
T Michael Turney | b97e6f7 | 2021-03-18 09:16:44 -0700 | [diff] [blame] | 47 | } |
Hsuan-ting Chen | 642508a | 2021-10-27 10:59:41 +0000 | [diff] [blame] | 48 | |
| 49 | int get_ec_is_trusted(void) |
| 50 | { |
Shelley Chen | 3538461 | 2022-01-05 17:15:31 -0800 | [diff] [blame] | 51 | /* EC is trusted if not in RW. This is active low. */ |
| 52 | if (CONFIG(EC_GOOGLE_CHROMEEC)) |
| 53 | return !!gpio_get(GPIO_EC_IN_RW); |
| 54 | else /* If no EC, always return true */ |
| 55 | return 1; |
| 56 | } |
| 57 | |
Grzegorz Bernacki | 7758b47 | 2023-06-14 12:01:32 +0000 | [diff] [blame^] | 58 | int cr50_plat_irq_status(void) |
Shelley Chen | 3538461 | 2022-01-05 17:15:31 -0800 | [diff] [blame] | 59 | { |
| 60 | return gpio_irq_status(GPIO_H1_AP_INT); |
Hsuan-ting Chen | 642508a | 2021-10-27 10:59:41 +0000 | [diff] [blame] | 61 | } |