18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
28c2ecf20Sopenharmony_ci
38c2ecf20Sopenharmony_ci#include <linux/sys.h>
48c2ecf20Sopenharmony_ci#include <linux/init.h>
58c2ecf20Sopenharmony_ci#include <asm/unistd.h>
68c2ecf20Sopenharmony_ci#include <asm/setup.h>
78c2ecf20Sopenharmony_ci#include <asm/segment.h>
88c2ecf20Sopenharmony_ci#include <asm/linkage.h>
98c2ecf20Sopenharmony_ci#include <asm/asm-offsets.h>
108c2ecf20Sopenharmony_ci#include <asm/thread_info.h>
118c2ecf20Sopenharmony_ci#include <asm/errno.h>
128c2ecf20Sopenharmony_ci
138c2ecf20Sopenharmony_ci#if defined(CONFIG_CPU_H8300H)
148c2ecf20Sopenharmony_ci	.h8300h
158c2ecf20Sopenharmony_ci#define SYSCR 0xfee012
168c2ecf20Sopenharmony_ci#define IRAMTOP 0xffff20
178c2ecf20Sopenharmony_ci#endif
188c2ecf20Sopenharmony_ci#if defined(CONFIG_CPU_H8S)
198c2ecf20Sopenharmony_ci	.h8300s
208c2ecf20Sopenharmony_ci#define INTCR 0xffff31
218c2ecf20Sopenharmony_ci#define IRAMTOP 0xffc000
228c2ecf20Sopenharmony_ci#endif
238c2ecf20Sopenharmony_ci
248c2ecf20Sopenharmony_ci	__HEAD
258c2ecf20Sopenharmony_ci	.global	_start
268c2ecf20Sopenharmony_ci_start:
278c2ecf20Sopenharmony_ci	mov.l	#IRAMTOP,sp
288c2ecf20Sopenharmony_ci	/* .bss clear */
298c2ecf20Sopenharmony_ci	mov.l	#_sbss,er5
308c2ecf20Sopenharmony_ci	mov.l	#_ebss,er4
318c2ecf20Sopenharmony_ci	sub.l	er5,er4
328c2ecf20Sopenharmony_ci	shlr	er4
338c2ecf20Sopenharmony_ci	shlr	er4
348c2ecf20Sopenharmony_ci	sub.l	er2,er2
358c2ecf20Sopenharmony_ci1:
368c2ecf20Sopenharmony_ci	mov.l	er2,@er5
378c2ecf20Sopenharmony_ci	adds	#4,er5
388c2ecf20Sopenharmony_ci	dec.l	#1,er4
398c2ecf20Sopenharmony_ci	bne	1b
408c2ecf20Sopenharmony_ci	jsr	@h8300_fdt_init
418c2ecf20Sopenharmony_ci
428c2ecf20Sopenharmony_ci	/* linux kernel start */
438c2ecf20Sopenharmony_ci#if defined(CONFIG_CPU_H8300H)
448c2ecf20Sopenharmony_ci	ldc	#0xd0,ccr	/* running kernel */
458c2ecf20Sopenharmony_ci	mov.l	#SYSCR,er0
468c2ecf20Sopenharmony_ci	bclr	#3,@er0
478c2ecf20Sopenharmony_ci#endif
488c2ecf20Sopenharmony_ci#if defined(CONFIG_CPU_H8S)
498c2ecf20Sopenharmony_ci	ldc	#0x07,exr
508c2ecf20Sopenharmony_ci	bclr	#4,@INTCR:8
518c2ecf20Sopenharmony_ci	bset	#5,@INTCR:8	/* Interrupt mode 2 */
528c2ecf20Sopenharmony_ci	ldc	#0x90,ccr	/* running kernel */
538c2ecf20Sopenharmony_ci#endif
548c2ecf20Sopenharmony_ci	mov.l	#init_thread_union,sp
558c2ecf20Sopenharmony_ci	add.l	#0x2000,sp
568c2ecf20Sopenharmony_ci	jsr	@start_kernel
578c2ecf20Sopenharmony_ci
588c2ecf20Sopenharmony_ci1:
598c2ecf20Sopenharmony_ci	bra	1b
608c2ecf20Sopenharmony_ci
618c2ecf20Sopenharmony_ci	.end
62