hc
2024-12-19 9370bb92b2d16684ee45cf24e879c93c509162da
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
/* SPDX-License-Identifier: GPL-2.0 */
/*
 * Broadcom SiliconBackplane hardware register definitions.
 *
 * Copyright (C) 1999-2017, Broadcom Corporation
 * 
 *      Unless you and Broadcom execute a separate written software license
 * agreement governing use of this software, this software is licensed to you
 * under the terms of the GNU General Public License version 2 (the "GPL"),
 * available at http://www.broadcom.com/licenses/GPLv2.php, with the
 * following added to such license:
 * 
 *      As a special exception, the copyright holders of this software give you
 * permission to link this software with independent modules, and to copy and
 * distribute the resulting executable under terms of your choice, provided that
 * you also meet, for each linked independent module, the terms and conditions of
 * the license of that module.  An independent module is a module which is not
 * derived from this software.  The special exception does not apply to any
 * modifications of the software.
 * 
 *      Notwithstanding the above, under no circumstances may you combine this
 * software in any way with any other Broadcom software provided under a license
 * other than the GPL, without Broadcom's express prior written consent.
 *
 *
 * <<Broadcom-WL-IPTag/Open:>>
 *
 * $Id: sbconfig.h 530150 2015-01-29 08:43:40Z $
 */
 
#ifndef    _SBCONFIG_H
#define    _SBCONFIG_H
 
/* cpp contortions to concatenate w/arg prescan */
#ifndef PAD
#define    _PADLINE(line)    pad ## line
#define    _XSTR(line)    _PADLINE(line)
#define    PAD        _XSTR(__LINE__)
#endif
 
/* enumeration in SB is based on the premise that cores are contiguos in the
 * enumeration space.
 */
#define SB_BUS_SIZE        0x10000        /**< Each bus gets 64Kbytes for cores */
#define SB_BUS_BASE(b)        (SI_ENUM_BASE + (b) * SB_BUS_SIZE)
#define    SB_BUS_MAXCORES        (SB_BUS_SIZE / SI_CORE_SIZE)    /**< Max cores per bus */
 
/*
 * Sonics Configuration Space Registers.
 */
#define    SBCONFIGOFF        0xf00        /**< core sbconfig regs are top 256bytes of regs */
#define    SBCONFIGSIZE        256        /**< sizeof (sbconfig_t) */
 
#define SBIPSFLAG        0x08
#define SBTPSFLAG        0x18
#define    SBTMERRLOGA        0x48        /**< sonics >= 2.3 */
#define    SBTMERRLOG        0x50        /**< sonics >= 2.3 */
#define SBADMATCH3        0x60
#define SBADMATCH2        0x68
#define SBADMATCH1        0x70
#define SBIMSTATE        0x90
#define SBINTVEC        0x94
#define SBTMSTATELOW        0x98
#define SBTMSTATEHIGH        0x9c
#define SBBWA0            0xa0
#define SBIMCONFIGLOW        0xa8
#define SBIMCONFIGHIGH        0xac
#define SBADMATCH0        0xb0
#define SBTMCONFIGLOW        0xb8
#define SBTMCONFIGHIGH        0xbc
#define SBBCONFIG        0xc0
#define SBBSTATE        0xc8
#define SBACTCNFG        0xd8
#define    SBFLAGST        0xe8
#define SBIDLOW            0xf8
#define SBIDHIGH        0xfc
 
/* All the previous registers are above SBCONFIGOFF, but with Sonics 2.3, we have
 * a few registers *below* that line. I think it would be very confusing to try
 * and change the value of SBCONFIGOFF, so I'm definig them as absolute offsets here,
 */
 
#define SBIMERRLOGA        0xea8
#define SBIMERRLOG        0xeb0
#define SBTMPORTCONNID0        0xed8
#define SBTMPORTLOCK0        0xef8
 
#if !defined(_LANGUAGE_ASSEMBLY) && !defined(__ASSEMBLY__)
 
typedef volatile struct _sbconfig {
   uint32    PAD[2];
   uint32    sbipsflag;        /**< initiator port ocp slave flag */
   uint32    PAD[3];
   uint32    sbtpsflag;        /**< target port ocp slave flag */
   uint32    PAD[11];
   uint32    sbtmerrloga;        /**< (sonics >= 2.3) */
   uint32    PAD;
   uint32    sbtmerrlog;        /**< (sonics >= 2.3) */
   uint32    PAD[3];
   uint32    sbadmatch3;        /**< address match3 */
   uint32    PAD;
   uint32    sbadmatch2;        /**< address match2 */
   uint32    PAD;
   uint32    sbadmatch1;        /**< address match1 */
   uint32    PAD[7];
   uint32    sbimstate;        /**< initiator agent state */
   uint32    sbintvec;        /**< interrupt mask */
   uint32    sbtmstatelow;        /**< target state */
   uint32    sbtmstatehigh;        /**< target state */
   uint32    sbbwa0;            /**< bandwidth allocation table0 */
   uint32    PAD;
   uint32    sbimconfiglow;        /**< initiator configuration */
   uint32    sbimconfighigh;        /**< initiator configuration */
   uint32    sbadmatch0;        /**< address match0 */
   uint32    PAD;
   uint32    sbtmconfiglow;        /**< target configuration */
   uint32    sbtmconfighigh;        /**< target configuration */
   uint32    sbbconfig;        /**< broadcast configuration */
   uint32    PAD;
   uint32    sbbstate;        /**< broadcast state */
   uint32    PAD[3];
   uint32    sbactcnfg;        /**< activate configuration */
   uint32    PAD[3];
   uint32    sbflagst;        /**< current sbflags */
   uint32    PAD[3];
   uint32    sbidlow;        /**< identification */
   uint32    sbidhigh;        /**< identification */
} sbconfig_t;
 
