···7070arch-$(CONFIG_CPU_32v3) :=-D__LINUX_ARM_ARCH__=3 -march=armv371717272# This selects how we optimise for the processor.7373-tune-$(CONFIG_CPU_ARM610) :=-mtune=arm6107474-tune-$(CONFIG_CPU_ARM710) :=-mtune=arm7107573tune-$(CONFIG_CPU_ARM7TDMI) :=-mtune=arm7tdmi7674tune-$(CONFIG_CPU_ARM720T) :=-mtune=arm7tdmi7775tune-$(CONFIG_CPU_ARM740T) :=-mtune=arm7tdmi
···88CONFIG_MODULE_UNLOAD=y99# CONFIG_BLK_DEV_BSG is not set1010CONFIG_ARCH_RPC=y1111-CONFIG_CPU_ARM610=y1212-CONFIG_CPU_ARM710=y1311CONFIG_CPU_SA110=y1412CONFIG_ZBOOT_ROM_TEXT=0x01513CONFIG_ZBOOT_ROM_BSS=0x0
···3434 * processor(s) we're building for.3535 *3636 * We have the following to choose from:3737- * v3 - ARMv33837 * v4wt - ARMv4 with writethrough cache, without minicache3938 * v4wb - ARMv4 with writeback cache, without minicache4039 * v4_mc - ARMv4 with minicache···4243 */4344#undef _USER4445#undef MULTI_USER4545-4646-#ifdef CONFIG_CPU_COPY_V34747-# ifdef _USER4848-# define MULTI_USER 14949-# else5050-# define _USER v35151-# endif5252-#endif53465447#ifdef CONFIG_CPU_COPY_V4WT5548# ifdef _USER
+2-19
arch/arm/include/asm/tlbflush.h
···6565#define MULTI_TLB 16666#endif67676868-#define v3_tlb_flags (TLB_V3_FULL | TLB_V3_PAGE)6969-7070-#ifdef CONFIG_CPU_TLB_V37171-# define v3_possible_flags v3_tlb_flags7272-# define v3_always_flags v3_tlb_flags7373-# ifdef _TLB7474-# define MULTI_TLB 17575-# else7676-# define _TLB v37777-# endif7878-#else7979-# define v3_possible_flags 08080-# define v3_always_flags (-1UL)8181-#endif8282-8368#define v4_tlb_flags (TLB_V4_U_FULL | TLB_V4_U_PAGE)84698570#ifdef CONFIG_CPU_TLB_V4WT···283298 * implemented the "%?" method, but this has been discontinued due to too284299 * many people getting it wrong.285300 */286286-#define possible_tlb_flags (v3_possible_flags | \287287- v4_possible_flags | \301301+#define possible_tlb_flags (v4_possible_flags | \288302 v4wbi_possible_flags | \289303 fr_possible_flags | \290304 v4wb_possible_flags | \···291307 v6wbi_possible_flags | \292308 v7wbi_possible_flags)293309294294-#define always_tlb_flags (v3_always_flags & \295295- v4_always_flags & \310310+#define always_tlb_flags (v4_always_flags & \296311 v4wbi_always_flags & \297312 fr_always_flags & \298313 v4wb_always_flags & \
-4
arch/arm/kernel/entry-armv.S
···556556#endif557557 tst r0, #0x08000000 @ only CDP/CPRT/LDC/STC have bit 27558558 tstne r0, #0x04000000 @ bit 26 set on both ARM and Thumb-2559559-#if defined(CONFIG_CPU_ARM610) || defined(CONFIG_CPU_ARM710)560560- and r8, r0, #0x0f000000 @ mask out op-code bits561561- teqne r8, #0x0f000000 @ SWI (ARM6/7 bug)?562562-#endif563559 moveq pc, lr564560 get_thread_info r10 @ get current thread565561 and r8, r0, #0x00000f00 @ mask out CP number
-28
arch/arm/kernel/entry-common.S
···335335 *-----------------------------------------------------------------------------336336 */337337338338- /* If we're optimising for StrongARM the resulting code won't 339339- run on an ARM7 and we can save a couple of instructions. 340340- --pb */341341-#ifdef CONFIG_CPU_ARM710342342-#define A710(code...) code343343-.Larm710bug:344344- ldmia sp, {r0 - lr}^ @ Get calling r0 - lr345345- mov r0, r0346346- add sp, sp, #S_FRAME_SIZE347347- subs pc, lr, #4348348-#else349349-#define A710(code...)350350-#endif351351-352338 .align 5353339ENTRY(vector_swi)354340 sub sp, sp, #S_FRAME_SIZE···365379 ldreq r10, [lr, #-4] @ get SWI instruction366380#else367381 ldr r10, [lr, #-4] @ get SWI instruction368368- A710( and ip, r10, #0x0f000000 @ check for SWI )369369- A710( teq ip, #0x0f000000 )370370- A710( bne .Larm710bug )371382#endif372383#ifdef CONFIG_CPU_ENDIAN_BE8373384 rev r10, r10 @ little endian instruction···375392 /*376393 * Pure EABI user space always put syscall number into scno (r7).377394 */378378- A710( ldr ip, [lr, #-4] @ get SWI instruction )379379- A710( and ip, ip, #0x0f000000 @ check for SWI )380380- A710( teq ip, #0x0f000000 )381381- A710( bne .Larm710bug )382382-383395#elif defined(CONFIG_ARM_THUMB)384384-385396 /* Legacy ABI only, possibly thumb mode. */386397 tst r8, #PSR_T_BIT @ this is SPSR from save_user_regs387398 addne scno, r7, #__NR_SYSCALL_BASE @ put OS number in388399 ldreq scno, [lr, #-4]389400390401#else391391-392402 /* Legacy ABI only. */393403 ldr scno, [lr, #-4] @ get SWI instruction394394- A710( and ip, scno, #0x0f000000 @ check for SWI )395395- A710( teq ip, #0x0f000000 )396396- A710( bne .Larm710bug )397397-398404#endif399405400406#ifdef CONFIG_ALIGNMENT_TRAP
+3-20
arch/arm/lib/Makefile
···1717 call_with_stack.o18181919mmu-y := clear_user.o copy_page.o getuser.o putuser.o2020-2121-# the code in uaccess.S is not preemption safe and2222-# probably faster on ARMv3 only2323-ifeq ($(CONFIG_PREEMPT),y)2424- mmu-y += copy_from_user.o copy_to_user.o2525-else2626-ifneq ($(CONFIG_CPU_32v3),y)2727- mmu-y += copy_from_user.o copy_to_user.o2828-else2929- mmu-y += uaccess.o3030-endif3131-endif2020+mmu-y += copy_from_user.o copy_to_user.o32213322# using lib_ here won't override already available weak symbols3423obj-$(CONFIG_UACCESS_WITH_MEMCPY) += uaccess_with_memcpy.o35243636-lib-$(CONFIG_MMU) += $(mmu-y)3737-3838-ifeq ($(CONFIG_CPU_32v3),y)3939- lib-y += io-readsw-armv3.o io-writesw-armv3.o4040-else4141- lib-y += io-readsw-armv4.o io-writesw-armv4.o4242-endif4343-2525+lib-$(CONFIG_MMU) += $(mmu-y)2626+lib-y += io-readsw-armv4.o io-writesw-armv4.o4427lib-$(CONFIG_ARCH_RPC) += ecard.o io-acorn.o floppydma.o4528lib-$(CONFIG_ARCH_SHARK) += io-shark.o4629
-106
arch/arm/lib/io-readsw-armv3.S
···11-/*22- * linux/arch/arm/lib/io-readsw-armv3.S33- *44- * Copyright (C) 1995-2000 Russell King55- *66- * This program is free software; you can redistribute it and/or modify77- * it under the terms of the GNU General Public License version 2 as88- * published by the Free Software Foundation.99- */1010-#include <linux/linkage.h>1111-#include <asm/assembler.h>1212-1313-.Linsw_bad_alignment:1414- adr r0, .Linsw_bad_align_msg1515- mov r2, lr1616- b panic1717-.Linsw_bad_align_msg:1818- .asciz "insw: bad buffer alignment (0x%p, lr=0x%08lX)\n"1919- .align2020-2121-.Linsw_align: tst r1, #12222- bne .Linsw_bad_alignment2323-2424- ldr r3, [r0]2525- strb r3, [r1], #12626- mov r3, r3, lsr #82727- strb r3, [r1], #12828-2929- subs r2, r2, #13030- moveq pc, lr3131-3232-ENTRY(__raw_readsw)3333- teq r2, #0 @ do we have to check for the zero len?3434- moveq pc, lr3535- tst r1, #33636- bne .Linsw_align3737-3838-.Linsw_aligned: mov ip, #0xff3939- orr ip, ip, ip, lsl #84040- stmfd sp!, {r4, r5, r6, lr}4141-4242- subs r2, r2, #84343- bmi .Lno_insw_84444-4545-.Linsw_8_lp: ldr r3, [r0]4646- and r3, r3, ip4747- ldr r4, [r0]4848- orr r3, r3, r4, lsl #164949-5050- ldr r4, [r0]5151- and r4, r4, ip5252- ldr r5, [r0]5353- orr r4, r4, r5, lsl #165454-5555- ldr r5, [r0]5656- and r5, r5, ip5757- ldr r6, [r0]5858- orr r5, r5, r6, lsl #165959-6060- ldr r6, [r0]6161- and r6, r6, ip6262- ldr lr, [r0]6363- orr r6, r6, lr, lsl #166464-6565- stmia r1!, {r3 - r6}6666-6767- subs r2, r2, #86868- bpl .Linsw_8_lp6969-7070- tst r2, #77171- ldmeqfd sp!, {r4, r5, r6, pc}7272-7373-.Lno_insw_8: tst r2, #47474- beq .Lno_insw_47575-7676- ldr r3, [r0]7777- and r3, r3, ip7878- ldr r4, [r0]7979- orr r3, r3, r4, lsl #168080-8181- ldr r4, [r0]8282- and r4, r4, ip8383- ldr r5, [r0]8484- orr r4, r4, r5, lsl #168585-8686- stmia r1!, {r3, r4}8787-8888-.Lno_insw_4: tst r2, #28989- beq .Lno_insw_29090-9191- ldr r3, [r0]9292- and r3, r3, ip9393- ldr r4, [r0]9494- orr r3, r3, r4, lsl #169595-9696- str r3, [r1], #49797-9898-.Lno_insw_2: tst r2, #19999- ldrne r3, [r0]100100- strneb r3, [r1], #1101101- movne r3, r3, lsr #8102102- strneb r3, [r1]103103-104104- ldmfd sp!, {r4, r5, r6, pc}105105-106106-
···44# which CPUs we support in the kernel image, and the compiler instruction55# optimiser behaviour.6677-# ARM61088-config CPU_ARM61099- bool "Support ARM610 processor" if ARCH_RPC1010- select CPU_32v31111- select CPU_CACHE_V31212- select CPU_CACHE_VIVT1313- select CPU_CP15_MMU1414- select CPU_COPY_V3 if MMU1515- select CPU_TLB_V3 if MMU1616- select CPU_PABRT_LEGACY1717- help1818- The ARM610 is the successor to the ARM3 processor1919- and was produced by VLSI Technology Inc.2020-2121- Say Y if you want support for the ARM610 processor.2222- Otherwise, say N.2323-247# ARM7TDMI258config CPU_ARM7TDMI269 bool "Support ARM7TDMI processor"···1734 which has no memory control unit and cache.18351936 Say Y if you want support for the ARM7TDMI processor.2020- Otherwise, say N.2121-2222-# ARM7102323-config CPU_ARM7102424- bool "Support ARM710 processor" if ARCH_RPC2525- select CPU_32v32626- select CPU_CACHE_V32727- select CPU_CACHE_VIVT2828- select CPU_CP15_MMU2929- select CPU_COPY_V3 if MMU3030- select CPU_TLB_V3 if MMU3131- select CPU_PABRT_LEGACY3232- help3333- A 32-bit RISC microprocessor based on the ARM7 processor core3434- designed by Advanced RISC Machines Ltd. The ARM710 is the3535- successor to the ARM610 processor. It was released in3636- July 1994 by VLSI Technology Inc.3737-3838- Say Y if you want support for the ARM710 processor.3937 Otherwise, say N.40384139# ARM720T···494530495531if MMU496532# The copy-page model497497-config CPU_COPY_V3498498- bool499499-500533config CPU_COPY_V4WT501534 bool502535···510549 bool511550512551# This selects the TLB model513513-config CPU_TLB_V3514514- bool515515- help516516- ARM Architecture Version 3 TLB.517517-518552config CPU_TLB_V4WT519553 bool520554 help···687731688732config CPU_ICACHE_DISABLE689733 bool "Disable I-Cache (I-bit)"690690- depends on CPU_CP15 && !(CPU_ARM610 || CPU_ARM710 || CPU_ARM720T || CPU_ARM740T || CPU_XSCALE || CPU_XSC3)734734+ depends on CPU_CP15 && !(CPU_ARM720T || CPU_ARM740T || CPU_XSCALE || CPU_XSC3)691735 help692736 Say Y here to disable the processor instruction cache. Unless693737 you have a reason not to or are unsure, say N.
···432432433433 index = pgd_index(addr);434434435435- /*436436- * FIXME: CP15 C1 is write only on ARMv3 architectures.437437- */438435 pgd = cpu_get_pgd() + index;439436 pgd_k = init_mm.pgd + index;440437
-327
arch/arm/mm/proc-arm6_7.S
···11-/*22- * linux/arch/arm/mm/proc-arm6,7.S33- *44- * Copyright (C) 1997-2000 Russell King55- * hacked for non-paged-MM by Hyok S. Choi, 2003.66- *77- * This program is free software; you can redistribute it and/or modify88- * it under the terms of the GNU General Public License version 2 as99- * published by the Free Software Foundation.1010- *1111- * These are the low level assembler for performing cache and TLB1212- * functions on the ARM610 & ARM710.1313- */1414-#include <linux/linkage.h>1515-#include <linux/init.h>1616-#include <asm/assembler.h>1717-#include <asm/asm-offsets.h>1818-#include <asm/hwcap.h>1919-#include <asm/pgtable-hwdef.h>2020-#include <asm/pgtable.h>2121-#include <asm/ptrace.h>2222-2323-#include "proc-macros.S"2424-2525-ENTRY(cpu_arm6_dcache_clean_area)2626-ENTRY(cpu_arm7_dcache_clean_area)2727- mov pc, lr2828-2929-/*3030- * Function: arm6_7_data_abort ()3131- *3232- * Params : r2 = pt_regs3333- * : r4 = aborted context pc3434- * : r5 = aborted context psr3535- *3636- * Purpose : obtain information about current aborted instruction3737- *3838- * Returns : r4-r5, r10-r11, r13 preserved3939- */4040-4141-ENTRY(cpu_arm7_data_abort)4242- mrc p15, 0, r1, c5, c0, 0 @ get FSR4343- mrc p15, 0, r0, c6, c0, 0 @ get FAR4444- ldr r8, [r4] @ read arm instruction4545- tst r8, #1 << 20 @ L = 0 -> write?4646- orreq r1, r1, #1 << 11 @ yes.4747- and r7, r8, #15 << 244848- add pc, pc, r7, lsr #22 @ Now branch to the relevant processing routine4949- nop5050-5151-/* 0 */ b .data_unknown5252-/* 1 */ b do_DataAbort @ swp5353-/* 2 */ b .data_unknown5454-/* 3 */ b .data_unknown5555-/* 4 */ b .data_arm_lateldrpostconst @ ldr rd, [rn], #m5656-/* 5 */ b .data_arm_lateldrpreconst @ ldr rd, [rn, #m]5757-/* 6 */ b .data_arm_lateldrpostreg @ ldr rd, [rn], rm5858-/* 7 */ b .data_arm_lateldrprereg @ ldr rd, [rn, rm]5959-/* 8 */ b .data_arm_ldmstm @ ldm*a rn, <rlist>6060-/* 9 */ b .data_arm_ldmstm @ ldm*b rn, <rlist>6161-/* a */ b .data_unknown6262-/* b */ b .data_unknown6363-/* c */ b do_DataAbort @ ldc rd, [rn], #m @ Same as ldr rd, [rn], #m6464-/* d */ b do_DataAbort @ ldc rd, [rn, #m]6565-/* e */ b .data_unknown6666-/* f */6767-.data_unknown: @ Part of jumptable6868- mov r0, r46969- mov r1, r87070- b baddataabort7171-7272-ENTRY(cpu_arm6_data_abort)7373- mrc p15, 0, r1, c5, c0, 0 @ get FSR7474- mrc p15, 0, r0, c6, c0, 0 @ get FAR7575- ldr r8, [r4] @ read arm instruction7676- tst r8, #1 << 20 @ L = 0 -> write?7777- orreq r1, r1, #1 << 11 @ yes.7878- and r7, r8, #14 << 247979- teq r7, #8 << 24 @ was it ldm/stm8080- bne do_DataAbort8181-8282-.data_arm_ldmstm:8383- tst r8, #1 << 21 @ check writeback bit8484- beq do_DataAbort @ no writeback -> no fixup8585- mov r7, #0x118686- orr r7, r7, #0x11008787- and r6, r8, r78888- and r9, r8, r7, lsl #18989- add r6, r6, r9, lsr #19090- and r9, r8, r7, lsl #29191- add r6, r6, r9, lsr #29292- and r9, r8, r7, lsl #39393- add r6, r6, r9, lsr #39494- add r6, r6, r6, lsr #89595- add r6, r6, r6, lsr #49696- and r6, r6, #15 @ r6 = no. of registers to transfer.9797- and r9, r8, #15 << 16 @ Extract 'n' from instruction9898- ldr r7, [r2, r9, lsr #14] @ Get register 'Rn'9999- tst r8, #1 << 23 @ Check U bit100100- subne r7, r7, r6, lsl #2 @ Undo increment101101- addeq r7, r7, r6, lsl #2 @ Undo decrement102102- str r7, [r2, r9, lsr #14] @ Put register 'Rn'103103- b do_DataAbort104104-105105-.data_arm_apply_r6_and_rn:106106- and r9, r8, #15 << 16 @ Extract 'n' from instruction107107- ldr r7, [r2, r9, lsr #14] @ Get register 'Rn'108108- tst r8, #1 << 23 @ Check U bit109109- subne r7, r7, r6 @ Undo incrmenet110110- addeq r7, r7, r6 @ Undo decrement111111- str r7, [r2, r9, lsr #14] @ Put register 'Rn'112112- b do_DataAbort113113-114114-.data_arm_lateldrpreconst:115115- tst r8, #1 << 21 @ check writeback bit116116- beq do_DataAbort @ no writeback -> no fixup117117-.data_arm_lateldrpostconst:118118- movs r6, r8, lsl #20 @ Get offset119119- beq do_DataAbort @ zero -> no fixup120120- and r9, r8, #15 << 16 @ Extract 'n' from instruction121121- ldr r7, [r2, r9, lsr #14] @ Get register 'Rn'122122- tst r8, #1 << 23 @ Check U bit123123- subne r7, r7, r6, lsr #20 @ Undo increment124124- addeq r7, r7, r6, lsr #20 @ Undo decrement125125- str r7, [r2, r9, lsr #14] @ Put register 'Rn'126126- b do_DataAbort127127-128128-.data_arm_lateldrprereg:129129- tst r8, #1 << 21 @ check writeback bit130130- beq do_DataAbort @ no writeback -> no fixup131131-.data_arm_lateldrpostreg:132132- and r7, r8, #15 @ Extract 'm' from instruction133133- ldr r6, [r2, r7, lsl #2] @ Get register 'Rm'134134- mov r9, r8, lsr #7 @ get shift count135135- ands r9, r9, #31136136- and r7, r8, #0x70 @ get shift type137137- orreq r7, r7, #8 @ shift count = 0138138- add pc, pc, r7139139- nop140140-141141- mov r6, r6, lsl r9 @ 0: LSL #!0142142- b .data_arm_apply_r6_and_rn143143- b .data_arm_apply_r6_and_rn @ 1: LSL #0144144- nop145145- b .data_unknown @ 2: MUL?146146- nop147147- b .data_unknown @ 3: MUL?148148- nop149149- mov r6, r6, lsr r9 @ 4: LSR #!0150150- b .data_arm_apply_r6_and_rn151151- mov r6, r6, lsr #32 @ 5: LSR #32152152- b .data_arm_apply_r6_and_rn153153- b .data_unknown @ 6: MUL?154154- nop155155- b .data_unknown @ 7: MUL?156156- nop157157- mov r6, r6, asr r9 @ 8: ASR #!0158158- b .data_arm_apply_r6_and_rn159159- mov r6, r6, asr #32 @ 9: ASR #32160160- b .data_arm_apply_r6_and_rn161161- b .data_unknown @ A: MUL?162162- nop163163- b .data_unknown @ B: MUL?164164- nop165165- mov r6, r6, ror r9 @ C: ROR #!0166166- b .data_arm_apply_r6_and_rn167167- mov r6, r6, rrx @ D: RRX168168- b .data_arm_apply_r6_and_rn169169- b .data_unknown @ E: MUL?170170- nop171171- b .data_unknown @ F: MUL?172172-173173-/*174174- * Function: arm6_7_proc_init (void)175175- * : arm6_7_proc_fin (void)176176- *177177- * Notes : This processor does not require these178178- */179179-ENTRY(cpu_arm6_proc_init)180180-ENTRY(cpu_arm7_proc_init)181181- mov pc, lr182182-183183-ENTRY(cpu_arm6_proc_fin)184184-ENTRY(cpu_arm7_proc_fin)185185- mov r0, #0x31 @ ....S..DP...M186186- mcr p15, 0, r0, c1, c0, 0 @ disable caches187187- mov pc, lr188188-189189-ENTRY(cpu_arm6_do_idle)190190-ENTRY(cpu_arm7_do_idle)191191- mov pc, lr192192-193193-/*194194- * Function: arm6_7_switch_mm(unsigned long pgd_phys)195195- * Params : pgd_phys Physical address of page table196196- * Purpose : Perform a task switch, saving the old processes state, and restoring197197- * the new.198198- */199199-ENTRY(cpu_arm6_switch_mm)200200-ENTRY(cpu_arm7_switch_mm)201201-#ifdef CONFIG_MMU202202- mov r1, #0203203- mcr p15, 0, r1, c7, c0, 0 @ flush cache204204- mcr p15, 0, r0, c2, c0, 0 @ update page table ptr205205- mcr p15, 0, r1, c5, c0, 0 @ flush TLBs206206-#endif207207- mov pc, lr208208-209209-/*210210- * Function: arm6_7_set_pte_ext(pte_t *ptep, pte_t pte, unsigned int ext)211211- * Params : r0 = Address to set212212- * : r1 = value to set213213- * Purpose : Set a PTE and flush it out of any WB cache214214- */215215- .align 5216216-ENTRY(cpu_arm6_set_pte_ext)217217-ENTRY(cpu_arm7_set_pte_ext)218218-#ifdef CONFIG_MMU219219- armv3_set_pte_ext wc_disable=0220220-#endif /* CONFIG_MMU */221221- mov pc, lr222222-223223-/*224224- * Function: _arm6_7_reset225225- * Params : r0 = address to jump to226226- * Notes : This sets up everything for a reset227227- */228228- .pushsection .idmap.text, "ax"229229-ENTRY(cpu_arm6_reset)230230-ENTRY(cpu_arm7_reset)231231- mov r1, #0232232- mcr p15, 0, r1, c7, c0, 0 @ flush cache233233-#ifdef CONFIG_MMU234234- mcr p15, 0, r1, c5, c0, 0 @ flush TLB235235-#endif236236- mov r1, #0x30237237- mcr p15, 0, r1, c1, c0, 0 @ turn off MMU etc238238- mov pc, r0239239-ENDPROC(cpu_arm6_reset)240240-ENDPROC(cpu_arm7_reset)241241- .popsection242242-243243- __CPUINIT244244-245245- .type __arm6_setup, #function246246-__arm6_setup: mov r0, #0247247- mcr p15, 0, r0, c7, c0 @ flush caches on v3248248-#ifdef CONFIG_MMU249249- mcr p15, 0, r0, c5, c0 @ flush TLBs on v3250250- mov r0, #0x3d @ . ..RS BLDP WCAM251251- orr r0, r0, #0x100 @ . ..01 0011 1101252252-#else253253- mov r0, #0x3c @ . ..RS BLDP WCA.254254-#endif255255- mov pc, lr256256- .size __arm6_setup, . - __arm6_setup257257-258258- .type __arm7_setup, #function259259-__arm7_setup: mov r0, #0260260- mcr p15, 0, r0, c7, c0 @ flush caches on v3261261-#ifdef CONFIG_MMU262262- mcr p15, 0, r0, c5, c0 @ flush TLBs on v3263263- mcr p15, 0, r0, c3, c0 @ load domain access register264264- mov r0, #0x7d @ . ..RS BLDP WCAM265265- orr r0, r0, #0x100 @ . ..01 0111 1101266266-#else267267- mov r0, #0x7c @ . ..RS BLDP WCA.268268-#endif269269- mov pc, lr270270- .size __arm7_setup, . - __arm7_setup271271-272272- __INITDATA273273-274274- @ define struct processor (see <asm/proc-fns.h> and proc-macros.S)275275- define_processor_functions arm6, dabort=cpu_arm6_data_abort, pabort=legacy_pabort276276- define_processor_functions arm7, dabort=cpu_arm7_data_abort, pabort=legacy_pabort277277-278278- .section ".rodata"279279-280280- string cpu_arch_name, "armv3"281281- string cpu_elf_name, "v3"282282- string cpu_arm6_name, "ARM6"283283- string cpu_arm610_name, "ARM610"284284- string cpu_arm7_name, "ARM7"285285- string cpu_arm710_name, "ARM710"286286-287287- .align288288-289289- .section ".proc.info.init", #alloc, #execinstr290290-291291-.macro arm67_proc_info name:req, cpu_val:req, cpu_mask:req, cpu_name:req, \292292- cpu_mm_mmu_flags:req, cpu_flush:req, cpu_proc_funcs:req293293- .type __\name\()_proc_info, #object294294-__\name\()_proc_info:295295- .long \cpu_val296296- .long \cpu_mask297297- .long \cpu_mm_mmu_flags298298- .long PMD_TYPE_SECT | \299299- PMD_BIT4 | \300300- PMD_SECT_AP_WRITE | \301301- PMD_SECT_AP_READ302302- b \cpu_flush303303- .long cpu_arch_name304304- .long cpu_elf_name305305- .long HWCAP_SWP | HWCAP_26BIT306306- .long \cpu_name307307- .long \cpu_proc_funcs308308- .long v3_tlb_fns309309- .long v3_user_fns310310- .long v3_cache_fns311311- .size __\name\()_proc_info, . - __\name\()_proc_info312312-.endm313313-314314- arm67_proc_info arm6, 0x41560600, 0xfffffff0, cpu_arm6_name, \315315- 0x00000c1e, __arm6_setup, arm6_processor_functions316316- arm67_proc_info arm610, 0x41560610, 0xfffffff0, cpu_arm610_name, \317317- 0x00000c1e, __arm6_setup, arm6_processor_functions318318- arm67_proc_info arm7, 0x41007000, 0xffffff00, cpu_arm7_name, \319319- 0x00000c1e, __arm7_setup, arm7_processor_functions320320- arm67_proc_info arm710, 0x41007100, 0xfff8ff00, cpu_arm710_name, \321321- PMD_TYPE_SECT | \322322- PMD_SECT_BUFFERABLE | \323323- PMD_SECT_CACHEABLE | \324324- PMD_BIT4 | \325325- PMD_SECT_AP_WRITE | \326326- PMD_SECT_AP_READ, \327327- __arm7_setup, arm7_processor_functions
-48
arch/arm/mm/tlb-v3.S
···11-/*22- * linux/arch/arm/mm/tlbv3.S33- *44- * Copyright (C) 1997-2002 Russell King55- *66- * This program is free software; you can redistribute it and/or modify77- * it under the terms of the GNU General Public License version 2 as88- * published by the Free Software Foundation.99- *1010- * ARM architecture version 3 TLB handling functions.1111- *1212- * Processors: ARM610, ARM710.1313- */1414-#include <linux/linkage.h>1515-#include <linux/init.h>1616-#include <asm/asm-offsets.h>1717-#include <asm/tlbflush.h>1818-#include "proc-macros.S"1919-2020- .align 52121-/*2222- * v3_flush_user_tlb_range(start, end, mm)2323- *2424- * Invalidate a range of TLB entries in the specified address space.2525- *2626- * - start - range start address2727- * - end - range end address2828- * - mm - mm_struct describing address space2929- */3030- .align 53131-ENTRY(v3_flush_user_tlb_range)3232- vma_vm_mm r2, r23333- act_mm r3 @ get current->active_mm3434- teq r2, r3 @ == mm ?3535- movne pc, lr @ no, we dont do anything3636-ENTRY(v3_flush_kern_tlb_range)3737- bic r0, r0, #0x0ff3838- bic r0, r0, #0xf003939-1: mcr p15, 0, r0, c6, c0, 0 @ invalidate TLB entry4040- add r0, r0, #PAGE_SZ4141- cmp r0, r14242- blo 1b4343- mov pc, lr4444-4545- __INITDATA4646-4747- /* define struct cpu_tlb_fns (see <asm/tlbflush.h> and proc-macros.S) */4848- define_tlb_functions v3, v3_tlb_flags