diff options
-rw-r--r-- | board/toradex/colibri-imx6ull/colibri_imx6ull.c | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/board/toradex/colibri-imx6ull/colibri_imx6ull.c b/board/toradex/colibri-imx6ull/colibri_imx6ull.c index bf8643fcb53..6e153623607 100644 --- a/board/toradex/colibri-imx6ull/colibri_imx6ull.c +++ b/board/toradex/colibri-imx6ull/colibri_imx6ull.c @@ -188,8 +188,30 @@ static void setup_iomux_fec(void) } #endif +/* + * UARTs are used in DTE mode, switch the mode on all UARTs before + * any pinmuxing connects a (DCE) output to a transceiver output. + */ +#define UCR3 0x88 /* FIFO Control Register */ +#define UCR3_RI (1<<8) /* RIDELT DTE mode */ +#define UCR3_DCD (1<<9) /* DCDDELT DTE mode */ +#define UFCR 0x90 /* FIFO Control Register */ +#define UFCR_DCEDTE (1<<6) /* DCE=0 */ + +static void setup_dtemode_uart(void) +{ + setbits_le32((u32 *)(UART1_BASE + UFCR), UFCR_DCEDTE); + setbits_le32((u32 *)(UART2_BASE + UFCR), UFCR_DCEDTE); + setbits_le32((u32 *)(UART5_BASE + UFCR), UFCR_DCEDTE); + + clrbits_le32((u32 *)(UART1_BASE + UCR3), UCR3_DCD | UCR3_RI); + clrbits_le32((u32 *)(UART2_BASE + UCR3), UCR3_DCD | UCR3_RI); + clrbits_le32((u32 *)(UART5_BASE + UCR3), UCR3_DCD | UCR3_RI); +} + static void setup_iomux_uart(void) { + setup_dtemode_uart(); imx_iomux_v3_setup_multiple_pads(uart1_pads, ARRAY_SIZE(uart1_pads)); } |