@@ -38,47 +38,47 @@ __v7_all_cache:
38
38
39
39
PUSH {R4 - R11 }
40
40
41
- MRC p15 , 1 , R6 , c0 , c0 , 1 // Read CLIDR
42
- ANDS R3 , R6 , # 0x07000000 // Extract coherency level
43
- MOV R3 , R3 , LSR # 23 // Total cache levels << 1
44
- BEQ Finished // If 0 , no need to clean
41
+ MRC p15 , 1 , R6 , c0 , c0 , 1 / * Read CLIDR * /
42
+ ANDS R3 , R6 , # 0x07000000 / * Extract coherency level * /
43
+ MOV R3 , R3 , LSR # 23 / * Total cache levels << 1 * /
44
+ BEQ Finished / * If 0 , no need to clean * /
45
45
46
- MOV R10 , # 0 // R10 holds current cache level << 1
47
- Loop1: ADD R2 , R10 , R10 , LSR # 1 // R2 holds cache "Set" position
48
- MOV R1 , R6 , LSR R2 // Bottom 3 bits are the Cache - type for this level
49
- AND R1 , R1 , # 7 // Isolate those lower 3 bits
46
+ MOV R10 , # 0 / * R10 holds current cache level << 1 * /
47
+ Loop1: ADD R2 , R10 , R10 , LSR # 1 / * R2 holds cache "Set" position * /
48
+ MOV R1 , R6 , LSR R2 / * Bottom 3 bits are the Cache - type for this level * /
49
+ AND R1 , R1 , # 7 / * Isolate those lower 3 bits * /
50
50
CMP R1 , # 2
51
- BLT Skip // No cache or only instruction cache at this level
51
+ BLT Skip / * No cache or only instruction cache at this level * /
52
52
53
- MCR p15 , 2 , R10 , c0 , c0 , 0 // Write the Cache Size selection register
54
- ISB // ISB to sync the change to the CacheSizeID reg
55
- MRC p15 , 1 , R1 , c0 , c0 , 0 // Reads current Cache Size ID register
56
- AND R2 , R1 , # 7 // Extract the line length field
57
- ADD R2 , R2 , # 4 // Add 4 for the line length offset (log2 16 bytes)
53
+ MCR p15 , 2 , R10 , c0 , c0 , 0 / * Write the Cache Size selection register * /
54
+ ISB / * ISB to sync the change to the CacheSizeID reg * /
55
+ MRC p15 , 1 , R1 , c0 , c0 , 0 / * Reads current Cache Size ID register * /
56
+ AND R2 , R1 , # 7 / * Extract the line length field * /
57
+ ADD R2 , R2 , # 4 / * Add 4 for the line length offset (log2 16 bytes) * /
58
58
LDR R4 , = 0x3FF
59
- ANDS R4 , R4 , R1 , LSR # 3 // R4 is the max number on the way size (right aligned)
60
- CLZ R5 , R4 // R5 is the bit position of the way size increment
59
+ ANDS R4 , R4 , R1 , LSR # 3 / * R4 is the max number on the way size (right aligned) * /
60
+ CLZ R5 , R4 / * R5 is the bit position of the way size increment * /
61
61
LDR R7 , = 0x7FFF
62
- ANDS R7 , R7 , R1 , LSR # 13 // R7 is the max number of the index size (right aligned)
62
+ ANDS R7 , R7 , R1 , LSR # 13 / * R7 is the max number of the index size (right aligned) * /
63
63
64
- Loop2: MOV R9 , R4 // R9 working copy of the max way size (right aligned)
64
+ Loop2: MOV R9 , R4 / * R9 working copy of the max way size (right aligned) * /
65
65
66
- Loop3: ORR R11 , R10 , R9 , LSL R5 // Factor in the Way number and cache number into R11
67
- ORR R11 , R11 , R7 , LSL R2 // Factor in the Set number
66
+ Loop3: ORR R11 , R10 , R9 , LSL R5 / * Factor in the Way number and cache number into R11 * /
67
+ ORR R11 , R11 , R7 , LSL R2 / * Factor in the Set number * /
68
68
CMP R0 , # 0
69
69
BNE Dccsw
70
- MCR p15 , 0 , R11 , c7 , c6 , 2 // DCISW. Invalidate by Set/Way
70
+ MCR p15 , 0 , R11 , c7 , c6 , 2 / * DCISW. Invalidate by Set/Way * /
71
71
B cont
72
72
Dccsw: CMP R0 , # 1
73
73
BNE Dccisw
74
- MCR p15 , 0 , R11 , c7 , c10 , 2 // DCCSW. Clean by Set/Way
74
+ MCR p15 , 0 , R11 , c7 , c10 , 2 / * DCCSW. Clean by Set/Way * /
75
75
B cont
76
- Dccisw: MCR p15 , 0 , R11 , c7 , c14 , 2 // DCCISW , Clean and Invalidate by Set/Way
77
- cont: SUBS R9 , R9 , # 1 // Decrement the Way number
76
+ Dccisw: MCR p15 , 0 , R11 , c7 , c14 , 2 / * DCCISW , Clean and Invalidate by Set/Way * /
77
+ cont: SUBS R9 , R9 , # 1 / * Decrement the Way number * /
78
78
BGE Loop3
79
- SUBS R7 , R7 , # 1 // Decrement the Set number
79
+ SUBS R7 , R7 , # 1 / * Decrement the Set number * /
80
80
BGE Loop2
81
- Skip: ADD R10 , R10 , # 2 // increment the cache number
81
+ Skip: ADD R10 , R10 , # 2 / * increment the cache number * /
82
82
CMP R3 , R10
83
83
BGT Loop1
84
84
0 commit comments