Loading...
1/* SPDX-License-Identifier: GPL-2.0-only */
2/*
3 * linux/arch/arm/mm/arm740.S: utility functions for ARM740
4 *
5 * Copyright (C) 2004-2006 Hyok S. Choi (hyok.choi@samsung.com)
6 */
7#include <linux/linkage.h>
8#include <linux/init.h>
9#include <linux/cfi_types.h>
10#include <linux/pgtable.h>
11#include <asm/assembler.h>
12#include <asm/asm-offsets.h>
13#include <asm/hwcap.h>
14#include <asm/pgtable-hwdef.h>
15#include <asm/ptrace.h>
16
17#include "proc-macros.S"
18
19 .text
20/*
21 * cpu_arm740_proc_init()
22 * cpu_arm740_do_idle()
23 * cpu_arm740_dcache_clean_area()
24 * cpu_arm740_switch_mm()
25 *
26 * These are not required.
27 */
28SYM_TYPED_FUNC_START(cpu_arm740_proc_init)
29 ret lr
30SYM_FUNC_END(cpu_arm740_proc_init)
31
32SYM_TYPED_FUNC_START(cpu_arm740_do_idle)
33 ret lr
34SYM_FUNC_END(cpu_arm740_do_idle)
35
36SYM_TYPED_FUNC_START(cpu_arm740_dcache_clean_area)
37 ret lr
38SYM_FUNC_END(cpu_arm740_dcache_clean_area)
39
40SYM_TYPED_FUNC_START(cpu_arm740_switch_mm)
41 ret lr
42SYM_FUNC_END(cpu_arm740_switch_mm)
43
44/*
45 * cpu_arm740_proc_fin()
46 */
47SYM_TYPED_FUNC_START(cpu_arm740_proc_fin)
48 mrc p15, 0, r0, c1, c0, 0
49 bic r0, r0, #0x3f000000 @ bank/f/lock/s
50 bic r0, r0, #0x0000000c @ w-buffer/cache
51 mcr p15, 0, r0, c1, c0, 0 @ disable caches
52 ret lr
53SYM_FUNC_END(cpu_arm740_proc_fin)
54
55/*
56 * cpu_arm740_reset(loc)
57 * Params : r0 = address to jump to
58 * Notes : This sets up everything for a reset
59 */
60 .pushsection .idmap.text, "ax"
61SYM_TYPED_FUNC_START(cpu_arm740_reset)
62 mov ip, #0
63 mcr p15, 0, ip, c7, c0, 0 @ invalidate cache
64 mrc p15, 0, ip, c1, c0, 0 @ get ctrl register
65 bic ip, ip, #0x0000000c @ ............wc..
66 mcr p15, 0, ip, c1, c0, 0 @ ctrl register
67 ret r0
68SYM_FUNC_END(cpu_arm740_reset)
69 .popsection
70
71 .type __arm740_setup, #function
72__arm740_setup:
73 mov r0, #0
74 mcr p15, 0, r0, c7, c0, 0 @ invalidate caches
75
76 mcr p15, 0, r0, c6, c3 @ disable area 3~7
77 mcr p15, 0, r0, c6, c4
78 mcr p15, 0, r0, c6, c5
79 mcr p15, 0, r0, c6, c6
80 mcr p15, 0, r0, c6, c7
81
82 mov r0, #0x0000003F @ base = 0, size = 4GB
83 mcr p15, 0, r0, c6, c0 @ set area 0, default
84
85 ldr r0, =(CONFIG_DRAM_BASE & 0xFFFFF000) @ base[31:12] of RAM
86 ldr r3, =(CONFIG_DRAM_SIZE >> 12) @ size of RAM (must be >= 4KB)
87 mov r4, #10 @ 11 is the minimum (4KB)
881: add r4, r4, #1 @ area size *= 2
89 movs r3, r3, lsr #1
90 bne 1b @ count not zero r-shift
91 orr r0, r0, r4, lsl #1 @ the area register value
92 orr r0, r0, #1 @ set enable bit
93 mcr p15, 0, r0, c6, c1 @ set area 1, RAM
94
95 ldr r0, =(CONFIG_FLASH_MEM_BASE & 0xFFFFF000) @ base[31:12] of FLASH
96 ldr r3, =(CONFIG_FLASH_SIZE >> 12) @ size of FLASH (must be >= 4KB)
97 cmp r3, #0
98 moveq r0, #0
99 beq 2f
100 mov r4, #10 @ 11 is the minimum (4KB)
1011: add r4, r4, #1 @ area size *= 2
102 movs r3, r3, lsr #1
103 bne 1b @ count not zero r-shift
104 orr r0, r0, r4, lsl #1 @ the area register value
105 orr r0, r0, #1 @ set enable bit
1062: mcr p15, 0, r0, c6, c2 @ set area 2, ROM/FLASH
107
108 mov r0, #0x06
109 mcr p15, 0, r0, c2, c0 @ Region 1&2 cacheable
110#ifdef CONFIG_CPU_DCACHE_WRITETHROUGH
111 mov r0, #0x00 @ disable whole write buffer
112#else
113 mov r0, #0x02 @ Region 1 write bufferred
114#endif
115 mcr p15, 0, r0, c3, c0
116
117 mov r0, #0x10000
118 sub r0, r0, #1 @ r0 = 0xffff
119 mcr p15, 0, r0, c5, c0 @ all read/write access
120
121 mrc p15, 0, r0, c1, c0 @ get control register
122 bic r0, r0, #0x3F000000 @ set to standard caching mode
123 @ need some benchmark
124 orr r0, r0, #0x0000000d @ MPU/Cache/WB
125
126 ret lr
127
128 .size __arm740_setup, . - __arm740_setup
129
130 __INITDATA
131
132 @ define struct processor (see <asm/proc-fns.h> and proc-macros.S)
133 define_processor_functions arm740, dabort=v4t_late_abort, pabort=legacy_pabort, nommu=1
134
135 .section ".rodata"
136
137 string cpu_arch_name, "armv4"
138 string cpu_elf_name, "v4"
139 string cpu_arm740_name, "ARM740T"
140
141 .align
142
143 .section ".proc.info.init", "a"
144 .type __arm740_proc_info,#object
145__arm740_proc_info:
146 .long 0x41807400
147 .long 0xfffffff0
148 .long 0
149 .long 0
150 initfn __arm740_setup, __arm740_proc_info
151 .long cpu_arch_name
152 .long cpu_elf_name
153 .long HWCAP_SWP | HWCAP_HALF | HWCAP_THUMB | HWCAP_26BIT
154 .long cpu_arm740_name
155 .long arm740_processor_functions
156 .long 0
157 .long 0
158 .long v4_cache_fns @ cache model
159 .size __arm740_proc_info, . - __arm740_proc_info
1/* SPDX-License-Identifier: GPL-2.0-only */
2/*
3 * linux/arch/arm/mm/arm740.S: utility functions for ARM740
4 *
5 * Copyright (C) 2004-2006 Hyok S. Choi (hyok.choi@samsung.com)
6 */
7#include <linux/linkage.h>
8#include <linux/init.h>
9#include <linux/pgtable.h>
10#include <asm/assembler.h>
11#include <asm/asm-offsets.h>
12#include <asm/hwcap.h>
13#include <asm/pgtable-hwdef.h>
14#include <asm/ptrace.h>
15
16#include "proc-macros.S"
17
18 .text
19/*
20 * cpu_arm740_proc_init()
21 * cpu_arm740_do_idle()
22 * cpu_arm740_dcache_clean_area()
23 * cpu_arm740_switch_mm()
24 *
25 * These are not required.
26 */
27ENTRY(cpu_arm740_proc_init)
28ENTRY(cpu_arm740_do_idle)
29ENTRY(cpu_arm740_dcache_clean_area)
30ENTRY(cpu_arm740_switch_mm)
31 ret lr
32
33/*
34 * cpu_arm740_proc_fin()
35 */
36ENTRY(cpu_arm740_proc_fin)
37 mrc p15, 0, r0, c1, c0, 0
38 bic r0, r0, #0x3f000000 @ bank/f/lock/s
39 bic r0, r0, #0x0000000c @ w-buffer/cache
40 mcr p15, 0, r0, c1, c0, 0 @ disable caches
41 ret lr
42
43/*
44 * cpu_arm740_reset(loc)
45 * Params : r0 = address to jump to
46 * Notes : This sets up everything for a reset
47 */
48 .pushsection .idmap.text, "ax"
49ENTRY(cpu_arm740_reset)
50 mov ip, #0
51 mcr p15, 0, ip, c7, c0, 0 @ invalidate cache
52 mrc p15, 0, ip, c1, c0, 0 @ get ctrl register
53 bic ip, ip, #0x0000000c @ ............wc..
54 mcr p15, 0, ip, c1, c0, 0 @ ctrl register
55 ret r0
56ENDPROC(cpu_arm740_reset)
57 .popsection
58
59 .type __arm740_setup, #function
60__arm740_setup:
61 mov r0, #0
62 mcr p15, 0, r0, c7, c0, 0 @ invalidate caches
63
64 mcr p15, 0, r0, c6, c3 @ disable area 3~7
65 mcr p15, 0, r0, c6, c4
66 mcr p15, 0, r0, c6, c5
67 mcr p15, 0, r0, c6, c6
68 mcr p15, 0, r0, c6, c7
69
70 mov r0, #0x0000003F @ base = 0, size = 4GB
71 mcr p15, 0, r0, c6, c0 @ set area 0, default
72
73 ldr r0, =(CONFIG_DRAM_BASE & 0xFFFFF000) @ base[31:12] of RAM
74 ldr r3, =(CONFIG_DRAM_SIZE >> 12) @ size of RAM (must be >= 4KB)
75 mov r4, #10 @ 11 is the minimum (4KB)
761: add r4, r4, #1 @ area size *= 2
77 movs r3, r3, lsr #1
78 bne 1b @ count not zero r-shift
79 orr r0, r0, r4, lsl #1 @ the area register value
80 orr r0, r0, #1 @ set enable bit
81 mcr p15, 0, r0, c6, c1 @ set area 1, RAM
82
83 ldr r0, =(CONFIG_FLASH_MEM_BASE & 0xFFFFF000) @ base[31:12] of FLASH
84 ldr r3, =(CONFIG_FLASH_SIZE >> 12) @ size of FLASH (must be >= 4KB)
85 cmp r3, #0
86 moveq r0, #0
87 beq 2f
88 mov r4, #10 @ 11 is the minimum (4KB)
891: add r4, r4, #1 @ area size *= 2
90 movs r3, r3, lsr #1
91 bne 1b @ count not zero r-shift
92 orr r0, r0, r4, lsl #1 @ the area register value
93 orr r0, r0, #1 @ set enable bit
942: mcr p15, 0, r0, c6, c2 @ set area 2, ROM/FLASH
95
96 mov r0, #0x06
97 mcr p15, 0, r0, c2, c0 @ Region 1&2 cacheable
98#ifdef CONFIG_CPU_DCACHE_WRITETHROUGH
99 mov r0, #0x00 @ disable whole write buffer
100#else
101 mov r0, #0x02 @ Region 1 write bufferred
102#endif
103 mcr p15, 0, r0, c3, c0
104
105 mov r0, #0x10000
106 sub r0, r0, #1 @ r0 = 0xffff
107 mcr p15, 0, r0, c5, c0 @ all read/write access
108
109 mrc p15, 0, r0, c1, c0 @ get control register
110 bic r0, r0, #0x3F000000 @ set to standard caching mode
111 @ need some benchmark
112 orr r0, r0, #0x0000000d @ MPU/Cache/WB
113
114 ret lr
115
116 .size __arm740_setup, . - __arm740_setup
117
118 __INITDATA
119
120 @ define struct processor (see <asm/proc-fns.h> and proc-macros.S)
121 define_processor_functions arm740, dabort=v4t_late_abort, pabort=legacy_pabort, nommu=1
122
123 .section ".rodata"
124
125 string cpu_arch_name, "armv4"
126 string cpu_elf_name, "v4"
127 string cpu_arm740_name, "ARM740T"
128
129 .align
130
131 .section ".proc.info.init", "a"
132 .type __arm740_proc_info,#object
133__arm740_proc_info:
134 .long 0x41807400
135 .long 0xfffffff0
136 .long 0
137 .long 0
138 initfn __arm740_setup, __arm740_proc_info
139 .long cpu_arch_name
140 .long cpu_elf_name
141 .long HWCAP_SWP | HWCAP_HALF | HWCAP_THUMB | HWCAP_26BIT
142 .long cpu_arm740_name
143 .long arm740_processor_functions
144 .long 0
145 .long 0
146 .long v4_cache_fns @ cache model
147 .size __arm740_proc_info, . - __arm740_proc_info