~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/arch/arm/mm/proc-arm740.S

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  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  */
 28 SYM_TYPED_FUNC_START(cpu_arm740_proc_init)
 29         ret     lr
 30 SYM_FUNC_END(cpu_arm740_proc_init)
 31 
 32 SYM_TYPED_FUNC_START(cpu_arm740_do_idle)
 33         ret     lr
 34 SYM_FUNC_END(cpu_arm740_do_idle)
 35 
 36 SYM_TYPED_FUNC_START(cpu_arm740_dcache_clean_area)
 37         ret     lr
 38 SYM_FUNC_END(cpu_arm740_dcache_clean_area)
 39 
 40 SYM_TYPED_FUNC_START(cpu_arm740_switch_mm)
 41         ret     lr
 42 SYM_FUNC_END(cpu_arm740_switch_mm)
 43 
 44 /*
 45  * cpu_arm740_proc_fin()
 46  */
 47 SYM_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
 53 SYM_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"
 61 SYM_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
 68 SYM_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)
 88 1:      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)
101 1:      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
106 2:      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

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php