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