Skip to content

Commit 462733d

Browse files
committed
[nrf fromlist] drivers: serial: nrfx_uarte: Minor code size optimization
Optimize function which enables UARTE peripheral. It is called only when interrupts are locked so data->flags does not require atomic operation. Use standard logical operations so save few bytes. Upstream PR: zephyrproject-rtos/zephyr#80201 Signed-off-by: Krzysztof Chruściński <[email protected]>
1 parent 5283513 commit 462733d

File tree

1 file changed

+7
-4
lines changed

1 file changed

+7
-4
lines changed

drivers/serial/uart_nrfx_uarte.c

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,7 @@ struct uarte_nrfx_data {
218218

219219
#define UARTE_FLAG_LOW_POWER_TX BIT(0)
220220
#define UARTE_FLAG_LOW_POWER_RX BIT(1)
221+
#define UARTE_FLAG_LOW_POWER (UARTE_FLAG_LOW_POWER_TX | UARTE_FLAG_LOW_POWER_RX)
221222
#define UARTE_FLAG_TRIG_RXTO BIT(2)
222223
#define UARTE_FLAG_POLL_OUT BIT(3)
223224

@@ -613,11 +614,13 @@ static void uarte_periph_enable(const struct device *dev)
613614
}
614615
}
615616

616-
static void uarte_enable(const struct device *dev, uint32_t act_mask, uint32_t sec_mask)
617+
static void uarte_enable_locked(const struct device *dev, uint32_t act_mask, uint32_t sec_mask)
617618
{
618619
struct uarte_nrfx_data *data = dev->data;
620+
bool already_active = (data->flags & UARTE_FLAG_LOW_POWER) != 0;
619621

620-
if (atomic_or(&data->flags, act_mask) & sec_mask) {
622+
data->flags |= act_mask;
623+
if (already_active) {
621624
/* Second direction already enabled so UARTE is enabled. */
622625
return;
623626
}
@@ -653,7 +656,7 @@ static void tx_start(const struct device *dev, const uint8_t *buf, size_t len)
653656
nrf_uarte_event_clear(uarte, NRF_UARTE_EVENT_TXSTOPPED);
654657

655658
if (LOW_POWER_ENABLED(config)) {
656-
uarte_enable(dev, UARTE_FLAG_LOW_POWER_TX, UARTE_FLAG_LOW_POWER_RX);
659+
uarte_enable_locked(dev, UARTE_FLAG_LOW_POWER_TX, UARTE_FLAG_LOW_POWER_RX);
657660
}
658661

659662
nrf_uarte_task_trigger(uarte, NRF_UARTE_TASK_STARTTX);
@@ -1154,7 +1157,7 @@ static int uarte_nrfx_rx_enable(const struct device *dev, uint8_t *buf,
11541157
} else if (LOW_POWER_ENABLED(cfg)) {
11551158
unsigned int key = irq_lock();
11561159

1157-
uarte_enable(dev, UARTE_FLAG_LOW_POWER_RX, UARTE_FLAG_LOW_POWER_TX);
1160+
uarte_enable_locked(dev, UARTE_FLAG_LOW_POWER_RX, UARTE_FLAG_LOW_POWER_TX);
11581161
irq_unlock(key);
11591162
}
11601163

0 commit comments

Comments
 (0)