File indexing completed on 2025-05-11 08:23:48
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029 #include <rtems.h>
0030 #include <mcf5235/mcf5235.h>
0031 #include "cache.h"
0032
0033
0034
0035
0036 extern uint32_t cacr_mode;
0037
0038
0039
0040
0041 static void _CPU_cache_freeze_data(void) {}
0042 static void _CPU_cache_unfreeze_data(void) {}
0043 static void _CPU_cache_freeze_instruction(void) {}
0044 static void _CPU_cache_unfreeze_instruction(void) {}
0045
0046
0047
0048
0049 static void _CPU_cache_flush_1_data_line(const void *d_addr) {}
0050 static void _CPU_cache_flush_entire_data(void) {}
0051
0052 static void _CPU_cache_enable_instruction(void)
0053 {
0054 rtems_interrupt_level level;
0055
0056 rtems_interrupt_disable(level);
0057 cacr_mode &= ~MCF5XXX_CACR_DIDI;
0058 m68k_set_cacr(cacr_mode);
0059 rtems_interrupt_enable(level);
0060 }
0061
0062 static void _CPU_cache_disable_instruction(void)
0063 {
0064 rtems_interrupt_level level;
0065
0066 rtems_interrupt_disable(level);
0067 cacr_mode |= MCF5XXX_CACR_DIDI;
0068 m68k_set_cacr(cacr_mode);
0069 rtems_interrupt_enable(level);
0070 }
0071
0072 static void _CPU_cache_invalidate_entire_instruction(void)
0073 {
0074 m68k_set_cacr(cacr_mode | MCF5XXX_CACR_CINV | MCF5XXX_CACR_INVI);
0075 }
0076
0077 static void _CPU_cache_invalidate_1_instruction_line(const void *addr)
0078 {
0079
0080
0081
0082 addr = (void *)((int)addr | 0x400);
0083 __asm__ volatile ("cpushl %%bc,(%0)" :: "a" (addr));
0084 }
0085
0086 static void _CPU_cache_enable_data(void)
0087 {
0088 rtems_interrupt_level level;
0089
0090 rtems_interrupt_disable(level);
0091 cacr_mode &= ~MCF5XXX_CACR_DISD;
0092 m68k_set_cacr(cacr_mode);
0093 rtems_interrupt_enable(level);
0094 }
0095
0096 static void _CPU_cache_disable_data(void)
0097 {
0098 rtems_interrupt_level level;
0099
0100 rtems_interrupt_disable(level);
0101 cacr_mode |= MCF5XXX_CACR_DISD;
0102 m68k_set_cacr(cacr_mode);
0103 rtems_interrupt_enable(level);
0104 }
0105
0106 static void _CPU_cache_invalidate_entire_data(void)
0107 {
0108 m68k_set_cacr(cacr_mode | MCF5XXX_CACR_CINV | MCF5XXX_CACR_INVD);
0109 }
0110
0111 static void _CPU_cache_invalidate_1_data_line(const void *addr)
0112 {
0113
0114
0115
0116 addr = (void *)((int)addr & ~0x400);
0117 __asm__ volatile ("cpushl %%bc,(%0)" :: "a" (addr));
0118 }
0119
0120 #include "../../../shared/cache/cacheimpl.h"