From 710df3347106b079237e6a35c5b4b00007adea5e Mon Sep 17 00:00:00 2001 From: Kapil Porwal Date: Mon, 16 Mar 2026 16:08:46 +0530 Subject: [PATCH] mb/google/bluey: Signal ADSP to skip Type-C port resets during boot During certain boot sequences, such as low-battery or off-mode charging, automatic USB Type-C port resets initiated by the ADSP can cause unnecessary power fluctuations or connectivity drops. Implement adsp_skip_port_reset(), which toggles the SKIP_PORT_RESET bit in the PMIC_PD_NEGOTIATION_FLAG register. This bit informs the ADSP firmware to bypass its default port reset logic. Use this during low-power charging initialization to ensure a more stable boot process. BUG=b:436391478 TEST=Verify no unexpected port resets occur during Google/Quartz boot. Change-Id: I215a1806799a10355dd36b483f8d441f615f5258 Signed-off-by: Kapil Porwal Reviewed-on: https://review.coreboot.org/c/coreboot/+/91666 Reviewed-by: Jayvik Desai Reviewed-by: Subrata Banik Tested-by: build bot (Jenkins) --- src/mainboard/google/bluey/charging.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/mainboard/google/bluey/charging.c b/src/mainboard/google/bluey/charging.c index a499ca5888..1461ab86f9 100644 --- a/src/mainboard/google/bluey/charging.c +++ b/src/mainboard/google/bluey/charging.c @@ -40,6 +40,9 @@ #define EN_DEBUG_ACCESS_SRC 0x01 #define EN_SWITCHER_DAM_500 0x05 +#define PMIC_PD_NEGOTIATION_FLAG 0x7E7C +#define SKIP_PORT_RESET 0x08 + #define PMC8380F_SLAVE_ID 0x05 #define GPIO07_MODE_CTL 0x8E40 #define GPIO07_DIG_OUT_SOURCE_CTL 0x8E44 @@ -279,6 +282,16 @@ void disable_slow_battery_charging(void) spmi_write8(SMB2_CHGR_MAX_FCC_CFG, FCC_DISABLE); } +/* + * Instruct ADSP to skip type-c port resets + */ +static void adsp_skip_port_reset(void) +{ + uint8_t flags = (uint8_t)spmi_read8(PMIC_PD_NEGOTIATION_FLAG); + spmi_write8(PMIC_PD_NEGOTIATION_FLAG, flags | SKIP_PORT_RESET); + printk(BIOS_INFO, "Configured ADSP to avoid port resets\n"); +} + /* * Enable fast battery charging with ADSP support. * @@ -286,6 +299,8 @@ void disable_slow_battery_charging(void) */ void enable_fast_battery_charging(void) { + adsp_skip_port_reset(); + /* Load ADSP firmware first */ adsp_fw_load();