Linux Audio

Check our new training course

Loading...
v5.4
  1/* SPDX-License-Identifier: GPL-2.0 */
  2/*
  3 *  linux/arch/sh/boot/compressed/head.S
  4 *
  5 *  Copyright (C) 1999 Stuart Menefy
  6 *  Copyright (C) 2003 SUGIOKA Toshinobu
  7 */
  8
  9.text
 10
 11#include <asm/page.h>
 12
 13	.global	startup
 14startup:
 15	/* Load initial status register */
 16	mov.l   init_sr, r1
 17	ldc     r1, sr
 18
 19	/* Move myself to proper location if necessary */
 20	mova	1f, r0
 21	mov.l	1f, r2
 22	cmp/eq	r2, r0
 23	bt	clear_bss
 24	sub	r0, r2
 25	mov.l	bss_start_addr, r0
 26	mov	#0xffffffe0, r1
 27	and	r1, r0			! align cache line
 28	mov.l	text_start_addr, r3
 29	mov	r0, r1
 30	sub	r2, r1
 313:
 32	mov.l	@r1, r4
 33	mov.l	@(4,r1), r5
 34	mov.l	@(8,r1), r6
 35	mov.l	@(12,r1), r7
 36	mov.l	@(16,r1), r8
 37	mov.l	@(20,r1), r9
 38	mov.l	@(24,r1), r10
 39	mov.l	@(28,r1), r11
 40	mov.l	r4, @r0
 41	mov.l	r5, @(4,r0)
 42	mov.l	r6, @(8,r0)
 43	mov.l	r7, @(12,r0)
 44	mov.l	r8, @(16,r0)
 45	mov.l	r9, @(20,r0)
 46	mov.l	r10, @(24,r0)
 47	mov.l	r11, @(28,r0)
 48#ifdef CONFIG_CPU_SH4
 49	ocbwb	@r0
 50#endif
 51	cmp/hi	r3, r0
 52	add	#-32, r0
 53	bt/s	3b
 54	 add	#-32, r1
 55	mov.l	2f, r0
 56	jmp	@r0
 57	 nop
 58
 59	.align 2
 601:	.long	1b
 612:	.long	clear_bss
 62text_start_addr:
 63	.long	startup
 64
 65	/* Clear BSS */
 66clear_bss:
 67	mov.l	end_addr, r1
 68	mov.l	bss_start_addr, r2
 69	mov	#0, r0
 70l1:
 71	mov.l	r0, @-r1
 72	cmp/eq	r1,r2
 73	bf	l1
 74
 75	/* Set the initial pointer. */
 76	mov.l	init_stack_addr, r0
 77	mov.l	@r0, r15
 78
 79	/* Decompress the kernel */
 80	mov.l	decompress_kernel_addr, r0
 81	jsr	@r0
 82	nop
 83
 84	/* Jump to the start of the decompressed kernel */
 85	mov.l	kernel_start_addr, r0
 86	jmp	@r0
 87	nop
 88	
 89	.align	2
 90bss_start_addr:
 91	.long	__bss_start
 92end_addr:
 93	.long	_end
 94init_sr:
 95	.long	0x500000F0	/* Privileged mode, Bank=0, Block=1, IMASK=0xF */
 96kexec_magic:
 97	.long	0x400000F0	/* magic used by kexec to parse zImage format */
 98init_stack_addr:
 99	.long	stack_start
