mb/google/dedede/var/metaknight: Add LTE power on/off sequence

LTE module used in metaknight has a specific power on/off sequence.
GPIOs related to power sequence are:
* GPP_A10 - LTE_PWR_OFF_R_ODL
* GPP_H17 - LTE_RESET_R_ODL
1. Power on: GPP_A10 -> 20ms -> GPP_H17
2. Power off: GPP_H17 -> 10ms -> GPP_A10
3. Warm reset: GPP_A10 keeps high, GPP_H17 goes low at least 2ms
Configure the GPIOs based on these requirements.

BUG=b:173671094
TEST=Build and boot Metaknight to OS. Ensure that the LTE module power
sequence requirements are met.

Change-Id: Ibff16129dfe2f1de2b1519049244aba4b3123e52
Signed-off-by: Tim Chen <tim-chen@quanta.corp-partner.google.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/48195
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Karthik Ramasubramanian <kramasub@google.com>
This commit is contained in:
Tim Chen 2020-12-01 10:04:04 +08:00 committed by Patrick Georgi
parent 9d20c84460
commit 77a7520385
4 changed files with 64 additions and 0 deletions

View File

@ -0,0 +1,5 @@
# SPDX-License-Identifier: GPL-2.0-only
ramstage-y += gpio.c
smm-y += variant.c

View File

@ -0,0 +1,21 @@
/* SPDX-License-Identifier: GPL-2.0-or-later */
#include <baseboard/gpio.h>
#include <baseboard/variants.h>
#include <commonlib/helpers.h>
#include <vendorcode/google/chromeos/chromeos.h>
/* Pad configuration in ramstage*/
static const struct pad_config gpio_table[] = {
/* A10 : WWAN_EN => LTE_PWR_OFF_ODL */
PAD_CFG_GPO(GPP_A10, 1, PWROK),
/* H17 : WWAN_RST_L => LTE_RESET_R_ODL */
PAD_CFG_GPO(GPP_H17, 0, PLTRST),
};
const struct pad_config *variant_override_gpio_table(size_t *num)
{
*num = ARRAY_SIZE(gpio_table);
return gpio_table;
}

View File

@ -68,6 +68,16 @@ chip soc/intel/jasperlake
device pci 14.0 on device pci 14.0 on
chip drivers/usb/acpi chip drivers/usb/acpi
device usb 0.0 on device usb 0.0 on
chip drivers/usb/acpi
register "desc" = ""LTE""
register "type" = "UPC_TYPE_INTERNAL"
register "has_power_resource" = "1"
register "reset_gpio" = "ACPI_GPIO_OUTPUT_ACTIVE_LOW(GPP_H17)"
register "reset_off_delay_ms" = "10"
register "enable_gpio" = "ACPI_GPIO_OUTPUT_ACTIVE_HIGH(GPP_A10)"
register "enable_delay_ms" = "20"
device usb 2.3 on end
end
chip drivers/usb/acpi chip drivers/usb/acpi
register "desc" = ""User Facing Camera"" register "desc" = ""User Facing Camera""
register "type" = "UPC_TYPE_INTERNAL" register "type" = "UPC_TYPE_INTERNAL"
@ -78,6 +88,11 @@ chip soc/intel/jasperlake
register "type" = "UPC_TYPE_INTERNAL" register "type" = "UPC_TYPE_INTERNAL"
device usb 2.6 on end device usb 2.6 on end
end end
chip drivers/usb/acpi
register "desc" = ""LTE""
register "type" = "UPC_TYPE_INTERNAL"
device usb 3.3 on end
end
end end
end end
end # USB xHCI end # USB xHCI

View File

@ -0,0 +1,23 @@
/* SPDX-License-Identifier: GPL-2.0-or-later */
#include <acpi/acpi.h>
#include <baseboard/variants.h>
#include <delay.h>
#include <gpio.h>
static void power_off_lte_module(void)
{
gpio_output(GPP_H17, 0);
mdelay(10);
gpio_output(GPP_A10, 0);
}
void variant_smi_sleep(u8 slp_typ)
{
/*
* Once the FW_CONFIG is provisioned, power off LTE module only under
* the situation where it is stuffed.
*/
if (slp_typ == ACPI_S5)
power_off_lte_module();
}