1*62011840SMasahiro Yamada/* 2*62011840SMasahiro Yamada * Memory Setup stuff - taken from blob memsetup.S 3*62011840SMasahiro Yamada * 4*62011840SMasahiro Yamada * Copyright (C) 1999 2000 2001 Erik Mouw (J.A.K.Mouw@its.tudelft.nl) and 5*62011840SMasahiro Yamada * Jan-Derk Bakker (J.D.Bakker@its.tudelft.nl) 6*62011840SMasahiro Yamada * 7*62011840SMasahiro Yamada * Copyright (C) 2008 Ronetix Ilko Iliev (www.ronetix.at) 8*62011840SMasahiro Yamada * Copyright (C) 2009 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> 9*62011840SMasahiro Yamada * 10*62011840SMasahiro Yamada * SPDX-License-Identifier: GPL-2.0+ 11*62011840SMasahiro Yamada */ 12*62011840SMasahiro Yamada 13*62011840SMasahiro Yamada#include <config.h> 14*62011840SMasahiro Yamada#include <asm/arch/hardware.h> 15*62011840SMasahiro Yamada#include <asm/arch/at91_pmc.h> 16*62011840SMasahiro Yamada#include <asm/arch/at91_wdt.h> 17*62011840SMasahiro Yamada#include <asm/arch/at91_pio.h> 18*62011840SMasahiro Yamada#include <asm/arch/at91_matrix.h> 19*62011840SMasahiro Yamada#include <asm/arch/at91sam9_sdramc.h> 20*62011840SMasahiro Yamada#include <asm/arch/at91sam9_smc.h> 21*62011840SMasahiro Yamada#include <asm/arch/at91_rstc.h> 22*62011840SMasahiro Yamada#ifdef CONFIG_ATMEL_LEGACY 23*62011840SMasahiro Yamada#include <asm/arch/at91sam9_matrix.h> 24*62011840SMasahiro Yamada#endif 25*62011840SMasahiro Yamada#ifndef CONFIG_SYS_MATRIX_EBICSA_VAL 26*62011840SMasahiro Yamada#define CONFIG_SYS_MATRIX_EBICSA_VAL CONFIG_SYS_MATRIX_EBI0CSA_VAL 27*62011840SMasahiro Yamada#endif 28*62011840SMasahiro Yamada 29*62011840SMasahiro Yamada.globl lowlevel_init 30*62011840SMasahiro Yamada.type lowlevel_init,function 31*62011840SMasahiro Yamadalowlevel_init: 32*62011840SMasahiro Yamada 33*62011840SMasahiro YamadaPOS1: 34*62011840SMasahiro Yamada adr r5, POS1 /* r5 = POS1 run time */ 35*62011840SMasahiro Yamada ldr r0, =POS1 /* r0 = POS1 compile */ 36*62011840SMasahiro Yamada sub r5, r5, r0 /* r0 = CONFIG_SYS_TEXT_BASE-1 */ 37*62011840SMasahiro Yamada 38*62011840SMasahiro Yamada /* memory control configuration 1 */ 39*62011840SMasahiro Yamada ldr r0, =SMRDATA 40*62011840SMasahiro Yamada ldr r2, =SMRDATA1 41*62011840SMasahiro Yamada add r0, r0, r5 42*62011840SMasahiro Yamada add r2, r2, r5 43*62011840SMasahiro Yamada0: 44*62011840SMasahiro Yamada /* the address */ 45*62011840SMasahiro Yamada ldr r1, [r0], #4 46*62011840SMasahiro Yamada /* the value */ 47*62011840SMasahiro Yamada ldr r3, [r0], #4 48*62011840SMasahiro Yamada str r3, [r1] 49*62011840SMasahiro Yamada cmp r2, r0 50*62011840SMasahiro Yamada bne 0b 51*62011840SMasahiro Yamada 52*62011840SMasahiro Yamada/* ---------------------------------------------------------------------------- 53*62011840SMasahiro Yamada * PMC Init Step 1. 54*62011840SMasahiro Yamada * ---------------------------------------------------------------------------- 55*62011840SMasahiro Yamada * - Check if the PLL is already initialized 56*62011840SMasahiro Yamada * ---------------------------------------------------------------------------- 57*62011840SMasahiro Yamada */ 58*62011840SMasahiro Yamada ldr r1, =(AT91_ASM_PMC_MCKR) 59*62011840SMasahiro Yamada ldr r0, [r1] 60*62011840SMasahiro Yamada and r0, r0, #3 61*62011840SMasahiro Yamada cmp r0, #0 62*62011840SMasahiro Yamada bne PLL_setup_end 63*62011840SMasahiro Yamada 64*62011840SMasahiro Yamada/* --------------------------------------------------------------------------- 65*62011840SMasahiro Yamada * - Enable the Main Oscillator 66*62011840SMasahiro Yamada * --------------------------------------------------------------------------- 67*62011840SMasahiro Yamada */ 68*62011840SMasahiro Yamada ldr r1, =(AT91_ASM_PMC_MOR) 69*62011840SMasahiro Yamada ldr r2, =(AT91_ASM_PMC_SR) 70*62011840SMasahiro Yamada /* Main oscillator Enable register PMC_MOR: */ 71*62011840SMasahiro Yamada ldr r0, =CONFIG_SYS_MOR_VAL 72*62011840SMasahiro Yamada str r0, [r1] 73*62011840SMasahiro Yamada 74*62011840SMasahiro Yamada /* Reading the PMC Status to detect when the Main Oscillator is enabled */ 75*62011840SMasahiro Yamada mov r4, #AT91_PMC_IXR_MOSCS 76*62011840SMasahiro YamadaMOSCS_Loop: 77*62011840SMasahiro Yamada ldr r3, [r2] 78*62011840SMasahiro Yamada and r3, r4, r3 79*62011840SMasahiro Yamada cmp r3, #AT91_PMC_IXR_MOSCS 80*62011840SMasahiro Yamada bne MOSCS_Loop 81*62011840SMasahiro Yamada 82*62011840SMasahiro Yamada/* ---------------------------------------------------------------------------- 83*62011840SMasahiro Yamada * PMC Init Step 2. 84*62011840SMasahiro Yamada * ---------------------------------------------------------------------------- 85*62011840SMasahiro Yamada * Setup PLLA 86*62011840SMasahiro Yamada * ---------------------------------------------------------------------------- 87*62011840SMasahiro Yamada */ 88*62011840SMasahiro Yamada ldr r1, =(AT91_ASM_PMC_PLLAR) 89*62011840SMasahiro Yamada ldr r0, =CONFIG_SYS_PLLAR_VAL 90*62011840SMasahiro Yamada str r0, [r1] 91*62011840SMasahiro Yamada 92*62011840SMasahiro Yamada /* Reading the PMC Status register to detect when the PLLA is locked */ 93*62011840SMasahiro Yamada mov r4, #AT91_PMC_IXR_LOCKA 94*62011840SMasahiro YamadaMOSCS_Loop1: 95*62011840SMasahiro Yamada ldr r3, [r2] 96*62011840SMasahiro Yamada and r3, r4, r3 97*62011840SMasahiro Yamada cmp r3, #AT91_PMC_IXR_LOCKA 98*62011840SMasahiro Yamada bne MOSCS_Loop1 99*62011840SMasahiro Yamada 100*62011840SMasahiro Yamada/* ---------------------------------------------------------------------------- 101*62011840SMasahiro Yamada * PMC Init Step 3. 102*62011840SMasahiro Yamada * ---------------------------------------------------------------------------- 103*62011840SMasahiro Yamada * - Switch on the Main Oscillator 104*62011840SMasahiro Yamada * ---------------------------------------------------------------------------- 105*62011840SMasahiro Yamada */ 106*62011840SMasahiro Yamada ldr r1, =(AT91_ASM_PMC_MCKR) 107*62011840SMasahiro Yamada 108*62011840SMasahiro Yamada /* -Master Clock Controller register PMC_MCKR */ 109*62011840SMasahiro Yamada ldr r0, =CONFIG_SYS_MCKR1_VAL 110*62011840SMasahiro Yamada str r0, [r1] 111*62011840SMasahiro Yamada 112*62011840SMasahiro Yamada /* Reading the PMC Status to detect when the Master clock is ready */ 113*62011840SMasahiro Yamada mov r4, #AT91_PMC_IXR_MCKRDY 114*62011840SMasahiro YamadaMCKRDY_Loop: 115*62011840SMasahiro Yamada ldr r3, [r2] 116*62011840SMasahiro Yamada and r3, r4, r3 117*62011840SMasahiro Yamada cmp r3, #AT91_PMC_IXR_MCKRDY 118*62011840SMasahiro Yamada bne MCKRDY_Loop 119*62011840SMasahiro Yamada 120*62011840SMasahiro Yamada ldr r0, =CONFIG_SYS_MCKR2_VAL 121*62011840SMasahiro Yamada str r0, [r1] 122*62011840SMasahiro Yamada 123*62011840SMasahiro Yamada /* Reading the PMC Status to detect when the Master clock is ready */ 124*62011840SMasahiro Yamada mov r4, #AT91_PMC_IXR_MCKRDY 125*62011840SMasahiro YamadaMCKRDY_Loop1: 126*62011840SMasahiro Yamada ldr r3, [r2] 127*62011840SMasahiro Yamada and r3, r4, r3 128*62011840SMasahiro Yamada cmp r3, #AT91_PMC_IXR_MCKRDY 129*62011840SMasahiro Yamada bne MCKRDY_Loop1 130*62011840SMasahiro YamadaPLL_setup_end: 131*62011840SMasahiro Yamada 132*62011840SMasahiro Yamada/* ---------------------------------------------------------------------------- 133*62011840SMasahiro Yamada * - memory control configuration 2 134*62011840SMasahiro Yamada * ---------------------------------------------------------------------------- 135*62011840SMasahiro Yamada */ 136*62011840SMasahiro Yamada ldr r0, =(AT91_ASM_SDRAMC_TR) 137*62011840SMasahiro Yamada ldr r1, [r0] 138*62011840SMasahiro Yamada cmp r1, #0 139*62011840SMasahiro Yamada bne SDRAM_setup_end 140*62011840SMasahiro Yamada 141*62011840SMasahiro Yamada ldr r0, =SMRDATA1 142*62011840SMasahiro Yamada ldr r2, =SMRDATA2 143*62011840SMasahiro Yamada add r0, r0, r5 144*62011840SMasahiro Yamada add r2, r2, r5 145*62011840SMasahiro Yamada2: 146*62011840SMasahiro Yamada /* the address */ 147*62011840SMasahiro Yamada ldr r1, [r0], #4 148*62011840SMasahiro Yamada /* the value */ 149*62011840SMasahiro Yamada ldr r3, [r0], #4 150*62011840SMasahiro Yamada str r3, [r1] 151*62011840SMasahiro Yamada cmp r2, r0 152*62011840SMasahiro Yamada bne 2b 153*62011840SMasahiro Yamada 154*62011840SMasahiro YamadaSDRAM_setup_end: 155*62011840SMasahiro Yamada /* everything is fine now */ 156*62011840SMasahiro Yamada mov pc, lr 157*62011840SMasahiro Yamada 158*62011840SMasahiro Yamada .ltorg 159*62011840SMasahiro Yamada 160*62011840SMasahiro YamadaSMRDATA: 161*62011840SMasahiro Yamada .word AT91_ASM_WDT_MR 162*62011840SMasahiro Yamada .word CONFIG_SYS_WDTC_WDMR_VAL 163*62011840SMasahiro Yamada /* configure PIOx as EBI0 D[16-31] */ 164*62011840SMasahiro Yamada#if defined(CONFIG_AT91SAM9263) 165*62011840SMasahiro Yamada .word AT91_ASM_PIOD_PDR 166*62011840SMasahiro Yamada .word CONFIG_SYS_PIOD_PDR_VAL1 167*62011840SMasahiro Yamada .word AT91_ASM_PIOD_PUDR 168*62011840SMasahiro Yamada .word CONFIG_SYS_PIOD_PPUDR_VAL 169*62011840SMasahiro Yamada .word AT91_ASM_PIOD_ASR 170*62011840SMasahiro Yamada .word CONFIG_SYS_PIOD_PPUDR_VAL 171*62011840SMasahiro Yamada#elif defined(CONFIG_AT91SAM9260) || defined(CONFIG_AT91SAM9261) \ 172*62011840SMasahiro Yamada || defined(CONFIG_AT91SAM9G20) 173*62011840SMasahiro Yamada .word AT91_ASM_PIOC_PDR 174*62011840SMasahiro Yamada .word CONFIG_SYS_PIOC_PDR_VAL1 175*62011840SMasahiro Yamada .word AT91_ASM_PIOC_PUDR 176*62011840SMasahiro Yamada .word CONFIG_SYS_PIOC_PPUDR_VAL 177*62011840SMasahiro Yamada#endif 178*62011840SMasahiro Yamada .word AT91_ASM_MATRIX_CSA0 179*62011840SMasahiro Yamada .word CONFIG_SYS_MATRIX_EBICSA_VAL 180*62011840SMasahiro Yamada 181*62011840SMasahiro Yamada /* flash */ 182*62011840SMasahiro Yamada .word AT91_ASM_SMC_MODE0 183*62011840SMasahiro Yamada .word CONFIG_SYS_SMC0_MODE0_VAL 184*62011840SMasahiro Yamada 185*62011840SMasahiro Yamada .word AT91_ASM_SMC_CYCLE0 186*62011840SMasahiro Yamada .word CONFIG_SYS_SMC0_CYCLE0_VAL 187*62011840SMasahiro Yamada 188*62011840SMasahiro Yamada .word AT91_ASM_SMC_PULSE0 189*62011840SMasahiro Yamada .word CONFIG_SYS_SMC0_PULSE0_VAL 190*62011840SMasahiro Yamada 191*62011840SMasahiro Yamada .word AT91_ASM_SMC_SETUP0 192*62011840SMasahiro Yamada .word CONFIG_SYS_SMC0_SETUP0_VAL 193*62011840SMasahiro Yamada 194*62011840SMasahiro YamadaSMRDATA1: 195*62011840SMasahiro Yamada .word AT91_ASM_SDRAMC_MR 196*62011840SMasahiro Yamada .word CONFIG_SYS_SDRC_MR_VAL1 197*62011840SMasahiro Yamada .word AT91_ASM_SDRAMC_TR 198*62011840SMasahiro Yamada .word CONFIG_SYS_SDRC_TR_VAL1 199*62011840SMasahiro Yamada .word AT91_ASM_SDRAMC_CR 200*62011840SMasahiro Yamada .word CONFIG_SYS_SDRC_CR_VAL 201*62011840SMasahiro Yamada .word AT91_ASM_SDRAMC_MDR 202*62011840SMasahiro Yamada .word CONFIG_SYS_SDRC_MDR_VAL 203*62011840SMasahiro Yamada .word AT91_ASM_SDRAMC_MR 204*62011840SMasahiro Yamada .word CONFIG_SYS_SDRC_MR_VAL2 205*62011840SMasahiro Yamada .word CONFIG_SYS_SDRAM_BASE 206*62011840SMasahiro Yamada .word CONFIG_SYS_SDRAM_VAL1 207*62011840SMasahiro Yamada .word AT91_ASM_SDRAMC_MR 208*62011840SMasahiro Yamada .word CONFIG_SYS_SDRC_MR_VAL3 209*62011840SMasahiro Yamada .word CONFIG_SYS_SDRAM_BASE 210*62011840SMasahiro Yamada .word CONFIG_SYS_SDRAM_VAL2 211*62011840SMasahiro Yamada .word CONFIG_SYS_SDRAM_BASE 212*62011840SMasahiro Yamada .word CONFIG_SYS_SDRAM_VAL3 213*62011840SMasahiro Yamada .word CONFIG_SYS_SDRAM_BASE 214*62011840SMasahiro Yamada .word CONFIG_SYS_SDRAM_VAL4 215*62011840SMasahiro Yamada .word CONFIG_SYS_SDRAM_BASE 216*62011840SMasahiro Yamada .word CONFIG_SYS_SDRAM_VAL5 217*62011840SMasahiro Yamada .word CONFIG_SYS_SDRAM_BASE 218*62011840SMasahiro Yamada .word CONFIG_SYS_SDRAM_VAL6 219*62011840SMasahiro Yamada .word CONFIG_SYS_SDRAM_BASE 220*62011840SMasahiro Yamada .word CONFIG_SYS_SDRAM_VAL7 221*62011840SMasahiro Yamada .word CONFIG_SYS_SDRAM_BASE 222*62011840SMasahiro Yamada .word CONFIG_SYS_SDRAM_VAL8 223*62011840SMasahiro Yamada .word CONFIG_SYS_SDRAM_BASE 224*62011840SMasahiro Yamada .word CONFIG_SYS_SDRAM_VAL9 225*62011840SMasahiro Yamada .word AT91_ASM_SDRAMC_MR 226*62011840SMasahiro Yamada .word CONFIG_SYS_SDRC_MR_VAL4 227*62011840SMasahiro Yamada .word CONFIG_SYS_SDRAM_BASE 228*62011840SMasahiro Yamada .word CONFIG_SYS_SDRAM_VAL10 229*62011840SMasahiro Yamada .word AT91_ASM_SDRAMC_MR 230*62011840SMasahiro Yamada .word CONFIG_SYS_SDRC_MR_VAL5 231*62011840SMasahiro Yamada .word CONFIG_SYS_SDRAM_BASE 232*62011840SMasahiro Yamada .word CONFIG_SYS_SDRAM_VAL11 233*62011840SMasahiro Yamada .word AT91_ASM_SDRAMC_TR 234*62011840SMasahiro Yamada .word CONFIG_SYS_SDRC_TR_VAL2 235*62011840SMasahiro Yamada .word CONFIG_SYS_SDRAM_BASE 236*62011840SMasahiro Yamada .word CONFIG_SYS_SDRAM_VAL12 237*62011840SMasahiro Yamada /* User reset enable*/ 238*62011840SMasahiro Yamada .word AT91_ASM_RSTC_MR 239*62011840SMasahiro Yamada .word CONFIG_SYS_RSTC_RMR_VAL 240*62011840SMasahiro Yamada#ifdef CONFIG_SYS_MATRIX_MCFG_REMAP 241*62011840SMasahiro Yamada /* MATRIX_MCFG - REMAP all masters */ 242*62011840SMasahiro Yamada .word AT91_ASM_MATRIX_MCFG 243*62011840SMasahiro Yamada .word 0x1FF 244*62011840SMasahiro Yamada#endif 245*62011840SMasahiro YamadaSMRDATA2: 246*62011840SMasahiro Yamada .word 0 247