Merge pull request #3 in PROCESSOR-SDK/ibl from PRSDK-5675 to master
[keystone-rtos/ibl.git] / src / device / c66x / tiboot_c66x.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 */
37 #ifndef __TIBOOT_H__
38 #define __TIBOOT_H__
40 #include "types.h"
42 /*******************************************************************************
43  * Utility Macro definitions
44  ******************************************************************************/
45 #define HEX_DIGIT(digit)        ((digit) + '0')
46 #define BOOT_BIT_TO_MASK(bit)   (1 << (bit))
48 /*******************************************************************************
49  * Data Definition: Error Handling relatBOOT_ENTRY_POINT_ADDRed definition:
50  *******************************************************************************
51  * Description: Define Handling related macros, constants
52  *
53  ******************************************************************************/
54 /* Define Module IDs */
55 #define BOOT_MODULE_ID_MAIN         0
56 #define BOOT_MODULE_ID_BTBL         1
57 #define BOOT_MODULE_ID_BETH         2
58 #define BOOT_MODULE_ID_I2C          3
59 #define BOOT_MODULE_ID_CHIP         4
60 #define BOOT_MODULE_ID_HW           5
62 /* Boot error codes */
63 enum {
64   BOOT_NOERR                = 0,
65   BOOT_GEN_ERROR            = 1,    /* General error */
66   BOOT_INVALID_BOOT_MODE    = 2,
67   BOOT_INVALID_I2C_DEV_ADDR = 3,
68   BOOT_INVALID_CHECKSUM     = 4,    /* Invalid checksum of the boot parameters */
69   BOOT_INVALID_PARAMS_SIZE  = 5,    /* the size of boot parameters is too big */
70   BOOT_RX_ETH_QUEUE_FULL    = 6,    /* ethmain.c, hw_rxPacket */
71   BOOT_CACHE_INIT_FAIL      = 7,    /* rmain.c, cache init failed */
72   BOOT_CACHE_DISABLE_FAIL   = 8,    /* rmain.c, cache disable failed */
73   BOOT_INVALID_CPPI_SIZE    = 9,    /* ethmain.c, invalid compile sizes */
74   BOOT_INVALID_CORE_ID      = 10,   /* Invalid core ID in cold boot */
75   BOOT_INVALID_MAC_ADDR     = 11,   /* Invalid MAC address (all 0's) */
76   BOOT_ETH_TX_SCRATCH       = 12,   /* tx scratch size invalid */
77   BOOT_ETH_TX_PACKET        = 13,   /* tx packet formation failure */
78   BOOT_ETH_MAC_INIT         = 14,   /* ethmain.c - mac init failed */
79   BOOT_PERIPH_POWER         = 15,   /* peripheral failed to powerup */
80   BOOT_MAIN_FAIL            = 16,   /* Failed in initial boot setup (wrong core) */
81   BOOT_SK_REGISTERSCWP      = 17,   /* Failed at SK_registerSCWP */
82   BOOT_SK_ALLOCSC           = 18,   /* Failed at SK_allocSC */
83   BOOT_CPSGMII_CONFIGINDEX  = 19,   /* Failed at wrong CPSGMII config index */
84   BOOT_SRIO_CONFIGINDEX     = 20,   /* Failed at wrong SRIO config index */
85   BOOT_RETURN_FROM_CHAIN    = 21,   /* Code returned from boot main chaining, should never happen */
86   BOOT_INVALID_HIB_ADDR     = 22    /* Invalid hibernation return address */
87 };
89 /* Error tracking prototypes (functions in rmain.c)*/
90 void bootException (UINT16 errorCode);
91 void bootError (UINT16 errorCode);
93 /* Error code = (module ID *  100) + module specific error */
94 #define BOOT_ERROR_CODE(id, code)     ((UINT16)((id<<8) + code))
95 #define BOOT_EXCEPTION(error_code)     bootException(error_code)
96 #define BOOT_ERROR(error_code)         bootError(error_code)
98 /*******************************************************************************
99  * Begin Boot Parameter definitions
100  ******************************************************************************/
102 /*******************************************************************************
103  * Boot Parameter Common
104  ******************************************************************************/
105 typedef struct boot_params_common_s{
106    UINT16 length;       /* size of the entire boot parameters in bytes */
107    UINT16 checksum;     /* non-zero: 1's complement checksum of the boot
108                          *           parameters
109                          * zero: checksum is not applicable
110                          */
111    UINT16 boot_mode;
112    UINT16 portNum;
113    UINT16 swPllCfg_msw;  /* CPU PLL configuration, MSW */
114    UINT16 swPllCfg_lsw;  /* CPU PLL configuration, LSW */
116    /*                                swPllCfg
117     *
118     *   /----------------------------------------------------------------\
119     *   |   31        30   | 29        16 | 15          8 | 7          0 |
120     *   |      PLL Ctl     |  multiplier  |  pre-divider  | post divider |
121     *   \----------------------------------------------------------------/
122     */
124 #define BOOT_PARAMS_PLL_CFG_CTL_MASK                0xc000
125 #define BOOT_PARAMS_PLL_CFG_CTL_SHIFT               14
127 #define BOOT_PARAMS_PLL_CFG_CTL_NO_INIT             0       /* Pll is not initialized */
128 #define BOOT_PARAMS_PLL_CFG_CTL_INIT_CONDITIONAL    1       /* Initialize only if PLL is currently disabled or in bypass */
129 #define BOOT_PARAMS_PLL_CFG_CTL_INIT                2       /* Initialize PLL regardless of current PLL state */
130 #define BOOT_PARAMS_PLL_CFG_CTL_BYPASS              3       /* Put the PLL into bypass  */
133 #define BOOT_PARAMS_PLL_CFG_MSW_MULT_MASK     0x3fff
134 #define BOOT_PARAMS_PLL_CFG_MSW_MULT_SHIFT    0
136 #define BOOT_PARAMS_PLL_CFG_LSW_PREDIV_MASK   0xff00
137 #define BOOT_PARAMS_PLL_CFG_LSW_PREDIV_SHIFT  8
139 #define BOOT_PARAMS_PLL_CFG_LSW_POSTDIV_MASK  0x00ff
140 #define BOOT_PARAMS_PLL_CFG_LSW_POSTDIV_SHIFT 0
142 } BOOT_PARAMS_COMMON_T;
144 typedef struct boot_params_ethernet_s{
146     /* common portion of the Boot parameters */
147     UINT16 length;
148     UINT16 checksum;
149     UINT16 boot_mode;
150     UINT16 portNum;
151     UINT16 swPllCfg_msw;  /* CPU PLL configuration, MSW */
152     UINT16 swPllCfg_lsw;  /* CPU PLL configuration, LSW */
154     /* Etherent specific portion of the Boot Parameters */
155     UINT16 options;
156     /*
157      * Ethernet Specific Options
158      *
159      * Bits 2:0 interface
160      *      000 - MII
161      *      001 - RMII
162      *      010 - GMII
163      *      011 - RGMII
164      *      100 - SMII
165      *      101 - S3MII
166      *      110 - RMII 10Mbs
167      *      111 - RMII 100Mbs
168      *
169      * Bit 3: HD:
170      *        0 - Full Duplex
171      *        1 - Half Duplex
172      * Bit 4: SKIP TX
173      *        0 - Send the Ethernet Ready Frame
174      *        1 - Skip sending the Ethernet Ready Frame
175      * Bits 6:5 - Ethernet Initialization
176      *      00 - Entire system configured
177      *      01 - No initialization of peripherals that are already enabled and running
178      *      10 - Reserved
179      *      11 - No initialization at all
180      *
181      * Other bits:  Reserved
182      */
183      #define BOOT_PARAMS_ETH_OPTIONS_MII        0x0000
184      #define BOOT_PARAMS_ETH_OPTIONS_RMII       0x0001
185      #define BOOT_PARAMS_ETH_OPTIONS_GMII       0x0002
186      #define BOOT_PARAMS_ETH_OPTIONS_RGMII      0x0003
187      #define BOOT_PARAMS_ETH_OPTIONS_SMII       0x0004
188      #define BOOT_PARAMS_ETH_OPTIONS_S3MII      0x0005
189      #define BOOT_PARAMS_ETH_OPTIONS_RMII_10    0x0006
190      #define BOOT_PARAMS_ETH_OPTIONS_RMII_100   0x0007
192         /* Faraday only supports SGMII */
193      #define BOOT_PARAMS_ETH_OPTIONS_SGMII      0x0006
195      #define BOOT_PARAMS_ETH_OPTIONS_HD         0x0008
196      #define BOOT_PARAMS_ETH_OPTIONS_SKIP_TX    0x0010
198      #define BOOT_PARAMS_ETH_OPTIONS_INIT_MASK  0x0060
199      #define BOOT_PARAMS_ETH_OPTIONS_INIT_SHIFT 5
200      #define BOOT_PARAMS_ETH_OPTIONS_INIT(x)    (((x) & BOOT_PARAMS_ETH_OPTIONS_INIT_MASK) >> BOOT_PARAMS_ETH_OPTIONS_INIT_SHIFT)
202      #define BOOT_PARAMS_ETH_OPTIONS_INIT_FULL      0
203      #define BOOT_PARAMS_ETH_OPTIONS_INIT_PARTIAL   1
204      #define BOOT_PARAMS_ETH_OPTIONS_INIT_NONE      3
206      /*
207       * he device MAC address to be used for Boot:
208       * All zero mac address indicates that the device E-fuse address should
209       *  be used.
210       */
211      UINT16 mac_addr_h;
212      UINT16 mac_addr_m;
213      UINT16 mac_addr_l;
215      /*
216       * The multicast or broadcast MAC address which should be accepted as
217       * a destination MAC address for boot table frames
218       */
219      UINT16 mmac_addr_h;
220      UINT16 mmac_addr_m;
221      UINT16 mmac_addr_l;
223      UINT16 src_port;     /* Source UDP port number to be used during boot process */
224                           /* 0: allow any SRC UDP port */
225      UINT16 dest_port;    /* Destination UDP port number to be used during boot process */
227      /* The Device ID to be included in the boot ready announcement frame */
228      UINT16 device_id_12;
229      UINT16 device_id_34;
230      #define BOOT_PARAMS_DEVICE_ID_HIGH_MASK     0xFF00
231      #define BOOT_PARAMS_DEVICE_ID_HIGH_SHIFT    8
232      #define BOOT_PARAMS_DEVICE_ID_LOW_MASK      0x00FF
233      #define BOOT_PARAMS_DEVICE_ID_LOW_SHIFT     0
234      #define BOOT_PARAMS_GET_DEVICE_ID_13(device_id)    \
235                (((device_id) & BOOT_PARAMS_DEVICE_ID_HIGH_MASK) > BOOT_PARAMS_DEVICE_ID_HIGH_SHIFT)
236      #define BOOT_PARAMS_GET_DEVICE_ID_24(device_id)    \
237                (((device_id) & BOOT_PARAMS_DEVICE_ID_LOW_MASK) > BOOT_PARAMS_DEVICE_ID_LOW_SHIFT)
239      /*
240       * The destination MAC address used for the boot ready announce frame
241       */
242      UINT16 hmac_addr_h;
243      UINT16 hmac_addr_m;
244      UINT16 hmac_addr_l;
246          /*
247       * The CPSGMII configurations for Faraday
248       */
250      UINT16 sgmiiConfig;
252      #define BOOT_PARAMS_SGMII_CONFIG_INDEX_MASK     0x0F     /* bit 3 to 0 is index */
253      #define BOOT_PARAMS_SGMII_CONFIG_DIRECT_CONFIG  (1<<4)   /* set to use direct configurations */
254      #define BOOT_PARAMS_SGMII_CONFIG_NO_CONFIG      (1<<5)   /* set to bypass CPSGMII config  */
256          UINT16 sgmiiControl;
257      #define BOOT_PARAMS_SGMII_CONTROL_MASK 0x7F
259          UINT16 sgmiiMr_Adv_Ability;
260      #define BOOT_PARAMS_SGMII_ABILITY_MASK 0x0000FFFF
262      /* These registers are the serdes configuration registers */
263          UINT16 sgmiiTx_Cfg_h;
264          UINT16 sgmiiTx_Cfg_l;
265          UINT16 sgmiiRx_Cfg_h;
266          UINT16 sgmiiRx_Cfg_l;
267          UINT16 sgmiiAux_Cfg_h;
268          UINT16 sgmiiAux_Cfg_l;
270      UINT16 pktPllCfg_msw;      /* Packet subsystem PLL configuration */
271      UINT16 pktPllCfg_lsw;
273 }   BOOT_PARAMS_ETHERNET_T;
275 /**************************************************************************************
276  * Utopia boot options
277  **************************************************************************************/
278 typedef struct boot_params_utopia_s{
280     /* common portion of the Boot parameters */
281     UINT16 length;
282     UINT16 checksum;
283     UINT16 boot_mode;
284     UINT16 portNum;
285     UINT16 swPllCfg_msw;  /* CPU PLL configuration, MSW */
286     UINT16 swPllCfg_lsw;  /* CPU PLL configuration, LSW */
288     /* Utopia specific portion of the Boot Parameters */
289     /* Options
290      *  ---------------------------------------------------------------
291      * | 15                          3  |    2    |    1    |    0    |
292      * ----------------------------------------------------------------
293      *          reserved                     |         |         \-> 0 = multi phy
294      *                                       |         |             1 = single phy
295      *                                       |         \-> 0 = 8 bit utopia
296      *                                       |             1 = 16 bit utopis
297      *                                       \-> 0 = Init port
298      *                                           1 = skip port init
299      */
300     UINT16 options;
302     #define BOOT_PARAMS_UTOPIA_SINGLE_PHY    (1<<0)
303     #define BOOT_PARAMS_UTOPIA_16BIT         (1<<1)
304     #define BOOT_PARAMS_UTOPIA_SKIP_INIT     (1<<2)
306     UINT16 cellSizeBytes;    /* Cell Size */
307     UINT16 busWidthBits;     /* Bus width (8 or 16) */
308     UINT16 slid;             /* Slave ID  */
309     UINT16 coreFreqMhz;      /* CPU frequency after pll mult */
312 } BOOT_PARAMS_UTOPIA_T;
314 typedef struct boot_params_i2c_s{
316     /* common portion of the Boot parameters */
317     UINT16 length;
318     UINT16 checksum;
319     UINT16 boot_mode;
320     UINT16 portNum;
321     UINT16 swPllCfg_msw;  /* CPU PLL configuration, MSW */
322     UINT16 swPllCfg_lsw;  /* CPU PLL configuration, LSW */
324     /* I2C specific portion of the Boot Parameters */
325     UINT16 options;
326     /*
327      * I2C Specific Options
328      * Bit 01-00: BT:
329      *            00 - Boot Parameter Mode
330      *            01 - Boot Table Mode
331      *            10 - Boot Config mode
332      *            11 - Slave receive boot config
333      * Bit 04-02: EETYPE: EEPROM type
334      * Other bits:  Reserved
335      */
336      #define BOOT_PARAMS_I2C_OPTIONS_BP             0x0000
337      #define BOOT_PARAMS_I2C_OPTIONS_BT             0x0001
338      #define BOOT_PARAMS_I2C_OPTIONS_BC             0x0002
339      #define BOOT_PARAMS_I2C_OPTIONS_SLVOPT         0x0003
341      #define BOOT_PARAMS_I2C_OPTIONS_MASK           0x0003
342      #define BOOT_PARAMS_I2C_OPTIONS_SHIFT          0
344      #define BOOT_PARAMS_I2C_OPTIONS_EETYPE_MASK    0x001C
345      #define BOOT_PARAMS_I2C_OPTIONS_EETYPE_SHIFT   2
347      #define BOOT_PARAMS_I2C_IS_BOOTTBL_MODE(options) \
348              (((options) & BOOT_PARAMS_I2C_OPTIONS_MASK) == BOOT_PARAMS_I2C_OPTIONS_BT)
350      #define BOOT_PARAMS_I2C_IS_BOOTCONFIG_MODE(options) \
351              (((options) & BOOT_PARAMS_I2C_OPTIONS_MASK) == BOOT_PARAMS_I2C_OPTIONS_BC)
353      #define BOOT_PARAMS_I2C_IS_SLAVE_RCV_OPTIONS_MODE(options) \
354              (((options) & BOOT_PARAMS_I2C_OPTIONS_MASK) == BOOT_PARAMS_I2C_OPTIONS_SLVOPT)
356      #define BOOT_PARAMS_I2C_IS_BOOTPARAM_MODE(options) \
357              (((options) & BOOT_PARAMS_I2C_OPTIONS_MASK) == BOOT_PARAMS_I2C_OPTIONS_BP)
359      #define BOOT_PARAMS_I2C_SET_BOOTTBL_MODE(options, mode)               \
360              (options) = ((options) & ~BOOT_PARAMS_I2C_OPTIONS_MASK) |     \
361                          (((mode)   &  BOOT_PARAMS_I2C_OPTIONS_MASK) <<    \
362                                        BOOT_PARAMS_I2C_OPTIONS_SHIFT)
365      #define BOOT_PARAMS_I2C_GET_EETYPE(options)    \
366              (((options) & BOOT_PARAMS_I2C_OPTIONS_EETYPE_MASK) >> BOOT_PARAMS_I2C_OPTIONS_EETYPE_SHIFT)
367      #define BOOT_PARAMS_I2C_SET_EETYPE(options, ee_type)         \
368              (options) = (((options) & ~BOOT_PARAMS_I2C_OPTIONS_EETYPE_MASK) |  \
369                          (((ee_type) << BOOT_PARAMS_I2C_OPTIONS_EETYPE_SHIFT) & BOOT_PARAMS_I2C_OPTIONS_EETYPE_MASK))
371      /* The device address to be used for Boot */
372      UINT16 dev_addr;           /* 16-bit device address (low) */
373      UINT16 dev_addr_ext;       /* 16-bit extended device address (high)
374                                  * set to zero if not used
375                                  * Note: some I2C device requires 32-bit
376                                  * address
377                                  */
378      UINT16 multi_i2c_id;      /* Multi device master write boot ID */
379      UINT16 my_i2c_id;         /* This parts I2C address            */
381      UINT16 core_freq_mhz;     /* Core frequency, MHz               */
382      UINT16 i2c_clk_freq_khz;  /* Desired I2C clock frequency, kHz  */
384      UINT16 next_dev_addr;      /* Used only for the boot config mode.         */
385      UINT16 next_dev_addr_ext;  /* Copied into dev_addr* after config complete */
387      UINT16 address_delay;      /* Rough number of cycles delay between address write
388                                  * and read to the i2c eeprom */
391 } BOOT_PARAMS_I2C_T;
394 typedef struct boot_params_rapidio_s{
396     /* common portion of the Boot parameters */
397     UINT16 length;
398     UINT16 checksum;
399     UINT16 boot_mode;
400     UINT16 portNum;
401     UINT16 swPllCfg_msw;  /* CPU PLL configuration, MSW */
402     UINT16 swPllCfg_lsw;  /* CPU PLL configuration, LSW */
404     /* Options */
405     UINT16 options;
407     #define BOOT_PARAMS_RIO_OPTIONS_TX_ENABLE    (1<<0)   /* set to enable transmit    */
408     #define BOOT_PARAMS_RIO_OPTIONS_BOOT_TABLE   (1<<1)   /* set to use boot tables    */
409     #define BOOT_PARAMS_RIO_OPTIONS_NO_CONFIG    (1<<2)   /* set to bypass port config */
410     #define BOOT_PARAMS_RIO_OPTIONS_NO_QM_CONFIG (1<<3)   /* set to bypass QM config   */
412     UINT16 lane_port_setup; /* Lane port configuration                        */
413     #define BOOT_PARAMS_RIO_LPS_1X_1X_1X_1X     0       /* 4 ports 1 lane each */
414     #define BOOT_PARAMS_RIO_LPS_2X_1X_1X        1       /* 3 ports, lanes 0,1 are a 2 lane port */
415     #define BOOT_PARAMS_RIO_LPS_1X_1X_2X        2       /* 3 ports, lanes 2,3 are a 2 lane port */
416     #define BOOT_PARAMS_RIO_LPS_2X_2X           3       /* 2 ports, each 2 lanes */
417     #define BOOT_PARAMS_RIO_LPS_4X              4       /* 1 port of 4 lanes */
419     UINT16  cfg_index;      /* The table of base configuration parameters */
423     UINT16 node_id;         /* The node id for this device                    */
424     UINT16 serdes_ref_clk;  /* The serdes reference clock freq, in hundredths
425                              * of MHz (1 MHz would be 100)                    */
426     UINT16 link_rate;       /* Data link rate (mega bits per second           */
427     UINT16 pf_low;          /* Packet forward range, low                      */
428     UINT16 pf_high;         /* Packet forward range, high                     */
430 } BOOT_PARAMS_RIO_T;
433 typedef struct boot_params_pcie_s
435     /* common portion of the Boot parameters */
436     UINT16 length;
437     UINT16 checksum;
438     UINT16 boot_mode;
439     UINT16 portNum;
440     UINT16 swPllCfg_msw;  /* CPU PLL configuration, MSW */
441     UINT16 swPllCfg_lsw;  /* CPU PLL configuration, LSW */
443     UINT16 options;
445 #define BOOT_PARAMS_PCIE_OPTIONS_COMPUTE_PLL_MASK    (1 << 4)
446 #define BOOT_PARAMS_PCIE_OPTIONS_COMPUTE_PLL         (1 << 4)
447 #define BOOT_PARAMS_PCIE_OPTIONS_NO_COMPUTE_PLL      (0 << 4)
449 #define BOOT_PARAMS_PCIE_OPTIONS_NO_INIT_MASK        (1 << 1)
450 #define BOOT_PARAMS_PCIE_OPTIONS_NO_INIT             (1 << 1)
451 #define BOOT_PARAMS_PCIE_OPTIONS_INIT                (0 << 1)
453 #define BOOT_PARAMS_PCIE_OPTIONS_BOOT_TABLE_MASK     (1 << 0)
454 #define BOOT_PARAMS_PCIE_OPTIONS_BOOT_TABLE          (1 << 0)
455 #define BOOT_PARAMS_PCIE_OPTIONS_HOST_BOOT           (0 << 0)
459     UINT16 addressWidth;    /* The PCI address width. Valid values are 32 or 64 */
460     UINT16 linkRateMhz;     /* The serdes frequency. Valid values are 2500 and 5000 */
461     UINT16 refClock10kHz;   /* The reference clock in 10kHz units. Valid values are 10000, 12500, 15625, 25000, 31250 */
462     UINT16 window0Size;     /* Window 0 size, in units of megabytes */
463     UINT16 window1Size;     /* Window 1 size */
464     UINT16 window2Size;     /* Window 2 size. Valid only if the address width is 32 */
465     UINT16 window3Size;     /* Window 3 size. Valid only if the address width is 32 */
467     UINT16 vendorId;             /* Vendor ID field */
468     UINT16 deviceId;             /* Device ID field */
469     UINT16 classCodeRevId_Msw;   /* Class code rev ID, MSW */
470     UINT16 classCodeRevId_Lsw;   /* Class code rev ID, LSW*/
474     UINT16 serdesCfgMsw;    /* Serdes auxillary config, MSW */
475     UINT16 serdesCfgLsw;    /* Serdes auxillary config, LSW */
477     UINT16 serdesCfgLane0Msw;   /* Serdes Lane 0 config, MSW */
478     UINT16 serdesCfgLane0Lsw;   /* Serdes Lane 0 config, LSW */
480     UINT16 serdesCfgLane1Msw;   /* Serdes Lane 1 config, MSW */
481     UINT16 serdesCfgLane1Lsw;   /* Serdes Lane 1 config, LSW */
484 } BOOT_PARAMS_PCIE_T;
487 typedef struct boot_params_emif_nor_s  {
488     UINT16 waitEnable;
489 } boot_params_emif_nor_t;
492 typedef struct boot_params_emif_s
494     /* common portion of the Boot parameters */
495     UINT16 length;
496     UINT16 checksum;
497     UINT16 boot_mode;
498     UINT16 portNum;
499     UINT16 swPllCfg_msw;  /* CPU PLL configuration, MSW */
500     UINT16 swPllCfg_lsw;  /* CPU PLL configuration, LSW */
502     UINT16 options;
504     UINT16 type;
505 #define BOOT_PARAMS_EMIF_TYPE_NOR  0
507     UINT16 branchAddrMsw;
508     UINT16 branchAddrLsw;
510     UINT16 csNum;
511     UINT16 memWidth;
513     union  {
514       boot_params_emif_nor_t nor;
515     } u;
517 } BOOT_PARAMS_EMIF_T;
520 typedef struct boot_params_vusr_s
522     /* common portion of the Boot parameters */
523     UINT16 length;
524     UINT16 checksum;
525     UINT16 boot_mode;
526     UINT16 portNum;
527     UINT16 swPllCfg_msw;  /* CPU PLL configuration, MSW */
528     UINT16 swPllCfg_lsw;  /* CPU PLL configuration, LSW */
530     UINT16 options;
531 #define BOOT_PARAMS_VUSR_OPTIONS_NO_INIT_MASK        (1 << 1)
532 #define BOOT_PARAMS_VUSR_OPTIONS_NO_INIT             (1 << 1)
533 #define BOOT_PARAMS_VUSR_OPTIONS_INIT                (0 << 1)
535 #define BOOT_PARAMS_VUSR_OPTIONS_BOOT_TABLE_MASK     (1 << 0)
536 #define BOOT_PARAMS_VUSR_OPTIONS_BOOT_TABLE          (1 << 0)
537 #define BOOT_PARAMS_VUSR_OPTIONS_HOST_BOOT           (0 << 0)
539     UINT16 nLanes;          /* The number of lanes to configure */
541     UINT16 serdesCfgMsw;    /* Serdes auxillary config, MSW */
542     UINT16 serdesCfgLsw;    /* Serdes auxillary config, LSW */
544     UINT16 serdesCfgRxLane0Msw;   /* Serdes Rx Lane 0 config, MSW */
545     UINT16 serdesCfgRxLane0Lsw;   /* Serdes Rx Lane 0 config, LSW */
547     UINT16 serdesCfgTxLane0Msw;   /* Serdes Tx Lane 0 config, MSW */
548     UINT16 serdesCfgTxLane0Lsw;   /* Serdes Tx Lane 0 config, LSW */
552     UINT16 serdesCfgRxLane1Msw;   /* Serdes Rx Lane 1 config, MSW */
553     UINT16 serdesCfgRxLane1Lsw;   /* Serdes Rx Lane 1 config, LSW */
555     UINT16 serdesCfgTxLane1Msw;   /* Serdes Tx Lane 1 config, MSW */
556     UINT16 serdesCfgTxLane1Lsw;   /* Serdes Tx Lane 1 config, LSW */
559     UINT16 serdesCfgRxLane2Msw;   /* Serdes Rx Lane 2 config, MSW */
560     UINT16 serdesCfgRxLane2Lsw;   /* Serdes Rx Lane 2 config, LSW */
562     UINT16 serdesCfgTxLane2Msw;   /* Serdes Tx Lane 2 config, MSW */
563     UINT16 serdesCfgTxLane2Lsw;   /* Serdes Tx Lane 2 config, LSW */
567     UINT16 serdesCfgRxLane3Msw;   /* Serdes Rx Lane 3 config, MSW */
568     UINT16 serdesCfgRxLane3Lsw;   /* Serdes Rx Lane 3 config, LSW */
570     UINT16 serdesCfgTxLane3Msw;   /* Serdes Tx Lane 3 config, MSW */
571     UINT16 serdesCfgTxLane3Lsw;   /* Serdes Tx Lane 3 config, LSW */
573 } BOOT_PARAMS_VUSR_T;
575 typedef struct boot_params_spi_s
577     /* common portion of the Boot parameters */
578     UINT16 length;
579     UINT16 checksum;
580     UINT16 boot_mode;
581     UINT16 portNum;
582     UINT16 swPllCfg_msw;  /* CPU PLL configuration, MSW */
583     UINT16 swPllCfg_lsw;  /* CPU PLL configuration, LSW */
585     UINT16 options;
586     /*
587      * SPI Specific Options
588      * Bit 01-00: BT:
589      *            00 - Boot Parameter Mode
590      *            01 - Boot Table Mode
591      *            10 - Boot Config mode
592      *            11 - Reserved, but if seen will act as boot parameter table
593      * Other bits:  Reserved
594      */
595      #define BOOT_PARAMS_SPI_OPTIONS_BP             0x0000
596      #define BOOT_PARAMS_SPI_OPTIONS_BT             0x0001
597      #define BOOT_PARAMS_SPI_OPTIONS_BC             0x0002
599      #define BOOT_PARAMS_SPI_OPTIONS_MASK           0x0003
600      #define BOOT_PARAMS_SPI_OPTIONS_SHIFT          0
602      #define BOOT_PARAMS_SPI_IS_BOOTTBL_MODE(options) \
603              (((options) & BOOT_PARAMS_SPI_OPTIONS_MASK) == BOOT_PARAMS_SPI_OPTIONS_BT)
605      #define BOOT_PARAMS_SPI_IS_BOOTCONFIG_MODE(options) \
606              (((options) & BOOT_PARAMS_SPI_OPTIONS_MASK) == BOOT_PARAMS_SPI_OPTIONS_BC)
608      #define BOOT_PARAMS_SPI_IS_BOOTPARAM_MODE(options) \
609              (((options) & BOOT_PARAMS_SPI_OPTIONS_MASK) == BOOT_PARAMS_SPI_OPTIONS_BP)
612      #define BOOT_PARAMS_SPI_SET_BOOTTBL_MODE(options, mode)               \
613              (options) = ((options) & ~BOOT_PARAMS_SPI_OPTIONS_MASK) |     \
614                          (((mode)   &  BOOT_PARAMS_SPI_OPTIONS_MASK) <<    \
615                                        BOOT_PARAMS_SPI_OPTIONS_SHIFT)
618      UINT16 addrWidth;          /* 16 or 24 are the only valid values */
619      UINT16 nPins;              /* 4 or 5 pins are the only valid values */
620      UINT16 csel;               /* only values 0b10 (cs0 low) or 0b01 (cs1 low) are valid */
621      UINT16 mode;               /* Clock phase/polarity. These are the standard SPI modes 0-3 */
622      UINT16 c2tdelay;           /* Setup time between chip select assert and the transaction */
624      UINT16 cpuFreqMhz;         /* Speed the CPU is running after PLL configuration */
625      UINT16 busFreqMhz;         /* The speed of the SPI bus, the megahertz portion */
626      UINT16 busFreqKhz;         /* The KHz portion of the bus frequency. A frequency of 1.5 MHz would have the value 5 here */
628      UINT16 read_addr_msw;      /* The base address to read from the SPI, upper 16 bits */
629      UINT16 read_addr_lsw;      /* The base address to read from the SPI, lower 16 bits */
631      UINT16 next_csel;          /* The next chip select to use if in boot config mode, when the config is complete */
632      UINT16 next_read_addr_msw; /* The next read address to use if in boot config mode */
633      UINT16 next_read_addr_lsw; /* The next read address to use if in boot config mode */
635 } BOOT_PARAMS_SPI_T;
638 /*
639  * UNION of boot parameter structures in all modes
640  * Note: We need to make sure that the structures genertaed by the C-compiler
641  *       match with the boot parameter table data format i.e. a set of 16-bit
642  *       data array.
643  */
644 #define BOOT_PARAMS_SIZE_IN_BYTES       128
645 typedef union {
646    BOOT_PARAMS_COMMON_T    common;
647    BOOT_PARAMS_ETHERNET_T  eth;
648    BOOT_PARAMS_I2C_T       i2c;
649    BOOT_PARAMS_UTOPIA_T    utopia;
650    BOOT_PARAMS_RIO_T       rio;
651    BOOT_PARAMS_PCIE_T      pcie;
652    BOOT_PARAMS_EMIF_T      emif;
653    BOOT_PARAMS_VUSR_T      vusr;
654    BOOT_PARAMS_SPI_T       spi;
655    UINT16                  parameter[BOOT_PARAMS_SIZE_IN_BYTES/2];
656 } BOOT_PARAMS_T;
659 /*******************************************************************************
660  * Definition: The time stamp and version number are placed into the stats.
661  *             This will be two characters packed per 16bits . The length
662  *             value must be 32 bit divisible
663  *******************************************************************************/
664 #define BOOT_VERSION_LEN_UINT16    32
665 typedef struct BOOT_VERSION_S {
667   UINT16 vstring[BOOT_VERSION_LEN_UINT16];
669 } BOOT_VERSION_T;
670 extern BOOT_VERSION_T bootVersion;
673 /*******************************************************************************
674  * Definition: Runs time stats that are not initialized on cold boot entry
675  *   !!!!!! boot.s assumes that the nonInit stats are at the top of the structure
676  *   !!!!!! and that stage is the first element
677  *******************************************************************************/
678 typedef struct BOOT_STATS_NONINIT_S {
679   UINT16  stage;            /* Record the SharedROM code execution stage */
680   #define BOOT_STAGE_ASM_START_UP               1
681   #define BOOT_STAGE_INIT_CACHE                 2
682   #define BOOT_STAGE_CHCHE_INITED               3
683   #define BOOT_STAGE_ENTER_WARMBOOT             4
684   #define BOOT_STAGE_INIT_CPGMAC                5
685   #define BOOT_STAGE_SEND_ERA_FRAME             6
686   #define BOOT_STAGE_ETH_MAIN_LOOP              7
687   #define BOOT_STAGE_I2C_BOOTTBL_LOOP           8
688   #define BOOT_STAGE_I2C_BOOTPARAM_LOOP         9
689   #define BOOT_STAGE_DISABLE_CACHE             10
690   #define BOOT_STAGE_CHCHE_DISABLED            11
691   #define BOOT_STAGE_EXIT                      12
692   #define BOOT_STAGE_ERROR_LOOP                13
693   #define BOOT_STAGE_I2C_BOOTCONFIG_LOOP       14
694   #define BOOT_STAGE_I2C_SLV_RCV_OPTIONS_LOOP  15
695   #define BOOT_STAGE_UTOPIA_MAIN_LOOP          16
696   UINT16  coldBootEntries;
698 } BOOT_STATS_NONINIT_T;
700 /*******************************************************************************
701  * Definition: Run time statistics and error counts. These stats are
702  *             initialized on cold boot entry.
703  ******************************************************************************/
705 typedef struct BOOT_STATS_COMMON_S  {
706   UINT32    bootStatus;
707   UINT16    nColdBootEntries;
708   UINT16    nBootReentries;
709   UINT16    nPllWarns;
710   UINT16    nResetWarns;
711 } BOOT_STATS_COMMON_T;
714 typedef struct BOOT_STATS_MAIN_S {
715   UINT16  errorCode;        /* (module ID <<8 ) + module specific error */
717   /* I2C operation related statistics */
718   UINT16  numI2Cpkts;       /* number of I2C boot table packets processed */
719   UINT16  numI2CchksumError;/* number of I2C checksum errors */
720   UINT16  numI2ClengthError;/* number of I2C block length errors */
721   UINT16  numI2CotherError; /* number of I2C section with invalid length and etc */
722   UINT16  numI2Cretrys;     /* number of I2C retrys due to read access errors */
723   UINT16  numI2cWrites;     /* number of I2C master writes to passive devices */
724   UINT16  numI2cWriteError; /* number of I2C master write errors              */
726   UINT16  warmBootEntry;    /* Count of entries into warm boot routine   */
727 } BOOT_STATS_MAIN_T;
731 /*****************************************************************************
732  * Definition: I2C stats, Boot table and Ethernrt stats initialized
733  *             on cold boot entry
734  *****************************************************************************/
735 typedef struct I2C_STATS_tag
737     UINT16      num_trans;
738     UINT16      num_trys;
739     UINT16      num_try_ok;
740     UINT16      num_try_lost_arb;
741     UINT16      num_try_idle_to;
742     UINT16      num_try_no_ack;
743     UINT16      num_try_other_err;
744     UINT32      extra_idle_waits;
745     UINT32      extra_clock_waits;
746     UINT32      tx_bytes;
747     UINT32      rx_bytes;
748     UINT32      data_re_reads;
749 } I2C_STATS_T;
751 typedef struct BTBL_STATS_tag
753   UINT16  num_sections;     /* number of boot table sections received */
754   UINT16  num_pdma_copies;  /* number of PDMA copies performed */
755 } BTBL_STATS_T;
757 typedef struct ETH_STATS_tag
759   /* MAC packets related statistics */
760   UINT16  uniMacPkts;       /* Count of packets received with valid unicast mac
761                                address   */
762   UINT16  multiMacPkts;     /* Count of packets received with valid multicast or
763                                broadcast mac address   */
764   UINT16  invalidMacPkts;   /* Count of packets received with invalid mac
765                                address   */
766   UINT16  invalidLLCPkts;   /* Count of 802.3 packets with wrong LLC/SNAP header */
767   UINT16  nonIpPkts;        /* Count of non-IP packets received with valid
768                                MAC address   */
770   /* IP packets related statistics */
771   UINT16  nEra;             /* Number of ERA packets transmitted */
772   UINT16  nonIP4Pkts;       /* Count of non-IP4 packets        */
773   UINT16  ipfragments;      /* Count of IP fragments received      */
774   UINT16  ipTruncatedError; /* Count of truncated IP frame */
775   UINT16  nonUDPPkts;       /* Count of IP packets with non-UDP paylaod  */
777   /* UDP packets related statistics */
778   UINT16  udpSizeError;     /* Count of UDP packet with invalid (odd) size */
779   UINT16  udpPortError;     /* Count of UDP packets with invalid port number */
780   UINT16  udpChksumError;   /* Count of UDP packets with checksum error */
782   /* Boot table packets related statistics */
783   UINT16  nonBtblPkts;      /* Count of UDP packets with invalid boot table paylaod */
784   UINT16  outSeqPkts;       /* Count of out of sequence boot table packets received
785                                i.e. packets with unexpected seq_num      */
786   UINT16  expSeqNum;        /* Expected Sequence Number */
787   UINT16  lastSeqNum;       /* Last sequence number received */
789   /* Driver errors */
790   UINT16  sizeZeroPackets;  /* Count of packets arriving with 0 size */
791 } ETH_STATS_T;
793 typedef struct PCI_EEAI_STATS_tag
795   UINT16  pciI2cReads;         /* Count of block reads of i2c eeprom */
796   UINT16  pciI2cRetries;       /* Count of i2c read retries          */
797   UINT16  pciChkSumErr;        /* Count of block check sum errors    */
798   UINT16  pciEeaiFail;         /* Count of aborted pci attempts      */
799 } PCI_EEAI_STATS_T;
801 /* Rapid I/O stats */
802 typedef struct RAPIDIO_STATS_tag
804   UINT16 rapidIoFailReady;     /* If set rapid I/O peripheral failed to report ready */
805   UINT16 rapidIoBtblBlocks;    /* Count of number of boot table blocks received */
806   UINT16 rapidIoBtblBadBlocks; /* Count of boot table blocks rejected */
807   UINT16 rapidIoDescrEmpty;    /* Count of times ROM found rx descriptor queue empty */
808 } RAPIDIO_STATS_T;
810 typedef struct HPI_STATS_Tag
812   UINT16 hpiBtblBlocks;        /* Count of boot table blocks received */
813   UINT16 hpiBtblBadBlocks;     /* Count of boot table blocks rejected */
814 } HPI_STATS_T;
816 /* Utopia stats */
817 typedef struct UTOPIA_STATS_tag
819   UINT16 cellCount;            /* Count of cells received   */
820   UINT16 invalidPtr;           /* Count of invalid pointers received in processing */
821   UINT16 invalidSize;          /* Count of cells that were too small               */
822   UINT16 cellMagicCount;       /* Count of cells received with valid magic         */
823   UINT16 cellMagicFailed;      /* Count of cells received with invalid magic       */
824   UINT16 trapNoCellMem;        /* Trapped due to no cell space in memory           */
825   UINT16 possibleOverrun;      /* Count of possible cell buffer overruns           */
826 } UTOPIA_STATS_T;
828 /*******************************************************************************
829  * Definition: The statistics
830  *
831  *   !!!!!! boot.s assumes that the nonInit stats are at the top of the structure!
832  *******************************************************************************/
833 typedef struct BOOT_STATS_S {
835  BOOT_STATS_COMMON_T   common;
836  BOOT_STATS_NONINIT_T  nonInit;
837  BOOT_STATS_MAIN_T     main;
838  I2C_STATS_T           i2c;
839  BTBL_STATS_T          btbl;
840  union  {
841    ETH_STATS_T           eth;
842    PCI_EEAI_STATS_T      pci_eeai;
843    RAPIDIO_STATS_T       rapidIo;
844    UTOPIA_STATS_T        utopia;
845    HPI_STATS_T           hpi;
846  } u;
847 } BOOT_STATS_T;
849 extern BOOT_STATS_T bootStats;
851 /*******************************************************************************
852  * Definition: The magic start address, known to all modules
853  *******************************************************************************/
854 extern volatile UINT32 *p_boot_entry_addr;
857 /*******************************************************************************
858  * Emif4 (DDR3) configuration table
859  *******************************************************************************/
860 typedef struct bootEmif4Tbl_s  {
862     UINT32  configSelect;               /* Bit map defining which registers to set */
864     UINT32  pllPrediv;                  /* Values of all 0s will disable the pll */
865     UINT32  pllMult;
866     UINT32  pllPostDiv;
868     UINT32  sdRamConfig;
869     UINT32  sdRamConfig2;
870     UINT32  sdRamRefreshCtl;
871     UINT32  sdRamTiming1;
872     UINT32  sdRamTiming2;
873     UINT32  sdRamTiming3;
874     UINT32  lpDdrNvmTiming;
875     UINT32  powerManageCtl;
876     UINT32  iODFTTestLogic;
877     UINT32  performCountCfg;
878     UINT32  performCountMstRegSel;
879     UINT32  readIdleCtl;
880     UINT32  sysVbusmIntEnSet;
881     UINT32  sdRamOutImpdedCalCfg;
882     UINT32  tempAlterCfg;
883     UINT32  ddrPhyCtl1;
884     UINT32  ddrPhyCtl2;
885     UINT32  priClassSvceMap;
886     UINT32  mstId2ClsSvce1Map;
887     UINT32  mstId2ClsSvce2Map;
888     UINT32  eccCtl;
889     UINT32  eccRange1;
890     UINT32  eccRange2;
891     UINT32  rdWrtExcThresh;
893 } BOOT_EMIF4_TBL_T;
895 #define BOOT_EMIF4_ENABLE_pllCtl                      (1 <<  0)
897 #define BOOT_EMIF4_ENABLE_sdRamConfig                 (1 <<  2)
898 #define BOOT_EMIF4_ENABLE_sdRamConfig2                (1 <<  3)
899 #define BOOT_EMIF4_ENABLE_sdRamRefreshCtl             (1 <<  4)
900 #define BOOT_EMIF4_ENABLE_sdRamTiming1                (1 <<  5)
901 #define BOOT_EMIF4_ENABLE_sdRamTiming2                (1 <<  6)
902 #define BOOT_EMIF4_ENABLE_sdRamTiming3                (1 <<  7)
903 #define BOOT_EMIF4_ENABLE_lpDdrNvmTiming              (1 <<  8)
904 #define BOOT_EMIF4_ENABLE_powerManageCtl              (1 <<  9)
905 #define BOOT_EMIF4_ENABLE_iODFTTestLogic              (1 << 10)
906 #define BOOT_EMIF4_ENABLE_performCountCfg             (1 << 11)
907 #define BOOT_EMIF4_ENABLE_performCountMstRegSel       (1 << 12)
908 #define BOOT_EMIF4_ENABLE_readIdleCtl                 (1 << 13)
909 #define BOOT_EMIF4_ENABLE_sysVbusmIntEnSet            (1 << 14)
910 #define BOOT_EMIF4_ENABLE_sdRamOutImpdedCalCfg        (1 << 15)
911 #define BOOT_EMIF4_ENABLE_tempAlterCfg                (1 << 16)
912 #define BOOT_EMIF4_ENABLE_ddrPhyCtl1                  (1 << 17)
913 #define BOOT_EMIF4_ENABLE_ddrPhyCtl2                  (1 << 18)
914 #define BOOT_EMIF4_ENABLE_priClassSvceMap             (1 << 19)
915 #define BOOT_EMIF4_ENABLE_mstId2ClsSvce1Map           (1 << 20)
916 #define BOOT_EMIF4_ENABLE_mstId2ClsSvce2Map           (1 << 21)
917 #define BOOT_EMIF4_ENABLE_eccCtl                      (1 << 22)
918 #define BOOT_EMIF4_ENABLE_eccRange1                   (1 << 23)
919 #define BOOT_EMIF4_ENABLE_eccRange2                   (1 << 24)
920 #define BOOT_EMIF4_ENABLE_rdWrtExcThresh              (1 << 25)
922 #define BOOT_EMIF4_ENABLE_ALL                         0x00ffffff
927 /* Hibernation function control */
928 #define TIBOOT_CTL_HIBERNATION_MODE1        1
929 #define TIBOOT_CTL_HIBERNATION_MODE2        2
932 /* Hibernation function return */
933 #define TIBOOT_ERR_HIBERNATION_MODE_INVALID     -1
934 #define TIBOOT_ERR_HIBERNATION_ADDR_MISALIGNED  -2
935 #define TIBOOT_ERR_HIBERNATION_ADDR_INVALID     -3
937 /* Boot mode values */
938 #define BOOT_MODE_I2C               40
939 #define BOOT_MODE_SPI               50
941 /* ROM boot loader enter address */
942 #define BOOT_ROM_ENTER_ADDRESS      0x20b00000
944 #endif  /* __TIBOOT_H__ */
946 /* nothing past this point */