OLD | NEW |
---|---|
1 /* | 1 /* |
2 * (C) Copyright 2010 | 2 * (C) Copyright 2010 |
3 * NVIDIA Corporation <www.nvidia.com> | 3 * NVIDIA Corporation <www.nvidia.com> |
4 * | 4 * |
5 * See file CREDITS for list of people who contributed to this | 5 * See file CREDITS for list of people who contributed to this |
6 * project. | 6 * project. |
7 * | 7 * |
8 * This program is free software; you can redistribute it and/or | 8 * This program is free software; you can redistribute it and/or |
9 * modify it under the terms of the GNU General Public License as | 9 * modify it under the terms of the GNU General Public License as |
10 * published by the Free Software Foundation; either version 2 of | 10 * published by the Free Software Foundation; either version 2 of |
(...skipping 13 matching lines...) Expand all Loading... | |
24 | 24 |
25 #define NV_ASSERT(p) \ | 25 #define NV_ASSERT(p) \ |
26 { if ((p) == 0) { \ | 26 { if ((p) == 0) { \ |
27 uart_post('C'); \ | 27 uart_post('C'); \ |
28 uart_post('o'); \ | 28 uart_post('o'); \ |
29 uart_post('l'); \ | 29 uart_post('l'); \ |
30 uart_post('d'); \ | 30 uart_post('d'); \ |
31 }; \ | 31 }; \ |
32 } | 32 } |
33 | 33 |
34 /** Scratch register macros **/ | |
35 | |
36 /** NV_SF_NUM - define a new scratch register value. | |
37 | |
38 @param s scratch register name (APBDEV_PMC_s) | |
39 @param f register field | |
40 @param n defined value for the field | |
41 */ | |
42 #define NV_SF_NUM(s,f,n) \ | |
43 (((n)& NV_FIELD_MASK(APBDEV_PMC_##s##_0_##f##_RANGE)) << \ | |
44 NV_FIELD_SHIFT(APBDEV_PMC_##s##_0_##f##_RANGE)) | |
45 | |
46 | |
47 /** NV_FLD_SET_SR_NUM - modify a scratch register field. | |
48 | |
49 @param s scratch register name (APBDEV_PMC_s) | |
50 @param f register field | |
51 @param n numeric field value | |
52 */ | |
53 #define NV_FLD_SET_SF_NUM(s,f,n) \ | |
54 ((s & ~NV_FIELD_SHIFTMASK(APBDEV_PMC_##s##_0_##f##_RANGE))\ | |
55 | NV_SF_NUM(s,f,n)) | |
56 | |
57 | |
58 /** NV_SDRF_NUM - define a new scratch register value. | |
59 | |
60 @param s scratch register name (APBDEV_PMC_s) | |
61 @param d register domain (hardware block) | |
62 @param r register name | |
63 @param f register field | |
64 @param n defined value for the field | |
65 */ | |
66 #define NV_SDRF_NUM(s,d,r,f,n) \ | |
67 (((n)& NV_FIELD_MASK(APBDEV_PMC_##s##_0_##d##_##r##_0_##f##_RANGE)) << \ | |
68 NV_FIELD_SHIFT(APBDEV_PMC_##s##_0_##d##_##r##_0_##f##_RANGE)) | |
69 | |
70 | |
71 /** NV_FLD_SET_SDRF_NUM - modify a scratch register field. | |
72 | |
73 @param s scratch register name (APBDEV_PMC_s) | |
74 @param d register domain (hardware block) | |
75 @param r register name | |
76 @param f register field | |
77 @param n numeric field value | |
78 */ | |
79 #define NV_FLD_SET_SDRF_NUM(s,d,r,f,n) \ | |
80 ((s & ~NV_FIELD_SHIFTMASK(APBDEV_PMC_##s##_0_##d##_##r##_0_##f##_RANGE)) \ | |
81 | NV_SDRF_NUM(s,d,r,f,n)) | |
82 | |
83 | |
84 /** SCRATCH_REGS() - PMC scratch registers (list of SCRATCH_REG() macros). | |
85 SCRATCH_REG(s) - PMC scratch register name: | |
86 | |
87 @param s Scratch register name (APBDEV_PMC_s) | |
88 */ | |
89 #define SCRATCH_REGS() \ | |
90 SCRATCH_REG(SCRATCH2) \ | |
91 SCRATCH_REG(SCRATCH4) \ | |
92 SCRATCH_REG(SCRATCH24) \ | |
93 /* End-of-List*/ | |
94 | |
95 #define SCRATCH_REG(s) static NvU32 s = 0; | |
96 SCRATCH_REGS() | |
97 #undef SCRATCH_REG | |
98 | |
99 #define REGS() \ | |
100 /* CLK_RST Group */ \ | |
101 REG(SCRATCH2, CLK_RST_CONTROLLER, OSC_CTRL, XOBP) \ | |
102 REG(SCRATCH2, CLK_RST_CONTROLLER, PLLM_BASE, PLLM_DIVM) \ | |
103 REG(SCRATCH2, CLK_RST_CONTROLLER, PLLM_BASE, PLLM_DIVN) \ | |
104 REG(SCRATCH2, CLK_RST_CONTROLLER, PLLM_BASE, PLLM_DIVP) \ | |
105 REG(SCRATCH2, CLK_RST_CONTROLLER, PLLM_MISC, PLLM_CPCON) \ | |
106 REG(SCRATCH2, CLK_RST_CONTROLLER, PLLM_MISC, PLLM_LFCON) \ | |
107 /**/ \ | |
108 /* EMC Group */ \ | |
109 REG2(SCRATCH4, EMC, FBIO_SPARE, CFG_FBIO_SPARE_WB0) \ | |
110 /* APB_MISC Group */ \ | |
111 REG3(SCRATCH2, APB_MISC, GP_XM2CFGAPADCTRL, CFG2TMC_XM2CFGA_PREE MP_EN) \ | |
112 REG3(SCRATCH2, APB_MISC, GP_XM2CFGDPADCTRL, CFG2TMC_XM2CFGD_SCHM T_EN) \ | |
113 /**/ \ | |
114 /* BCT SdramParams Group*/ \ | |
115 RAM(SCRATCH2, MEMORY_TYPE, MemoryType) \ | |
116 /**/ \ | |
117 RAM(SCRATCH4, EMC_CLOCK_DIVIDER, EmcClockDivider) \ | |
118 CONSTANT(SCRATCH4, PLLM_STABLE_TIME, ~0) /* Stuff the maximum va lue */ \ | |
119 CONSTANT(SCRATCH4, PLLX_STABLE_TIME, ~0) /* Stuff the maximum va lue */ \ | |
120 /**/ \ | |
121 RAM(SCRATCH24, EMC_AUTO_CAL_WAIT, EmcAutoCalWait) \ | |
122 RAM(SCRATCH24, EMC_PIN_PROGRAM_WAIT, EmcPinProgramWait) \ | |
123 RAM(SCRATCH24, WARMBOOT_WAIT, WarmBootWait) | |
124 | |
125 /*Correct names */ | |
126 #define APBDEV_PMC_SCRATCH2_0_CLK_RST_CONTROLLER_OSC_CTRL_0_XOBP_RANGE\ | |
127 APBDEV_PMC_SCRATCH2_0_CLK_RST_OSC_CTRL_XOBP_RANGE | |
128 #define APBDEV_PMC_SCRATCH2_0_CLK_RST_CONTROLLER_PLLM_BASE_0_PLLM_DIVM_RANGE\ | |
129 APBDEV_PMC_SCRATCH2_0_CLK_RST_PLLM_BASE_PLLM_DIVM_RANGE | |
130 #define APBDEV_PMC_SCRATCH2_0_CLK_RST_CONTROLLER_PLLM_BASE_0_PLLM_DIVN_RANGE\ | |
131 APBDEV_PMC_SCRATCH2_0_CLK_RST_PLLM_BASE_PLLM_DIVN_RANGE | |
132 #define APBDEV_PMC_SCRATCH2_0_CLK_RST_CONTROLLER_PLLM_BASE_0_PLLM_DIVP_RANGE\ | |
133 APBDEV_PMC_SCRATCH2_0_CLK_RST_PLLM_BASE_PLLM_DIVP_RANGE | |
134 #define APBDEV_PMC_SCRATCH2_0_CLK_RST_CONTROLLER_PLLM_MISC_0_PLLM_CPCON_RANGE\ | |
135 APBDEV_PMC_SCRATCH2_0_CLK_RST_PLLM_MISC_CPCON_RANGE | |
136 #define APBDEV_PMC_SCRATCH2_0_CLK_RST_CONTROLLER_PLLM_MISC_0_PLLM_LFCON_RANGE\ | |
137 APBDEV_PMC_SCRATCH2_0_CLK_RST_PLLM_MISC_LFCON_RANGE | |
138 | |
139 #define SDRAM_PARAMS_BASE_ADDR (0x40000000 + 0x100 + 0x88) | |
140 | |
Tom Warren
2010/11/16 18:34:27
Please #ifdef this function with CONFIG_TEGRA2_LP0
yelin
2010/11/16 23:41:04
Done.
| |
141 void NvBlSaveSdramParams(void) | |
142 { | |
143 NvU32 reg; /* Module register contents */ | |
144 NvU32 val; /* Register field contents */ | |
145 NvBootSdramParams sdram_params; | |
146 | |
147 memcpy (&sdram_params, (char *)SDRAM_PARAMS_BASE_ADDR, | |
148 sizeof(NvBootSdramParams)); | |
149 | |
150 /* REG(s,d,r,f) | |
151 * s = destination Scratch register | |
152 * d = Device name | |
153 * r = Register name | |
154 * f = register Field | |
155 */ | |
156 #define REG(s,d,r,f) \ | |
157 reg = NV_CAR_REGR(CLK_RST_PA_BASE, r); \ | |
158 val = NV_DRF_VAL(d,r,f,reg); \ | |
159 s = NV_FLD_SET_SDRF_NUM(s,d,r,f,val); | |
160 | |
161 #define REG2(s,d,r,f) \ | |
162 reg = NV_EMC_REGR(EMC_PA_BASE, r); \ | |
163 val = NV_DRF_VAL(d,r,f,reg); \ | |
164 s = NV_FLD_SET_SDRF_NUM(s,d,r,f,val); | |
165 | |
166 #define REG3(s,d,r,f) \ | |
167 reg = NV_MISC_REGR(MISC_PA_BASE, r);\ | |
168 val = NV_DRF_VAL(d,r,f,reg); \ | |
169 s = NV_FLD_SET_SDRF_NUM(s,d,r,f,val); | |
170 | |
171 /* RAM(s,f,n) | |
172 * s = destination Scratch register | |
173 * f = register Field | |
174 * v = bct Variable | |
175 */ | |
176 #define RAM(s,f,v) \ | |
177 s = NV_FLD_SET_SF_NUM(s,f,sdram_params.v); | |
178 | |
179 /* Define the transformation macro that will stuff a PMC scratch registe r | |
180 * with a constant value. | |
181 */ | |
182 | |
183 /* CONSTANT(s,f,n) | |
184 * s = destination Scratch register | |
185 * f = register Field | |
186 * v = constant Value | |
187 */ | |
188 #define CONSTANT(s,f,v) \ | |
189 s = NV_FLD_SET_SF_NUM(s,f,v); | |
190 | |
191 /*Instantiate all of the register transformations. */ | |
192 REGS() | |
193 #undef RAM | |
194 #undef CONSTANT | |
195 | |
196 /* Generate writes to the PMC scratch registers to copy the local | |
197 * variables to the actual registers. | |
198 */ | |
199 #define SCRATCH_REG(s)\ | |
200 NV_PMC_REGW(PMC_PA_BASE, s, s); | |
201 SCRATCH_REGS() | |
202 #undef SCRATCH_REG | |
203 } | |
204 | |
34 void NvBlAvpStallUs(NvU32 MicroSec) | 205 void NvBlAvpStallUs(NvU32 MicroSec) |
35 { | 206 { |
36 NvU32 Reg; // Flow controller register | 207 NvU32 Reg; // Flow controller register |
37 NvU32 Delay; // Microsecond delay time | 208 NvU32 Delay; // Microsecond delay time |
38 NvU32 MaxUs; // Maximum flow controller delay | 209 NvU32 MaxUs; // Maximum flow controller delay |
39 | 210 |
40 // Get the maxium delay per loop. | 211 // Get the maxium delay per loop. |
41 MaxUs = NV_DRF_NUM(FLOW_CTLR, HALT_COP_EVENTS, ZERO, 0xFFFFFFFF); | 212 MaxUs = NV_DRF_NUM(FLOW_CTLR, HALT_COP_EVENTS, ZERO, 0xFFFFFFFF); |
42 | 213 |
43 while (MicroSec) | 214 while (MicroSec) |
(...skipping 705 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
749 pPmc = (volatile NvU8 *)(NV_ADDRESS_MAP_PMC_BASE); | 920 pPmc = (volatile NvU8 *)(NV_ADDRESS_MAP_PMC_BASE); |
750 | 921 |
751 // SCRATCH0 is initialized by the boot ROM and shouldn't be cleared | 922 // SCRATCH0 is initialized by the boot ROM and shouldn't be cleared |
752 for (i=APBDEV_PMC_SCRATCH1_0; i<=APBDEV_PMC_SCRATCH23_0; i+=4) | 923 for (i=APBDEV_PMC_SCRATCH1_0; i<=APBDEV_PMC_SCRATCH23_0; i+=4) |
753 { | 924 { |
754 if (i==APBDEV_PMC_SCRATCH20_0) | 925 if (i==APBDEV_PMC_SCRATCH20_0) |
755 NV_WRITE32(pPmc+i, CONFIG_SYS_BOARD_ODMDATA); | 926 NV_WRITE32(pPmc+i, CONFIG_SYS_BOARD_ODMDATA); |
756 else | 927 else |
757 NV_WRITE32(pPmc+i, 0); | 928 NV_WRITE32(pPmc+i, 0); |
758 } | 929 } |
930 | |
931 // Save Sdram params to PMC 2, 4, and 24 for WB0 | |
Tom Warren
2010/11/16 18:34:27
Please #ifdef CONFIG_TEGRA2_LP0 here, also.
yelin
2010/11/16 23:41:04
Done.
| |
932 NvBlSaveSdramParams(); | |
759 } | 933 } |
760 | 934 |
761 NvU32 s_ChipId; | 935 NvU32 s_ChipId; |
762 volatile NvU32 s_bFirstBoot = 1; | 936 volatile NvU32 s_bFirstBoot = 1; |
763 | 937 |
764 void cpu_start( void ) | 938 void cpu_start( void ) |
765 { | 939 { |
766 volatile NvU32 *jtagReg = (NvU32*)0x70000024; | 940 volatile NvU32 *jtagReg = (NvU32*)0x70000024; |
767 NvU32 reg; | 941 NvU32 reg; |
768 | 942 |
769 // enable JTAG | 943 // enable JTAG |
770 *jtagReg = 192; | 944 *jtagReg = 192; |
Tom Warren
2010/11/16 16:44:11
Please use #defined values from tegra2.h here, not
yelin
2010/11/16 23:41:04
Done.
| |
771 | 945 |
772 reg = NV_MISC_REGR( MISC_PA_BASE, GP_HIDREV ); | 946 reg = NV_MISC_REGR( MISC_PA_BASE, GP_HIDREV ); |
773 | 947 |
774 // DRF macros generate too-complicated code for the arm7 | 948 // DRF macros generate too-complicated code for the arm7 |
775 s_ChipId = reg >> 8; | 949 s_ChipId = reg >> 8; |
776 s_ChipId &= 0xff; | 950 s_ChipId &= 0xff; |
777 if( s_bFirstBoot ) | 951 if( s_bFirstBoot ) |
778 { | 952 { |
779 uart_post('i'); | 953 uart_post('i'); |
780 /* need to set this before cold-booting, otherwise we'll end up in | 954 /* need to set this before cold-booting, otherwise we'll end up in |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
820 /***********************************************************************/ | 994 /***********************************************************************/ |
821 NvBlCacheConfigure(); | 995 NvBlCacheConfigure(); |
822 | 996 |
823 /* post code 'Yy' */ | 997 /* post code 'Yy' */ |
824 PostYy(); | 998 PostYy(); |
825 #endif | 999 #endif |
826 | 1000 |
827 /* post code 'Xx' */ | 1001 /* post code 'Xx' */ |
828 PostXx(); | 1002 PostXx(); |
829 } | 1003 } |
OLD | NEW |