|
6 | 6 |
|
7 | 7 | #include <stdint.h>
|
8 | 8 | #include <zephyr/fatal.h>
|
9 |
| - |
| 9 | +#include <zephyr/logging/log.h> |
10 | 10 | #include "soc.h"
|
| 11 | +#include <zephyr/device.h> |
11 | 12 | #include <common/ctrl_partitions.h>
|
| 13 | +#include <zephyr/pm/device_runtime.h> |
| 14 | +LOG_MODULE_REGISTER(soc, LOG_LEVEL_DBG); |
12 | 15 |
|
13 | 16 | unsigned int z_soc_irq_get_active(void)
|
14 | 17 | {
|
@@ -53,3 +56,31 @@ void soc_early_init_hook(void)
|
53 | 56 | {
|
54 | 57 | k3_unlock_all_ctrl_partitions();
|
55 | 58 | }
|
| 59 | + |
| 60 | +#if defined(CONFIG_SOC_POWER_DOMAIN_INIT) |
| 61 | +int soc_power_domain_init(void) |
| 62 | +{ |
| 63 | + LOG_INF("Starting power domain initialization\n"); |
| 64 | + |
| 65 | + int error_count = 0; |
| 66 | + |
| 67 | +#define CHECK_NODE_POWER_DOMAIN(child) \ |
| 68 | + if (DT_NODE_HAS_PROP(child, power_domains)) { \ |
| 69 | + const struct device *dev_##child = \ |
| 70 | + DEVICE_DT_GET_OR_NULL(DT_PHANDLE(child, power_domains)); \ |
| 71 | + if (dev_##child) { \ |
| 72 | + LOG_INF("Turning on power domain: %s\n", dev_##child->name); \ |
| 73 | + int err = pm_device_runtime_get(dev_##child); \ |
| 74 | + if (err < 0) { \ |
| 75 | + LOG_INF("Failed to get power domain: %s\n", dev_##child->name); \ |
| 76 | + error_count++; \ |
| 77 | + } \ |
| 78 | + } \ |
| 79 | + } |
| 80 | + |
| 81 | + DT_FOREACH_CHILD(DT_ROOT, CHECK_NODE_POWER_DOMAIN); |
| 82 | + |
| 83 | + return error_count; |
| 84 | +} |
| 85 | +SYS_INIT(soc_power_domain_init, APPLICATION, 99); |
| 86 | +#endif /* CONFIG_SOC_POWER_DOMAIN_INIT */ |
0 commit comments