source: rtems/bsps/arm/shared/cache/cache-v7m.c @ ff081aee

5
Last change on this file since ff081aee was 4cf93658, checked in by Sebastian Huber <sebastian.huber@…>, on 01/27/18 at 13:37:51

bsps: Rework cache manager implementation

The previous cache manager support used a single souce file
(cache_manager.c) which included an implementation header (cache_.h).
This required the use of specialized include paths to find the right
header file. Change this to include a generic implementation header
(cacheimpl.h) in specialized source files.

Use the following directories and files:

  • bsps/shared/cache
  • bsps/@RTEMS_CPU@/shared/cache
  • bsps/@RTEMS_CPU@/@RTEMS_BSP_FAMILY/start/cache.c

Update #3285.

  • Property mode set to 100644
File size: 2.7 KB
Line 
1/*
2 * Copyright (c) 2016 embedded brains GmbH.  All rights reserved.
3 *
4 *  embedded brains GmbH
5 *  Dornierstr. 4
6 *  82178 Puchheim
7 *  Germany
8 *  <rtems@embedded-brains.de>
9 *
10 * The license and distribution terms for this file may be
11 * found in the file LICENSE in this distribution or at
12 * http://www.rtems.org/license/LICENSE.
13 */
14
15#include <rtems.h>
16#include <chip.h>
17
18#define CPU_DATA_CACHE_ALIGNMENT 32
19
20#define CPU_INSTRUCTION_CACHE_ALIGNMENT 32
21
22#define CPU_CACHE_SUPPORT_PROVIDES_RANGE_FUNCTIONS
23
24static inline void _CPU_cache_flush_data_range(
25  const void *d_addr,
26  size_t n_bytes
27)
28{
29  SCB_CleanInvalidateDCache_by_Addr(
30    RTEMS_DECONST(uint32_t *, (const uint32_t *) d_addr),
31    n_bytes
32  );
33}
34
35static inline void _CPU_cache_invalidate_data_range(
36  const void *d_addr,
37  size_t n_bytes
38)
39{
40  SCB_InvalidateDCache_by_Addr(
41    RTEMS_DECONST(uint32_t *, (const uint32_t *) d_addr),
42    n_bytes
43  );
44}
45
46static inline void _CPU_cache_freeze_data(void)
47{
48  /* TODO */
49}
50
51static inline void _CPU_cache_unfreeze_data(void)
52{
53  /* TODO */
54}
55
56static inline void _CPU_cache_invalidate_instruction_range(
57  const void *i_addr,
58  size_t n_bytes
59)
60{
61  rtems_interrupt_level level;
62
63  rtems_interrupt_disable(level);
64  SCB_InvalidateICache();
65  rtems_interrupt_enable(level);
66}
67
68static inline void _CPU_cache_freeze_instruction(void)
69{
70  /* TODO */
71}
72
73static inline void _CPU_cache_unfreeze_instruction(void)
74{
75  /* TODO */
76}
77
78static inline void _CPU_cache_flush_entire_data(void)
79{
80  rtems_interrupt_level level;
81
82  rtems_interrupt_disable(level);
83  SCB_CleanDCache();
84  rtems_interrupt_enable(level);
85}
86
87static inline void _CPU_cache_invalidate_entire_data(void)
88{
89  rtems_interrupt_level level;
90
91  rtems_interrupt_disable(level);
92  SCB_InvalidateDCache();
93  rtems_interrupt_enable(level);
94}
95
96static inline void _CPU_cache_enable_data(void)
97{
98  rtems_interrupt_level level;
99
100  rtems_interrupt_disable(level);
101  SCB_EnableDCache();
102  rtems_interrupt_enable(level);
103}
104
105static inline void _CPU_cache_disable_data(void)
106{
107  rtems_interrupt_level level;
108
109  rtems_interrupt_disable(level);
110  SCB_DisableDCache();
111  rtems_interrupt_enable(level);
112}
113
114static inline void _CPU_cache_invalidate_entire_instruction(void)
115{
116  rtems_interrupt_level level;
117
118  rtems_interrupt_disable(level);
119  SCB_InvalidateICache();
120  rtems_interrupt_enable(level);
121}
122
123static inline void _CPU_cache_enable_instruction(void)
124{
125  rtems_interrupt_level level;
126
127  rtems_interrupt_disable(level);
128  SCB_EnableICache();
129  rtems_interrupt_enable(level);
130}
131
132static inline void _CPU_cache_disable_instruction(void)
133{
134  rtems_interrupt_level level;
135
136  rtems_interrupt_disable(level);
137  SCB_DisableICache();
138  rtems_interrupt_enable(level);
139}
140
141#include "../../shared/cache/cacheimpl.h"
Note: See TracBrowser for help on using the repository browser.