File indexing completed on 2025-05-11 08:23:49
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019 #include <bspopts.h>
0020
0021 #define MICROBLAZE_MSR_DCACHE_ENABLE 0x00000080
0022 #define MICROBLAZE_MSR_INTR_ENABLE 0x00000002
0023
0024 #ifndef XPAR_MICROBLAZE_USE_DCACHE
0025 #define XPAR_MICROBLAZE_USE_DCACHE 1
0026 #endif
0027
0028 #ifndef XPAR_MICROBLAZE_ALLOW_DCACHE_WR
0029 #define XPAR_MICROBLAZE_ALLOW_DCACHE_WR 1
0030 #endif
0031
0032 #ifndef XPAR_MICROBLAZE_DCACHE_USE_WRITEBACK
0033 #define MB_VERSION_LT_v720
0034 #define MB_HAS_WRITEBACK_SET 0
0035 #else
0036 #define MB_HAS_WRITEBACK_SET XPAR_MICROBLAZE_DCACHE_USE_WRITEBACK
0037 #endif
0038
0039 .text
0040 .globl microblaze_invalidate_dcache_range
0041 .ent microblaze_invalidate_dcache_range
0042 .align 2
0043
0044 microblaze_invalidate_dcache_range:
0045 #if (XPAR_MICROBLAZE_USE_DCACHE==1) && (XPAR_MICROBLAZE_ALLOW_DCACHE_WR==1)
0046
0047 #ifdef MB_VERSION_LT_v720
0048 mfs r9, rmsr
0049 andi r10, r9, ~(MICROBLAZE_MSR_DCACHE_ENABLE | MICROBLAZE_MSR_INTR_ENABLE)
0050 mts rmsr, r10
0051 #endif
0052
0053 BEQI r6, L_done
0054
0055 ADD r6, r5, r6
0056 ADDIK r6, r6, -1
0057
0058 ANDI r6, r6, -(4 * BSP_MICROBLAZE_FPGA_DCACHE_LINE_LEN)
0059 ANDI r5, r5, -(4 * BSP_MICROBLAZE_FPGA_DCACHE_LINE_LEN)
0060
0061 #if MB_HAS_WRITEBACK_SET == 0
0062
0063 L_start:
0064 CMPU r18, r5, r6
0065 BLTI r18, L_done
0066
0067 wdc r5, r0
0068
0069 #if defined (__arch64__ )
0070 addlik r5, r5, (BSP_MICROBLAZE_FPGA_DCACHE_LINE_LEN * 4)
0071 breai L_start
0072 #else
0073 brid L_start
0074 addik r5, r5, (BSP_MICROBLAZE_FPGA_DCACHE_LINE_LEN * 4)
0075 #endif
0076 #else
0077
0078 RSUBK r6, r5, r6
0079
0080 L_start:
0081 wdc.clear r5, r6
0082 #if defined (__arch64__ )
0083 addlik r6, r6, -(BSP_MICROBLAZE_FPGA_DCACHE_LINE_LEN * 4)
0084 beagei r6, L_start
0085 #else
0086 bneid r6, L_start
0087 addik r6, r6, -(BSP_MICROBLAZE_FPGA_DCACHE_LINE_LEN * 4)
0088 #endif
0089
0090 #endif
0091
0092 L_done:
0093 rtsd r15, 8
0094 #ifdef MB_VERSION_LT_v720
0095 mts rmsr, r9
0096 #else
0097 nop
0098 #endif
0099
0100 #else
0101 rtsd r15, 8
0102 nop
0103 #endif
0104 .end microblaze_invalidate_dcache_range