1
2
3
4
5
6
7
8
9
10
11#include <linux/linkage.h>
12#include <linux/init.h>
13#include <asm/assembler.h>
14#include <asm/asm-offsets.h>
15#include <asm/hwcap.h>
16#include <asm/pgtable-hwdef.h>
17#include <asm/pgtable.h>
18#include <asm/ptrace.h>
19
20#include "proc-macros.S"
21
22 .text
23
24
25
26
27
28
29
30
31ENTRY(cpu_arm740_proc_init)
32ENTRY(cpu_arm740_do_idle)
33ENTRY(cpu_arm740_dcache_clean_area)
34ENTRY(cpu_arm740_switch_mm)
35 ret lr
36
37
38
39
40ENTRY(cpu_arm740_proc_fin)
41 mrc p15, 0, r0, c1, c0, 0
42 bic r0, r0,
43 bic r0, r0,
44 mcr p15, 0, r0, c1, c0, 0 @ disable caches
45 ret lr
46
47
48
49
50
51
52 .pushsection .idmap.text, "ax"
53ENTRY(cpu_arm740_reset)
54 mov ip,
55 mcr p15, 0, ip, c7, c0, 0 @ invalidate cache
56 mrc p15, 0, ip, c1, c0, 0 @ get ctrl register
57 bic ip, ip,
58 mcr p15, 0, ip, c1, c0, 0 @ ctrl register
59 ret r0
60ENDPROC(cpu_arm740_reset)
61 .popsection
62
63 .type __arm740_setup,
64__arm740_setup:
65 mov r0,
66 mcr p15, 0, r0, c7, c0, 0 @ invalidate caches
67
68 mcr p15, 0, r0, c6, c3 @ disable area 3~7
69 mcr p15, 0, r0, c6, c4
70 mcr p15, 0, r0, c6, c5
71 mcr p15, 0, r0, c6, c6
72 mcr p15, 0, r0, c6, c7
73
74 mov r0,
75 mcr p15, 0, r0, c6, c0 @ set area 0, default
76
77 ldr r0, =(CONFIG_DRAM_BASE & 0xFFFFF000) @ base[31:12] of RAM
78 ldr r3, =(CONFIG_DRAM_SIZE >> 12) @ size of RAM (must be >= 4KB)
79 mov r4,
801: add r4, r4,
81 movs r3, r3, lsr
82 bne 1b @ count not zero r-shift
83 orr r0, r0, r4, lsl
84 orr r0, r0,
85 mcr p15, 0, r0, c6, c1 @ set area 1, RAM
86
87 ldr r0, =(CONFIG_FLASH_MEM_BASE & 0xFFFFF000) @ base[31:12] of FLASH
88 ldr r3, =(CONFIG_FLASH_SIZE >> 12) @ size of FLASH (must be >= 4KB)
89 cmp r3,
90 moveq r0,
91 beq 2f
92 mov r4,
931: add r4, r4,
94 movs r3, r3, lsr
95 bne 1b @ count not zero r-shift
96 orr r0, r0, r4, lsl
97 orr r0, r0,
982: mcr p15, 0, r0, c6, c2 @ set area 2, ROM/FLASH
99
100 mov r0,
101 mcr p15, 0, r0, c2, c0 @ Region 1&2 cacheable
102#ifdef CONFIG_CPU_DCACHE_WRITETHROUGH
103 mov r0,
104#else
105 mov r0,
106#endif
107 mcr p15, 0, r0, c3, c0
108
109 mov r0,
110 sub r0, r0,
111 mcr p15, 0, r0, c5, c0 @ all read/write access
112
113 mrc p15, 0, r0, c1, c0 @ get control register
114 bic r0, r0,
115 @ need some benchmark
116 orr r0, r0,
117
118 ret lr
119
120 .size __arm740_setup, . - __arm740_setup
121
122 __INITDATA
123
124 @ define struct processor (see <asm/proc-fns.h> and proc-macros.S)
125 define_processor_functions arm740, dabort=v4t_late_abort, pabort=legacy_pabort, nommu=1
126
127 .section ".rodata"
128
129 string cpu_arch_name, "armv4"
130 string cpu_elf_name, "v4"
131 string cpu_arm740_name, "ARM740T"
132
133 .align
134
135 .section ".proc.info.init",
136 .type __arm740_proc_info,
137__arm740_proc_info:
138 .long 0x41807400
139 .long 0xfffffff0
140 .long 0
141 .long 0
142 initfn __arm740_setup, __arm740_proc_info
143 .long cpu_arch_name
144 .long cpu_elf_name
145 .long HWCAP_SWP | HWCAP_HALF | HWCAP_THUMB | HWCAP_26BIT
146 .long cpu_arm740_name
147 .long arm740_processor_functions
148 .long 0
149 .long 0
150 .long v4_cache_fns @ cache model
151 .size __arm740_proc_info, . - __arm740_proc_info
152