Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/sys/dev/bhnd/bhndb/bhndb_pci_hwdata.c
39536 views
1
/*-
2
* Copyright (c) 2015 Landon Fuller <[email protected]>
3
* All rights reserved.
4
*
5
* Redistribution and use in source and binary forms, with or without
6
* modification, are permitted provided that the following conditions
7
* are met:
8
* 1. Redistributions of source code must retain the above copyright
9
* notice, this list of conditions and the following disclaimer,
10
* without modification.
11
* 2. Redistributions in binary form must reproduce at minimum a disclaimer
12
* similar to the "NO WARRANTY" disclaimer below ("Disclaimer") and any
13
* redistribution must be conditioned upon including a substantially
14
* similar Disclaimer requirement for further binary redistribution.
15
*
16
* NO WARRANTY
17
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19
* LIMITED TO, THE IMPLIED WARRANTIES OF NONINFRINGEMENT, MERCHANTIBILITY
20
* AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
21
* THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY,
22
* OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
25
* IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
27
* THE POSSIBILITY OF SUCH DAMAGES.
28
*/
29
30
#include <sys/cdefs.h>
31
/*
32
* Resource specifications and register maps for Broadcom PCI/PCIe cores
33
* configured as PCI-BHND bridges.
34
*/
35
36
#include <sys/param.h>
37
#include <sys/bus.h>
38
39
#include <machine/bus.h>
40
#include <sys/rman.h>
41
#include <machine/resource.h>
42
43
#include <dev/pci/pcireg.h>
44
#include <dev/pci/pcivar.h>
45
46
#include <dev/bhnd/cores/pci/bhnd_pcireg.h>
47
#include <dev/bhnd/cores/pcie2/bhnd_pcie2_reg.h>
48
49
#include "bhndbvar.h"
50
#include "bhndb_pcireg.h"
51
52
static const struct bhndb_hwcfg bhndb_pci_hwcfg_v0;
53
static const struct bhndb_hwcfg bhndb_pci_hwcfg_v1_pci;
54
static const struct bhndb_hwcfg bhndb_pci_hwcfg_v1_pcie;
55
static const struct bhndb_hwcfg bhndb_pci_hwcfg_v2;
56
static const struct bhndb_hwcfg bhndb_pci_hwcfg_v3;
57
58
/**
59
* Define a bhndb_hw match entry.
60
*
61
* @param _name The entry name.
62
* @param _vers The configuration version associated with this entry.
63
*/
64
#define BHNDB_HW_MATCH(_name, _vers, ...) { \
65
.name = _name, \
66
.hw_reqs = _BHNDB_HW_REQ_ARRAY(__VA_ARGS__), \
67
.num_hw_reqs = (sizeof(_BHNDB_HW_REQ_ARRAY(__VA_ARGS__)) / \
68
sizeof(_BHNDB_HW_REQ_ARRAY(__VA_ARGS__)[0])), \
69
.cfg = &bhndb_pci_hwcfg_ ## _vers \
70
}
71
#define _BHNDB_HW_REQ_ARRAY(...) (struct bhnd_core_match[]) { __VA_ARGS__ }
72
73
/**
74
* Generic PCI-SIBA bridge configuration usable with all known siba(4)-based
75
* PCI devices; this configuration is adequate for enumerating a bridged
76
* siba(4) bus to determine the full hardware configuration.
77
*
78
* @par Compatibility
79
* - Compatible with PCI_V0, PCI_V1, PCI_V2, and PCI_V3 devices.
80
* - Compatible with siba(4) bus enumeration.
81
* - Compatible with bcma(4) bus enumeration if the ChipCommon core is mapped
82
* at the default enumeration address (0x18000000).
83
*/
84
const struct bhndb_hwcfg bhndb_pci_siba_generic_hwcfg = {
85
.resource_specs = (const struct resource_spec[]) {
86
{ SYS_RES_MEMORY, PCIR_BAR(0), RF_ACTIVE },
87
{ -1, 0, 0 }
88
},
89
90
.register_windows = (const struct bhndb_regwin[]) {
91
/* bar0+0x0000: configurable backplane window */
92
{
93
.win_type = BHNDB_REGWIN_T_DYN,
94
.win_offset = BHNDB_PCI_V1_BAR0_WIN0_OFFSET,
95
.win_size = BHNDB_PCI_V1_BAR0_WIN0_SIZE,
96
.d.dyn = {
97
.cfg_offset = BHNDB_PCI_V1_BAR0_WIN0_CONTROL
98
},
99
.res = { SYS_RES_MEMORY, PCIR_BAR(0) }
100
},
101
BHNDB_REGWIN_TABLE_END
102
},
103
104
/* DMA unsupported under generic configuration */
105
.dma_translations = NULL,
106
};
107
108
/**
109
* Generic PCI-BCMA bridge configuration usable with all known bcma(4)-based
110
* PCI devices; this configuration is adequate for enumerating a bridged
111
* bcma(4) bus to determine the full hardware configuration.
112
*
113
* @par Compatibility
114
* - Compatible with PCI_V1, PCI_V2, and PCI_V3 devices.
115
* - Compatible with both siba(4) and bcma(4) bus enumeration.
116
*/
117
const struct bhndb_hwcfg bhndb_pci_bcma_generic_hwcfg = {
118
.resource_specs = (const struct resource_spec[]) {
119
{ SYS_RES_MEMORY, PCIR_BAR(0), RF_ACTIVE },
120
{ -1, 0, 0 }
121
},
122
123
.register_windows = (const struct bhndb_regwin[]) {
124
/* bar0+0x0000: configurable backplane window */
125
{
126
.win_type = BHNDB_REGWIN_T_DYN,
127
.win_offset = BHNDB_PCI_V1_BAR0_WIN0_OFFSET,
128
.win_size = BHNDB_PCI_V1_BAR0_WIN0_SIZE,
129
.d.dyn = {
130
.cfg_offset = BHNDB_PCI_V1_BAR0_WIN0_CONTROL,
131
},
132
.res = { SYS_RES_MEMORY, PCIR_BAR(0) }
133
},
134
135
/* bar0+0x3000: chipc core registers */
136
{
137
.win_type = BHNDB_REGWIN_T_CORE,
138
.win_offset = BHNDB_PCI_V1_BAR0_CCREGS_OFFSET,
139
.win_size = BHNDB_PCI_V1_BAR0_CCREGS_SIZE,
140
.d.core = {
141
.class = BHND_DEVCLASS_CC,
142
.unit = 0,
143
.port = 0,
144
.region = 0,
145
.port_type = BHND_PORT_DEVICE
146
},
147
.res = { SYS_RES_MEMORY, PCIR_BAR(0) }
148
},
149
150
BHNDB_REGWIN_TABLE_END
151
},
152
153
/* DMA unsupported under generic configuration */
154
.dma_translations = NULL,
155
};
156
157
/**
158
* Hardware configuration tables for Broadcom HND PCI NICs.
159
*/
160
const struct bhndb_hw bhndb_pci_generic_hw_table[] = {
161
/* PCI/V0 WLAN */
162
BHNDB_HW_MATCH("PCI/v0 WLAN", v0,
163
/* PCI Core */
164
{
165
BHND_MATCH_CORE_VENDOR (BHND_MFGID_BCM),
166
BHND_MATCH_CORE_ID (BHND_COREID_PCI),
167
BHND_MATCH_CORE_REV(
168
HWREV_LTE (BHNDB_PCI_V0_MAX_PCI_HWREV)),
169
BHND_MATCH_CORE_CLASS (BHND_DEVCLASS_PCI),
170
BHND_MATCH_CORE_UNIT (0)
171
},
172
173
/* 802.11 Core */
174
{
175
BHND_MATCH_CORE_VENDOR (BHND_MFGID_BCM),
176
BHND_MATCH_CORE_CLASS (BHND_DEVCLASS_WLAN),
177
BHND_MATCH_CORE_UNIT (0)
178
}
179
),
180
181
/* PCI/V1 WLAN */
182
BHNDB_HW_MATCH("PCI/v1 WLAN", v1_pci,
183
/* PCI Core */
184
{
185
BHND_MATCH_CORE_VENDOR (BHND_MFGID_BCM),
186
BHND_MATCH_CORE_ID (BHND_COREID_PCI),
187
BHND_MATCH_CORE_REV(
188
HWREV_GTE (BHNDB_PCI_V1_MIN_PCI_HWREV)),
189
BHND_MATCH_CORE_CLASS (BHND_DEVCLASS_PCI),
190
BHND_MATCH_CORE_UNIT (0)
191
},
192
193
/* 802.11 Core */
194
{
195
BHND_MATCH_CORE_VENDOR (BHND_MFGID_BCM),
196
BHND_MATCH_CORE_CLASS (BHND_DEVCLASS_WLAN),
197
BHND_MATCH_CORE_UNIT (0)
198
}
199
),
200
201
/* PCIE/V1 WLAN */
202
BHNDB_HW_MATCH("PCIe/v1 WLAN", v1_pcie,
203
/* PCIe Core */
204
{
205
BHND_MATCH_CORE_VENDOR (BHND_MFGID_BCM),
206
BHND_MATCH_CORE_ID (BHND_COREID_PCIE),
207
BHND_MATCH_CORE_CLASS (BHND_DEVCLASS_PCIE),
208
BHND_MATCH_CORE_UNIT (0)
209
},
210
211
/* ChipCommon (revision <= 31) */
212
{
213
BHND_MATCH_CORE_VENDOR (BHND_MFGID_BCM),
214
BHND_MATCH_CORE_ID (BHND_COREID_CC),
215
BHND_MATCH_CORE_REV(
216
HWREV_LTE (BHNDB_PCI_V1_MAX_CHIPC_HWREV)),
217
BHND_MATCH_CORE_CLASS (BHND_DEVCLASS_CC),
218
BHND_MATCH_CORE_UNIT (0)
219
},
220
221
/* 802.11 Core */
222
{
223
BHND_MATCH_CORE_VENDOR (BHND_MFGID_BCM),
224
BHND_MATCH_CORE_CLASS (BHND_DEVCLASS_WLAN),
225
BHND_MATCH_CORE_UNIT (0)
226
}
227
),
228
229
/* PCIE/V2 WLAN */
230
BHNDB_HW_MATCH("PCIe/v2 WLAN", v2,
231
/* PCIe Core */
232
{
233
BHND_MATCH_CORE_VENDOR (BHND_MFGID_BCM),
234
BHND_MATCH_CORE_ID (BHND_COREID_PCIE),
235
BHND_MATCH_CORE_CLASS (BHND_DEVCLASS_PCIE),
236
BHND_MATCH_CORE_UNIT (0)
237
},
238
239
/* ChipCommon (revision >= 32) */
240
{
241
BHND_MATCH_CORE_VENDOR (BHND_MFGID_BCM),
242
BHND_MATCH_CORE_ID (BHND_COREID_CC),
243
BHND_MATCH_CORE_REV(
244
HWREV_GTE (BHNDB_PCI_V2_MIN_CHIPC_HWREV)),
245
BHND_MATCH_CORE_CLASS (BHND_DEVCLASS_CC),
246
BHND_MATCH_CORE_UNIT (0)
247
},
248
249
/* 802.11 Core */
250
{
251
BHND_MATCH_CORE_VENDOR (BHND_MFGID_BCM),
252
BHND_MATCH_CORE_CLASS (BHND_DEVCLASS_WLAN),
253
BHND_MATCH_CORE_UNIT (0)
254
}
255
),
256
257
/* PCIE/V3 WLAN */
258
BHNDB_HW_MATCH("PCIe-Gen2/v3 WLAN", v3,
259
/* PCIe Gen2 Core */
260
{
261
BHND_MATCH_CORE_VENDOR (BHND_MFGID_BCM),
262
BHND_MATCH_CORE_ID (BHND_COREID_PCIE2),
263
BHND_MATCH_CORE_CLASS (BHND_DEVCLASS_PCIE),
264
BHND_MATCH_CORE_UNIT (0)
265
},
266
267
/* 802.11 Core */
268
{
269
BHND_MATCH_CORE_VENDOR (BHND_MFGID_BCM),
270
BHND_MATCH_CORE_CLASS (BHND_DEVCLASS_WLAN),
271
BHND_MATCH_CORE_UNIT (0)
272
}
273
),
274
{ NULL, NULL, 0, NULL }
275
};
276
277
/**
278
* PCI_V0 hardware configuration.
279
*
280
* Applies to:
281
* - PCI (cid=0x804, revision <= 12)
282
*/
283
static const struct bhndb_hwcfg bhndb_pci_hwcfg_v0 = {
284
.resource_specs = (const struct resource_spec[]) {
285
{ SYS_RES_MEMORY, PCIR_BAR(0), RF_ACTIVE },
286
{ -1, 0, 0 }
287
},
288
289
.register_windows = (const struct bhndb_regwin[]) {
290
/* bar0+0x0000: configurable backplane window */
291
{
292
.win_type = BHNDB_REGWIN_T_DYN,
293
.win_offset = BHNDB_PCI_V0_BAR0_WIN0_OFFSET,
294
.win_size = BHNDB_PCI_V0_BAR0_WIN0_SIZE,
295
.d.dyn = {
296
.cfg_offset = BHNDB_PCI_V0_BAR0_WIN0_CONTROL
297
},
298
.res = { SYS_RES_MEMORY, PCIR_BAR(0) }
299
},
300
301
/* bar0+0x1000: sprom shadow */
302
{
303
.win_type = BHNDB_REGWIN_T_SPROM,
304
.win_offset = BHNDB_PCI_V0_BAR0_SPROM_OFFSET,
305
.win_size = BHNDB_PCI_V0_BAR0_SPROM_SIZE,
306
.res = { SYS_RES_MEMORY, PCIR_BAR(0) }
307
},
308
309
/*
310
* bar0+0x1800: pci core registers.
311
*
312
* Does not include the SSB CFG registers found at the end of
313
* the 4K core register block; these are mapped non-contigiously
314
* by the next entry.
315
*/
316
{
317
.win_type = BHNDB_REGWIN_T_CORE,
318
.win_offset = BHNDB_PCI_V0_BAR0_PCIREG_OFFSET,
319
.win_size = BHNDB_PCI_V0_BAR0_PCIREG_SIZE,
320
.d.core = {
321
.class = BHND_DEVCLASS_PCI,
322
.unit = 0,
323
.port = 0,
324
.region = 0,
325
.port_type = BHND_PORT_DEVICE,
326
},
327
.res = { SYS_RES_MEMORY, PCIR_BAR(0) }
328
},
329
330
/* bar0+0x1E00: pci core (SSB CFG registers) */
331
{
332
.win_type = BHNDB_REGWIN_T_CORE,
333
.win_offset = BHNDB_PCI_V0_BAR0_PCISB_OFFSET ,
334
.win_size = BHNDB_PCI_V0_BAR0_PCISB_SIZE,
335
.d.core = {
336
.class = BHND_DEVCLASS_PCI,
337
.unit = 0,
338
.port = 0,
339
.region = 0,
340
.offset = BHNDB_PCI_V0_BAR0_PCISB_COREOFF,
341
.port_type = BHND_PORT_DEVICE
342
},
343
.res = { SYS_RES_MEMORY, PCIR_BAR(0) }
344
},
345
346
BHNDB_REGWIN_TABLE_END
347
},
348
349
.dma_translations = (const struct bhnd_dma_translation[]) {
350
{
351
.base_addr = BHND_PCI_DMA32_TRANSLATION,
352
.addr_mask = ~BHND_PCI_DMA32_MASK,
353
.addrext_mask = BHND_PCI_DMA32_MASK
354
},
355
BHND_DMA_TRANSLATION_TABLE_END
356
}
357
};
358
359
/**
360
* PCI_V1 (PCI-only) hardware configuration (PCI version)
361
*
362
* Applies to:
363
* - PCI (cid=0x804, revision >= 13)
364
*/
365
static const struct bhndb_hwcfg bhndb_pci_hwcfg_v1_pci = {
366
.resource_specs = (const struct resource_spec[]) {
367
{ SYS_RES_MEMORY, PCIR_BAR(0), RF_ACTIVE },
368
{ -1, 0, 0 }
369
},
370
371
.register_windows = (const struct bhndb_regwin[]) {
372
/* bar0+0x0000: configurable backplane window */
373
{
374
.win_type = BHNDB_REGWIN_T_DYN,
375
.win_offset = BHNDB_PCI_V1_BAR0_WIN0_OFFSET,
376
.win_size = BHNDB_PCI_V1_BAR0_WIN0_SIZE,
377
.d.dyn = {
378
.cfg_offset = BHNDB_PCI_V1_BAR0_WIN0_CONTROL
379
},
380
.res = { SYS_RES_MEMORY, PCIR_BAR(0) }
381
},
382
383
/* bar0+0x1000: sprom shadow */
384
{
385
.win_type = BHNDB_REGWIN_T_SPROM,
386
.win_offset = BHNDB_PCI_V1_BAR0_SPROM_OFFSET,
387
.win_size = BHNDB_PCI_V1_BAR0_SPROM_SIZE,
388
.res = { SYS_RES_MEMORY, PCIR_BAR(0) }
389
},
390
391
/* bar0+0x2000: pci core registers */
392
{
393
.win_type = BHNDB_REGWIN_T_CORE,
394
.win_offset = BHNDB_PCI_V1_BAR0_PCIREG_OFFSET,
395
.win_size = BHNDB_PCI_V1_BAR0_PCIREG_SIZE,
396
.d.core = {
397
.class = BHND_DEVCLASS_PCI,
398
.unit = 0,
399
.port = 0,
400
.region = 0,
401
.port_type = BHND_PORT_DEVICE
402
},
403
.res = { SYS_RES_MEMORY, PCIR_BAR(0) }
404
},
405
406
/* bar0+0x3000: chipc core registers */
407
{
408
.win_type = BHNDB_REGWIN_T_CORE,
409
.win_offset = BHNDB_PCI_V1_BAR0_CCREGS_OFFSET,
410
.win_size = BHNDB_PCI_V1_BAR0_CCREGS_SIZE,
411
.d.core = {
412
.class = BHND_DEVCLASS_CC,
413
.unit = 0,
414
.port = 0,
415
.region = 0,
416
.port_type = BHND_PORT_DEVICE
417
},
418
.res = { SYS_RES_MEMORY, PCIR_BAR(0) }
419
},
420
421
BHNDB_REGWIN_TABLE_END
422
},
423
424
.dma_translations = (const struct bhnd_dma_translation[]) {
425
{
426
.base_addr = BHND_PCI_DMA32_TRANSLATION,
427
.addr_mask = ~BHND_PCI_DMA32_MASK,
428
.addrext_mask = BHND_PCI_DMA32_MASK
429
},
430
BHND_DMA_TRANSLATION_TABLE_END
431
}
432
};
433
434
/**
435
* PCI_V1 hardware configuration (PCIE version).
436
*
437
* Applies to:
438
* - PCIE (cid=0x820) with ChipCommon (revision <= 31)
439
*/
440
static const struct bhndb_hwcfg bhndb_pci_hwcfg_v1_pcie = {
441
.resource_specs = (const struct resource_spec[]) {
442
{ SYS_RES_MEMORY, PCIR_BAR(0), RF_ACTIVE },
443
{ -1, 0, 0 }
444
},
445
446
.register_windows = (const struct bhndb_regwin[]) {
447
/* bar0+0x0000: configurable backplane window */
448
{
449
.win_type = BHNDB_REGWIN_T_DYN,
450
.win_offset = BHNDB_PCI_V1_BAR0_WIN0_OFFSET,
451
.win_size = BHNDB_PCI_V1_BAR0_WIN0_SIZE,
452
.d.dyn = {
453
.cfg_offset = BHNDB_PCI_V1_BAR0_WIN0_CONTROL
454
},
455
.res = { SYS_RES_MEMORY, PCIR_BAR(0) }
456
},
457
458
/* bar0+0x1000: sprom shadow */
459
{
460
.win_type = BHNDB_REGWIN_T_SPROM,
461
.win_offset = BHNDB_PCI_V1_BAR0_SPROM_OFFSET,
462
.win_size = BHNDB_PCI_V1_BAR0_SPROM_SIZE,
463
.res = { SYS_RES_MEMORY, PCIR_BAR(0) }
464
},
465
466
/* bar0+0x2000: pci core registers */
467
{
468
.win_type = BHNDB_REGWIN_T_CORE,
469
.win_offset = BHNDB_PCI_V1_BAR0_PCIREG_OFFSET,
470
.win_size = BHNDB_PCI_V1_BAR0_PCIREG_SIZE,
471
.d.core = {
472
.class = BHND_DEVCLASS_PCIE,
473
.unit = 0,
474
.port = 0,
475
.region = 0,
476
.port_type = BHND_PORT_DEVICE
477
},
478
.res = { SYS_RES_MEMORY, PCIR_BAR(0) }
479
},
480
481
/* bar0+0x3000: chipc core registers */
482
{
483
.win_type = BHNDB_REGWIN_T_CORE,
484
.win_offset = BHNDB_PCI_V1_BAR0_CCREGS_OFFSET,
485
.win_size = BHNDB_PCI_V1_BAR0_CCREGS_SIZE,
486
.d.core = {
487
.class = BHND_DEVCLASS_CC,
488
.unit = 0,
489
.port = 0,
490
.region = 0,
491
.port_type = BHND_PORT_DEVICE
492
},
493
.res = { SYS_RES_MEMORY, PCIR_BAR(0) }
494
},
495
496
BHNDB_REGWIN_TABLE_END
497
},
498
499
.dma_translations = (const struct bhnd_dma_translation[]) {
500
{
501
.base_addr = BHND_PCIE_DMA32_TRANSLATION,
502
.addr_mask = ~BHND_PCIE_DMA32_MASK,
503
.addrext_mask = BHND_PCIE_DMA32_MASK
504
},
505
{
506
.base_addr = BHND_PCIE_DMA64_TRANSLATION,
507
.addr_mask = ~BHND_PCIE_DMA64_MASK,
508
.addrext_mask = BHND_PCIE_DMA64_MASK
509
},
510
BHND_DMA_TRANSLATION_TABLE_END
511
}
512
};
513
514
/**
515
* PCI_V2 hardware configuration.
516
*
517
* Applies to:
518
* - PCIE (cid=0x820) with ChipCommon (revision >= 32)
519
*/
520
static const struct bhndb_hwcfg bhndb_pci_hwcfg_v2 = {
521
.resource_specs = (const struct resource_spec[]) {
522
{ SYS_RES_MEMORY, PCIR_BAR(0), RF_ACTIVE },
523
{ -1, 0, 0 }
524
},
525
526
.register_windows = (const struct bhndb_regwin[]) {
527
/* bar0+0x0000: configurable backplane window */
528
{
529
.win_type = BHNDB_REGWIN_T_DYN,
530
.win_offset = BHNDB_PCI_V2_BAR0_WIN0_OFFSET,
531
.win_size = BHNDB_PCI_V2_BAR0_WIN0_SIZE,
532
.d.dyn = {
533
.cfg_offset = BHNDB_PCI_V2_BAR0_WIN0_CONTROL,
534
},
535
.res = { SYS_RES_MEMORY, PCIR_BAR(0) }
536
},
537
538
/* bar0+0x1000: configurable backplane window */
539
{
540
.win_type = BHNDB_REGWIN_T_DYN,
541
.win_offset = BHNDB_PCI_V2_BAR0_WIN1_OFFSET,
542
.win_size = BHNDB_PCI_V2_BAR0_WIN1_SIZE,
543
.d.dyn = {
544
.cfg_offset = BHNDB_PCI_V2_BAR0_WIN1_CONTROL,
545
},
546
.res = { SYS_RES_MEMORY, PCIR_BAR(0) }
547
},
548
549
/* bar0+0x2000: pcie core registers */
550
{
551
.win_type = BHNDB_REGWIN_T_CORE,
552
.win_offset = BHNDB_PCI_V2_BAR0_PCIREG_OFFSET,
553
.win_size = BHNDB_PCI_V2_BAR0_PCIREG_SIZE,
554
.d.core = {
555
.class = BHND_DEVCLASS_PCIE,
556
.unit = 0,
557
.port = 0,
558
.region = 0,
559
.port_type = BHND_PORT_DEVICE
560
},
561
.res = { SYS_RES_MEMORY, PCIR_BAR(0) }
562
},
563
564
/* bar0+0x3000: chipc core registers */
565
{
566
.win_type = BHNDB_REGWIN_T_CORE,
567
.win_offset = BHNDB_PCI_V2_BAR0_CCREGS_OFFSET,
568
.win_size = BHNDB_PCI_V2_BAR0_CCREGS_SIZE,
569
.d.core = {
570
.class = BHND_DEVCLASS_CC,
571
.unit = 0,
572
.port = 0,
573
.region = 0,
574
.port_type = BHND_PORT_DEVICE
575
},
576
.res = { SYS_RES_MEMORY, PCIR_BAR(0) }
577
},
578
579
BHNDB_REGWIN_TABLE_END
580
},
581
582
.dma_translations = (const struct bhnd_dma_translation[]) {
583
{
584
.base_addr = BHND_PCIE_DMA32_TRANSLATION,
585
.addr_mask = ~BHND_PCIE_DMA32_MASK,
586
.addrext_mask = BHND_PCIE_DMA32_MASK
587
},
588
{
589
.base_addr = BHND_PCIE_DMA64_TRANSLATION,
590
.addr_mask = ~BHND_PCIE_DMA64_MASK,
591
.addrext_mask = BHND_PCIE_DMA64_MASK
592
},
593
BHND_DMA_TRANSLATION_TABLE_END
594
}
595
};
596
597
/**
598
* PCI_V3 hardware configuration.
599
*
600
* Applies to:
601
* - PCIE2 (cid=0x83c)
602
*/
603
static const struct bhndb_hwcfg bhndb_pci_hwcfg_v3 = {
604
.resource_specs = (const struct resource_spec[]) {
605
{ SYS_RES_MEMORY, PCIR_BAR(0), RF_ACTIVE },
606
{ -1, 0, 0 }
607
},
608
609
.register_windows = (const struct bhndb_regwin[]) {
610
/* bar0+0x0000: configurable backplane window */
611
{
612
.win_type = BHNDB_REGWIN_T_DYN,
613
.win_offset = BHNDB_PCI_V3_BAR0_WIN0_OFFSET,
614
.win_size = BHNDB_PCI_V3_BAR0_WIN0_SIZE,
615
.d.dyn = {
616
.cfg_offset = BHNDB_PCI_V3_BAR0_WIN0_CONTROL,
617
},
618
.res = { SYS_RES_MEMORY, PCIR_BAR(0) }
619
},
620
621
/* bar0+0x1000: configurable backplane window */
622
{
623
.win_type = BHNDB_REGWIN_T_DYN,
624
.win_offset = BHNDB_PCI_V3_BAR0_WIN1_OFFSET,
625
.win_size = BHNDB_PCI_V3_BAR0_WIN1_SIZE,
626
.d.dyn = {
627
.cfg_offset = BHNDB_PCI_V3_BAR0_WIN1_CONTROL,
628
},
629
.res = { SYS_RES_MEMORY, PCIR_BAR(0) }
630
},
631
632
/* bar0+0x2000: pcie core registers */
633
{
634
.win_type = BHNDB_REGWIN_T_CORE,
635
.win_offset = BHNDB_PCI_V3_BAR0_PCIREG_OFFSET,
636
.win_size = BHNDB_PCI_V3_BAR0_PCIREG_SIZE,
637
.d.core = {
638
.class = BHND_DEVCLASS_PCIE,
639
.unit = 0,
640
.port = 0,
641
.region = 0,
642
.port_type = BHND_PORT_DEVICE
643
},
644
.res = { SYS_RES_MEMORY, PCIR_BAR(0) }
645
},
646
647
/* bar0+0x3000: chipc core registers */
648
{
649
.win_type = BHNDB_REGWIN_T_CORE,
650
.win_offset = BHNDB_PCI_V3_BAR0_CCREGS_OFFSET,
651
.win_size = BHNDB_PCI_V3_BAR0_CCREGS_SIZE,
652
.d.core = {
653
.class = BHND_DEVCLASS_CC,
654
.unit = 0,
655
.port = 0,
656
.region = 0,
657
.port_type = BHND_PORT_DEVICE
658
},
659
.res = { SYS_RES_MEMORY, PCIR_BAR(0) }
660
},
661
662
BHNDB_REGWIN_TABLE_END
663
},
664
665
.dma_translations = (const struct bhnd_dma_translation[]) {
666
{
667
.base_addr = BHND_PCIE2_DMA64_TRANSLATION,
668
.addr_mask = ~BHND_PCIE2_DMA64_MASK,
669
.addrext_mask = BHND_PCIE_DMA64_MASK
670
},
671
BHND_DMA_TRANSLATION_TABLE_END
672
}
673
};
674
675