Blame view

arch/arm/cpu/armv7/socfpga/spl.c 5.28 KB
777544085   Dinh Nguyen   ARM: Add Altera S...
1
2
3
  /*
   *  Copyright (C) 2012 Altera Corporation <www.altera.com>
   *
1a4596601   Wolfgang Denk   Add GPL-2.0+ SPDX...
4
   * SPDX-License-Identifier:	GPL-2.0+
777544085   Dinh Nguyen   ARM: Add Altera S...
5
6
7
8
9
10
11
12
   */
  
  #include <common.h>
  #include <asm/io.h>
  #include <asm/u-boot.h>
  #include <asm/utils.h>
  #include <version.h>
  #include <image.h>
777544085   Dinh Nguyen   ARM: Add Altera S...
13
14
  #include <asm/arch/reset_manager.h>
  #include <spl.h>
5d649d2b0   Chin Liang See   socfpga: Adding S...
15
  #include <asm/arch/system_manager.h>
4c5441973   Chin Liang See   socfpga: Adding F...
16
  #include <asm/arch/freeze_controller.h>
3ab019e1d   Chin Liang See   socfpga: Fix SOCF...
17
18
  #include <asm/arch/clock_manager.h>
  #include <asm/arch/scan_manager.h>
777544085   Dinh Nguyen   ARM: Add Altera S...
19
20
  
  DECLARE_GLOBAL_DATA_PTR;
44428ab6a   Marek Vasut   arm: socfpga: clo...
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
  #define MAIN_VCO_BASE (					\
  	(CONFIG_HPS_MAINPLLGRP_VCO_DENOM <<		\
  		CLKMGR_MAINPLLGRP_VCO_DENOM_OFFSET) |	\
  	(CONFIG_HPS_MAINPLLGRP_VCO_NUMER <<		\
  		CLKMGR_MAINPLLGRP_VCO_NUMER_OFFSET)	\
  	)
  
  #define PERI_VCO_BASE (					\
  	(CONFIG_HPS_PERPLLGRP_VCO_PSRC <<		\
  		CLKMGR_PERPLLGRP_VCO_PSRC_OFFSET) |	\
  	(CONFIG_HPS_PERPLLGRP_VCO_DENOM <<		\
  		CLKMGR_PERPLLGRP_VCO_DENOM_OFFSET) |	\
  	(CONFIG_HPS_PERPLLGRP_VCO_NUMER <<		\
  		CLKMGR_PERPLLGRP_VCO_NUMER_OFFSET)	\
  	)
  
  #define SDR_VCO_BASE (					\
  	(CONFIG_HPS_SDRPLLGRP_VCO_SSRC <<		\
  		CLKMGR_SDRPLLGRP_VCO_SSRC_OFFSET) |	\
  	(CONFIG_HPS_SDRPLLGRP_VCO_DENOM <<		\
  		CLKMGR_SDRPLLGRP_VCO_DENOM_OFFSET) |	\
  	(CONFIG_HPS_SDRPLLGRP_VCO_NUMER <<		\
  		CLKMGR_SDRPLLGRP_VCO_NUMER_OFFSET)	\
  	)
