summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDiana Z <dzigterman@chromium.org>2021-04-12 09:36:56 -0600
committerCommit Bot <commit-bot@chromium.org>2021-04-13 19:39:21 +0000
commit50c844cebd1b4ed18da981ee4c1e6b7dab0baddf (patch)
treecd81a7d19dde55a1cffc347b10d405de943e18b9
parent45a3ca0d7f310a09e5db008e37bfb8c79bda25da (diff)
downloadchrome-ec-50c844cebd1b4ed18da981ee4c1e6b7dab0baddf.tar.gz
Mancomb: Add USB-A fault inputs to fault output
When we have an overcurrent, or when we have one of the USB-A fault interrupts asserted, we should in turn assert USB_FAULT_ODL to the SoC. BRANCH=None BUG=b:184884741 TEST=make -j buildall Signed-off-by: Diana Z <dzigterman@chromium.org> Change-Id: Ib0861cc973813ba5c052fddde03ff2775ef2f24f Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2822812 Reviewed-by: Rob Barnes <robbarnes@google.com> Commit-Queue: Rob Barnes <robbarnes@google.com>
-rw-r--r--baseboard/mancomb/base_gpio.inc12
-rw-r--r--baseboard/mancomb/baseboard.c40
-rw-r--r--baseboard/mancomb/baseboard.h1
3 files changed, 46 insertions, 7 deletions
diff --git a/baseboard/mancomb/base_gpio.inc b/baseboard/mancomb/base_gpio.inc
index 2b23c922d5..b70eb19663 100644
--- a/baseboard/mancomb/base_gpio.inc
+++ b/baseboard/mancomb/base_gpio.inc
@@ -54,11 +54,16 @@ GPIO_INT(USB_C0_PPC_INT_ODL, PIN(7, 5), GPIO_INT_FALLING, ppc_interrupt)
GPIO_INT(USB_C1_PPC_INT_ODL, PIN(D, 4), GPIO_INT_FALLING, ppc_interrupt)
GPIO_INT(USB_C0_BC12_INT_ODL, PIN(A, 4), GPIO_INT_FALLING | GPIO_PULL_UP, bc12_interrupt)
GPIO_INT(USB_C1_BC12_INT_ODL, PIN(9, 6), GPIO_INT_FALLING | GPIO_PULL_UP, bc12_interrupt)
-GPIO(USB_C0_C1_FAULT_ODL, PIN(1, 4), GPIO_OUT_HIGH) /* C0/C1 Fault to SOC */
+GPIO(USB_FAULT_ODL, PIN(1, 4), GPIO_OUT_HIGH) /* C0/C1 Fault to SOC */
GPIO(USB_C0_TCPC_RST_L, PIN(1, 5), GPIO_OUT_HIGH) /* C0 TCPC Reset */
GPIO(USB_C1_TCPC_RST_L, PIN(1, 6), GPIO_OUT_HIGH) /* C1 TCPC Reset */
GPIO(USB_C0_HPD, PIN(F, 5), GPIO_OUT_LOW) /* C0 DP Hotplug Detect */
GPIO(USB_C1_HPD, PIN(F, 4), GPIO_OUT_LOW) /* C1 DP Hotplug Detect */
+GPIO_INT(USB_A4_FAULT_R_ODL, PIN(1, 1), GPIO_INT_BOTH, baseboard_usb_fault_alert)
+GPIO_INT(USB_A3_FAULT_R_ODL, PIN(1, 0), GPIO_INT_BOTH, baseboard_usb_fault_alert)
+GPIO_INT(USB_A2_FAULT_R_ODL, PIN(0, 7), GPIO_INT_BOTH, baseboard_usb_fault_alert)
+GPIO_INT(USB_A1_FAULT_R_ODL, PIN(0, 6), GPIO_INT_BOTH, baseboard_usb_fault_alert)
+GPIO_INT(USB_A0_FAULT_R_ODL, PIN(0, 5), GPIO_INT_BOTH, baseboard_usb_fault_alert)
/* Sensor Signals */
ALTERNATE(/*TEMP_SOC|MEM*/ PIN_MASK(4, BIT(3) | BIT(5)), 0, MODULE_ADC, 0) /* SOC and Memory Temperature */
@@ -144,11 +149,6 @@ IOEX(USB_C1_SBU_FLIP, EXPIN(USBC_PORT_C1, 1, 7), GPIO_OUT_LOW)
GPIO(EC_ADC_6, PIN(3, 4), GPIO_INPUT | GPIO_PULL_UP)
GPIO(EC_FLPRG2, PIN(8, 6), GPIO_INPUT | GPIO_PULL_UP)
GPIO(EC_GPIO04, PIN(0, 4), GPIO_INPUT | GPIO_PULL_UP)
-GPIO(EC_GPIO05, PIN(0, 5), GPIO_INPUT | GPIO_PULL_UP)
-GPIO(EC_GPIO06, PIN(0, 6), GPIO_INPUT | GPIO_PULL_UP)
-GPIO(EC_GPIO07, PIN(0, 7), GPIO_INPUT | GPIO_PULL_UP)
-GPIO(EC_GPIO10, PIN(1, 0), GPIO_INPUT | GPIO_PULL_UP)
-GPIO(EC_GPIO11, PIN(1, 1), GPIO_INPUT | GPIO_PULL_UP)
GPIO(EC_GPIO20, PIN(2, 0), GPIO_INPUT | GPIO_PULL_UP)
GPIO(EC_GPIO22, PIN(2, 2), GPIO_INPUT | GPIO_PULL_UP)
GPIO(EC_GPIO23, PIN(2, 3), GPIO_INPUT | GPIO_PULL_UP)
diff --git a/baseboard/mancomb/baseboard.c b/baseboard/mancomb/baseboard.c
index 4e3a642a46..083be3522f 100644
--- a/baseboard/mancomb/baseboard.c
+++ b/baseboard/mancomb/baseboard.c
@@ -283,6 +283,13 @@ static void baseboard_interrupt_init(void)
/* Enable SBU fault interrupts */
ioex_enable_interrupt(IOEX_USB_C0_SBU_FAULT_ODL);
ioex_enable_interrupt(IOEX_USB_C1_SBU_FAULT_ODL);
+
+ /* Enable USB-A fault interrupts */
+ gpio_enable_interrupt(GPIO_USB_A4_FAULT_R_ODL);
+ gpio_enable_interrupt(GPIO_USB_A3_FAULT_R_ODL);
+ gpio_enable_interrupt(GPIO_USB_A2_FAULT_R_ODL);
+ gpio_enable_interrupt(GPIO_USB_A1_FAULT_R_ODL);
+ gpio_enable_interrupt(GPIO_USB_A0_FAULT_R_ODL);
}
DECLARE_HOOK(HOOK_INIT, baseboard_interrupt_init, HOOK_PRIO_INIT_I2C + 1);
@@ -718,12 +725,38 @@ static void baseboard_chipset_resume(void)
}
DECLARE_HOOK(HOOK_CHIPSET_RESUME, baseboard_chipset_resume, HOOK_PRIO_DEFAULT);
+static bool ocp_tracker[CONFIG_USB_PD_PORT_MAX_COUNT];
+
+static void set_usb_fault_output(void)
+{
+ bool fault_present = false;
+ int i;
+
+ /*
+ * EC must OR all fault alerts and pass them to USB_FAULT_ODL, including
+ * overcurrents.
+ */
+ for (i = 0; i < board_get_usb_pd_port_count(); i++)
+ if (ocp_tracker[i])
+ fault_present = true;
+
+ fault_present = fault_present ||
+ !gpio_get_level(GPIO_USB_A4_FAULT_R_ODL) ||
+ !gpio_get_level(GPIO_USB_A3_FAULT_R_ODL) ||
+ !gpio_get_level(GPIO_USB_A2_FAULT_R_ODL) ||
+ !gpio_get_level(GPIO_USB_A1_FAULT_R_ODL) ||
+ !gpio_get_level(GPIO_USB_A0_FAULT_R_ODL);
+
+ gpio_set_level(GPIO_USB_FAULT_ODL, !fault_present);
+}
+
void board_overcurrent_event(int port, int is_overcurrented)
{
switch (port) {
case USBC_PORT_C0:
case USBC_PORT_C1:
- gpio_set_level(GPIO_USB_C0_C1_FAULT_ODL, !is_overcurrented);
+ ocp_tracker[port] = is_overcurrented;
+ set_usb_fault_output();
break;
default:
@@ -731,6 +764,11 @@ void board_overcurrent_event(int port, int is_overcurrented)
}
}
+void baseboard_usb_fault_alert(enum gpio_signal signal)
+{
+ set_usb_fault_output();
+}
+
void baseboard_en_pwr_pcore_s0(enum gpio_signal signal)
{
diff --git a/baseboard/mancomb/baseboard.h b/baseboard/mancomb/baseboard.h
index f905e14586..66703fb317 100644
--- a/baseboard/mancomb/baseboard.h
+++ b/baseboard/mancomb/baseboard.h
@@ -307,6 +307,7 @@ enum mft_channel {
/* Baseboard Interrupt handlers. */
void baseboard_en_pwr_pcore_s0(enum gpio_signal signal);
void baseboard_en_pwr_s0(enum gpio_signal signal);
+void baseboard_usb_fault_alert(enum gpio_signal signal);
void bc12_interrupt(enum gpio_signal signal);
void ext_charger_interrupt(enum gpio_signal signal);
void dp_fault_interrupt(enum gpio_signal signal);