Lines Matching refs:stm32_port

111 static inline struct stm32_port *to_stm32_port(struct uart_port *port)  in to_stm32_port()
113 return container_of(port, struct stm32_port, port); in to_stm32_port()
136 struct stm32_port *stm32_port = to_stm32_port(port); in stm32_usart_tx_empty() local
137 const struct stm32_usart_offsets *ofs = &stm32_port->info->ofs; in stm32_usart_tx_empty()
147 struct stm32_port *stm32_port = to_stm32_port(port); in stm32_usart_rs485_rts_enable() local
150 if (stm32_port->hw_flow_control || in stm32_usart_rs485_rts_enable()
155 mctrl_gpio_set(stm32_port->gpios, in stm32_usart_rs485_rts_enable()
156 stm32_port->port.mctrl | TIOCM_RTS); in stm32_usart_rs485_rts_enable()
158 mctrl_gpio_set(stm32_port->gpios, in stm32_usart_rs485_rts_enable()
159 stm32_port->port.mctrl & ~TIOCM_RTS); in stm32_usart_rs485_rts_enable()
165 struct stm32_port *stm32_port = to_stm32_port(port); in stm32_usart_rs485_rts_disable() local
168 if (stm32_port->hw_flow_control || in stm32_usart_rs485_rts_disable()
173 mctrl_gpio_set(stm32_port->gpios, in stm32_usart_rs485_rts_disable()
174 stm32_port->port.mctrl & ~TIOCM_RTS); in stm32_usart_rs485_rts_disable()
176 mctrl_gpio_set(stm32_port->gpios, in stm32_usart_rs485_rts_disable()
177 stm32_port->port.mctrl | TIOCM_RTS); in stm32_usart_rs485_rts_disable()
221 struct stm32_port *stm32_port = to_stm32_port(port); in stm32_usart_config_rs485() local
222 const struct stm32_usart_offsets *ofs = &stm32_port->info->ofs; in stm32_usart_config_rs485()
223 const struct stm32_usart_config *cfg = &stm32_port->info->cfg; in stm32_usart_config_rs485()
290 static bool stm32_usart_rx_dma_started(struct stm32_port *stm32_port) in stm32_usart_rx_dma_started() argument
292 return stm32_port->rx_ch ? stm32_port->rx_dma_busy : false; in stm32_usart_rx_dma_started()
295 static void stm32_usart_rx_dma_terminate(struct stm32_port *stm32_port) in stm32_usart_rx_dma_terminate() argument
297 dmaengine_terminate_async(stm32_port->rx_ch); in stm32_usart_rx_dma_terminate()
298 stm32_port->rx_dma_busy = false; in stm32_usart_rx_dma_terminate()
301 static int stm32_usart_dma_pause_resume(struct stm32_port *stm32_port, in stm32_usart_dma_pause_resume() argument
305 bool stm32_usart_xx_dma_started(struct stm32_port *), in stm32_usart_dma_pause_resume() argument
306 void stm32_usart_xx_dma_terminate(struct stm32_port *)) in stm32_usart_dma_pause_resume() argument
308 struct uart_port *port = &stm32_port->port; in stm32_usart_dma_pause_resume()
312 if (!stm32_usart_xx_dma_started(stm32_port)) in stm32_usart_dma_pause_resume()
322 stm32_usart_xx_dma_terminate(stm32_port); in stm32_usart_dma_pause_resume()
327 static int stm32_usart_rx_dma_pause(struct stm32_port *stm32_port) in stm32_usart_rx_dma_pause() argument
329 return stm32_usart_dma_pause_resume(stm32_port, stm32_port->rx_ch, in stm32_usart_rx_dma_pause()
335 static int stm32_usart_rx_dma_resume(struct stm32_port *stm32_port) in stm32_usart_rx_dma_resume() argument
337 return stm32_usart_dma_pause_resume(stm32_port, stm32_port->rx_ch, in stm32_usart_rx_dma_resume()
346 struct stm32_port *stm32_port = to_stm32_port(port); in stm32_usart_pending_rx_pio() local
347 const struct stm32_usart_offsets *ofs = &stm32_port->info->ofs; in stm32_usart_pending_rx_pio()
353 if (!stm32_usart_rx_dma_started(stm32_port)) in stm32_usart_pending_rx_pio()
366 struct stm32_port *stm32_port = to_stm32_port(port); in stm32_usart_get_char_pio() local
367 const struct stm32_usart_offsets *ofs = &stm32_port->info->ofs; in stm32_usart_get_char_pio()
372 c &= stm32_port->rdr_mask; in stm32_usart_get_char_pio()
379 struct stm32_port *stm32_port = to_stm32_port(port); in stm32_usart_receive_chars_pio() local
380 const struct stm32_usart_offsets *ofs = &stm32_port->info->ofs; in stm32_usart_receive_chars_pio()
445 struct stm32_port *stm32_port = to_stm32_port(port); in stm32_usart_push_buffer_dma() local
446 struct tty_port *ttyport = &stm32_port->port.state->port; in stm32_usart_push_buffer_dma()
450 dma_start = stm32_port->rx_buf + (RX_BUF_L - stm32_port->last_res); in stm32_usart_push_buffer_dma()
457 if (!(stm32_port->rdr_mask == (BIT(8) - 1))) in stm32_usart_push_buffer_dma()
459 *(dma_start + i) &= stm32_port->rdr_mask; in stm32_usart_push_buffer_dma()
465 stm32_port->last_res -= dma_count; in stm32_usart_push_buffer_dma()
466 if (stm32_port->last_res == 0) in stm32_usart_push_buffer_dma()
467 stm32_port->last_res = RX_BUF_L; in stm32_usart_push_buffer_dma()
472 struct stm32_port *stm32_port = to_stm32_port(port); in stm32_usart_receive_chars_dma() local
476 if (stm32_port->rx_dma_state.residue > stm32_port->last_res) { in stm32_usart_receive_chars_dma()
478 dma_size = stm32_port->last_res; in stm32_usart_receive_chars_dma()
483 dma_size = stm32_port->last_res - stm32_port->rx_dma_state.residue; in stm32_usart_receive_chars_dma()
492 struct stm32_port *stm32_port = to_stm32_port(port); in stm32_usart_receive_chars() local
493 const struct stm32_usart_offsets *ofs = &stm32_port->info->ofs; in stm32_usart_receive_chars()
498 if (stm32_usart_rx_dma_started(stm32_port) || force_dma_flush) { in stm32_usart_receive_chars()
499 rx_dma_status = dmaengine_tx_status(stm32_port->rx_ch, in stm32_usart_receive_chars()
500 stm32_port->rx_ch->cookie, in stm32_usart_receive_chars()
501 &stm32_port->rx_dma_state); in stm32_usart_receive_chars()
519 stm32_usart_rx_dma_terminate(stm32_port); in stm32_usart_receive_chars()
547 struct stm32_port *stm32_port = to_stm32_port(port); in stm32_usart_rx_dma_start_or_resume() local
552 if (stm32_port->throttled) in stm32_usart_rx_dma_start_or_resume()
555 if (stm32_port->rx_dma_busy) { in stm32_usart_rx_dma_start_or_resume()
556 rx_dma_status = dmaengine_tx_status(stm32_port->rx_ch, in stm32_usart_rx_dma_start_or_resume()
557 stm32_port->rx_ch->cookie, in stm32_usart_rx_dma_start_or_resume()
562 if (rx_dma_status == DMA_PAUSED && !stm32_usart_rx_dma_resume(stm32_port)) in stm32_usart_rx_dma_start_or_resume()
566 stm32_usart_rx_dma_terminate(stm32_port); in stm32_usart_rx_dma_start_or_resume()
569 stm32_port->rx_dma_busy = true; in stm32_usart_rx_dma_start_or_resume()
571 stm32_port->last_res = RX_BUF_L; in stm32_usart_rx_dma_start_or_resume()
573 desc = dmaengine_prep_dma_cyclic(stm32_port->rx_ch, in stm32_usart_rx_dma_start_or_resume()
574 stm32_port->rx_dma_buf, in stm32_usart_rx_dma_start_or_resume()
580 stm32_port->rx_dma_busy = false; in stm32_usart_rx_dma_start_or_resume()
590 dmaengine_terminate_sync(stm32_port->rx_ch); in stm32_usart_rx_dma_start_or_resume()
591 stm32_port->rx_dma_busy = false; in stm32_usart_rx_dma_start_or_resume()
596 dma_async_issue_pending(stm32_port->rx_ch); in stm32_usart_rx_dma_start_or_resume()
601 static void stm32_usart_tx_dma_terminate(struct stm32_port *stm32_port) in stm32_usart_tx_dma_terminate() argument
603 dmaengine_terminate_async(stm32_port->tx_ch); in stm32_usart_tx_dma_terminate()
604 stm32_port->tx_dma_busy = false; in stm32_usart_tx_dma_terminate()
607 static bool stm32_usart_tx_dma_started(struct stm32_port *stm32_port) in stm32_usart_tx_dma_started() argument
616 return stm32_port->tx_dma_busy; in stm32_usart_tx_dma_started()
619 static int stm32_usart_tx_dma_pause(struct stm32_port *stm32_port) in stm32_usart_tx_dma_pause() argument
621 return stm32_usart_dma_pause_resume(stm32_port, stm32_port->tx_ch, in stm32_usart_tx_dma_pause()
627 static int stm32_usart_tx_dma_resume(struct stm32_port *stm32_port) in stm32_usart_tx_dma_resume() argument
629 return stm32_usart_dma_pause_resume(stm32_port, stm32_port->tx_ch, in stm32_usart_tx_dma_resume()
638 struct stm32_port *stm32port = to_stm32_port(port); in stm32_usart_tx_dma_complete()
651 struct stm32_port *stm32_port = to_stm32_port(port); in stm32_usart_tx_interrupt_enable() local
652 const struct stm32_usart_offsets *ofs = &stm32_port->info->ofs; in stm32_usart_tx_interrupt_enable()
658 if (stm32_port->fifoen && stm32_port->txftcfg >= 0) in stm32_usart_tx_interrupt_enable()
666 struct stm32_port *stm32_port = to_stm32_port(port); in stm32_usart_tc_interrupt_enable() local
667 const struct stm32_usart_offsets *ofs = &stm32_port->info->ofs; in stm32_usart_tc_interrupt_enable()
674 struct stm32_port *stm32_port = to_stm32_port(port); in stm32_usart_tx_interrupt_disable() local
675 const struct stm32_usart_offsets *ofs = &stm32_port->info->ofs; in stm32_usart_tx_interrupt_disable()
677 if (stm32_port->fifoen && stm32_port->txftcfg >= 0) in stm32_usart_tx_interrupt_disable()
685 struct stm32_port *stm32_port = to_stm32_port(port); in stm32_usart_tc_interrupt_disable() local
686 const struct stm32_usart_offsets *ofs = &stm32_port->info->ofs; in stm32_usart_tc_interrupt_disable()
693 struct stm32_port *stm32_port = to_stm32_port(port); in stm32_usart_transmit_chars_pio() local
694 const struct stm32_usart_offsets *ofs = &stm32_port->info->ofs; in stm32_usart_transmit_chars_pio()
714 struct stm32_port *stm32port = to_stm32_port(port); in stm32_usart_transmit_chars_dma()
789 struct stm32_port *stm32_port = to_stm32_port(port); in stm32_usart_transmit_chars() local
790 const struct stm32_usart_offsets *ofs = &stm32_port->info->ofs; in stm32_usart_transmit_chars()
795 if (!stm32_port->hw_flow_control && in stm32_usart_transmit_chars()
805 stm32_usart_tx_dma_pause(stm32_port); in stm32_usart_transmit_chars()
821 stm32_usart_tx_dma_resume(stm32_port); in stm32_usart_transmit_chars()
835 if (stm32_port->tx_ch) in stm32_usart_transmit_chars()
845 if (!stm32_port->hw_flow_control && in stm32_usart_transmit_chars()
856 struct stm32_port *stm32_port = to_stm32_port(port); in stm32_usart_interrupt() local
857 const struct stm32_usart_offsets *ofs = &stm32_port->info->ofs; in stm32_usart_interrupt()
864 if (!stm32_port->hw_flow_control && in stm32_usart_interrupt()
892 if (!stm32_port->throttled) { in stm32_usart_interrupt()
893 if (((sr & USART_SR_RXNE) && !stm32_usart_rx_dma_started(stm32_port)) || in stm32_usart_interrupt()
894 ((sr & USART_SR_ERR_MASK) && stm32_usart_rx_dma_started(stm32_port))) { in stm32_usart_interrupt()
904 if ((sr & USART_SR_TXE) && !(stm32_port->tx_ch)) { in stm32_usart_interrupt()
912 if (stm32_usart_rx_dma_started(stm32_port) && !stm32_port->throttled) { in stm32_usart_interrupt()
926 struct stm32_port *stm32_port = to_stm32_port(port); in stm32_usart_set_mctrl() local
927 const struct stm32_usart_offsets *ofs = &stm32_port->info->ofs; in stm32_usart_set_mctrl()
934 mctrl_gpio_set(stm32_port->gpios, mctrl); in stm32_usart_set_mctrl()
939 struct stm32_port *stm32_port = to_stm32_port(port); in stm32_usart_get_mctrl() local
945 return mctrl_gpio_get(stm32_port->gpios, &ret); in stm32_usart_get_mctrl()
961 struct stm32_port *stm32_port = to_stm32_port(port); in stm32_usart_stop_tx() local
966 stm32_usart_tx_dma_pause(stm32_port); in stm32_usart_stop_tx()
989 struct stm32_port *stm32_port = to_stm32_port(port); in stm32_usart_flush_buffer() local
991 if (stm32_port->tx_ch) in stm32_usart_flush_buffer()
992 stm32_usart_tx_dma_terminate(stm32_port); in stm32_usart_flush_buffer()
998 struct stm32_port *stm32_port = to_stm32_port(port); in stm32_usart_throttle() local
999 const struct stm32_usart_offsets *ofs = &stm32_port->info->ofs; in stm32_usart_throttle()
1008 stm32_usart_rx_dma_pause(stm32_port); in stm32_usart_throttle()
1010 stm32_usart_clr_bits(port, ofs->cr1, stm32_port->cr1_irq); in stm32_usart_throttle()
1011 if (stm32_port->cr3_irq) in stm32_usart_throttle()
1012 stm32_usart_clr_bits(port, ofs->cr3, stm32_port->cr3_irq); in stm32_usart_throttle()
1014 stm32_port->throttled = true; in stm32_usart_throttle()
1021 struct stm32_port *stm32_port = to_stm32_port(port); in stm32_usart_unthrottle() local
1022 const struct stm32_usart_offsets *ofs = &stm32_port->info->ofs; in stm32_usart_unthrottle()
1026 stm32_usart_set_bits(port, ofs->cr1, stm32_port->cr1_irq); in stm32_usart_unthrottle()
1027 if (stm32_port->cr3_irq) in stm32_usart_unthrottle()
1028 stm32_usart_set_bits(port, ofs->cr3, stm32_port->cr3_irq); in stm32_usart_unthrottle()
1030 stm32_port->throttled = false; in stm32_usart_unthrottle()
1036 if (stm32_port->rx_ch) in stm32_usart_unthrottle()
1045 struct stm32_port *stm32_port = to_stm32_port(port); in stm32_usart_stop_rx() local
1046 const struct stm32_usart_offsets *ofs = &stm32_port->info->ofs; in stm32_usart_stop_rx()
1049 stm32_usart_rx_dma_pause(stm32_port); in stm32_usart_stop_rx()
1051 stm32_usart_clr_bits(port, ofs->cr1, stm32_port->cr1_irq); in stm32_usart_stop_rx()
1052 if (stm32_port->cr3_irq) in stm32_usart_stop_rx()
1053 stm32_usart_clr_bits(port, ofs->cr3, stm32_port->cr3_irq); in stm32_usart_stop_rx()
1063 struct stm32_port *stm32_port = to_stm32_port(port); in stm32_usart_startup() local
1064 const struct stm32_usart_offsets *ofs = &stm32_port->info->ofs; in stm32_usart_startup()
1065 const struct stm32_usart_config *cfg = &stm32_port->info->cfg; in stm32_usart_startup()
1075 if (stm32_port->swap) { in stm32_usart_startup()
1080 stm32_port->throttled = false; in stm32_usart_startup()
1086 if (stm32_port->rx_ch) { in stm32_usart_startup()
1095 val = stm32_port->cr1_irq | USART_CR1_RE | BIT(cfg->uart_enable_bit); in stm32_usart_startup()
1103 struct stm32_port *stm32_port = to_stm32_port(port); in stm32_usart_shutdown() local
1104 const struct stm32_usart_offsets *ofs = &stm32_port->info->ofs; in stm32_usart_shutdown()
1105 const struct stm32_usart_config *cfg = &stm32_port->info->cfg; in stm32_usart_shutdown()
1109 if (stm32_usart_tx_dma_started(stm32_port)) in stm32_usart_shutdown()
1110 stm32_usart_tx_dma_terminate(stm32_port); in stm32_usart_shutdown()
1112 if (stm32_port->tx_ch) in stm32_usart_shutdown()
1119 val |= stm32_port->cr1_irq | USART_CR1_RE; in stm32_usart_shutdown()
1121 if (stm32_port->fifoen) in stm32_usart_shutdown()
1133 if (stm32_port->rx_ch) { in stm32_usart_shutdown()
1134 stm32_usart_rx_dma_terminate(stm32_port); in stm32_usart_shutdown()
1135 dmaengine_synchronize(stm32_port->rx_ch); in stm32_usart_shutdown()
1152 struct stm32_port *stm32_port = to_stm32_port(port); in stm32_usart_set_termios() local
1153 const struct stm32_usart_offsets *ofs = &stm32_port->info->ofs; in stm32_usart_set_termios()
1154 const struct stm32_usart_config *cfg = &stm32_port->info->cfg; in stm32_usart_set_termios()
1163 if (!stm32_port->hw_flow_control) in stm32_usart_set_termios()
1188 if (stm32_port->fifoen) in stm32_usart_set_termios()
1190 cr2 = stm32_port->swap ? USART_CR2_SWAP : 0; in stm32_usart_set_termios()
1195 if (stm32_port->fifoen) { in stm32_usart_set_termios()
1196 if (stm32_port->txftcfg >= 0) in stm32_usart_set_termios()
1197 cr3 |= stm32_port->txftcfg << USART_CR3_TXFTCFG_SHIFT; in stm32_usart_set_termios()
1198 if (stm32_port->rxftcfg >= 0) in stm32_usart_set_termios()
1199 cr3 |= stm32_port->rxftcfg << USART_CR3_RXFTCFG_SHIFT; in stm32_usart_set_termios()
1206 stm32_port->rdr_mask = (BIT(bits) - 1); in stm32_usart_set_termios()
1237 if (ofs->rtor != UNDEF_REG && (stm32_port->rx_ch || in stm32_usart_set_termios()
1238 (stm32_port->fifoen && in stm32_usart_set_termios()
1239 stm32_port->rxftcfg >= 0))) { in stm32_usart_set_termios()
1246 stm32_port->cr1_irq = USART_CR1_RTOIE; in stm32_usart_set_termios()
1253 stm32_port->cr3_irq = USART_CR3_RXFTIE; in stm32_usart_set_termios()
1256 cr1 |= stm32_port->cr1_irq; in stm32_usart_set_termios()
1257 cr3 |= stm32_port->cr3_irq; in stm32_usart_set_termios()
1316 if (stm32_port->rx_ch) { in stm32_usart_set_termios()
1327 if (stm32_port->tx_ch) in stm32_usart_set_termios()
1349 if (stm32_port->wakeup_src) { in stm32_usart_set_termios()
1398 struct stm32_port *stm32port = container_of(port, in stm32_usart_pm()
1399 struct stm32_port, port); in stm32_usart_pm()
1422 struct stm32_port *stm32_port = to_stm32_port(port); in stm32_usart_poll_init() local
1424 return clk_prepare_enable(stm32_port->clk); in stm32_usart_poll_init()
1429 struct stm32_port *stm32_port = to_stm32_port(port); in stm32_usart_poll_get_char() local
1430 const struct stm32_usart_offsets *ofs = &stm32_port->info->ofs; in stm32_usart_poll_get_char()
1435 return readl_relaxed(port->membase + ofs->rdr) & stm32_port->rdr_mask; in stm32_usart_poll_get_char()
1505 static void stm32_usart_deinit_port(struct stm32_port *stm32port) in stm32_usart_deinit_port()
1517 static int stm32_usart_init_port(struct stm32_port *stm32port, in stm32_usart_init_port()
1605 static struct stm32_port *stm32_usart_of_get_port(struct platform_device *pdev) in stm32_usart_of_get_port()
1643 static void stm32_usart_of_dma_rx_remove(struct stm32_port *stm32port, in stm32_usart_of_dma_rx_remove()
1651 static int stm32_usart_of_dma_rx_probe(struct stm32_port *stm32port, in stm32_usart_of_dma_rx_probe()
1681 static void stm32_usart_of_dma_tx_remove(struct stm32_port *stm32port, in stm32_usart_of_dma_tx_remove()
1689 static int stm32_usart_of_dma_tx_probe(struct stm32_port *stm32port, in stm32_usart_of_dma_tx_probe()
1721 struct stm32_port *stm32port; in stm32_usart_serial_probe()
1824 struct stm32_port *stm32_port = to_stm32_port(port); in stm32_usart_serial_remove() local
1825 const struct stm32_usart_offsets *ofs = &stm32_port->info->ofs; in stm32_usart_serial_remove()
1837 if (stm32_port->tx_ch) { in stm32_usart_serial_remove()
1838 stm32_usart_of_dma_tx_remove(stm32_port, pdev); in stm32_usart_serial_remove()
1839 dma_release_channel(stm32_port->tx_ch); in stm32_usart_serial_remove()
1842 if (stm32_port->rx_ch) { in stm32_usart_serial_remove()
1843 stm32_usart_of_dma_rx_remove(stm32_port, pdev); in stm32_usart_serial_remove()
1844 dma_release_channel(stm32_port->rx_ch); in stm32_usart_serial_remove()
1854 if (stm32_port->wakeup_src) { in stm32_usart_serial_remove()
1859 stm32_usart_deinit_port(stm32_port); in stm32_usart_serial_remove()
1866 struct stm32_port *stm32_port = to_stm32_port(port); in stm32_usart_console_putchar() local
1867 const struct stm32_usart_offsets *ofs = &stm32_port->info->ofs; in stm32_usart_console_putchar()
1886 struct stm32_port *stm32_port = to_stm32_port(port); in stm32_usart_console_write() local
1887 const struct stm32_usart_offsets *ofs = &stm32_port->info->ofs; in stm32_usart_console_write()
1888 const struct stm32_usart_config *cfg = &stm32_port->info->cfg; in stm32_usart_console_write()
1915 struct stm32_port *stm32port; in stm32_usart_console_setup()
2020 struct stm32_port *stm32_port = to_stm32_port(port); in stm32_usart_serial_en_wakeup() local
2021 const struct stm32_usart_offsets *ofs = &stm32_port->info->ofs; in stm32_usart_serial_en_wakeup()
2027 if (!stm32_port->wakeup_src || !tty_port_initialized(tport)) in stm32_usart_serial_en_wakeup()
2037 mctrl_gpio_enable_irq_wake(stm32_port->gpios); in stm32_usart_serial_en_wakeup()
2044 if (stm32_port->rx_ch) { in stm32_usart_serial_en_wakeup()
2047 if (!stm32_usart_rx_dma_pause(stm32_port)) in stm32_usart_serial_en_wakeup()
2049 stm32_usart_rx_dma_terminate(stm32_port); in stm32_usart_serial_en_wakeup()
2058 if (stm32_port->rx_ch) { in stm32_usart_serial_en_wakeup()
2063 mctrl_gpio_disable_irq_wake(stm32_port->gpios); in stm32_usart_serial_en_wakeup()
2119 struct stm32_port *stm32port = container_of(port, in stm32_usart_runtime_suspend()
2120 struct stm32_port, port); in stm32_usart_runtime_suspend()
2130 struct stm32_port *stm32port = container_of(port, in stm32_usart_runtime_resume()
2131 struct stm32_port, port); in stm32_usart_runtime_resume()