drivers/uart: stm32: Fix pm_constraint handling
Introduce new logic to set/release pm_constraint during serial TX transactions. First change is to introduce an internal flag and utility functions to control the set/release constraint balancing per uart device. This way, whatever the mix of transactions or API calls, we ensure a single uart device can only do 1 or 0 to the PM state constraint. Constraint can't then be set more than once, released w/o having been set or released more than it was set. The last part of the change reworks the triggers for constraints set/release operations. In order not to disturb driver operations, if irq driven mode or PM is enabled, don't enable TC interrupt handling by default. Instead, map the pm_constraint setting to the way TC flag is handled in normal mode of operations (irq driven or async). As a consequence, in irq driven mode, pm_constraint is set/released on tx_enable/tx_disable api calls, which gives API user full control on transaction protection vs low power operations. Finally, we emulate the same behavior on TX poll transaction, by enabling TC irq at the start of a stream and disabling TC irq once stream is completed. This is controlled with a dedicated device flag. Signed-off-by: Erwan Gouriou <erwan.gouriou@linaro.org>
This commit is contained in:
parent
dc986291bd
commit
a3de3df5dc
2 changed files with 85 additions and 26 deletions
|
@ -72,6 +72,10 @@ struct uart_stm32_data {
|
|||
uint8_t *rx_next_buffer;
|
||||
size_t rx_next_buffer_len;
|
||||
#endif
|
||||
#ifdef CONFIG_PM
|
||||
bool tx_poll_stream_on;
|
||||
bool pm_constraint_on;
|
||||
#endif
|
||||
};
|
||||
|
||||
#endif /* ZEPHYR_DRIVERS_SERIAL_UART_STM32_H_ */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue