Home | History | Annotate | Line # | Download | only in board
      1  1.2  christos /*	$NetBSD: s3c2800_vector.S,v 1.2 2005/12/11 12:17:09 christos Exp $	*/
      2  1.1       bsh 
      3  1.1       bsh /*
      4  1.1       bsh  * Copyright (c) 2002, 2003 Fujitsu Component Limited
      5  1.1       bsh  * Copyright (c) 2002, 2003 Genetec Corporation
      6  1.1       bsh  * All rights reserved.
      7  1.1       bsh  *
      8  1.1       bsh  * Redistribution and use in source and binary forms, with or without
      9  1.1       bsh  * modification, are permitted provided that the following conditions
     10  1.1       bsh  * are met:
     11  1.1       bsh  * 1. Redistributions of source code must retain the above copyright
     12  1.1       bsh  *    notice, this list of conditions and the following disclaimer.
     13  1.1       bsh  * 2. Redistributions in binary form must reproduce the above copyright
     14  1.1       bsh  *    notice, this list of conditions and the following disclaimer in the
     15  1.1       bsh  *    documentation and/or other materials provided with the distribution.
     16  1.1       bsh  * 3. Neither the name of The Fujitsu Component Limited nor the name of
     17  1.1       bsh  *    Genetec corporation may not be used to endorse or promote products
     18  1.1       bsh  *    derived from this software without specific prior written permission.
     19  1.1       bsh  *
     20  1.1       bsh  * THIS SOFTWARE IS PROVIDED BY FUJITSU COMPONENT LIMITED AND GENETEC
     21  1.1       bsh  * CORPORATION ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
     22  1.1       bsh  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     23  1.1       bsh  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
     24  1.1       bsh  * DISCLAIMED.  IN NO EVENT SHALL FUJITSU COMPONENT LIMITED OR GENETEC
     25  1.1       bsh  * CORPORATION BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     26  1.1       bsh  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     27  1.1       bsh  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
     28  1.1       bsh  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
     29  1.1       bsh  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     30  1.1       bsh  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
     31  1.1       bsh  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     32  1.1       bsh  * SUCH DAMAGE.
     33  1.1       bsh  */
     34  1.1       bsh 
     35  1.1       bsh /*
     36  1.1       bsh  * Vector and initialize for S3C2800 based systems.
     37  1.1       bsh  */
     38  1.1       bsh 
     39  1.1       bsh #include <machine/asm.h>
     40  1.1       bsh #include <arm/armreg.h>
     41  1.1       bsh #include <arm/s3c2xx0/s3c2800reg.h>
     42  1.1       bsh 
     43  1.1       bsh #ifndef PLLCON_MDIV_VAL
     44  1.1       bsh /* constans to get 200MHz FCLK */
     45  1.1       bsh #if XTAL_CLK == 10000000 || XTAL_CLK == 10
     46  1.1       bsh #define PLLCON_MDIV_VAL	0x5c
     47  1.1       bsh #define PLLCON_PDIV_VAL	3
     48  1.1       bsh #define PLLCON_SDIV_VAL	0
     49  1.1       bsh #elif XTAL_CLK == 8000000 || XTAL_CLK == 8
     50  1.1       bsh #define PLLCON_MDIV_VAL	0x5c
     51  1.1       bsh #define PLLCON_PDIV_VAL	2
     52  1.1       bsh #define PLLCON_SDIV_VAL	0
     53  1.1       bsh #elif XTAL_CLK == 6000000 || XTAL_CLK == 6
     54  1.1       bsh #define PLLCON_MDIV_VAL	0x5c
     55  1.1       bsh #define PLLCON_PDIV_VAL	1
     56  1.1       bsh #define PLLCON_SDIV_VAL	0
     57  1.1       bsh #else
     58  1.1       bsh #error define XTAL_CLK to 10, 8 or 6MHz
     59  1.1       bsh #endif	/* XTAL_CLK */
     60  1.1       bsh #endif	/* PLLCON_MDIV_VAL */
     61  1.1       bsh 
     62  1.1       bsh #ifndef SDRAM_START
     63  1.1       bsh #define SDRAM_START	S3C2800_DBANK0_START
     64  1.1       bsh #endif
     65  1.1       bsh #ifndef SDRAM_SIZE
     66  1.1       bsh #define SDRAM_SIZE	0x01000000			    /* 16MB */
     67  1.1       bsh #endif
     68  1.1       bsh 
     69  1.1       bsh #define TEMP_STACK_SIZE	(4*1024)
     70  1.1       bsh 
     71  1.1       bsh 
     72  1.1       bsh 	.code 32
     73  1.1       bsh 	.section ".vectors"
     74  1.1       bsh 
     75  1.1       bsh reset_vector:
     76  1.1       bsh 	b	__reset_entry
     77  1.1       bsh undef:
     78  1.1       bsh 	b	.
     79  1.1       bsh swi:
     80  1.1       bsh 	b	.
     81  1.1       bsh abrtp:
     82  1.1       bsh 	b	.
     83  1.1       bsh abrtd:
     84  1.1       bsh 	b	.
     85  1.1       bsh resv:
     86  1.1       bsh 	b	.
     87  1.1       bsh irq:
     88  1.1       bsh 	b	.
     89  1.1       bsh fiq:
     90  1.1       bsh 	b	.
     91  1.1       bsh 
     92  1.1       bsh /*
     93  1.1       bsh  * Normally this code lives on ROM and runs immediately after reset, but
     94  1.1       bsh  * it may run on RAM and/or be called after system has been initialized.
     95  1.1       bsh  */
     96  1.1       bsh __reset_entry:
     97  1.1       bsh 	mrs	r0, cpsr
     98  1.1       bsh 	/* SVC mode, Disable interrupts */
     99  1.1       bsh 	bic	r0, r0, #PSR_MODE
    100  1.1       bsh 	orr	r0, r0, #(I32_bit|F32_bit|PSR_SVC32_MODE)
    101  1.1       bsh 	msr	cpsr, r0
    102  1.1       bsh 
    103  1.1       bsh 	/* Disable MMU, Disable cache */
    104  1.1       bsh 	mrc	p15, 0, r10, c1, c0, 0
    105  1.1       bsh 	ldr	r0, =(CPU_CONTROL_MMU_ENABLE|CPU_CONTROL_DC_ENABLE|CPU_CONTROL_IC_ENABLE)
    106  1.1       bsh 	bic	r10, r10, r0
    107  1.1       bsh 	mcr	p15, 0, r10, c1, c0, 0
    108  1.1       bsh 	nop
    109  1.1       bsh 	nop
    110  1.1       bsh 	nop
    111  1.1       bsh 
    112  1.1       bsh 	/* invalidate I-cache */
    113  1.1       bsh 	mcr	p15, 0, r2, c7, c5, 0
    114  1.1       bsh 	nop
    115  1.1       bsh 	nop
    116  1.1       bsh 	nop
    117  1.1       bsh 
    118  1.1       bsh 	/* Enable I-cache */
    119  1.1       bsh 	orr	r10, r10, #CPU_CONTROL_IC_ENABLE
    120  1.1       bsh 	mcr	p15, 0, r10, c1, c0, 0
    121  1.1       bsh 	nop
    122  1.1       bsh 	nop
    123  1.1       bsh 	nop
    124  1.1       bsh 
    125  1.1       bsh 	/* Stop WDT */
    126  1.1       bsh 	ldr	r0, Lwdt_wtcon_addr
    127  1.1       bsh 	mov	r1, #WTCON_WDTSTOP
    128  1.1       bsh 	str	r1, [r0]
    129  1.1       bsh 
    130  1.1       bsh 	/* Disable all interrupts */
    131  1.1       bsh 	ldr	r0, Lintctl_intmsk_addr
    132  1.1       bsh 	mov	r1, #0x0
    133  1.1       bsh 	str	r1, [r0]
    134  1.1       bsh 
    135  1.1       bsh #if 0
    136  1.1       bsh 	ldr	r9, =S3C2800_GPIO_BASE
    137  1.1       bsh 	/* LEDs on SMDK2800 */
    138  1.1       bsh 	mov	r1, #0x3f
    139  1.1       bsh 	strh	r1, [r9, #GPIO_PCONC]
    140  1.1       bsh 
    141  1.1       bsh 	mov	r0, #0xdfff	    /* set PB7 to AHBCLK out */
    142  1.1       bsh 	strh	r0, [r9,GPIO_PCONB]
    143  1.1       bsh #endif
    144  1.1       bsh 
    145  1.1       bsh 	mov	r0, pc
    146  1.1       bsh 	cmp	r0, #SDRAM_START
    147  1.1       bsh 	bhs	running_on_ram
    148  1.1       bsh 
    149  1.1       bsh #ifdef RAM_INIT_HOOK
    150  1.1       bsh 	bl	RAM_INIT_HOOK
    151  1.1       bsh #endif
    152  1.1       bsh 	ldr	r8, =S3C2800_CLKMAN_BASE
    153  1.1       bsh 	ldr	r1, [r8,#CLKMAN_CLKCON]
    154  1.1       bsh 	orr	r1, r1, #CLKCON_HCLK  /* AHB clock = FCLK/2 */
    155  1.1       bsh 	str	r1, [r8,#CLKMAN_CLKCON]
    156  1.1       bsh 
    157  1.1       bsh 	ldr	r1, Lclkman_locktime_data
    158  1.1       bsh 	str	r1, [r8,#CLKMAN_LOCKTIME]
    159  1.1       bsh 
    160  1.1       bsh 	/* Initialize PLL */
    161  1.1       bsh 	ldr	r1, Lclkman_pllcon_data
    162  1.1       bsh 	str	r1, [r8,#CLKMAN_PLLCON]
    163  1.1       bsh 
    164  1.1       bsh running_on_ram:
    165  1.1       bsh 	/* Change Bus mode to Sync */
    166  1.1       bsh 	mrc	p15, 0, r0, c1, c0, 0
    167  1.1       bsh 	bic	r0, r0, #(1<<31)		/* unset iA bit */
    168  1.1       bsh 	orr	r0, r0, #(1<<30)		/* set nF bit */
    169  1.1       bsh 	mcr	p15, 0, r0, c1, c0, 0
    170  1.1       bsh 	nop
    171  1.1       bsh 	nop
    172  1.1       bsh 	nop
    173  1.1       bsh 
    174  1.1       bsh 	/* set temporary stack */
    175  1.1       bsh 	adr	sp, reset_vector
    176  1.1       bsh 	/* do we have a room below? */
    177  1.1       bsh 	ldr	r1, =(SDRAM_START+TEMP_STACK_SIZE)
    178  1.1       bsh 	cmp	sp, r1
    179  1.1       bsh 	/* otherwise use top area of RAM */
    180  1.1       bsh 	ldrlo	sp, =(SDRAM_START+SDRAM_SIZE)
    181  1.1       bsh 
    182  1.1       bsh #ifdef IO_INIT_HOOK
    183  1.1       bsh 	bl	IO_INIT_HOOK
    184  1.1       bsh #endif
    185  1.1       bsh #ifdef SELFCOPY_TO_FLASH
    186  1.1       bsh 	/* Are we running on RAM? */
    187  1.1       bsh 	mov	r0, pc
    188  1.1       bsh 	cmp	r0, #SDRAM_START
    189  1.1       bsh 	blo	99f      /* no, skip */
    190  1.1       bsh 	adr	r0, reset_vector
    191  1.1       bsh 	ldr	r1, =__rom_size__
    192  1.1       bsh 	b	selfcopy_to_flash
    193  1.1       bsh 99:
    194  1.1       bsh #endif
    195  1.1       bsh 	b	start
    196  1.1       bsh 
    197  1.1       bsh Lwdt_wtcon_addr:
    198  1.1       bsh 	.word	(S3C2800_WDT_BASE + WDT_WTCON)
    199  1.1       bsh 
    200  1.1       bsh Lintctl_intmsk_addr:
    201  1.1       bsh 	.word	(S3C2800_INTCTL_BASE + INTCTL_INTMSK)
    202  1.1       bsh 
    203  1.1       bsh 	.ltorg
    204  1.1       bsh 
    205  1.1       bsh Lclkman_locktime_data:
    206  1.1       bsh 	.word	(0xfff)
    207  1.1       bsh 
    208  1.1       bsh Lclkman_pllcon_data:
    209  1.1       bsh 	.word	(PLLCON_MDIV_VAL<<PLLCON_MDIV_SHIFT) | \
    210  1.1       bsh 		(PLLCON_PDIV_VAL<<PLLCON_PDIV_SHIFT) | \
    211  1.1       bsh 		(PLLCON_SDIV_VAL<<PLLCON_SDIV_SHIFT)
    212  1.1       bsh 
    213