/* SPDX-License-Identifier: GPL-2.0 */ #include <linux/sys.h> #include <linux/init.h> #include <asm/unistd.h> #include <asm/setup.h> #include <asm/segment.h> #include <asm/linkage.h> #include <asm/asm-offsets.h> #include <asm/thread_info.h> #include <asm/errno.h> #if defined([31mCONFIG_CPU_H8300H[0m) .h8300h #define SYSCR 0xfee012 #define IRAMTOP 0xffff20 #endif #if defined([31mCONFIG_CPU_H8S[0m) .h8300s #define INTCR 0xffff31 #define IRAMTOP 0xffc000 #endif __HEAD .global _start _start: mov.l #IRAMTOP,sp /* .bss clear */ mov.l #_sbss,er5 mov.l #_ebss,er4 sub.l er5,er4 shlr er4 shlr er4 sub.l er2,er2 1: mov.l er2,@er5 adds #4,er5 dec.l #1,er4 bne 1b jsr @h8300_fdt_init /* linux kernel start */ #if defined([31mCONFIG_CPU_H8300H[0m) ldc #0xd0,ccr /* running kernel */ mov.l #SYSCR,er0 bclr #3,@er0 #endif #if defined([31mCONFIG_CPU_H8S[0m) 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 .end |