diff options
author | Jonathan Brandmeyer <jbrandmeyer@chromium.org> | 2018-08-24 14:30:35 -0600 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2018-09-07 18:36:37 -0700 |
commit | a530eb162a6aab5db3dee940ba2718e5a1924f8a (patch) | |
tree | 41e1f5fdc1db71eb13d1296d722b616380d887c1 | |
parent | 7fafaf999ff6d3b3565278a77fdba0a9ee1e26fe (diff) | |
download | chrome-ec-a530eb162a6aab5db3dee940ba2718e5a1924f8a.tar.gz |
grunt: Use higher priority TCPC interrupt tasks.
See also go/usb-pd-slow-response-time. Lift tcpc_alert_event interrupt
handler to baseboard.c to reduce duplication.
BUG=b:112848644, b:111909282
BRANCH=none
TEST=Observe response time after SrcCap to Sink Request is 15ms on
Careena and Grunt hardware after forcing a sysjump. Repeat test on
Careena Port 0 with the DB disconnected (containing Port 1), also 15ms.
Change-Id: I501bd86d84ba84eea0a705731e59e2431fc9a2ac
Signed-off-by: Jonathan Brandmeyer <jbrandmeyer@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/1194669
Commit-Ready: Jett Rink <jettrink@chromium.org>
Tested-by: Jett Rink <jettrink@chromium.org>
Reviewed-by: Jett Rink <jettrink@chromium.org>
-rw-r--r-- | baseboard/grunt/baseboard.c | 20 | ||||
-rw-r--r-- | baseboard/grunt/baseboard.h | 3 | ||||
-rw-r--r-- | board/aleena/board.c | 16 | ||||
-rw-r--r-- | board/aleena/ec.tasklist | 4 | ||||
-rw-r--r-- | board/careena/board.c | 16 | ||||
-rw-r--r-- | board/careena/ec.tasklist | 4 | ||||
-rw-r--r-- | board/grunt/board.c | 16 | ||||
-rw-r--r-- | board/grunt/ec.tasklist | 4 | ||||
-rw-r--r-- | board/liara/board.c | 16 | ||||
-rw-r--r-- | board/liara/ec.tasklist | 4 |
10 files changed, 35 insertions, 68 deletions
diff --git a/baseboard/grunt/baseboard.c b/baseboard/grunt/baseboard.c index c31dc3a769..c70a142840 100644 --- a/baseboard/grunt/baseboard.c +++ b/baseboard/grunt/baseboard.c @@ -40,6 +40,7 @@ #include "temp_sensor.h" #include "thermistor.h" #include "usb_mux.h" +#include "usb_pd.h" #include "usb_pd_tcpm.h" #include "usbc_ppc.h" #include "util.h" @@ -100,6 +101,25 @@ const struct tcpc_config_t tcpc_config[CONFIG_USB_PD_PORT_COUNT] = { }, }; +void tcpc_alert_event(enum gpio_signal signal) +{ + int port; + + if (signal == GPIO_USB_C0_PD_INT_ODL) { + if (!gpio_get_level(GPIO_USB_C0_PD_RST_L)) + return; + port = 0; + } + + if (signal == GPIO_USB_C1_PD_INT_ODL) { + if (!gpio_get_level(GPIO_USB_C1_PD_RST_L)) + return; + port = 1; + } + + schedule_deferred_pd_interrupt(port); +} + struct usb_mux usb_muxes[CONFIG_USB_PD_PORT_COUNT] = { [USB_PD_PORT_ANX74XX] = { .port_addr = USB_PD_PORT_ANX74XX, diff --git a/baseboard/grunt/baseboard.h b/baseboard/grunt/baseboard.h index 6adb4509ac..b1ff7c53c2 100644 --- a/baseboard/grunt/baseboard.h +++ b/baseboard/grunt/baseboard.h @@ -260,6 +260,9 @@ extern matrix_3x3_t grunt_base_standard_ref; void board_reset_pd_mcu(void); +/* Common definition for the USB PD interrupt handlers. */ +void tcpc_alert_event(enum gpio_signal signal); + #endif /* !__ASSEMBLER__ */ #endif /* __CROS_EC_BASEBOARD_H */ diff --git a/board/aleena/board.c b/board/aleena/board.c index 3ad74796bd..e2929e9ead 100644 --- a/board/aleena/board.c +++ b/board/aleena/board.c @@ -50,22 +50,6 @@ #define CPRINTS(format, args...) cprints(CC_USBCHARGE, format, ## args) #define CPRINTF(format, args...) cprintf(CC_USBCHARGE, format, ## args) -static void tcpc_alert_event(enum gpio_signal signal) -{ - if ((signal == GPIO_USB_C0_PD_INT_ODL) && - !gpio_get_level(GPIO_USB_C0_PD_RST_L)) - return; - - if ((signal == GPIO_USB_C1_PD_INT_ODL) && - !gpio_get_level(GPIO_USB_C1_PD_RST_L)) - return; - -#ifdef HAS_TASK_PDCMD - /* Exchange status with TCPCs */ - host_command_pd_send_status(PD_CHARGE_NO_CHANGE); -#endif -} - #ifdef CONFIG_USB_PD_TCPC_LOW_POWER static void anx74xx_cable_det_handler(void) { diff --git a/board/aleena/ec.tasklist b/board/aleena/ec.tasklist index be1dbcc21f..a4253b04c4 100644 --- a/board/aleena/ec.tasklist +++ b/board/aleena/ec.tasklist @@ -34,4 +34,6 @@ TASK_ALWAYS(POWERBTN, power_button_task, NULL, LARGER_TASK_STACK_SIZE) \ TASK_NOTEST(KEYSCAN, keyboard_scan_task, NULL, TASK_STACK_SIZE) \ TASK_ALWAYS(PD_C0, pd_task, NULL, LARGER_TASK_STACK_SIZE) \ - TASK_ALWAYS(PD_C1, pd_task, NULL, LARGER_TASK_STACK_SIZE) + TASK_ALWAYS(PD_C1, pd_task, NULL, LARGER_TASK_STACK_SIZE) \ + TASK_ALWAYS(PD_INT_C0, pd_interrupt_handler_task, 0, TASK_STACK_SIZE) \ + TASK_ALWAYS(PD_INT_C1, pd_interrupt_handler_task, 1, TASK_STACK_SIZE) diff --git a/board/careena/board.c b/board/careena/board.c index 1bae162930..2aec72f7c6 100644 --- a/board/careena/board.c +++ b/board/careena/board.c @@ -50,22 +50,6 @@ #define CPRINTS(format, args...) cprints(CC_USBCHARGE, format, ## args) #define CPRINTF(format, args...) cprintf(CC_USBCHARGE, format, ## args) -static void tcpc_alert_event(enum gpio_signal signal) -{ - if ((signal == GPIO_USB_C0_PD_INT_ODL) && - !gpio_get_level(GPIO_USB_C0_PD_RST_L)) - return; - - if ((signal == GPIO_USB_C1_PD_INT_ODL) && - !gpio_get_level(GPIO_USB_C1_PD_RST_L)) - return; - -#ifdef HAS_TASK_PDCMD - /* Exchange status with TCPCs */ - host_command_pd_send_status(PD_CHARGE_NO_CHANGE); -#endif -} - #ifdef CONFIG_USB_PD_TCPC_LOW_POWER static void anx74xx_cable_det_handler(void) { diff --git a/board/careena/ec.tasklist b/board/careena/ec.tasklist index be1dbcc21f..a4253b04c4 100644 --- a/board/careena/ec.tasklist +++ b/board/careena/ec.tasklist @@ -34,4 +34,6 @@ TASK_ALWAYS(POWERBTN, power_button_task, NULL, LARGER_TASK_STACK_SIZE) \ TASK_NOTEST(KEYSCAN, keyboard_scan_task, NULL, TASK_STACK_SIZE) \ TASK_ALWAYS(PD_C0, pd_task, NULL, LARGER_TASK_STACK_SIZE) \ - TASK_ALWAYS(PD_C1, pd_task, NULL, LARGER_TASK_STACK_SIZE) + TASK_ALWAYS(PD_C1, pd_task, NULL, LARGER_TASK_STACK_SIZE) \ + TASK_ALWAYS(PD_INT_C0, pd_interrupt_handler_task, 0, TASK_STACK_SIZE) \ + TASK_ALWAYS(PD_INT_C1, pd_interrupt_handler_task, 1, TASK_STACK_SIZE) diff --git a/board/grunt/board.c b/board/grunt/board.c index a3d6154bde..9dda591189 100644 --- a/board/grunt/board.c +++ b/board/grunt/board.c @@ -50,22 +50,6 @@ #define CPRINTS(format, args...) cprints(CC_USBCHARGE, format, ## args) #define CPRINTF(format, args...) cprintf(CC_USBCHARGE, format, ## args) -static void tcpc_alert_event(enum gpio_signal signal) -{ - if ((signal == GPIO_USB_C0_PD_INT_ODL) && - !gpio_get_level(GPIO_USB_C0_PD_RST_L)) - return; - - if ((signal == GPIO_USB_C1_PD_INT_ODL) && - !gpio_get_level(GPIO_USB_C1_PD_RST_L)) - return; - -#ifdef HAS_TASK_PDCMD - /* Exchange status with TCPCs */ - host_command_pd_send_status(PD_CHARGE_NO_CHANGE); -#endif -} - #ifdef CONFIG_USB_PD_TCPC_LOW_POWER static void anx74xx_cable_det_handler(void) { diff --git a/board/grunt/ec.tasklist b/board/grunt/ec.tasklist index be1dbcc21f..a4253b04c4 100644 --- a/board/grunt/ec.tasklist +++ b/board/grunt/ec.tasklist @@ -34,4 +34,6 @@ TASK_ALWAYS(POWERBTN, power_button_task, NULL, LARGER_TASK_STACK_SIZE) \ TASK_NOTEST(KEYSCAN, keyboard_scan_task, NULL, TASK_STACK_SIZE) \ TASK_ALWAYS(PD_C0, pd_task, NULL, LARGER_TASK_STACK_SIZE) \ - TASK_ALWAYS(PD_C1, pd_task, NULL, LARGER_TASK_STACK_SIZE) + TASK_ALWAYS(PD_C1, pd_task, NULL, LARGER_TASK_STACK_SIZE) \ + TASK_ALWAYS(PD_INT_C0, pd_interrupt_handler_task, 0, TASK_STACK_SIZE) \ + TASK_ALWAYS(PD_INT_C1, pd_interrupt_handler_task, 1, TASK_STACK_SIZE) diff --git a/board/liara/board.c b/board/liara/board.c index 28819b9e0b..63f083b78b 100644 --- a/board/liara/board.c +++ b/board/liara/board.c @@ -50,22 +50,6 @@ #define CPRINTS(format, args...) cprints(CC_USBCHARGE, format, ## args) #define CPRINTF(format, args...) cprintf(CC_USBCHARGE, format, ## args) -static void tcpc_alert_event(enum gpio_signal signal) -{ - if ((signal == GPIO_USB_C0_PD_INT_ODL) && - !gpio_get_level(GPIO_USB_C0_PD_RST_L)) - return; - - if ((signal == GPIO_USB_C1_PD_INT_ODL) && - !gpio_get_level(GPIO_USB_C1_PD_RST_L)) - return; - -#ifdef HAS_TASK_PDCMD - /* Exchange status with TCPCs */ - host_command_pd_send_status(PD_CHARGE_NO_CHANGE); -#endif -} - #ifdef CONFIG_USB_PD_TCPC_LOW_POWER static void anx74xx_cable_det_handler(void) { diff --git a/board/liara/ec.tasklist b/board/liara/ec.tasklist index be1dbcc21f..a4253b04c4 100644 --- a/board/liara/ec.tasklist +++ b/board/liara/ec.tasklist @@ -34,4 +34,6 @@ TASK_ALWAYS(POWERBTN, power_button_task, NULL, LARGER_TASK_STACK_SIZE) \ TASK_NOTEST(KEYSCAN, keyboard_scan_task, NULL, TASK_STACK_SIZE) \ TASK_ALWAYS(PD_C0, pd_task, NULL, LARGER_TASK_STACK_SIZE) \ - TASK_ALWAYS(PD_C1, pd_task, NULL, LARGER_TASK_STACK_SIZE) + TASK_ALWAYS(PD_C1, pd_task, NULL, LARGER_TASK_STACK_SIZE) \ + TASK_ALWAYS(PD_INT_C0, pd_interrupt_handler_task, 0, TASK_STACK_SIZE) \ + TASK_ALWAYS(PD_INT_C1, pd_interrupt_handler_task, 1, TASK_STACK_SIZE) |