Commit d28235ea authored by Jeffrey Lee's avatar Jeffrey Lee
Browse files

Fix kernel cache clean/invalidate operations for Cortex CPUs

Detail:
  s/ARMops - Fix set/way-based cache ops for cache type WB_CR7_Lx to iterate sets/ways/cache levels properly
  s/HAL - Fix HAL_InvalidateCache_ARMvF to iterate sets/ways/cache levels properly
Admin:
  Tested on rev C2 beagleboard


Version 5.35, 4.79.2.98.2.4. Tagged as 'Kernel-5_35-4_79_2_98_2_4'
parent 3d1317e7
...@@ -13,11 +13,11 @@ ...@@ -13,11 +13,11 @@
GBLS Module_ComponentPath GBLS Module_ComponentPath
Module_MajorVersion SETS "5.35" Module_MajorVersion SETS "5.35"
Module_Version SETA 535 Module_Version SETA 535
Module_MinorVersion SETS "4.79.2.98.2.3" Module_MinorVersion SETS "4.79.2.98.2.4"
Module_Date SETS "06 Mar 2009" Module_Date SETS "24 Apr 2009"
Module_ApplicationDate SETS "06-Mar-09" Module_ApplicationDate SETS "24-Apr-09"
Module_ComponentName SETS "Kernel" Module_ComponentName SETS "Kernel"
Module_ComponentPath SETS "castle/RiscOS/Sources/Kernel" Module_ComponentPath SETS "castle/RiscOS/Sources/Kernel"
Module_FullVersion SETS "5.35 (4.79.2.98.2.3)" Module_FullVersion SETS "5.35 (4.79.2.98.2.4)"
Module_HelpVersion SETS "5.35 (06 Mar 2009) 4.79.2.98.2.3" Module_HelpVersion SETS "5.35 (24 Apr 2009) 4.79.2.98.2.4"
END END
...@@ -5,19 +5,19 @@ ...@@ -5,19 +5,19 @@
* *
*/ */
#define Module_MajorVersion_CMHG 5.35 #define Module_MajorVersion_CMHG 5.35
#define Module_MinorVersion_CMHG 4.79.2.98.2.3 #define Module_MinorVersion_CMHG 4.79.2.98.2.4
#define Module_Date_CMHG 06 Mar 2009 #define Module_Date_CMHG 24 Apr 2009
#define Module_MajorVersion "5.35" #define Module_MajorVersion "5.35"
#define Module_Version 535 #define Module_Version 535
#define Module_MinorVersion "4.79.2.98.2.3" #define Module_MinorVersion "4.79.2.98.2.4"
#define Module_Date "06 Mar 2009" #define Module_Date "24 Apr 2009"
#define Module_ApplicationDate "06-Mar-09" #define Module_ApplicationDate "24-Apr-09"
#define Module_ComponentName "Kernel" #define Module_ComponentName "Kernel"
#define Module_ComponentPath "castle/RiscOS/Sources/Kernel" #define Module_ComponentPath "castle/RiscOS/Sources/Kernel"
#define Module_FullVersion "5.35 (4.79.2.98.2.3)" #define Module_FullVersion "5.35 (4.79.2.98.2.4)"
#define Module_HelpVersion "5.35 (06 Mar 2009) 4.79.2.98.2.3" #define Module_HelpVersion "5.35 (24 Apr 2009) 4.79.2.98.2.4"
#define Module_LibraryVersionInfo "5:35" #define Module_LibraryVersionInfo "5:35"
...@@ -1852,13 +1852,13 @@ Cache_CleanAll_WB_CR7_Lx ROUT ...@@ -1852,13 +1852,13 @@ Cache_CleanAll_WB_CR7_Lx ROUT
AND v1, a3, #&7 ; log2(Line size)-2 AND v1, a3, #&7 ; log2(Line size)-2
BIC a3, a3, #&F0000007 ; Clear flags & line size BIC a3, a3, #&F0000007 ; Clear flags & line size
MOV v2, a3, LSL #19 ; Number of ways-1 in upper 10 bits MOV v2, a3, LSL #19 ; Number of ways-1 in upper 10 bits
MOV v3, a3, LSR #13 ; Number of sets-1 in upper 15 bits MOV v3, a3, LSR #13 ; Number of sets-1 in lower 15 bits
; Way number needs to be packed right up at the high end of the data word; shift it up ; Way number needs to be packed right up at the high end of the data word; shift it up
CLZ a4, v2 CLZ a4, v2
MOV v2, v2, LSL a4 MOV v2, v2, LSL a4
; Set number needs to start at log2(Line size) ; Set number needs to start at log2(Line size)+2
MOV v3, v3, LSR #15 ; Start at bit 2 MOV v3, v3, LSL #4 ; Start at bit 4
MOV v3, v3, LSL v1 ; Start at log2(Line size) MOV v3, v3, LSL v1 ; Start at log2(Line size)+2
; Now calculate the offset numbers we will use to increment sets & ways ; Now calculate the offset numbers we will use to increment sets & ways
BIC v4, v2, v2, LSL #1 ; Way increment BIC v4, v2, v2, LSL #1 ; Way increment
BIC v5, v3, v3, LSL #1 ; Set increment BIC v5, v3, v3, LSL #1 ; Set increment
...@@ -1898,13 +1898,13 @@ Cache_CleanInvalidateAll_WB_CR7_Lx ROUT ...@@ -1898,13 +1898,13 @@ Cache_CleanInvalidateAll_WB_CR7_Lx ROUT
AND v1, a3, #&7 ; log2(Line size)-2 AND v1, a3, #&7 ; log2(Line size)-2
BIC a3, a3, #&F0000007 ; Clear flags & line size BIC a3, a3, #&F0000007 ; Clear flags & line size
MOV v2, a3, LSL #19 ; Number of ways-1 in upper 10 bits MOV v2, a3, LSL #19 ; Number of ways-1 in upper 10 bits
MOV v3, a3, LSR #13 ; Number of sets-1 in upper 15 bits MOV v3, a3, LSR #13 ; Number of sets-1 in lower 15 bits
; Way number needs to be packed right up at the high end of the data word; shift it up ; Way number needs to be packed right up at the high end of the data word; shift it up
CLZ a4, v2 CLZ a4, v2
MOV v2, v2, LSL a4 MOV v2, v2, LSL a4
; Set number needs to start at log2(Line size) ; Set number needs to start at log2(Line size)+2
MOV v3, v3, LSR #15 ; Start at bit 2 MOV v3, v3, LSL #4 ; Start at bit 4
MOV v3, v3, LSL v1 ; Start at log2(Line size) MOV v3, v3, LSL v1 ; Start at log2(Line size)+2
; Now calculate the offset numbers we will use to increment sets & ways ; Now calculate the offset numbers we will use to increment sets & ways
BIC v4, v2, v2, LSL #1 ; Way increment BIC v4, v2, v2, LSL #1 ; Way increment
BIC v5, v3, v3, LSL #1 ; Set increment BIC v5, v3, v3, LSL #1 ; Set increment
...@@ -1945,13 +1945,13 @@ Cache_InvalidateAll_WB_CR7_Lx ROUT ...@@ -1945,13 +1945,13 @@ Cache_InvalidateAll_WB_CR7_Lx ROUT
AND v1, a3, #&7 ; log2(Line size)-2 AND v1, a3, #&7 ; log2(Line size)-2
BIC a3, a3, #&F0000007 ; Clear flags & line size BIC a3, a3, #&F0000007 ; Clear flags & line size
MOV v2, a3, LSL #19 ; Number of ways-1 in upper 10 bits MOV v2, a3, LSL #19 ; Number of ways-1 in upper 10 bits
MOV v3, a3, LSR #13 ; Number of sets-1 in upper 15 bits MOV v3, a3, LSR #13 ; Number of sets-1 in lower 15 bits
; Way number needs to be packed right up at the high end of the data word; shift it up ; Way number needs to be packed right up at the high end of the data word; shift it up
CLZ a4, v2 CLZ a4, v2
MOV v2, v2, LSL a4 MOV v2, v2, LSL a4
; Set number needs to start at log2(Line size) ; Set number needs to start at log2(Line size)+2
MOV v3, v3, LSR #15 ; Start at bit 2 MOV v3, v3, LSL #4 ; Start at bit 4
MOV v3, v3, LSL v1 ; Start at log2(Line size) MOV v3, v3, LSL v1 ; Start at log2(Line size)+2
; Now calculate the offset numbers we will use to increment sets & ways ; Now calculate the offset numbers we will use to increment sets & ways
BIC v4, v2, v2, LSL #1 ; Way increment BIC v4, v2, v2, LSL #1 ; Way increment
BIC v5, v3, v3, LSL #1 ; Set increment BIC v5, v3, v3, LSL #1 ; Set increment
...@@ -2020,13 +2020,13 @@ IMB_Full_WB_CR7_Lx ROUT ...@@ -2020,13 +2020,13 @@ IMB_Full_WB_CR7_Lx ROUT
AND v1, a3, #&7 ; log2(Line size)-2 AND v1, a3, #&7 ; log2(Line size)-2
BIC a3, a3, #&F0000007 ; Clear flags & line size BIC a3, a3, #&F0000007 ; Clear flags & line size
MOV v2, a3, LSL #19 ; Number of ways-1 in upper 10 bits MOV v2, a3, LSL #19 ; Number of ways-1 in upper 10 bits
MOV v3, a3, LSR #13 ; Number of sets-1 in upper 15 bits MOV v3, a3, LSR #13 ; Number of sets-1 in lower 15 bits
; Way number needs to be packed right up at the high end of the data word; shift it up ; Way number needs to be packed right up at the high end of the data word; shift it up
CLZ a4, v2 CLZ a4, v2
MOV v2, v2, LSL a4 MOV v2, v2, LSL a4
; Set number needs to start at log2(Line size) ; Set number needs to start at log2(Line size)+2
MOV v3, v3, LSR #15 ; Start at bit 2 MOV v3, v3, LSL #4 ; Start at bit 4
MOV v3, v3, LSL v1 ; Start at log2(Line size) MOV v3, v3, LSL v1 ; Start at log2(Line size)+2
; Now calculate the offset numbers we will use to increment sets & ways ; Now calculate the offset numbers we will use to increment sets & ways
BIC v4, v2, v2, LSL #1 ; Way increment BIC v4, v2, v2, LSL #1 ; Way increment
BIC v5, v3, v3, LSL #1 ; Set increment BIC v5, v3, v3, LSL #1 ; Set increment
......
...@@ -1040,13 +1040,13 @@ HAL_InvalidateCache_ARMvF ...@@ -1040,13 +1040,13 @@ HAL_InvalidateCache_ARMvF
AND r11, r10, #&7 ; log2(Line size)-2 AND r11, r10, #&7 ; log2(Line size)-2
BIC r10, r10, #&F0000007 ; Clear flags & line size BIC r10, r10, #&F0000007 ; Clear flags & line size
MOV r12, r10, LSL #19 ; Number of ways-1 in upper 10 bits MOV r12, r10, LSL #19 ; Number of ways-1 in upper 10 bits
MOV r10, r10, LSR #13 ; Number of sets-1 in upper 15 bits MOV r10, r10, LSR #13 ; Number of sets-1 in lower 15 bits
; Way number needs to be packed right up at the high end of the data word; shift it up ; Way number needs to be packed right up at the high end of the data word; shift it up
CLZ r14, r12 CLZ r14, r12
MOV r12, r12, LSL r14 MOV r12, r12, LSL r14
; Set number needs to start at log2(Line size) ; Set number needs to start at log2(Line size)+2
MOV r10, r10, LSR #15 ; Start at bit 2 MOV r10, r10, LSL #4 ; Start at bit 4
MOV r10, r10, LSL r11 ; Start at log2(Line size) MOV r10, r10, LSL r11 ; Start at log2(Line size)+2
; Now calculate the offset numbers we will use to increment sets & ways ; Now calculate the offset numbers we will use to increment sets & ways
BIC r12, r12, r12, LSL #1 ; Way increment BIC r12, r12, r12, LSL #1 ; Way increment
BIC r11, r10, r10, LSL #1 ; Set increment BIC r11, r10, r10, LSL #1 ; Set increment
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment