Skip to content

Commit 5357013

Browse files
MarkusLassilakartben
authored andcommitted
modem: backend: uart: Alignment check to recv buf
Receive buffer must be aligned to word when CONFIG_MODEM_BACKEND_UART_ASYNC_HWFC=y is set. Signed-off-by: Markus Lassila <[email protected]>
1 parent 5cfaebf commit 5357013

File tree

2 files changed

+9
-4
lines changed

2 files changed

+9
-4
lines changed

include/zephyr/modem/backend/uart.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,8 @@ struct modem_backend_uart {
8585

8686
struct modem_backend_uart_config {
8787
const struct device *uart;
88-
uint8_t *receive_buf __aligned(sizeof(uint32_t));
88+
/* Address must be word-aligned when CONFIG_MODEM_BACKEND_UART_ASYNC_HWFC is enabled. */
89+
uint8_t *receive_buf;
8990
uint32_t receive_buf_size;
9091
uint8_t *transmit_buf;
9192
uint32_t transmit_buf_size;

subsys/modem/backends/modem_backend_uart_async_hwfc.c

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ static void modem_backend_uart_async_hwfc_rx_recovery(struct modem_backend_uart
105105
}
106106
}
107107

108-
static bool modem_backend_uart_async_hwfc_is_uart_stopped(struct modem_backend_uart *backend)
108+
static bool modem_backend_uart_async_hwfc_is_uart_stopped(const struct modem_backend_uart *backend)
109109
{
110110
if (!atomic_test_bit(&backend->async.common.state,
111111
MODEM_BACKEND_UART_ASYNC_STATE_OPEN_BIT) &&
@@ -119,7 +119,7 @@ static bool modem_backend_uart_async_hwfc_is_uart_stopped(struct modem_backend_u
119119
return false;
120120
}
121121

122-
static bool modem_backend_uart_async_hwfc_is_open(struct modem_backend_uart *backend)
122+
static bool modem_backend_uart_async_hwfc_is_open(const struct modem_backend_uart *backend)
123123
{
124124
return atomic_test_bit(&backend->async.common.state,
125125
MODEM_BACKEND_UART_ASYNC_STATE_OPEN_BIT);
@@ -253,7 +253,7 @@ static void advertise_receive_buf_stats(struct modem_backend_uart *backend, uint
253253
}
254254
#endif
255255

256-
static uint32_t get_transmit_buf_size(struct modem_backend_uart *backend)
256+
static uint32_t get_transmit_buf_size(const struct modem_backend_uart *backend)
257257
{
258258
return backend->async.common.transmit_buf_size;
259259
}
@@ -411,6 +411,10 @@ int modem_backend_uart_async_init(struct modem_backend_uart *backend,
411411

412412
backend->async.rx_buf_count = CONFIG_MODEM_BACKEND_UART_ASYNC_HWFC_BUFFER_COUNT;
413413

414+
/* k_mem_slab_init requires a word-aligned buffer. */
415+
__ASSERT((uintptr_t)config->receive_buf % sizeof(void *) == 0,
416+
"Receive buffer is not word-aligned");
417+
414418
/* Make sure all the buffers will be aligned. */
415419
buf_size -= (config->receive_buf_size % (sizeof(uint32_t) * backend->async.rx_buf_count));
416420
backend->async.rx_buf_size = buf_size / backend->async.rx_buf_count;

0 commit comments

Comments
 (0)