file_demo_bios/am57xx: use the common folder for all the shared files; change to...
[processor-sdk/audio-preprocessing.git] / file_demo_bios / da830 / dskda830_dsp.gel
1 /* ------------------------------------------------------------------------ *\r
2  *                                                                          *\r
3  *  dskda830_dsp.gel                                                        *\r
4  *  Version 1.06                                                            *\r
5  *                                                                          *\r
6  *  This GEL file is designed to be used in conjunction with                *\r
7  *  CCStudio 3.3+ and the DA830 based DSK.                                  *\r
8  *                                                                          *\r
9  *  SDI Version History:                                                    *\r
10  *  1.00 Initial Release                                                    *\r
11  *  1.01 Added USB1 clock enable in CFGCGHIP2                               *\r
12  *  1.02 Added Setup_Data_Cache(), added hotmenu item Setup_EMIFA_PinMux()  *\r
13  *  1.03 Corrected PINMUX0, 11 settings to enable EMB_CLK, AXR2[0]          *\r
14  *  1.04 General cleanup                                                    *\r
15  *  1.05 Corrected ARM INTC in Memory map                                   *\r
16  *  1.06 Fixed tRFC SDRAM timing parameter                                  *\r
17  * ------------------------------------------------------------------------ */\r
18  \r
19 /* ------------------------------------------------------------------------ *\r
20  *                                                                          *\r
21  *  StartUp( )                                                              *\r
22  *      Setup Memory Map                                                    *\r
23  *                                                                          *\r
24  * ------------------------------------------------------------------------ */\r
25 StartUp( )\r
26 {\r
27     Setup_Memory_Map( );\r
28 }\r
29 \r
30 /* ------------------------------------------------------------------------ *\r
31  *                                                                          *\r
32  *  OnTargetConnect( )                                                      *\r
33  *      Setup PinMux, Power, PLLs, SDRAM & EMIFs                            *\r
34  *                                                                          *\r
35  * ------------------------------------------------------------------------ */\r
36 OnTargetConnect( )\r
37 {\r
38     GEL_TextOut( "\nDA830 DSP Startup Sequence\n\n" );\r
39 \r
40     Setup_Data_Cache();             // Setup L1D to 32 KB cache\r
41 \r
42     Setup_System_Config( );         // Setup Pin Mux and other system module registers\r
43     Setup_PLL();                    // Setup PLL0 (300MHZ ARM, 300MHz DSP, 133MHz EMIFs\r
44 \r
45     Setup_Psc_All_On( );            // Setup All Power Domains\r
46 \r
47     Setup_EMIFA();                  // Async EMIF\r
48     Setup_EMIFB();                  // Setup SDRAM\r
49 \r
50     Enable_ARM();\r
51 \r
52     GEL_TextOut( "\nStartup Complete.\n\n" );\r
53 }\r
54 \r
55 /* ------------------------------------------------------------------------ *\r
56  *                                                                          *\r
57  *  OnPreFileLoaded( )                                                      *\r
58  *      This function is called automatically when the 'Load Program'       *\r
59  *      Menu item is selected.                                              *\r
60  *                                                                          *\r
61  * ------------------------------------------------------------------------ */\r
62 OnPreFileLoaded( )\r
63 {\r
64     /*\r
65      *  GEL_Reset() is used to deal with the worst case senario of\r
66      *  unknown target state.  If for some reason a reset is not desired\r
67      *  upon target connection, GEL_Reset() may be removed and replaced\r
68      *  with something "less brutal" like a cache initialization\r
69      *  function.\r
70      */\r
71     GEL_Reset( );\r
72 \r
73 //    Disable_EDMA( );                // Disable EDMA\r
74 \r
75     GEL_TextOut( "\n" );\r
76 }\r
77 \r
78 /* ------------------------------------------------------------------------ *\r
79  *                                                                          *\r
80  *  OnRestart( )                                                            *\r
81  *      This function is called by CCS when you do Debug->Restart.          *\r
82  *      The goal is to put the CPU into a known good state with respect to  *\r
83  *      edma.                                                               *\r
84  *      Failure to do this can cause problems when you restart and          *\r
85  *      run your application code multiple times.  This is different        *\r
86  *      then OnPreFileLoaded() which will do a GEL_Reset() to get the       *\r
87  *      ARM9 into a known good state.                                       *\r
88  *                                                                          *\r
89  * ------------------------------------------------------------------------ */\r
90 OnRestart( int nErrorCode )\r
91 {\r
92     Disable_EDMA( );                // Disable EDMA\r
93 \r
94     GEL_TextOut( "\n" );\r
95 }\r
96 \r
97 menuitem "DA830 Memory Map";\r
98 \r
99 /* ------------------------------------------------------------------------ *\r
100  *                                                                          *\r
101  *  Setup_Memory_Map( )                                                     *\r
102  *      Setup the Memory Map for DSP.                                       *\r
103  *                                                                          *\r
104  * ------------------------------------------------------------------------ */\r
105 hotmenu\r
106 Setup_Memory_Map( )\r
107 {\r
108     GEL_MapOn( );\r
109     GEL_MapReset( );\r
110 \r
111     /* ARM */\r
112     GEL_MapAddStr( 0xFFFD0000, 0, 0x00010000, "R|W|AS4", 0 );   // ARM Local ROM\r
113     GEL_MapAddStr( 0xFFFEE000, 0, 0x00002000, "R|W|AS4", 0 );   // ARM INTC\r
114     GEL_MapAddStr( 0xFFFF0000, 0, 0x00002000, "R|W|AS4", 0 );   // ARM Local RAM\r
115     GEL_MapAddStr( 0x01BC0000, 0, 0x00001000, "R|W|AS4", 0 );   // ARM ETB Memory\r
116     GEL_MapAddStr( 0x01BC1000, 0, 0x00000800, "R|W|AS4", 0 );   // ARM ETB Regs\r
117     GEL_MapAddStr( 0x01BC1800, 0, 0x00000100, "R|W|AS4", 0 );   // ARM Ice Crusher\r
118 \r
119     /* DSP */\r
120     GEL_MapAddStr( 0x00700000, 0, 0x00100000, "R|W|AS4", 0 );   // DSP L2 ROM\r
121     GEL_MapAddStr( 0x00800000, 0, 0x00040000, "R|W|AS4", 0 );   // DSP l2 RAM\r
122     GEL_MapAddStr( 0x00E00000, 0, 0x00008000, "R|W|AS4", 0 );   // DSP L1P RAM\r
123     GEL_MapAddStr( 0x00F00000, 0, 0x00008000, "R|W|AS4", 0 );   // DSP L1D RAM\r
124     GEL_MapAddStr( 0x01800000, 0, 0x00010000, "R|W|AS4", 0 );   // DSP Interrupt Controller\r
125     GEL_MapAddStr( 0x01810000, 0, 0x00001000, "R|W|AS4", 0 );   // DSP Powerdown Controller\r
126     GEL_MapAddStr( 0x01811000, 0, 0x00001000, "R|W|AS4", 0 );   // DSP Security ID\r
127     GEL_MapAddStr( 0x01812000, 0, 0x00008000, "R|W|AS4", 0 );   // DSP Revision ID\r
128     GEL_MapAddStr( 0x01820000, 0, 0x00010000, "R|W|AS4", 0 );   // DSP EMC\r
129     GEL_MapAddStr( 0x01830000, 0, 0x00010000, "R|W|AS4", 0 );   // DSP Internal Reserved\r
130     GEL_MapAddStr( 0x01840000, 0, 0x00010000, "R|W|AS4", 0 );   // DSP Memory System\r
131 \r
132     GEL_MapAddStr( 0x11700000, 0, 0x00100000, "R|W|AS4", 0 );   // DSP L2 ROM (mirror)\r
133     GEL_MapAddStr( 0x11800000, 0, 0x00040000, "R|W|AS4", 0 );   // DSP l2 RAM (mirror)\r
134     GEL_MapAddStr( 0x11E00000, 0, 0x00008000, "R|W|AS4", 0 );   // DSP L1P RAM (mirror)\r
135     GEL_MapAddStr( 0x11F00000, 0, 0x00008000, "R|W|AS4", 0 );   // DSP L1D RAM (mirror)\r
136  \r
137     /* Shared RAM */\r
138     GEL_MapAddStr( 0x80000000, 0, 0x00020000, "R|W|AS4", 0 );   // Shared RAM\r
139 \r
140     /* EMIFA */\r
141     GEL_MapAddStr( 0x68000000, 0, 0x00008000, "R|W|AS4", 0 );   // EMIFA Control\r
142     GEL_MapAddStr( 0x40000000, 0, 0x20000000, "R|W|AS4", 0 );   // EMIFA SDRAM Data\r
143     GEL_MapAddStr( 0x60000000, 0, 0x02000000, "R|W|AS4", 0 );   // AEMIF CS2\r
144     GEL_MapAddStr( 0x62000000, 0, 0x02000000, "R|W|AS4", 0 );   // AEMIF CS3\r
145     GEL_MapAddStr( 0x64000000, 0, 0x02000000, "R|W|AS4", 0 );   // AEMIF CS4\r
146     GEL_MapAddStr( 0x66000000, 0, 0x02000000, "R|W|AS4", 0 );   // AEMIF CS5\r
147 \r
148     /* DDR */\r
149     GEL_MapAddStr( 0xB0000000, 0, 0x00008000, "R|W|AS4", 0 );   // EMIFB Control\r
150     GEL_MapAddStr( 0xC0000000, 0, 0x20000000, "R|W|AS4", 0 );   // EMIFB SDRAM Data\r
151 \r
152     /* Peripherals */\r
153     GEL_MapAddStr( 0x01C00000, 0, 0x00008000, "R|W|AS4", 0 );   // TPCC\r
154     GEL_MapAddStr( 0x01C08000, 0, 0x00000400, "R|W|AS4", 0 );   // TPTC0\r
155     GEL_MapAddStr( 0x01C08400, 0, 0x00000400, "R|W|AS4", 0 );   // TPTC1\r
156     GEL_MapAddStr( 0x01C10000, 0, 0x00001000, "R|W|AS4", 0 );   // PSC 0\r
157     GEL_MapAddStr( 0x01C11000, 0, 0x00001000, "R|W|AS4", 0 );   // PLL Controller 0\r
158     GEL_MapAddStr( 0x01C12000, 0, 0x00001000, "R|W|AS4", 0 );   // Key Manager\r
159     GEL_MapAddStr( 0x01C13000, 0, 0x00001000, "R|W|AS4", 0 );   // Security Controller\r
160     GEL_MapAddStr( 0x01C14000, 0, 0x00001000, "R|W|AS4", 0 );   // BootConfig\r
161     GEL_MapAddStr( 0x01C16000, 0, 0x00001000, "R|W|AS4", 0 );   // IOPU 0\r
162     GEL_MapAddStr( 0x01C17000, 0, 0x00001000, "R|W|AS4", 0 );   // IOPU 2\r
163     GEL_MapAddStr( 0x01C20000, 0, 0x00001000, "R|W|AS4", 0 );   // Timer64P 0\r
164     GEL_MapAddStr( 0x01C21000, 0, 0x00001000, "R|W|AS4", 0 );   // Timer64P 1\r
165     GEL_MapAddStr( 0x01C22000, 0, 0x00001000, "R|W|AS4", 0 );   // I2C 0\r
166     GEL_MapAddStr( 0x01C23000, 0, 0x00001000, "R|W|AS4", 0 );   // RTC\r
167     GEL_MapAddStr( 0x01C24000, 0, 0x00001000, "R|W|AS4", 0 );   // IOPU 1\r
168     GEL_MapAddStr( 0x01C30000, 0, 0x00000200, "R|W|AS4", 0 );   // dMax Data RAM 0\r
169     GEL_MapAddStr( 0x01C32000, 0, 0x00000200, "R|W|AS4", 0 );   // dMax Data RAM 1\r
170     GEL_MapAddStr( 0x01C34000, 0, 0x00004000, "R|W|AS4", 0 );   // dMax Control Registers\r
171     GEL_MapAddStr( 0x01C38000, 0, 0x00001000, "R|W|AS4", 0 );   // dMAX MAX0 Config Memory\r
172     GEL_MapAddStr( 0x01C3C000, 0, 0x00001000, "R|W|AS4", 0 );   // dMAX MAX1 Config Memory\r
173     GEL_MapAddStr( 0x01C40000, 0, 0x00001000, "R|W|AS4", 0 );   // MMC/SD 0\r
174     GEL_MapAddStr( 0x01C41000, 0, 0x00001000, "R|W|AS4", 0 );   // SPI 0\r
175     GEL_MapAddStr( 0x01C42000, 0, 0x00001000, "R|W|AS4", 0 );   // UART 0\r
176     GEL_MapAddStr( 0x01C43000, 0, 0x00001000, "R|W|AS4", 0 );   // MPU 0\r
177     GEL_MapAddStr( 0x01D00000, 0, 0x00001000, "R|W|AS4", 0 );   // McASP 0 Control\r
178     GEL_MapAddStr( 0x01D01000, 0, 0x00001000, "R|W|AS4", 0 );   // McASP 0 FIFO Ctrl\r
179     GEL_MapAddStr( 0x01D02000, 0, 0x00001000, "R|W|AS4", 0 );   // McASP 0 Data\r
180     GEL_MapAddStr( 0x01D04000, 0, 0x00001000, "R|W|AS4", 0 );   // McASP 1 Control\r
181     GEL_MapAddStr( 0x01D05000, 0, 0x00001000, "R|W|AS4", 0 );   // McASP 1 FIFO Ctrl\r
182     GEL_MapAddStr( 0x01D06000, 0, 0x00001000, "R|W|AS4", 0 );   // McASP 1 Data\r
183     GEL_MapAddStr( 0x01D08000, 0, 0x00001000, "R|W|AS4", 0 );   // McASP 2 Control\r
184     GEL_MapAddStr( 0x01D09000, 0, 0x00001000, "R|W|AS4", 0 );   // McASP 2 FIFO Ctrl\r
185     GEL_MapAddStr( 0x01D0A000, 0, 0x00001000, "R|W|AS4", 0 );   // McASP 2 Data\r
186     GEL_MapAddStr( 0x01D0C000, 0, 0x00001000, "R|W|AS4", 0 );   // UART 1\r
187     GEL_MapAddStr( 0x01D0D000, 0, 0x00001000, "R|W|AS4", 0 );   // UART 2\r
188     GEL_MapAddStr( 0x01D0E000, 0, 0x00001000, "R|W|AS4", 0 );   // IOPU 4\r
189     GEL_MapAddStr( 0x01E00000, 0, 0x00010000, "R|W|AS4", 0 );   // USB0 (USB HS) Cfg\r
190     GEL_MapAddStr( 0x01E10000, 0, 0x00001000, "R|W|AS4", 0 );   // UHPI Cfg\r
191     GEL_MapAddStr( 0x01E11000, 0, 0x00001000, "R|W|AS4", 0 );   // UHPI (IODFT)\r
192     GEL_MapAddStr( 0x01E12000, 0, 0x00001000, "R|W|AS4", 0 );   // SPI 1\r
193     GEL_MapAddStr( 0x01E13000, 0, 0x00001000, "R|W|AS4", 0 );   // LCD Controller\r
194     GEL_MapAddStr( 0x01E14000, 0, 0x00001000, "R|W|AS4", 0 );   // MPU 1\r
195     GEL_MapAddStr( 0x01E15000, 0, 0x00001000, "R|W|AS4", 0 );   // MPU 2\r
196     GEL_MapAddStr( 0x01E20000, 0, 0x00002000, "R|W|AS4", 0 );   // EMAC CPPI port\r
197     GEL_MapAddStr( 0x01E22000, 0, 0x00001000, "R|W|AS4", 0 );   // EMAC CPGMACSS registers\r
198     GEL_MapAddStr( 0x01E23000, 0, 0x00001000, "R|W|AS4", 0 );   // EMAC CPGMAC registers\r
199     GEL_MapAddStr( 0x01E24000, 0, 0x00001000, "R|W|AS4", 0 );   // EMAC MDIO port\r
200     GEL_MapAddStr( 0x01E25000, 0, 0x00001000, "R|W|AS4", 0 );   // USB1 (USB FS)\r
201     GEL_MapAddStr( 0x01E26000, 0, 0x00001000, "R|W|AS4", 0 );   // GPIO\r
202     GEL_MapAddStr( 0x01E27000, 0, 0x00001000, "R|W|AS4", 0 );   // PSC 1\r
203     GEL_MapAddStr( 0x01E28000, 0, 0x00001000, "R|W|AS4", 0 );   // I2C 1\r
204     GEL_MapAddStr( 0x01E29000, 0, 0x00001000, "R|W|AS4", 0 );   // IOPU 3\r
205     GEL_MapAddStr( 0x01E2A000, 0, 0x00001000, "R|W|AS4", 0 );   // PBIST Controller\r
206     GEL_MapAddStr( 0x01E2B000, 0, 0x00001000, "R|W|AS4", 0 );   // PBIST Combiner\r
207     GEL_MapAddStr( 0x01F00000, 0, 0x00001000, "R|W|AS4", 0 );   // EPWM 0\r
208     GEL_MapAddStr( 0x01F01000, 0, 0x00001000, "R|W|AS4", 0 );   // HRPWM 0\r
209     GEL_MapAddStr( 0x01F02000, 0, 0x00001000, "R|W|AS4", 0 );   // EPWM 1\r
210     GEL_MapAddStr( 0x01F03000, 0, 0x00001000, "R|W|AS4", 0 );   // HRPWM 1\r
211     GEL_MapAddStr( 0x01F04000, 0, 0x00001000, "R|W|AS4", 0 );   // EPWM 2\r
212     GEL_MapAddStr( 0x01F05000, 0, 0x00001000, "R|W|AS4", 0 );   // HRPWM 2\r
213     GEL_MapAddStr( 0x01F06000, 0, 0x00001000, "R|W|AS4", 0 );   // ECAP 0\r
214     GEL_MapAddStr( 0x01F07000, 0, 0x00001000, "R|W|AS4", 0 );   // ECAP 1\r
215     GEL_MapAddStr( 0x01F08000, 0, 0x00001000, "R|W|AS4", 0 );   // ECAP 2\r
216     GEL_MapAddStr( 0x01F09000, 0, 0x00001000, "R|W|AS4", 0 );   // EQEP 0\r
217     GEL_MapAddStr( 0x01F0A000, 0, 0x00001000, "R|W|AS4", 0 );   // EQEP 1\r
218     GEL_MapAddStr( 0x01F0B000, 0, 0x00001000, "R|W|AS4", 0 );   // IOPU 5\r
219 }\r
220 \r
221 /* ------------------------------------------------------------------------ *\r
222  *                                                                          *\r
223  *  Clear_Memory_Map( )                                                     *\r
224  *      Clear the Memory Map                                                *\r
225  *                                                                          *\r
226  * ------------------------------------------------------------------------ */\r
227 hotmenu\r
228 Clear_Memory_Map( )\r
229 {\r
230     GEL_MapOff( );\r
231     GEL_MapReset( );\r
232 }\r
233 \r
234 menuitem "DSKDA830 Functions";\r
235 \r
236 _wait( int delay )\r
237 {\r
238     int i;\r
239     for( i = 0 ; i < delay ; i++ ){}\r
240 }\r
241 \r
242 #define SYS_BASE            0x01C14000\r
243 #define REVID               *(unsigned int*)(SYS_BASE + 0x000)  \r
244 #define DIEIDR0             *(unsigned int*)(SYS_BASE + 0x008)\r
245 #define DIEIDR1             *(unsigned int*)(SYS_BASE + 0x00C)\r
246 #define DIEIDR2             *(unsigned int*)(SYS_BASE + 0x010)\r
247 #define DIEIDR3             *(unsigned int*)(SYS_BASE + 0x014)\r
248 #define DEVIDR0             *(unsigned int*)(SYS_BASE + 0x018)\r
249 #define DEVIDR1             *(unsigned int*)(SYS_BASE + 0x01C)\r
250 #define BOOTCFG             *(unsigned int*)(SYS_BASE + 0x020)\r
251 #define CHIPREVIDR          *(unsigned int*)(SYS_BASE + 0x024)\r
252 #define KICK0R              *(unsigned int*)(SYS_BASE + 0x038)  \r
253 #define KICK1R              *(unsigned int*)(SYS_BASE + 0x03c)  \r
254 #define HOST0CFG            *(unsigned int*)(SYS_BASE + 0x040)  //ARM HOST0CFG\r
255 #define HOST1CFG            *(unsigned int*)(SYS_BASE + 0x044)\r
256 #define IRAWSTAT            *(unsigned int*)(SYS_BASE + 0x0E0)  \r
257 #define IENSTAT             *(unsigned int*)(SYS_BASE + 0x0E4)  \r
258 #define IENSET              *(unsigned int*)(SYS_BASE + 0x0E8)  \r
259 #define IENCLR              *(unsigned int*)(SYS_BASE + 0x0EC)  \r
260 #define EOI                 *(unsigned int*)(SYS_BASE + 0x0F0)  \r
261 #define FLTADDRR            *(unsigned int*)(SYS_BASE + 0x0F4)  \r
262 #define FLTSTAT             *(unsigned int*)(SYS_BASE + 0x0F8)  \r
263 #define MSTPRI0             *(unsigned int*)(SYS_BASE + 0x110)  \r
264 #define MSTPRI1             *(unsigned int*)(SYS_BASE + 0x114)  \r
265 #define MSTPRI2             *(unsigned int*)(SYS_BASE + 0x118) \r
266 #define PINMUX0             *(unsigned int*)(SYS_BASE + 0x120)  //PINMUX0\r
267 #define PINMUX1             *(unsigned int*)(SYS_BASE + 0x124)  //PINMUX1\r
268 #define PINMUX2             *(unsigned int*)(SYS_BASE + 0x128)  //PINMUX2\r
269 #define PINMUX3             *(unsigned int*)(SYS_BASE + 0x12C)  //PINMUX3\r
270 #define PINMUX4             *(unsigned int*)(SYS_BASE + 0x130)  //PINMUX4\r
271 #define PINMUX5             *(unsigned int*)(SYS_BASE + 0x134)  //PINMUX5\r
272 #define PINMUX6             *(unsigned int*)(SYS_BASE + 0x138)  //PINMUX6\r
273 #define PINMUX7             *(unsigned int*)(SYS_BASE + 0x13C)  //PINMUX7\r
274 #define PINMUX8             *(unsigned int*)(SYS_BASE + 0x140)  //PINMUX8\r
275 #define PINMUX9             *(unsigned int*)(SYS_BASE + 0x144)  //PINMUX9\r
276 #define PINMUX10            *(unsigned int*)(SYS_BASE + 0x148)  //PINMUX10\r
277 #define PINMUX11            *(unsigned int*)(SYS_BASE + 0x14C)  //PINMUX11\r
278 #define PINMUX12            *(unsigned int*)(SYS_BASE + 0x150)  //PINMUX12\r
279 #define PINMUX13            *(unsigned int*)(SYS_BASE + 0x154)  //PINMUX13\r
280 #define PINMUX14            *(unsigned int*)(SYS_BASE + 0x158)  //PINMUX14\r
281 #define PINMUX15            *(unsigned int*)(SYS_BASE + 0x15C)  //PINMUX15\r
282 #define PINMUX16            *(unsigned int*)(SYS_BASE + 0x160)  //PINMUX16\r
283 #define PINMUX17            *(unsigned int*)(SYS_BASE + 0x164)  //PINMUX17\r
284 #define PINMUX18            *(unsigned int*)(SYS_BASE + 0x168)  //PINMUX18\r
285 #define PINMUX19            *(unsigned int*)(SYS_BASE + 0x16C)  //PINMUX19\r
286 #define SUSPSRC             *(unsigned int*)(SYS_BASE + 0x170) \r
287 #define CHIPSIG             *(unsigned int*)(SYS_BASE + 0x174) \r
288 #define CHIPSIG_CLR         *(unsigned int*)(SYS_BASE + 0x178) \r
289 #define CFGCHIP0            *(unsigned int*)(SYS_BASE + 0x17C) \r
290 #define CFGCHIP1            *(unsigned int*)(SYS_BASE + 0x180) \r
291 #define CFGCHIP2            *(unsigned int*)(SYS_BASE + 0x184) \r
292 #define CFGCHIP3            *(unsigned int*)(SYS_BASE + 0x188) \r
293 #define CFGCHIP4            *(unsigned int*)(SYS_BASE + 0x18C) \r
294 \r
295 #define PLL0_BASE       0x01C11000                                                      /*SYSTEM PLL BASE ADDRESS*/\r
296 \r
297 #define PLL0_PID        *(unsigned int*) (PLL0_BASE + 0x00)             /*PID*/\r
298 #define PLL0_FUSERR     *(unsigned int*) (PLL0_BASE + 0xE0)             /*x*FuseFarm Error Reg*/\r
299 #define PLL0_RSTYPE         *(unsigned int*) (PLL0_BASE + 0xE4)         /*Reset Type status Reg*/\r
300 #define PLL0_PLLCTL     *(unsigned int*) (PLL0_BASE + 0x100)    /*PLL Control Register*/\r
301 #define PLL0_OCSEL      *(unsigned int*) (PLL0_BASE + 0x104)    /*OBSCLK Select Register*/\r
302 #define PLL0_SECCTL     *(unsigned int*) (PLL0_BASE + 0x108)    /*PLL Secondary Control Register*/\r
303 #define PLL0_PLLM       *(unsigned int*) (PLL0_BASE + 0x110)    /*PLL Multiplier*/      \r
304 #define PLL0_PREDIV     *(unsigned int*) (PLL0_BASE + 0x114)    /*Pre divider*/ \r
305 #define PLL0_PLLDIV1    *(unsigned int*) (PLL0_BASE + 0x118)    /*Diveder-1*/   \r
306 #define PLL0_PLLDIV2    *(unsigned int*) (PLL0_BASE + 0x11C)    /*Diveder-2*/   \r
307 #define PLL0_PLLDIV3    *(unsigned int*) (PLL0_BASE + 0x120)    /*Diveder-3*/   \r
308 #define PLL0_OSCDIV1    *(unsigned int*) (PLL0_BASE + 0x124)    /*Oscilator Divider*/   \r
309 #define PLL0_POSTDIV    *(unsigned int*) (PLL0_BASE + 0x128)    /*Post Divider*/        \r
310 #define PLL0_BPDIV      *(unsigned int*) (PLL0_BASE + 0x12C)    /*Bypass Divider*/\r
311 #define PLL0_WAKEUP     *(unsigned int*) (PLL0_BASE + 0x130)    /*Wakeup Reg*/\r
312 #define PLL0_PLLCMD     *(unsigned int*) (PLL0_BASE + 0x138)    /*Command Reg*/\r
313 #define PLL0_PLLSTAT    *(unsigned int*) (PLL0_BASE + 0x13C)    /*Status Reg*/\r
314 #define PLL0_ALNCTL     *(unsigned int*) (PLL0_BASE + 0x140)    /*Clock Align Control Reg*/\r
315 #define PLL0_DCHANGE    *(unsigned int*) (PLL0_BASE + 0x144)    /*PLLDIV Ratio Chnage status*/\r
316 #define PLL0_CKEN       *(unsigned int*) (PLL0_BASE + 0x148)    /*Clock Enable Reg*/\r
317 #define PLL0_CKSTAT     *(unsigned int*) (PLL0_BASE + 0x14C)    /*Clock Status Reg*/\r
318 #define PLL0_SYSTAT     *(unsigned int*) (PLL0_BASE + 0x150)    /*Sysclk status reg*/\r
319 #define PLL0_PLLDIV4    *(unsigned int*) (PLL0_BASE + 0x160)    /*Divider 4*/\r
320 #define PLL0_PLLDIV5    *(unsigned int*) (PLL0_BASE + 0x164)    /*Divider 5*/\r
321 #define PLL0_PLLDIV6    *(unsigned int*) (PLL0_BASE + 0x168)    /*Divider 6*/\r
322 #define PLL0_PLLDIV7    *(unsigned int*) (PLL0_BASE + 0x16C)    /*Divider 7*/\r
323 #define PLL0_PLLDIV8    *(unsigned int*) (PLL0_BASE + 0x170)    /*Divider 8*/\r
324 #define PLL0_PLLDIV9    *(unsigned int*) (PLL0_BASE + 0x174)    /*Divider 9*/\r
325 #define PLL0_PLLDIV10   *(unsigned int*) (PLL0_BASE + 0x178)    /*Divider 10*/\r
326 #define PLL0_PLLDIV11   *(unsigned int*) (PLL0_BASE + 0x17C)    /*Divider 11*/\r
327 #define PLL0_PLLDIV12   *(unsigned int*) (PLL0_BASE + 0x180)    /*Divider 12*/\r
328 #define PLL0_PLLDIV13   *(unsigned int*) (PLL0_BASE + 0x184)    /*Divider 13*/\r
329 #define PLL0_PLLDIV14   *(unsigned int*) (PLL0_BASE + 0x188)    /*Divider 14*/\r
330 #define PLL0_PLLDIV15   *(unsigned int*) (PLL0_BASE + 0x18C)    /*Divider 15*/\r
331 #define PLL0_PLLDIV16   *(unsigned int*) (PLL0_BASE + 0x190)    /*Divider 16*/\r
332 #define PLLEN_MUX_SWITCH  4 \r
333 #define PLL_LOCK_TIME_CNT 2400\r
334 \r
335 \r
336 /*PSC Module Related Registers*/              \r
337 #define PSC0_BASE           0x01C10000\r
338 #define PSC1_BASE           0x01E27000\r
339 \r
340 #define PSC0_MDCTL              (PSC0_BASE+0xA00)\r
341 #define PSC0_MDSTAT     (PSC0_BASE+0x800)\r
342 #define PSC0_PTCMD      *(unsigned int*) (PSC0_BASE + 0x120)\r
343 #define PSC0_PTSTAT     *(unsigned int*) (PSC0_BASE + 0x128)\r
344 \r
345 #define PSC1_MDCTL              (PSC1_BASE+0xA00)\r
346 #define PSC1_MDSTAT     (PSC1_BASE+0x800)\r
347 #define PSC1_PTCMD      *(unsigned int*) (PSC1_BASE + 0x120)\r
348 #define PSC1_PTSTAT     *(unsigned int*) (PSC1_BASE + 0x128)\r
349 \r
350 \r
351 /*Enable Function for PSC0*/\r
352 PSC0_lPSC_enable(unsigned int PD, unsigned int LPSC_num) {\r
353 \r
354   *(unsigned int*) (PSC0_MDCTL+4*LPSC_num) = (*(unsigned int*) (PSC0_MDCTL+4*LPSC_num) & 0xFFFFFFE0) | 0x0003;\r
355   PSC0_PTCMD = 0x1<<PD;\r
356   while( (PSC0_PTSTAT & (0x1<<PD) ) !=0) ; /*Wait for power state transition to finish*/\r
357   while( (*(unsigned int*)(PSC0_MDSTAT+4 * LPSC_num) & 0x1F) !=0x3);\r
358 }\r
359 \r
360 /*Enable Function for PSC1*/\r
361 PSC1_lPSC_enable(unsigned int PD, unsigned int LPSC_num) {\r
362 \r
363   *(unsigned int*) (PSC1_MDCTL+4*LPSC_num) = (*(unsigned int*) (PSC1_MDCTL+4*LPSC_num) & 0xFFFFFFE0) | 0x0003;\r
364   PSC1_PTCMD = 0x1<<PD;\r
365   while( (PSC1_PTSTAT & (0x1<<PD) ) !=0) ; /*Wait for power state transition to finish*/\r
366   while( (*(unsigned int*)(PSC1_MDSTAT+4 * LPSC_num) & 0x1F) !=0x3);\r
367 }\r
368 \r
369 #define L1DCFG              0x01840040\r
370 #define L1DWB               0x01845040\r
371 \r
372 Setup_Data_Cache ()\r
373 {\r
374     // Flush L1D\r
375     *((unsigned int *) L1DWB) = 0x01;\r
376     // Reconfigure L1D to default state (full cache)\r
377     *((unsigned int *) L1DCFG) = 0x07;\r
378 }\r
379 \r
380 hotmenu\r
381 Setup_PLL()\r
382 {\r
383     int i = 0;\r
384 \r
385     /* Configure ARM, DSP at 300MHz, EMIFs at 133MHz */\r
386     unsigned int DIV45_EN = 1;\r
387     unsigned int CLKMODE = 0;\r
388     unsigned int PLLM = 24;\r
389     unsigned int POSTDIV = 1;\r
390     unsigned int PLLDIV3 = 2;\r
391     unsigned int PLLDIV5 = 5;\r
392     unsigned int PLLDIV7 = 7;\r
393 \r
394         // Moved step 2c and 2d to step 0\r
395    /*Set PLLEN=0 and PLLRST=0, Reset the PLL*/\r
396     PLL0_PLLCTL &=  0xFFFFFFFE;         /*PLL BYPASS MODE*/\r
397    \r
398    /*wait for 4 cycles to allow PLLEN mux switches properly to bypass clock*/\r
399    for(i=0; i<PLLEN_MUX_SWITCH; i++) {;}   /*Make PLLEN_MUX_SWITCH as bootpacket*/\r
400 \r
401    /*Select the Clock Mode bit 8 as External Clock or On Chip Oscilator*/\r
402         PLL0_PLLCTL &= 0xFFFFFEFF;  \r
403     PLL0_PLLCTL |= (CLKMODE<<8);  /* Make CLKSRC as BootPacket to pass the value*/\r
404 \r
405    /*Set PLLENSRC '0',bit 5, PLL Enable(PLLEN) selection is controlled through MMR*/\r
406     PLL0_PLLCTL &=  0xFFFFFFDF; \r
407    \r
408    /*PLLCTL.EXTCLKSRC bit 9 should be left at 0 for Primus*/\r
409     PLL0_PLLCTL &=  0xFFFFFDFF;\r
410 \r
411    /* Clear PLLRST bit to 0 -Reset the PLL */\r
412    PLL0_PLLCTL &= 0xFFFFFFF7;   \r
413   \r
414    /*Disable the PLL output*/ \r
415    PLL0_PLLCTL |= 0x10;                 \r
416    \r
417    /*PLL initialization sequence*/\r
418    \r
419    /*Power up the PLL- PWRDN bit set to 0 to bring the PLL out of power down bit*/\r
420    PLL0_PLLCTL &= 0xFFFFFFFD;\r
421    \r
422    /*Enable the PLL from Disable Mode PLLDIS bit to 0 - This is step is not required for Primus*/\r
423    PLL0_PLLCTL &= 0xFFFFFFEF;\r
424    \r
425    /*PLL stabilisation time- take out this step , not required here when PLL in bypassmode*/\r
426   /* for(i=0; i<PLL_STABILIZATION_TIME; i++) {;}  /* Make PLL_STABILIZATION_TIME as bootpacket*/\r
427    \r
428    /*Program the required multiplier value in PLLM*/\r
429    PLL0_PLLM    = PLLM; /* Make PLLMULTIPLEIR as bootpacket*/\r
430 \r
431    /*If desired to scale all the SYSCLK frequencies of a given PLLC, program the POSTDIV ratio*/\r
432    PLL0_POSTDIV = 0x8000 | POSTDIV; /* Make POSTDIV as bootpacket*/\r
433 \r
434    /*If Necessary program the PLLDIVx*/\r
435    /*Check for the GOSTAT bit in PLLSTAT to clear to 0 to indicate that no GO operation is currently in progress*/\r
436    while(PLL0_PLLSTAT & 0x1==1){}\r
437 \r
438    /*Program the RATIO field in PLLDIVx with the desired divide factors. In addition, make sure in this step you leave the PLLDIVx.DxEN bits set so clocks are still enabled (default).*/\r
439     PLL0_PLLDIV3 = 0x8000 | PLLDIV3; /* Make PLLDIV3 as bootpacket, do it for other PLLDIVx to if required*/\r
440     PLL0_PLLDIV5 = 0x8000 | PLLDIV5; /* Make PLLDIV5 as bootpacket, do it for other PLLDIVx to if required*/\r
441     PLL0_PLLDIV7 = 0x8000 | PLLDIV7; /* Make PLLDIV7 as bootpacket, do it for other PLLDIVx to if required*/\r
442 \r
443     /*Set the GOSET bit in PLLCMD to 1 to initiate a new divider transition.*/\r
444     PLL0_PLLCMD |= 0x1;\r
445 \r
446         /*Wait for the GOSTAT bit in PLLSTAT to clear to 0 (completion of phase alignment).*/\r
447     while(PLL0_PLLSTAT & 0x1==1) { } \r
448    \r
449  \r
450    /*Wait for PLL to reset properly. See PLL spec for PLL reset time - This step is not required here -step11*/\r
451   /* for(i=0; i<PLL_RESET_TIME_CNT; i++) {;}   /*128 MXI Cycles*/ /*Make PLL_RESET_TIME_CNT as boot packet*/\r
452       \r
453    /*Set the PLLRST bit in PLLCTL to 1 to bring the PLL out of reset*/\r
454    PLL0_PLLCTL |= 0x8;\r
455    \r
456    /*Wait for PLL to lock. See PLL spec for PLL lock time*/\r
457    for(i=0; i<PLL_LOCK_TIME_CNT; i++) {;} /*Make PLL_LOCK_TIME_CNT as boot Packet*/ \r
458    \r
459    /*Set the PLLEN bit in PLLCTL to 1 to remove the PLL from bypass mode*/\r
460    PLL0_PLLCTL |=  0x1;\r
461 \r
462    KICK0R = 0x83e70b13;  // Kick0 register + data (unlock)\r
463    KICK1R = 0x95a4f1e0;  // Kick1 register + data (unlock)\r
464    CFGCHIP3 |= 0x4;       // Enable 4.5 divider PLL\r
465    CFGCHIP3 |= 0x1;       // Select 4.5 divider for EMIFB clock source only (not EMIFA)\r
466 \r
467    GEL_TextOut( "PLL Setup Complete\n" );\r
468 }\r
469 \r
470 \r
471 \r
472 /* ------------------------------------------------------------------------ *\r
473  *                                                                          *\r
474  *  setup_pll_0( )                                                          *\r
475  *                                                                          *\r
476  *      clock_source    <- 0: Onchip Oscillator                             *\r
477  *                         1: External Clock                                *\r
478  *                                                                          *\r
479  *      pll_mult        <- 21: 22x Multiplier * 27MHz Clk = 594 MHz         *\r
480  *                                                                          *\r
481  * ------------------------------------------------------------------------ */\r
482 setup_pll_0( int clock_source, int pll_mult )\r
483 {\r
484     unsigned int* pll_ctl       = ( unsigned int* )( 0x01c11100 );\r
485     unsigned int* pll_pllm      = ( unsigned int* )( 0x01c11110 );\r
486     unsigned int* pll_cmd       = ( unsigned int* )( 0x01c11138 );\r
487     unsigned int* pll_postdiv   = ( unsigned int* )( 0x01c11128 );\r
488     unsigned int* pll_bpdiv     = ( unsigned int* )( 0x01c1112c );\r
489     unsigned int* pll_div1      = ( unsigned int* )( 0x01c11118 );\r
490     unsigned int* pll_div2      = ( unsigned int* )( 0x01c1111c );\r
491     unsigned int* pll_div3      = ( unsigned int* )( 0x01c11120 );\r
492     unsigned int* pll_div4      = ( unsigned int* )( 0x01c11160 );\r
493     unsigned int* pll_div5      = ( unsigned int* )( 0x01c11164 );\r
494     unsigned int* pll_div6      = ( unsigned int* )( 0x01c11168 );\r
495     unsigned int* pll_div7      = ( unsigned int* )( 0x01c1116c );\r
496     unsigned int* pll_div8      = ( unsigned int* )( 0x01c11170 );\r
497     unsigned int* pll_div9      = ( unsigned int* )( 0x01c11174 );\r
498 \r
499     int pll0_freq = 24 * ( pll_mult + 1 );\r
500 \r
501     GEL_TextOut( "Setup PLL0 " );\r
502 \r
503     /*\r
504      *  Step 1 - Set clock mode\r
505      */\r
506     if ( clock_source == 0 )\r
507         *pll_ctl &= ~0x0100;        // Onchip Oscillator\r
508     else\r
509         *pll_ctl |= 0x0100;         // External Clock\r
510 \r
511     /*\r
512      *  Step 2 - Set PLL to bypass\r
513      *         - Wait for PLL to stabilize\r
514      */\r
515     *pll_ctl &= ~0x0020;\r
516     *pll_ctl &= ~0x0001;\r
517     _wait( 150 );\r
518 \r
519     /*\r
520      *  Step 3 - Reset PLL\r
521      */\r
522     *pll_ctl |= 0x0008;\r
523 \r
524     /*\r
525      *  Step 4 - Disable PLL\r
526      *  Step 5 - Powerup PLL\r
527      *  Step 6 - Enable PLL\r
528      *  Step 7 - Wait for PLL to stabilize\r
529      */\r
530     *pll_ctl |= 0x0010;             // Disable PLL\r
531     *pll_ctl &= ~0x0002;            // Power up PLL\r
532     *pll_ctl &= ~0x0010;            // Enable PLL\r
533     _wait( 150 );                   // Wait for PLL to stabilize\r
534 \r
535     /*\r
536      *  Step 8 - Load PLL multiplier\r
537      */\r
538     *pll_pllm = pll_mult & 0x3f;\r
539 \r
540     /*\r
541      *  Step 9 - Set PLL post dividers\r
542      */\r
543 \r
544     *pll_postdiv= 0x8000 | 1; // Post divider \r
545     *pll_div5 = 0x8001;\r
546     *pll_cmd   |= 0x0001;           // GO\r
547     _wait( 2000 );\r
548 \r
549     /*\r
550      *  Step 10 - Wait for PLL to reset ( 2000 cycles )\r
551      *  Step 11 - Release from reset\r
552      */\r
553     _wait( 2000 );\r
554     *pll_ctl &= ~0x0008;\r
555 \r
556     /*\r
557      *  Step 12 - Wait for PLL to re-lock ( 2000 cycles )\r
558      *  Step 13 - Switch out of BYPASS mode\r
559      */\r
560     _wait( 2000 );\r
561     *pll_ctl |= 0x0001;\r
562 \r
563     // Enable 4.5X divider\r
564     KICK0R = 0x83e70b13;  // Kick0 register + data (unlock)\r
565     KICK1R = 0x95a4f1e0;  // Kick1 register + data (unlock)\r
566     CFGCHIP3 |= 0x4;       // Enable 4.5 divider PLL\r
567 //    CFGCHIP3 |= 0x3;       // Select 4.5 divider for EMIFA / EMIFB clock source\r
568 \r
569     pll0_freq = 24 * ( ( *pll_pllm & 0x3f ) + 1 ) / 2;\r
570 \r
571     GEL_TextOut( "(DSP = %d MHz + ",,,,, pll0_freq );\r
572     GEL_TextOut( "ARM = %d MHz + ",,,,, pll0_freq );\r
573 \r
574     if ( clock_source == 0 )\r
575         GEL_TextOut( "Onchip Oscillator)... " );\r
576     else\r
577         GEL_TextOut( "External Clock)... " );\r
578 \r
579     GEL_TextOut( "[Done]\n" );\r
580 }\r
581 \r
582 \r
583 \r
584 \r
585 /* ------------------------------------------------------------------------ *\r
586  *                                                                          *\r
587  *  Disable_IRQ_Flush_Cache( )                                              *\r
588  *      Flush Cache & Disable Interrupts                                    *\r
589  *                                                                          *\r
590  * ------------------------------------------------------------------------ */\r
591 Disable_IRQ_Flush_Cache( )\r
592 {\r
593 \r
594 }\r
595 \r
596 \r
597 /* ------------------------------------------------------------------------ *\r
598  *                                                                          *\r
599  *  Disable_EDMA( )                                                         *\r
600  *      Disabe EDMA events and interrupts, clear any pending events         *\r
601  *                                                                          *\r
602  * ------------------------------------------------------------------------ */\r
603 Disable_EDMA( )\r
604 {\r
605     #define EDMA_3CC_IECRH          *( unsigned int* )( 0x01c0105c )\r
606     #define EDMA_3CC_EECRH          *( unsigned int* )( 0x01c0102c )\r
607     #define EDMA_3CC_ICRH           *( unsigned int* )( 0x01c01074 )\r
608     #define EDMA_3CC_ECRH           *( unsigned int* )( 0x01c0100c )\r
609 \r
610     #define EDMA_3CC_IECR           *( unsigned int* )( 0x01c01058 )\r
611     #define EDMA_3CC_EECR           *( unsigned int* )( 0x01c01028 )\r
612     #define EDMA_3CC_ICR            *( unsigned int* )( 0x01c01070 )\r
613     #define EDMA_3CC_ECR            *( unsigned int* )( 0x01c01008 )\r
614 \r
615     GEL_TextOut( "Disable EDMA events\n" );\r
616 \r
617     EDMA_3CC_IECRH  = 0xffffffff;   // IERH - Disable high interrupts\r
618     EDMA_3CC_EECRH  = 0xffffffff;   // EERH - Disable high events\r
619     EDMA_3CC_ICRH   = 0xffffffff;   // ICRH - Clear high interrupts\r
620     EDMA_3CC_ECRH   = 0xffffffff;   // ICRH - Clear high events\r
621 \r
622     EDMA_3CC_IECR   = 0xffffffff;   // IER  - Disable low interrupts\r
623     EDMA_3CC_EECR   = 0xffffffff;   // EER  - Disable low events\r
624     EDMA_3CC_ICR    = 0xffffffff;   // ICR  - Clear low interrupts\r
625     EDMA_3CC_ECR    = 0xffffffff;   // ICRH - Clear low events\r
626 }\r
627 \r
628 /* ------------------------------------------------------------------------ *\r
629  *                                                                          *\r
630  *  Enable_Instruction_Cache( )                                             *\r
631  *      Enable I-Cache                                                      *\r
632  *                                                                          *\r
633  * ------------------------------------------------------------------------ */\r
634 hotmenu Enable_Instruction_Cache( )\r
635 {\r
636     GEL_TextOut( "\Enable Instruction Cache.\n\n" );\r
637 \r
638     CPSR = 0x400000d3;              // Set to supervisor mode, disable IRQ/FIQ\r
639     REG_CP15_I_CACHE = 1;           // Enable Instruction Cache\r
640\r
641 \r
642 \r
643 \r
644 /* ------------------------------------------------------------------------ *\r
645  *                                                                          *\r
646  *  Setup_System_Config( )                                                  *\r
647  *      Configure PINMUX and other system module registers                  *\r
648  *                                                                          *\r
649  * ------------------------------------------------------------------------ */\r
650 hotmenu\r
651 Setup_System_Config( )\r
652 {\r
653 \r
654     GEL_TextOut( "Setup PINMUX Registers... " );\r
655     KICK0R = 0x83e70b13;  // Kick0 register + data (unlock)\r
656     KICK1R = 0x95a4f1e0;  // Kick1 register + data (unlock)\r
657 \r
658     PINMUX0  = 0x11112188;  // EMIFB, Check EMU0/RTCK\r
659     PINMUX1  = 0x11111111;  // EMIFB\r
660     PINMUX2  = 0x11111111;  // EMIFB\r
661     PINMUX3  = 0x11111111;  // EMIFB\r
662     PINMUX4  = 0x11111111;  // EMIFB\r
663     PINMUX5  = 0x11111111;  // EMIFB\r
664     PINMUX6  = 0x11111111;  // EMIFB\r
665     PINMUX7  = 0x11111111;  // EMIFB, SPI0\r
666     PINMUX8  = 0x21122111;  // UART2, McASP1, I2C0, I2C1\r
667     PINMUX9  = 0x11011112;  // RMII CLK, McASP0, USB_DRVVBUS, UART2\r
668     PINMUX10 = 0x22222221;  // RMII/ McASP0\r
669     PINMUX11 = 0x11142222;  // McASP1, AXR2[0] (DIT), UART1, McASP0, MDIO (last 2 digits 0x22 for MDIO instead of GPIO)\r
670     PINMUX12 = 0x11111111;  // McASP0 / McASP1\r
671     PINMUX13 = 0x22111111;  // SD / McASP1\r
672     PINMUX14 = 0x88222222;  // SD / EMIFA\r
673     PINMUX15 = 0x21888888;  // SD / EMIFA\r
674     PINMUX16 = 0x11111112;  // SD / EMIFA\r
675     PINMUX17 = 0x00100111;  // EMIFA\r
676     PINMUX18 = 0x11111111;  // EMIFA\r
677     PINMUX19 = 0x00000001;  // EMIFA\r
678 \r
679     CFGCHIP2 |= 0x00001000; // Enable USB1 clock\r
680 \r
681     GEL_TextOut( "[Done]\n" );\r
682 }\r
683 \r
684 hotmenu\r
685 Setup_EMIFA_PinMux()\r
686 {\r
687     PINMUX13 &= 0x00FFFFFF;\r
688     PINMUX13 |= 0x11000000;\r
689     PINMUX14  = 0x11111111;\r
690     PINMUX15  = 0x11111111;\r
691     PINMUX16  = 0x11111111;\r
692     PINMUX17  = 0x11111111;\r
693     PINMUX18  = 0x11111111;\r
694     PINMUX19 &= 0xFFFFFFF0;\r
695     PINMUX19 |= 0x00000001;\r
696 \r
697     GEL_TextOut( "[Done]\n" );\r
698 }\r
699 \r
700 /*Enable Function for PSC0*/\r
701 PSC0_lPSC_enableARM(unsigned int PD, unsigned int LPSC_num) {\r
702 \r
703   *(unsigned int*) (PSC0_MDCTL+4*LPSC_num) = (*(unsigned int*) (PSC0_MDCTL+4*LPSC_num) & 0xFFFFFEE0) | 0x0103;\r
704 \r
705   PSC0_PTCMD = 0x1<<PD;\r
706   while( (PSC0_PTSTAT & (0x1<<PD) ) !=0) ; /*Wait for power state transition to finish*/\r
707   while( (*(unsigned int*)(PSC0_MDSTAT+4 * LPSC_num) & 0x1F) !=0x3);\r
708 }\r
709 \r
710 hotmenu Enable_ARM()\r
711 {\r
712     /* Turn on ARM RAM */\r
713     PSC0_lPSC_enable(0, 7);\r
714 \r
715     /* Put branch to self at ARM vector table before releasing PSC */\r
716     *( unsigned int* )( 0xFFFF0000 ) = 0xEAFFFFFE;\r
717     *( unsigned int* )( 0xFFFF0004 ) = 0xEAFFFFFE;\r
718     *( unsigned int* )( 0xFFFF0008 ) = 0xEAFFFFFE;\r
719     *( unsigned int* )( 0xFFFF000C ) = 0xEAFFFFFE;\r
720 \r
721     HOST0CFG = 0x00000001; \r
722 \r
723     /* Turn on ARM */\r
724     PSC0_lPSC_enableARM(0, 14);\r
725 \r
726         GEL_TextOut(" ARM Enabled\n");\r
727 }\r
728 \r
729 /* ------------------------------------------------------------------------ *\r
730  *                                                                          *\r
731  *  Setup_Psc_All_On( )                                                     *\r
732  *      Enable all PSC modules on ALWAYSON and DSP power dominas.           *\r
733  *                                                                          *\r
734  * ------------------------------------------------------------------------ */\r
735 hotmenu\r
736 Setup_Psc_All_On( )\r
737 {\r
738     int i;\r
739     GEL_TextOut( "Setup Power Modules (All on)... " );\r
740 \r
741     // PSC0\r
742     PSC0_lPSC_enable(0, 0);\r
743     PSC0_lPSC_enable(0, 1);\r
744     PSC0_lPSC_enable(0, 2);\r
745     PSC0_lPSC_enable(0, 3);  // EMIFA\r
746     PSC0_lPSC_enable(0, 4);\r
747     PSC0_lPSC_enable(0, 5);\r
748     PSC0_lPSC_enable(0, 6);\r
749     PSC0_lPSC_enable(0, 8);\r
750     PSC0_lPSC_enable(0, 9);\r
751     PSC0_lPSC_enable(0, 10);\r
752     PSC0_lPSC_enable(0, 11);\r
753     PSC0_lPSC_enable(0, 12);\r
754     PSC0_lPSC_enable(0, 13);\r
755 \r
756         // PSC1\r
757     PSC1_lPSC_enable(0, 1);\r
758     PSC1_lPSC_enable(0, 2);\r
759     PSC1_lPSC_enable(0, 3);\r
760         PSC1_lPSC_enable(0, 4);\r
761     PSC1_lPSC_enable(0, 5);\r
762     PSC1_lPSC_enable(0, 6);  // EMIFB\r
763     PSC1_lPSC_enable(0, 7);\r
764     PSC1_lPSC_enable(0, 8);\r
765     PSC1_lPSC_enable(0, 9);\r
766     PSC1_lPSC_enable(0, 10);\r
767     PSC1_lPSC_enable(0, 11);\r
768     PSC1_lPSC_enable(0, 12);\r
769     PSC1_lPSC_enable(0, 13);\r
770     PSC1_lPSC_enable(0, 16);\r
771     PSC1_lPSC_enable(0, 17);\r
772     PSC1_lPSC_enable(0, 20);\r
773     PSC1_lPSC_enable(0, 21);\r
774     PSC1_lPSC_enable(0, 24);\r
775     PSC1_lPSC_enable(0, 25);\r
776     PSC1_lPSC_enable(0, 26);\r
777     PSC1_lPSC_enable(0, 31);\r
778 \r
779     GEL_TextOut( "[Done]\n" );\r
780 }\r
781 \r
782 \r
783 /* ------------------------------------------------------------------------ *\r
784  *                                                                          *\r
785  *  Setup_EMIFA( )                                                          *\r
786  *      Setup Async-EMIF to the specified timings using either NAND Hw      *\r
787  *      controller or normal EMIF controller                                *\r
788  *                                                                          *\r
789  * ------------------------------------------------------------------------ */\r
790 #define AEMIF_AWCCR             *( unsigned int* )( 0x68000004 )\r
791 #define AEMIF_A1CR              *( unsigned int* )( 0x68000010 )\r
792 #define AEMIF_A2CR              *( unsigned int* )( 0x68000014 )\r
793 #define AEMIF_A3CR              *( unsigned int* )( 0x68000018 )\r
794 #define AEMIF_A4CR              *( unsigned int* )( 0x6800001C )\r
795 #define AEMIF_NANDFCR           *( unsigned int* )( 0x68000060 )\r
796 \r
797 Setup_EMIFA( )\r
798 {\r
799     /* Use extended wait cycles to keep CE low during NAND access */\r
800     AEMIF_AWCCR = 0xff;\r
801 \r
802     /* Setup CS2 - 8-bit normal async */\r
803     AEMIF_A1CR = 0x00300608;\r
804     AEMIF_NANDFCR &= ~1;\r
805 \r
806     /* Setup CS3 - 8-bit NAND */\r
807     AEMIF_A2CR = 0x00300388;\r
808     AEMIF_NANDFCR |= 2;\r
809 \r
810     /* Setup CS4 - 8-bit normal async */\r
811     AEMIF_A3CR = 0x00a00504;  // Setup=0, Strobe=A, Hold=0, TA=1, 8-bit\r
812     AEMIF_NANDFCR &= ~4;\r
813 \r
814     /* Setup CS5 - 8-bit normal async */\r
815     AEMIF_A4CR = 0x00a00504;  // Setup=0, Strobe=A, Hold=0, TA=1, 8-bit\r
816     AEMIF_NANDFCR &= ~8;\r
817 }\r
818 \r
819 \r
820 /* ------------------------------------------------------------------------ *\r
821  *                                                                          *\r
822  *  Setup_EMIFB( )                                                          *\r
823  *      Configure SDRAM.                                                    *\r
824  *                                                                          *\r
825  * ------------------------------------------------------------------------ */\r
826 #define EMIFB_BASE              0xB0000000\r
827 #define EMIFB_SDSTAT            *(unsigned int*)(EMIFB_BASE + 0x04)    //SDRAM Status Register  \r
828 #define EMIFB_SDCFG             *(unsigned int*)(EMIFB_BASE + 0x08)    //SDRAM Bank Config Register\r
829 #define EMIFB_SDREF             *(unsigned int*)(EMIFB_BASE + 0x0C)    //SDRAM Refresh Control Register\r
830 #define EMIFB_SDTIM1            *(unsigned int*)(EMIFB_BASE + 0x10)    //SDRAM Timing Register\r
831 #define EMIFB_SDTIM2            *(unsigned int*)(EMIFB_BASE + 0x14)    //SDRAM Timing Register\r
832 \r
833 \r
834 \r
835 Setup_EMIFB()\r
836 {\r
837     // ISSI IS42S16160B-6BL SDRAM, 2 x 16M x 16 (32-bit data path), 133MHz\r
838     EMIFB_SDCFG = 0         // SDRAM Bank Config Register\r
839         |( 1 << 15)         // Unlock timing registers\r
840         |( 2 << 9 )         // CAS latency is 2\r
841         |( 2 << 4 )         // 4 bank SDRAM devices\r
842         |( 1 << 0 );        // 512-word pages requiring 9 column address bits\r
843 \r
844     EMIFB_SDREF = 0         // SDRAM Refresh Control Register\r
845         |( 0 << 31)         // Low power mode disabled\r
846         |( 0 << 30)         // MCLK stoping disabled\r
847         |( 0 << 23)         // Selects self refresh instead of power down\r
848         |( 1040 <<0);       // Refresh rate = 7812.5ns / 7.5ns\r
849 \r
850     EMIFB_SDTIM1 = 0        // SDRAM Timing Register 1\r
851         |( 8 << 25)         // (67.5ns / 7.55ns) - 1 = TRFC  @ 133MHz\r
852         |( 2 << 22 )        // (20ns / 7.5ns) - 1 =TRP\r
853         |( 2 << 19 )        // (20ns / 7.5ns) - 1 = TRCD\r
854         |( 1 << 16 )        // (14ns / 7.5ns) - 1 = TWR\r
855         |( 5 << 11 )        // (45ns / 7.5ns) - 1 = TRAS\r
856         |( 8 <<  6 )        // (67.5ns / 7.5ns) - 1 = TRC\r
857         |( 2 <<  3 );       // *(((4 * 14ns) + (2 * 7.5ns)) / (4 * 7.5ns)) -1. = TRRD\r
858                             // but it says to use this formula if 8 banks but only 4 are used here.\r
859                             // and SDCFG1 register only suports upto 4 banks.\r
860 \r
861     EMIFB_SDTIM2 = 0        // SDRAM Timing Register 2\r
862         |( 14<< 27)         // not sure how they got this number. the datasheet says value should be\r
863                             // "Maximum number of refresh_rate intervals from Activate to Precharge command"\r
864                             // but has no equation. TRASMAX is 120k.\r
865         |( 9 << 16)         // ( 70 / 7.5) - 1\r
866         |( 5 << 0 );        // ( 45 / 7.5 ) - 1\r
867 \r
868     EMIFB_SDCFG = 0         // SDRAM Bank Config Register\r
869             |( 1 << 16)\r
870         |( 0 << 15)         // Unlock timing registers\r
871         |( 2 << 9 )         // CAS latency is 2\r
872         |( 2 << 4 )         // 4 bank SDRAM devices\r
873         |( 1 << 0 );        // 512-word pages requiring 9 column address bits\r
874 \r
875   /*Program the EMIF3C_SDRAM Controller*/\r
876 //  EMIF3C_SDCFG  = 0x00008421;\r
877 //  EMIF3C_SDTIM1 = 0x10912A10;  \r
878 //  EMIF3C_SDTIM2 = 0x70090005;\r
879 //  EMIF3C_SDREF  = 0x410;\r
880 }\r
881 \r
882 /* GEL file to load microphone files */\r
883 \r
884 #define MIC1PATH  "$(GEL_file_dir)/t8/y16L8g3m7090_1.pcm"\r
885 #define MIC2PATH  "$(GEL_file_dir)/t8/y16L8g3m7090_2.pcm"\r
886 #define MIC3PATH  "$(GEL_file_dir)/t8/y16L8g3m7090_3.pcm"\r
887 #define MIC4PATH  "$(GEL_file_dir)/t8/y16L8g3m7090_4.pcm"\r
888 #define MIC5PATH  "$(GEL_file_dir)/t8/y16L8g3m7090_5.pcm"\r
889 #define MIC6PATH  "$(GEL_file_dir)/t8/y16L8g3m7090_6.pcm"\r
890 #define MIC7PATH  "$(GEL_file_dir)/t8/y16L8g3m7090_7.pcm"\r
891 #define MIC8PATH  "$(GEL_file_dir)/t8/y16L8g3m7090_8.pcm"\r
892 \r
893 #define OUTPUTPATH  "$(GEL_file_dir)/t8/fileOutput.bin"\r
894 \r
895 BFLoadMic(buffer,micpath)\r
896 {\r
897     GEL_MemoryLoad(buffer,0,160,micpath,32);\r
898 }\r
899 \r
900 BFSaveMic(buffer,num, micpath)\r
901 {\r
902     GEL_MemorySave(buffer,0,num,micpath,8,0,32);\r
903 }\r
904 \r
905 menuitem "Microphone Load Functions";\r
906 \r
907 dialog BFLoadOneMic(buffer "Buffer Address",micpath "Microphone File Path")\r
908 {\r
909     GEL_TextOut("Loading %s\n","",,,,micpath);\r
910     BFLoadMic(buffer,micpath);\r
911 }\r
912 \r
913 hotmenu BFLoadMic1()\r
914 {\r
915     GEL_TextOut("Loading %s\n","",,,,MIC1PATH);\r
916     BFLoadMic(filBuf0,MIC1PATH);\r
917 }\r
918 \r
919 hotmenu BFLoadMic2()\r
920 {\r
921     GEL_TextOut("Loading %s\n","",,,,MIC2PATH);\r
922     BFLoadMic(filBuf1,MIC2PATH);\r
923 }\r
924 \r
925 hotmenu BFLoadMic3()\r
926 {\r
927     GEL_TextOut("Loading %s\n","",,,,MIC3PATH);\r
928     BFLoadMic(filBuf2,MIC3PATH);\r
929 }\r
930 \r
931 hotmenu BFLoadMic4()\r
932 {\r
933     GEL_TextOut("Loading %s\n","",,,,MIC4PATH);\r
934     BFLoadMic(filBuf3,MIC4PATH);\r
935 }\r
936 \r
937 hotmenu BFLoadMic5()\r
938 {\r
939     GEL_TextOut("Loading %s\n","",,,,MIC5PATH);\r
940     BFLoadMic(filBuf4,MIC5PATH);\r
941 }\r
942 \r
943 hotmenu BFLoadMic6()\r
944 {\r
945     GEL_TextOut("Loading %s\n","",,,,MIC6PATH);\r
946     BFLoadMic(filBuf5,MIC6PATH);\r
947 }\r
948 \r
949 hotmenu BFLoadMic7()\r
950 {\r
951     GEL_TextOut("Loading %s\n","",,,,MIC7PATH);\r
952     BFLoadMic(filBuf6,MIC7PATH);\r
953 }\r
954 \r
955 hotmenu BFLoadMic8()\r
956 {\r
957     GEL_TextOut("Loading %s\n","",,,,MIC8PATH);\r
958     BFLoadMic(filBuf7,MIC8PATH);\r
959 }\r
960 \r
961 hotmenu BFLoadMicAll()\r
962 {\r
963     BFLoadMic1();\r
964     BFLoadMic2();\r
965     BFLoadMic3();\r
966     BFLoadMic4();\r
967     BFLoadMic5();\r
968     BFLoadMic6();\r
969     BFLoadMic7();\r
970     BFLoadMic8();\r
971     GEL_TextOut("Done Loading Microphones\n");\r
972 }\r
973 \r
974 menuitem "Microphone Save Functions";\r
975 \r
976 hotmenu BFSaveOutput()\r
977 {\r
978     GEL_TextOut("Saving %s\n","",,,,OUTPUTPATH);\r
979     BFSaveMic(filOutBuf0,filConfig.outlen/2,OUTPUTPATH);\r
980 }\r