777544085   Dinh Nguyen   ARM: Add Altera S...
45
46
47
48
49
50
51
52
53
54
  u32 spl_boot_device(void)
  {
  	return BOOT_DEVICE_RAM;
  }
  
  /*
   * Board initialization after bss clearance
   */
  void spl_board_init(void)
  {
5d649d2b0   Chin Liang See   socfpga: Adding S...
55
  #ifndef CONFIG_SOCFPGA_VIRTUAL_TARGET
ddfeb0aaf   Chin Liang See   socfpga: Adding C...
56
57
58
  	cm_config_t cm_default_cfg = {
  		/* main group */
  		MAIN_VCO_BASE,
44428ab6a   Marek Vasut   arm: socfpga: clo...
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
  		(CONFIG_HPS_MAINPLLGRP_MPUCLK_CNT <<
  			CLKMGR_MAINPLLGRP_MPUCLK_CNT_OFFSET),
  		(CONFIG_HPS_MAINPLLGRP_MAINCLK_CNT <<
  			CLKMGR_MAINPLLGRP_MAINCLK_CNT_OFFSET),
  		(CONFIG_HPS_MAINPLLGRP_DBGATCLK_CNT <<
  			CLKMGR_MAINPLLGRP_DBGATCLK_CNT_OFFSET),
  		(CONFIG_HPS_MAINPLLGRP_MAINQSPICLK_CNT <<
  			CLKMGR_MAINPLLGRP_MAINQSPICLK_CNT_OFFSET),
  		(CONFIG_HPS_MAINPLLGRP_MAINNANDSDMMCCLK_CNT <<
  			CLKMGR_PERPLLGRP_PERNANDSDMMCCLK_CNT_OFFSET),
  		(CONFIG_HPS_MAINPLLGRP_CFGS2FUSER0CLK_CNT <<
  			CLKMGR_MAINPLLGRP_CFGS2FUSER0CLK_CNT_OFFSET),
  		(CONFIG_HPS_MAINPLLGRP_MAINDIV_L3MPCLK <<
  			CLKMGR_MAINPLLGRP_MAINDIV_L3MPCLK_OFFSET) |
  		(CONFIG_HPS_MAINPLLGRP_MAINDIV_L3SPCLK <<
  			CLKMGR_MAINPLLGRP_MAINDIV_L3SPCLK_OFFSET) |
  		(CONFIG_HPS_MAINPLLGRP_MAINDIV_L4MPCLK <<
  			CLKMGR_MAINPLLGRP_MAINDIV_L4MPCLK_OFFSET) |
  		(CONFIG_HPS_MAINPLLGRP_MAINDIV_L4SPCLK <<
  			CLKMGR_MAINPLLGRP_MAINDIV_L4SPCLK_OFFSET),
  		(CONFIG_HPS_MAINPLLGRP_DBGDIV_DBGATCLK <<
  			CLKMGR_MAINPLLGRP_DBGDIV_DBGATCLK_OFFSET) |
  		(CONFIG_HPS_MAINPLLGRP_DBGDIV_DBGCLK <<
  			CLKMGR_MAINPLLGRP_DBGDIV_DBGCLK_OFFSET),
  		(CONFIG_HPS_MAINPLLGRP_TRACEDIV_TRACECLK <<
  			CLKMGR_MAINPLLGRP_TRACEDIV_TRACECLK_OFFSET),
  		(CONFIG_HPS_MAINPLLGRP_L4SRC_L4MP <<
  			CLKMGR_MAINPLLGRP_L4SRC_L4MP_OFFSET) |
  		(CONFIG_HPS_MAINPLLGRP_L4SRC_L4SP <<
  			CLKMGR_MAINPLLGRP_L4SRC_L4SP_OFFSET),
ddfeb0aaf   Chin Liang See   socfpga: Adding C...
89
90
91
  
  		/* peripheral group */
  		PERI_VCO_BASE,
44428ab6a   Marek Vasut   arm: socfpga: clo...
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
  		(CONFIG_HPS_PERPLLGRP_EMAC0CLK_CNT <<
  			CLKMGR_PERPLLGRP_EMAC0CLK_CNT_OFFSET),
  		(CONFIG_HPS_PERPLLGRP_EMAC1CLK_CNT <<
  			CLKMGR_PERPLLGRP_EMAC1CLK_CNT_OFFSET),
  		(CONFIG_HPS_PERPLLGRP_PERQSPICLK_CNT <<
  			CLKMGR_PERPLLGRP_PERQSPICLK_CNT_OFFSET),
  		(CONFIG_HPS_PERPLLGRP_PERNANDSDMMCCLK_CNT <<
  			CLKMGR_PERPLLGRP_PERNANDSDMMCCLK_CNT_OFFSET),
  		(CONFIG_HPS_PERPLLGRP_PERBASECLK_CNT <<
  			CLKMGR_PERPLLGRP_PERBASECLK_CNT_OFFSET),
  		(CONFIG_HPS_PERPLLGRP_S2FUSER1CLK_CNT <<
  			CLKMGR_PERPLLGRP_S2FUSER1CLK_CNT_OFFSET),
  		(CONFIG_HPS_PERPLLGRP_DIV_USBCLK <<
  			CLKMGR_PERPLLGRP_DIV_USBCLK_OFFSET) |
  		(CONFIG_HPS_PERPLLGRP_DIV_SPIMCLK <<
  			CLKMGR_PERPLLGRP_DIV_SPIMCLK_OFFSET) |
  		(CONFIG_HPS_PERPLLGRP_DIV_CAN0CLK <<
  			CLKMGR_PERPLLGRP_DIV_CAN0CLK_OFFSET) |
  		(CONFIG_HPS_PERPLLGRP_DIV_CAN1CLK <<
  			CLKMGR_PERPLLGRP_DIV_CAN1CLK_OFFSET),
  		(CONFIG_HPS_PERPLLGRP_GPIODIV_GPIODBCLK <<
  			CLKMGR_PERPLLGRP_GPIODIV_GPIODBCLK_OFFSET),
  		(CONFIG_HPS_PERPLLGRP_SRC_QSPI <<
  			CLKMGR_PERPLLGRP_SRC_QSPI_OFFSET) |
  		(CONFIG_HPS_PERPLLGRP_SRC_NAND <<
  			CLKMGR_PERPLLGRP_SRC_NAND_OFFSET) |
  		(CONFIG_HPS_PERPLLGRP_SRC_SDMMC <<
  			CLKMGR_PERPLLGRP_SRC_SDMMC_OFFSET),
ddfeb0aaf   Chin Liang See   socfpga: Adding C...
120
121
122
  
  		/* sdram pll group */
  		SDR_VCO_BASE,
44428ab6a   Marek Vasut   arm: socfpga: clo...
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
  		(CONFIG_HPS_SDRPLLGRP_DDRDQSCLK_PHASE <<
  			CLKMGR_SDRPLLGRP_DDRDQSCLK_PHASE_OFFSET) |
  		(CONFIG_HPS_SDRPLLGRP_DDRDQSCLK_CNT <<
  			CLKMGR_SDRPLLGRP_DDRDQSCLK_CNT_OFFSET),
  		(CONFIG_HPS_SDRPLLGRP_DDR2XDQSCLK_PHASE <<
  			CLKMGR_SDRPLLGRP_DDR2XDQSCLK_PHASE_OFFSET) |
  		(CONFIG_HPS_SDRPLLGRP_DDR2XDQSCLK_CNT <<
  			CLKMGR_SDRPLLGRP_DDR2XDQSCLK_CNT_OFFSET),
  		(CONFIG_HPS_SDRPLLGRP_DDRDQCLK_PHASE <<
  			CLKMGR_SDRPLLGRP_DDRDQCLK_PHASE_OFFSET) |
  		(CONFIG_HPS_SDRPLLGRP_DDRDQCLK_CNT <<
  			CLKMGR_SDRPLLGRP_DDRDQCLK_CNT_OFFSET),
  		(CONFIG_HPS_SDRPLLGRP_S2FUSER2CLK_PHASE <<
  			CLKMGR_SDRPLLGRP_S2FUSER2CLK_PHASE_OFFSET) |
  		(CONFIG_HPS_SDRPLLGRP_S2FUSER2CLK_CNT <<
  			CLKMGR_SDRPLLGRP_S2FUSER2CLK_CNT_OFFSET),
ddfeb0aaf   Chin Liang See   socfpga: Adding C...
139
  	};
4c5441973   Chin Liang See   socfpga: Adding F...
140
141
142
143
  	debug("Freezing all I/O banks
  ");
  	/* freeze all IO banks */
  	sys_mgr_frzctrl_freeze_req();
ddfeb0aaf   Chin Liang See   socfpga: Adding C...
144
145
146
147
  	debug("Reconfigure Clock Manager
  ");
  	/* reconfigure the PLLs */
  	cm_basic_init(&cm_default_cfg);
dc4d4aa14   Chin Liang See   socfpga: Adding S...
148
149
150
  	/* configure the IOCSR / IO buffer settings */
  	if (scan_mgr_configure_iocsr())
  		hang();
5d649d2b0   Chin Liang See   socfpga: Adding S...
151
152
153
  	/* configure the pin muxing through system manager */
  	sysmgr_pinmux_init();
  #endif /* CONFIG_SOCFPGA_VIRTUAL_TARGET */
777544085   Dinh Nguyen   ARM: Add Altera S...
154
155
  	/* de-assert reset for peripherals and bridges based on handoff */
  	reset_deassert_peripherals_handoff();
4c5441973   Chin Liang See   socfpga: Adding F...
156
157
158
159
  	debug("Unfreezing/Thaw all I/O banks
  ");
  	/* unfreeze / thaw all IO banks */
  	sys_mgr_frzctrl_thaw_req();
777544085   Dinh Nguyen   ARM: Add Altera S...
160
161
162
  	/* enable console uart printing */
  	preloader_console_init();
  }