112 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			112 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
| /* SPDX-License-Identifier: GPL-2.0 */
 | |
| #include <linux/init.h>
 | |
| #include <asm/thread_info.h>
 | |
| 
 | |
| #if defined(CONFIG_CPU_H8300H)
 | |
| 	.h8300h
 | |
| #define SYSCR 0xfee012
 | |
| #define IRAMTOP 0xffff20
 | |
| #define NR_INT 64
 | |
| #endif
 | |
| #if defined(CONFIG_CPU_H8S)
 | |
| 	.h8300s
 | |
| #define INTCR 0xffff31
 | |
| #define IRAMTOP 0xffc000
 | |
| #define NR_INT 128
 | |
| #endif
 | |
| 
 | |
| 	__HEAD
 | |
| 	.global	_start
 | |
| _start:
 | |
| 	mov.l	#IRAMTOP,sp
 | |
| #if !defined(CONFIG_H8300H_SIM) && \
 | |
|     !defined(CONFIG_H8S_SIM)
 | |
| 	jsr	@lowlevel_init
 | |
| 
 | |
| 	/* copy .data */
 | |
| 	mov.l	#_begin_data,er5
 | |
| 	mov.l	#_sdata,er6
 | |
| 	mov.l	#_edata,er4
 | |
| 	sub.l	er6,er4
 | |
| 	shlr.l	er4
 | |
| 	shlr.l	er4
 | |
| 1:
 | |
| 	mov.l	@er5+,er0
 | |
| 	mov.l	er0,@er6
 | |
| 	adds	#4,er6
 | |
| 	dec.l	#1,er4
 | |
| 	bne	1b
 | |
| 	/* .bss clear */
 | |
| 	mov.l	#_sbss,er5
 | |
| 	mov.l	#_ebss,er4
 | |
| 	sub.l	er5,er4
 | |
| 	shlr	er4
 | |
| 	shlr	er4
 | |
| 	sub.l	er0,er0
 | |
| 1:
 | |
| 	mov.l	er0,@er5
 | |
| 	adds	#4,er5
 | |
| 	dec.l	#1,er4
 | |
| 	bne	1b
 | |
| #else
 | |
| 	/* get cmdline from gdb */
 | |
| 	jsr	@0xcc
 | |
| 	;; er0 - argc
 | |
| 	;; er1 - argv
 | |
| 	mov.l	#command_line,er3
 | |
| 	adds	#4,er1
 | |
| 	dec.l	#1,er0
 | |
| 	beq	4f
 | |
| 1:
 | |
| 	mov.l	@er1+,er2
 | |
| 2:
 | |
| 	mov.b	@er2+,r4l
 | |
| 	beq	3f
 | |
| 	mov.b	r4l,@er3
 | |
| 	adds	#1,er3
 | |
| 	bra	2b
 | |
| 3:
 | |
| 	mov.b	#' ',r4l
 | |
| 	mov.b	r4l,@er3
 | |
| 	adds	#1,er3
 | |
| 	dec.l	#1,er0
 | |
| 	bne	1b
 | |
| 	subs	#1,er3
 | |
| 	mov.b	#0,r4l
 | |
| 	mov.b	r4l,@er3
 | |
| 4:
 | |
| #endif
 | |
| 	sub.l	er0,er0
 | |
| 	jsr	@h8300_fdt_init
 | |
| 	/* linux kernel start */
 | |
| #if defined(CONFIG_CPU_H8300H)
 | |
| 	ldc	#0xd0,ccr	/* running kernel */
 | |
| 	mov.l	#SYSCR,er0
 | |
| 	bclr	#3,@er0
 | |
| #endif
 | |
| #if defined(CONFIG_CPU_H8S)
 | |
| 	ldc	#0x07,exr
 | |
| 	bclr	#4,@INTCR:8
 | |
| 	bset	#5,@INTCR:8	/* Interrupt mode 2 */
 | |
| 	ldc	#0x90,ccr	/* running kernel */
 | |
| #endif
 | |
| 	mov.l	#init_thread_union,sp
 | |
| 	add.l	#0x2000,sp
 | |
| 	jsr	@start_kernel
 | |
| 
 | |
| 1:
 | |
| 	bra	1b
 | |
| 
 | |
| #if defined(CONFIG_ROMKERNEL)
 | |
| 	/* interrupt vector */
 | |
| 	.section .vectors,"ax"
 | |
| 	.long	_start
 | |
| 	.long	_start
 | |
| vector	=	2
 | |
| 	.rept	NR_INT - 2
 | |
| 	.long	_interrupt_redirect_table+vector*4
 | |
| vector	=	vector + 1
 | |
| 	.endr
 | |
| #endif
 | |
| 	.end
 | 