100decompress_kernel_addr:
101	.long	decompress_kernel
102kernel_start_addr:
103#ifdef CONFIG_32BIT
104	.long	___pa(_text+PAGE_SIZE)
105#else
106	.long	_text+PAGE_SIZE
107#endif
108
109	.align	9
110fake_headers_as_bzImage:
111	.word	0
112	.ascii	"HdrS"		! header signature
113	.word	0x0202		! header version number (>= 0x0105)
114				! or else old loadlin-1.5 will fail)
115	.word	0		! default_switch
116	.word	0		! SETUPSEG
117	.word	0x1000
118	.word	0		! pointing to kernel version string
119	.byte	0		! = 0, old one (LILO, Loadlin,
120				! 0xTV: T=0 for LILO
121				!       V = version
122	.byte	1		! Load flags bzImage=1
123	.word	0x8000		! size to move, when setup is not
124	.long	0x100000	! 0x100000 = default for big kernel
125	.long	0		! address of loaded ramdisk image
126	.long	0		# its size in bytes
v3.15
 
  1/*
  2 *  linux/arch/sh/boot/compressed/head.S
  3 *
  4 *  Copyright (C) 1999 Stuart Menefy
  5 *  Copyright (C) 2003 SUGIOKA Toshinobu
  6 */
  7
  8.text
  9
 10#include <asm/page.h>
 11
 12	.global	startup
 13startup:
 14	/* Load initial status register */
 15	mov.l   init_sr, r1
 16	ldc     r1, sr
 17
 18	/* Move myself to proper location if necessary */
 19	mova	1f, r0
 20	mov.l	1f, r2
 21	cmp/eq	r2, r0
 22	bt	clear_bss
 23	sub	r0, r2
 24	mov.l	bss_start_addr, r0
 25	mov	#0xffffffe0, r1
 26	and	r1, r0			! align cache line
 27	mov.l	text_start_addr, r3
 28	mov	r0, r1
 29	sub	r2, r1
 303:
 31	mov.l	@r1, r4
 32	mov.l	@(4,r1), r5
 33	mov.l	@(8,r1), r6
 34	mov.l	@(12,r1), r7
 35	mov.l	@(16,r1), r8
 36	mov.l	@(20,r1), r9
 37	mov.l	@(24,r1), r10
 38	mov.l	@(28,r1), r11
 39	mov.l	r4, @r0
 40	mov.l	r5, @(4,r0)
 41	mov.l	r6, @(8,r0)
 42	mov.l	r7, @(12,r0)
 43	mov.l	r8, @(16,r0)
 44	mov.l	r9, @(20,r0)
 45	mov.l	r10, @(24,r0)
 46	mov.l	r11, @(28,r0)
 47#ifdef CONFIG_CPU_SH4
 48	ocbwb	@r0
 49#endif
 50	cmp/hi	r3, r0
 51	add	#-32, r0
 52	bt/s	3b
 53	 add	#-32, r1
 54	mov.l	2f, r0
 55	jmp	@r0
 56	 nop
 57
 58	.align 2
 591:	.long	1b
 602:	.long	clear_bss
 61text_start_addr:
 62	.long	startup
 63
 64	/* Clear BSS */
 65clear_bss:
 66	mov.l	end_addr, r1
 67	mov.l	bss_start_addr, r2
 68	mov	#0, r0
 69l1:
 70	mov.l	r0, @-r1
 71	cmp/eq	r1,r2
 72	bf	l1
 73
 74	/* Set the initial pointer. */
 75	mov.l	init_stack_addr, r0
 76	mov.l	@r0, r15
 77
 78	/* Decompress the kernel */
 79	mov.l	decompress_kernel_addr, r0
 80	jsr	@r0
 81	nop
 82
 83	/* Jump to the start of the decompressed kernel */
 84	mov.l	kernel_start_addr, r0
 85	jmp	@r0
 86	nop
 87	
 88	.align	2
 89bss_start_addr:
 90	.long	__bss_start
 91end_addr:
 92	.long	_end
 93init_sr:
 94	.long	0x500000F0	/* Privileged mode, Bank=0, Block=1, IMASK=0xF */
 95kexec_magic:
 96	.long	0x400000F0	/* magic used by kexec to parse zImage format */
 97init_stack_addr:
 98	.long	stack_start
 99decompress_kernel_addr:
100	.long	decompress_kernel
101kernel_start_addr:
102#ifdef CONFIG_32BIT
103	.long	___pa(_text+PAGE_SIZE)
104#else
105	.long	_text+PAGE_SIZE
106#endif
107
108	.align	9
109fake_headers_as_bzImage:
110	.word	0
111	.ascii	"HdrS"		! header signature
112	.word	0x0202		! header version number (>= 0x0105)
113				! or else old loadlin-1.5 will fail)
114	.word	0		! default_switch
115	.word	0		! SETUPSEG
116	.word	0x1000
117	.word	0		! pointing to kernel version string
118	.byte	0		! = 0, old one (LILO, Loadlin,
119				! 0xTV: T=0 for LILO
120				!       V = version
121	.byte	1		! Load flags bzImage=1
122	.word	0x8000		! size to move, when setup is not
123	.long	0x100000	! 0x100000 = default for big kernel
124	.long	0		! address of loaded ramdisk image
125	.long	0		# its size in bytes