mb/google/bluey: Add power sequencing for USB-C1 retimer

This patch implements the power-on and reset sequence for the USB-C1
retimer on the Bluey mainboard.

Sequence Details:
 - romstage: Added early_setup_usb_typec to ensure all power rails
   (3.3V, 1.8V, 0.9V) are disabled and the retimer is held in reset
   early in the boot process.
 - ramstage (mainboard): Added setup_usb_typec to perform the power-up
   sequence with the required 1ms delays between rails to ensure
   hardware stability:

BUG=b:473489095
TEST=Able to detect USB devices in HS mode.

Change-Id: Ia93c0078aecdec98f3af28e73e7af5af7a3b20d8
Signed-off-by: Subrata Banik <subratabanik@google.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/90699
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Pranava Y N <pranavayn@google.com>
Reviewed-by: Jayvik Desai <jayvik@google.com>
Reviewed-by: Kapil Porwal <kapilporwal@google.com>
This commit is contained in:
Subrata Banik 2026-01-08 16:41:02 +05:30
commit 16cb8d0d0c
3 changed files with 36 additions and 0 deletions

View file

@ -44,6 +44,12 @@
#define GPIO_USB_CAM_RESET_L GPIO(10)
#define GPIO_USB_CAM_ENABLE GPIO(206)
/* USB-C1 port specific GPIOs */
#define GPIO_USB_C1_EN_PP3300 GPIO(186)
#define GPIO_USB_C1_EN_PP1800 GPIO(175)
#define GPIO_USB_C1_EN_PP0900 GPIO(188)
#define GPIO_USB_C1_RETIMER_RESET_L GPIO(176)
void setup_chromeos_gpios(void);
bool is_off_mode(void);
void configure_parallel_charging(void);

View file

@ -6,6 +6,7 @@
#include <commonlib/bsd/cbmem_id.h>
#include <commonlib/coreboot_tables.h>
#include <console/console.h>
#include <delay.h>
#include <device/device.h>
#include <ec/google/chromeec/ec.h>
#include <gpio.h>
@ -50,8 +51,21 @@ static void enable_usb_camera(void)
gpio_output(GPIO_USB_CAM_ENABLE, 1);
}
static void setup_usb_typec(void)
{
gpio_output(GPIO_USB_C1_EN_PP3300, 1);
mdelay(1);
gpio_output(GPIO_USB_C1_EN_PP1800, 1);
mdelay(1);
gpio_output(GPIO_USB_C1_EN_PP0900, 1);
mdelay(1);
gpio_output(GPIO_USB_C1_RETIMER_RESET_L, 1);
}
static void setup_usb(void)
{
setup_usb_typec();
enable_usb_camera();
setup_usb_host0();
}

View file

@ -86,6 +86,19 @@ static void platform_dump_battery_soc_information(void)
printk(BIOS_INFO, "Battery state-of-charge %d%%\n", batt_pct);
}
static void early_setup_usb_typec(void)
{
gpio_output(GPIO_USB_C1_RETIMER_RESET_L, 0);
gpio_output(GPIO_USB_C1_EN_PP3300, 0);
gpio_output(GPIO_USB_C1_EN_PP1800, 0);
gpio_output(GPIO_USB_C1_EN_PP0900, 0);
}
static void early_setup_usb(void)
{
early_setup_usb_typec();
}
void platform_romstage_main(void)
{
/* Watchdog must be checked first to avoid erasing watchdog info later. */
@ -107,6 +120,9 @@ void platform_romstage_main(void)
qclib_rerun();
/* Setup early USB related config */
early_setup_usb();
/*
* Enable this power rail now for FPMCU stability prior to
* its reset being deasserted in ramstage. This applies