Lines Matching +full:sub +full:- +full:processor
1 /* SPDX-License-Identifier: GPL-2.0-only */
5 * Copyright (C) 1994-2002 Russell King
9 * Kernel startup code for all 32-bit CPUs
19 #include <asm/asm-offsets.h>
48 .equ swapper_pg_dir, KERNEL_RAM_VADDR - PG_DIR_SIZE
69 sub \rd, \rd, #PG_DIR_SIZE
74 * ---------------------------
77 * are: MMU = off, D-cache = off, I-cache = dont care, r0 = 0,
83 * See linux/arch/arm/tools/mach-types for the complete list of machine
87 * crap here - that's what the boot loader (or in extreme, well justified
97 THUMB( bx r9 ) @ If this is a Thumb-2 kernel,
107 mrc p15, 0, r9, c0, c0 @ get processor id
109 movs r10, r5 @ invalid processor (r5=0)?
110 THUMB( it eq ) @ force fixup-able long branch encoding
116 cmp r3, #5 @ long-descriptor translation table format?
117 THUMB( it lo ) @ force fixup-able long branch encoding
123 sub r8, r8, #TEXT_OFFSET @ PHYS_OFFSET
143 * manner. See arch/arm/mm/proc-*.S for details. r10 = base of
147 * The processor init function will be called with:
148 * r1 - machine type
149 * r2 - boot data (atags/dt) pointer
150 * r4 - translation table base (low word)
151 * r5 - translation table base (high word, if LPAE)
152 * r8 - translation table base 1 (pfn if LPAE)
153 * r9 - cpuid
154 * r13 - virtual address for __enable_mmu -> __turn_mmu_on
184 * r0, r3, r5-r7 corrupted
206 * entry is 64-bit wide.
212 mov r7, #1 << (55 - 32) @ L_PGD_SWAPPER
253 add r0, r4, #KERNEL_OFFSET >> (SECTION_SHIFT - PMD_ENTRY_ORDER)
254 ldr r6, =(_end - 1)
266 add r6, r4, r6, lsr #(SECTION_SHIFT - PMD_ENTRY_ORDER)
287 add r0, r4, #(XIP_START & 0xff000000) >> (SECTION_SHIFT - PMD_ENTRY_ORDER)
289 ldr r6, =(_edata_loc - 1)
291 add r6, r4, r6, lsr #(SECTION_SHIFT - PMD_ENTRY_ORDER)
304 ldrne r3, =FDT_FIXED_BASE >> (SECTION_SHIFT - PMD_ENTRY_ORDER)
312 sub r4, r4, #4 @ Fixup page table pointer
313 @ for 64-bit descriptors
333 mov r7, #1 << (54 - 32) @ XN
354 * in the 16550-type serial port for the debug messages
356 add r0, r4, #0xff000000 >> (SECTION_SHIFT - PMD_ENTRY_ORDER)
363 * Similar reasons here - for debug. This is
366 add r0, r4, #0x02000000 >> (SECTION_SHIFT - PMD_ENTRY_ORDER)
369 add r0, r4, #0xd8000000 >> (SECTION_SHIFT - PMD_ENTRY_ORDER)
374 sub r4, r4, #0x1000 @ point to the PGD table
385 THUMB( bx r9 ) @ If this is a Thumb-2 kernel,
393 * the processor type - there is no need to check the machine type
394 * as it has already been validated by the primary processor.
404 mrc p15, 0, r9, c0, c0 @ get processor id
406 movs r10, r5 @ invalid processor?
408 THUMB( it eq ) @ force fixup-able long branch encoding
415 ldr r3, =(secondary_data + PLAT_PHYS_OFFSET - PAGE_OFFSET)
428 add r12, r12, r10 @ initialise processor
457 * processor setup function (or set in the case of r0)
464 * r9 = processor ID
495 * If you have an enquiry about this, *please* check the linux-arm-kernel
501 * r9 = processor ID
543 @ Cortex-A9 CPU is present but SMP operations fault.
547 teq r3, r4 @ Check for ARM Cortex-A9
548 retne lr @ Not ARM Cortex-A9,
586 THUMB( mov r6, r6, ror #16 ) @ Convert word order for big-endian.
588 THUMB( strh r6, [r0], #2 ) @ For Thumb-2, store as two halfwords
595 stmfd sp!, {r4 - r6, lr}
599 ldmfd sp!, {r4 - r6, pc}
602 #include "head-common.S"