source: rtems/c/src/lib/libcpu/m68k/mcf5235/cache/cachepd.c @ 023f1dd9

4.104.115
Last change on this file since 023f1dd9 was 023f1dd9, checked in by Ralf Corsepius <ralf.corsepius@…>, on 11/30/09 at 05:27:08

Whitespace removal.

  • Property mode set to 100644
File size: 2.2 KB
Line 
1/*
2 *  COPYRIGHT (c) 1989-2008.
3 *  On-Line Applications Research Corporation (OAR).
4 *
5 *  The license and distribution terms for this file may be
6 *  found in the file LICENSE in this distribution or at
7 *
8 *  http://www.rtems.com/license/LICENSE.
9 *
10 *  $Id$
11 */
12
13#include <rtems.h>
14#include <mcf5235/mcf5235.h>
15
16/*
17 *  Default value for the cacr is set by the BSP
18 */
19extern uint32_t cacr_mode;
20
21/*
22 * Cannot be frozen
23 */
24void _CPU_cache_freeze_data(void) {}
25void _CPU_cache_unfreeze_data(void) {}
26void _CPU_cache_freeze_instruction(void) {}
27void _CPU_cache_unfreeze_instruction(void) {}
28
29/*
30 * Write-through data cache -- flushes are unnecessary
31 */
32void _CPU_cache_flush_1_data_line(const void *d_addr) {}
33void _CPU_cache_flush_entire_data(void) {}
34
35void _CPU_cache_enable_instruction(void)
36{
37    rtems_interrupt_level level;
38
39    rtems_interrupt_disable(level);
40    cacr_mode &= ~MCF5XXX_CACR_DIDI;
41    m68k_set_cacr(cacr_mode);
42    rtems_interrupt_enable(level);
43}
44
45void _CPU_cache_disable_instruction(void)
46{
47    rtems_interrupt_level level;
48
49    rtems_interrupt_disable(level);
50    cacr_mode |= MCF5XXX_CACR_DIDI;
51    m68k_set_cacr(cacr_mode);
52    rtems_interrupt_enable(level);
53}
54
55void _CPU_cache_invalidate_entire_instruction(void)
56{
57    m68k_set_cacr(cacr_mode | MCF5XXX_CACR_CINV | MCF5XXX_CACR_INVI);
58}
59
60void _CPU_cache_invalidate_1_instruction_line(const void *addr)
61{
62    /*
63     * Top half of cache is I-space
64     */
65    addr = (void *)((int)addr | 0x400);
66    asm volatile ("cpushl %%bc,(%0)" :: "a" (addr));
67}
68
69void _CPU_cache_enable_data(void)
70{
71    rtems_interrupt_level level;
72
73    rtems_interrupt_disable(level);
74    cacr_mode &= ~MCF5XXX_CACR_DISD;
75    m68k_set_cacr(cacr_mode);
76    rtems_interrupt_enable(level);
77}
78
79void _CPU_cache_disable_data(void)
80{
81    rtems_interrupt_level level;
82
83    rtems_interrupt_disable(level);
84    cacr_mode |= MCF5XXX_CACR_DISD;
85    m68k_set_cacr(cacr_mode);
86    rtems_interrupt_enable(level);
87}
88
89void _CPU_cache_invalidate_entire_data(void)
90{
91    m68k_set_cacr(cacr_mode | MCF5XXX_CACR_CINV | MCF5XXX_CACR_INVD);
92}
93
94void _CPU_cache_invalidate_1_data_line(const void *addr)
95{
96    /*
97     * Bottom half of cache is D-space
98     */
99    addr = (void *)((int)addr & ~0x400);
100    asm volatile ("cpushl %%bc,(%0)" :: "a" (addr));
101}
Note: See TracBrowser for help on using the repository browser.