serial: stm32x7: add fifo support for STM32H7
authorPatrice Chotard <patrice.chotard@st.com>
Wed, 27 Sep 2017 13:44:51 +0000 (15:44 +0200)
committerTom Rini <trini@konsulko.com>
Sun, 8 Oct 2017 20:19:56 +0000 (16:19 -0400)
Add fifo mode support for rx and tx.
As only STM32H7 supports this feature, add has_fifo flag
to uart configuration to use fifo only when possible.

Signed-off-by: Patrice Chotard <patrice.chotard@st.com>
drivers/serial/serial_stm32x7.c
drivers/serial/serial_stm32x7.h

index 81a230860dacaf12e68393417a1a49b1966edd7e..19697e31e748e719e02e2c4cbe2a26864e6b7e2b 100644 (file)
@@ -117,6 +117,8 @@ static int stm32_serial_probe(struct udevice *dev)
                     BIT(uart_enable_bit));
        if (plat->uart_info->has_overrun_disable)
                setbits_le32(base + CR3_OFFSET(stm32f4), USART_CR3_OVRDIS);
+       if (plat->uart_info->has_fifo)
+               setbits_le32(base + CR1_OFFSET(stm32f4), USART_CR1_FIFOEN);
        setbits_le32(base + CR1_OFFSET(stm32f4), USART_CR1_RE | USART_CR1_TE |
                     BIT(uart_enable_bit));
 
@@ -125,8 +127,8 @@ static int stm32_serial_probe(struct udevice *dev)
 
 #if CONFIG_IS_ENABLED(OF_CONTROL)
 static const struct udevice_id stm32_serial_id[] = {
-       { .compatible = "st,stm32f7-uart", .data = (ulong)&stm32x7_info},
-       { .compatible = "st,stm32h7-uart", .data = (ulong)&stm32x7_info},
+       { .compatible = "st,stm32f7-uart", .data = (ulong)&stm32f7_info},
+       { .compatible = "st,stm32h7-uart", .data = (ulong)&stm32h7_info},
        {}
 };
 
index 4c6b7d4206dc7a93d86a054859369a3fde9897d8..ed8a3eeb2cb7fb190c0ef3957f228d33879b049d 100644 (file)
@@ -24,12 +24,21 @@ struct stm32_uart_info {
        u8 uart_enable_bit;     /* UART_CR1_UE */
        bool stm32f4;           /* true for STM32F4, false otherwise */
        bool has_overrun_disable;
+       bool has_fifo;
 };
 
-struct stm32_uart_info stm32x7_info = {
+struct stm32_uart_info stm32f7_info = {
        .uart_enable_bit = 0,
        .stm32f4 = false,
        .has_overrun_disable = true,
+       .has_fifo = false,
+};
+
+struct stm32_uart_info stm32h7_info = {
+       .uart_enable_bit = 0,
+       .stm32f4 = false,
+       .has_overrun_disable = true,
+       .has_fifo = true,
 };
 
 /* Information about a serial port */
@@ -39,6 +48,7 @@ struct stm32x7_serial_platdata {
        unsigned long int clock_rate;
 };
 
+#define USART_CR1_FIFOEN               BIT(29)
 #define USART_CR1_OVER8                        BIT(15)
 #define USART_CR1_TE                   BIT(3)
 #define USART_CR1_RE                   BIT(2)