From 437c505467a56d76d4f60036e1005464b6da9822 Mon Sep 17 00:00:00 2001 From: Nick Sanders Date: Tue, 14 Aug 2018 17:44:52 -0700 Subject: servo_micro: enable dma, increase queue size servo_micro can drop incoming UART chars is there are unfortunately timed interrupts. We'll add DMA RX and extra queueing. BRANCH=servo BUG=b:80540170,chromium:865478 TEST=stress servo_micro console and ec console. No chars dropped anymore. Change-Id: I939bec0862c318686a0215ec8081823aa8c35fec Signed-off-by: Nick Sanders Reviewed-on: https://chromium-review.googlesource.com/1175321 Commit-Ready: ChromeOS CL Exonerator Bot Tested-by: Mary Ruthven Reviewed-by: Mary Ruthven (cherry picked from commit 428e0323cd3373519cac05389587becf444ec0aa) Reviewed-on: https://chromium-review.googlesource.com/1176522 --- board/servo_micro/board.c | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/board/servo_micro/board.c b/board/servo_micro/board.c index 0e17692dfb..2f33f66725 100644 --- a/board/servo_micro/board.c +++ b/board/servo_micro/board.c @@ -29,8 +29,8 @@ * Forward UARTs as a USB serial interface. */ -#define USB_STREAM_RX_SIZE 16 -#define USB_STREAM_TX_SIZE 16 +#define USB_STREAM_RX_SIZE 32 +#define USB_STREAM_TX_SIZE 32 /****************************************************************************** * Forward USART2 as a simple USB serial interface. @@ -39,14 +39,17 @@ static struct usart_config const usart2; struct usb_stream_config const usart2_usb; -static struct queue const usart2_to_usb = QUEUE_DIRECT(64, uint8_t, +static struct queue const usart2_to_usb = QUEUE_DIRECT(256, uint8_t, usart2.producer, usart2_usb.consumer); static struct queue const usb_to_usart2 = QUEUE_DIRECT(64, uint8_t, usart2_usb.producer, usart2.consumer); +static struct usart_rx_dma const usart2_rx_dma = + USART_RX_DMA(STM32_DMAC_CH5, 32); + static struct usart_config const usart2 = USART_CONFIG(usart2_hw, - usart_rx_interrupt, + usart2_rx_dma.usart_rx, usart_tx_interrupt, 115200, usart2_to_usb, @@ -70,14 +73,17 @@ USB_STREAM_CONFIG_USART_IFACE(usart2_usb, static struct usart_config const usart3; struct usb_stream_config const usart3_usb; -static struct queue const usart3_to_usb = QUEUE_DIRECT(64, uint8_t, +static struct queue const usart3_to_usb = QUEUE_DIRECT(256, uint8_t, usart3.producer, usart3_usb.consumer); static struct queue const usb_to_usart3 = QUEUE_DIRECT(64, uint8_t, usart3_usb.producer, usart3.consumer); +static struct usart_rx_dma const usart3_rx_dma = + USART_RX_DMA(STM32_DMAC_CH3, 32); + static struct usart_config const usart3 = USART_CONFIG(usart3_hw, - usart_rx_interrupt, + usart3_rx_dma.usart_rx, usart_tx_interrupt, 115200, usart3_to_usb, @@ -101,14 +107,17 @@ USB_STREAM_CONFIG_USART_IFACE(usart3_usb, static struct usart_config const usart4; struct usb_stream_config const usart4_usb; -static struct queue const usart4_to_usb = QUEUE_DIRECT(64, uint8_t, +static struct queue const usart4_to_usb = QUEUE_DIRECT(256, uint8_t, usart4.producer, usart4_usb.consumer); static struct queue const usb_to_usart4 = QUEUE_DIRECT(64, uint8_t, usart4_usb.producer, usart4.consumer); +static struct usart_rx_dma const usart4_rx_dma = + USART_RX_DMA(STM32_DMAC_CH6, 32); + static struct usart_config const usart4 = USART_CONFIG(usart4_hw, - usart_rx_interrupt, + usart4_rx_dma.usart_rx, usart_tx_interrupt, 115200, usart4_to_usb, -- cgit v1.2.1