-
Notifications
You must be signed in to change notification settings - Fork 1.2k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
armv7-r/a: fix a4 register use in xxx_invalidate/flush/clean_all.S
Use sub loop instead of add loop Signed-off-by: zhuyanlin <[email protected]>
- Loading branch information
1 parent
202b814
commit 13fdc7f
Showing
6 changed files
with
90 additions
and
98 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,5 +1,5 @@ | ||
/**************************************************************************** | ||
* arch/arm/src/armv7-a/cp15_flush_dcache_all.S | ||
* arch/arm/src/armv7-a/cp15_clean_dcache_all.S | ||
* | ||
* Copyright (C) 2013 Gregory Nutt. All rights reserved. | ||
* Author: Gregory Nutt <[email protected]> | ||
|
@@ -54,7 +54,7 @@ | |
|
||
#include "cp15.h" | ||
|
||
.file "cp15_flush_dcache_all.S" | ||
.file "cp15_clean_dcache_all.S" | ||
|
||
/**************************************************************************** | ||
* Pre-processor Definitions | ||
|
@@ -64,7 +64,7 @@ | |
* Public Symbols | ||
****************************************************************************/ | ||
|
||
.globl cp15_flush_dcache_all | ||
.globl cp15_clean_dcache_all | ||
|
||
/**************************************************************************** | ||
* Public Functions | ||
|
@@ -73,7 +73,7 @@ | |
.text | ||
|
||
/**************************************************************************** | ||
* Name: cp15_flush_dcache_all | ||
* Name: cp15_clean_dcache_all | ||
* | ||
* Description: | ||
* Invalidate the entire contents of D cache. | ||
|
@@ -86,36 +86,34 @@ | |
* | ||
****************************************************************************/ | ||
|
||
.globl cp15_flush_dcache_all | ||
.type cp15_flush_dcache_all, function | ||
.globl cp15_clean_dcache_all | ||
.type cp15_clean_dcache_all, function | ||
|
||
cp15_flush_dcache_all: | ||
cp15_clean_dcache_all: | ||
|
||
mrc CP15_CCSIDR(r1) /* Read the Cache Size Identification Register */ | ||
|
||
mrc CP15_CCSIDR(r0) /* Read the Cache Size Identification Register */ | ||
ldr r3, =0x7fff /* Isolate the NumSets field (bits 13-27) */ | ||
and r0, r3, r0, lsr #13 /* r0=NumSets (number of sets - 1) */ | ||
and r0, r3, r1, lsr #13 /* r0=NumSets (number of sets - 1) */ | ||
|
||
ldr r3, =0x3ff /* Isolate the way field (bits 3-12) */ | ||
add r4, r3, r0, lsr #3 /* r4=(number of ways - 1) */ | ||
and r1, r3, r1, lsr #3 /* r1=(number of ways - 1) */ | ||
|
||
mov r1, #0 /* r1 = way loop counter */ | ||
way_loop: | ||
|
||
mov r3, #0 /* r3 = set loop counter */ | ||
mov r3, r0 /* Init Sets */ | ||
set_loop: | ||
mov r2, r1, lsl #30 /* r2 = way loop counter << 30 */ | ||
orr r2, r3, lsl #5 /* r2 = set/way cache operation format */ | ||
mcr CP15_DCCISW(r2) /* Data Cache Invalidate by Set/Way */ | ||
add r3, r3, #1 /* Increment set counter */ | ||
cmp r0, r3 /* Last set? */ | ||
mcr CP15_DCCSW(r2) /* Data Cache Clean by Set/Way */ | ||
sub r3, r3, #1 /* Subtraction set counter */ | ||
cmp r3, #0 /* Last set? */ | ||
bne set_loop /* Keep looping if not */ | ||
|
||
add r1, r1, #1 /* Increment the way counter */ | ||
cmp r4, r1 /* Last way */ | ||
sub r1, r1, #1 /* Subtraction the way counter */ | ||
cmp r1, #0 /* Last way? */ | ||
bne way_loop /* Keep looping if not */ | ||
|
||
dsb | ||
bx lr | ||
.size cp15_flush_dcache_all, . - cp15_flush_dcache_all | ||
.size cp15_clean_dcache_all, . - cp15_clean_dcache_all | ||
.end | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,5 +1,5 @@ | ||
/**************************************************************************** | ||
* arch/arm/src/armv7-a/cp15_clean_dcache_all.S | ||
* arch/arm/src/armv7-a/cp15_flush_dcache_all.S | ||
* | ||
* Copyright (C) 2013 Gregory Nutt. All rights reserved. | ||
* Author: Gregory Nutt <[email protected]> | ||
|
@@ -54,7 +54,7 @@ | |
|
||
#include "cp15.h" | ||
|
||
.file "cp15_clean_dcache_all.S" | ||
.file "cp15_flush_dcache_all.S" | ||
|
||
/**************************************************************************** | ||
* Pre-processor Definitions | ||
|
@@ -64,7 +64,7 @@ | |
* Public Symbols | ||
****************************************************************************/ | ||
|
||
.globl cp15_clean_dcache_all | ||
.globl cp15_flush_dcache_all | ||
|
||
/**************************************************************************** | ||
* Public Functions | ||
|
@@ -73,7 +73,7 @@ | |
.text | ||
|
||
/**************************************************************************** | ||
* Name: cp15_clean_dcache_all | ||
* Name: cp15_flush_dcache_all | ||
* | ||
* Description: | ||
* Invalidate the entire contents of D cache. | ||
|
@@ -86,36 +86,34 @@ | |
* | ||
****************************************************************************/ | ||
|
||
.globl cp15_clean_dcache_all | ||
.type cp15_clean_dcache_all, function | ||
.globl cp15_flush_dcache_all | ||
.type cp15_flush_dcache_all, function | ||
|
||
cp15_clean_dcache_all: | ||
cp15_flush_dcache_all: | ||
|
||
mrc CP15_CCSIDR(r1) /* Read the Cache Size Identification Register */ | ||
|
||
mrc CP15_CCSIDR(r0) /* Read the Cache Size Identification Register */ | ||
ldr r3, =0x7fff /* Isolate the NumSets field (bits 13-27) */ | ||
and r0, r3, r0, lsr #13 /* r0=NumSets (number of sets - 1) */ | ||
and r0, r3, r1, lsr #13 /* r0=NumSets (number of sets - 1) */ | ||
|
||
ldr r3, =0x3ff /* Isolate the way field (bits 3-12) */ | ||
add r4, r3, r0, lsr #3 /* r4=(number of ways - 1) */ | ||
and r1, r3, r1, lsr #3 /* r1=(number of ways - 1) */ | ||
|
||
mov r1, #0 /* r1 = way loop counter */ | ||
way_loop: | ||
|
||
mov r3, #0 /* r3 = set loop counter */ | ||
mov r3, r0 /* Init Sets */ | ||
set_loop: | ||
mov r2, r1, lsl #30 /* r2 = way loop counter << 30 */ | ||
orr r2, r3, lsl #5 /* r2 = set/way cache operation format */ | ||
mcr CP15_DCCSW(r2) /* Data Cache Invalidate by Set/Way */ | ||
add r3, r3, #1 /* Increment set counter */ | ||
cmp r0, r3 /* Last set? */ | ||
mcr CP15_DCCISW(r2) /* Data Cache Clean and Invalidate by Set/Way */ | ||
sub r3, r3, #1 /* Subtraction set counter */ | ||
cmp r3, #0 /* Last set? */ | ||
bne set_loop /* Keep looping if not */ | ||
|
||
add r1, r1, #1 /* Increment the way counter */ | ||
cmp r4, r1 /* Last way */ | ||
sub r1, r1, #1 /* Subtraction the way counter */ | ||
cmp r1, #0 /* Last way? */ | ||
bne way_loop /* Keep looping if not */ | ||
|
||
dsb | ||
bx lr | ||
.size cp15_clean_dcache_all, . - cp15_clean_dcache_all | ||
.size cp15_flush_dcache_all, . - cp15_flush_dcache_all | ||
.end | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,5 +1,5 @@ | ||
/**************************************************************************** | ||
* arch/arm/src/armv7-r/cp15_flush_dcache_all.S | ||
* arch/arm/src/armv7-r/cp15_clean_dcache_all.S | ||
* | ||
* Copyright (C) 2013 Gregory Nutt. All rights reserved. | ||
* Author: Gregory Nutt <[email protected]> | ||
|
@@ -54,7 +54,7 @@ | |
|
||
#include "cp15.h" | ||
|
||
.file "cp15_flush_dcache_all.S" | ||
.file "cp15_clean_dcache_all.S" | ||
|
||
/**************************************************************************** | ||
* Pre-processor Definitions | ||
|
@@ -64,7 +64,7 @@ | |
* Public Symbols | ||
****************************************************************************/ | ||
|
||
.globl cp15_flush_dcache_all | ||
.globl cp15_clean_dcache_all | ||
|
||
/**************************************************************************** | ||
* Public Functions | ||
|
@@ -73,7 +73,7 @@ | |
.text | ||
|
||
/**************************************************************************** | ||
* Name: cp15_flush_dcache_all | ||
* Name: cp15_clean_dcache_all | ||
* | ||
* Description: | ||
* Invalidate the entire contents of D cache. | ||
|
@@ -86,36 +86,35 @@ | |
* | ||
****************************************************************************/ | ||
|
||
.globl cp15_flush_dcache_all | ||
.type cp15_flush_dcache_all, function | ||
.globl cp15_clean_dcache_all | ||
.type cp15_clean_dcache_all, function | ||
|
||
cp15_flush_dcache_all: | ||
cp15_clean_dcache_all: | ||
|
||
mrc CP15_CCSIDR(r1) /* Read the Cache Size Identification Register */ | ||
|
||
mrc CP15_CCSIDR(r0) /* Read the Cache Size Identification Register */ | ||
ldr r3, =0x7fff /* Isolate the NumSets field (bits 13-27) */ | ||
and r0, r3, r0, lsr #13 /* r0=NumSets (number of sets - 1) */ | ||
and r0, r3, r1, lsr #13 /* r0=NumSets (number of sets - 1) */ | ||
|
||
ldr r3, =0x3ff /* Isolate the way field (bits 3-12) */ | ||
add r4, r3, r0, lsr #3 /* r4=(number of ways - 1) */ | ||
and r1, r3, r1, lsr #3 /* r1=(number of ways - 1) */ | ||
|
||
mov r1, #0 /* r1 = way loop counter */ | ||
way_loop: | ||
|
||
mov r3, #0 /* r3 = set loop counter */ | ||
mov r3, r0 /* Init Sets */ | ||
set_loop: | ||
mov r2, r1, lsl #30 /* r2 = way loop counter << 30 */ | ||
orr r2, r3, lsl #5 /* r2 = set/way cache operation format */ | ||
mcr CP15_DCCISW(r2) /* Data Cache Invalidate by Set/Way */ | ||
add r3, r3, #1 /* Increment set counter */ | ||
cmp r0, r3 /* Last set? */ | ||
mcr CP15_DCCSW(r2) /* Data Cache Clean by Set/Way */ | ||
sub r3, r3, #1 /* Subtraction set counter */ | ||
cmp r3, #0 /* Last set? */ | ||
bne set_loop /* Keep looping if not */ | ||
|
||
add r1, r1, #1 /* Increment the way counter */ | ||
cmp r4, r1 /* Last way */ | ||
sub r1, r1, #1 /* Subtraction the way counter */ | ||
cmp r1, #0 /* Last way? */ | ||
bne way_loop /* Keep looping if not */ | ||
|
||
dsb | ||
bx lr | ||
.size cp15_flush_dcache_all, . - cp15_flush_dcache_all | ||
.size cp15_clean_dcache_all, . - cp15_clean_dcache_all | ||
.end | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,5 +1,5 @@ | ||
/**************************************************************************** | ||
* arch/arm/src/armv7-r/cp15_clean_dcache_all.S | ||
* arch/arm/src/armv7-r/cp15_flush_dcache_all.S | ||
* | ||
* Copyright (C) 2013 Gregory Nutt. All rights reserved. | ||
* Author: Gregory Nutt <[email protected]> | ||
|
@@ -54,7 +54,7 @@ | |
|
||
#include "cp15.h" | ||
|
||
.file "cp15_clean_dcache_all.S" | ||
.file "cp15_flush_dcache_all.S" | ||
|
||
/**************************************************************************** | ||
* Pre-processor Definitions | ||
|
@@ -64,7 +64,7 @@ | |
* Public Symbols | ||
****************************************************************************/ | ||
|
||
.globl cp15_clean_dcache_all | ||
.globl cp15_flush_dcache_all | ||
|
||
/**************************************************************************** | ||
* Public Functions | ||
|
@@ -73,7 +73,7 @@ | |
.text | ||
|
||
/**************************************************************************** | ||
* Name: cp15_clean_dcache_all | ||
* Name: cp15_flush_dcache_all | ||
* | ||
* Description: | ||
* Invalidate the entire contents of D cache. | ||
|
@@ -86,36 +86,35 @@ | |
* | ||
****************************************************************************/ | ||
|
||
.globl cp15_clean_dcache_all | ||
.type cp15_clean_dcache_all, function | ||
.globl cp15_flush_dcache_all | ||
.type cp15_flush_dcache_all, function | ||
|
||
cp15_clean_dcache_all: | ||
cp15_flush_dcache_all: | ||
|
||
mrc CP15_CCSIDR(r1) /* Read the Cache Size Identification Register */ | ||
|
||
mrc CP15_CCSIDR(r0) /* Read the Cache Size Identification Register */ | ||
ldr r3, =0x7fff /* Isolate the NumSets field (bits 13-27) */ | ||
and r0, r3, r0, lsr #13 /* r0=NumSets (number of sets - 1) */ | ||
and r0, r3, r1, lsr #13 /* r0=NumSets (number of sets - 1) */ | ||
|
||
ldr r3, =0x3ff /* Isolate the way field (bits 3-12) */ | ||
add r4, r3, r0, lsr #3 /* r4=(number of ways - 1) */ | ||
and r1, r3, r1, lsr #3 /* r1=(number of ways - 1) */ | ||
|
||
mov r1, #0 /* r1 = way loop counter */ | ||
way_loop: | ||
|
||
mov r3, #0 /* r3 = set loop counter */ | ||
mov r3, r0 /* Init Sets */ | ||
set_loop: | ||
mov r2, r1, lsl #30 /* r2 = way loop counter << 30 */ | ||
orr r2, r3, lsl #5 /* r2 = set/way cache operation format */ | ||
mcr CP15_DCCSW(r2) /* Data Cache Invalidate by Set/Way */ | ||
add r3, r3, #1 /* Increment set counter */ | ||
cmp r0, r3 /* Last set? */ | ||
mcr CP15_DCCISW(r2) /* Data Cache Clean and Invalidate by Set/Way */ | ||
sub r3, r3, #1 /* Subtraction set counter */ | ||
cmp r3, #0 /* Last set? */ | ||
bne set_loop /* Keep looping if not */ | ||
|
||
add r1, r1, #1 /* Increment the way counter */ | ||
cmp r4, r1 /* Last way */ | ||
sub r1, r1, #1 /* Subtraction the way counter */ | ||
cmp r1, #0 /* Last way? */ | ||
bne way_loop /* Keep looping if not */ | ||
|
||
dsb | ||
bx lr | ||
.size cp15_clean_dcache_all, . - cp15_clean_dcache_all | ||
.size cp15_flush_dcache_all, . - cp15_flush_dcache_all | ||
.end | ||
|
Oops, something went wrong.