zephyr/kernel
Krzysztof Chruściński 25173f71cd pm: device_runtime: Extend with synchronous runtime PM
In many cases suspending or resuming of a device is limited to
just a few register writes. Current solution assumes that those
operations may be blocking, asynchronous and take a lot of time.
Due to this assumption runtime PM API cannot be effectively used
from the interrupt context. Zephyr has few driver APIs which
can be used from an interrupt context and now use of runtime PM
is limited in those cases.

Patch introduces a new type of PM device - synchronous PM. If
device is specified as capable of synchronous PM operations then
device runtime getting and putting is executed in the critical
section. In that case, runtime API can be used from an interrupt
context. Additionally, this approach reduces RAM needed for
PM device (104 -> 20 bytes of RAM on ARM Cortex-M).

Signed-off-by: Krzysztof Chruściński <krzysztof.chruscinski@nordicsemi.no>
2024-02-01 15:03:42 +01:00
..
include pm: device_runtime: Extend with synchronous runtime PM 2024-02-01 15:03:42 +01:00
paging kernel: mm: only include demand_paging.h if needed 2023-11-23 10:01:45 +01:00
atomic_c.c syscall: rename Z_OOPS -> K_OOPS 2023-11-03 11:46:52 +01:00
banner.c kernel: banner: Allow for customising version 2023-08-21 10:09:46 +02:00
busy_wait.c kernel: Use k_us_to_cyc_ceil32 in k_busy_wait 2023-12-05 09:24:28 +01:00
CMakeLists.txt kernel: Introduce a way to specify minimum system heap size 2023-12-20 11:01:42 +01:00
compiler_stack_protect.c kernel: canaries: Allow using TLS to store it 2023-08-08 19:08:04 -04:00
condvar.c syscall: rename Z_OOPS -> K_OOPS 2023-11-03 11:46:52 +01:00
device.c syscall: rename Z_OOPS -> K_OOPS 2023-11-03 11:46:52 +01:00
dynamic.c kernel: dynamic: reduce verbosity in degenerate case 2024-01-26 06:50:11 -05:00
dynamic_disabled.c kernel: dynamic: declare dynamic stubs when disabled 2023-07-24 12:59:43 -04:00
errno.c kernel: move syscall_handler.h to internal include directory 2023-11-03 11:46:52 +01:00
events.c syscall: rename Z_OOPS -> K_OOPS 2023-11-03 11:46:52 +01:00
fatal.c kernel: fatal: remove LCOV exclusion 2023-12-21 09:18:44 +01:00
futex.c syscall: rename Z_SYSCALL_ to K_SYSCALL_ 2023-11-03 11:46:52 +01:00
idle.c kernel: move wait_q.h header to be internal 2023-09-12 12:55:36 -04:00
init.c kernel: init: conditional .bss section zeroing 2023-11-08 10:07:26 +01:00
Kconfig kernel: amend wording on CONFIG_SMP_BOOT_DELAY 2024-01-17 11:57:20 -05:00
Kconfig.vm mm: introduce CONFIG_KERNEL_VM_USE_CUSTOM_MEM_RANGE_CHECK 2023-10-20 15:08:34 +02:00
kheap.c kernel: move wait_q.h header to be internal 2023-09-12 12:55:36 -04:00
mailbox.c kernel: Remove legacy mem block from mailbox 2023-10-13 09:56:02 +03:00
main_weak.c kernel: Switch main return type from void to int 2023-04-14 07:49:41 +09:00
mem_domain.c init: remove the need for a dummy device pointer in SYS_INIT functions 2023-04-12 14:28:07 +00:00
mem_slab.c kernel: object: rename z_object_init to k_object_init 2023-11-03 11:46:52 +01:00
mempool.c kernel: Introduce a way to specify minimum system heap size 2023-12-20 11:01:42 +01:00
mmu.c kernel: mmu: no need to expose z_free_page_count 2023-12-12 18:46:21 +00:00
msg_q.c syscall: rename Z_OOPS -> K_OOPS 2023-11-03 11:46:52 +01:00
mutex.c llext: export some symbols 2023-12-01 10:08:12 -05:00
obj_core.c kernel: Integrate object core statistics 2023-09-30 08:04:14 +03:00
pipes.c kernel: Apply const to k_pipe_put() parameter 2023-12-15 14:51:35 -05:00
poll.c syscall: rename Z_OOPS -> K_OOPS 2023-11-03 11:46:52 +01:00
queue.c syscall: rename Z_OOPS -> K_OOPS 2023-11-03 11:46:52 +01:00
sched.c kernel: Implement k_sleep for Single Thread 2024-01-10 15:10:16 +01:00
sem.c syscall: rename Z_OOPS -> K_OOPS 2023-11-03 11:46:52 +01:00
smp.c kernel: smp: remove z_smp_thread_init/_swap 2024-01-17 11:57:20 -05:00
stack.c syscall: rename Z_OOPS -> K_OOPS 2023-11-03 11:46:52 +01:00
system_work_q.c init: remove the need for a dummy device pointer in SYS_INIT functions 2023-04-12 14:28:07 +00:00
thread.c llext: export some symbols 2023-12-01 10:08:12 -05:00
timeout.c kernel: timeout: fix issue with z_timeout_expires 2023-11-30 12:22:54 +01:00
timer.c syscall: rename Z_OOPS -> K_OOPS 2023-11-03 11:46:52 +01:00
usage.c kernel: Integrate object core statistics 2023-09-30 08:04:14 +03:00
userspace.c syscall: rename Z_SYSCALL_ to K_SYSCALL_ 2023-11-03 11:46:52 +01:00
userspace_handler.c syscall: rename Z_OOPS -> K_OOPS 2023-11-03 11:46:52 +01:00
version.c zephyr: replace zephyr integer types with C99 types 2020-06-08 08:23:57 -05:00
work.c kernel: work: Fix race in workqueue thread 2024-01-03 10:20:19 +01:00
xip.c kernel: canaries: Allow using TLS to store it 2023-08-08 19:08:04 -04:00