9
0
Fork 0

Add Eukrea CPUIMX27 support

CPUIMX27 is built around Freescale's i.MX27 and has up to 64MB of
NOR Flash, up to 512MB of NAND Flash and up to 256MB of mDDR,
it includes an ethernet PHY in MII mode, an I2C RTC and a
ST16554 QuadUART on nCS3.

Signed-off-by: Eric Benard <eric@eukrea.com>
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
This commit is contained in:
Eric Benard 2009-07-15 17:18:39 +02:00 committed by Sascha Hauer
parent 001fd57523
commit b2db2e6cd8
15 changed files with 775 additions and 0 deletions

View File

@ -19,6 +19,7 @@ config ARCH_TEXT_BASE
default 0xa7f00000 if MACH_PCA100
default 0x33fc0000 if MACH_A9M2440
default 0x23f00000 if MACH_MMCCPU
default 0xa0000000 if MACH_EUKREA_CPUIMX27
config BOARDINFO
default "Synertronixx scb9328" if MACH_SCB9328
@ -35,6 +36,7 @@ config BOARDINFO
default "Digi A9M2410" if MACH_A9M2410
default "Phytec phyCard-i.MX27" if MACH_PCA100
default "Bucyrus MMC-CPU" if MACH_MMCCPU
default "Eukrea CPUIMX27" if MACH_EUKREA_CPUIMX27
config BOARD_LINKER_SCRIPT
bool
@ -232,6 +234,15 @@ config MACH_MMCCPU
help
Say y here if you are using the Bucyrus MMC-CPU
config MACH_EUKREA_CPUIMX27
bool "EUKREA CPUIMX27"
select HAS_CFI
select ARCH_IMX27
select MACH_HAS_LOWLEVEL_INIT
help
Say Y here if you are using Eukrea's CPUIMX27 equipped
with a Freescale i.MX27 Processor
endchoice
source arch/arm/mach-imx/Kconfig

View File

@ -25,6 +25,7 @@ board-$(CONFIG_MACH_A9M2410) := a9m2410
board-$(CONFIG_MACH_PCA100) := phycard-i.MX27
board-$(CONFIG_MACH_MMCCPU) := mmccpu
board-$(CONFIG_MACH_A9M2440) := a9m2440
board-$(CONFIG_MACH_EUKREA_CPUIMX27) := eukrea_cpuimx27
# FIXME "cpu-y" never used on ARM!
cpu-$(CONFIG_ARM920T) := arm920t

View File

