Loading arch/arm/Kconfig +105 −0 Original line number Diff line number Diff line Loading @@ -1404,6 +1404,12 @@ config CC_STACKPROTECTOR neutralized via a kernel panic. This feature requires gcc version 4.2 or above. config DEPRECATED_PARAM_STRUCT bool "Provide old way to pass kernel parameters" help This was deprecated in 2001 and announced to live on for 5 years. Some old boot loaders still use this way. endmenu menu "Boot options" Loading Loading @@ -1514,6 +1520,105 @@ config ATAGS_PROC Should the atags used to boot the kernel be exported in an "atags" file in procfs. Useful with kexec. config AUTO_ZRELADDR bool "Auto calculation of the decompressed kernel image address" depends on !ZBOOT_ROM && !ARCH_U300 help ZRELADDR is the physical address where the decompressed kernel image will be placed. If AUTO_ZRELADDR is selected, the address will be determined at run-time by masking the current IP with 0xf8000000. This assumes the zImage being placed in the first 128MB from start of memory. config ZRELADDR hex "Physical address of the decompressed kernel image" depends on !AUTO_ZRELADDR default 0x00008000 if ARCH_BCMRING ||\ ARCH_CNS3XXX ||\ ARCH_DOVE ||\ ARCH_EBSA110 ||\ ARCH_FOOTBRIDGE ||\ ARCH_INTEGRATOR ||\ ARCH_IOP13XX ||\ ARCH_IOP33X ||\ ARCH_IXP2000 ||\ ARCH_IXP23XX ||\ ARCH_IXP4XX ||\ ARCH_KIRKWOOD ||\ ARCH_KS8695 ||\ ARCH_LOKI ||\ ARCH_MMP ||\ ARCH_MV78XX0 ||\ ARCH_NOMADIK ||\ ARCH_NUC93X ||\ ARCH_NS9XXX ||\ ARCH_ORION5X ||\ ARCH_SPEAR3XX ||\ ARCH_SPEAR6XX ||\ ARCH_U8500 ||\ ARCH_VERSATILE ||\ ARCH_W90X900 default 0x08008000 if ARCH_MX1 ||\ ARCH_SHARK default 0x10008000 if ARCH_MSM ||\ ARCH_OMAP1 ||\ ARCH_RPC default 0x20008000 if ARCH_S5P6440 ||\ ARCH_S5P6442 ||\ ARCH_S5PC100 ||\ ARCH_S5PV210 default 0x30008000 if ARCH_S3C2410 ||\ ARCH_S3C2400 ||\ ARCH_S3C2412 ||\ ARCH_S3C2416 ||\ ARCH_S3C2440 ||\ ARCH_S3C2443 default 0x40008000 if ARCH_STMP378X ||\ ARCH_STMP37XX ||\ ARCH_SH7372 ||\ ARCH_SH7377 default 0x50008000 if ARCH_S3C64XX ||\ ARCH_SH7367 default 0x60008000 if ARCH_VEXPRESS default 0x80008000 if ARCH_MX25 ||\ ARCH_MX3 ||\ ARCH_NETX ||\ ARCH_OMAP2PLUS ||\ ARCH_PNX4008 default 0x90008000 if ARCH_MX5 ||\ ARCH_MX91231 default 0xa0008000 if ARCH_IOP32X ||\ ARCH_PXA ||\ MACH_MX27 default 0xc0008000 if ARCH_LH7A40X ||\ MACH_MX21 default 0xf0008000 if ARCH_AAEC2000 ||\ ARCH_L7200 default 0xc0028000 if ARCH_CLPS711X default 0x70008000 if ARCH_AT91 && (ARCH_AT91CAP9 || ARCH_AT91SAM9G45) default 0x20008000 if ARCH_AT91 && !(ARCH_AT91CAP9 || ARCH_AT91SAM9G45) default 0xc0008000 if ARCH_DAVINCI && ARCH_DAVINCI_DA8XX default 0x80008000 if ARCH_DAVINCI && !ARCH_DAVINCI_DA8XX default 0x00008000 if ARCH_EP93XX && EP93XX_SDCE3_SYNC_PHYS_OFFSET default 0xc0008000 if ARCH_EP93XX && EP93XX_SDCE0_PHYS_OFFSET default 0xd0008000 if ARCH_EP93XX && EP93XX_SDCE1_PHYS_OFFSET default 0xe0008000 if ARCH_EP93XX && EP93XX_SDCE2_PHYS_OFFSET default 0xf0008000 if ARCH_EP93XX && EP93XX_SDCE3_ASYNC_PHYS_OFFSET default 0x00008000 if ARCH_GEMINI && GEMINI_MEM_SWAP default 0x10008000 if ARCH_GEMINI && !GEMINI_MEM_SWAP default 0x70008000 if ARCH_REALVIEW && REALVIEW_HIGH_PHYS_OFFSET default 0x00008000 if ARCH_REALVIEW && !REALVIEW_HIGH_PHYS_OFFSET default 0xc0208000 if ARCH_SA1100 && SA1111 default 0xc0008000 if ARCH_SA1100 && !SA1111 default 0x30108000 if ARCH_S3C2410 && PM_H1940 default 0x28E08000 if ARCH_U300 && MACH_U300_SINGLE_RAM default 0x48008000 if ARCH_U300 && !MACH_U300_SINGLE_RAM help ZRELADDR is the physical address where the decompressed kernel image will be placed. ZRELADDR has to be specified when the assumption of AUTO_ZRELADDR is not valid, or when ZBOOT_ROM is selected. endmenu menu "CPU Power Management" Loading arch/arm/boot/Makefile +3 −5 Original line number Diff line number Diff line Loading @@ -14,18 +14,16 @@ MKIMAGE := $(srctree)/scripts/mkuboot.sh ifneq ($(MACHINE),) include $(srctree)/$(MACHINE)/Makefile.boot -include $(srctree)/$(MACHINE)/Makefile.boot endif # Note: the following conditions must always be true: # ZRELADDR == virt_to_phys(PAGE_OFFSET + TEXT_OFFSET) # PARAMS_PHYS must be within 4MB of ZRELADDR # INITRD_PHYS must be in RAM ZRELADDR := $(zreladdr-y) PARAMS_PHYS := $(params_phys-y) INITRD_PHYS := $(initrd_phys-y) export ZRELADDR INITRD_PHYS PARAMS_PHYS export INITRD_PHYS PARAMS_PHYS targets := Image zImage xipImage bootpImage uImage Loading Loading @@ -67,7 +65,7 @@ quiet_cmd_uimage = UIMAGE $@ ifeq ($(CONFIG_ZBOOT_ROM),y) $(obj)/uImage: LOADADDR=$(CONFIG_ZBOOT_ROM_TEXT) else $(obj)/uImage: LOADADDR=$(ZRELADDR) $(obj)/uImage: LOADADDR=$(CONFIG_ZRELADDR) endif ifeq ($(CONFIG_THUMB2_KERNEL),y) Loading arch/arm/boot/compressed/Makefile +1 −10 Original line number Diff line number Diff line Loading @@ -4,6 +4,7 @@ # create a compressed vmlinuz image from the original vmlinux # AFLAGS_head.o += -DTEXT_OFFSET=$(TEXT_OFFSET) HEAD = head.o OBJS = misc.o decompress.o FONTC = $(srctree)/drivers/video/console/font_acorn_8x8.c Loading Loading @@ -79,19 +80,9 @@ endif EXTRA_CFLAGS := -fpic -fno-builtin EXTRA_AFLAGS := -Wa,-march=all # Supply ZRELADDR, INITRD_PHYS and PARAMS_PHYS to the decompressor via # linker symbols. We only define initrd_phys and params_phys if the # machine class defined the corresponding makefile variable. LDFLAGS_vmlinux := --defsym zreladdr=$(ZRELADDR) ifeq ($(CONFIG_CPU_ENDIAN_BE8),y) LDFLAGS_vmlinux += --be8 endif ifneq ($(INITRD_PHYS),) LDFLAGS_vmlinux += --defsym initrd_phys=$(INITRD_PHYS) endif ifneq ($(PARAMS_PHYS),) LDFLAGS_vmlinux += --defsym params_phys=$(PARAMS_PHYS) endif # ? LDFLAGS_vmlinux += -p # Report unresolved symbol references Loading arch/arm/boot/compressed/Makefile.debugdeleted 100644 → 0 +0 −23 Original line number Diff line number Diff line # # linux/arch/arm/boot/compressed/Makefile # # create a compressed vmlinux image from the original vmlinux # COMPRESSED_EXTRA=../../lib/ll_char_wr.o OBJECTS=misc-debug.o ll_char_wr.aout.o CFLAGS=-D__KERNEL__ -O2 -DSTDC_HEADERS -DSTANDALONE_DEBUG -Wall -I../../../../include -c test-gzip: piggy.aout.o $(OBJECTS) $(CC) -o $@ $(OBJECTS) piggy.aout.o misc-debug.o: misc.c $(CC) $(CFLAGS) -o $@ misc.c piggy.aout.o: piggy.o arm-linuxelf-objcopy --change-leading-char -I elf32-arm -O arm-aout32-linux piggy.o piggy.aout.o ll_char_wr.aout.o: $(COMPRESSED_EXTRA) arm-linuxelf-objcopy --change-leading-char -I elf32-arm -O arm-aout32-linux $(COMPRESSED_EXTRA) ll_char_wr.aout.o arch/arm/boot/compressed/head.S +29 −11 Original line number Diff line number Diff line Loading @@ -170,9 +170,16 @@ not_angel: .text adr r0, LC0 ARM( ldmia r0, {r1, r2, r3, r4, r5, r6, r11, ip, sp}) THUMB( ldmia r0, {r1, r2, r3, r4, r5, r6, r11, ip} ) ARM( ldmia r0, {r1, r2, r3, r5, r6, r11, ip, sp}) THUMB( ldmia r0, {r1, r2, r3, r5, r6, r11, ip} ) THUMB( ldr sp, [r0, #32] ) #ifdef CONFIG_AUTO_ZRELADDR @ determine final kernel image address and r4, pc, #0xf8000000 add r4, r4, #TEXT_OFFSET #else ldr r4, =CONFIG_ZRELADDR #endif subs r0, r0, r1 @ calculate the delta offset @ if delta is zero, we are Loading Loading @@ -310,18 +317,17 @@ wont_overwrite: mov r0, r4 LC0: .word LC0 @ r1 .word __bss_start @ r2 .word _end @ r3 .word zreladdr @ r4 .word _start @ r5 .word _image_size @ r6 .word _got_start @ r11 .word _got_end @ ip .word user_stack+4096 @ sp .word user_stack_end @ sp LC1: .word reloc_end - reloc_start .size LC0, . - LC0 #ifdef CONFIG_ARCH_RPC .globl params params: ldr r0, =params_phys params: ldr r0, =0x10000100 @ params_phys for RPC mov pc, lr .ltorg .align Loading @@ -339,9 +345,8 @@ params: ldr r0, =params_phys * r4 = kernel execution address * r7 = architecture number * r8 = atags pointer * r9 = run-time address of "start" (???) * On exit, * r1, r2, r3, r9, r10, r12 corrupted * r0, r1, r2, r3, r9, r10, r12 corrupted * This routine must preserve: * r4, r5, r6, r7, r8 */ Loading Loading @@ -396,12 +401,18 @@ __armv3_mpu_cache_on: mov r0, #0 mcr p15, 0, r0, c7, c0, 0 @ invalidate whole cache v3 /* * ?? ARMv3 MMU does not allow reading the control register, * does this really work on ARMv3 MPU? */ mrc p15, 0, r0, c1, c0, 0 @ read control reg @ .... .... .... WC.M orr r0, r0, #0x000d @ .... .... .... 11.1 /* ?? this overwrites the value constructed above? */ mov r0, #0 mcr p15, 0, r0, c1, c0, 0 @ write control reg /* ?? invalidate for the second time? */ mcr p15, 0, r0, c7, c0, 0 @ invalidate whole cache v3 mov pc, lr Loading Loading @@ -771,8 +782,10 @@ proc_types: * Turn off the Cache and MMU. ARMv3 does not support * reading the control register, but ARMv4 does. * * On exit, r0, r1, r2, r3, r9, r12 corrupted * This routine must preserve: r4, r6, r7 * On exit, * r0, r1, r2, r3, r9, r12 corrupted * This routine must preserve: * r4, r6, r7 */ .align 5 cache_off: mov r3, #12 @ cache_off function Loading Loading @@ -845,7 +858,7 @@ __armv3_mmu_cache_off: * Clean and flush the cache to maintain consistency. * * On exit, * r1, r2, r3, r9, r11, r12 corrupted * r1, r2, r3, r9, r10, r11, r12 corrupted * This routine must preserve: * r0, r4, r5, r6, r7 */ Loading Loading @@ -988,7 +1001,7 @@ no_cache_id: __armv3_mmu_cache_flush: __armv3_mpu_cache_flush: mov r1, #0 mcr p15, 0, r0, c7, c0, 0 @ invalidate whole cache v3 mcr p15, 0, r1, c7, c0, 0 @ invalidate whole cache v3 mov pc, lr /* Loading @@ -1001,6 +1014,7 @@ __armv3_mpu_cache_flush: phexbuf: .space 12 .size phexbuf, . - phexbuf @ phex corrupts {r0, r1, r2, r3} phex: adr r3, phexbuf mov r2, #0 strb r2, [r3, r1] Loading @@ -1015,6 +1029,7 @@ phex: adr r3, phexbuf strb r2, [r3, r1] b 1b @ puts corrupts {r0, r1, r2, r3} puts: loadsp r3, r1 1: ldrb r2, [r0], #1 teq r2, #0 Loading @@ -1029,12 +1044,14 @@ puts: loadsp r3, r1 teq r0, #0 bne 1b mov pc, lr @ putc corrupts {r0, r1, r2, r3} putc: mov r2, r0 mov r0, #0 loadsp r3, r1 b 2b @ memdump corrupts {r0, r1, r2, r3, r10, r11, r12, lr} memdump: mov r12, r0 mov r10, lr mov r11, #0 Loading Loading @@ -1070,3 +1087,4 @@ reloc_end: .align .section ".stack", "w" user_stack: .space 4096 user_stack_end: Loading
arch/arm/Kconfig +105 −0 Original line number Diff line number Diff line Loading @@ -1404,6 +1404,12 @@ config CC_STACKPROTECTOR neutralized via a kernel panic. This feature requires gcc version 4.2 or above. config DEPRECATED_PARAM_STRUCT bool "Provide old way to pass kernel parameters" help This was deprecated in 2001 and announced to live on for 5 years. Some old boot loaders still use this way. endmenu menu "Boot options" Loading Loading @@ -1514,6 +1520,105 @@ config ATAGS_PROC Should the atags used to boot the kernel be exported in an "atags" file in procfs. Useful with kexec. config AUTO_ZRELADDR bool "Auto calculation of the decompressed kernel image address" depends on !ZBOOT_ROM && !ARCH_U300 help ZRELADDR is the physical address where the decompressed kernel image will be placed. If AUTO_ZRELADDR is selected, the address will be determined at run-time by masking the current IP with 0xf8000000. This assumes the zImage being placed in the first 128MB from start of memory. config ZRELADDR hex "Physical address of the decompressed kernel image" depends on !AUTO_ZRELADDR default 0x00008000 if ARCH_BCMRING ||\ ARCH_CNS3XXX ||\ ARCH_DOVE ||\ ARCH_EBSA110 ||\ ARCH_FOOTBRIDGE ||\ ARCH_INTEGRATOR ||\ ARCH_IOP13XX ||\ ARCH_IOP33X ||\ ARCH_IXP2000 ||\ ARCH_IXP23XX ||\ ARCH_IXP4XX ||\ ARCH_KIRKWOOD ||\ ARCH_KS8695 ||\ ARCH_LOKI ||\ ARCH_MMP ||\ ARCH_MV78XX0 ||\ ARCH_NOMADIK ||\ ARCH_NUC93X ||\ ARCH_NS9XXX ||\ ARCH_ORION5X ||\ ARCH_SPEAR3XX ||\ ARCH_SPEAR6XX ||\ ARCH_U8500 ||\ ARCH_VERSATILE ||\ ARCH_W90X900 default 0x08008000 if ARCH_MX1 ||\ ARCH_SHARK default 0x10008000 if ARCH_MSM ||\ ARCH_OMAP1 ||\ ARCH_RPC default 0x20008000 if ARCH_S5P6440 ||\ ARCH_S5P6442 ||\ ARCH_S5PC100 ||\ ARCH_S5PV210 default 0x30008000 if ARCH_S3C2410 ||\ ARCH_S3C2400 ||\ ARCH_S3C2412 ||\ ARCH_S3C2416 ||\ ARCH_S3C2440 ||\ ARCH_S3C2443 default 0x40008000 if ARCH_STMP378X ||\ ARCH_STMP37XX ||\ ARCH_SH7372 ||\ ARCH_SH7377 default 0x50008000 if ARCH_S3C64XX ||\ ARCH_SH7367 default 0x60008000 if ARCH_VEXPRESS default 0x80008000 if ARCH_MX25 ||\ ARCH_MX3 ||\ ARCH_NETX ||\ ARCH_OMAP2PLUS ||\ ARCH_PNX4008 default 0x90008000 if ARCH_MX5 ||\ ARCH_MX91231 default 0xa0008000 if ARCH_IOP32X ||\ ARCH_PXA ||\ MACH_MX27 default 0xc0008000 if ARCH_LH7A40X ||\ MACH_MX21 default 0xf0008000 if ARCH_AAEC2000 ||\ ARCH_L7200 default 0xc0028000 if ARCH_CLPS711X default 0x70008000 if ARCH_AT91 && (ARCH_AT91CAP9 || ARCH_AT91SAM9G45) default 0x20008000 if ARCH_AT91 && !(ARCH_AT91CAP9 || ARCH_AT91SAM9G45) default 0xc0008000 if ARCH_DAVINCI && ARCH_DAVINCI_DA8XX default 0x80008000 if ARCH_DAVINCI && !ARCH_DAVINCI_DA8XX default 0x00008000 if ARCH_EP93XX && EP93XX_SDCE3_SYNC_PHYS_OFFSET default 0xc0008000 if ARCH_EP93XX && EP93XX_SDCE0_PHYS_OFFSET default 0xd0008000 if ARCH_EP93XX && EP93XX_SDCE1_PHYS_OFFSET default 0xe0008000 if ARCH_EP93XX && EP93XX_SDCE2_PHYS_OFFSET default 0xf0008000 if ARCH_EP93XX && EP93XX_SDCE3_ASYNC_PHYS_OFFSET default 0x00008000 if ARCH_GEMINI && GEMINI_MEM_SWAP default 0x10008000 if ARCH_GEMINI && !GEMINI_MEM_SWAP default 0x70008000 if ARCH_REALVIEW && REALVIEW_HIGH_PHYS_OFFSET default 0x00008000 if ARCH_REALVIEW && !REALVIEW_HIGH_PHYS_OFFSET default 0xc0208000 if ARCH_SA1100 && SA1111 default 0xc0008000 if ARCH_SA1100 && !SA1111 default 0x30108000 if ARCH_S3C2410 && PM_H1940 default 0x28E08000 if ARCH_U300 && MACH_U300_SINGLE_RAM default 0x48008000 if ARCH_U300 && !MACH_U300_SINGLE_RAM help ZRELADDR is the physical address where the decompressed kernel image will be placed. ZRELADDR has to be specified when the assumption of AUTO_ZRELADDR is not valid, or when ZBOOT_ROM is selected. endmenu menu "CPU Power Management" Loading
arch/arm/boot/Makefile +3 −5 Original line number Diff line number Diff line Loading @@ -14,18 +14,16 @@ MKIMAGE := $(srctree)/scripts/mkuboot.sh ifneq ($(MACHINE),) include $(srctree)/$(MACHINE)/Makefile.boot -include $(srctree)/$(MACHINE)/Makefile.boot endif # Note: the following conditions must always be true: # ZRELADDR == virt_to_phys(PAGE_OFFSET + TEXT_OFFSET) # PARAMS_PHYS must be within 4MB of ZRELADDR # INITRD_PHYS must be in RAM ZRELADDR := $(zreladdr-y) PARAMS_PHYS := $(params_phys-y) INITRD_PHYS := $(initrd_phys-y) export ZRELADDR INITRD_PHYS PARAMS_PHYS export INITRD_PHYS PARAMS_PHYS targets := Image zImage xipImage bootpImage uImage Loading Loading @@ -67,7 +65,7 @@ quiet_cmd_uimage = UIMAGE $@ ifeq ($(CONFIG_ZBOOT_ROM),y) $(obj)/uImage: LOADADDR=$(CONFIG_ZBOOT_ROM_TEXT) else $(obj)/uImage: LOADADDR=$(ZRELADDR) $(obj)/uImage: LOADADDR=$(CONFIG_ZRELADDR) endif ifeq ($(CONFIG_THUMB2_KERNEL),y) Loading
arch/arm/boot/compressed/Makefile +1 −10 Original line number Diff line number Diff line Loading @@ -4,6 +4,7 @@ # create a compressed vmlinuz image from the original vmlinux # AFLAGS_head.o += -DTEXT_OFFSET=$(TEXT_OFFSET) HEAD = head.o OBJS = misc.o decompress.o FONTC = $(srctree)/drivers/video/console/font_acorn_8x8.c Loading Loading @@ -79,19 +80,9 @@ endif EXTRA_CFLAGS := -fpic -fno-builtin EXTRA_AFLAGS := -Wa,-march=all # Supply ZRELADDR, INITRD_PHYS and PARAMS_PHYS to the decompressor via # linker symbols. We only define initrd_phys and params_phys if the # machine class defined the corresponding makefile variable. LDFLAGS_vmlinux := --defsym zreladdr=$(ZRELADDR) ifeq ($(CONFIG_CPU_ENDIAN_BE8),y) LDFLAGS_vmlinux += --be8 endif ifneq ($(INITRD_PHYS),) LDFLAGS_vmlinux += --defsym initrd_phys=$(INITRD_PHYS) endif ifneq ($(PARAMS_PHYS),) LDFLAGS_vmlinux += --defsym params_phys=$(PARAMS_PHYS) endif # ? LDFLAGS_vmlinux += -p # Report unresolved symbol references Loading
arch/arm/boot/compressed/Makefile.debugdeleted 100644 → 0 +0 −23 Original line number Diff line number Diff line # # linux/arch/arm/boot/compressed/Makefile # # create a compressed vmlinux image from the original vmlinux # COMPRESSED_EXTRA=../../lib/ll_char_wr.o OBJECTS=misc-debug.o ll_char_wr.aout.o CFLAGS=-D__KERNEL__ -O2 -DSTDC_HEADERS -DSTANDALONE_DEBUG -Wall -I../../../../include -c test-gzip: piggy.aout.o $(OBJECTS) $(CC) -o $@ $(OBJECTS) piggy.aout.o misc-debug.o: misc.c $(CC) $(CFLAGS) -o $@ misc.c piggy.aout.o: piggy.o arm-linuxelf-objcopy --change-leading-char -I elf32-arm -O arm-aout32-linux piggy.o piggy.aout.o ll_char_wr.aout.o: $(COMPRESSED_EXTRA) arm-linuxelf-objcopy --change-leading-char -I elf32-arm -O arm-aout32-linux $(COMPRESSED_EXTRA) ll_char_wr.aout.o
arch/arm/boot/compressed/head.S +29 −11 Original line number Diff line number Diff line Loading @@ -170,9 +170,16 @@ not_angel: .text adr r0, LC0 ARM( ldmia r0, {r1, r2, r3, r4, r5, r6, r11, ip, sp}) THUMB( ldmia r0, {r1, r2, r3, r4, r5, r6, r11, ip} ) ARM( ldmia r0, {r1, r2, r3, r5, r6, r11, ip, sp}) THUMB( ldmia r0, {r1, r2, r3, r5, r6, r11, ip} ) THUMB( ldr sp, [r0, #32] ) #ifdef CONFIG_AUTO_ZRELADDR @ determine final kernel image address and r4, pc, #0xf8000000 add r4, r4, #TEXT_OFFSET #else ldr r4, =CONFIG_ZRELADDR #endif subs r0, r0, r1 @ calculate the delta offset @ if delta is zero, we are Loading Loading @@ -310,18 +317,17 @@ wont_overwrite: mov r0, r4 LC0: .word LC0 @ r1 .word __bss_start @ r2 .word _end @ r3 .word zreladdr @ r4 .word _start @ r5 .word _image_size @ r6 .word _got_start @ r11 .word _got_end @ ip .word user_stack+4096 @ sp .word user_stack_end @ sp LC1: .word reloc_end - reloc_start .size LC0, . - LC0 #ifdef CONFIG_ARCH_RPC .globl params params: ldr r0, =params_phys params: ldr r0, =0x10000100 @ params_phys for RPC mov pc, lr .ltorg .align Loading @@ -339,9 +345,8 @@ params: ldr r0, =params_phys * r4 = kernel execution address * r7 = architecture number * r8 = atags pointer * r9 = run-time address of "start" (???) * On exit, * r1, r2, r3, r9, r10, r12 corrupted * r0, r1, r2, r3, r9, r10, r12 corrupted * This routine must preserve: * r4, r5, r6, r7, r8 */ Loading Loading @@ -396,12 +401,18 @@ __armv3_mpu_cache_on: mov r0, #0 mcr p15, 0, r0, c7, c0, 0 @ invalidate whole cache v3 /* * ?? ARMv3 MMU does not allow reading the control register, * does this really work on ARMv3 MPU? */ mrc p15, 0, r0, c1, c0, 0 @ read control reg @ .... .... .... WC.M orr r0, r0, #0x000d @ .... .... .... 11.1 /* ?? this overwrites the value constructed above? */ mov r0, #0 mcr p15, 0, r0, c1, c0, 0 @ write control reg /* ?? invalidate for the second time? */ mcr p15, 0, r0, c7, c0, 0 @ invalidate whole cache v3 mov pc, lr Loading Loading @@ -771,8 +782,10 @@ proc_types: * Turn off the Cache and MMU. ARMv3 does not support * reading the control register, but ARMv4 does. * * On exit, r0, r1, r2, r3, r9, r12 corrupted * This routine must preserve: r4, r6, r7 * On exit, * r0, r1, r2, r3, r9, r12 corrupted * This routine must preserve: * r4, r6, r7 */ .align 5 cache_off: mov r3, #12 @ cache_off function Loading Loading @@ -845,7 +858,7 @@ __armv3_mmu_cache_off: * Clean and flush the cache to maintain consistency. * * On exit, * r1, r2, r3, r9, r11, r12 corrupted * r1, r2, r3, r9, r10, r11, r12 corrupted * This routine must preserve: * r0, r4, r5, r6, r7 */ Loading Loading @@ -988,7 +1001,7 @@ no_cache_id: __armv3_mmu_cache_flush: __armv3_mpu_cache_flush: mov r1, #0 mcr p15, 0, r0, c7, c0, 0 @ invalidate whole cache v3 mcr p15, 0, r1, c7, c0, 0 @ invalidate whole cache v3 mov pc, lr /* Loading @@ -1001,6 +1014,7 @@ __armv3_mpu_cache_flush: phexbuf: .space 12 .size phexbuf, . - phexbuf @ phex corrupts {r0, r1, r2, r3} phex: adr r3, phexbuf mov r2, #0 strb r2, [r3, r1] Loading @@ -1015,6 +1029,7 @@ phex: adr r3, phexbuf strb r2, [r3, r1] b 1b @ puts corrupts {r0, r1, r2, r3} puts: loadsp r3, r1 1: ldrb r2, [r0], #1 teq r2, #0 Loading @@ -1029,12 +1044,14 @@ puts: loadsp r3, r1 teq r0, #0 bne 1b mov pc, lr @ putc corrupts {r0, r1, r2, r3} putc: mov r2, r0 mov r0, #0 loadsp r3, r1 b 2b @ memdump corrupts {r0, r1, r2, r3, r10, r11, r12, lr} memdump: mov r12, r0 mov r10, lr mov r11, #0 Loading Loading @@ -1070,3 +1087,4 @@ reloc_end: .align .section ".stack", "w" user_stack: .space 4096 user_stack_end: