| /* | |
| * Copyright (C) 2008 Renesas Solutions Corp. | |
| * Copyright (C) 2008 Nobuhiro Iwamatsu <iwamatsu.nobuhiro@renesas.com> | |
| * Copyright (C) 2007 Kenati Technologies, Inc. | |
| * | |
| * board/sh7763rdp/lowlevel_init.S | |
| * | |
| * This program is free software; you can redistribute it and/or | |
| * modify it under the terms of the GNU General Public License as | |
| * published by the Free Software Foundation; either version 2 of | |
| * the License, or (at your option) any later version. | |
| * | |
| * This program is distributed in the hope that it will be useful, | |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| * GNU General Public License for more details. | |
| * | |
| * You should have received a copy of the GNU General Public License | |
| * along with this program; if not, write to the Free Software | |
| * Foundation, Inc., 59 Temple Place, Suite 330, Boston, | |
| * MA 02111-1307 USA | |
| */ | |
| #include <config.h> | |
| #include <version.h> | |
| #include <asm/processor.h> | |
| .global lowlevel_init | |
| .text | |
| .align 2 | |
| lowlevel_init: | |
| mov.l WDTCSR_A, r1 /* Watchdog Control / Status Register */ | |
| mov.l WDTCSR_D, r0 | |
| mov.l r0, @r1 | |
| mov.l WDTST_A, r1 /* Watchdog Stop Time Register */ | |
| mov.l WDTST_D, r0 | |
| mov.l r0, @r1 | |
| mov.l WDTBST_A, r1 /* 0xFFCC0008 (Watchdog Base Stop Time Register */ | |
| mov.l WDTBST_D, r0 | |
| mov.l r0, @r1 | |
| mov.l CCR_A, r1 /* Address of Cache Control Register */ | |
| mov.l CCR_CACHE_ICI_D, r0 /* Instruction Cache Invalidate */ | |
| mov.l r0, @r1 | |
| mov.l MMUCR_A, r1 /* Address of MMU Control Register */ | |
| mov.l MMU_CONTROL_TI_D, r0 /* TI == TLB Invalidate bit */ | |
| mov.l r0, @r1 | |
| mov.l MSTPCR0_A, r1 /* Address of Power Control Register 0 */ | |
| mov.l MSTPCR0_D, r0 | |
| mov.l r0, @r1 | |
| mov.l MSTPCR1_A, r1 /*i Address of Power Control Register 1 */ | |
| mov.l MSTPCR1_D, r0 | |
| mov.l r0, @r1 | |
| mov.l RAMCR_A,r1 | |
| mov.l RAMCR_D,r0 | |
| mov.l r0, @r1 | |
| mov.l MMSELR_A,r1 | |
| mov.l MMSELR_D,r0 | |
| synco | |
| mov.l r0, @r1 | |
| mov.l @r1,r2 /* execute two reads after setting MMSELR*/ | |
| mov.l @r1,r2 | |
| synco | |
| /* issue memory read */ | |
| mov.l DDRSD_START_A,r1 /* memory address to read*/ | |
| mov.l @r1,r0 | |
| synco | |
| mov.l MIM8_A,r1 | |
| mov.l MIM8_D,r0 | |
| mov.l r0,@r1 | |
| mov.l MIMC_A,r1 | |
| mov.l MIMC_D1,r0 | |
| mov.l r0,@r1 | |
| mov.l STRC_A,r1 | |
| mov.l STRC_D,r0 | |
| mov.l r0,@r1 | |
| mov.l SDR4_A,r1 | |
| mov.l SDR4_D,r0 | |
| mov.l r0,@r1 | |
| mov.l MIMC_A,r1 | |
| mov.l MIMC_D2,r0 | |
| mov.l r0,@r1 | |
| nop | |
| nop | |
| nop | |
| mov.l SCR4_A,r1 | |
| mov.l SCR4_D3,r0 | |
| mov.l r0,@r1 | |
| mov.l SCR4_A,r1 | |
| mov.l SCR4_D2,r0 | |
| mov.l r0,@r1 | |
| mov.l SDMR02000_A,r1 | |
| mov.l SDMR02000_D,r0 | |
| mov.l r0,@r1 | |
| mov.l SDMR00B08_A,r1 | |
| mov.l SDMR00B08_D,r0 | |
| mov.l r0,@r1 | |
| mov.l SCR4_A,r1 | |
| mov.l SCR4_D2,r0 | |
| mov.l r0,@r1 | |
| mov.l SCR4_A,r1 | |
| mov.l SCR4_D4,r0 | |
| mov.l r0,@r1 | |
| nop | |
| nop | |
| nop | |
| nop | |
| mov.l SCR4_A,r1 | |
| mov.l SCR4_D4,r0 | |
| mov.l r0,@r1 | |
| nop | |
| nop | |
| nop | |
| nop | |
| mov.l SDMR00308_A,r1 | |
| mov.l SDMR00308_D,r0 | |
| mov.l r0,@r1 | |
| mov.l MIMC_A,r1 | |
| mov.l MIMC_D3,r0 | |
| mov.l r0,@r1 | |
| mov.l SCR4_A,r1 | |
| mov.l SCR4_D1,r0 | |
| mov.l DELAY60_D,r3 | |
| delay_loop_60: | |
| mov.l r0,@r1 | |
| dt r3 | |
| bf delay_loop_60 | |
| nop | |
| mov.l CCR_A, r1 /* Address of Cache Control Register */ | |
| mov.l CCR_CACHE_D_2, r0 | |
| mov.l r0, @r1 | |
| bsc_init: | |
| mov.l BCR_A, r1 | |
| mov.l BCR_D, r0 | |
| mov.l r0, @r1 | |
| mov.l CS0BCR_A, r1 | |
| mov.l CS0BCR_D, r0 | |
| mov.l r0, @r1 | |
| mov.l CS1BCR_A,r1 | |
| mov.l CS1BCR_D,r0 | |
| mov.l r0,@r1 | |
| mov.l CS2BCR_A, r1 | |
| mov.l CS2BCR_D, r0 | |
| mov.l r0, @r1 | |
| mov.l CS4BCR_A, r1 | |
| mov.l CS4BCR_D, r0 | |
| mov.l r0, @r1 | |
| mov.l CS5BCR_A, r1 | |
| mov.l CS5BCR_D, r0 | |
| mov.l r0, @r1 | |
| mov.l CS6BCR_A, r1 | |
| mov.l CS6BCR_D, r0 | |
| mov.l r0, @r1 | |
| mov.l CS0WCR_A, r1 | |
| mov.l CS0WCR_D, r0 | |
| mov.l r0, @r1 | |
| mov.l CS1WCR_A, r1 | |
| mov.l CS1WCR_D, r0 | |
| mov.l r0, @r1 | |
| mov.l CS2WCR_A, r1 | |
| mov.l CS2WCR_D, r0 | |
| mov.l r0, @r1 | |
| mov.l CS4WCR_A, r1 | |
| mov.l CS4WCR_D, r0 | |
| mov.l r0, @r1 | |
| mov.l CS5WCR_A, r1 | |
| mov.l CS5WCR_D, r0 | |
| mov.l r0, @r1 | |
| mov.l CS6WCR_A, r1 | |
| mov.l CS6WCR_D, r0 | |
| mov.l r0, @r1 | |
| mov.l CS5PCR_A, r1 | |
| mov.l CS5PCR_D, r0 | |
| mov.l r0, @r1 | |
| mov.l CS6PCR_A, r1 | |
| mov.l CS6PCR_D, r0 | |
| mov.l r0, @r1 | |
| mov.l DELAY200_D,r3 | |
| delay_loop_200: | |
| dt r3 | |
| bf delay_loop_200 | |
| nop | |
| mov.l PSEL0_A,r1 | |
| mov.l PSEL0_D,r0 | |
| mov.w r0,@r1 | |
| mov.l PSEL1_A,r1 | |
| mov.l PSEL1_D,r0 | |
| mov.w r0,@r1 | |
| mov.l ICR0_A,r1 | |
| mov.l ICR0_D,r0 | |
| mov.l r0,@r1 | |
| stc sr, r0 /* BL bit off(init=ON) */ | |
| mov.l SR_MASK_D, r1 | |
| and r1, r0 | |
| ldc r0, sr | |
| rts | |
| nop | |
| .align 2 | |
| DELAY60_D: .long 60 | |
| DELAY200_D: .long 17800 | |
| CCR_A: .long 0xFF00001C | |
| MMUCR_A: .long 0xFF000010 | |
| RAMCR_A: .long 0xFF000074 | |
| /* Low power mode control */ | |
| MSTPCR0_A: .long 0xFFC80030 | |
| MSTPCR1_A: .long 0xFFC80038 | |
| /* RWBT */ | |
| WDTST_A: .long 0xFFCC0000 | |
| WDTCSR_A: .long 0xFFCC0004 | |
| WDTBST_A: .long 0xFFCC0008 | |
| /* BSC */ | |
| MMSELR_A: .long 0xFE600020 | |
| BCR_A: .long 0xFF801000 | |
| CS0BCR_A: .long 0xFF802000 | |
| CS1BCR_A: .long 0xFF802010 | |
| CS2BCR_A: .long 0xFF802020 | |
| CS4BCR_A: .long 0xFF802040 | |
| CS5BCR_A: .long 0xFF802050 | |
| CS6BCR_A: .long 0xFF802060 | |
| CS0WCR_A: .long 0xFF802008 | |
| CS1WCR_A: .long 0xFF802018 | |
| CS2WCR_A: .long 0xFF802028 | |
| CS4WCR_A: .long 0xFF802048 | |
| CS5WCR_A: .long 0xFF802058 | |
| CS6WCR_A: .long 0xFF802068 | |
| CS5PCR_A: .long 0xFF802070 | |
| CS6PCR_A: .long 0xFF802080 | |
| DDRSD_START_A: .long 0xAC000000 | |
| /* INTC */ | |
| ICR0_A: .long 0xFFD00000 | |
| /* DDR I/F */ | |
| MIM8_A: .long 0xFE800008 | |
| MIMC_A: .long 0xFE80000C | |
| SCR4_A: .long 0xFE800014 | |
| STRC_A: .long 0xFE80001C | |
| SDR4_A: .long 0xFE800034 | |
| SDMR00308_A: .long 0xFE900308 | |
| SDMR00B08_A: .long 0xFE900B08 | |
| SDMR02000_A: .long 0xFE902000 | |
| /* GPIO */ | |
| PSEL0_A: .long 0xFFEF0070 | |
| PSEL1_A: .long 0xFFEF0072 | |
| CCR_CACHE_ICI_D:.long 0x00000800 | |
| CCR_CACHE_D_2: .long 0x00000103 | |
| MMU_CONTROL_TI_D:.long 0x00000004 | |
| RAMCR_D: .long 0x00000200 | |
| MSTPCR0_D: .long 0x00000000 | |
| MSTPCR1_D: .long 0x00000000 | |
| MMSELR_D: .long 0xa5a50000 | |
| BCR_D: .long 0x00000000 | |
| CS0BCR_D: .long 0x77777770 | |
| CS1BCR_D: .long 0x77777670 | |
| CS2BCR_D: .long 0x77777670 | |
| CS4BCR_D: .long 0x77777670 | |
| CS5BCR_D: .long 0x77777670 | |
| CS6BCR_D: .long 0x77777670 | |
| CS0WCR_D: .long 0x7777770F | |
| CS1WCR_D: .long 0x22000002 | |
| CS2WCR_D: .long 0x7777770F | |
| CS4WCR_D: .long 0x7777770F | |
| CS5WCR_D: .long 0x7777770F | |
| CS6WCR_D: .long 0x7777770F | |
| CS5PCR_D: .long 0x77000000 | |
| CS6PCR_D: .long 0x77000000 | |
| ICR0_D: .long 0x00E00000 | |
| MIM8_D: .long 0x00000000 | |
| MIMC_D1: .long 0x01d10008 | |
| MIMC_D2: .long 0x01d10009 | |
| MIMC_D3: .long 0x01d10209 | |
| SCR4_D1: .long 0x00000001 | |
| SCR4_D2: .long 0x00000002 | |
| SCR4_D3: .long 0x00000003 | |
| SCR4_D4: .long 0x00000004 | |
| STRC_D: .long 0x000f3980 | |
| SDR4_D: .long 0x00000300 | |
| SDMR00308_D: .long 0x00000000 | |
| SDMR00B08_D: .long 0x00000000 | |
| SDMR02000_D: .long 0x00000000 | |
| PSEL0_D: .long 0x00000001 | |
| PSEL1_D: .long 0x00000244 | |
| SR_MASK_D: .long 0xEFFFFF0F | |
| WDTST_D: .long 0x5A000FFF | |
| WDTCSR_D: .long 0xA5000000 | |
| WDTBST_D: .long 0x55000000 |