MCSDK 3.0: add support for Keystone II devices
[keystone-rtos/ibl.git] / src / device / c665x / tiboot_c665x.h
1 #ifndef __TIBOOT_H__
2 #define __TIBOOT_H__
3 /*
4  *
5  * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/ 
6  * 
7  * 
8  *  Redistribution and use in source and binary forms, with or without 
9  *  modification, are permitted provided that the following conditions 
10  *  are met:
11  *
12  *    Redistributions of source code must retain the above copyright 
13  *    notice, this list of conditions and the following disclaimer.
14  *
15  *    Redistributions in binary form must reproduce the above copyright
16  *    notice, this list of conditions and the following disclaimer in the 
17  *    documentation and/or other materials provided with the   
18  *    distribution.
19  *
20  *    Neither the name of Texas Instruments Incorporated nor the names of
21  *    its contributors may be used to endorse or promote products derived
22  *    from this software without specific prior written permission.
23  *
24  *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
25  *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
26  *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
27  *  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 
28  *  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
29  *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
30  *  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
31  *  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
32  *  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
33  *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
34  *  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
35  *
36 */
38 /******************************************************************************
39  * FILE PURPOSE: Define Structures, MACROs and etc for TI Shared ROM Boot
40  ******************************************************************************
41  * FILE NAME:   tiboot.h
42  *
43  * DESCRIPTION: Define structures, macros and etc for the TI Shared ROM boot
44  *              process.
45  *
46  ******************************************************************************/
47 #include "types.h"
49 /*******************************************************************************
50  * Utility Macro definitions
51  ******************************************************************************/
52 #define HEX_DIGIT(digit)        ((digit) + '0')
53 #define BOOT_BIT_TO_MASK(bit)   (1 << (bit))
55 /*******************************************************************************
56  * Data Definition: Error Handling relatBOOT_ENTRY_POINT_ADDRed definition:
57  *******************************************************************************
58  * Description: Define Handling related macros, constants
59  *
60  ******************************************************************************/
61 /* Define Module IDs */
62 #define BOOT_MODULE_ID_MAIN         0
63 #define BOOT_MODULE_ID_BTBL         1
64 #define BOOT_MODULE_ID_BETH         2
65 #define BOOT_MODULE_ID_I2C          3
66 #define BOOT_MODULE_ID_CHIP         4
67 #define BOOT_MODULE_ID_HW           5
69 /* Boot error codes */
70 enum {
71   BOOT_NOERR                = 0,
72   BOOT_GEN_ERROR            = 1,    /* General error */
73   BOOT_INVALID_BOOT_MODE    = 2,    
74   BOOT_INVALID_I2C_DEV_ADDR = 3,
75   BOOT_INVALID_CHECKSUM     = 4,    /* Invalid checksum of the boot parameters */
76   BOOT_INVALID_PARAMS_SIZE  = 5,    /* the size of boot parameters is too big */
77   BOOT_RX_ETH_QUEUE_FULL    = 6,    /* ethmain.c, hw_rxPacket */
78   BOOT_CACHE_INIT_FAIL      = 7,    /* rmain.c, cache init failed */
79   BOOT_CACHE_DISABLE_FAIL   = 8,    /* rmain.c, cache disable failed */
80   BOOT_INVALID_CPPI_SIZE    = 9,    /* ethmain.c, invalid compile sizes */
81   BOOT_INVALID_CORE_ID      = 10,   /* Invalid core ID in cold boot */
82   BOOT_INVALID_MAC_ADDR     = 11,   /* Invalid MAC address (all 0's) */
83   BOOT_ETH_TX_SCRATCH       = 12,   /* tx scratch size invalid */
84   BOOT_ETH_TX_PACKET        = 13,   /* tx packet formation failure */
85   BOOT_ETH_MAC_INIT         = 14,   /* ethmain.c - mac init failed */
86   BOOT_PERIPH_POWER         = 15,   /* peripheral failed to powerup */
87   BOOT_MAIN_FAIL            = 16,   /* Failed in initial boot setup (wrong core) */
88   BOOT_SK_REGISTERSCWP      = 17,   /* Failed at SK_registerSCWP */
89   BOOT_SK_ALLOCSC           = 18,   /* Failed at SK_allocSC */       
90   BOOT_CPSGMII_CONFIGINDEX  = 19,   /* Failed at wrong CPSGMII config index */
91   BOOT_SRIO_CONFIGINDEX     = 20,   /* Failed at wrong SRIO config index */
92   BOOT_RETURN_FROM_CHAIN    = 21,   /* Code returned from boot main chaining, should never happen */
93   BOOT_INVALID_HIB_ADDR     = 22    /* Invalid hibernation return address */
94 };
96 /* Error tracking prototypes (functions in rmain.c)*/
97 void bootException (UINT16 errorCode);
98 void bootError (UINT16 errorCode);
100 /* Error code = (module ID *  100) + module specific error */
101 #define BOOT_ERROR_CODE(id, code)     ((UINT16)((id<<8) + code))
102 #define BOOT_EXCEPTION(error_code)     bootException(error_code)
103 #define BOOT_ERROR(error_code)         bootError(error_code) 
105 /*******************************************************************************
106  * Begin Boot Parameter definitions
107  ******************************************************************************/
109 /*******************************************************************************
110  * Boot Parameter Common 
111  ******************************************************************************/
112 typedef struct boot_params_common_s{
113    UINT16 length;       /* size of the entire boot parameters in bytes */
114    UINT16 checksum;     /* non-zero: 1's complement checksum of the boot 
115                          *           parameters
116                          * zero: checksum is not applicable
117                          */
118    UINT16 boot_mode;
119    UINT16 portNum;
120    
121 #define BOOT_PARAMS_ALL_PORTS   0xffff  /* All ports on a device are configured */   
122    
123    UINT16 swPllCfg_msw;  /* CPU PLL configuration, MSW */
124    UINT16 swPllCfg_lsw;  /* CPU PLL configuration, LSW */
125    
126    /*                                swPllCfg
127     *
128     *   /----------------------------------------------------------------\
129     *   |   31        30   | 29        16 | 15          8 | 7          0 |
130     *   |      PLL Ctl     |  multiplier  |  pre-divider  | post divider |
131     *   \----------------------------------------------------------------/
132     */
133     
134 #define BOOT_PARAMS_PLL_CFG_CTL_MASK                0xc000
135 #define BOOT_PARAMS_PLL_CFG_CTL_SHIFT               14
137 #define BOOT_PARAMS_PLL_CFG_CTL_NO_INIT             0       /* Pll is not initialized */
138 #define BOOT_PARAMS_PLL_CFG_CTL_INIT_CONDITIONAL    1       /* Initialize only if PLL is currently disabled or in bypass */
139 #define BOOT_PARAMS_PLL_CFG_CTL_INIT                2       /* Initialize PLL regardless of current PLL state */
140 #define BOOT_PARAMS_PLL_CFG_CTL_BYPASS              3       /* Put the PLL into bypass  */
143 #define BOOT_PARAMS_PLL_CFG_MSW_MULT_MASK     0x3fff
144 #define BOOT_PARAMS_PLL_CFG_MSW_MULT_SHIFT    0
146 #define BOOT_PARAMS_PLL_CFG_LSW_PREDIV_MASK   0xff00
147 #define BOOT_PARAMS_PLL_CFG_LSW_PREDIV_SHIFT  8
149 #define BOOT_PARAMS_PLL_CFG_LSW_POSTDIV_MASK  0x00ff
150 #define BOOT_PARAMS_PLL_CFG_LSW_POSTDIV_SHIFT 0
151    
152 } BOOT_PARAMS_COMMON_T;
154 typedef struct boot_params_ethernet_s{
156     /* common portion of the Boot parameters */
157     UINT16 length;
158     UINT16 checksum;
159     UINT16 boot_mode;
160     UINT16 portNum;
161     UINT16 swPllCfg_msw;  /* CPU PLL configuration, MSW */
162     UINT16 swPllCfg_lsw;  /* CPU PLL configuration, LSW */
163      
164     /* Etherent specific portion of the Boot Parameters */
165     UINT16 options;
166     /*
167      * Ethernet Specific Options
168      *
169      * Bits 2:0 interface
170      *      000 - MII
171      *      001 - RMII
172      *      010 - GMII
173      *      011 - RGMII
174      *      100 - SMII
175      *      101 - S3MII
176      *      110 - RMII 10Mbs
177      *      111 - RMII 100Mbs
178      *
179      * Bit 3: HD:                                      
180      *        0 - Full Duplex                          
181      *        1 - Half Duplex                          
182      * Bit 4: SKIP TX                                           
183      *        0 - Send the Ethernet Ready Frame 
184      *        1 - Skip sending the Ethernet Ready Frame                                              
185      * Bits 6:5 - Ethernet Initialization
186      *      00 - Entire system configured
187      *      01 - No initialization of peripherals that are already enabled and running
188      *      10 - Reserved
189      *      11 - No initialization at all
190      *
191      * Other bits:  Reserved 
192      */ 
193      #define BOOT_PARAMS_ETH_OPTIONS_MII        0x0000
194      #define BOOT_PARAMS_ETH_OPTIONS_RMII       0x0001
195      #define BOOT_PARAMS_ETH_OPTIONS_GMII       0x0002
196      #define BOOT_PARAMS_ETH_OPTIONS_RGMII      0x0003
197      #define BOOT_PARAMS_ETH_OPTIONS_SMII       0x0004
198      #define BOOT_PARAMS_ETH_OPTIONS_S3MII      0x0005
199      #define BOOT_PARAMS_ETH_OPTIONS_RMII_10    0x0006
200      #define BOOT_PARAMS_ETH_OPTIONS_RMII_100   0x0007
201         
202         /* Faraday only supports SGMII */
203      #define BOOT_PARAMS_ETH_OPTIONS_SGMII      0x0006
204      
205      #define BOOT_PARAMS_ETH_OPTIONS_HD         0x0008
206      #define BOOT_PARAMS_ETH_OPTIONS_SKIP_TX    0x0010
207     
208      #define BOOT_PARAMS_ETH_OPTIONS_INIT_MASK  0x0060
209      #define BOOT_PARAMS_ETH_OPTIONS_INIT_SHIFT 5
210      #define BOOT_PARAMS_ETH_OPTIONS_INIT(x)    (((x) & BOOT_PARAMS_ETH_OPTIONS_INIT_MASK) >> BOOT_PARAMS_ETH_OPTIONS_INIT_SHIFT)
211      
212      #define BOOT_PARAMS_ETH_OPTIONS_INIT_FULL      0
213      #define BOOT_PARAMS_ETH_OPTIONS_INIT_PARTIAL   1
214      #define BOOT_PARAMS_ETH_OPTIONS_INIT_NONE      3
215      
216      /* 
217       * he device MAC address to be used for Boot:
218       * All zero mac address indicates that the device E-fuse address should
219       *  be used.
220       */ 
221      UINT16 mac_addr_h;
222      UINT16 mac_addr_m;
223      UINT16 mac_addr_l;
224      
225      /* 
226       * The multicast or broadcast MAC address which should be accepted as
227       * a destination MAC address for boot table frames
228       */
229      UINT16 mmac_addr_h;
230      UINT16 mmac_addr_m;
231      UINT16 mmac_addr_l;
232         
233      UINT16 src_port;     /* Source UDP port number to be used during boot process */
234                           /* 0: allow any SRC UDP port */
235      UINT16 dest_port;    /* Destination UDP port number to be used during boot process */
236      
237      /* The Device ID to be included in the boot ready announcement frame */
238      UINT16 device_id_12;   
239      UINT16 device_id_34;   
240      #define BOOT_PARAMS_DEVICE_ID_HIGH_MASK     0xFF00
241      #define BOOT_PARAMS_DEVICE_ID_HIGH_SHIFT    8
242      #define BOOT_PARAMS_DEVICE_ID_LOW_MASK      0x00FF
243      #define BOOT_PARAMS_DEVICE_ID_LOW_SHIFT     0
244      #define BOOT_PARAMS_GET_DEVICE_ID_13(device_id)    \
245                (((device_id) & BOOT_PARAMS_DEVICE_ID_HIGH_MASK) > BOOT_PARAMS_DEVICE_ID_HIGH_SHIFT)
246      #define BOOT_PARAMS_GET_DEVICE_ID_24(device_id)    \
247                (((device_id) & BOOT_PARAMS_DEVICE_ID_LOW_MASK) > BOOT_PARAMS_DEVICE_ID_LOW_SHIFT)
248  
249      /* 
250       * The destination MAC address used for the boot ready announce frame
251       */
252      UINT16 hmac_addr_h;
253      UINT16 hmac_addr_m;
254      UINT16 hmac_addr_l;
256          /*
257       * The CPSGMII configurations for Faraday
258       */
260      UINT16 sgmiiConfig;
262      #define BOOT_PARAMS_SGMII_CONFIG_INDEX_MASK     0x0F     /* bit 3 to 0 is index */
263      #define BOOT_PARAMS_SGMII_CONFIG_DIRECT_CONFIG  (1<<4)   /* set to use direct configurations */
264      #define BOOT_PARAMS_SGMII_CONFIG_NO_CONFIG      (1<<5)   /* set to bypass CPSGMII config  */
266          UINT16 sgmiiControl;  
267      #define BOOT_PARAMS_SGMII_CONTROL_MASK 0x7F
269          UINT16 sgmiiMr_Adv_Ability;
270      #define BOOT_PARAMS_SGMII_ABILITY_MASK 0x0000FFFF
272      /* These registers are the serdes configuration registers */
273          UINT16 sgmiiTx_Cfg_h;
274          UINT16 sgmiiTx_Cfg_l;
275          UINT16 sgmiiRx_Cfg_h;
276          UINT16 sgmiiRx_Cfg_l;
277          UINT16 sgmiiAux_Cfg_h;
278          UINT16 sgmiiAux_Cfg_l;
279      
280      UINT16 pktPllCfg_msw;      /* Packet subsystem PLL configuration */
281      UINT16 pktPllCfg_lsw;
282      
283 }   BOOT_PARAMS_ETHERNET_T;
286 /**************************************************************************************
287  * Ethernet parameters used with bootp/tftp boot
288  **************************************************************************************/
289 typedef struct boot_params_bootp_ethernet_s{
291     /* common portion of the Boot parameters */
292     UINT16 length;
293     UINT16 checksum;
294     UINT16 boot_mode;
295     UINT16 portNum;
296     UINT16 swPllCfg_msw;  /* CPU PLL configuration, MSW */
297     UINT16 swPllCfg_lsw;  /* CPU PLL configuration, LSW */
298      
299     /* Etherent specific portion of the Boot Parameters */
300     UINT16 options;
302     /* The unicast mac address accepted by this device */
303     UINT16 mac_addr_h;
304     UINT16 mac_addr_m;
305     UINT16 mac_addr_l;
306     
307     /* The multicast mac address accepted by this device */
308     UINT16 mmac_addr_h;
309     UINT16 mmac_addr_m;
310     UINT16 mmac_addr_l;
311     
312     /* The number of milli-seconds to wait before timing out a bootp request and tftp packet */
313     UINT16 bootpTimeoutMs;        /* This is the initial value. After each failure the time is doubled */
314     UINT16 tftpAckTimeoutMs;      /* Time for an ack timeout */
315     UINT16 tftpTotalTimeoutSec;   /* Number of seconds after which a transfer is timed out */
316     
317     /* The number of times to resend the bootp/tftp ack before giving up */
318     UINT16 bootpRetryCount;
319     UINT16 tftpRetryCount;
320     
321     
322     /* The device string is sent in the bootp request vendor specific area
323      * and class code fields. Up to 32 bytes packed into 16 UINT16s, 0 terminated */
324     #define VENDOR_STRING_SIZE_UINT16       16
325     UINT16 vendorString[VENDOR_STRING_SIZE_UINT16];
326     
327     /* The client ID string is sent in the bootp request client identifier code (option code 61) */
328     #define CLIENT_ID_STRING_SIZE_UINT16     10
329     UINT16 clientIdString[CLIENT_ID_STRING_SIZE_UINT16];
330     
331     
332     /* SGMII configuration */
333         UINT16 sgmiiControl;  
334         UINT16 sgmiiMr_Adv_Ability;
335     
336      /* These registers are the serdes configuration registers */
337         UINT16 sgmiiTx_Cfg_h;
338         UINT16 sgmiiTx_Cfg_l;
339         UINT16 sgmiiRx_Cfg_h;
340         UINT16 sgmiiRx_Cfg_l;
341         UINT16 sgmiiAux_Cfg_h;
342         UINT16 sgmiiAux_Cfg_l;
343     
344     UINT16 pktPllCfg_msw;      /* Packet subsystem PLL configuration */
345     UINT16 pktPllCfg_lsw;
346     
348 }   BOOT_PARAMS_BOOTP_ETHERNET_T;
351 /**************************************************************************************
352  * NAND boot options
353  **************************************************************************************/
354 typedef struct boot_params_nand_s {
356     /* common portion of the Boot parameters */
357     UINT16 length;
358     UINT16 checksum;
359     UINT16 boot_mode;
360     UINT16 portNum;
361     UINT16 swPllCfg_msw;  /* CPU PLL configuration, MSW */
362     UINT16 swPllCfg_lsw;  /* CPU PLL configuration, LSW */
363     
364     UINT16 options;
365     
366     #define BOOT_PARAMS_NAND_OPTIONS_I2C_PARAMS  (1 << 0)
367     
368     UINT16 i2cClkFreqKhz;   /* Desired speed of the I2C bus */
369     UINT16 i2cTargetAddr;   /* I2C Bus address of the target */
370     UINT16 i2cLocalAddr;    /* I2C Bus address of this device */
371     UINT16 i2cDataAddr;     /* Where to read the configuration block */
372     UINT16 i2cWtoRDelay;    /* Delay between address writes and data reads, in I2C bus cycles */
373     
374     UINT16 csNum;           /* Chip select region to use */
375     
376     UINT16 firstBlock;      /* The first block to try to read */
377  
378  } BOOT_PARAMS_NAND_T;
381 /**************************************************************************************
382  * Utopia boot options
383  **************************************************************************************/
384 typedef struct boot_params_utopia_s{
386     /* common portion of the Boot parameters */
387     UINT16 length;
388     UINT16 checksum;
389     UINT16 boot_mode;
390     UINT16 portNum;
391     UINT16 swPllCfg_msw;  /* CPU PLL configuration, MSW */
392     UINT16 swPllCfg_lsw;  /* CPU PLL configuration, LSW */
393      
394     /* Utopia specific portion of the Boot Parameters */
395     /* Options 
396      *  ---------------------------------------------------------------
397      * | 15                          3  |    2    |    1    |    0    |
398      * ----------------------------------------------------------------
399      *          reserved                     |         |         \-> 0 = multi phy
400      *                                       |         |             1 = single phy
401      *                                       |         \-> 0 = 8 bit utopia
402      *                                       |             1 = 16 bit utopis
403      *                                       \-> 0 = Init port
404      *                                           1 = skip port init
405      */
406     UINT16 options;
407     
408     #define BOOT_PARAMS_UTOPIA_SINGLE_PHY    (1<<0)
409     #define BOOT_PARAMS_UTOPIA_16BIT         (1<<1)
410     #define BOOT_PARAMS_UTOPIA_SKIP_INIT     (1<<2)
411     
412     UINT16 cellSizeBytes;    /* Cell Size */
413     UINT16 busWidthBits;     /* Bus width (8 or 16) */
414     UINT16 slid;             /* Slave ID  */
415     UINT16 coreFreqMhz;      /* CPU frequency after pll mult */
416      
417     
418 } BOOT_PARAMS_UTOPIA_T;
420 typedef struct boot_params_i2c_s{
422     /* common portion of the Boot parameters */
423     UINT16 length;
424     UINT16 checksum;
425     UINT16 boot_mode;
426     UINT16 portNum;
427     UINT16 swPllCfg_msw;  /* CPU PLL configuration, MSW */
428     UINT16 swPllCfg_lsw;  /* CPU PLL configuration, LSW */
429     
430     /* I2C specific portion of the Boot Parameters */
431     UINT16 options;
432     /*
433      * I2C Specific Options
434      * Bit 01-00: BT:                                      
435      *            00 - Boot Parameter Mode                            
436      *            01 - Boot Table Mode                     
437      *            10 - Boot Config mode
438      *            11 - Slave receive boot config
439      * Bit 04-02: EETYPE: EEPROM type             
440      * Other bits:  Reserved 
441      */ 
442      #define BOOT_PARAMS_I2C_OPTIONS_BP             0x0000
443      #define BOOT_PARAMS_I2C_OPTIONS_BT             0x0001
444      #define BOOT_PARAMS_I2C_OPTIONS_BC             0x0002
445      #define BOOT_PARAMS_I2C_OPTIONS_SLVOPT         0x0003
446      
447      #define BOOT_PARAMS_I2C_OPTIONS_MASK           0x0003
448      #define BOOT_PARAMS_I2C_OPTIONS_SHIFT          0
449      
450      #define BOOT_PARAMS_I2C_OPTIONS_EETYPE_MASK    0x001C
451      #define BOOT_PARAMS_I2C_OPTIONS_EETYPE_SHIFT   2 
452      
453      #define BOOT_PARAMS_I2C_IS_BOOTTBL_MODE(options) \
454              (((options) & BOOT_PARAMS_I2C_OPTIONS_MASK) == BOOT_PARAMS_I2C_OPTIONS_BT)
455              
456      #define BOOT_PARAMS_I2C_IS_BOOTCONFIG_MODE(options) \
457              (((options) & BOOT_PARAMS_I2C_OPTIONS_MASK) == BOOT_PARAMS_I2C_OPTIONS_BC)
458              
459      #define BOOT_PARAMS_I2C_IS_SLAVE_RCV_OPTIONS_MODE(options) \
460              (((options) & BOOT_PARAMS_I2C_OPTIONS_MASK) == BOOT_PARAMS_I2C_OPTIONS_SLVOPT)
461              
462      #define BOOT_PARAMS_I2C_IS_BOOTPARAM_MODE(options) \
463              (((options) & BOOT_PARAMS_I2C_OPTIONS_MASK) == BOOT_PARAMS_I2C_OPTIONS_BP)
464              
465      #define BOOT_PARAMS_I2C_SET_BOOTTBL_MODE(options, mode)               \
466              (options) = ((options) & ~BOOT_PARAMS_I2C_OPTIONS_MASK) |     \
467                          (((mode)   &  BOOT_PARAMS_I2C_OPTIONS_MASK) <<    \
468                                        BOOT_PARAMS_I2C_OPTIONS_SHIFT)
469              
470              
471      #define BOOT_PARAMS_I2C_GET_EETYPE(options)    \
472              (((options) & BOOT_PARAMS_I2C_OPTIONS_EETYPE_MASK) >> BOOT_PARAMS_I2C_OPTIONS_EETYPE_SHIFT)
473      #define BOOT_PARAMS_I2C_SET_EETYPE(options, ee_type)         \
474              (options) = (((options) & ~BOOT_PARAMS_I2C_OPTIONS_EETYPE_MASK) |  \
475                          (((ee_type) << BOOT_PARAMS_I2C_OPTIONS_EETYPE_SHIFT) & BOOT_PARAMS_I2C_OPTIONS_EETYPE_MASK))          
476         
477      /* The device address to be used for Boot */
478      UINT16 dev_addr;           /* 16-bit device address (low) */
479      UINT16 dev_addr_ext;       /* 16-bit extended device address (high) 
480                                  * set to zero if not used
481                                  * Note: some I2C device requires 32-bit 
482                                  * address
483                                  */ 
484      UINT16 multi_i2c_id;      /* Multi device master write boot ID */
485      UINT16 my_i2c_id;         /* This parts I2C address            */
486      
487      UINT16 core_freq_mhz;     /* Core frequency, MHz               */
488      UINT16 i2c_clk_freq_khz;  /* Desired I2C clock frequency, kHz  */
489      
490      UINT16 next_dev_addr;      /* Used only for the boot config mode.         */
491      UINT16 next_dev_addr_ext;  /* Copied into dev_addr* after config complete */
492      
493      UINT16 address_delay;      /* Rough number of cycles delay between address write
494                                  * and read to the i2c eeprom */
495      
496      
497 } BOOT_PARAMS_I2C_T;   
500 typedef struct boot_params_rapidio_s{
502     /* common portion of the Boot parameters */
503     UINT16 length;
504     UINT16 checksum;
505     UINT16 boot_mode;
506     UINT16 portNum;
507     UINT16 swPllCfg_msw;  /* CPU PLL configuration, MSW */
508     UINT16 swPllCfg_lsw;  /* CPU PLL configuration, LSW */
509     
510     /* Options */
511     UINT16 options;
512     
513     #define BOOT_PARAMS_RIO_OPTIONS_TX_ENABLE    (1<<0)   /* set to enable transmit    */
514     #define BOOT_PARAMS_RIO_OPTIONS_BOOT_TABLE   (1<<1)   /* set to use boot tables    */
515     #define BOOT_PARAMS_RIO_OPTIONS_NO_CONFIG    (1<<2)   /* set to bypass port config */
516     #define BOOT_PARAMS_RIO_OPTIONS_NO_QM_CONFIG (1<<3)   /* set to bypass QM config   */
517     #define BOOT_PARAMS_RIO_OPTIONS_SRDS_PLL_SET (1<<4)   /* set to insert mult/rate into serdes registers */
518     
519     UINT16 lane_port_setup; /* Lane port configuration                        */
520     #define BOOT_PARAMS_RIO_LPS_1X_1X_1X_1X     0       /* 4 ports 1 lane each */
521     #define BOOT_PARAMS_RIO_LPS_2X_1X_1X        1       /* 3 ports, lanes 0,1 are a 2 lane port */
522     #define BOOT_PARAMS_RIO_LPS_1X_1X_2X        2       /* 3 ports, lanes 2,3 are a 2 lane port */
523     #define BOOT_PARAMS_RIO_LPS_2X_2X           3       /* 2 ports, each 2 lanes */
524     #define BOOT_PARAMS_RIO_LPS_4X              4       /* 1 port of 4 lanes */
525     
526     UINT16  rsvd;
527     
528     UINT16 node_id;         /* The node id for this device                    */
529     UINT16 serdes_ref_clk;  /* The serdes reference clock freq, in hundredths
530                              * of MHz (1 MHz would be 100)                    */
531     UINT16 link_rate;       /* Data link rate (mega bits per second           */
532     UINT16 pf_low;          /* Packet forward range, low                      */
533     UINT16 pf_high;         /* Packet forward range, high                     */
534     
535     UINT16 promiscuous_mask;    /* One bit set per master lane to indicate promiscuous mode */
536     
537     UINT16 serdes_aux_msw;      /* Serdes Auxillary config register */
538     UINT16 serdes_aux_lsw;
539     
540     UINT16 serdes_rx_lane0_msw; /*  Rx Lane 0 config */
541     UINT16 serdes_rx_lane0_lsw;
542     
543     UINT16 serdes_rx_lane1_msw; /*  Rx Lane 1 config */
544     UINT16 serdes_rx_lane1_lsw;
545     
546     UINT16 serdes_rx_lane2_msw; /*  Rx Lane 1 config */
547     UINT16 serdes_rx_lane2_lsw;
548     
549     UINT16 serdes_rx_lane3_msw; /*  Rx Lane 1 config */
550     UINT16 serdes_rx_lane3_lsw;
551     
552     UINT16 serdes_tx_lane0_msw; /*  Tx Lane 0 config */
553     UINT16 serdes_tx_lane0_lsw;
554     
555     UINT16 serdes_tx_lane1_msw; /*  Tx Lane 1 config */
556     UINT16 serdes_tx_lane1_lsw;
557     
558     UINT16 serdes_tx_lane2_msw; /*  Tx Lane 1 config */
559     UINT16 serdes_tx_lane2_lsw;
560     
561     UINT16 serdes_tx_lane3_msw; /*  Tx Lane 1 config */
562     UINT16 serdes_tx_lane3_lsw;
563     
564 } BOOT_PARAMS_RIO_T;
567 typedef struct boot_params_pcie_s
569     /* common portion of the Boot parameters */
570     UINT16 length;
571     UINT16 checksum;
572     UINT16 boot_mode;
573     UINT16 portNum;
574     UINT16 swPllCfg_msw;  /* CPU PLL configuration, MSW */
575     UINT16 swPllCfg_lsw;  /* CPU PLL configuration, LSW */
576     
577     UINT16 options;
578     
579 #define BOOT_PARAMS_PCIE_OPTIONS_COMPUTE_PLL_MASK    (1 << 2)
580 #define BOOT_PARAMS_PCIE_OPTIONS_COMPUTE_PLL         (1 << 2)
581 #define BOOT_PARAMS_PCIE_OPTIONS_NO_COMPUTE_PLL      (0 << 2)
583 #define BOOT_PARAMS_PCIE_OPTIONS_NO_INIT_MASK        (1 << 1)
584 #define BOOT_PARAMS_PCIE_OPTIONS_NO_INIT             (1 << 1)
585 #define BOOT_PARAMS_PCIE_OPTIONS_INIT                (0 << 1)
588     UINT16 addressWidth;    /* The PCI address width. Valid values are 32 or 64 */
589     UINT16 linkRateMhz;     /* The serdes frequency. Valid values are 2500 and 5000 */
590     UINT16 refClock10kHz;   /* The reference clock in 10kHz units. Valid values are 10000, 12500, 15625, 25000, 31250 */
591     UINT16 window1Size;     /* Window 1 size, in units of megabytes */
592     UINT16 window2Size;     /* Window 2 size */
593     UINT16 window3Size;     /* Window 3 size. Valid only if the address width is 32 */
594     UINT16 window4Size;     /* Window 4 size. Valid only if the address width is 32 */
595     UINT16 window5Size;     /* Window 5 size. Valid only if the address width is 32 */
596     
597     UINT16 vendorId;             /* Vendor ID field */
598     UINT16 deviceId;             /* Device ID field */
599     UINT16 classCodeRevId_Msw;   /* Class code rev ID, MSW */
600     UINT16 classCodeRevId_Lsw;   /* Class code rev ID, LSW*/
601     
602     
603     
604     UINT16 serdesCfgMsw;    /* Serdes auxillary config, MSW */
605     UINT16 serdesCfgLsw;    /* Serdes auxillary config, LSW */
606     
607     UINT16 serdesCfgLane0Msw;   /* Serdes Lane 0 config, MSW */
608     UINT16 serdesCfgLane0Lsw;   /* Serdes Lane 0 config, LSW */
609     
610     UINT16 serdesCfgLane1Msw;   /* Serdes Lane 1 config, MSW */
611     UINT16 serdesCfgLane1Lsw;   /* Serdes Lane 1 config, LSW */
612     
613    
614 } BOOT_PARAMS_PCIE_T;
615     
616     
617 typedef struct boot_params_emif_nor_s  {
618     UINT16 waitEnable;
619     UINT16 asyncCfgMsw;
620     UINT16 asyncCfgLsw;
621 } boot_params_emif_nor_t;
622     
623     
624 typedef struct boot_params_emif_s
626     /* common portion of the Boot parameters */
627     UINT16 length;
628     UINT16 checksum;
629     UINT16 boot_mode;
630     UINT16 portNum;
631     UINT16 swPllCfg_msw;  /* CPU PLL configuration, MSW */
632     UINT16 swPllCfg_lsw;  /* CPU PLL configuration, LSW */
633     
634     UINT16 options;
635     
636     
637 #define BOOT_PARAMS_EMIF_OPTIONS_USE_ASYNC_MASK      (1 << 0)
638 #define BOOT_PARAMS_EMIF_OPTIONS_USE_ASYNC           (1 << 1)
639 #define BOOT_PARAMS_EMIF_OPTIONS_USE_ASYNC_DISABLED  (1 << 0)
640     
641     UINT16 type;
642 #define BOOT_PARAMS_EMIF_TYPE_NOR  0
644     UINT16 branchAddrMsw;
645     UINT16 branchAddrLsw;
646     
647     UINT16 csNum;
648     UINT16 memWidth;
649     
650     union  {
651       boot_params_emif_nor_t nor;
652     } u;
653     
654 } BOOT_PARAMS_EMIF_T;
655     
656     
657 typedef struct boot_params_vusr_s
659     /* common portion of the Boot parameters */
660     UINT16 length;
661     UINT16 checksum;
662     UINT16 boot_mode;
663     UINT16 portNum;
664     UINT16 swPllCfg_msw;  /* CPU PLL configuration, MSW */
665     UINT16 swPllCfg_lsw;  /* CPU PLL configuration, LSW */
666     
667     UINT16 options;
668 #define BOOT_PARAMS_VUSR_OPTIONS_NO_INIT_MASK        (1 << 1)
669 #define BOOT_PARAMS_VUSR_OPTIONS_NO_INIT             (1 << 1)
670 #define BOOT_PARAMS_VUSR_OPTIONS_INIT                (0 << 1)
672     UINT16 nLanes;          /* The number of lanes to configure */
673     
674     UINT16 serdesCfgMsw;    /* Serdes auxillary config, MSW */
675     UINT16 serdesCfgLsw;    /* Serdes auxillary config, LSW */
676     
677     UINT16 serdesCfgRxLane0Msw;   /* Serdes Rx Lane 0 config, MSW */
678     UINT16 serdesCfgRxLane0Lsw;   /* Serdes Rx Lane 0 config, LSW */
679     
680     UINT16 serdesCfgTxLane0Msw;   /* Serdes Tx Lane 0 config, MSW */
681     UINT16 serdesCfgTxLane0Lsw;   /* Serdes Tx Lane 0 config, LSW */
682     
683     
684     
685     UINT16 serdesCfgRxLane1Msw;   /* Serdes Rx Lane 1 config, MSW */
686     UINT16 serdesCfgRxLane1Lsw;   /* Serdes Rx Lane 1 config, LSW */
687     
688     UINT16 serdesCfgTxLane1Msw;   /* Serdes Tx Lane 1 config, MSW */
689     UINT16 serdesCfgTxLane1Lsw;   /* Serdes Tx Lane 1 config, LSW */
690     
691     
692     UINT16 serdesCfgRxLane2Msw;   /* Serdes Rx Lane 2 config, MSW */
693     UINT16 serdesCfgRxLane2Lsw;   /* Serdes Rx Lane 2 config, LSW */
694     
695     UINT16 serdesCfgTxLane2Msw;   /* Serdes Tx Lane 2 config, MSW */
696     UINT16 serdesCfgTxLane2Lsw;   /* Serdes Tx Lane 2 config, LSW */
697     
698     
700     UINT16 serdesCfgRxLane3Msw;   /* Serdes Rx Lane 3 config, MSW */
701     UINT16 serdesCfgRxLane3Lsw;   /* Serdes Rx Lane 3 config, LSW */
702     
703     UINT16 serdesCfgTxLane3Msw;   /* Serdes Tx Lane 3 config, MSW */
704     UINT16 serdesCfgTxLane3Lsw;   /* Serdes Tx Lane 3 config, LSW */
705     
706 } BOOT_PARAMS_VUSR_T;    
708 typedef struct boot_params_spi_s
710     /* common portion of the Boot parameters */
711     UINT16 length;
712     UINT16 checksum;
713     UINT16 boot_mode;
714     UINT16 portNum;
715     UINT16 swPllCfg_msw;  /* CPU PLL configuration, MSW */
716     UINT16 swPllCfg_lsw;  /* CPU PLL configuration, LSW */
717     
718     UINT16 options;
719     /*
720      * SPI Specific Options
721      * Bit 01-00: BT:                                      
722      *            00 - Boot Parameter Mode                            
723      *            01 - Boot Table Mode                     
724      *            10 - Boot Config mode
725      *            11 - GP header blob
726      * Other bits:  Reserved 
727      */ 
728      #define BOOT_PARAMS_SPI_OPTIONS_BP             0x0000
729      #define BOOT_PARAMS_SPI_OPTIONS_BT             0x0001
730      #define BOOT_PARAMS_SPI_OPTIONS_BC             0x0002
731      #define BOOT_PARAMS_SPI_OPTIONS_GPHDR          0x0003
732      
733      #define BOOT_PARAMS_SPI_OPTIONS_MASK           0x0003
734      #define BOOT_PARAMS_SPI_OPTIONS_SHIFT          0
735      
736      #define BOOT_PARAMS_SPI_IS_BOOTTBL_MODE(options) \
737              (((options) & BOOT_PARAMS_SPI_OPTIONS_MASK) == BOOT_PARAMS_SPI_OPTIONS_BT)
738              
739      #define BOOT_PARAMS_SPI_IS_BOOTCONFIG_MODE(options) \
740              (((options) & BOOT_PARAMS_SPI_OPTIONS_MASK) == BOOT_PARAMS_SPI_OPTIONS_BC)
741              
742      #define BOOT_PARAMS_SPI_IS_BOOTPARAM_MODE(options) \
743              (((options) & BOOT_PARAMS_SPI_OPTIONS_MASK) == BOOT_PARAMS_SPI_OPTIONS_BP)
744              
745      #define BOOT_PARAMS_SPI_IS_GPHDR_MODE(options) \
746              (((options) & BOOT_PARAMS_SPI_OPTIONS_MASK) == BOOT_PARAMS_SPI_OPTIONS_GPHDR)
747              
748              
749      #define BOOT_PARAMS_SPI_SET_BOOTTBL_MODE(options, mode)               \
750              (options) = ((options) & ~BOOT_PARAMS_SPI_OPTIONS_MASK) |     \
751                          (((mode)   &  BOOT_PARAMS_SPI_OPTIONS_MASK) <<    \
752                                        BOOT_PARAMS_SPI_OPTIONS_SHIFT)
753              
754              
755      UINT16 addrWidth;          /* 16 or 24 are the only valid values */
756      UINT16 nPins;              /* 4 or 5 pins are the only valid values */
757      UINT16 csel;               /* only values 0b10 (cs0 low) or 0b01 (cs1 low) are valid */
758      UINT16 mode;               /* Clock phase/polarity. These are the standard SPI modes 0-3 */
759      UINT16 c2tdelay;           /* Setup time between chip select assert and the transaction */
760      
761      UINT16 cpuFreqMhz;         /* Speed the CPU is running after PLL configuration */
762      UINT16 busFreqMhz;         /* The speed of the SPI bus, the megahertz portion */
763      UINT16 busFreqKhz;         /* The KHz portion of the bus frequency. A frequency of 1.5 MHz would have the value 5 here */
764      
765      UINT16 read_addr_msw;      /* The base address to read from the SPI, upper 16 bits */
766      UINT16 read_addr_lsw;      /* The base address to read from the SPI, lower 16 bits */
767      
768      UINT16 next_csel;          /* The next chip select to use if in boot config mode, when the config is complete */
769      UINT16 next_read_addr_msw; /* The next read address to use if in boot config mode */
770      UINT16 next_read_addr_lsw; /* The next read address to use if in boot config mode */
771              
772 } BOOT_PARAMS_SPI_T;             
774 typedef struct boot_params_sleep_s
776     /* common portion of the Boot parameters */
777     UINT16 length;
778     UINT16 checksum;
779     UINT16 boot_mode;
780     UINT16 portNum;
781     UINT16 swPllCfg_msw;  /* CPU PLL configuration, MSW */
782     UINT16 swPllCfg_lsw;  /* CPU PLL configuration, LSW */
783     
784     UINT16 options;
785     
786 } BOOT_PARAMS_SLEEP_T;
788 typedef struct boot_params_uart_s
790     /* common portion of the Boot parameters */
791     UINT16 length;
792     UINT16 checksum;
793     UINT16 boot_mode;
794     UINT16 portNum;
795     UINT16 swPllCfg_msw;  /* CPU PLL configuration, MSW */
796     UINT16 swPllCfg_lsw;  /* CPU PLL configuration, LSW */
797     
798     UINT16 options;
799     
800     UINT16 bootDataFormat;
801     #define BOOT_PARAMS_UART_DATA_FORMAT_BLOB   0
802     #define BOOT_PARAMS_UART_DATA_FORMAT_BTBL   1
803     
804     UINT16 protocol;
805     #define BOOT_PARAMS_UART_PROTOCOL_XMODEM    0
806     
807     UINT16 initialNackCount;        /* Number of nacks to send at start before giving up */
808     UINT16 maxErrCount;             /* Max number of consecutive receive errors          */
809     
810     UINT16 nackTimeoutSec;          /* Number of seconds for a nack timeout */
811     UINT16 charTimeoutMsec;         /* Inter-character timeout, milli-seconds */
812     
813     UINT16 nDataBits;               /* Number of data bits, currently only 8 supported */
814     UINT16 parity;
815     #define BOOT_PARAMS_UART_PARITY_NONE  0
816     #define BOOT_PARAMS_UART_PARITY_ODD   1
817     #define BOOT_PARAMS_UART_PARITY_EVEN  2
818     UINT16 nStopBitsx2;             /* Number of stop bits x2. Valid values are 2, 3, and 4 for 1, 1.5 and 2 stop bits */
819     UINT16 overSampleFactor;        /* Valid values are 13 and 16 times oversampling */
820     
821     UINT16 flowControl;
822     #define BOOT_PARAMS_FLOW_CONTROL_NONE       0
823     #define BOOT_PARAMS_FLOW_CONTROL_RTS_CTS    1
824     
825     UINT16 dataRateMsw;             /* Baud rate, MSW */
826     UINT16 dataRateLsw;             /* Baud rate, LSW */
827     
828     UINT16 timerRefMhz;             /* Timer referecnce frequency in MHz */
829     
830 } BOOT_PARAMS_UART_T;
831     
834 /*
835  * UNION of boot parameter structures in all modes
836  * Note: We need to make sure that the structures genertaed by the C-compiler
837  *       match with the boot parameter table data format i.e. a set of 16-bit
838  *       data array.
839  */ 
840 #define BOOT_PARAMS_SIZE_IN_BYTES       128
841 typedef union {
842    BOOT_PARAMS_COMMON_T          common;  
843    BOOT_PARAMS_ETHERNET_T        eth;
844    BOOT_PARAMS_BOOTP_ETHERNET_T  ethBootp;
845    BOOT_PARAMS_NAND_T            nand;
846    BOOT_PARAMS_I2C_T             i2c;
847    BOOT_PARAMS_UTOPIA_T          utopia;
848    BOOT_PARAMS_RIO_T             rio;
849    BOOT_PARAMS_PCIE_T            pcie;
850    BOOT_PARAMS_EMIF_T            emif;
851    BOOT_PARAMS_VUSR_T            vusr;
852    BOOT_PARAMS_SPI_T             spi;
853    BOOT_PARAMS_SLEEP_T           sleep;
854    BOOT_PARAMS_UART_T            uart;
855    UINT16                        parameter[BOOT_PARAMS_SIZE_IN_BYTES/2]; 
856 } BOOT_PARAMS_T;
859 /*******************************************************************************
860  * Definition: The time stamp and version number are placed into the stats. 
861  *             This will be two characters packed per 16bits . The length
862  *             value must be 32 bit divisible
863  *******************************************************************************/
864 #define BOOT_VERSION_LEN_UINT16    32 
865 typedef struct BOOT_VERSION_S {
867   UINT16 vstring[BOOT_VERSION_LEN_UINT16];
868   
869 } BOOT_VERSION_T;
870 extern BOOT_VERSION_T bootVersion;
871   
873 /*******************************************************************************
874  * Definition: Runs time stats that are not initialized on cold boot entry
875  *   !!!!!! boot.s assumes that the nonInit stats are at the top of the structure
876  *   !!!!!! and that stage is the first element
877  *******************************************************************************/
878 typedef struct BOOT_STATS_NONINIT_S {
879   UINT16  stage;            /* Record the SharedROM code execution stage */
880   #define BOOT_STAGE_ASM_START_UP               1
881   #define BOOT_STAGE_INIT_CACHE                 2
882   #define BOOT_STAGE_CHCHE_INITED               3
883   #define BOOT_STAGE_ENTER_WARMBOOT             4
884   #define BOOT_STAGE_INIT_CPGMAC                5
885   #define BOOT_STAGE_SEND_ERA_FRAME             6
886   #define BOOT_STAGE_ETH_MAIN_LOOP              7
887   #define BOOT_STAGE_I2C_BOOTTBL_LOOP           8
888   #define BOOT_STAGE_I2C_BOOTPARAM_LOOP         9
889   #define BOOT_STAGE_DISABLE_CACHE             10
890   #define BOOT_STAGE_CHCHE_DISABLED            11
891   #define BOOT_STAGE_EXIT                      12
892   #define BOOT_STAGE_ERROR_LOOP                13  
893   #define BOOT_STAGE_I2C_BOOTCONFIG_LOOP       14
894   #define BOOT_STAGE_I2C_SLV_RCV_OPTIONS_LOOP  15
895   #define BOOT_STAGE_UTOPIA_MAIN_LOOP          16
896   UINT16  coldBootEntries;
897   
898 } BOOT_STATS_NONINIT_T;
900 /*******************************************************************************
901  * Definition: Run time statistics and error counts. These stats are 
902  *             initialized on cold boot entry.
903  ******************************************************************************/
904  
905 typedef struct BOOT_STATS_COMMON_S  {
906   UINT32    bootStatus;
907   UINT16    nColdBootEntries;
908   UINT16    nBootReentries;
909   UINT16    nPllWarns;
910   UINT16    nResetWarns;
911 } BOOT_STATS_COMMON_T;
912  
913  
914 typedef struct BOOT_STATS_MAIN_S {
915   UINT16  errorCode;        /* (module ID <<8 ) + module specific error */
916   
917   /* I2C operation related statistics */
918   UINT16  numI2Cpkts;       /* number of I2C boot table packets processed */
919   UINT16  numI2CchksumError;/* number of I2C checksum errors */
920   UINT16  numI2ClengthError;/* number of I2C block length errors */
921   UINT16  numI2CotherError; /* number of I2C section with invalid length and etc */
922   UINT16  numI2Cretrys;     /* number of I2C retrys due to read access errors */
923   UINT16  numI2cWrites;     /* number of I2C master writes to passive devices */
924   UINT16  numI2cWriteError; /* number of I2C master write errors              */
925   
926   UINT16  warmBootEntry;    /* Count of entries into warm boot routine   */
927 } BOOT_STATS_MAIN_T;
931 /*****************************************************************************
932  * Definition: I2C stats, Boot table and Ethernrt stats initialized 
933  *             on cold boot entry
934  *****************************************************************************/
935 typedef struct I2C_STATS_tag
937     UINT16      num_trans;
938     UINT16      num_trys;
939     UINT16      num_try_ok;
940     UINT16      num_try_lost_arb;
941     UINT16      num_try_idle_to;
942     UINT16      num_try_no_ack;
943     UINT16      num_try_other_err;
944     UINT32      extra_idle_waits;
945     UINT32      extra_clock_waits;
946     UINT32      tx_bytes;
947     UINT32      rx_bytes;
948     UINT32      data_re_reads;
949 } I2C_STATS_T;
951 typedef struct BTBL_STATS_tag
953   UINT16  num_sections;     /* number of boot table sections received */
954   UINT16  num_pdma_copies;  /* number of PDMA copies performed */
955 } BTBL_STATS_T;
957 typedef struct ETH_STATS_tag
959   /* MAC packets related statistics */
960   UINT16  uniMacPkts;       /* Count of packets received with valid unicast mac 
961                                address   */
962   UINT16  multiMacPkts;     /* Count of packets received with valid multicast or
963                                broadcast mac address   */
964   UINT16  invalidMacPkts;   /* Count of packets received with invalid mac 
965                                address   */
966   UINT16  invalidLLCPkts;   /* Count of 802.3 packets with wrong LLC/SNAP header */
967   UINT16  nonIpPkts;        /* Count of non-IP packets received with valid 
968                                MAC address   */
969                                
970   /* IP packets related statistics */                             
971   UINT16  nEra;             /* Number of ERA packets transmitted */
972   UINT16  nonIP4Pkts;       /* Count of non-IP4 packets        */
973   UINT16  ipfragments;      /* Count of IP fragments received      */
974   UINT16  ipTruncatedError; /* Count of truncated IP frame */
975   UINT16  nonUDPPkts;       /* Count of IP packets with non-UDP paylaod  */
976   
977   /* UDP packets related statistics */
978   UINT16  udpSizeError;     /* Count of UDP packet with invalid (odd) size */
979   UINT16  udpPortError;     /* Count of UDP packets with invalid port number */
980   UINT16  udpChksumError;   /* Count of UDP packets with checksum error */
981   
982   /* Boot table packets related statistics */
983   UINT16  nonBtblPkts;      /* Count of UDP packets with invalid boot table paylaod */
984   UINT16  outSeqPkts;       /* Count of out of sequence boot table packets received       
985                                i.e. packets with unexpected seq_num      */
986   UINT16  expSeqNum;        /* Expected Sequence Number */
987   UINT16  lastSeqNum;       /* Last sequence number received */                             
989   /* Driver errors */
990   UINT16  sizeZeroPackets;  /* Count of packets arriving with 0 size */
991 } ETH_STATS_T;
993 typedef struct PCI_EEAI_STATS_tag
995   UINT16  pciI2cReads;         /* Count of block reads of i2c eeprom */
996   UINT16  pciI2cRetries;       /* Count of i2c read retries          */
997   UINT16  pciChkSumErr;        /* Count of block check sum errors    */
998   UINT16  pciEeaiFail;         /* Count of aborted pci attempts      */
999 } PCI_EEAI_STATS_T;
1001 /* Rapid I/O stats */
1002 typedef struct RAPIDIO_STATS_tag
1004   UINT16 rapidIoFailReady;     /* If set rapid I/O peripheral failed to report ready */
1005   UINT16 rapidIoBtblBlocks;    /* Count of number of boot table blocks received */
1006   UINT16 rapidIoBtblBadBlocks; /* Count of boot table blocks rejected */
1007   UINT16 rapidIoDescrEmpty;    /* Count of times ROM found rx descriptor queue empty */
1008 } RAPIDIO_STATS_T;
1010 typedef struct HPI_STATS_Tag
1012   UINT16 hpiBtblBlocks;        /* Count of boot table blocks received */
1013   UINT16 hpiBtblBadBlocks;     /* Count of boot table blocks rejected */
1014 } HPI_STATS_T;
1016 /* Utopia stats */
1017 typedef struct UTOPIA_STATS_tag
1019   UINT16 cellCount;            /* Count of cells received   */
1020   UINT16 invalidPtr;           /* Count of invalid pointers received in processing */
1021   UINT16 invalidSize;          /* Count of cells that were too small               */
1022   UINT16 cellMagicCount;       /* Count of cells received with valid magic         */
1023   UINT16 cellMagicFailed;      /* Count of cells received with invalid magic       */
1024   UINT16 trapNoCellMem;        /* Trapped due to no cell space in memory           */
1025   UINT16 possibleOverrun;      /* Count of possible cell buffer overruns           */
1026 } UTOPIA_STATS_T;
1028 /* Ethernet bootp stats */
1029 typedef struct ETH_BP_STATS_tag
1031     UINT16 rxCount;
1032     UINT16 bootpTimeout;
1033     UINT16 tftpAckTimeout;
1034     UINT16 downloadTimeout;
1035 } ETH_BP_STATS_T;
1037 /*******************************************************************************
1038  * Definition: The statistics
1039  *
1040  *   !!!!!! boot.s assumes that the nonInit stats are at the top of the structure!
1041  *******************************************************************************/
1042 typedef struct BOOT_STATS_S {
1044  BOOT_STATS_COMMON_T   common;
1045  BOOT_STATS_NONINIT_T  nonInit;
1046  BOOT_STATS_MAIN_T     main;
1047  I2C_STATS_T           i2c;
1048  BTBL_STATS_T          btbl;
1049  union  {
1050    ETH_STATS_T           eth;
1051    ETH_BP_STATS_T        ethBp;
1052    PCI_EEAI_STATS_T      pci_eeai;
1053    RAPIDIO_STATS_T       rapidIo;
1054    UTOPIA_STATS_T        utopia;
1055    HPI_STATS_T           hpi;
1056  } u;
1057 } BOOT_STATS_T;
1059 extern BOOT_STATS_T bootStats;
1061 /*******************************************************************************
1062  * Definition: The magic start address, known to all modules
1063  *******************************************************************************/
1064 extern volatile UINT32 *p_boot_entry_addr;
1067 /*******************************************************************************
1068  * Emif4 (DDR3) configuration table
1069  *******************************************************************************/
1070 typedef struct bootEmif4Tbl_s  {
1072     UINT32  configSelect_msw;               /* Bit map defining which registers to set */
1073     UINT32  configSelect_slsw;              /* Bit map defining which registers to set */
1074     UINT32  configSelect_lsw;               /* Bit map defining which registers to set */
1075     
1076     UINT32  pllPrediv;                      /* Values of all 0s will disable the pll */
1077     UINT32  pllMult;
1078     UINT32  pllPostDiv;
1080     UINT32  sdRamConfig;                /* Controlled by bit 1 of configSelect_msw */
1081     UINT32  sdRamConfig2;               /* Bit 2 */
1082     UINT32  sdRamRefreshCtl;            /* Bit 3 */
1083     UINT32  sdRamTiming1;               /* Bit 4 */
1084     UINT32  sdRamTiming2;               /* Bit 5 */
1085     UINT32  sdRamTiming3;               /* Bit 6 */
1086     UINT32  lpDdrNvmTiming;             /* Bit 7 */
1087     UINT32  powerManageCtl;             /* Bit 8 */
1088     UINT32  iODFTTestLogic;             /* Bit 9 */
1089     UINT32  performCountCfg;            /* Bit 10 */
1090     UINT32  performCountMstRegSel;      /* Bit 11 */
1091     UINT32  readIdleCtl;                /* Bit 12 */
1092     UINT32  sysVbusmIntEnSet;           /* Bit 13 */
1093     UINT32  sdRamOutImpdedCalCfg;       /* Bit 14 */
1094     UINT32  tempAlterCfg;               /* Bit 15 */
1095     UINT32  ddrPhyCtl1;                 /* Bit 16 */
1096     UINT32  ddrPhyCtl2;                 /* Bit 17 */
1097     UINT32  priClassSvceMap;            /* Bit 18 */
1098     UINT32  mstId2ClsSvce1Map;          /* Bit 19 */
1099     UINT32  mstId2ClsSvce2Map;          /* Bit 20 */
1100     UINT32  eccCtl;                     /* Bit 21 */
1101     UINT32  eccRange1;                  /* Bit 22 */
1102     UINT32  eccRange2;                  /* Bit 23 */
1103     UINT32  rdWrtExcThresh;             /* Bit 24 */
1104     
1105     UINT32 chipConfig[64];
1106     
1107 } BOOT_EMIF4_TBL_T;
1109 #define BOOT_EMIF4_ENABLE_MSW_pllCtl                      (1 <<  0)  
1111 #define BOOT_EMIF4_ENABLE_MSW_sdRamConfig                 (1 <<  1)
1112 #define BOOT_EMIF4_ENABLE_MSW_sdRamConfig2                (1 <<  2)
1113 #define BOOT_EMIF4_ENABLE_MSW_sdRamRefreshCtl             (1 <<  3)
1114 #define BOOT_EMIF4_ENABLE_MSW_sdRamTiming1                (1 <<  4)
1115 #define BOOT_EMIF4_ENABLE_MSW_sdRamTiming2                (1 <<  5)
1116 #define BOOT_EMIF4_ENABLE_MSW_sdRamTiming3                (1 <<  6)
1117 #define BOOT_EMIF4_ENABLE_MSW_lpDdrNvmTiming              (1 <<  7)
1118 #define BOOT_EMIF4_ENABLE_MSW_powerManageCtl              (1 <<  8)
1119 #define BOOT_EMIF4_ENABLE_MSW_iODFTTestLogic              (1 <<  9)
1120 #define BOOT_EMIF4_ENABLE_MSW_performCountCfg             (1 << 10)
1121 #define BOOT_EMIF4_ENABLE_MSW_performCountMstRegSel       (1 << 11)
1122 #define BOOT_EMIF4_ENABLE_MSW_readIdleCtl                 (1 << 12)
1123 #define BOOT_EMIF4_ENABLE_MSW_sysVbusmIntEnSet            (1 << 13)
1124 #define BOOT_EMIF4_ENABLE_MSW_sdRamOutImpdedCalCfg        (1 << 14)
1125 #define BOOT_EMIF4_ENABLE_MSW_tempAlterCfg                (1 << 15)
1126 #define BOOT_EMIF4_ENABLE_MSW_ddrPhyCtl1                  (1 << 16)
1127 #define BOOT_EMIF4_ENABLE_MSW_ddrPhyCtl2                  (1 << 17)
1128 #define BOOT_EMIF4_ENABLE_MSW_priClassSvceMap             (1 << 18)
1129 #define BOOT_EMIF4_ENABLE_MSW_mstId2ClsSvce1Map           (1 << 19)
1130 #define BOOT_EMIF4_ENABLE_MSW_mstId2ClsSvce2Map           (1 << 20)
1131 #define BOOT_EMIF4_ENABLE_MSW_eccCtl                      (1 << 21)
1132 #define BOOT_EMIF4_ENABLE_MSW_eccRange1                   (1 << 22)
1133 #define BOOT_EMIF4_ENABLE_MSW_eccRange2                   (1 << 23)
1134 #define BOOT_EMIF4_ENABLE_MSW_rdWrtExcThresh              (1 << 24)
1137 #define BOOT_EMIF_ENABLE_SLSW_config0                      (1 <<  0)
1138 #define BOOT_EMIF_ENABLE_SLSW_config1                      (1 <<  1)
1139 #define BOOT_EMIF_ENABLE_SLSW_config2                      (1 <<  2)
1140 #define BOOT_EMIF_ENABLE_SLSW_config3                      (1 <<  3)
1141 #define BOOT_EMIF_ENABLE_SLSW_config4                      (1 <<  4)
1142 #define BOOT_EMIF_ENABLE_SLSW_config5                      (1 <<  5)
1143 #define BOOT_EMIF_ENABLE_SLSW_config6                      (1 <<  6)
1144 #define BOOT_EMIF_ENABLE_SLSW_config7                      (1 <<  7)
1145 #define BOOT_EMIF_ENABLE_SLSW_config8                      (1 <<  8)
1146 #define BOOT_EMIF_ENABLE_SLSW_config9                      (1 <<  9)
1147 #define BOOT_EMIF_ENABLE_SLSW_config10                     (1 << 10)
1148 #define BOOT_EMIF_ENABLE_SLSW_config11                     (1 << 11)
1149 #define BOOT_EMIF_ENABLE_SLSW_config12                     (1 << 12)
1150 #define BOOT_EMIF_ENABLE_SLSW_config13                     (1 << 13)
1151 #define BOOT_EMIF_ENABLE_SLSW_config14                     (1 << 14)
1152 #define BOOT_EMIF_ENABLE_SLSW_config15                     (1 << 15)
1153 #define BOOT_EMIF_ENABLE_SLSW_config16                     (1 << 16)
1154 #define BOOT_EMIF_ENABLE_SLSW_config17                     (1 << 17)
1155 #define BOOT_EMIF_ENABLE_SLSW_config18                     (1 << 18)
1156 #define BOOT_EMIF_ENABLE_SLSW_config19                     (1 << 19)
1157 #define BOOT_EMIF_ENABLE_SLSW_config20                     (1 << 20)
1158 #define BOOT_EMIF_ENABLE_SLSW_config21                     (1 << 21)
1159 #define BOOT_EMIF_ENABLE_SLSW_config22                     (1 << 22)
1160 #define BOOT_EMIF_ENABLE_SLSW_config23                     (1 << 23)
1161 #define BOOT_EMIF_ENABLE_SLSW_config24                     (1 << 24)
1162 #define BOOT_EMIF_ENABLE_SLSW_config25                     (1 << 25)
1163 #define BOOT_EMIF_ENABLE_SLSW_config26                     (1 << 26)
1164 #define BOOT_EMIF_ENABLE_SLSW_config27                     (1 << 27)
1165 #define BOOT_EMIF_ENABLE_SLSW_config28                     (1 << 28)
1166 #define BOOT_EMIF_ENABLE_SLSW_config29                     (1 << 29)
1167 #define BOOT_EMIF_ENABLE_SLSW_config30                     (1 << 30)
1168 #define BOOT_EMIF_ENABLE_SLSW_config31                     (1u << 31)
1171 #define BOOT_EMIF_ENABLE_LSW_config32                    (1 <<  0)
1172 #define BOOT_EMIF_ENABLE_LSW_config33                    (1 <<  1)
1173 #define BOOT_EMIF_ENABLE_LSW_config34                    (1 <<  2)
1174 #define BOOT_EMIF_ENABLE_LSW_config35                    (1 <<  3)
1175 #define BOOT_EMIF_ENABLE_LSW_config36                    (1 <<  4)
1176 #define BOOT_EMIF_ENABLE_LSW_config37                    (1 <<  5)
1177 #define BOOT_EMIF_ENABLE_LSW_config38                    (1 <<  6)
1178 #define BOOT_EMIF_ENABLE_LSW_config39                    (1 <<  7)
1179 #define BOOT_EMIF_ENABLE_LSW_config40                    (1 <<  8)
1180 #define BOOT_EMIF_ENABLE_LSW_config41                    (1 <<  9)
1181 #define BOOT_EMIF_ENABLE_LSW_config42                    (1 <<  10)
1182 #define BOOT_EMIF_ENABLE_LSW_config43                    (1 <<  11)
1183 #define BOOT_EMIF_ENABLE_LSW_config44                    (1 <<  12)
1184 #define BOOT_EMIF_ENABLE_LSW_config45                    (1 <<  13)
1185 #define BOOT_EMIF_ENABLE_LSW_config46                    (1 <<  14)
1186 #define BOOT_EMIF_ENABLE_LSW_config47                    (1 <<  15)
1187 #define BOOT_EMIF_ENABLE_LSW_config48                    (1 <<  16)
1188 #define BOOT_EMIF_ENABLE_LSW_config49                    (1 <<  17)
1189 #define BOOT_EMIF_ENABLE_LSW_config50                    (1 <<  18)
1190 #define BOOT_EMIF_ENABLE_LSW_config51                    (1 <<  19)
1191 #define BOOT_EMIF_ENABLE_LSW_config52                    (1 <<  20)
1192 #define BOOT_EMIF_ENABLE_LSW_config53                    (1 <<  21)
1193 #define BOOT_EMIF_ENABLE_LSW_config54                    (1 <<  22)
1194 #define BOOT_EMIF_ENABLE_LSW_config55                    (1 <<  23)
1195 #define BOOT_EMIF_ENABLE_LSW_config56                    (1 <<  24)
1196 #define BOOT_EMIF_ENABLE_LSW_config57                    (1 <<  25)
1197 #define BOOT_EMIF_ENABLE_LSW_config58                    (1 <<  26)
1198 #define BOOT_EMIF_ENABLE_LSW_config59                    (1 <<  27)
1199 #define BOOT_EMIF_ENABLE_LSW_config60                    (1 <<  28)
1200 #define BOOT_EMIF_ENABLE_LSW_config61                    (1 <<  29)
1201 #define BOOT_EMIF_ENABLE_LSW_config62                    (1 <<  30)
1202 #define BOOT_EMIF_ENABLE_LSW_config63                    (1u <<  31)
1205 #define BOOT_EMIF4_ENABLE_ALL_MSW                     0x01ffffff
1206 #define BOOT_EMIF4_ENABLE_ALL_SLSW                    0xffffffff
1207 #define BOOT_EMIF4_ENABLE_ALL_LSW                     0xffffffff
1208     
1209     
1210     
1211     
1212 /* Hibernation function control */    
1213 #define TIBOOT_CTL_HIBERNATION_MODE1        1
1214 #define TIBOOT_CTL_HIBERNATION_MODE2        2
1217 /* Hibernation function return */
1218 #define TIBOOT_ERR_HIBERNATION_MODE_INVALID     -1
1219 #define TIBOOT_ERR_HIBERNATION_ADDR_MISALIGNED  -2
1220 #define TIBOOT_ERR_HIBERNATION_ADDR_INVALID     -3
1222 /* Boot mode values */
1223 #define BOOT_MODE_I2C               40
1224 #define BOOT_MODE_SPI               50
1226 /* ROM boot loader enter address */
1227 #define BOOT_ROM_ENTER_ADDRESS      0x20b00000
1230 #endif  /* __TIBOOT_H__ */
1232 /* nothing past this point */