for loop for pll + ddr_ctr_config
[keystone-rtos/ibl.git] / src / device / device.h
1 /*
2  *
3  * Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/ 
4  * 
5  * 
6  *  Redistribution and use in source and binary forms, with or without 
7  *  modification, are permitted provided that the following conditions 
8  *  are met:
9  *
10  *    Redistributions of source code must retain the above copyright 
11  *    notice, this list of conditions and the following disclaimer.
12  *
13  *    Redistributions in binary form must reproduce the above copyright
14  *    notice, this list of conditions and the following disclaimer in the 
15  *    documentation and/or other materials provided with the   
16  *    distribution.
17  *
18  *    Neither the name of Texas Instruments Incorporated nor the names of
19  *    its contributors may be used to endorse or promote products derived
20  *    from this software without specific prior written permission.
21  *
22  *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
23  *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
24  *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
25  *  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 
26  *  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
27  *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
28  *  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
29  *  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
30  *  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
31  *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
32  *  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33  *
34 */
38 /**********************************************************************************
39  * FILE PURPOSE: Define the device interface
40  **********************************************************************************
41  * FILE NAME: device.h
42  *
43  * DESCRIPTION: This file defines the device wrapper used by IBL modules
44  *
45  * @file device.h
46  *
47  * @brief
48  *  The device wrapper API is defined
49  *
50  ***********************************************************************************/
51 #ifndef DEVICE_H 
52 #define DEVICE_H
54 #include "types.h"
57 /* The target specific file is pointed to via make control. There will be a different
58    target.h file for each platform */
59 #include "target.h"
60  
61  
62  
63 /**
64  * @brief
65  *    Fill in the ibl structure with default values
66  *
67  * @details
68  *    If the ibl table is not pre-loaded during the initial boot, then
69  *    each device will load a default table.
70  */
71 void deviceLoadDefaultIblTable(void);
74 /**
75  * @brief
76  *   Convert a local address to a global address
77  *
78  *  @details
79  *    a local memory address (l1d, l1p, l2) is converted to a global address
80  */
81 Uint32 deviceLocalAddrToGlobal (Uint32 local);
84 /**
85  * @brief Configure the PLLs
86  *
87  * @details
88  *   The three PLLs are enabled. Only the main PLL has the ability to configure
89  *   the multiplier and dividers.
90  */
91 void devicePllConfig (void);
94 /**
95  * @brief
96  *    Power up a peripheral
97  *
98  * @details
99  *    The specified module (and domain if required) is power up
100  */
101 int32 devicePowerPeriph (int32 modNum);
104 /**
105  * @brief Enable the DDR controller
106  *
107  * @details
108  *   The DDR controller is enabled (optionally)
109  */
110 void deviceDdrConfig (void);
113 /* Function to get the endian setting of a device */
114 unsigned int get_device_endian();
116 /* Function to get the switch setting of a device */
117 unsigned int get_device_switch_setting();
119 /**
120  * @brief
121  *    Perform device level configuration for nand boot
122  *
123  * @detials
124  *    Board/chip specific initializations
125  */
126 int32 deviceConfigureForNand(void);
128 /**
129  *  @brief
130  *      Load the default ethernet address
131  *
132  *  @details
133  *      The mac address from e-fuse is loaded
134  */
135 void deviceLoadDefaultEthAddress (uint8 *maddr);
137 /**
138  *  @brief
139  *      Reset the ethernet controller
140  *
141  *  @details
142  *      Some devices require an external ethernet reset before configuration
143  */
144 #ifndef deviceSetEthResetState
145 void deviceSetEthResetState (int32 portNum, BOOL applyReset);
146 #endif
147  
148  /**
149   *  @brief
150   *     Return the endian status
151   *
152   *  @details
153   *     Returns true if the device is executing in little endian mode
154   */
155 bool deviceIsLittleEndian(void);
158 /**
159  *  @brief
160  *      Provide an approximate delay, in cpu cycles
161  *
162  *  @details
163  *      A delay loop
164  */
165 void chipDelay32 (uint32 nCycles);
170 /**
171  *  @brief
172  *      Return the NAND interface function table
173  *
174  *  @details
175  *      Some devices support multiple NAND interface at once (EMIF25 and SPI).
176  *      This function returns a pointer to the lower level function
177  *      table to use. The table is selected in the ibl configuration.
178  */
179 typedef struct nandCtbl_s  {
181     Int32 (*nct_driverInit)      (int32 cs, void *nandDevInfo);
182     Int32 (*nct_driverReadBytes) (Uint32 block, Uint32 page, Uint32 byte, Uint32 nbytes, Uint8 *data);
183     Int32 (*nct_driverReadPage)  (Uint32 block, Uint32 page, Uint8 *data);
184     Int32 (*nct_driverClose)     (void);
186 } nandCtbl_t;
188 nandCtbl_t *deviceGetNandCtbl (int32 interface);
191 /**
192  *  @brief
193  *      Return the NOR interface function table
194  *
195  *  @details
196  *      NOR is supported through both SPI and EMIF. This function returns a pointer
197  *      to the lower level function table to use during boot.
198  */
199 typedef struct norCtbl_s  {
201     Int32 (*nct_driverInit)         (int32 cs);
202     Int32 (*nct_driverReadBytes)    (Uint8 *data, Uint32 nbytes, Uint32 address);
203     Int32 (*nct_driverClose)        (void);
204     
205 } norCtbl_t;
207 norCtbl_t *deviceGetNorCtbl (int32 interface);
208     
211 /**
212  *  @brief
213  *      Return the default SPI device configuration
214  */
215 void deviceLoadInitSpiConfig (void *cfg);
217 #endif