summaryrefslogtreecommitdiff
path: root/arch/arm/cpu/armv7/zynq/cpu.c
diff options
context:
space:
mode:
authorAlbert ARIBAUD <albert.u.boot@aribaud.net>2013-02-21 16:43:19 +0100
committerAlbert ARIBAUD <albert.u.boot@aribaud.net>2013-02-21 16:43:19 +0100
commit03268374db9133686b738acca212247023840ffc (patch)
treec511f6501522c2e8cf02edc85024aeb5042e792a /arch/arm/cpu/armv7/zynq/cpu.c
parent9f024f62e4604274a23213dcee30016092e32e7b (diff)
parent00ed34589880ca7092999ec5b92e061018d0fd0f (diff)
downloadu-boot-imx-03268374db9133686b738acca212247023840ffc.zip
u-boot-imx-03268374db9133686b738acca212247023840ffc.tar.gz
u-boot-imx-03268374db9133686b738acca212247023840ffc.tar.bz2
Merge 'u-boot-microblaze/mainline/arm' into 'u-boot-arm/master'
This pulls the three following ZYNQ commits into ARM master: 7dca54f8: xilinx: zynq: Enable DCC and create new zynq_dcc board 59c651f4: arm: zynq: Add SLCR support with system reset 00ed3458: arm: zynq: Add lowlevel initialization to C
Diffstat (limited to 'arch/arm/cpu/armv7/zynq/cpu.c')
-rw-r--r--arch/arm/cpu/armv7/zynq/cpu.c28
1 files changed, 27 insertions, 1 deletions
diff --git a/arch/arm/cpu/armv7/zynq/cpu.c b/arch/arm/cpu/armv7/zynq/cpu.c
index ab615cc..e8f4c19 100644
--- a/arch/arm/cpu/armv7/zynq/cpu.c
+++ b/arch/arm/cpu/armv7/zynq/cpu.c
@@ -21,11 +21,37 @@
* MA 02111-1307 USA
*/
#include <common.h>
+#include <asm/io.h>
+#include <asm/arch/sys_proto.h>
+#include <asm/arch/hardware.h>
-inline void lowlevel_init(void) {}
+void lowlevel_init(void)
+{
+ zynq_slcr_unlock();
+ /* remap DDR to zero, FILTERSTART */
+ writel(0, &scu_base->filter_start);
+
+ /* Device config APB, unlock the PCAP */
+ writel(0x757BDF0D, &devcfg_base->unlock);
+ writel(0xFFFFFFFF, &devcfg_base->rom_shadow);
+
+ /* OCM_CFG, Mask out the ROM, map ram into upper addresses */
+ writel(0x1F, &slcr_base->ocm_cfg);
+ /* FPGA_RST_CTRL, clear resets on AXI fabric ports */
+ writel(0x0, &slcr_base->fpga_rst_ctrl);
+ /* TZ_DDR_RAM, Set DDR trust zone non-secure */
+ writel(0xFFFFFFFF, &slcr_base->trust_zone);
+ /* Set urgent bits with register */
+ writel(0x0, &slcr_base->ddr_urgent_sel);
+ /* Urgent write, ports S2/S3 */
+ writel(0xC, &slcr_base->ddr_urgent);
+
+ zynq_slcr_lock();
+}
void reset_cpu(ulong addr)
{
+ zynq_slcr_cpu_reset();
while (1)
;
}