| /* |
| * 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> |
| #include <asm/macro.h> |
| |
| .global lowlevel_init |
| |
| .text |
| .align 2 |
| |
| lowlevel_init: |
| |
| write32 WDTCSR_A, WDTCSR_D /* Watchdog Control / Status Register */ |
| |
| write32 WDTST_A, WDTST_D /* Watchdog Stop Time Register */ |
| |
| write32 WDTBST_A, WDTBST_D /* |
| * 0xFFCC0008 |
| * Watchdog Base Stop Time Register |
| */ |
| |
| write32 CCR_A, CCR_CACHE_ICI_D /* Address of Cache Control Register */ |
| /* Instruction Cache Invalidate */ |
| |
| write32 MMUCR_A, MMU_CONTROL_TI_D /* MMU Control Register */ |
| /* TI == TLB Invalidate bit */ |
| |
| write32 MSTPCR0_A, MSTPCR0_D /* Address of Power Control Register 0 */ |
| |
| write32 MSTPCR1_A, MSTPCR1_D /* Address of Power Control Register 1 */ |
| |
| write32 RAMCR_A, RAMCR_D |
| |
| 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 |
| |
| write32 MIM8_A, MIM8_D |
| |
| write32 MIMC_A, MIMC_D1 |
| |
| write32 STRC_A, STRC_D |
| |
| write32 SDR4_A, SDR4_D |
| |
| write32 MIMC_A, MIMC_D2 |
| |
| nop |
| nop |
| nop |
| |
| write32 SCR4_A, SCR4_D3 |
| |
| write32 SCR4_A, SCR4_D2 |
| |
| write32 SDMR02000_A, SDMR02000_D |
| |
| write32 SDMR00B08_A, SDMR00B08_D |
| |
| write32 SCR4_A, SCR4_D2 |
| |
| write32 SCR4_A, SCR4_D4 |
| |
| nop |
| nop |
| nop |
| nop |
| |
| write32 SCR4_A, SCR4_D4 |
| |
| nop |
| nop |
| nop |
| nop |
| |
| write32 SDMR00308_A, SDMR00308_D |
| |
| write32 MIMC_A, MIMC_D3 |
| |
| 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 |
| |
| write32 CCR_A, CCR_CACHE_D_2 /* Address of Cache Control Register */ |
| |
| bsc_init: |
| write32 BCR_A, BCR_D |
| |
| write32 CS0BCR_A, CS0BCR_D |
| |
| write32 CS1BCR_A, CS1BCR_D |
| |
| write32 CS2BCR_A, CS2BCR_D |
| |
| write32 CS4BCR_A, CS4BCR_D |
| |
| write32 CS5BCR_A, CS5BCR_D |
| |
| write32 CS6BCR_A, CS6BCR_D |
| |
| write32 CS0WCR_A, CS0WCR_D |
| |
| write32 CS1WCR_A, CS1WCR_D |
| |
| write32 CS2WCR_A, CS2WCR_D |
| |
| write32 CS4WCR_A, CS4WCR_D |
| |
| write32 CS5WCR_A, CS5WCR_D |
| |
| write32 CS6WCR_A, CS6WCR_D |
| |
| write32 CS5PCR_A, CS5PCR_D |
| |
| write32 CS6PCR_A, CS6PCR_D |
| |
| mov.l DELAY200_D, r3 |
| |
| delay_loop_200: |
| dt r3 |
| bf delay_loop_200 |
| nop |
| |
| write16 PSEL0_A, PSEL0_D |
| |
| write16 PSEL1_A, PSEL1_D |
| |
| write32 ICR0_A, ICR0_D |
| |
| 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: .word 0x00000001 |
| PSEL1_D: .word 0x00000244 |
| SR_MASK_D: .long 0xEFFFFF0F |
| WDTST_D: .long 0x5A000FFF |
| WDTCSR_D: .long 0xA5000000 |
| WDTBST_D: .long 0x55000000 |