Home | History | Annotate | Line # | Download | only in include
      1  1.1  simonb /*  *********************************************************************
      2  1.1  simonb     *  SB1250 Board Support Package
      3  1.1  simonb     *
      4  1.1  simonb     *  Wafer ID bit definitions			File: sb1250_wid.h
      5  1.1  simonb     *
      6  1.1  simonb     *  Some preproduction BCM1250 samples use the wafer ID (WID) bits
      7  1.1  simonb     *  in the system_revision register in the SCD to determine which
      8  1.1  simonb     *  portions of the L1 and L2 caches are usable.
      9  1.1  simonb     *
     10  1.1  simonb     *  This file describes the WID register layout.
     11  1.1  simonb     *
     12  1.1  simonb     *********************************************************************
     13  1.1  simonb     *
     14  1.2     cgd     *  Copyright 2000,2001,2002,2003
     15  1.1  simonb     *  Broadcom Corporation. All rights reserved.
     16  1.1  simonb     *
     17  1.1  simonb     *  This software is furnished under license and may be used and
     18  1.1  simonb     *  copied only in accordance with the following terms and
     19  1.1  simonb     *  conditions.  Subject to these conditions, you may download,
     20  1.1  simonb     *  copy, install, use, modify and distribute modified or unmodified
     21  1.1  simonb     *  copies of this software in source and/or binary form.  No title
     22  1.1  simonb     *  or ownership is transferred hereby.
     23  1.1  simonb     *
     24  1.1  simonb     *  1) Any source code used, modified or distributed must reproduce
     25  1.2     cgd     *     and retain this copyright notice and list of conditions
     26  1.2     cgd     *     as they appear in the source file.
     27  1.1  simonb     *
     28  1.1  simonb     *  2) No right is granted to use any trade name, trademark, or
     29  1.2     cgd     *     logo of Broadcom Corporation.  The "Broadcom Corporation"
     30  1.2     cgd     *     name may not be used to endorse or promote products derived
     31  1.2     cgd     *     from this software without the prior written permission of
     32  1.2     cgd     *     Broadcom Corporation.
     33  1.1  simonb     *
     34  1.1  simonb     *  3) THIS SOFTWARE IS PROVIDED "AS-IS" AND ANY EXPRESS OR
     35  1.2     cgd     *     IMPLIED WARRANTIES, INCLUDING BUT NOT LIMITED TO, ANY IMPLIED
     36  1.1  simonb     *     WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
     37  1.1  simonb     *     PURPOSE, OR NON-INFRINGEMENT ARE DISCLAIMED. IN NO EVENT
     38  1.1  simonb     *     SHALL BROADCOM BE LIABLE FOR ANY DAMAGES WHATSOEVER, AND IN
     39  1.2     cgd     *     PARTICULAR, BROADCOM SHALL NOT BE LIABLE FOR DIRECT, INDIRECT,
     40  1.1  simonb     *     INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
     41  1.2     cgd     *     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
     42  1.1  simonb     *     GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
     43  1.1  simonb     *     BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
     44  1.1  simonb     *     OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
     45  1.1  simonb     *     TORT (INCLUDING NEGLIGENCE OR OTHERWISE), EVEN IF ADVISED OF
     46  1.1  simonb     *     THE POSSIBILITY OF SUCH DAMAGE.
     47  1.1  simonb     ********************************************************************* */
     48  1.1  simonb 
     49  1.1  simonb 
     50  1.1  simonb #ifndef _SB1250_WID_H
     51  1.1  simonb #define _SB1250_WID_H
     52  1.1  simonb 
     53  1.1  simonb #include "sb1250_defs.h"
     54  1.1  simonb 
     55  1.1  simonb /*
     56  1.1  simonb  * To make things easier to work with, we'll assume that the
     57  1.1  simonb  * WID bits have been shifted from their normal home
     58  1.1  simonb  * in scd_system_revision[63:32] to bits [31..0].
     59  1.1  simonb  *
     60  1.1  simonb  * That is, we've already shifted right by S_SYS_WID
     61  1.1  simonb  */
     62  1.1  simonb 
     63  1.1  simonb #define S_WID_BIN             0
     64  1.1  simonb #define M_WID_BIN             _SB_MAKEMASK(3,S_WID_BIN)
     65  1.1  simonb #define V_WID_BIN(x)          _SB_MAKEVALUE(x,S_WID_BIN)
     66  1.1  simonb #define G_WID_BIN(x)          _SB_GETVALUE(x,S_WID_BIN,M_WID_BIN)
     67  1.1  simonb 
     68  1.1  simonb                                         /* CPUs  L1I    L1D    L2   */
     69  1.1  simonb #define K_WID_BIN_2CPU_FI_1D_H2	0	/*  2    full   1/4    1/2  */
     70  1.1  simonb #define K_WID_BIN_2CPU_FI_FD_F2	1	/*  2    full   full   full */
     71  1.1  simonb #define K_WID_BIN_2CPU_FI_FD_H2 2 	/*  2    full   full   1/2  */
     72  1.1  simonb #define K_WID_BIN_2CPU_3I_3D_F2 3       /*  2    3/4    3/4    full */
     73  1.1  simonb #define K_WID_BIN_2CPU_3I_3D_H2 4	/*  2    3/4    3/4    1/2  */
     74  1.1  simonb #define K_WID_BIN_1CPU_FI_FD_F2 5	/*  1    full   full   full */
     75  1.1  simonb #define K_WID_BIN_1CPU_FI_FD_H2 6       /*  1    full   full   1/2  */
     76  1.1  simonb #define K_WID_BIN_2CPU_1I_1D_Q2 7       /*  2    1/4    1/4    1/4  */
     77  1.1  simonb 
     78  1.1  simonb /*
     79  1.1  simonb  * '1' bits in this mask represent bins with only one CPU
     80  1.1  simonb  */
     81  1.1  simonb 
     82  1.1  simonb #define M_WID_BIN_1CPU (_SB_MAKEMASK1(K_WID_BIN_1CPU_FI_FD_F2) | \
     83  1.1  simonb                         _SB_MAKEMASK1(K_WID_BIN_1CPU_FI_FD_H2))
     84  1.1  simonb 
     85  1.1  simonb 
     86  1.1  simonb /*
     87  1.1  simonb  * '1' bits in this mask represent bins with a good L2
     88  1.1  simonb  */
     89  1.1  simonb 
     90  1.1  simonb #define M_WID_BIN_F2 (_SB_MAKEMASK1(K_WID_BIN_2CPU_FI_FD_F2) | \
     91  1.1  simonb                       _SB_MAKEMASK1(K_WID_BIN_2CPU_3I_3D_F2) | \
     92  1.1  simonb                       _SB_MAKEMASK1(K_WID_BIN_1CPU_FI_FD_F2))
     93  1.1  simonb 
     94  1.1  simonb /*
     95  1.1  simonb  * '1' bits in this mask represent bins with 1/2 L2
     96  1.1  simonb  */
     97  1.1  simonb 
     98  1.1  simonb #define M_WID_BIN_H2   (_SB_MAKEMASK1(K_WID_BIN_2CPU_FI_1D_H2) | \
     99  1.1  simonb                         _SB_MAKEMASK1(K_WID_BIN_2CPU_FI_FD_H2) | \
    100  1.1  simonb                         _SB_MAKEMASK1(K_WID_BIN_2CPU_3I_3D_H2) | \
    101  1.1  simonb                         _SB_MAKEMASK1(K_WID_BIN_1CPU_FI_FD_H2) )
    102  1.1  simonb 
    103  1.1  simonb /*
    104  1.1  simonb  * '1' bits in this mask represent bins with 1/4 L2
    105  1.1  simonb  */
    106  1.1  simonb 
    107  1.1  simonb #define M_WID_BIN_Q2   (_SB_MAKEMASK1(K_WID_BIN_2CPU_1I_1D_Q2))
    108  1.1  simonb 
    109  1.1  simonb /*
    110  1.1  simonb  * '1' bits in this mask represent bins with 3/4 L1
    111  1.1  simonb  */
    112  1.1  simonb 
    113  1.1  simonb #define M_WID_BIN_3ID  (_SB_MAKEMASK1(K_WID_BIN_2CPU_3I_3D_F2) | \
    114  1.1  simonb 			_SB_MAKEMASK1(K_WID_BIN_2CPU_3I_3D_H2))
    115  1.1  simonb 
    116  1.1  simonb /*
    117  1.1  simonb  * '1' bits in this mask represent bins with a full L1I
    118  1.1  simonb  */
    119  1.1  simonb 
    120  1.1  simonb #define M_WID_BIN_FI   (_SB_MAKEMASK1(K_WID_BIN_2CPU_FI_1D_H2) | \
    121  1.1  simonb 			_SB_MAKEMASK1(K_WID_BIN_2CPU_FI_FD_F2) | \
    122  1.1  simonb 			_SB_MAKEMASK1(K_WID_BIN_2CPU_FI_FD_H2) | \
    123  1.1  simonb 			_SB_MAKEMASK1(K_WID_BIN_1CPU_FI_FD_F2) | \
    124  1.1  simonb 			_SB_MAKEMASK1(K_WID_BIN_1CPU_FI_FD_H2))
    125  1.1  simonb 
    126  1.1  simonb /*
    127  1.1  simonb  * '1' bits in this mask represent bins with a full L1D
    128  1.1  simonb  */
    129  1.1  simonb 
    130  1.1  simonb #define M_WID_BIN_FD   (_SB_MAKEMASK1(K_WID_BIN_2CPU_FI_FD_F2) | \
    131  1.1  simonb 			_SB_MAKEMASK1(K_WID_BIN_2CPU_FI_FD_H2) | \
    132  1.1  simonb 			_SB_MAKEMASK1(K_WID_BIN_1CPU_FI_FD_F2) | \
    133  1.1  simonb 			_SB_MAKEMASK1(K_WID_BIN_1CPU_FI_FD_H2))
    134  1.1  simonb 
    135  1.1  simonb /*
    136  1.1  simonb  * '1' bits in this mask represent bins with a full L1 (both I and D)
    137  1.1  simonb  */
    138  1.1  simonb 
    139  1.1  simonb #define M_WID_BIN_FID  (_SB_MAKEMASK1(K_WID_BIN_2CPU_FI_FD_F2) | \
    140  1.1  simonb 			_SB_MAKEMASK1(K_WID_BIN_2CPU_FI_FD_H2) | \
    141  1.1  simonb 			_SB_MAKEMASK1(K_WID_BIN_1CPU_FI_FD_F2) | \
    142  1.1  simonb 			_SB_MAKEMASK1(K_WID_BIN_1CPU_FI_FD_H2))
    143  1.1  simonb 
    144  1.1  simonb #define S_WID_L2QTR           3
    145  1.1  simonb #define M_WID_L2QTR           _SB_MAKEMASK(2,S_WID_L2QTR)
    146  1.1  simonb #define V_WID_L2QTR(x)        _SB_MAKEVALUE(x,S_WID_L2QTR)
    147  1.1  simonb #define G_WID_L2QTR(x)        _SB_GETVALUE(x,S_WID_L2QTR,M_WID_L2QTR)
    148  1.1  simonb 
    149  1.1  simonb #define M_WID_L2HALF	      _SB_MAKEMASK1(4)
    150  1.1  simonb 
    151  1.1  simonb #define S_WID_CPU0_L1I        5
    152  1.1  simonb #define M_WID_CPU0_L1I        _SB_MAKEMASK(2,S_WID_CPU0_L1I)
    153  1.1  simonb #define V_WID_CPU0_L1I(x)     _SB_MAKEVALUE(x,S_WID_CPU0_L1I)
    154  1.1  simonb #define G_WID_CPU0_L1I(x)     _SB_GETVALUE(x,S_WID_CPU0_L1I,M_WID_CPU0_L1I)
    155  1.1  simonb 
    156  1.1  simonb #define S_WID_CPU0_L1D        7
    157  1.1  simonb #define M_WID_CPU0_L1D        _SB_MAKEMASK(2,S_WID_CPU0_L1D)
    158  1.1  simonb #define V_WID_CPU0_L1D(x)     _SB_MAKEVALUE(x,S_WID_CPU0_L1D)
    159  1.1  simonb #define G_WID_CPU0_L1D(x)     _SB_GETVALUE(x,S_WID_CPU0_L1D,M_WID_CPU0_L1D)
    160  1.1  simonb 
    161  1.1  simonb #define S_WID_CPU1_L1I        9
    162  1.1  simonb #define M_WID_CPU1_L1I        _SB_MAKEMASK(2,S_WID_CPU1_L1I)
    163  1.1  simonb #define V_WID_CPU1_L1I(x)     _SB_MAKEVALUE(x,S_WID_CPU1_L1I)
    164  1.1  simonb #define G_WID_CPU1_L1I(x)     _SB_GETVALUE(x,S_WID_CPU1_L1I,M_WID_CPU1_L1I)
    165  1.1  simonb 
    166  1.1  simonb #define S_WID_CPU1_L1D        11
    167  1.1  simonb #define M_WID_CPU1_L1D        _SB_MAKEMASK(2,S_WID_CPU1_L1D)
    168  1.1  simonb #define V_WID_CPU1_L1D(x)     _SB_MAKEVALUE(x,S_WID_CPU1_L1D)
    169  1.1  simonb #define G_WID_CPU1_L1D(x)     _SB_GETVALUE(x,S_WID_CPU1_L1D,M_WID_CPU1_L1D)
    170  1.1  simonb 
    171  1.1  simonb /*
    172  1.1  simonb  * The macros below assume that the CPU bits have been shifted into the
    173  1.1  simonb  * low-order 4 bits.
    174  1.1  simonb  */
    175  1.1  simonb 
    176  1.1  simonb #define S_WID_CPUX_L1I        0
    177  1.1  simonb #define M_WID_CPUX_L1I        _SB_MAKEMASK(2,S_WID_CPUX_L1I)
    178  1.1  simonb #define V_WID_CPUX_L1I(x)     _SB_MAKEVALUE(x,S_WID_CPUX_L1I)
    179  1.1  simonb #define G_WID_CPUX_L1I(x)     _SB_GETVALUE(x,S_WID_CPUX_L1I,M_WID_CPUX_L1I)
    180  1.1  simonb 
    181  1.1  simonb #define S_WID_CPUX_L1D        2
    182  1.1  simonb #define M_WID_CPUX_L1D        _SB_MAKEMASK(2,S_WID_CPUX_L1D)
    183  1.1  simonb #define V_WID_CPUX_L1D(x)     _SB_MAKEVALUE(x,S_WID_CPUX_L1D)
    184  1.1  simonb #define G_WID_CPUX_L1D(x)     _SB_GETVALUE(x,S_WID_CPUX_L1D,M_WID_CPUX_L1D)
    185  1.1  simonb 
    186  1.1  simonb #define S_WID_CPU0	      5
    187  1.1  simonb #define S_WID_CPU1	      9
    188  1.1  simonb 
    189  1.1  simonb #define S_WID_WAFERID        13
    190  1.1  simonb #define M_WID_WAFERID        _SB_MAKEMASK(5,S_WID_WAFERID)
    191  1.1  simonb #define V_WID_WAFERID(x)     _SB_MAKEVALUE(x,S_WID_WAFERID)
    192  1.1  simonb #define G_WID_WAFERID(x)     _SB_GETVALUE(x,S_WID_WAFERID,M_WID_WAFERID)
    193  1.1  simonb 
    194  1.1  simonb #define S_WID_LOTID        18
    195  1.1  simonb #define M_WID_LOTID        _SB_MAKEMASK(14,S_WID_LOTID)
    196  1.1  simonb #define V_WID_LOTID(x)     _SB_MAKEVALUE(x,S_WID_LOTID)
    197  1.1  simonb #define G_WID_LOTID(x)     _SB_GETVALUE(x,S_WID_LOTID,M_WID_LOTID)
    198  1.1  simonb 
    199  1.1  simonb /*
    200  1.1  simonb  * Now, to make things even more confusing, the fuses on the chip
    201  1.1  simonb  * don't exactly correspond to the bits in the register. The mask
    202  1.1  simonb  * below represents bits that need to be swapped with the ones to
    203  1.1  simonb  * their left.  So, if bit 10 is set, swap bits 10 and 11
    204  1.1  simonb  */
    205  1.1  simonb 
    206  1.1  simonb #define M_WID_SWAPBITS	(_SB_MAKEMASK1(2) | _SB_MAKEMASK1(4) | _SB_MAKEMASK1(10) | \
    207  1.1  simonb                          _SB_MAKEMASK1(20) | _SB_MAKEMASK1(18) | _SB_MAKEMASK1(26) )
    208  1.1  simonb 
    209  1.1  simonb #ifdef __ASSEMBLER__
    210  1.1  simonb #define WID_UNCONVOLUTE(wid,t1,t2,t3) \
    211  1.1  simonb        li    t1,M_WID_SWAPBITS ; \
    212  1.1  simonb        and   t1,t1,wid ; \
    213  1.1  simonb        sll   t1,t1,1 ; \
    214  1.1  simonb        li    t2,(M_WID_SWAPBITS << 1); \
    215  1.1  simonb        and   t2,t2,wid ; \
    216  1.1  simonb        srl   t2,t2,1 ; \
    217  1.1  simonb        li    t3, ~((M_WID_SWAPBITS | (M_WID_SWAPBITS << 1))) ; \
    218  1.1  simonb        and   wid,wid,t3 ; \
    219  1.1  simonb        or    wid,wid,t1 ; \
    220  1.1  simonb        or    wid,wid,t2
    221  1.1  simonb #else
    222  1.1  simonb #define WID_UNCONVOLUTE(wid) \
    223  1.1  simonb      (((wid) & ~((M_WID_SWAPBITS | (M_WID_SWAPBITS << 1)))) | \
    224  1.1  simonb       (((wid) & M_WID_SWAPBITS) << 1) |  \
    225  1.1  simonb       (((wid) & (M_WID_SWAPBITS<<1)) >> 1))
    226  1.1  simonb #endif
    227  1.1  simonb 
    228  1.1  simonb 
    229  1.1  simonb 
    230  1.1  simonb #endif
    231