drivers/serial: stm32: convert dma to new DT_DMA helper macros

New DT_DMA helper macors are available to access DMA node
identifier. Use them

Signed-off-by: Erwan Gouriou <erwan.gouriou@linaro.org>
This commit is contained in:
Erwan Gouriou 2021-03-01 11:59:57 +01:00 committed by Anas Nashif
commit 13c2351524
2 changed files with 21 additions and 25 deletions

View file

@ -739,7 +739,7 @@ static void uart_stm32_dma_rx_flush(const struct device *dev)
struct dma_status stat;
struct uart_stm32_data *data = DEV_DATA(dev);
if (dma_get_status(data->dev_dma_rx,
if (dma_get_status(data->dma_rx.dma_dev,
data->dma_rx.dma_channel, &stat) == 0) {
size_t rx_rcv_len = data->dma_rx.buffer_length -
stat.pending_length;
@ -859,7 +859,7 @@ static int uart_stm32_async_rx_disable(const struct device *dev)
k_delayed_work_cancel(&data->dma_rx.timeout_work);
dma_stop(data->dev_dma_rx, data->dma_rx.dma_channel);
dma_stop(data->dma_rx.dma_dev, data->dma_rx.dma_channel);
data->rx_next_buffer = NULL;
data->rx_next_buffer_len = 0;
@ -886,7 +886,7 @@ void uart_stm32_dma_tx_cb(const struct device *dma_dev, void *user_data,
data->dma_tx.buffer_length = 0;
if (!dma_get_status(data->dev_dma_tx,
if (!dma_get_status(data->dma_tx.dma_dev,
data->dma_tx.dma_channel, &stat)) {
data->dma_tx.counter = data->dma_tx.buffer_length -
stat.pending_length;
@ -914,12 +914,12 @@ static void uart_stm32_dma_replace_buffer(const struct device *dev)
data->rx_next_buffer = NULL;
data->rx_next_buffer_len = 0;
dma_reload(data->dev_dma_rx, data->dma_rx.dma_channel,
dma_reload(data->dma_rx.dma_dev, data->dma_rx.dma_channel,
data->dma_rx.blk_cfg.source_address,
data->dma_rx.blk_cfg.dest_address,
data->dma_rx.blk_cfg.block_size);
dma_start(data->dev_dma_rx, data->dma_rx.dma_channel);
dma_start(data->dma_rx.dma_dev, data->dma_rx.dma_channel);
USART_TypeDef *UartInstance = UART_STRUCT(dev);
@ -973,7 +973,7 @@ static int uart_stm32_async_tx(const struct device *dev,
USART_TypeDef *UartInstance = UART_STRUCT(dev);
int ret;
if (data->dev_dma_tx == NULL) {
if (data->dma_tx.dma_dev == NULL) {
return -ENODEV;
}
@ -994,7 +994,7 @@ static int uart_stm32_async_tx(const struct device *dev,
data->dma_tx.blk_cfg.source_address = (uint32_t)data->dma_tx.buffer;
data->dma_tx.blk_cfg.block_size = data->dma_tx.buffer_length;
ret = dma_config(data->dev_dma_tx, data->dma_tx.dma_channel,
ret = dma_config(data->dma_tx.dma_dev, data->dma_tx.dma_channel,
&data->dma_tx.dma_cfg);
if (ret != 0) {
@ -1002,7 +1002,7 @@ static int uart_stm32_async_tx(const struct device *dev,
return -EINVAL;
}
if (dma_start(data->dev_dma_tx, data->dma_tx.dma_channel)) {
if (dma_start(data->dma_tx.dma_dev, data->dma_tx.dma_channel)) {
LOG_ERR("UART err: TX DMA start failed!");
return -EFAULT;
}
@ -1023,7 +1023,7 @@ static int uart_stm32_async_rx_enable(const struct device *dev,
USART_TypeDef *UartInstance = UART_STRUCT(dev);
int ret;
if (data->dev_dma_rx == NULL) {
if (data->dma_rx.dma_dev == NULL) {
return -ENODEV;
}
@ -1044,7 +1044,7 @@ static int uart_stm32_async_rx_enable(const struct device *dev,
data->dma_rx.blk_cfg.block_size = buf_size;
data->dma_rx.blk_cfg.dest_address = (uint32_t)data->dma_rx.buffer;
ret = dma_config(data->dev_dma_rx, data->dma_rx.dma_channel,
ret = dma_config(data->dma_rx.dma_dev, data->dma_rx.dma_channel,
&data->dma_rx.dma_cfg);
if (ret != 0) {
@ -1052,7 +1052,7 @@ static int uart_stm32_async_rx_enable(const struct device *dev,
return -EINVAL;
}
if (dma_start(data->dev_dma_rx, data->dma_rx.dma_channel)) {
if (dma_start(data->dma_rx.dma_dev, data->dma_rx.dma_channel)) {
LOG_ERR("UART ERR: RX DMA start failed!");
return -EFAULT;
}
@ -1087,12 +1087,12 @@ static int uart_stm32_async_tx_abort(const struct device *dev)
}
k_delayed_work_cancel(&data->dma_tx.timeout_work);
if (!dma_get_status(data->dev_dma_tx,
if (!dma_get_status(data->dma_tx.dma_dev,
data->dma_tx.dma_channel, &stat)) {
data->dma_tx.counter = tx_buffer_length - stat.pending_length;
}
dma_stop(data->dev_dma_tx, data->dma_tx.dma_channel);
dma_stop(data->dma_tx.dma_dev, data->dma_tx.dma_channel);
async_evt_tx_abort(data);
return 0;
@ -1147,18 +1147,14 @@ static int uart_stm32_async_init(const struct device *dev)
data->uart_dev = dev;
if (data->dma_rx.dma_name != NULL) {
data->dev_dma_rx = device_get_binding(data->dma_rx.dma_name);
if (data->dev_dma_rx == NULL) {
LOG_ERR("%s device not found", data->dma_rx.dma_name);
if (data->dma_rx.dma_dev != NULL) {
if (!device_is_ready(data->dma_rx.dma_dev)) {
return -ENODEV;
}
}
if (data->dma_tx.dma_name != NULL) {
data->dev_dma_tx = device_get_binding(data->dma_tx.dma_name);
if (data->dev_dma_tx == NULL) {
LOG_ERR("%s device not found", data->dma_tx.dma_name);
if (data->dma_tx.dma_dev != NULL) {
if (!device_is_ready(data->dma_rx.dma_dev)) {
return -ENODEV;
}
}
@ -1454,10 +1450,12 @@ static int uart_stm32_pm_control(const struct device *dev,
DT_INST_DMAS_CELL_BY_NAME(id, dir, channel_config)
#define DMA_FEATURES(id, dir) \
DT_INST_DMAS_CELL_BY_NAME(id, dir, features)
#define DMA_CTLR(id, dir) \
DT_INST_DMAS_CTLR_BY_NAME(id, dir)
/* src_dev and dest_dev should be 'MEMORY' or 'PERIPHERAL'. */
#define UART_DMA_CHANNEL_INIT(index, dir, dir_cap, src_dev, dest_dev) \
.dma_name = DT_INST_DMAS_LABEL_BY_NAME(index, dir), \
.dma_dev = DEVICE_DT_GET(DMA_CTLR(index, dir)), \
.dma_channel = DT_INST_DMAS_CELL_BY_NAME(index, dir, channel), \
.dma_cfg = { \
.dma_slot = DT_INST_DMAS_CELL_BY_NAME(index, dir, slot),\

View file

@ -29,7 +29,7 @@ struct uart_stm32_config {
#ifdef CONFIG_UART_ASYNC_API
struct uart_dma_stream {
const char *dma_name;
const struct device *dma_dev;
uint32_t dma_channel;
struct dma_config dma_cfg;
uint8_t priority;
@ -60,8 +60,6 @@ struct uart_stm32_data {
#ifdef CONFIG_UART_ASYNC_API
const struct device *uart_dev;
const struct device *dev_dma_tx;
const struct device *dev_dma_rx;
uart_callback_t async_cb;
void *async_user_data;
struct uart_dma_stream dma_rx;