@ -0,0 +1,222 @@
#
# Automatically generated make config: don't edit
# U-Boot version: 2.0.0-rc9
# Wed Jul 15 16:05:10 2009
#
CONFIG_ARCH_TEXT_BASE=0xa0000000
CONFIG_BOARDINFO="Eukrea CPUIMX27"
# CONFIG_BOARD_LINKER_SCRIPT is not set
CONFIG_GENERIC_LINKER_SCRIPT=y
CONFIG_ARM=y
CONFIG_ARM926EJS=y
# CONFIG_MACH_MX1ADS is not set
# CONFIG_MACH_SCB9328 is not set
# CONFIG_MACH_PCM038 is not set
# CONFIG_MACH_IMX21ADS is not set
# CONFIG_MACH_IMX27ADS is not set
# CONFIG_MACH_PCM043 is not set
# CONFIG_MACH_FREESCALE_MX35_3STACK is not set
# CONFIG_MACH_ECO920 is not set
# CONFIG_MACH_NXDB500 is not set
# CONFIG_MACH_PCM037 is not set
# CONFIG_MACH_OMAP is not set
# CONFIG_MACH_AT91SAM9260_EK is not set
# CONFIG_MACH_PM9263 is not set
# CONFIG_MACH_A9M2410 is not set
# CONFIG_MACH_A9M2440 is not set
# CONFIG_MACH_PCA100 is not set
# CONFIG_MACH_MMCCPU is not set
CONFIG_MACH_EUKREA_CPUIMX27=y
CONFIG_ARCH_IMX=y
CONFIG_ARCH_HAS_FEC_IMX=y
CONFIG_ARCH_IMX27=y
#
# Board specific settings
#
#
# i.MX specific settings
#
CONFIG_IMX_CLKO=y
#
# Arm specific settings
#
CONFIG_CMD_ARM_CPUINFO=y
CONFIG_CMDLINE_TAG=y
CONFIG_SETUP_MEMORY_TAGS=y
# CONFIG_INITRD_TAG is not set
CONFIG_GREGORIAN_CALENDER=y
CONFIG_HAS_KALLSYMS=y
CONFIG_HAS_MODULES=y
CONFIG_CMD_MEMORY=y
CONFIG_ENV_HANDLING=y
#
# General Settings
#
CONFIG_LOCALVERSION_AUTO=y
#
# memory layout
#
CONFIG_HAVE_CONFIGURABLE_TEXT_BASE=y
CONFIG_TEXT_BASE=0xa7f00000
CONFIG_HAVE_CONFIGURABLE_MEMORY_LAYOUT=y
CONFIG_MEMORY_LAYOUT_DEFAULT=y
# CONFIG_MEMORY_LAYOUT_FIXED is not set
CONFIG_STACK_SIZE=0x8000
CONFIG_MALLOC_SIZE=0x400000
# CONFIG_BROKEN is not set
# CONFIG_EXPERIMENTAL is not set
CONFIG_MACH_HAS_LOWLEVEL_INIT=y
CONFIG_MACH_DO_LOWLEVEL_INIT=y
CONFIG_PROMPT="uboot:"
CONFIG_BAUDRATE=115200
CONFIG_LONGHELP=y
CONFIG_CBSIZE=1024
CONFIG_MAXARGS=16
CONFIG_SHELL_HUSH=y
# CONFIG_SHELL_SIMPLE is not set
CONFIG_GLOB=y
CONFIG_PROMPT_HUSH_PS2="> "
CONFIG_CMDLINE_EDITING=y
CONFIG_AUTO_COMPLETE=y
CONFIG_DYNAMIC_CRC_TABLE=y
CONFIG_ERRNO_MESSAGES=y
CONFIG_TIMESTAMP=y
CONFIG_CONSOLE_FULL=y
CONFIG_CONSOLE_ACTIVATE_FIRST=y
# CONFIG_OF_FLAT_TREE is not set
CONFIG_PARTITION=y
CONFIG_DEFAULT_ENVIRONMENT=y
CONFIG_DEFAULT_ENVIRONMENT_PATH="board/eukrea_cpuimx27/env"
#
# Debugging
#
# CONFIG_DEBUG_INFO is not set
# CONFIG_ENABLE_FLASH_NOISE is not set
# CONFIG_ENABLE_PARTITION_NOISE is not set
# CONFIG_ENABLE_DEVICE_NOISE is not set
#
# Commands
#
#
# scripting
#
CONFIG_CMD_EDIT=y
CONFIG_CMD_SLEEP=y
CONFIG_CMD_SAVEENV=y
CONFIG_CMD_LOADENV=y
CONFIG_CMD_EXPORT=y
CONFIG_CMD_PRINTENV=y
CONFIG_CMD_READLINE=y
CONFIG_CMD_TRUE=y
CONFIG_CMD_FALSE=y
#
# file commands
#
CONFIG_CMD_LS=y
CONFIG_CMD_RM=y
CONFIG_CMD_CAT=y
CONFIG_CMD_MKDIR=y
CONFIG_CMD_RMDIR=y
CONFIG_CMD_CP=y
CONFIG_CMD_PWD=y
CONFIG_CMD_CD=y
CONFIG_CMD_MOUNT=y
CONFIG_CMD_UMOUNT=y
#
# console
#
CONFIG_CMD_CLEAR=y
CONFIG_CMD_ECHO=y
#
# memory
#
# CONFIG_CMD_LOADB is not set
CONFIG_CMD_MEMINFO=y
CONFIG_CMD_CRC=y
CONFIG_CMD_MTEST=y
# CONFIG_CMD_MTEST_ALTERNATIVE is not set
#
# flash
#
CONFIG_CMD_FLASH=y
#
# booting
#
CONFIG_CMD_BOOTM=y
# CONFIG_CMD_BOOTM_ZLIB is not set
# CONFIG_CMD_BOOTM_BZLIB is not set
# CONFIG_CMD_BOOTM_SHOW_TYPE is not set
CONFIG_CMD_RESET=y
CONFIG_CMD_GO=y
CONFIG_CMD_TIMEOUT=y
CONFIG_CMD_PARTITION=y
CONFIG_CMD_TEST=y
CONFIG_CMD_VERSION=y
CONFIG_CMD_HELP=y
CONFIG_CMD_DEVINFO=y
CONFIG_NET=y
CONFIG_NET_BOOTP=y
CONFIG_NET_DHCP=y
# CONFIG_NET_RARP is not set
# CONFIG_NET_SNTP is not set
# CONFIG_NET_NFS is not set
CONFIG_NET_PING=y
CONFIG_NET_TFTP=y
#
# Drivers
#
#
# serial drivers
#
CONFIG_DRIVER_SERIAL_IMX=y
# CONFIG_DRIVER_SERIAL_NS16550 is not set
CONFIG_MIIPHY=y
#
# Network drivers
#
# CONFIG_DRIVER_NET_SMC911X is not set
# CONFIG_DRIVER_NET_SMC91111 is not set
CONFIG_DRIVER_NET_FEC_IMX=y
#
# SPI drivers
#
CONFIG_SPI=y
CONFIG_DRIVER_SPI_IMX=y
CONFIG_DRIVER_SPI_MC13783=y
#
# flash drivers
#
CONFIG_HAS_CFI=y
CONFIG_DRIVER_CFI=y
# CONFIG_DRIVER_CFI_NEW is not set
CONFIG_DRIVER_CFI_OLD=y
CONFIG_CFI_BUFFER_WRITE=y
# CONFIG_NAND is not set
# CONFIG_USB is not set
#
# Filesystem support
#
# CONFIG_FS_CRAMFS is not set
CONFIG_FS_RAMFS=y
CONFIG_FS_DEVFS=y
CONFIG_CRC32=y
# CONFIG_GENERIC_FIND_NEXT_BIT is not set