#endif /* !_LANGUAGE_ASSEMBLY && !__ASSEMBLY__ */
 
/* sbipsflag */
#define    SBIPS_INT1_MASK        0x3f        /**< which sbflags get routed to mips interrupt 1 */
#define    SBIPS_INT1_SHIFT    0
#define    SBIPS_INT2_MASK        0x3f00        /**< which sbflags get routed to mips interrupt 2 */
#define    SBIPS_INT2_SHIFT    8
#define    SBIPS_INT3_MASK        0x3f0000    /**< which sbflags get routed to mips interrupt 3 */
#define    SBIPS_INT3_SHIFT    16
#define    SBIPS_INT4_MASK        0x3f000000    /**< which sbflags get routed to mips interrupt 4 */
#define    SBIPS_INT4_SHIFT    24
 
/* sbtpsflag */
#define    SBTPS_NUM0_MASK        0x3f        /**< interrupt sbFlag # generated by this core */
#define    SBTPS_F0EN0        0x40        /**< interrupt is always sent on the backplane */
 
/* sbtmerrlog */
#define    SBTMEL_CM        0x00000007    /**< command */
#define    SBTMEL_CI        0x0000ff00    /**< connection id */
#define    SBTMEL_EC        0x0f000000    /**< error code */
#define    SBTMEL_ME        0x80000000    /**< multiple error */
 
/* sbimstate */
#define    SBIM_PC            0xf        /**< pipecount */
#define    SBIM_AP_MASK        0x30        /**< arbitration policy */
#define    SBIM_AP_BOTH        0x00        /**< use both timeslaces and token */
#define    SBIM_AP_TS        0x10        /**< use timesliaces only */
#define    SBIM_AP_TK        0x20        /**< use token only */
#define    SBIM_AP_RSV        0x30        /**< reserved */
#define    SBIM_IBE        0x20000        /**< inbanderror */
#define    SBIM_TO            0x40000        /**< timeout */
#define    SBIM_BY            0x01800000    /**< busy (sonics >= 2.3) */
#define    SBIM_RJ            0x02000000    /**< reject (sonics >= 2.3) */
 
/* sbtmstatelow */
#define    SBTML_RESET        0x0001        /**< reset */
#define    SBTML_REJ_MASK        0x0006        /**< reject field */
#define    SBTML_REJ        0x0002        /**< reject */
#define    SBTML_TMPREJ        0x0004        /**< temporary reject, for error recovery */
 
#define    SBTML_SICF_SHIFT    16    /**< Shift to locate the SI control flags in sbtml */
 
/* sbtmstatehigh */
#define    SBTMH_SERR        0x0001        /**< serror */
#define    SBTMH_INT        0x0002        /**< interrupt */
#define    SBTMH_BUSY        0x0004        /**< busy */
#define    SBTMH_TO        0x0020        /**< timeout (sonics >= 2.3) */
 
#define    SBTMH_SISF_SHIFT    16        /**< Shift to locate the SI status flags in sbtmh */
 
/* sbbwa0 */
#define    SBBWA_TAB0_MASK        0xffff        /**< lookup table 0 */
#define    SBBWA_TAB1_MASK        0xffff        /**< lookup table 1 */
#define    SBBWA_TAB1_SHIFT    16
 
/* sbimconfiglow */
#define    SBIMCL_STO_MASK        0x7        /**< service timeout */
#define    SBIMCL_RTO_MASK        0x70        /**< request timeout */
#define    SBIMCL_RTO_SHIFT    4
#define    SBIMCL_CID_MASK        0xff0000    /**< connection id */
#define    SBIMCL_CID_SHIFT    16
 
/* sbimconfighigh */
#define    SBIMCH_IEM_MASK        0xc        /**< inband error mode */
#define    SBIMCH_TEM_MASK        0x30        /**< timeout error mode */
#define    SBIMCH_TEM_SHIFT    4
#define    SBIMCH_BEM_MASK        0xc0        /**< bus error mode */
#define    SBIMCH_BEM_SHIFT    6
 
