Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

armv7-r/a: bugfix: fix a4 register use but not store in xxx_invalidate/flush/clean_all.S #5367

Merged
merged 1 commit into from
Feb 8, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 19 additions & 23 deletions arch/arm/src/armv7-a/cp15_clean_dcache_all.S
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]>
Expand Down Expand Up @@ -54,7 +54,7 @@

#include "cp15.h"

.file "cp15_flush_dcache_all.S"
.file "cp15_clean_dcache_all.S"

/****************************************************************************
* Pre-processor Definitions
Expand All @@ -64,7 +64,7 @@
* Public Symbols
****************************************************************************/

.globl cp15_flush_dcache_all
.globl cp15_clean_dcache_all

/****************************************************************************
* Public Functions
Expand All @@ -73,10 +73,10 @@
.text

/****************************************************************************
* Name: cp15_flush_dcache_all
* Name: cp15_clean_dcache_all
*
* Description:
* Invalidate the entire contents of D cache.
* Clean the entire contents of D cache.
*
* Input Parameters:
* None
Expand All @@ -86,36 +86,32 @@
*
****************************************************************************/

.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? */
bne set_loop /* Keep looping if not */
mcr CP15_DCCSW(r2) /* Data Cache Clean by Set/Way */
subs r3, r3, #1 /* Subtraction set counter */
bcs set_loop /* Keep looping if not */

add r1, r1, #1 /* Increment the way counter */
cmp r4, r1 /* Last way */
bne way_loop /* Keep looping if not */
subs r1, r1, #1 /* Subtraction the way counter */
bcs 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

42 changes: 19 additions & 23 deletions arch/arm/src/armv7-a/cp15_flush_dcache_all.S
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]>
Expand Down Expand Up @@ -54,7 +54,7 @@

#include "cp15.h"

.file "cp15_clean_dcache_all.S"
.file "cp15_flush_dcache_all.S"

/****************************************************************************
* Pre-processor Definitions
Expand All @@ -64,7 +64,7 @@
* Public Symbols
****************************************************************************/

.globl cp15_clean_dcache_all
.globl cp15_flush_dcache_all

/****************************************************************************
* Public Functions
Expand All @@ -73,10 +73,10 @@
.text

/****************************************************************************
* Name: cp15_clean_dcache_all
* Name: cp15_flush_dcache_all
*
* Description:
* Invalidate the entire contents of D cache.
* Flush the entire contents of D cache.
*
* Input Parameters:
* None
Expand All @@ -86,36 +86,32 @@
*
****************************************************************************/

.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? */
bne set_loop /* Keep looping if not */
mcr CP15_DCCISW(r2) /* Data Cache Clean and Invalidate by Set/Way */
subs r3, r3, #1 /* Subtraction set counter */
bcs set_loop /* Keep looping if not */

add r1, r1, #1 /* Increment the way counter */
cmp r4, r1 /* Last way */
bne way_loop /* Keep looping if not */
subs r1, r1, #1 /* Subtraction the way counter */
bcs 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

21 changes: 9 additions & 12 deletions arch/arm/src/armv7-a/cp15_invalidate_dcache_all.S
Original file line number Diff line number Diff line change
Expand Up @@ -91,28 +91,25 @@

cp15_invalidate_dcache_all:

mrc CP15_CCSIDR(r0) /* Read the Cache Size Identification Register */
mrc CP15_CCSIDR(r1) /* 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_DCISW(r2) /* Data Cache Invalidate by Set/Way */
add r3, r3, #1 /* Increment set counter */
cmp r0, r3 /* Last set? */
bne set_loop /* Keep looping if not */
subs r3, r3, #1 /* Subtraction set counter */
bcs set_loop /* Keep looping if not */

add r1, r1, #1 /* Increment the way counter */
cmp r4, r1 /* Last way? */
bne way_loop /* Keep looping if not */
subs r1, r1, #1 /* Subtraction the way counter */
bcs way_loop /* Keep looping if not */

dsb
bx lr
Expand Down
41 changes: 19 additions & 22 deletions arch/arm/src/armv7-r/cp15_clean_dcache_all.S
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]>
Expand Down Expand Up @@ -54,7 +54,7 @@

#include "cp15.h"

.file "cp15_flush_dcache_all.S"
.file "cp15_clean_dcache_all.S"

/****************************************************************************
* Pre-processor Definitions
Expand All @@ -64,7 +64,7 @@
* Public Symbols
****************************************************************************/

.globl cp15_flush_dcache_all
.globl cp15_clean_dcache_all

/****************************************************************************
* Public Functions
Expand All @@ -73,10 +73,10 @@
.text

/****************************************************************************
* Name: cp15_flush_dcache_all
* Name: cp15_clean_dcache_all
*
* Description:
* Invalidate the entire contents of D cache.
* clean the entire contents of D cache.
*
* Input Parameters:
* None
Expand All @@ -86,36 +86,33 @@
*
****************************************************************************/

.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? */
bne set_loop /* Keep looping if not */
mcr CP15_DCCSW(r2) /* Data Cache Clean by Set/Way */
subs r3, r3, #1 /* Subtraction set counter */
bcs set_loop /* Keep looping if not */

add r1, r1, #1 /* Increment the way counter */
cmp r4, r1 /* Last way */
bne way_loop /* Keep looping if not */
subs r1, r1, #1 /* Subtraction the way counter */
bcs 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

41 changes: 19 additions & 22 deletions arch/arm/src/armv7-r/cp15_flush_dcache_all.S
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]>
Expand Down Expand Up @@ -54,7 +54,7 @@

#include "cp15.h"

.file "cp15_clean_dcache_all.S"
.file "cp15_flush_dcache_all.S"

/****************************************************************************
* Pre-processor Definitions
Expand All @@ -64,7 +64,7 @@
* Public Symbols
****************************************************************************/

.globl cp15_clean_dcache_all
.globl cp15_flush_dcache_all

/****************************************************************************
* Public Functions
Expand All @@ -73,10 +73,10 @@
.text

/****************************************************************************
* Name: cp15_clean_dcache_all
* Name: cp15_flush_dcache_all
*
* Description:
* Invalidate the entire contents of D cache.
* Flush the entire contents of D cache.
*
* Input Parameters:
* None
Expand All @@ -86,36 +86,33 @@
*
****************************************************************************/

.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? */
bne set_loop /* Keep looping if not */
mcr CP15_DCCISW(r2) /* Data Cache Clean and Invalidate by Set/Way */
subs r3, r3, #1 /* Subtraction set counter */
bcs set_loop /* Keep looping if not */

add r1, r1, #1 /* Increment the way counter */
cmp r4, r1 /* Last way */
bne way_loop /* Keep looping if not */
subs r1, r1, #1 /* Subtraction the way counter */
bcs 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

Loading