Skip to content

Commit 2793658

Browse files
nordic-krchkartben
authored andcommitted
drivers: serial: nrfx_uarte: Fix use of PM_DEVICE_ISR_SAFE
PM_DEVICE_ISR_SAFE shall not be used when non-asynchronous API is used because RX is disabled in suspend action and that takes relatively long time. In case of PM_DEVICE_ISR_SAFE it is done with interrupts disabled. RX is not used at all if disable-rx property is set and in that case PM_DEVICE_ISR_SAFE can be used. Added macro which determines if ISR safe mode can be used. Signed-off-by: Krzysztof Chruściński <[email protected]> (cherry picked from commit e0f5241)
1 parent 60de14b commit 2793658

File tree

1 file changed

+13
-2
lines changed

1 file changed

+13
-2
lines changed

drivers/serial/uart_nrfx_uarte.c

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2506,6 +2506,18 @@ static int uarte_instance_init(const struct device *dev,
25062506
: UART_CFG_FLOW_CTRL_NONE, \
25072507
}
25082508

2509+
/* Macro determines if PM actions are interrupt safe. They are in case of
2510+
* asynchronous API (except for instance in fast power domain) and non-asynchronous
2511+
* API if RX is disabled. Macro must resolve to a literal 1 or 0.
2512+
*/
2513+
#define UARTE_PM_ISR_SAFE(idx) \
2514+
COND_CODE_1(INSTANCE_IS_FAST_PD(_, /*empty*/, idx, _), \
2515+
(0), \
2516+
(COND_CODE_1(CONFIG_UART_##idx##_ASYNC, \
2517+
(PM_DEVICE_ISR_SAFE), \
2518+
(COND_CODE_1(UARTE_PROP(idx, disable_rx), \
2519+
(PM_DEVICE_ISR_SAFE), (0)))))) \
2520+
25092521
#define UART_NRF_UARTE_DEVICE(idx) \
25102522
NRF_DT_CHECK_NODE_HAS_PINCTRL_SLEEP(UARTE(idx)); \
25112523
UARTE_INT_DRIVEN(idx); \
@@ -2578,8 +2590,7 @@ static int uarte_instance_init(const struct device *dev,
25782590
} \
25792591
\
25802592
PM_DEVICE_DT_DEFINE(UARTE(idx), uarte_nrfx_pm_action, \
2581-
COND_CODE_1(INSTANCE_IS_FAST_PD(_, /*empty*/, idx, _),\
2582-
(0), (PM_DEVICE_ISR_SAFE))); \
2593+
UARTE_PM_ISR_SAFE(idx)); \
25832594
\
25842595
DEVICE_DT_DEFINE(UARTE(idx), \
25852596
uarte_##idx##_init, \

0 commit comments

Comments
 (0)