patch-2.3.16 linux/arch/arm/mm/proc-sa110.S
Next file: linux/arch/arm/nwfpe/config.h
Previous file: linux/arch/arm/mm/proc-arm6,7.S
Back to the patch index
Back to the overall index
- Lines: 305
- Date:
Mon Aug 30 18:15:19 1999
- Orig file:
v2.3.15/linux/arch/arm/mm/proc-sa110.S
- Orig date:
Mon Aug 2 10:19:52 1999
diff -u --recursive --new-file v2.3.15/linux/arch/arm/mm/proc-sa110.S linux/arch/arm/mm/proc-sa110.S
@@ -1,13 +1,15 @@
/*
- * linux/arch/arm/mm/sa110.S: MMU functions for SA110
+ * linux/arch/arm/mm/proc-sa110.S: MMU functions for SA110
*
- * (C) 1997 Russell King
+ * (C) 1997-1999 Russell King
*
* These are the low level assembler for performing cache and TLB
* functions on the sa110.
*/
+#include <linux/config.h>
#include <linux/linkage.h>
#include <asm/assembler.h>
+#include <asm/procinfo.h>
#include <asm/hardware.h>
#include "../lib/constants.h"
@@ -25,9 +27,9 @@
* Purpose : Flush all cache lines
*/
.align 5
-_sa110_flush_cache_all: @ preserves r0
+ENTRY(cpu_sa110_flush_cache_all) @ preserves r0
mov r2, #1
-_sa110_flush_cache_all_r2:
+cpu_sa110_flush_cache_all_r2:
ldr r3, =Lclean_switch
ldr ip, =FLUSH_BASE
ldr r1, [r3]
@@ -53,10 +55,10 @@
* Purpose : clean & flush all cache lines associated with this area of memory
*/
.align 5
-_sa110_flush_cache_area:
+ENTRY(cpu_sa110_flush_cache_area)
sub r3, r1, r0
cmp r3, #MAX_AREA_SIZE
- bgt _sa110_flush_cache_all_r2
+ bgt cpu_sa110_flush_cache_all_r2
1: mcr p15, 0, r0, c7, c10, 1 @ clean D entry
mcr p15, 0, r0, c7, c6, 1 @ flush D entry
add r0, r0, #32
@@ -78,11 +80,11 @@
* written out to memory (for DMA)
*/
.align 5
-_sa110_cache_wback_area:
+ENTRY(cpu_sa110_cache_wback_area)
sub r3, r1, r0
cmp r3, #MAX_AREA_SIZE
mov r2, #0
- bgt _sa110_flush_cache_all_r2
+ bgt cpu_sa110_flush_cache_all_r2
bic r0, r0, #31
1: mcr p15, 0, r0, c7, c10, 1 @ clean D entry
add r0, r0, #32
@@ -103,7 +105,7 @@
* start and/or end address are not cache aligned.
*/
.align 5
-_sa110_cache_purge_area:
+ENTRY(cpu_sa110_cache_purge_area)
tst r0, #31
bic r0, r0, #31
mcrne p15, 0, r0, c7, c10, 1 @ clean D entry
@@ -121,7 +123,7 @@
* Purpose : clean & flush an entry
*/
.align 5
-_sa110_flush_cache_entry:
+ENTRY(cpu_sa110_flush_cache_entry)
mov r1, #0
mcr p15, 0, r0, c7, c10, 1 @ clean D entry
mcr p15, 0, r1, c7, c10, 4 @ drain WB
@@ -134,7 +136,7 @@
* Purpose : Ensure that physical memory reflects cache at this location
* for page table purposes.
*/
-_sa110_clean_cache_area:
+ENTRY(cpu_sa110_clean_cache_area)
1: mcr p15, 0, r0, c7, c10, 1 @ clean D entry (drain is done by TLB fns)
add r0, r0, #32
subs r1, r1, #32
@@ -143,25 +145,24 @@
/*
* Function: sa110_flush_ram_page (unsigned long page)
- * Params : address Area start address
- * : size size of area
- * : flags b0 = I cache as well
- * Purpose : clean & flush all cache lines associated with this area of memory
+ * Params : page Area start address
+ * Purpose : clean all cache lines associated with this area of memory
*/
.align 5
-_sa110_flush_ram_page:
+ENTRY(cpu_sa110_flush_ram_page)
mov r1, #4096
1: mcr p15, 0, r0, c7, c10, 1 @ clean D entry
- mcr p15, 0, r0, c7, c6, 1 @ flush D entry
add r0, r0, #32
mcr p15, 0, r0, c7, c10, 1 @ clean D entry
- mcr p15, 0, r0, c7, c6, 1 @ flush D entry
add r0, r0, #32
- subs r1, r1, #64
+ mcr p15, 0, r0, c7, c10, 1 @ clean D entry
+ add r0, r0, #32
+ mcr p15, 0, r0, c7, c10, 1 @ clean D entry
+ add r0, r0, #32
+ subs r1, r1, #128
bne 1b
mov r0, #0
mcr p15, 0, r0, c7, c10, 4 @ drain WB
- mcr p15, 0, r0, c7, c5, 0 @ flush I cache
mov pc, lr
/*
@@ -169,7 +170,7 @@
* Purpose : flush all TLB entries in all caches
*/
.align 5
-_sa110_flush_tlb_all:
+ENTRY(cpu_sa110_flush_tlb_all)
mov r0, #0
mcr p15, 0, r0, c7, c10, 4 @ drain WB
mcr p15, 0, r0, c8, c7, 0 @ flush I & D tlbs
@@ -179,11 +180,11 @@
* Function: sa110_flush_tlb_area (unsigned long address, unsigned long end, int flags)
* Params : address Area start address
* : end Area end address
- * : flags b0 = I cache as well
+ * : flags b0 = I-TLB as well
* Purpose : flush a TLB entry
*/
.align 5
-_sa110_flush_tlb_area:
+ENTRY(cpu_sa110_flush_tlb_area)
mov r3, #0
mcr p15, 0, r3, c7, c10, 4 @ drain WB
1: cmp r0, r1
@@ -198,7 +199,7 @@
mov pc, lr
.align 5
-_sa110_flush_icache_area:
+ENTRY(cpu_sa110_flush_icache_area)
1: mcr p15, 0, r0, c7, c10, 1 @ Clean D entry
add r0, r0, #32
subs r1, r1, #32
@@ -217,7 +218,7 @@
* : r2 != 0 if writing
*/
.align 5
-_sa110_data_abort:
+ENTRY(cpu_sa110_data_abort)
ldr r2, [r0] @ read instruction causing problem
mrc p15, 0, r0, c6, c0, 0 @ get FAR
mov r2, r2, lsr #19 @ b1 = L
@@ -235,7 +236,7 @@
* the new.
*/
.align 5
-_sa110_set_pgd:
+ENTRY(cpu_sa110_set_pgd)
ldr r3, =Lclean_switch
ldr r2, [r3]
ands r2, r2, #1
@@ -261,7 +262,8 @@
* Purpose : Set a PMD and flush it out
*/
.align 5
-_sa110_set_pmd: str r1, [r0]
+ENTRY(cpu_sa110_set_pmd)
+ str r1, [r0]
mcr p15, 0, r0, c7, c10, 1 @ clean D entry
mcr p15, 0, r0, c7, c10, 4 @ drain WB (TLB bypasses WB)
mov pc, lr
@@ -273,7 +275,8 @@
* Purpose : Set a PTE and flush it out
*/
.align 5
-_sa110_set_pte: str r1, [r0], #-1024 @ linux version
+ENTRY(cpu_sa110_set_pte)
+ str r1, [r0], #-1024 @ linux version
eor r1, r1, #LPTE_PRESENT | LPTE_YOUNG | LPTE_WRITE | LPTE_DIRTY
@@ -302,26 +305,27 @@
* : sa110_proc_fin (void)
* Notes : This processor does not require these
*/
-_sa110_check_bugs:
+ENTRY(cpu_sa110_check_bugs)
mrs ip, cpsr
bic ip, ip, #F_BIT
msr cpsr, ip
-_sa110_proc_init:
-_sa110_proc_fin:
+ENTRY(cpu_sa110_proc_init)
+ENTRY(cpu_sa110_proc_fin)
mov pc, lr
/*
* Function: sa110_reset
* Notes : This sets up everything for a reset
*/
-_sa110_reset: mrs r1, cpsr
+ENTRY(cpu_sa110_reset)
+ mrs r1, cpsr
orr r1, r1, #F_BIT | I_BIT
msr cpsr, r1
stmfd sp!, {r1, lr}
mov r2, #1
- bl _sa110_flush_cache_all
- bl _sa110_flush_tlb_all
+ bl cpu_sa110_flush_cache_all
+ bl cpu_sa110_flush_tlb_all
mcr p15, 0, ip, c7, c7, 0 @ flush I,D caches
mrc p15, 0, r0, c1, c0, 0 @ ctrl register
bic r0, r0, #0x1800
@@ -331,29 +335,60 @@
* Purpose : Function pointers used to access above functions - all calls
* come through these
*/
-_sa110_name: .ascii "sa110\0"
+
+cpu_manu_name: .asciz "Intel"
+ENTRY(cpu_sa110_name)
+ .asciz "sa110"
.align
+ .section ".text.init", #alloc, #execinstr
+
+ .type sa110_processor_functions, #object
ENTRY(sa110_processor_functions)
- .word _sa110_name @ 0
- .word _sa110_data_abort @ 4
- .word _sa110_check_bugs @ 8
- .word _sa110_proc_init @ 12
- .word _sa110_proc_fin @ 16
-
- .word _sa110_flush_cache_all @ 20
- .word _sa110_flush_cache_area @ 24
- .word _sa110_flush_cache_entry @ 28
- .word _sa110_clean_cache_area @ 32
- .word _sa110_flush_ram_page @ 36
- .word _sa110_flush_tlb_all @ 40
- .word _sa110_flush_tlb_area @ 44
-
- .word _sa110_set_pgd @ 48
- .word _sa110_set_pmd @ 52
- .word _sa110_set_pte @ 56
- .word _sa110_reset @ 60
- .word _sa110_flush_icache_area @ 64
+ .word cpu_sa110_data_abort
+ .word cpu_sa110_check_bugs
+ .word cpu_sa110_proc_init
+ .word cpu_sa110_proc_fin
+ .word cpu_sa110_flush_cache_all
+ .word cpu_sa110_flush_cache_area
+ .word cpu_sa110_flush_cache_entry
+ .word cpu_sa110_clean_cache_area
+ .word cpu_sa110_flush_ram_page
+ .word cpu_sa110_flush_tlb_all
+ .word cpu_sa110_flush_tlb_area
+ .word cpu_sa110_set_pgd
+ .word cpu_sa110_set_pmd
+ .word cpu_sa110_set_pte
+ .word cpu_sa110_reset
+ .word cpu_sa110_flush_icache_area
+ .word cpu_sa110_cache_wback_area
+ .word cpu_sa110_cache_purge_area
+
+ .size sa110_processor_functions, . - sa110_processor_functions
+
+ .type cpu_sa110_info, #object
+cpu_sa110_info:
+ .long cpu_manu_name
+ .long cpu_sa110_name
+ .size cpu_sa110_info, . - cpu_sa110_info
+
+ .type cpu_arch_name, #object
+cpu_arch_name: .asciz "armv4"
+ .size cpu_arch_name, . - cpu_arch_name
+
+ .type cpu_elf_name, #object
+cpu_elf_name: .asciz "v4"
+ .size cpu_elf_name, . - cpu_elf_name
+ .align
- .word _sa110_cache_wback_area @ 68
- .word _sa110_cache_purge_area @ 72
+ .section ".proc.info", #alloc, #execinstr
+ .type __sa110_proc_info,#object
+__sa110_proc_info:
+ .long 0x4401a100
+ .long 0xfffffff0
+ .long cpu_arch_name
+ .long cpu_elf_name
+ .long HWCAP_SWP | HWCAP_HALF
+ .long cpu_sa110_info
+ .long sa110_processor_functions
+ .size __sa110_proc_info, . - __sa110_proc_info
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)