summaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2011-12-16 15:16:54 +0100
committerSascha Hauer <s.hauer@pengutronix.de>2012-01-02 15:00:28 +0100
commitdafbbb84f396a21e9c5f2147a29a2ded7ec8b6d7 (patch)
tree29a92830dcda29877316eff808b81d11800710ee /arch
parente9cff5cb4a0994680cc5831b8b483860a5feb15d (diff)
downloadbarebox-dafbbb84f396a21e9c5f2147a29a2ded7ec8b6d7.tar.gz
barebox-dafbbb84f396a21e9c5f2147a29a2ded7ec8b6d7.tar.xz
ARM i.MX51 babbage: use generic lowlevel init function
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'arch')
-rw-r--r--arch/arm/boards/freescale-mx51-pdk/Makefile1
-rw-r--r--arch/arm/boards/freescale-mx51-pdk/board.c3
-rw-r--r--arch/arm/boards/freescale-mx51-pdk/lowlevel_init.S216
-rw-r--r--arch/arm/mach-imx/Kconfig1
4 files changed, 3 insertions, 218 deletions
diff --git a/arch/arm/boards/freescale-mx51-pdk/Makefile b/arch/arm/boards/freescale-mx51-pdk/Makefile
index 8e0c87c96f..b56ce7f50d 100644
--- a/arch/arm/boards/freescale-mx51-pdk/Makefile
+++ b/arch/arm/boards/freescale-mx51-pdk/Makefile
@@ -1,3 +1,2 @@
-obj-y += lowlevel_init.o
obj-y += board.o
obj-y += flash_header.o
diff --git a/arch/arm/boards/freescale-mx51-pdk/board.c b/arch/arm/boards/freescale-mx51-pdk/board.c
index d56effaaf9..e6781f3a6a 100644
--- a/arch/arm/boards/freescale-mx51-pdk/board.c
+++ b/arch/arm/boards/freescale-mx51-pdk/board.c
@@ -34,6 +34,7 @@
#include <mfd/mc13892.h>
#include <io.h>
#include <asm/mmu.h>
+#include <mach/imx5.h>
#include <mach/imx-nand.h>
#include <mach/spi.h>
#include <mach/generic.h>
@@ -265,6 +266,8 @@ static int f3s_console_init(void)
{
mxc_iomux_v3_setup_multiple_pads(f3s_pads, ARRAY_SIZE(f3s_pads));
+ imx51_init_lowlevel();
+
writel(0, 0x73fa8228);
writel(0, 0x73fa822c);
writel(0, 0x73fa8230);
diff --git a/arch/arm/boards/freescale-mx51-pdk/lowlevel_init.S b/arch/arm/boards/freescale-mx51-pdk/lowlevel_init.S
deleted file mode 100644
index 0b3726f6d5..0000000000
--- a/arch/arm/boards/freescale-mx51-pdk/lowlevel_init.S
+++ /dev/null
@@ -1,216 +0,0 @@
-/*
- * This code is based on the ecos babbage startup code
- *
- * 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 <mach/imx-regs.h>
-#include <mach/clock-imx51_53.h>
-
-#define ROM_SI_REV_OFFSET 0x48
-
-.macro setup_pll pll, freq
- ldr r2, =\pll
- ldr r1, =0x00001232
- str r1, [r2, #MX5_PLL_DP_CTL] /* Set DPLL ON (set UPEN bit): BRMO=1 */
- mov r1, #0x2
- str r1, [r2, #MX5_PLL_DP_CONFIG] /* Enable auto-restart AREN bit */
-
- str r3, [r2, #MX5_PLL_DP_OP]
- str r3, [r2, #MX5_PLL_DP_HFS_OP]
-
- str r4, [r2, #MX5_PLL_DP_MFD]
- str r4, [r2, #MX5_PLL_DP_HFS_MFD]
-
- str r5, [r2, #MX5_PLL_DP_MFN]
- str r5, [r2, #MX5_PLL_DP_HFS_MFN]
-
- ldr r1, =0x00001232
- str r1, [r2, #MX5_PLL_DP_CTL]
-1: ldr r1, [r2, #MX5_PLL_DP_CTL]
- ands r1, r1, #0x1
- beq 1b
-.endm
-
-#define writel(val, reg) \
- ldr r0, =reg; \
- ldr r1, =val; \
- str r1, [r0];
-
-#define IMX51_TO_2
-
-.globl board_init_lowlevel
-board_init_lowlevel:
- mov r10, lr
-
- /* explicitly disable L2 cache */
- mrc 15, 0, r0, c1, c0, 1
- bic r0, r0, #0x2
- mcr 15, 0, r0, c1, c0, 1
-
- /* reconfigure L2 cache aux control reg */
- mov r0, #0xC0 /* tag RAM */
- add r0, r0, #0x4 /* data RAM */
- orr r0, r0, #(1 << 24) /* disable write allocate delay */
- orr r0, r0, #(1 << 23) /* disable write allocate combine */
- orr r0, r0, #(1 << 22) /* disable write allocate */
-
- ldr r1, =MX51_IROM_BASE_ADDR
- ldr r3, [r1, #ROM_SI_REV_OFFSET]
- cmp r3, #0x10
- orrls r0, r0, #(1 << 25) /* disable write combine for TO 2 and lower revs */
-
- mcr 15, 1, r0, c9, c0, 2
-
- ldr r0, =MX51_CCM_BASE_ADDR
-
- /* Gate of clocks to the peripherals first */
- ldr r1, =0x3FFFFFFF
- str r1, [r0, #MX5_CCM_CCGR0]
- ldr r1, =0x0
- str r1, [r0, #MX5_CCM_CCGR1]
- str r1, [r0, #MX5_CCM_CCGR2]
- str r1, [r0, #MX5_CCM_CCGR3]
-
- ldr r1, =0x00030000
- str r1, [r0, #MX5_CCM_CCGR4]
- ldr r1, =0x00FFF030
- str r1, [r0, #MX5_CCM_CCGR5]
- ldr r1, =0x00000300
- str r1, [r0, #MX5_CCM_CCGR6]
-
- /* Disable IPU and HSC dividers */
- mov r1, #0x60000
- str r1, [r0, #MX5_CCM_CCDR]
-
-#ifdef IMX51_TO_2
- /* Make sure to switch the DDR away from PLL 1 */
- ldr r1, =0x19239145
- str r1, [r0, #MX5_CCM_CBCDR]
- /* make sure divider effective */
-1: ldr r1, [r0, #MX5_CCM_CDHIPR]
- cmp r1, #0x0
- bne 1b
-#endif
-
- /* Switch ARM to step clock */
- mov r1, #0x4
- str r1, [r0, #MX5_CCM_CCSR]
-
- mov r3, #MX5_PLL_DP_OP_800
- mov r4, #MX5_PLL_DP_MFD_800
- mov r5, #MX5_PLL_DP_MFN_800
- setup_pll MX51_PLL1_BASE_ADDR
-
- mov r3, #MX5_PLL_DP_OP_665
- mov r4, #MX5_PLL_DP_MFD_665
- mov r5, #MX5_PLL_DP_MFN_665
- setup_pll MX51_PLL3_BASE_ADDR
-
- /* Switch peripheral to PLL 3 */
- ldr r1, =0x000010C0
- str r1, [r0, #MX5_CCM_CBCMR]
- ldr r1, =0x13239145
- str r1, [r0, #MX5_CCM_CBCDR]
-
- mov r3, #MX5_PLL_DP_OP_665
- mov r4, #MX5_PLL_DP_MFD_665
- mov r5, #MX5_PLL_DP_MFN_665
- setup_pll MX51_PLL2_BASE_ADDR
-
- /* Switch peripheral to PLL2 */
- ldr r1, =0x19239145
- str r1, [r0, #MX5_CCM_CBCDR]
- ldr r1, =0x000020C0
- str r1, [r0, #MX5_CCM_CBCMR]
-
- mov r3, #MX5_PLL_DP_OP_216
- mov r4, #MX5_PLL_DP_MFD_216
- mov r5, #MX5_PLL_DP_MFN_216
- setup_pll MX51_PLL3_BASE_ADDR
-
- /* Set the platform clock dividers */
- ldr r2, =MX51_ARM_BASE_ADDR
- ldr r1, =0x00000124
- str r1, [r2, #0x14]
-
- /* Run TO 3.0 at Full speed, for other TO's wait till we increase VDDGP */
- ldr r1, =MX51_IROM_BASE_ADDR
- ldr r3, [r1, #ROM_SI_REV_OFFSET]
- cmp r3, #0x10
- movls r1, #0x1
- movhi r1, #0
- str r1, [r0, #MX5_CCM_CACRR]
-
- /* Switch ARM back to PLL 1 */
- mov r1, #0
- str r1, [r0, #MX5_CCM_CCSR]
-
- /* setup the rest */
- /* Use lp_apm (24MHz) source for perclk */
-#ifdef IMX51_TO_2
- ldr r1, =0x000020C2
- str r1, [r0, #MX5_CCM_CBCMR]
- // ddr clock from PLL 1, all perclk dividers are 1 since using 24MHz
- ldr r1, =0x59239100
- str r1, [r0, #MX5_CCM_CBCDR]
-#else
- ldr r1, =0x0000E3C2
- str r1, [r0, #MX5_CCM_CBCMR]
- // emi=ahb, all perclk dividers are 1 since using 24MHz
- // DDR divider=6 to have 665/6=110MHz
- ldr r1, =0x013B9100
- str r1, [r0, #MX5_CCM_CBCDR]
-#endif
-
- /* Restore the default values in the Gate registers */
- ldr r1, =0xFFFFFFFF
- str r1, [r0, #MX5_CCM_CCGR0]
- str r1, [r0, #MX5_CCM_CCGR1]
- str r1, [r0, #MX5_CCM_CCGR2]
- str r1, [r0, #MX5_CCM_CCGR3]
- str r1, [r0, #MX5_CCM_CCGR4]
- str r1, [r0, #MX5_CCM_CCGR5]
- str r1, [r0, #MX5_CCM_CCGR6]
-
- /* Use PLL 2 for UART's, get 66.5MHz from it */
- ldr r1, =0xA5A2A020
- str r1, [r0, #MX5_CCM_CSCMR1]
- ldr r1, =0x00C30321
- str r1, [r0, #MX5_CCM_CSCDR1]
-
- /* make sure divider effective */
- 1: ldr r1, [r0, #MX5_CCM_CDHIPR]
- cmp r1, #0x0
- bne 1b
-
- mov r1, #0x0
- str r1, [r0, #MX5_CCM_CCDR]
-
- writel(0x1, 0x73fa8074)
- ldr r0, =0x73f88000
- ldr r1, [r0]
- orr r1, #0x40
- str r1, [r0]
-
- ldr r0, =0x73f88004
- ldr r1, [r0]
- orr r1, #0x40
- str r1, [r0]
-
- mov pc, r10
-
diff --git a/arch/arm/mach-imx/Kconfig b/arch/arm/mach-imx/Kconfig
index 27bf386fbf..fa3b184638 100644
--- a/arch/arm/mach-imx/Kconfig
+++ b/arch/arm/mach-imx/Kconfig
@@ -372,7 +372,6 @@ choice
config MACH_FREESCALE_MX51_PDK
bool "Freescale i.MX51 PDK"
- select MACH_HAS_LOWLEVEL_INIT
config MACH_EUKREA_CPUIMX51SD
bool "EUKREA CPUIMX51"