1#include <linux/init.h> 2#include <asm/thread_info.h> 3 4#if defined(CONFIG_CPU_H8300H) 5 .h8300h 6#define SYSCR 0xfee012 7#define IRAMTOP 0xffff20 8#define NR_INT 64 9#endif 10#if defined(CONFIG_CPU_H8S) 11 .h8300s 12#define INTCR 0xffff31 13#define IRAMTOP 0xffc000 14#define NR_INT 128 15#endif 16 17 __HEAD 18 .global _start 19_start: 20 mov.l #IRAMTOP,sp 21#if !defined(CONFIG_H8300H_SIM) && \ 22 !defined(CONFIG_H8S_SIM) 23 jsr @lowlevel_init 24 25 /* copy .data */ 26 mov.l #_begin_data,er5 27 mov.l #_sdata,er6 28 mov.l #_edata,er4 29 sub.l er6,er4 30 shlr.l er4 31 shlr.l er4 321: 33 mov.l @er5+,er0 34 mov.l er0,@er6 35 adds #4,er6 36 dec.l #1,er4 37 bne 1b 38 /* .bss clear */ 39 mov.l #_sbss,er5 40 mov.l #_ebss,er4 41 sub.l er5,er4 42 shlr er4 43 shlr er4 44 sub.l er0,er0 451: 46 mov.l er0,@er5 47 adds #4,er5 48 dec.l #1,er4 49 bne 1b 50#else 51 /* get cmdline from gdb */ 52 jsr @0xcc 53 ;; er0 - argc 54 ;; er1 - argv 55 mov.l #command_line,er3 56 adds #4,er1 57 dec.l #1,er0 58 beq 4f 591: 60 mov.l @er1+,er2 612: 62 mov.b @er2+,r4l 63 beq 3f 64 mov.b r4l,@er3 65 adds #1,er3 66 bra 2b 673: 68 mov.b #' ',r4l 69 mov.b r4l,@er3 70 adds #1,er3 71 dec.l #1,er0 72 bne 1b 73 subs #1,er3 74 mov.b #0,r4l 75 mov.b r4l,@er3 764: 77#endif 78 sub.l er0,er0 79 jsr @h8300_fdt_init 80 /* linux kernel start */ 81#if defined(CONFIG_CPU_H8300H) 82 ldc #0xd0,ccr /* running kernel */ 83 mov.l #SYSCR,er0 84 bclr #3,@er0 85#endif 86#if defined(CONFIG_CPU_H8S) 87 ldc #0x07,exr 88 bclr #4,@INTCR:8 89 bset #5,@INTCR:8 /* Interrupt mode 2 */ 90 ldc #0x90,ccr /* running kernel */ 91#endif 92 mov.l #init_thread_union,sp 93 add.l #0x2000,sp 94 jsr @start_kernel 95 961: 97 bra 1b 98 99#if defined(CONFIG_ROMKERNEL) 100 /* interrupt vector */ 101 .section .vectors,"ax" 102 .long _start 103 .long _start 104vector = 2 105 .rept NR_INT - 2 106 .long _interrupt_redirect_table+vector*4 107vector = vector + 1 108 .endr 109#endif 110 .end 111