/* sbadmatch0 */
#define    SBAM_TYPE_MASK        0x3        /**< address type */
#define    SBAM_AD64        0x4        /**< reserved */
#define    SBAM_ADINT0_MASK    0xf8        /**< type0 size */
#define    SBAM_ADINT0_SHIFT    3
#define    SBAM_ADINT1_MASK    0x1f8        /**< type1 size */
#define    SBAM_ADINT1_SHIFT    3
#define    SBAM_ADINT2_MASK    0x1f8        /**< type2 size */
#define    SBAM_ADINT2_SHIFT    3
#define    SBAM_ADEN        0x400        /**< enable */
#define    SBAM_ADNEG        0x800        /**< negative decode */
#define    SBAM_BASE0_MASK        0xffffff00    /**< type0 base address */
#define    SBAM_BASE0_SHIFT    8
#define    SBAM_BASE1_MASK        0xfffff000    /**< type1 base address for the core */
#define    SBAM_BASE1_SHIFT    12
#define    SBAM_BASE2_MASK        0xffff0000    /**< type2 base address for the core */
#define    SBAM_BASE2_SHIFT    16
 
/* sbtmconfiglow */
#define    SBTMCL_CD_MASK        0xff        /**< clock divide */
#define    SBTMCL_CO_MASK        0xf800        /**< clock offset */
#define    SBTMCL_CO_SHIFT        11
#define    SBTMCL_IF_MASK        0xfc0000    /**< interrupt flags */
#define    SBTMCL_IF_SHIFT        18
#define    SBTMCL_IM_MASK        0x3000000    /**< interrupt mode */
#define    SBTMCL_IM_SHIFT        24
 
/* sbtmconfighigh */
#define    SBTMCH_BM_MASK        0x3        /**< busy mode */
#define    SBTMCH_RM_MASK        0x3        /**< retry mode */
#define    SBTMCH_RM_SHIFT        2
#define    SBTMCH_SM_MASK        0x30        /**< stop mode */
#define    SBTMCH_SM_SHIFT        4
#define    SBTMCH_EM_MASK        0x300        /**< sb error mode */
#define    SBTMCH_EM_SHIFT        8
#define    SBTMCH_IM_MASK        0xc00        /**< int mode */
#define    SBTMCH_IM_SHIFT        10
 
/* sbbconfig */
#define    SBBC_LAT_MASK        0x3        /**< sb latency */
#define    SBBC_MAX0_MASK        0xf0000        /**< maxccntr0 */
#define    SBBC_MAX0_SHIFT        16
#define    SBBC_MAX1_MASK        0xf00000    /**< maxccntr1 */
#define    SBBC_MAX1_SHIFT        20
 
/* sbbstate */
#define    SBBS_SRD        0x1        /**< st reg disable */
#define    SBBS_HRD        0x2        /**< hold reg disable */
 
/* sbidlow */
#define    SBIDL_CS_MASK        0x3        /**< config space */
#define    SBIDL_AR_MASK        0x38        /**< # address ranges supported */
#define    SBIDL_AR_SHIFT        3
#define    SBIDL_SYNCH        0x40        /**< sync */
#define    SBIDL_INIT        0x80        /**< initiator */
#define    SBIDL_MINLAT_MASK    0xf00        /**< minimum backplane latency */
#define    SBIDL_MINLAT_SHIFT    8
#define    SBIDL_MAXLAT        0xf000        /**< maximum backplane latency */
#define    SBIDL_MAXLAT_SHIFT    12
#define    SBIDL_FIRST        0x10000        /**< this initiator is first */
#define    SBIDL_CW_MASK        0xc0000        /**< cycle counter width */
#define    SBIDL_CW_SHIFT        18
#define    SBIDL_TP_MASK        0xf00000    /**< target ports */
#define    SBIDL_TP_SHIFT        20
#define    SBIDL_IP_MASK        0xf000000    /**< initiator ports */
#define    SBIDL_IP_SHIFT        24
#define    SBIDL_RV_MASK        0xf0000000    /**< sonics backplane revision code */
#define    SBIDL_RV_SHIFT        28
#define    SBIDL_RV_2_2        0x00000000    /**< version 2.2 or earlier */
#define    SBIDL_RV_2_3        0x10000000    /**< version 2.3 */
 
/* sbidhigh */
#define    SBIDH_RC_MASK        0x000f        /**< revision code */
#define    SBIDH_RCE_MASK        0x7000        /**< revision code extension field */
#define    SBIDH_RCE_SHIFT        8
#define    SBCOREREV(sbidh) \
   ((((sbidh) & SBIDH_RCE_MASK) >> SBIDH_RCE_SHIFT) | ((sbidh) & SBIDH_RC_MASK))
#define    SBIDH_CC_MASK        0x8ff0        /**< core code */
#define    SBIDH_CC_SHIFT        4
#define    SBIDH_VC_MASK        0xffff0000    /**< vendor code */
#define    SBIDH_VC_SHIFT        16
 
#define    SB_COMMIT        0xfd8        /**< update buffered registers value */
 
/* vendor codes */
#define    SB_VEND_BCM        0x4243        /**< Broadcom's SB vendor code */
 
#endif    /* _SBCONFIG_H */