/* $NetBSD: s3c2410_vector.S,v 1.2 2005/12/11 12:17:09 christos Exp $ */ /* * Copyright (c) 2003 By Noon Software, Inc. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The names of the authors may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* * Vector and initialize for S3C2410 based systems. */ #include #include #include #define TEMP_STACK_SIZE (4*1024) .code 32 .section ".vectors" reset_vector: b __reset_entry undef: b . swi: b . abrtp: b . abrtd: b . resv: b . irq: b . fiq: b . /* * Normally this code lives on ROM and runs immediately after reset, but * it may run on RAM and/or be called after system has been initialized. */ __reset_entry: mrs r0, cpsr /* SVC mode, Disable interrupts */ bic r0, r0, #PSR_MODE orr r0, r0, #(I32_bit|F32_bit|PSR_SVC32_MODE) msr cpsr, r0 /* Disable MMU, Disable cache */ mrc p15, 0, r10, c1, c0, 0 ldr r0, =(CPU_CONTROL_MMU_ENABLE|CPU_CONTROL_DC_ENABLE|CPU_CONTROL_IC_ENABLE) bic r10, r10, r0 mcr p15, 0, r10, c1, c0, 0 nop nop nop /* invalidate I-cache */ mcr p15, 0, r2, c7, c5, 0 nop nop nop /* Enable I-cache */ orr r10, r10, #CPU_CONTROL_IC_ENABLE mcr p15, 0, r10, c1, c0, 0 nop nop nop /* Stop WDT */ ldr r0, Lwdt_wtcon_addr mov r1, #WTCON_WDTSTOP str r1, [r0] /* Disable all interrupts */ ldr r0, Lintctl_intmsk_addr mov r1, #0x0 str r1, [r0] ldr r9, =S3C2410_GPIO_BASE /* LEDs on SMDK2410 */ mov r1, #0x5500 str r1, [r9, #GPIO_PFCON] mov r1, #0xe0 str r1, [r9, #GPIO_PFDAT] mov r0, pc cmp r0, #S3C2410_SDRAM_START bhs running_on_ram ldr r8, =S3C2410_CLKMAN_BASE ldr r1, [r8,#CLKMAN_CLKDIVN] orr r1, r1, #CLKDIVN_HDIVN|CLKDIVN_PDIVN str r1, [r8,#CLKMAN_CLKDIVN] ldr r1, Lclkman_locktime_data str r1, [r8,#CLKMAN_LOCKTIME] /* Initialize PLL */ ldr r1, Lclkman_mpllcon_data str r1, [r8,#CLKMAN_MPLLCON] ldr r1, Lclkman_upllcon_data str r1, [r8,#CLKMAN_UPLLCON] ldr r9, =S3C2410_GPIO_BASE mov r1, #0xd0 str r1, [r9, #GPIO_PFDAT] #ifdef RAM_INIT_HOOK bl RAM_INIT_HOOK #endif running_on_ram: /* Change Bus mode to Sync */ mrc p15, 0, r0, c1, c0, 0 bic r0, r0, #(1<<31) /* unset iA bit */ orr r0, r0, #(1<<30) /* set nF bit */ mcr p15, 0, r0, c1, c0, 0 nop nop nop ldr r9, =S3C2410_GPIO_BASE mov r1, #0xb0 str r1, [r9, #GPIO_PFDAT] /* set temporary stack */ adr sp, reset_vector /* do we have a room below? */ ldr r1, =(S3C2410_SDRAM_START+TEMP_STACK_SIZE) cmp sp, r1 /* otherwise use top area of RAM */ ldrlo sp, =(S3C2410_SDRAM_START+SDRAM_SIZE) #ifdef IO_INIT_HOOK bl IO_INIT_HOOK #endif ldr r9, =S3C2410_GPIO_BASE mov r1, #0x70 str r1, [r9, #GPIO_PFDAT] b start Lwdt_wtcon_addr: .word (S3C2410_WDT_BASE + WDT_WTCON) Lintctl_intmsk_addr: .word (S3C2410_INTCTL_BASE + INTCTL_INTMSK) .ltorg Lclkman_locktime_data: .word (0xffffff) Lclkman_mpllcon_data: #if XTAL_CLK == 12000000 && FCLK == 180000000 .word 0x00052011 /* M=82, P=1, S=1 */ #else #error illegal XTAL_CLK/FCLK combination #endif Lclkman_upllcon_data: .word 0x00078023 /* M=120, P=2, S=3 */