Linux Audio

Check our new training course

Loading...
v6.2
  1/*
  2 * Copyright (C) 2009 Thomas Chou <thomas@wytron.com.tw>
  3 *
  4 * Based on arch/nios2/kernel/head.S
  5 *
  6 * This file is subject to the terms and conditions of the GNU General Public
  7 * License. See the file "COPYING" in the main directory of this archive
  8 * for more details.
  9 *
 10 */
 11
 12/*
 13 *  This code can be loaded anywhere, eg FLASH ROM as reset vector,
 14 *  as long as output does not overlap it.
 15 */
 16
 17#include <linux/linkage.h>
 18#include <asm/cache.h>
 19
 20	.text
 21	.set noat
 22ENTRY(_start)
 23	wrctl	status, r0		/* disable interrupt */
 24	/* invalidate all instruction cache */
 25	movia	r1, NIOS2_ICACHE_SIZE
 26	movui	r2, NIOS2_ICACHE_LINE_SIZE
 271:	initi	r1
 28	sub	r1, r1, r2
 29	bgt	r1, r0, 1b
 30	/* invalidate all data cache */
 31	movia	r1, NIOS2_DCACHE_SIZE
 32	movui	r2, NIOS2_DCACHE_LINE_SIZE
 331:	initd	0(r1)
 34	sub	r1, r1, r2
 35	bgt	r1, r0, 1b
 36
 37	nextpc	r1			/* Find out where we are */
 38chkadr:
 39	movia	r2, chkadr
 40	beq	r1, r2, finish_move	/* We are running in correct address,
 41					   done */
 42	/* move code, r1: src, r2: dest, r3: last dest */
 43	addi	r1, r1, (_start - chkadr)	/* Source */
 44	movia	r2, _start		/* Destination */
 45	movia	r3, __bss_start		/* End of copy */
 461:	ldw	r8, 0(r1)		/* load a word from [r1] */
 47	stw	r8, 0(r2)		/* stort a word to dest [r2] */
 48	addi	r1, r1, 4		/* inc the src addr */
 49	addi	r2, r2, 4		/* inc the dest addr */
 50	blt	r2, r3, 1b
 51	/* flush the data cache after moving */
 52	movia	r1, NIOS2_DCACHE_SIZE
 53	movui	r2, NIOS2_DCACHE_LINE_SIZE
 541:	flushd	0(r1)
 55	sub	r1, r1, r2
 56	bgt	r1, r0, 1b
 57	movia	r1, finish_move
 58	jmp	r1			/* jmp to linked address */
 59
 60finish_move:
 61	/* zero out the .bss segment (uninitialized common data) */
 62	movia	r2, __bss_start		/* presume nothing is between */
 63	movia	r1, _end		/* the .bss and _end. */
 641: 	stb	r0, 0(r2)
 65	addi	r2, r2, 1
 66	bne	r1, r2, 1b
 67	/*
 68	 * set up the stack pointer, some where higher than _end.
 69	 * The stack space must be greater than 32K for decompress.
 70	 */
 71	movia	sp, 0x10000
 72	add	sp, sp, r1
 73	/* save args passed from u-boot, maybe */
 74	addi	sp, sp, -16
 75	stw	r4, 0(sp)
 76	stw	r5, 4(sp)
 77	stw	r6, 8(sp)
 78	stw	r7, 12(sp)
 79	/* decompress the kernel */
 80	call	decompress_kernel
 81	/* pass saved args to kernel */
 82	ldw	r4, 0(sp)
 83	ldw	r5, 4(sp)
 84	ldw	r6, 8(sp)
 85	ldw	r7, 12(sp)
 86
 87	/* flush all data cache after decompressing */
 88	movia	r1, NIOS2_DCACHE_SIZE
 89	movui	r2, NIOS2_DCACHE_LINE_SIZE
 901:	flushd	0(r1)
 91	sub	r1, r1, r2
 92	bgt	r1, r0, 1b
 93	/* flush all instruction cache */
 94	movia	r1, NIOS2_ICACHE_SIZE
 95	movui	r2, NIOS2_ICACHE_LINE_SIZE
 961:	flushi	r1
 97	sub	r1, r1, r2
 98	bgt	r1, r0, 1b
 99	flushp