View File

@ -0,0 +1,3 @@
obj-y += lowlevel_init.o
obj-y += eukrea_cpuimx27.o

View File

@ -0,0 +1,24 @@
/**
* @file
* @brief Global defintions for the ARM i.MX27 based pcm038
*
* 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
*/
#ifndef __CONFIG_H
#define __CONFIG_H
#endif /* __CONFIG_H */

36
board/eukrea_cpuimx27/env/bin/_update vendored Normal file
View File

@ -0,0 +1,36 @@
#!/bin/sh
if [ -z "$part" -o -z "$image" ]; then
echo "define \$part and \$image"
exit 1
fi
if [ \! -e "$part" ]; then
echo "Partition $part does not exist"
exit 1
fi
if [ $# = 1 ]; then
image=$1
fi
if [ x$ip = xdhcp ]; then
dhcp
fi
ping $eth0.serverip
if [ $? -ne 0 ] ; then
echo "update aborted"
exit 1
fi
unprotect $part
echo
echo "erasing partition $part"
erase $part
echo
echo "flashing $image to $part"
echo
tftp $image $part

47
board/eukrea_cpuimx27/env/bin/boot vendored Normal file
View File

@ -0,0 +1,47 @@
#!/bin/sh
. /env/config
if [ x$1 = xnand ]; then
root=nand
kernel=nand
fi
if [ x$1 = xnet ]; then
root=net
kernel=net
fi
if [ x$1 = xnor ]; then
root=nor
kernel=nor
fi
if [ x$ip = xdhcp ]; then
bootargs="$bootargs ip=dhcp"
else
bootargs="$bootargs ip=$eth0.ipaddr:$eth0.serverip:$eth0.gateway:$eth0.netmask:::"
fi
if [ x$root = xnand ]; then
bootargs="$bootargs root=$rootpart_nand rootfstype=jffs2"
elif [ x$root = xnor ]; then
bootargs="$bootargs root=$rootpart_nor rootfstype=jffs2"
else
bootargs="$bootargs root=/dev/nfs nfsroot=$eth0.serverip:$nfsroot,v3,tcp"
fi
bootargs="$bootargs mtdparts=physmap-flash.0:$nor_parts;imx_nand:$nand_parts"
if [ $kernel = net ]; then
if [ x$ip = xdhcp ]; then
dhcp
fi
tftp $uimage uImage || exit 1
bootm uImage
elif [ $kernel = nor ]; then
bootm /dev/nor0.kernel
else
bootm /dev/nand0.kernel.bb
fi

View File

@ -0,0 +1 @@
nand -a /dev/nand0.*

37
board/eukrea_cpuimx27/env/bin/init vendored Normal file
View File

@ -0,0 +1,37 @@
#!/bin/sh
PATH=/env/bin
export PATH
. /env/config
if [ -e /dev/nor0 ]; then
addpart /dev/nor0 $nor_parts
fi
if [ -e /dev/nand0 ]; then
addpart /dev/nand0 $nand_parts
# Uh, oh, hush first expands wildcards and then starts executing
# commands. What a bug!
source /env/bin/hush_hack
fi
if [ -z $eth0.ethaddr ]; then
while [ -z $eth0.ethaddr ]; do
readline "no MAC address set for eth0. please enter the one found on your board: " eth0.ethaddr
done
echo -a /env/config "eth0.ethaddr=$eth0.ethaddr"
fi
echo
echo -n "Hit any key to stop autoboot: "
timeout -a $autoboot_timeout
if [ $? != 0 ]; then
echo
echo "type update_kernel nand|nor [<imagename>] to update kernel into flash"
echo "type update_root nand|nor [<imagename>] to update rootfs into flash"
echo
exit
fi
boot

View File

@ -0,0 +1,15 @@
#!/bin/sh
. /env/config
image=$uimage
if [ x$1 = xnand ]; then
part=/dev/nand0.kernel.bb
elif [ x$1 = xnor ]; then
part=/dev/nor0.kernel
else
echo "usage: $0 nor|nand [imagename]"
exit 1
fi
. /env/bin/_update $2

View File

@ -0,0 +1,16 @@
#!/bin/sh
. /env/config
image=$uimage
if [ x$1 = xnand ]; then
part=/dev/nand0.root.bb
elif [ x$1 = xnor ]; then
part=/dev/nor0.root
else
echo "usage: $0 nor|nand [imagename]"
exit 1
fi
. /env/bin/_update $2

31
board/eukrea_cpuimx27/env/config vendored Normal file
View File

@ -0,0 +1,31 @@
#!/bin/sh
# can be either 'net', 'nor' or 'nand''
kernel=nor
root=nor
uimage=cpuimx27/uImage
jffs2=cpuimx27/rootfs.jffs2
autoboot_timeout=3
# TFP410-SVGA TFP410-VGA CMO-QVGA Optrex-WVGA Sharp-QVGA-EK
video="CMO-QVGA"
bootargs="console=ttymxc0,115200 fec_mac=$eth0.ethaddr rtc-pcf8563.probe=0,0x51 video=mxcfb:$video"
nor_parts="256k(uboot)ro,128k(ubootenv),1792k(kernel),-(root)"
rootpart_nor="/dev/mtdblock3"
nand_parts="-(nand)"
rootpart_nand=""
nfsroot=""
# use 'dhcp' to do dhcp in uboot and in kernel
ip=dhcp
# or set your networking parameters here
#eth0.ipaddr=a.b.c.d
#eth0.netmask=a.b.c.d
#eth0.gateway=a.b.c.d
eth0.serverip=192.168.1.15

View File

@ -0,0 +1,191 @@
/*
* Copyright (C) 2009 Eric Benard, Eukrea Electromatique
* Based on pcm038.c which is :
* Copyright (C) 2007 Sascha Hauer, Pengutronix
*
* 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 <common.h>
#include <net.h>
#include <cfi_flash.h>
#include <init.h>
#include <environment.h>
#include <asm/arch/imx-regs.h>
#include <fec.h>
#include <notifier.h>
#include <asm/arch/gpio.h>
#include <asm/armlinux.h>
#include <asm/mach-types.h>
#include <asm/arch/pmic.h>
#include <partition.h>
#include <fs.h>
#include <fcntl.h>
#include <nand.h>
#include <command.h>
#include <asm/io.h>
#include <asm/arch/imx-nand.h>
#include <asm/arch/imx-pll.h>
static struct device_d cfi_dev = {
.name = "cfi_flash",
.id = "nor0",
.map_base = 0xC0000000,
.size = 64 * 1024 * 1024,
};
static struct device_d sdram_dev = {
.name = "ram",
.id = "ram0",
.map_base = 0xa0000000,
.size = 128 * 1024 * 1024,
.type = DEVICE_TYPE_DRAM,
};
static struct fec_platform_data fec_info = {
.xcv_type = MII100,
.phy_addr = 1,
};
static struct device_d fec_dev = {
.name = "fec_imx",
.id = "eth0",
.map_base = 0x1002b000,
.platform_data = &fec_info,
.type = DEVICE_TYPE_ETHER,
};
struct imx_nand_platform_data nand_info = {
.width = 1,
.hw_ecc = 1,
};
static struct device_d nand_dev = {
.name = "imx_nand",
.map_base = 0xd8000000,
.platform_data = &nand_info,
};
static int eukrea_cpuimx27_devices_init(void)
{
char *envdev = "no";
int i;
unsigned int mode[] = {
PD0_AIN_FEC_TXD0,
PD1_AIN_FEC_TXD1,
PD2_AIN_FEC_TXD2,
PD3_AIN_FEC_TXD3,
PD4_AOUT_FEC_RX_ER,
PD5_AOUT_FEC_RXD1,
PD6_AOUT_FEC_RXD2,
PD7_AOUT_FEC_RXD3,
PD8_AF_FEC_MDIO,
PD9_AIN_FEC_MDC | GPIO_PUEN,
PD10_AOUT_FEC_CRS,
PD11_AOUT_FEC_TX_CLK,
PD12_AOUT_FEC_RXD0,
PD13_AOUT_FEC_RX_DV,
PD14_AOUT_FEC_CLR,
PD15_AOUT_FEC_COL,
PD16_AIN_FEC_TX_ER,
PF23_AIN_FEC_TX_EN,
PE12_PF_UART1_TXD,
PE13_PF_UART1_RXD,
PE14_PF_UART1_CTS,
PE15_PF_UART1_RTS,
};
/* configure 16 bit nor flash on cs0 */
CS0U = 0x0000CC03;
CS0L = 0xa0330D01;
CS0A = 0x00220800;
/* configure 8 bit UART on cs3 */
FMCR &= ~0x2;
CS3U = 0x0000DCF6;
CS3L = 0x444A4541;
CS3A = 0x44443302;
/* initizalize gpios */
for (i = 0; i < ARRAY_SIZE(mode); i++)
imx_gpio_mode(mode[i]);
register_device(&cfi_dev);
register_device(&nand_dev);
register_device(&sdram_dev);
dev_add_partition(&cfi_dev, 0x00000, 0x40000, PARTITION_FIXED, "self");
dev_add_partition(&cfi_dev, 0x40000, 0x20000, PARTITION_FIXED, "env");
dev_protect(&cfi_dev, 0x40000, 0, 1);
envdev = "NOR";
printf("Using environment in %s Flash\n", envdev);
armlinux_set_bootparams((void *)0xa0000100);
armlinux_set_architecture(MACH_TYPE_CPUIMX27);
return 0;
}
device_initcall(eukrea_cpuimx27_devices_init);
static struct device_d eukrea_cpuimx27_serial_device = {
.name = "imx_serial",
.id = "cs0",
.map_base = IMX_UART1_BASE,
.size = 4096,
.type = DEVICE_TYPE_CONSOLE,
};
static int eukrea_cpuimx27_console_init(void)
{
register_device(&eukrea_cpuimx27_serial_device);
return 0;
}
console_initcall(eukrea_cpuimx27_console_init);
static int eukrea_cpuimx27_late_init(void)
{
console_flush();
register_device(&fec_dev);
return 0;
}
late_initcall(eukrea_cpuimx27_late_init);
#ifdef CONFIG_NAND_IMX_BOOT
void __bare_init nand_boot(void)
{
int pagesize = 512;
switch ((GPCR & GPCR_BOOT_MASK) >> GPCR_BOOT_SHIFT) {
case GPCR_BOOT_8BIT_NAND_2k:
case GPCR_BOOT_16BIT_NAND_2k:
pagesize = 2048;
}
imx_nand_load_image((void *)TEXT_BASE, 256 * 1024, pagesize, 16384);
}
#endif

