summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Sanders <nsanders@chromium.org>2018-08-21 15:08:20 -0700
committerchrome-bot <chrome-bot@chromium.org>2018-08-27 09:43:27 -0700
commit538f722d8cb63e581ce1756868ee249caafc4ee8 (patch)
tree0b83cc538708acf06ef032c7ef560410dd1cc18b
parent90bd02480e50f8c4a5d8f45fa0f894c02e85c0a1 (diff)
downloadchrome-ec-538f722d8cb63e581ce1756868ee249caafc4ee8.tar.gz
servo_micro: Fix DMA mappings
UART3 and 4 had DMA collisions. Remove DMA from UART4. BRANCH=servo-9040 BUG=b:112701646,chromium:865478 TEST=reboot EC, no crashy Change-Id: Ic44b363dafe938d6420b350eb1c5ab796da81f3c Signed-off-by: Nick Sanders <nsanders@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/1188514 Reviewed-by: Mary Ruthven <mruthven@chromium.org> Reviewed-by: Nicolas Boichat <drinkcat@chromium.org>
-rw-r--r--board/servo_micro/board.c48
-rw-r--r--board/servo_micro/board.h2
2 files changed, 35 insertions, 15 deletions
diff --git a/board/servo_micro/board.c b/board/servo_micro/board.c
index 355c091a77..a665b3dfe8 100644
--- a/board/servo_micro/board.c
+++ b/board/servo_micro/board.c
@@ -27,6 +27,31 @@
#include "gpio_list.h"
+void board_config_pre_init(void)
+{
+ /* enable SYSCFG clock */
+ STM32_RCC_APB2ENR |= STM32_RCC_SYSCFGEN;
+
+ /*
+ * the DMA mapping is :
+ * Chan 3 : USART3_RX
+ * Chan 5 : USART2_RX
+ * Chan 6 : USART4_RX (Disable)
+ * Chan 6 : SPI2_RX
+ * Chan 7 : SPI2_TX
+ *
+ * i2c : no dma
+ * tim16/17: no dma
+ */
+ STM32_SYSCFG_CFGR1 |= (1 << 26); /* Remap USART3 RX/TX DMA */
+
+ /* Remap SPI2 to DMA channels 6 and 7 */
+ /* STM32F072 SPI2 defaults to using DMA channels 4 and 5 */
+ /* but cros_ec hardcodes a 6/7 assumption in registers.h */
+ STM32_SYSCFG_CFGR1 |= (1 << 24);
+
+}
+
/******************************************************************************
* Forward UARTs as a USB serial interface.
*/
@@ -35,13 +60,13 @@
#define USB_STREAM_TX_SIZE 32
/******************************************************************************
- * Forward USART2 as a simple USB serial interface.
+ * Forward USART2 (EC) as a simple USB serial interface.
*/
static struct usart_config const usart2;
struct usb_stream_config const usart2_usb;
-static struct queue const usart2_to_usb = QUEUE_DIRECT(256, uint8_t,
+static struct queue const usart2_to_usb = QUEUE_DIRECT(128, uint8_t,
usart2.producer, usart2_usb.consumer);
static struct queue const usb_to_usart2 = QUEUE_DIRECT(64, uint8_t,
usart2_usb.producer, usart2.consumer);
@@ -70,13 +95,13 @@ USB_STREAM_CONFIG_USART_IFACE(usart2_usb,
/******************************************************************************
- * Forward USART3 as a simple USB serial interface.
+ * Forward USART3 (CPU) as a simple USB serial interface.
*/
static struct usart_config const usart3;
struct usb_stream_config const usart3_usb;
-static struct queue const usart3_to_usb = QUEUE_DIRECT(256, uint8_t,
+static struct queue const usart3_to_usb = QUEUE_DIRECT(128, uint8_t,
usart3.producer, usart3_usb.consumer);
static struct queue const usb_to_usart3 = QUEUE_DIRECT(64, uint8_t,
usart3_usb.producer, usart3.consumer);
@@ -105,23 +130,21 @@ USB_STREAM_CONFIG_USART_IFACE(usart3_usb,
/******************************************************************************
- * Forward USART4 as a simple USB serial interface.
+ * Forward USART4 (cr50) as a simple USB serial interface.
+ * We cannot enable DMA due to lack of DMA channels.
*/
static struct usart_config const usart4;
struct usb_stream_config const usart4_usb;
-static struct queue const usart4_to_usb = QUEUE_DIRECT(256, uint8_t,
+static struct queue const usart4_to_usb = QUEUE_DIRECT(64, 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,
- usart4_rx_dma.usart_rx,
+ usart_rx_interrupt,
usart_tx_interrupt,
115200,
0,
@@ -504,11 +527,6 @@ const unsigned int spi_devices_used = ARRAY_SIZE(spi_devices);
void usb_spi_board_enable(struct usb_spi_config const *config)
{
- /* Remap SPI2 to DMA channels 6 and 7 */
- /* STM32F072 SPI2 defaults to using DMA channels 4 and 5 */
- /* but cros_ec hardcodes a 6/7 assumption in registers.h */
- STM32_SYSCFG_CFGR1 |= (1 << 24);
-
/* Configure SPI GPIOs */
gpio_config_module(MODULE_SPI_FLASH, 1);
diff --git a/board/servo_micro/board.h b/board/servo_micro/board.h
index 2a11e7707c..86aff61772 100644
--- a/board/servo_micro/board.h
+++ b/board/servo_micro/board.h
@@ -11,6 +11,8 @@
/* 48 MHz SYSCLK clock frequency */
#define CPU_CLOCK 48000000
+#define CONFIG_BOARD_PRE_INIT
+
/* Enable USART1,3,4 and USB streams */
#define CONFIG_STREAM_USART
#define CONFIG_STREAM_USART2