100	/* jump to start real kernel */
101	movia	r1, (CONFIG_NIOS2_MEM_BASE | CONFIG_NIOS2_KERNEL_REGION_BASE)
102	jmp	r1
103
104	.balign 512
105fake_headers_as_bzImage:
106	.short	0
107	.ascii	"HdrS"
108	.short	0x0202
109	.short	0
110	.short	0
111	.byte	0x00, 0x10
112	.short	0
113	.byte	0
114	.byte	1
115	.byte	0x00, 0x80
116	.long	0
117	.long	0
v6.8
  1/*
  2 * Copyright (C) 2009 Thomas Chou <thomas@wytron.com.tw>
  3 *
  4 * Based on arch/nios2/kernel/head.S
  5 *
  6 * This file is subject to the terms and conditions of the GNU General Public
  7 * License. See the file "COPYING" in the main directory of this archive
  8 * for more details.
  9 *
 10 */
 11
 12/*
 13 *  This code can be loaded anywhere, eg FLASH ROM as reset vector,
 14 *  as long as output does not overlap it.
 15 */
 16
 17#include <linux/linkage.h>
 18#include <asm/cache.h>
 19
 20	.text
 21	.set noat
 22ENTRY(_start)
 23	wrctl	status, r0		/* disable interrupt */
 24	/* invalidate all instruction cache */
 25	movia	r1, NIOS2_ICACHE_SIZE
 26	movui	r2, NIOS2_ICACHE_LINE_SIZE
 271:	initi	r1
 28	sub	r1, r1, r2
 29	bgt	r1, r0, 1b
 30	/* invalidate all data cache */
 31	movia	r1, NIOS2_DCACHE_SIZE
 32	movui	r2, NIOS2_DCACHE_LINE_SIZE
 331:	initd	0(r1)
 34	sub	r1, r1, r2
 35	bgt	r1, r0, 1b
 36
 37	nextpc	r1			/* Find out where we are */
 38chkadr:
 39	movia	r2, chkadr
 40	beq	r1, r2, finish_move	/* We are running in correct address,
 41					   done */
 42	/* move code, r1: src, r2: dest, r3: last dest */
 43	addi	r1, r1, (_start - chkadr)	/* Source */
 44	movia	r2, _start		/* Destination */
 45	movia	r3, __bss_start		/* End of copy */
 461:	ldw	r8, 0(r1)		/* load a word from [r1] */
 47	stw	r8, 0(r2)		/* stort a word to dest [r2] */
 48	addi	r1, r1, 4		/* inc the src addr */
 49	addi	r2, r2, 4		/* inc the dest addr */
 50	blt	r2, r3, 1b
 51	/* flush the data cache after moving */
 52	movia	r1, NIOS2_DCACHE_SIZE
 53	movui	r2, NIOS2_DCACHE_LINE_SIZE
 541:	flushd	0(r1)
 55	sub	r1, r1, r2
 56	bgt	r1, r0, 1b
 57	movia	r1, finish_move
 58	jmp	r1			/* jmp to linked address */
 59
 60finish_move:
 61	/* zero out the .bss segment (uninitialized common data) */
 62	movia	r2, __bss_start		/* presume nothing is between */
 63	movia	r1, _end		/* the .bss and _end. */
 641: 	stb	r0, 0(r2)
 65	addi	r2, r2, 1
 66	bne	r1, r2, 1b
 67	/*
 68	 * set up the stack pointer, some where higher than _end.
 69	 * The stack space must be greater than 32K for decompress.
 70	 */
 71	movia	sp, 0x10000
 72	add	sp, sp, r1
 73	/* save args passed from u-boot, maybe */
 74	addi	sp, sp, -16
 75	stw	r4, 0(sp)
 76	stw	r5, 4(sp)
 77	stw	r6, 8(sp)
 78	stw	r7, 12(sp)
 79	/* decompress the kernel */
 80	call	decompress_kernel
 81	/* pass saved args to kernel */
 82	ldw	r4, 0(sp)
 83	ldw	r5, 4(sp)
 84	ldw	r6, 8(sp)
 85	ldw	r7, 12(sp)
 86
 87	/* flush all data cache after decompressing */
 88	movia	r1, NIOS2_DCACHE_SIZE
 89	movui	r2, NIOS2_DCACHE_LINE_SIZE
 901:	flushd	0(r1)
 91	sub	r1, r1, r2
 92	bgt	r1, r0, 1b
 93	/* flush all instruction cache */
 94	movia	r1, NIOS2_ICACHE_SIZE
 95	movui	r2, NIOS2_ICACHE_LINE_SIZE
 961:	flushi	r1
 97	sub	r1, r1, r2
 98	bgt	r1, r0, 1b
 99	flushp
100	/* jump to start real kernel */
101	movia	r1, (CONFIG_NIOS2_MEM_BASE | CONFIG_NIOS2_KERNEL_REGION_BASE)
102	jmp	r1
103
104	.balign 512
105fake_headers_as_bzImage:
106	.short	0
107	.ascii	"HdrS"
108	.short	0x0202
109	.short	0
110	.short	0
111	.byte	0x00, 0x10
112	.short	0
113	.byte	0
114	.byte	1
115	.byte	0x00, 0x80
116	.long	0
117	.long	0