Skip to content

Commit 055d020

Browse files
nordic-krchnordicjm
authored andcommitted
[nrf fromtree] 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. Simplify uarte_disable_locked. Signed-off-by: Krzysztof Chruściński <[email protected]> (cherry picked from commit 9ccaf9b)
1 parent c3fd7fd commit 055d020

File tree

1 file changed

+11
-9
lines changed

1 file changed

+11
-9
lines changed

drivers/serial/uart_nrfx_uarte.c

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,7 @@ struct uarte_nrfx_data {
219219

220220
#define UARTE_FLAG_LOW_POWER_TX BIT(0)
221221
#define UARTE_FLAG_LOW_POWER_RX BIT(1)
222+
#define UARTE_FLAG_LOW_POWER (UARTE_FLAG_LOW_POWER_TX | UARTE_FLAG_LOW_POWER_RX)
222223
#define UARTE_FLAG_TRIG_RXTO BIT(2)
223224
#define UARTE_FLAG_POLL_OUT BIT(3)
224225

@@ -617,11 +618,13 @@ static void uarte_periph_enable(const struct device *dev)
617618
}
618619
}
619620

620-
static void uarte_enable(const struct device *dev, uint32_t act_mask, uint32_t sec_mask)
621+
static void uarte_enable_locked(const struct device *dev, uint32_t act_mask)
621622
{
622623
struct uarte_nrfx_data *data = dev->data;
624+
bool already_active = (data->flags & UARTE_FLAG_LOW_POWER) != 0;
623625

624-
if (atomic_or(&data->flags, act_mask) & sec_mask) {
626+
data->flags |= act_mask;
627+
if (already_active) {
625628
/* Second direction already enabled so UARTE is enabled. */
626629
return;
627630
}
@@ -657,7 +660,7 @@ static void tx_start(const struct device *dev, const uint8_t *buf, size_t len)
657660
nrf_uarte_event_clear(uarte, NRF_UARTE_EVENT_TXSTOPPED);
658661

659662
if (LOW_POWER_ENABLED(config)) {
660-
uarte_enable(dev, UARTE_FLAG_LOW_POWER_TX, UARTE_FLAG_LOW_POWER_RX);
663+
uarte_enable_locked(dev, UARTE_FLAG_LOW_POWER_TX);
661664
}
662665

663666
nrf_uarte_task_trigger(uarte, NRF_UARTE_TASK_STARTTX);
@@ -673,14 +676,13 @@ static void tx_start(const struct device *dev, const uint8_t *buf, size_t len)
673676
* here.
674677
* @param dev Device.
675678
* @param dis_mask Mask of direction (RX or TX) which now longer uses the UARTE instance.
676-
* @param sec_mask Mask of second direction which is used to check if it uses the UARTE.
677679
*/
678-
static void uarte_disable_locked(const struct device *dev, uint32_t dis_mask, uint32_t sec_mask)
680+
static void uarte_disable_locked(const struct device *dev, uint32_t dis_mask)
679681
{
680682
struct uarte_nrfx_data *data = dev->data;
681683

682684
data->flags &= ~dis_mask;
683-
if (data->flags & sec_mask) {
685+
if (data->flags & UARTE_FLAG_LOW_POWER) {
684686
return;
685687
}
686688

@@ -1056,7 +1058,7 @@ static int uarte_nrfx_rx_enable(const struct device *dev, uint8_t *buf,
10561058
} else if (LOW_POWER_ENABLED(cfg)) {
10571059
unsigned int key = irq_lock();
10581060

1059-
uarte_enable(dev, UARTE_FLAG_LOW_POWER_RX, UARTE_FLAG_LOW_POWER_TX);
1061+
uarte_enable_locked(dev, UARTE_FLAG_LOW_POWER_RX);
10601062
irq_unlock(key);
10611063
}
10621064

@@ -1531,7 +1533,7 @@ static void rxto_isr(const struct device *dev)
15311533
} else if (LOW_POWER_ENABLED(config)) {
15321534
uint32_t key = irq_lock();
15331535

1534-
uarte_disable_locked(dev, UARTE_FLAG_LOW_POWER_RX, UARTE_FLAG_LOW_POWER_TX);
1536+
uarte_disable_locked(dev, UARTE_FLAG_LOW_POWER_RX);
15351537
irq_unlock(key);
15361538
}
15371539

@@ -1558,7 +1560,7 @@ static void txstopped_isr(const struct device *dev)
15581560
}
15591561
} else if (LOW_POWER_ENABLED(config)) {
15601562
nrf_uarte_int_disable(uarte, NRF_UARTE_INT_TXSTOPPED_MASK);
1561-
uarte_disable_locked(dev, UARTE_FLAG_LOW_POWER_TX, UARTE_FLAG_LOW_POWER_RX);
1563+
uarte_disable_locked(dev, UARTE_FLAG_LOW_POWER_TX);
15621564
}
15631565

15641566
irq_unlock(key);

0 commit comments

Comments
 (0)