1 /* 2 * Copyright (C) 2012 Michal Simek <monstr@monstr.eu> 3 * Copyright (C) 2012 Xilinx, Inc. All rights reserved. 4 * 5 * SPDX-License-Identifier: GPL-2.0+ 6 */ 7 #include <common.h> 8 #include <asm/io.h> 9 #include <asm/arch/clk.h> 10 #include <asm/arch/sys_proto.h> 11 #include <asm/arch/hardware.h> 12 13 #define ZYNQ_SILICON_VER_MASK 0xF0000000 14 #define ZYNQ_SILICON_VER_SHIFT 28 15 16 int arch_cpu_init(void) 17 { 18 zynq_slcr_unlock(); 19 #ifndef CONFIG_SPL_BUILD 20 /* Device config APB, unlock the PCAP */ 21 writel(0x757BDF0D, &devcfg_base->unlock); 22 writel(0xFFFFFFFF, &devcfg_base->rom_shadow); 23 24 #if (CONFIG_SYS_SDRAM_BASE == 0) 25 /* remap DDR to zero, FILTERSTART */ 26 writel(0, &scu_base->filter_start); 27 28 /* OCM_CFG, Mask out the ROM, map ram into upper addresses */ 29 writel(0x1F, &slcr_base->ocm_cfg); 30 /* FPGA_RST_CTRL, clear resets on AXI fabric ports */ 31 writel(0x0, &slcr_base->fpga_rst_ctrl); 32 /* Set urgent bits with register */ 33 writel(0x0, &slcr_base->ddr_urgent_sel); 34 /* Urgent write, ports S2/S3 */ 35 writel(0xC, &slcr_base->ddr_urgent); 36 #endif 37 #endif 38 zynq_clk_early_init(); 39 zynq_slcr_lock(); 40 41 return 0; 42 } 43 44 unsigned int zynq_get_silicon_version(void) 45 { 46 return (readl(&devcfg_base->mctrl) & ZYNQ_SILICON_VER_MASK) 47 >> ZYNQ_SILICON_VER_SHIFT; 48 } 49 50 void reset_cpu(ulong addr) 51 { 52 zynq_slcr_cpu_reset(); 53 while (1) 54 ; 55 } 56 57 #ifndef CONFIG_SYS_DCACHE_OFF 58 void enable_caches(void) 59 { 60 /* Enable D-cache. I-cache is already enabled in start.S */ 61 dcache_enable(); 62 } 63 #endif 64