1*cba69eeeSIan Campbell /* 2*cba69eeeSIan Campbell * (C) Copyright 2012-2013 Henrik Nordstrom <henrik@henriknordstrom.net> 3*cba69eeeSIan Campbell * (C) Copyright 2013 Luke Kenneth Casson Leighton <lkcl@lkcl.net> 4*cba69eeeSIan Campbell * 5*cba69eeeSIan Campbell * (C) Copyright 2007-2011 6*cba69eeeSIan Campbell * Allwinner Technology Co., Ltd. <www.allwinnertech.com> 7*cba69eeeSIan Campbell * Tom Cubie <tangliang@allwinnertech.com> 8*cba69eeeSIan Campbell * 9*cba69eeeSIan Campbell * Some board init for the Allwinner A10-evb board. 10*cba69eeeSIan Campbell * 11*cba69eeeSIan Campbell * SPDX-License-Identifier: GPL-2.0+ 12*cba69eeeSIan Campbell */ 13*cba69eeeSIan Campbell 14*cba69eeeSIan Campbell #include <common.h> 15*cba69eeeSIan Campbell #include <asm/arch/clock.h> 16*cba69eeeSIan Campbell #include <asm/arch/dram.h> 17*cba69eeeSIan Campbell 18*cba69eeeSIan Campbell DECLARE_GLOBAL_DATA_PTR; 19*cba69eeeSIan Campbell 20*cba69eeeSIan Campbell /* add board specific code here */ 21*cba69eeeSIan Campbell int board_init(void) 22*cba69eeeSIan Campbell { 23*cba69eeeSIan Campbell int id_pfr1; 24*cba69eeeSIan Campbell 25*cba69eeeSIan Campbell gd->bd->bi_boot_params = (PHYS_SDRAM_0 + 0x100); 26*cba69eeeSIan Campbell 27*cba69eeeSIan Campbell asm volatile("mrc p15, 0, %0, c0, c1, 1" : "=r"(id_pfr1)); 28*cba69eeeSIan Campbell debug("id_pfr1: 0x%08x\n", id_pfr1); 29*cba69eeeSIan Campbell /* Generic Timer Extension available? */ 30*cba69eeeSIan Campbell if ((id_pfr1 >> 16) & 0xf) { 31*cba69eeeSIan Campbell debug("Setting CNTFRQ\n"); 32*cba69eeeSIan Campbell /* CNTFRQ == 24 MHz */ 33*cba69eeeSIan Campbell asm volatile("mcr p15, 0, %0, c14, c0, 0" : : "r"(24000000)); 34*cba69eeeSIan Campbell } 35*cba69eeeSIan Campbell 36*cba69eeeSIan Campbell return 0; 37*cba69eeeSIan Campbell } 38*cba69eeeSIan Campbell 39*cba69eeeSIan Campbell int dram_init(void) 40*cba69eeeSIan Campbell { 41*cba69eeeSIan Campbell gd->ram_size = get_ram_size((long *)PHYS_SDRAM_0, PHYS_SDRAM_0_SIZE); 42*cba69eeeSIan Campbell 43*cba69eeeSIan Campbell return 0; 44*cba69eeeSIan Campbell } 45*cba69eeeSIan Campbell 46*cba69eeeSIan Campbell #ifdef CONFIG_SPL_BUILD 47*cba69eeeSIan Campbell void sunxi_board_init(void) 48*cba69eeeSIan Campbell { 49*cba69eeeSIan Campbell unsigned long ramsize; 50*cba69eeeSIan Campbell 51*cba69eeeSIan Campbell printf("DRAM:"); 52*cba69eeeSIan Campbell ramsize = sunxi_dram_init(); 53*cba69eeeSIan Campbell printf(" %lu MiB\n", ramsize >> 20); 54*cba69eeeSIan Campbell if (!ramsize) 55*cba69eeeSIan Campbell hang(); 56*cba69eeeSIan Campbell } 57*cba69eeeSIan Campbell #endif 58