View File

@ -0,0 +1,10 @@
/** @page eukrea_cpuimx27 Eukrea's CPUIMX27
This CPU card is based on a Freescale i.MX27 CPU. The card is shipped with:
- up to 64MiB NOR type Flash Memory
- up to 256MiB synchronous dynamic RAM
- up to 512MiB NAND type Flash Memory
- MII 10/100 ethernet PHY
*/

View File

@ -0,0 +1,130 @@
#include <config.h>
#include <asm/arch/imx-regs.h>
#define writel(val, reg) \
ldr r0, =reg; \
ldr r1, =val; \
str r1, [r0];
#define ESDCTL0_VAL (ESDCTL0_SDE | ESDCTL0_ROW13 | ESDCTL0_COL10)
.macro sdram_init
/*
* DDR on CSD0
*/
writel(0x00000008, ESDMISC) /* Enable DDR SDRAM operation */
writel(0x55555555, DSCR(3)) /* Set the driving strength */
writel(0x55555555, DSCR(5))
writel(0x55555555, DSCR(6))
writel(0x00005005, DSCR(7))
writel(0x15555555, DSCR(8))
writel(0x00000004, ESDMISC) /* Initial reset */
writel(0x0039572A, ESDCFG0)
writel(ESDCTL0_VAL | ESDCTL0_SMODE_PRECHARGE, ESDCTL0) /* precharge CSD0 all banks */
writel(0x00000000, 0xA0000F00) /* CSD0 precharge address (A10 = 1) */
writel(ESDCTL0_VAL | ESDCTL0_SMODE_AUTO_REFRESH, ESDCTL0)
ldr r0, =0xa0000f00
mov r1, #0
mov r2, #8
1:
str r1, [r0]
subs r2, #1
bne 1b
writel(ESDCTL0_VAL | ESDCTL0_SMODE_LOAD_MODE, ESDCTL0)
ldr r0, =0xA0000033
mov r1, #0xda
strb r1, [r0]
ldr r0, =0xA1000000
mov r1, #0xff
strb r1, [r0]
writel(ESDCTL0_VAL | ESDCTL0_DSIZ_31_0 | ESDCTL0_REF4 | ESDCTL0_BL | ESDCTL0_SMODE_NORMAL, ESDCTL0)
.endm
.section ".text_bare_init","ax"
.globl board_init_lowlevel
board_init_lowlevel:
mov r10, lr
/* ahb lite ip interface */
writel(0x20040304, AIPI1_PSR0)
writel(0xDFFBFCFB, AIPI1_PSR1)
writel(0x00000000, AIPI2_PSR0)
writel(0xFFFFFFFF, AIPI2_PSR1)
/* disable mpll/spll */
ldr r0, =CSCR
ldr r1, [r0]
bic r1, r1, #0x03
str r1, [r0]
/*
* pll clock initialization - see section 3.4.3 of the i.MX27 manual
*/
writel(0x00331C23, MPCTL0) /* MPLL = 399 MHz */
writel(0x040C2403, SPCTL0) /* SPLL = 240 MHz */
writel(0x33F38107 | CSCR_MPLL_RESTART | CSCR_SPLL_RESTART, CSCR)
/* add some delay here */
mov r1, #0x1000
1: subs r1, r1, #0x1
bne 1b
/* clock gating enable */
writel(0x00050f08, GPCR)
/* peripheral clock divider */
writel(0x130400c3, PCDR0) /* FIXME */
writel(0x09030208, PCDR1) /* PERDIV1=08 @133 MHz */
/* PERDIV1=04 @266 MHz */
/* skip sdram initialization if we run from ram */
cmp pc, #0xa0000000
bls 1f
cmp pc, #0xc0000000
bhi 1f
mov pc,r10
1:
sdram_init
#ifdef CONFIG_NAND_IMX_BOOT
ldr sp, =0xa0f00000 /* Setup a temporary stack in SDRAM */
ldr r0, =IMX_NFC_BASE /* start of NFC SRAM */
ldr r2, =IMX_NFC_BASE + 0x1000 /* end of NFC SRAM */
/* skip NAND boot if not running from NFC space */
cmp pc, r0
bls ret
cmp pc, r2
bhi ret
/* Move ourselves out of NFC SRAM */
ldr r1, =TEXT_BASE
copy_loop:
ldmia r0!, {r3-r9} /* copy from source address [r0] */
stmia r1!, {r3-r9} /* copy to target address [r1] */
cmp r0, r2 /* until source end addreee [r2] */
ble copy_loop
ldr pc, =1f /* Jump to SDRAM */
1:
bl nand_boot /* Load U-Boot from NAND Flash */
ldr r1, =IMX_NFC_BASE - TEXT_BASE
sub r10, r10, r1 /* adjust return address from NFC SRAM */
/* to SDRAM */
#endif /* CONFIG_NAND_IMX_BOOT */
ret:
mov pc,r10