|
7 | 7 | #define DT_DRV_COMPAT zephyr_retained_ram
|
8 | 8 |
|
9 | 9 | #include <string.h>
|
| 10 | +#include <zephyr/cache.h> |
10 | 11 | #include <zephyr/device.h>
|
11 | 12 | #include <zephyr/devicetree.h>
|
12 | 13 | #include <zephyr/drivers/retained_mem.h>
|
@@ -85,27 +86,37 @@ static int zephyr_retained_mem_ram_write(const struct device *dev, off_t offset,
|
85 | 86 | const uint8_t *buffer, size_t size)
|
86 | 87 | {
|
87 | 88 | const struct zephyr_retained_mem_ram_config *config = dev->config;
|
| 89 | + int err = 0; |
88 | 90 |
|
89 | 91 | zephyr_retained_mem_ram_lock_take(dev);
|
90 | 92 |
|
91 | 93 | memcpy((config->address + offset), buffer, size);
|
92 | 94 |
|
| 95 | +#if defined(CONFIG_CACHE_MANAGEMENT) && defined(CONFIG_DCACHE) |
| 96 | + err = sys_cache_data_flush_range(config->address + offset, size); |
| 97 | +#endif /* defined(CONFIG_CACHE_MANAGEMENT) && defined(CONFIG_DCACHE) */ |
| 98 | + |
93 | 99 | zephyr_retained_mem_ram_lock_release(dev);
|
94 | 100 |
|
95 |
| - return 0; |
| 101 | + return err; |
96 | 102 | }
|
97 | 103 |
|
98 | 104 | static int zephyr_retained_mem_ram_clear(const struct device *dev)
|
99 | 105 | {
|
100 | 106 | const struct zephyr_retained_mem_ram_config *config = dev->config;
|
| 107 | + int err = 0; |
101 | 108 |
|
102 | 109 | zephyr_retained_mem_ram_lock_take(dev);
|
103 | 110 |
|
104 | 111 | memset(config->address, 0, config->size);
|
105 | 112 |
|
| 113 | +#if defined(CONFIG_CACHE_MANAGEMENT) && defined(CONFIG_DCACHE) |
| 114 | + err = sys_cache_data_flush_range(config->address, config->size); |
| 115 | +#endif /* defined(CONFIG_CACHE_MANAGEMENT) && defined(CONFIG_DCACHE) */ |
| 116 | + |
106 | 117 | zephyr_retained_mem_ram_lock_release(dev);
|
107 | 118 |
|
108 |
| - return 0; |
| 119 | + return err; |
109 | 120 | }
|
110 | 121 |
|
111 | 122 | static DEVICE_API(retained_mem, zephyr_retained_mem_ram_api) = {
|
|
0 commit comments