Zephyr Project API  3.3.0
A Scalable Open Source RTOS
cache.h
Go to the documentation of this file.
1/*
2 * Copyright 2022 Carlo Caione <ccaione@baylibre.com>
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6#ifndef ZEPHYR_INCLUDE_ARCH_ARM64_CACHE_H_
7#define ZEPHYR_INCLUDE_ARCH_ARM64_CACHE_H_
8
9#ifndef _ASMLANGUAGE
10
11#include <zephyr/types.h>
12#include <zephyr/sys/util.h>
13#include <zephyr/arch/cpu.h>
14#include <errno.h>
15
16#ifdef __cplusplus
17extern "C" {
18#endif
19
20#define K_CACHE_WB BIT(0)
21#define K_CACHE_INVD BIT(1)
22#define K_CACHE_WB_INVD (K_CACHE_WB | K_CACHE_INVD)
23
24#if defined(CONFIG_DCACHE)
25
26extern int arm64_dcache_range(void *addr, size_t size, int op);
27extern int arm64_dcache_all(int op);
28
29extern size_t arch_dcache_line_size_get(void);
30
31int ALWAYS_INLINE arch_dcache_flush_all(void)
32{
33 return arm64_dcache_all(K_CACHE_WB);
34}
35
36int ALWAYS_INLINE arch_dcache_invd_all(void)
37{
38 return arm64_dcache_all(K_CACHE_INVD);
39}
40
41int ALWAYS_INLINE arch_dcache_flush_and_invd_all(void)
42{
43 return arm64_dcache_all(K_CACHE_WB_INVD);
44}
45
46int ALWAYS_INLINE arch_dcache_flush_range(void *addr, size_t size)
47{
48 return arm64_dcache_range(addr, size, K_CACHE_WB);
49}
50
51int ALWAYS_INLINE arch_dcache_invd_range(void *addr, size_t size)
52{
53 return arm64_dcache_range(addr, size, K_CACHE_INVD);
54}
55
56int ALWAYS_INLINE arch_dcache_flush_and_invd_range(void *addr, size_t size)
57{
58 return arm64_dcache_range(addr, size, K_CACHE_WB_INVD);
59}
60
61void ALWAYS_INLINE arch_dcache_enable(void)
62{
63 /* nothing */
64}
65
66void ALWAYS_INLINE arch_dcache_disable(void)
67{
68 /* nothing */
69}
70
71#endif /* CONFIG_DCACHE */
72
73#if defined(CONFIG_ICACHE)
74
75size_t arch_icache_line_size_get(void)
76{
77 return -ENOTSUP;
78}
79
80int ALWAYS_INLINE arch_icache_flush_all(void)
81{
82 return -ENOTSUP;
83}
84
85int ALWAYS_INLINE arch_icache_invd_all(void)
86{
87 return -ENOTSUP;
88}
89
90int ALWAYS_INLINE arch_icache_flush_and_invd_all(void)
91{
92 return -ENOTSUP;
93}
94
95int ALWAYS_INLINE arch_icache_flush_range(void *addr, size_t size)
96{
97 return -ENOTSUP;
98}
99
100int ALWAYS_INLINE arch_icache_invd_range(void *addr, size_t size)
101{
102 return -ENOTSUP;
103}
104
105int ALWAYS_INLINE arch_icache_flush_and_invd_range(void *addr, size_t size)
106{
107 return -ENOTSUP;
108}
109
110void ALWAYS_INLINE arch_icache_enable(void)
111{
112 /* nothing */
113}
114
115void ALWAYS_INLINE arch_icache_disable(void)
116{
117 /* nothing */
118}
119
120#endif /* CONFIG_ICACHE */
121#endif /* ZEPHYR_INCLUDE_ARCH_ARM64_CACHE_H_ */
122
123#ifdef __cplusplus
124}
125#endif
126
127#endif /* _ASMLANGUAGE */
#define K_CACHE_INVD
Definition: cache.h:21
#define K_CACHE_WB
Definition: cache.h:20
#define K_CACHE_WB_INVD
Definition: cache.h:22
#define ALWAYS_INLINE
Definition: common.h:124
System error numbers.
#define ENOTSUP
Definition: errno.h:115
Misc utilities.