hc
2023-11-22 f743a7adbd6e230d66a6206fa115b59fec2d88eb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
/*
 * Timll DevKit3250 board support, SPL board configuration
 *
 * (C) Copyright 2015 Vladimir Zapolskiy <vz@mleia.com>
 *
 * SPDX-License-Identifier:    GPL-2.0+
 */
 
#include <common.h>
#include <asm/io.h>
#include <asm/arch/sys_proto.h>
#include <asm/arch/cpu.h>
#include <asm/arch/emc.h>
#include <asm/arch-lpc32xx/gpio.h>
#include <spl.h>
 
static struct gpio_regs *gpio = (struct gpio_regs *)GPIO_BASE;
 
/*
 * SDRAM K4S561632N-LC60 settings are selected in assumption that
 * SDRAM clock may be set up to 166 MHz, however at the moment
 * it is 104 MHz. Most delay values are converted to be a multiple of
 * base clock, and precise pinned values are not needed here.
 */
struct emc_dram_settings dram_64mb = {
   .cmddelay    = 0x0001C000,
   .config0    = 0x00005682,
   .rascas0    = 0x00000302,
   .rdconfig    = 0x00000011,    /* undocumented but crucial value */
 
   .trp    = 83333333,
   .tras    = 23809524,
   .tsrex    = 12500000,
   .twr    = 83000000,        /* tWR = tRDL = 2 CLK */
   .trc    = 15384616,
   .trfc    = 15384616,
   .txsr    = 12500000,
   .trrd    = 1,
   .tmrd    = 1,
   .tcdlr    = 0,
 
   .refresh    = 130000,    /* 800 clock cycles */
 
   .mode    = 0x00018000,
   .emode    = 0x02000000,
};
 
void spl_board_init(void)
{
   /* First of all silence buzzer controlled by GPO_20 */
   writel((1 << 20), &gpio->p3_outp_clr);
 
   lpc32xx_uart_init(CONFIG_SYS_LPC32XX_UART);
   preloader_console_init();
 
   ddr_init(&dram_64mb);
 
   /*
    * NAND initialization is done by nand_init(),
    * here just enable NAND SLC clocks
    */
   lpc32xx_slc_nand_init();
}
 
u32 spl_boot_device(void)
{
   return BOOT_DEVICE_NAND;
}