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