1/* 2 * linux/arch/arm/mm/proc-arm9tdmi.S: utility functions for ARM9TDMI 3 * 4 * Copyright (C) 2003-2006 Hyok S. Choi <hyok.choi@samsung.com> 5 * 6 * This program is free software; you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License version 2 as 8 * published by the Free Software Foundation. 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/elf.h> 16#include <asm/pgtable-hwdef.h> 17#include <asm/pgtable.h> 18#include <asm/ptrace.h> 19 20 .text 21/* 22 * cpu_arm9tdmi_proc_init() 23 * cpu_arm9tdmi_do_idle() 24 * cpu_arm9tdmi_dcache_clean_area() 25 * cpu_arm9tdmi_switch_mm() 26 * 27 * These are not required. 28 */ 29ENTRY(cpu_arm9tdmi_proc_init) 30ENTRY(cpu_arm9tdmi_do_idle) 31ENTRY(cpu_arm9tdmi_dcache_clean_area) 32ENTRY(cpu_arm9tdmi_switch_mm) 33 mov pc, lr 34 35/* 36 * cpu_arm9tdmi_proc_fin() 37 */ 38ENTRY(cpu_arm9tdmi_proc_fin) 39 mov r0, #PSR_F_BIT | PSR_I_BIT | SVC_MODE 40 msr cpsr_c, r0 41 mov pc, lr 42 43/* 44 * Function: cpu_arm9tdmi_reset(loc) 45 * Params : loc(r0) address to jump to 46 * Purpose : Sets up everything for a reset and jump to the location for soft reset. 47 */ 48ENTRY(cpu_arm9tdmi_reset) 49 mov pc, r0 50 51 __INIT 52 53 .type __arm9tdmi_setup, #function 54__arm9tdmi_setup: 55 mov pc, lr 56 .size __arm9tdmi_setup, . - __arm9tdmi_setup 57 58 __INITDATA 59 60/* 61 * Purpose : Function pointers used to access above functions - all calls 62 * come through these 63 */ 64 .type arm9tdmi_processor_functions, #object 65ENTRY(arm9tdmi_processor_functions) 66 .word nommu_early_abort 67 .word cpu_arm9tdmi_proc_init 68 .word cpu_arm9tdmi_proc_fin 69 .word cpu_arm9tdmi_reset 70 .word cpu_arm9tdmi_do_idle 71 .word cpu_arm9tdmi_dcache_clean_area 72 .word cpu_arm9tdmi_switch_mm 73 .word 0 @ cpu_*_set_pte 74 .size arm9tdmi_processor_functions, . - arm9tdmi_processor_functions 75 76 .section ".rodata" 77 78 .type cpu_arch_name, #object 79cpu_arch_name: 80 .asciz "armv4t" 81 .size cpu_arch_name, . - cpu_arch_name 82 83 .type cpu_elf_name, #object 84cpu_elf_name: 85 .asciz "v4" 86 .size cpu_elf_name, . - cpu_elf_name 87 88 .type cpu_arm9tdmi_name, #object 89cpu_arm9tdmi_name: 90 .asciz "ARM9TDMI" 91 .size cpu_arm9tdmi_name, . - cpu_arm9tdmi_name 92 93 .type cpu_p2001_name, #object 94cpu_p2001_name: 95 .asciz "P2001" 96 .size cpu_p2001_name, . - cpu_p2001_name 97 98 .align 99 100 .section ".proc.info.init", #alloc, #execinstr 101 102 .type __arm9tdmi_proc_info, #object 103__arm9tdmi_proc_info: 104 .long 0x41009900 105 .long 0xfff8ff00 106 .long 0 107 .long 0 108 b __arm9tdmi_setup 109 .long cpu_arch_name 110 .long cpu_elf_name 111 .long HWCAP_SWP | HWCAP_THUMB | HWCAP_26BIT 112 .long cpu_arm9tdmi_name 113 .long arm9tdmi_processor_functions 114 .long 0 115 .long 0 116 .long v4_cache_fns 117 .size __arm9tdmi_proc_info, . - __arm9dmi_proc_info 118 119 .type __p2001_proc_info, #object 120__p2001_proc_info: 121 .long 0x41029000 122 .long 0xffffffff 123 .long 0 124 .long 0 125 b __arm9tdmi_setup 126 .long cpu_arch_name 127 .long cpu_elf_name 128 .long HWCAP_SWP | HWCAP_THUMB | HWCAP_26BIT 129 .long cpu_p2001_name 130 .long arm9tdmi_processor_functions 131 .long 0 132 .long 0 133 .long v4_cache_fns 134 .size __p2001_proc_info, . - __p2001_proc_info 135