Home | History | Annotate | Line # | Download | only in evbsh3
locore.S revision 1.12
      1  1.12       uwe /*	$NetBSD: locore.S,v 1.12 2020/07/12 01:52:22 uwe Exp $	*/
      2   1.6       agc 
      3   1.6       agc /*-
      4   1.6       agc  * Copyright (c) 1990 The Regents of the University of California.
      5   1.6       agc  * All rights reserved.
      6   1.6       agc  *
      7   1.6       agc  * This code is derived from software contributed to Berkeley by
      8   1.6       agc  * William Jolitz.
      9   1.6       agc  *
     10   1.6       agc  * Redistribution and use in source and binary forms, with or without
     11   1.6       agc  * modification, are permitted provided that the following conditions
     12   1.6       agc  * are met:
     13   1.6       agc  * 1. Redistributions of source code must retain the above copyright
     14   1.6       agc  *    notice, this list of conditions and the following disclaimer.
     15   1.6       agc  * 2. Redistributions in binary form must reproduce the above copyright
     16   1.6       agc  *    notice, this list of conditions and the following disclaimer in the
     17   1.6       agc  *    documentation and/or other materials provided with the distribution.
     18   1.6       agc  * 3. Neither the name of the University nor the names of its contributors
     19   1.6       agc  *    may be used to endorse or promote products derived from this software
     20   1.6       agc  *    without specific prior written permission.
     21   1.6       agc  *
     22   1.6       agc  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
     23   1.6       agc  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     24   1.6       agc  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
     25   1.6       agc  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
     26   1.6       agc  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     27   1.6       agc  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
     28   1.6       agc  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     29   1.6       agc  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
     30   1.6       agc  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
     31   1.6       agc  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     32   1.6       agc  * SUCH DAMAGE.
     33   1.6       agc  *
     34   1.6       agc  *	@(#)locore.s	7.3 (Berkeley) 5/13/91
     35   1.6       agc  */
     36   1.1       uch 
     37   1.1       uch /*-
     38   1.1       uch  * Copyright (c) 1993, 1994, 1995, 1997
     39   1.1       uch  *	Charles M. Hannum.  All rights reserved.
     40   1.1       uch  *
     41   1.1       uch  * This code is derived from software contributed to Berkeley by
     42   1.1       uch  * William Jolitz.
     43   1.1       uch  *
     44   1.1       uch  * Redistribution and use in source and binary forms, with or without
     45   1.1       uch  * modification, are permitted provided that the following conditions
     46   1.1       uch  * are met:
     47   1.1       uch  * 1. Redistributions of source code must retain the above copyright
     48   1.1       uch  *    notice, this list of conditions and the following disclaimer.
     49   1.1       uch  * 2. Redistributions in binary form must reproduce the above copyright
     50   1.1       uch  *    notice, this list of conditions and the following disclaimer in the
     51   1.1       uch  *    documentation and/or other materials provided with the distribution.
     52   1.1       uch  * 3. All advertising materials mentioning features or use of this software
     53   1.1       uch  *    must display the following acknowledgement:
     54   1.1       uch  *	This product includes software developed by the University of
     55   1.1       uch  *	California, Berkeley and its contributors.
     56   1.1       uch  * 4. Neither the name of the University nor the names of its contributors
     57   1.1       uch  *    may be used to endorse or promote products derived from this software
     58   1.1       uch  *    without specific prior written permission.
     59   1.1       uch  *
     60   1.1       uch  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
     61   1.1       uch  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     62   1.1       uch  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
     63   1.1       uch  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
     64   1.1       uch  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     65   1.1       uch  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
     66   1.1       uch  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     67   1.1       uch  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
     68   1.1       uch  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
     69   1.1       uch  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     70   1.1       uch  * SUCH DAMAGE.
     71   1.1       uch  *
     72   1.1       uch  *	@(#)locore.s	7.3 (Berkeley) 5/13/91
     73   1.1       uch  */
     74   1.1       uch 
     75   1.5       uch #include "opt_cputype.h"
     76   1.2       uch #include "opt_memsize.h"
     77   1.1       uch #include "assym.h"
     78   1.1       uch 
     79   1.2       uch #if defined(SH3) && defined(SH4)
     80   1.2       uch #error "evbsh3 port don't support SH3,SH4 common kernel."
     81   1.2       uch #endif
     82   1.1       uch 
     83   1.2       uch #include <sh3/asm.h>
     84   1.4       uch #include <sh3/exception.h>
     85   1.2       uch #include <sh3/locore.h>
     86   1.2       uch #include <sh3/mmu_sh3.h>
     87   1.2       uch #include <sh3/mmu_sh4.h>
     88   1.2       uch #include <sh3/cache_sh3.h>
     89   1.2       uch #include <sh3/cache_sh4.h>
     90   1.1       uch 
     91   1.5       uch #define	INIT_STACK							\
     92   1.5       uch 	((IOM_RAM_BEGIN + IOM_RAM_SIZE - 0x00001000) | 0x80000000)
     93   1.1       uch 
     94   1.1       uch NENTRY(start)
     95  1.11   tsutsui ALTENTRY(kernel_text)
     96   1.1       uch 	/* Set SP to initial position */
     97   1.1       uch 	mov.l	XLtmpstk, r15
     98   1.1       uch 
     99   1.2       uch 	/* Mask all interrupt */
    100   1.2       uch 	__INTR_MASK(r0, r1)
    101   1.1       uch 
    102   1.1       uch 	/* Set Register Bank to Bank 0 */
    103   1.1       uch 	mov.l	SR_init, r0
    104   1.1       uch 	ldc	r0, sr
    105   1.1       uch 
    106   1.2       uch 	/* MMU off */
    107   1.1       uch 	xor	r0, r0
    108   1.2       uch 	MOV	(MMUCR, r2)
    109   1.2       uch 	mov.l	r0, @r2
    110   1.1       uch 
    111   1.1       uch 	bra	start1
    112   1.1       uch 	nop
    113   1.1       uch 	.align	2
    114   1.1       uch SR_init:	.long	0x500000F0
    115   1.2       uch REG_SYMBOL(MMUCR)
    116   1.1       uch start1:
    117   1.1       uch 
    118   1.1       uch #ifdef ROMIMAGE
    119   1.1       uch 	/* Initialize BUS State Control Regs. */
    120   1.1       uch 	mov.l	_ROM_START, r3
    121   1.1       uch 	mov.l	XL_ram_start, r4
    122   1.1       uch 	mov.l	@r4, r4
    123   1.1       uch 	sub	r3, r4
    124   1.7       wiz 	/* Set Bus State Controller */
    125   1.1       uch 	mov.l	XLInitializeBsc, r0
    126   1.1       uch 	sub	r4, r0
    127   1.1       uch 	jsr	@r0
    128   1.1       uch 	nop
    129   1.1       uch 
    130   1.1       uch 	/* Move kernel image from ROM area to RAM area */
    131   1.1       uch 	mov.l	___end, r0
    132   1.1       uch 	mov.l	___start, r1
    133   1.1       uch 	mov.l	_KERNBASE, r2
    134   1.1       uch 	sub	r2, r0
    135   1.1       uch 	sub	r2, r1
    136   1.1       uch 	sub	r1, r0
    137   1.1       uch 	add	#4, r0		/* size of bytes to be copied */
    138   1.1       uch 	shlr2	r0		/* number of long word */
    139   1.1       uch 	mov.l	_ROM_START, r3
    140   1.1       uch 	add	r3, r1		/* src address */
    141   1.1       uch 	mov.l	___start, r3
    142   1.1       uch 	sub	r2, r3
    143   1.1       uch 	mov.l	XL_ram_start, r4
    144   1.1       uch 	mov.l	@r4, r4
    145   1.1       uch 	add	r4, r3		/* dest address */
    146   1.1       uch 1:
    147   1.1       uch 	mov.l	@r1+, r4
    148   1.1       uch 	mov.l	r4, @r3
    149   1.1       uch 	add	#4, r3
    150   1.1       uch 	dt	r0		/* decrement and Test */
    151   1.1       uch 	bf	1b
    152   1.1       uch 	/* kernel image copy end */
    153   1.1       uch 
    154   1.1       uch 	mov.l	LXstart_in_RAM, r0
    155   1.1       uch 	jmp	@r0		/* jump to RAM area */
    156   1.1       uch 	nop
    157   1.1       uch 
    158   1.1       uch 	.align	2
    159   1.1       uch LXstart_in_RAM:
    160   1.1       uch 	.long	start_in_RAM
    161   1.1       uch XL_ram_start:
    162   1.1       uch 	.long	_C_LABEL(ram_start)
    163   1.2       uch #else /* ROMIMAGE */
    164   1.1       uch #ifndef	DONT_INIT_BSC
    165   1.7       wiz 	/* Set Bus State Controller */
    166   1.1       uch 	mov.l	XLInitializeBsc, r0
    167   1.1       uch 	jsr	@r0
    168   1.1       uch 	nop
    169   1.2       uch #endif /* !DONT_INIT_BSC */
    170   1.2       uch #endif /* ROMIMAGE */
    171   1.1       uch 
    172   1.1       uch start_in_RAM:
    173   1.1       uch 	mova	1f, r0
    174   1.1       uch 	mov	r0, r4
    175   1.1       uch 	mov.l	XLinitSH3, r0
    176   1.1       uch 	jsr	@r0		/* call initSH3() */
    177   1.1       uch 	nop
    178   1.1       uch 
    179   1.1       uch 	.align	2
    180   1.1       uch 1:
    181   1.1       uch 
    182   1.1       uch #ifdef SH4
    183   1.1       uch 	/* CCR must be accessed from P2 area */
    184   1.1       uch 	mova	cache_on, r0
    185   1.1       uch 	mov	r0, r5
    186   1.1       uch 	mov.l	XLtoP2, r1
    187   1.1       uch 	add	r1, r5
    188   1.1       uch 	mova	main_label, r0
    189   1.1       uch 	mov	r0, r2
    190   1.2       uch 	MOV	(CCR, r3)
    191   1.1       uch 	mov.l	XL_CCRVAL, r4
    192   1.1       uch 	jmp	@r5
    193   1.1       uch 	nop
    194   1.1       uch 
    195   1.1       uch 	.align	2
    196   1.1       uch cache_on:
    197   1.1       uch 	mov.l	r4, @r3 /* Write to CCR */
    198   1.1       uch 	nop
    199   1.1       uch 	nop
    200   1.1       uch 	nop
    201   1.1       uch 	nop
    202   1.1       uch 	nop
    203   1.1       uch 	nop
    204   1.1       uch 	nop
    205   1.1       uch 	nop
    206   1.1       uch 	jmp @r2
    207   1.1       uch 	nop
    208   1.1       uch 
    209   1.1       uch 	.align	2
    210   1.1       uch main_label:
    211   1.2       uch #endif /* SH4 */
    212   1.1       uch 	mov.l	XLmain, r0
    213   1.1       uch 	jsr	@r0		/* call main() */
    214   1.1       uch 	nop
    215   1.1       uch 
    216   1.1       uch 		.align	2
    217   1.1       uch 
    218   1.1       uch #ifndef	DONT_INIT_BSC
    219   1.1       uch XLInitializeBsc:.long	_C_LABEL(InitializeBsc)
    220   1.2       uch #endif /* DONT_INIT_BSC */
    221   1.1       uch ___start:	.long	start
    222  1.10  uebayasi ___etext:	.long	_C_LABEL(etext)
    223  1.10  uebayasi ___end:		.long	_C_LABEL(end)
    224   1.1       uch XLtmpstk:	.long	INIT_STACK
    225   1.2       uch _KERNBASE:	.long	0x8c000000
    226  1.12       uwe #ifdef ROMIMAGE
    227   1.1       uch _ROM_START:	.long	IOM_ROM_BEGIN
    228  1.12       uwe #endif
    229   1.1       uch XLinitSH3:	.long	_C_LABEL(initSH3)
    230   1.1       uch XLmain:		.long	_C_LABEL(main)
    231   1.1       uch XLtoP2:		.long	0x20000000
    232   1.2       uch REG_SYMBOL(CCR)
    233   1.1       uch #ifdef SH4
    234   1.1       uch XL_CCRVAL:	.long	0x0909 /* Operand cache ON */
    235   1.2       uch #endif /* SH4 */
    236   1.1       uch 
    237   1.1       uch load_and_reset:
    238   1.1       uch 	mov.l	XL_start_address, r0
    239   1.1       uch 	mov	r0, r8
    240   1.1       uch 	mov.l	@r4+, r1	/* r1 = osimage size */
    241   1.1       uch 	mov.l	@r4+, r2	/* r2 = check sum */
    242   1.1       uch 	shlr2	r1		/* r1 = osimage size in dword */
    243   1.1       uch 1:
    244   1.1       uch 	mov.l	@r4+, r3
    245   1.1       uch 	mov.l	r3, @r0
    246   1.1       uch 	add	#4, r0
    247   1.1       uch 	dt	r1
    248   1.1       uch 	bf	1b
    249   1.1       uch 
    250   1.1       uch 	jmp	@r8		/* jump to start address */
    251   1.1       uch 	nop
    252   1.1       uch 
    253   1.1       uch 	.align	2
    254   1.1       uch XL_start_address:
    255   1.1       uch 	.long	IOM_RAM_BEGIN + 0x00010000
    256   1.1       uch load_and_reset_end:
    257   1.1       uch 
    258   1.1       uch ENTRY(XLoadAndReset)
    259   1.2       uch 	__INTR_MASK(r0, r1)
    260   1.1       uch 	/* copy trampoline code to RAM area top */
    261   1.1       uch 	mov.l	XL_load_and_reset, r0
    262   1.1       uch 	mov.l	XL_load_and_reset_end, r1
    263   1.1       uch 	mov.l	XL_load_trampoline_addr, r2
    264   1.1       uch 	mov	r2, r8
    265   1.1       uch 	sub	r0, r1		/* r1 = bytes to be copied */
    266   1.1       uch 1:	mov.b	@r0+, r3
    267   1.1       uch 	mov.b	r3, @r2
    268   1.1       uch 	add	#1, r2
    269   1.1       uch 	dt	r1
    270   1.1       uch 	bf	1b
    271   1.1       uch 
    272   1.1       uch 	jmp	@r8		/* jump to trampoline code */
    273   1.1       uch 	nop
    274   1.1       uch 
    275   1.1       uch 	.align	2
    276   1.1       uch XL_load_trampoline_addr:
    277   1.1       uch 	.long	IOM_RAM_BEGIN + 0x00008000
    278   1.1       uch XL_load_and_reset:
    279   1.1       uch 	.long	load_and_reset
    280   1.1       uch XL_load_and_reset_end:
    281   1.1       uch 	.long	load_and_reset_end
    282