diff --git a/arch/arm/src/armv7-a/cp15_clean_dcache_all.S b/arch/arm/src/armv7-a/cp15_clean_dcache_all.S index 5f8b42d769e7d..e2413a0396735 100644 --- a/arch/arm/src/armv7-a/cp15_clean_dcache_all.S +++ b/arch/arm/src/armv7-a/cp15_clean_dcache_all.S @@ -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 @@ -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,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 @@ -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 - diff --git a/arch/arm/src/armv7-a/cp15_flush_dcache_all.S b/arch/arm/src/armv7-a/cp15_flush_dcache_all.S index 247b4c39b9637..e51bc85dfb2f9 100644 --- a/arch/arm/src/armv7-a/cp15_flush_dcache_all.S +++ b/arch/arm/src/armv7-a/cp15_flush_dcache_all.S @@ -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 @@ -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,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 @@ -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 - diff --git a/arch/arm/src/armv7-a/cp15_invalidate_dcache_all.S b/arch/arm/src/armv7-a/cp15_invalidate_dcache_all.S index 1cc048ecd2104..4500b415835ef 100644 --- a/arch/arm/src/armv7-a/cp15_invalidate_dcache_all.S +++ b/arch/arm/src/armv7-a/cp15_invalidate_dcache_all.S @@ -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 diff --git a/arch/arm/src/armv7-r/cp15_clean_dcache_all.S b/arch/arm/src/armv7-r/cp15_clean_dcache_all.S index c0ec165b7d926..1efc7edd46148 100644 --- a/arch/arm/src/armv7-r/cp15_clean_dcache_all.S +++ b/arch/arm/src/armv7-r/cp15_clean_dcache_all.S @@ -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 @@ -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,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 @@ -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 diff --git a/arch/arm/src/armv7-r/cp15_flush_dcache_all.S b/arch/arm/src/armv7-r/cp15_flush_dcache_all.S index 9a640fcdefbea..1be538e39c963 100644 --- a/arch/arm/src/armv7-r/cp15_flush_dcache_all.S +++ b/arch/arm/src/armv7-r/cp15_flush_dcache_all.S @@ -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 @@ -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,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 @@ -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 diff --git a/arch/arm/src/armv7-r/cp15_invalidate_dcache_all.S b/arch/arm/src/armv7-r/cp15_invalidate_dcache_all.S index 9662957ac836c..71a45d15d4200 100644 --- a/arch/arm/src/armv7-r/cp15_invalidate_dcache_all.S +++ b/arch/arm/src/armv7-r/cp15_invalidate_dcache_all.S @@ -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? (four ways assumed) */ - 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