From 2be64048c1cc775c49d9179501e9c51dd307ba72 Mon Sep 17 00:00:00 2001 From: Julius Werner Date: Fri, 1 Sep 2017 14:27:46 -0700 Subject: google/gru: Re-enable 3V rail GPIO on Scarlet We've decided to move control for the 3.0V rail (technically 3.3V on Scarlet, but who cares about millivolts) back to a GPIO on the AP for Scarlet rev2. This patch adds the necessary code to enable it and make ARM TF aware of its existence. Since the pin had previously not been connected to anything, we shouldn't really need to guard this by board ID... older Scarlets will just be twiddling an empty pin. Change-Id: I6037aa486b50119f2c7b859b966cadc3686e3459 Signed-off-by: Julius Werner Reviewed-on: https://review.coreboot.org/21328 Tested-by: build bot (Jenkins) Reviewed-by: David Schneider --- src/mainboard/google/gru/board.h | 2 +- src/mainboard/google/gru/bootblock.c | 10 +++----- src/mainboard/google/gru/mainboard.c | 47 +++++++++++++++--------------------- 3 files changed, 24 insertions(+), 35 deletions(-) (limited to 'src') diff --git a/src/mainboard/google/gru/board.h b/src/mainboard/google/gru/board.h index cc7581da65..7237d46d2c 100644 --- a/src/mainboard/google/gru/board.h +++ b/src/mainboard/google/gru/board.h @@ -30,7 +30,7 @@ #define GPIO_EC_IRQ GPIO(1, C, 2) #define GPIO_P15V_EN dead_code_t(gpio_t, "PP1500 doesn't exist on Scarlet") #define GPIO_P18V_AUDIO_PWREN dead_code_t(gpio_t, "doesn't exist on Scarlet") -#define GPIO_P30V_EN dead_code_t(gpio_t, "PP3000 doesn't exist on Scarlet") +#define GPIO_P30V_EN GPIO(0, B, 1) #define GPIO_TP_RST_L dead_code_t(gpio_t, "don't need TP_RST_L on Scarlet") #define GPIO_TPM_IRQ GPIO(1, C, 1) #define GPIO_WP GPIO(0, B, 5) diff --git a/src/mainboard/google/gru/bootblock.c b/src/mainboard/google/gru/bootblock.c index 01aa4bf47a..a3d31212c2 100644 --- a/src/mainboard/google/gru/bootblock.c +++ b/src/mainboard/google/gru/bootblock.c @@ -48,12 +48,10 @@ void bootblock_mainboard_early_init(void) if (IS_ENABLED(CONFIG_BOARD_GOOGLE_SCARLET)) write32(&rk3399_grf->io_vsel, RK_SETBITS(1 << 3)); - if (!IS_ENABLED(CONFIG_BOARD_GOOGLE_SCARLET)) { - /* Enable rails powering GPIO blocks, among other things. - These are EC-controlled on Scarlet and already on. */ - gpio_output(GPIO_P15V_EN, 1); - gpio_output(GPIO_P30V_EN, 1); - } + /* Enable rails powering GPIO blocks, among other things. */ + gpio_output(GPIO_P30V_EN, 1); + if (!IS_ENABLED(CONFIG_BOARD_GOOGLE_SCARLET)) + gpio_output(GPIO_P15V_EN, 1); /* Scarlet: EC-controlled */ #if IS_ENABLED(CONFIG_DRIVERS_UART) _Static_assert(CONFIG_CONSOLE_SERIAL_UART_ADDRESS == UART2_BASE, diff --git a/src/mainboard/google/gru/mainboard.c b/src/mainboard/google/gru/mainboard.c index df3df4fcae..43fbb71183 100644 --- a/src/mainboard/google/gru/mainboard.c +++ b/src/mainboard/google/gru/mainboard.c @@ -90,36 +90,27 @@ static void register_gpio_suspend(void) * with highest voltage first. * Since register_bl31() appends to the front of the list, we need to * register them backwards, with 1.5V coming first. + * 1.5V and 1.8V are EC-controlled on Scarlet, so we skip them. */ - static struct bl31_gpio_param param_p15_en = { - .h = { - .type = PARAM_SUSPEND_GPIO, - }, - .gpio = { - .polarity = BL31_GPIO_LEVEL_LOW, - }, - }; - param_p15_en.gpio.index = GPIO_P15V_EN.raw; - register_bl31_param(¶m_p15_en.h); - - static struct bl31_gpio_param param_p18_audio_en = { - .h = { - .type = PARAM_SUSPEND_GPIO, - }, - .gpio = { - .polarity = BL31_GPIO_LEVEL_LOW, - }, - }; - param_p18_audio_en.gpio.index = GPIO_P18V_AUDIO_PWREN.raw; - register_bl31_param(¶m_p18_audio_en.h); + if (!IS_ENABLED(CONFIG_BOARD_GOOGLE_SCARLET)) { + static struct bl31_gpio_param param_p15_en = { + .h = { .type = PARAM_SUSPEND_GPIO }, + .gpio = { .polarity = BL31_GPIO_LEVEL_LOW }, + }; + param_p15_en.gpio.index = GPIO_P15V_EN.raw; + register_bl31_param(¶m_p15_en.h); + + static struct bl31_gpio_param param_p18_audio_en = { + .h = { .type = PARAM_SUSPEND_GPIO }, + .gpio = { .polarity = BL31_GPIO_LEVEL_LOW }, + }; + param_p18_audio_en.gpio.index = GPIO_P18V_AUDIO_PWREN.raw; + register_bl31_param(¶m_p18_audio_en.h); + } static struct bl31_gpio_param param_p30_en = { - .h = { - .type = PARAM_SUSPEND_GPIO, - }, - .gpio = { - .polarity = BL31_GPIO_LEVEL_LOW, - }, + .h = { .type = PARAM_SUSPEND_GPIO }, + .gpio = { .polarity = BL31_GPIO_LEVEL_LOW }, }; param_p30_en.gpio.index = GPIO_P30V_EN.raw; register_bl31_param(¶m_p30_en.h); @@ -354,8 +345,8 @@ static void mainboard_init(device_t dev) if (!IS_ENABLED(CONFIG_BOARD_GOOGLE_SCARLET)) { configure_touchpad(); /* Scarlet: works differently */ setup_usb(1); /* Scarlet: only one USB port */ - register_gpio_suspend(); /* Scarlet: all EC-controlled */ } + register_gpio_suspend(); register_reset_to_bl31(); register_poweroff_to_bl31(); register_apio_suspend(); -- cgit v1.2.3