summaryrefslogtreecommitdiff
path: root/ReferenceCode/Chipset/LynxPoint/Include/PchRegs/PchRegsUsb.h
blob: 12eaa9dcfa710ec2b4cfdedca13ffa3685d5c4b6 (plain)
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
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
/** @file
  Register names for PCH USB devices

  Conventions:

  - Prefixes:
    Definitions beginning with "R_" are registers
    Definitions beginning with "B_" are bits within registers
    Definitions beginning with "V_" are meaningful values of bits within the registers
    Definitions beginning with "S_" are register sizes
    Definitions beginning with "N_" are the bit position
  - In general, PCH registers are denoted by "_PCH_" in register names
  - Registers / bits that are different between PCH generations are denoted by
    "_PCH_<generation_name>_" in register/bit names. e.g., "_PCH_LPT_"
  - Registers / bits that are different between SKUs are denoted by "_<SKU_name>"
    at the end of the register/bit names
  - Registers / bits of new devices introduced in a PCH generation will be just named
    as "_PCH_" without <generation_name> inserted.

@copyright
  Copyright (c) 1999 - 2013 Intel Corporation. All rights reserved
  This software and associated documentation (if any) is furnished
  under a license and may only be used or copied in accordance
  with the terms of the license. Except as permitted by such
  license, no part of this software or documentation may be
  reproduced, stored in a retrieval system, or transmitted in any
  form or by any means without the express written consent of
  Intel Corporation.

  This file contains an 'Intel Peripheral Driver' and uniquely
  identified as "Intel Reference Module" and is
  licensed for Intel CPUs and chipsets under the terms of your
  license agreement with Intel or your vendor.  This file may
  be modified by the user, subject to additional terms of the
  license agreement
**/
#ifndef _PCH_REGS_USB_H_
#define _PCH_REGS_USB_H_

//
// USB Definitions
//
#define LPTH_USB_MAX_PHYSICAL_PORTS         14      ///< Max Physical Connector EHCI + XHCI, not counting virtual ports like USB-R.
#define LPTH_EHCI_MAX_CONTROLLERS           2       ///< Max EHCI Controllers
#define LPTH_EHCI_MAX_PORTS                 14      ///< Counting ports behind RMHs 8 from EHCI-1 and 6 from EHCI-2, not counting EHCI USB-R virtual ports.
#define LPTH_XHCI_MAX_USB2_PORTS            15      ///< 14 High Speed lanes + Including one port reserved for USBr
#define LPTH_XHCI_MAX_USB3_PORTS            6       ///< 6 Super Speed lanes
#define LPTLP_USB_MAX_PHYSICAL_PORTS        8       ///< Max Physical Connector EHCI + XHCI, not counting virtual ports like USB-R.
#define LPTLP_EHCI_MAX_PORTS                8       ///< Counting ports behind RMHs 8 from EHCI-1 and 6 from EHCI-2, not counting EHCI USB-R virtual ports.
#define LPTLP_EHCI_MAX_CONTROLLERS          1       ///< Max EHCI Controllers
#define LPTLP_XHCI_MAX_USB2_PORTS           9       ///< 8 High Speed lanes + Including one port reserved for USBr
#define LPTLP_XHCI_MAX_USB3_PORTS           4       ///< 4 Super Speed lanes

#define R_PCH_USB_VENDOR_ID                 0x00
#define V_PCH_USB_VENDOR_ID                 V_PCH_INTEL_VENDOR_ID
#define R_PCH_USB_DEVICE_ID                 0x02
#define V_PCH_LPTH_USB_DEVICE_ID_EHCI_1      0x8C26  ///< LPT EHCI#1
#define V_PCH_LPTH_USB_DEVICE_ID_EHCI_2      0x8C2D  ///< LPT EHCI#2
#define V_PCH_LPTH_USB_DEVICE_ID_XHCI_1      0x8C31  ///< LPT XHCI#1
#define V_PCH_LPTLP_USB_DEVICE_ID_EHCI_1     0x9C26  ///< LPTLP EHCI#1
#define V_PCH_LPTLP_USB_DEVICE_ID_XHCI_1     0x9C31  ///< LPTLP XHCI#1

//
// USB2 (EHCI) related definitions
//
typedef enum {
  PchEhci1            = 0,
  PchEhci2,
  PchEhciControllerMax
} PCH_USB20_CONTROLLER_TYPE;

#define PCI_DEVICE_NUMBER_PCH_USB           29
#define PCI_FUNCTION_NUMBER_PCH_EHCI        0

#define PCI_DEVICE_NUMBER_PCH_USB_EXT       26
#define PCI_FUNCTION_NUMBER_PCH_EHCI2       0

//
// EHCI PCI Config Space registers
//
#define R_PCH_EHCI_COMMAND_REGISTER         0x04
#define B_PCH_EHCI_COMMAND_INTR_DIS         BIT10
#define B_PCH_EHCI_COMMAND_FBE              BIT9
#define B_PCH_EHCI_COMMAND_SERR_EN          BIT8
#define B_PCH_EHCI_COMMAND_WCC              BIT7
#define B_PCH_EHCI_COMMAND_PER              BIT6
#define B_PCH_EHCI_COMMAND_VPS              BIT5
#define B_PCH_EHCI_COMMAND_PMWE             BIT4
#define B_PCH_EHCI_COMMAND_SCE              BIT3
#define B_PCH_EHCI_COMMAND_BME              BIT2
#define B_PCH_EHCI_COMMAND_MSE              BIT1
#define B_PCH_EHCI_COMMAND_IOSE             BIT0

#define R_PCH_EHCI_PCISTS                   0x06
#define B_PCH_EHCI_PCISTS_DPE               BIT15
#define B_PCH_EHCI_PCISTS_SSE               BIT14
#define B_PCH_EHCI_PCISTS_RMA               BIT13
#define B_PCH_EHCI_PCISTS_RTA               BIT12
#define B_PCH_EHCI_PCISTS_STA               BIT11
#define B_PCH_EHCI_PCISTS_DEV_STS           (BIT10 | BIT9)
#define B_PCH_EHCI_PCISTS_DPED              BIT8
#define B_PCH_EHCI_PCISTS_FB2BC             BIT7
#define B_PCH_EHCI_PCISTS_UDF               BIT6
#define B_PCH_EHCI_PCISTS_66MHZ_CAP         BIT5
#define B_PCH_EHCI_PCISTS_CAP_LST           BIT4
#define B_PCH_EHCI_PCISTS_INTR_STS          BIT3

#define R_PCH_EHCI_RID                      0x08
#define B_PCH_EHCI_RID                      0xFF
#define R_PCH_EHCI_PI                       0x09
#define B_PCH_EHCI_PI                       0xFF
#define R_PCH_EHCI_SCC                      0x0A
#define B_PCH_EHCI_SCC                      0xFF
#define R_PCH_EHCI_BCC                      0x0B
#define B_PCH_EHCI_BCC                      0xFF
#define R_PCH_EHCI_MLT                      0x0D
#define B_PCH_EHCI_MLT                      0xFF
#define R_PCH_EHCI_HEADTYPE                 0x0E
#define B_PCH_EHCI_HEADTYPE                 0xFF
#define R_PCH_EHCI_MEM_BASE                 0x10
#define V_PCH_EHCI_MEM_LENGTH               0x400
#define N_PCH_EHCI_MEM_ALIGN                10
#define R_PCH_EHCI_SVID                     0x2C
#define B_PCH_EHCI_SVID                     0xFFFF
#define R_PCH_EHCI_SID                      0x2E
#define B_PCH_EHCI_SID                      0xFFFF
#define R_PCH_EHCI_CAP_PTR                  0x34
#define B_PCH_EHCI_CAP_PTR                  0xFF
#define R_PCH_EHCI_INT_LN                   0x3C
#define B_PCH_EHCI_INT_LN                   0xFF
#define R_PCH_EHCI_INT_PN                   0x3D
#define B_PCH_EHCI_INT_PN                   0xFF
#define R_PCH_EHCI_IHFCLK                   0x44
#define B_PCH_EHCI_IHFCLK                   0xFFFFFFFF
#define R_PCH_EHCI_IHFCLKC                  0x48
#define B_PCH_EHCI_IHFCLKC                  0xFFFFFFFF
#define R_PCH_EHCI_PWR_CAPID                0x50
#define B_PCH_EHCI_PWR_CAPID                0xFF
#define R_PCH_EHCI_NXT_PTR1                 0x51
#define B_PCH_EHCI_NXT_PTR1                 0xFF
#define R_PCH_EHCI_PWR_CAP                  0x52
#define B_PCH_EHCI_PWR_CAP_PME_SUP          0xF800
#define B_PCH_EHCI_PWR_CAP_D2_SUP           BIT10
#define B_PCH_EHCI_PWR_CAP_D1_SUP           BIT9
#define B_PCH_EHCI_PWR_CAP_AUX_CUR          (BIT8 | BIT7 | BIT6)
#define B_PCH_EHCI_PWR_CAP_DSI              BIT5
#define B_PCH_EHCI_PWR_CAP_PME_CLK          BIT3
#define B_PCH_EHCI_PWR_CAP_VER              (BIT2 | BIT1 | BIT0)
#define R_PCH_EHCI_PWR_CNTL_STS             0x54
#define B_PCH_EHCI_PWR_CNTL_STS_PME_STS     BIT15
#define B_PCH_EHCI_PWR_CNTL_STS_DATASCL     (BIT14 | BIT13)
#define B_PCH_EHCI_PWR_CNTL_STS_DATASEL     (BIT12 | BIT11 | BIT10 | BIT9)
#define B_PCH_EHCI_PWR_CNTL_STS_PME_EN      BIT8
#define B_PCH_EHCI_PWR_CNTL_STS_NO_SOFT_RESET BIT3
#define B_PCH_EHCI_PWR_CNTL_STS_PWR_STS     (BIT1 | BIT0)
#define V_PCH_EHCI_PWR_CNTL_STS_PWR_STS_D3  (BIT1 | BIT0)
#define R_PCH_EHCI_DBG_CAPID                0x58
#define B_PCH_EHCI_DBG_CAPID                0xFF
#define R_PCH_EHCI_NXT_PTR2                 0x59
#define B_PCH_EHCI_NXT_PTR2                 0xFF
#define R_PCH_EHCI_DBG_BASE                 0x5A
#define B_PCH_EHCI_DBG_BASE_BAR_NUM         0xE000
#define B_PCH_EHCI_DBG_BASE_PORT_OFFSET     0x1FFF
#define R_PCH_EHCI_USB_RELNUM               0x60
#define B_PCH_EHCI_USB_RELNUM               0xFF
#define R_PCH_EHCI_FL_ADJ                   0x61
#define B_PCH_EHCI_FL_ADJ                   0x3F
#define R_PCH_EHCI_PWAKE_CAP                0x62
#define B_PCH_EHCI_PWAKE_CAP_D29_MASK       0x01FE
#define B_PCH_EHCI_PWAKE_CAP_D26_MASK       0x007E
#define B_PCH_EHCI_PWAKE_CAP_PWK_IMP        BIT0
#define R_PCH_EHCI_PDO                      0x64
#define B_PCH_EHCI_PDO_DIS_PORT0            BIT0
#define B_PCH_EHCI_PDO_D29_MASK             0xFF
#define B_PCH_EHCI_PDO_D26_MASK             0x3F
#define R_PCH_EHCI_RMHDEVR                  0x66
#define B_PCH_EHCI_RMHDEVR_D29_MASK         0x01FE
#define B_PCH_EHCI_RMHDEVR_D26_MASK         0x007E
#define R_PCH_EHCI_LEGEXT_CAP               0x68
#define B_PCH_EHCI_LEGEXT_CAP_HCOS          BIT24
#define B_PCH_EHCI_LEGEXT_CAP_HCBIOS        BIT16
#define B_PCH_EHCI_LEGEXT_CAP_NEXT          0x0000FF00
#define B_PCH_EHCI_LEGEXT_CAP_CAPID         0x000000FF
#define R_PCH_EHCI_LEGEXT_CS                0x6C
#define B_PCH_EHCI_LEGEXT_CS_SMIBAR         BIT31
#define B_PCH_EHCI_LEGEXT_CS_SMIPCI         BIT30
#define B_PCH_EHCI_LEGEXT_CS_SMIOS          BIT29
#define B_PCH_EHCI_LEGEXT_CS_SMIAA          BIT21
#define B_PCH_EHCI_LEGEXT_CS_SMIHSE         BIT20
#define B_PCH_EHCI_LEGEXT_CS_SMIFLR         BIT19
#define B_PCH_EHCI_LEGEXT_CS_SMIPCD         BIT18
#define B_PCH_EHCI_LEGEXT_CS_SMIERR         BIT17
#define B_PCH_EHCI_LEGEXT_CS_SMICOMP        BIT16
#define B_PCH_EHCI_LEGEXT_CS_SMIBAR_EN      BIT15
#define B_PCH_EHCI_LEGEXT_CS_SMIPCI_EN      BIT14
#define B_PCH_EHCI_LEGEXT_CS_SMIOS_EN       BIT13
#define B_PCH_EHCI_LEGEXT_CS_SMIAA_EN       BIT5
#define B_PCH_EHCI_LEGEXT_CS_SMIHSE_EN      BIT4
#define B_PCH_EHCI_LEGEXT_CS_SMIFLR_EN      BIT3
#define B_PCH_EHCI_LEGEXT_CS_SMIPCD_EN      BIT2
#define B_PCH_EHCI_LEGEXT_CS_SMIERR_EN      BIT1
#define B_PCH_EHCI_LEGEXT_CS_SMICOMP_EN     BIT0
#define R_PCH_EHCI_SPCSMI                   0x70
#define B_PCH_EHCI_SPCSMI_D29               0x3FC00000
#define B_PCH_EHCI_SPCSMI_D26               0x0FC00000
#define B_PCH_EHCI_SPCSMI_PMCSR             BIT21
#define B_PCH_EHCI_SPCSMI_ASYNC             BIT20
#define B_PCH_EHCI_SPCSMI_PERIODIC          BIT19
#define B_PCH_EHCI_SPCSMI_CF                BIT18
#define B_PCH_EHCI_SPCSMI_HCHALT            BIT17
#define B_PCH_EHCI_SPCSMI_HCRESET           BIT16
#define B_PCH_EHCI_SPCSMI_PO_EN             0x00003FC0
#define B_PCH_EHCI_SPCSMI_PMCSR_EN          BIT5
#define B_PCH_EHCI_SPCSMI_ASYNC_EN          BIT4
#define B_PCH_EHCI_SPCSMI_PERIODIC_EN       BIT3
#define B_PCH_EHCI_SPCSMI_CF_EN             BIT2
#define B_PCH_EHCI_SPCSMI_HCHALT_EN         BIT1
#define B_PCH_EHCI_SPCSMI_HCRESET_EN        BIT0
#define R_PCH_EHCI_OCMAP                    0x74
#define R_PCH_EHCI_RMHWKCTL                 0x7E
#define R_PCH_EHCI_ACCESS_CNTL              0x80
#define B_PCH_EHCI_ACCESS_CNTL_ENABLE       BIT0
#define V_PCH_EHCI_ACCESS_CNTL_ENABLE       0x01
#define R_PCH_EHCI_FLR_CID                  0x98
#define B_PCH_EHCI_FLR_CID                  0xFF
#define V_PCH_EHCI_FLR_CID_13               0x13
#define V_PCH_EHCI_FLR_CID_09               0x09
#define R_PCH_EHCI_FLR_NEXT                 0x99
#define B_PCH_EHCI_FLR_NEXT                 0xFF
#define R_PCH_EHCI_FLR_CLV                  0x9A
#define B_PCH_EHCI_FLR_CLV_CAP_SSEL0        BIT9
#define B_PCH_EHCI_FLR_CLV_TXP_SSEL0        BIT8
#define B_PCH_EHCI_FLR_CLV_VSCID_SSEL1      0xF000
#define B_PCH_EHCI_FLR_CLV_CAPVER_SSEL1     0x0F00
#define B_PCH_EHCI_FLR_CLV_LNG              0x00FF
#define R_PCH_EHCI_FLR_CTRL                 0x9C
#define B_PCH_EHCI_FLR_CTRL_INITFLR         BIT0
#define R_PCH_EHCI_FLR_STS                  0x9D
#define B_PCH_EHCI_FLR_STS_TXP              BIT0

//
// EHCI MMIO registers
//
#define R_PCH_EHCI_HCSPARAMS                0x04
#define N_PCH_EHCI_HCSPARAMS_DP_N           20
#define N_PCH_EHCI_HCSPARAMS_N_CC           12
#define N_PCH_EHCI_HCSPARAMS_N_PCC          8
#define N_PCH_EHCI_HCSPARAMS_N_PORTS        0
#define R_PCH_EHCI_USB2CMD                  0x20
#define B_PCH_EHCI_USB2CMD_ASE              BIT5
#define B_PCH_EHCI_USB2CMD_PSE              BIT4
#define B_PCH_EHCI_USB2CMD_HCRESET          BIT1
#define B_PCH_EHCI_USB2CMD_RS               BIT0
#define R_PCH_EHCI_USB2STS                  0x24
#define B_PCH_EHCI_USB2STS_HCHALTED         BIT12
#define R_PCH_EHCI_CONFIGFLAG               0x60
#define R_PCH_EHCI_PORTSC0                  0x64
#define R_PCH_EHCI_PORTSC0_SUSPEND          BIT7
#define R_PCH_EHCI_PORTSC0_PORT_EN_DIS      BIT2
#define B_PCH_EHCI_PORTSC0_CHANGE_ENABLE_MASK     (0x2A | R_PCH_EHCI_PORTSC0_PORT_EN_DIS) ///< Mask all change bits and port enabled
#define B_PCH_EHCI_PORTSC0_RESET            BIT8

//
// USB3 (XHCI) related definitions
//
#define PCI_DEVICE_NUMBER_PCH_XHCI          20
#define PCI_FUNCTION_NUMBER_PCH_XHCI        0

//
// XHCI PCI Config Space registers
//
#define R_PCH_XHCI_COMMAND_REGISTER         0x04
#define B_PCH_XHCI_COMMAND_BME              BIT2
#define B_PCH_XHCI_COMMAND_MSE              BIT1
#define R_PCH_XHCI_MEM_BASE                 0x10
#define V_PCH_XHCI_MEM_LENGTH               0x3000
#define N_PCH_XHCI_MEM_ALIGN                16
#define R_PCH_XHCI_SVID                     0x2C
#define B_PCH_XHCI_SVID                     0xFFFF
#define R_PCH_XHCI_SID                      0x2E
#define B_PCH_XHCI_SID                      0xFFFF

#define R_PCH_XHCI_XHCC1                    0x40
#define B_PCH_XHCI_XHCC1_ACCTRL             BIT31
#define B_PCH_XHCI_XHCC1_RMTASERR           BIT24
#define B_PCH_XHCI_XHCC1_URD                BIT23
#define B_PCH_XHCI_XHCC1_URRE               BIT22
#define B_PCH_XHCI_XHCC1_IIL1E              (BIT21 | BIT20 | BIT19)
#define V_PCH_XHCI_XHCC1_IIL1E_DIS          0
#define V_PCH_XHCI_XHCC1_IIL1E_32           (BIT19)
#define V_PCH_XHCI_XHCC1_IIL1E_64           (BIT20)
#define V_PCH_XHCI_XHCC1_IIL1E_128          (BIT20 | BIT19)
#define V_PCH_XHCI_XHCC1_IIL1E_256          (BIT21)
#define V_PCH_XHCI_XHCC1_IIL1E_512          (BIT21 | BIT19)
#define V_PCH_XHCI_XHCC1_IIL1E_1024         (BIT21 | BIT20)
#define V_PCH_XHCI_XHCC1_IIL1E_131072       (BIT21 | BIT20 | BIT19)
#define B_PCH_XHCI_XHCC1_XHCIL1E            BIT18
#define B_PCH_XHCI_XHCC1_D3IL1E             BIT17
#define B_PCH_XHCI_XHCC1_UNPPA              (BIT16 | BIT15 | BIT14 | BIT13 | BIT12)
#define B_PCH_XHCI_XHCC1_SWAXHCI            BIT11
#define B_PCH_XHCI_XHCC1_L23HRAWC           (BIT10 | BIT9 | BIT8)
#define B_PCH_XHCI_XHCC1_UTAGCP             (BIT7 | BIT6)
#define B_PCH_XHCI_XHCC1_UDAGCNP            (BIT5 | BIT4)
#define B_PCH_XHCI_XHCC1_UDAGCCP            (BIT3 | BIT2)
#define B_PCH_XHCI_XHCC1_UDAGC              (BIT1 | BIT0)

#define R_PCH_XHCI_XHCC2                    0x44
#define B_PCH_XHCI_XHCC2_OCCFDONE           BIT31
#define B_PCH_XHCI_XHCC2_XHCUPRDROE         BIT11
#define B_PCH_XHCI_XHCC2_IOSFSRAD           BIT10
#define B_PCH_XHCI_XHCC2_SWACXIHB           (BIT9 | BIT8)
#define B_PCH_XHCI_XHCC2_SWADMIL1IHB        (BIT7 | BIT6)
#define B_PCH_XHCI_XHCC2_L1FP2CGWC          (BIT5 | BIT4 | BIT3)
#define B_PCH_XHCI_XHCC2_RDREQSZCTRL        (BIT2 | BIT1 | BIT0)

#define R_PCH_XHCI_XHCLKGTEN                0x50
#define B_PCH_XHCI_XHCLKGTEN_SSLSE          BIT26
#define B_PCH_XHCI_XHCLKGTEN_USB2PLLSE      BIT25
#define B_PCH_XHCI_XHCLKGTEN_IOSFSTCGE      BIT24
#define B_PCH_XHCI_XHCLKGTEN_HSTCGE         (BIT23 | BIT22 | BIT21 | BIT20)
#define B_PCH_XHCI_XHCLKGTEN_SSTCGE         (BIT19 | BIT18 | BIT17 | BIT16)
#define B_PCH_XHCI_XHCLKGTEN_XHCIGEU3S      BIT15
#define B_PCH_XHCI_XHCLKGTEN_XHCFTCLKSE     BIT14
#define B_PCH_XHCI_XHCLKGTEN_XHCBBTCGIPISO  BIT13
#define B_PCH_XHCI_XHCLKGTEN_XHCHSTCGU2NRWE BIT12
#define B_PCH_XHCI_XHCLKGTEN_XHCUSB2PLLSDLE (BIT11 | BIT10)
#define B_PCH_XHCI_XHCLKGTEN_HSPLLSUE       (BIT9 | BIT8)
#define B_PCH_XHCI_XHCLKGTEN_SSPLLSUE       (BIT7 | BIT6 | BIT5)
#define B_PCH_XHCI_XHCLKGTEN_XHCBLCGE       BIT4
#define B_PCH_XHCI_XHCLKGTEN_HSLTCGE        BIT3
#define B_PCH_XHCI_XHCLKGTEN_SSLTCGE        BIT2
#define B_PCH_XHCI_XHCLKGTEN_IOSFBTCGE      BIT1
#define B_PCH_XHCI_XHCLKGTEN_IOSFGBLCGE     BIT0

#define R_PCH_XHCI_USB_RELNUM               0x60
#define B_PCH_XHCI_USB_RELNUM               0xFF
#define R_PCH_XHCI_FL_ADJ                   0x61
#define B_PCH_XHCI_FL_ADJ                   0x3F
#define R_PCH_XHCI_PWR_CAPID                0x70
#define B_PCH_XHCI_PWR_CAPID                0xFF
#define R_PCH_XHCI_NXT_PTR1                 0x71
#define B_PCH_XHCI_NXT_PTR1                 0xFF
#define R_PCH_XHCI_PWR_CAP                  0x72
#define B_PCH_XHCI_PWR_CAP_PME_SUP          0xF800
#define B_PCH_XHCI_PWR_CAP_D2_SUP           BIT10
#define B_PCH_XHCI_PWR_CAP_D1_SUP           BIT9
#define B_PCH_XHCI_PWR_CAP_AUX_CUR          (BIT8 | BIT7 | BIT6)
#define B_PCH_XHCI_PWR_CAP_DSI              BIT5
#define B_PCH_XHCI_PWR_CAP_PME_CLK          BIT3
#define B_PCH_XHCI_PWR_CAP_VER              (BIT2 | BIT1 | BIT0)
#define R_PCH_XHCI_PWR_CNTL_STS             0x74
#define B_PCH_XHCI_PWR_CNTL_STS_PME_STS     BIT15
#define B_PCH_XHCI_PWR_CNTL_STS_DATASCL     (BIT14 | BIT13)
#define B_PCH_XHCI_PWR_CNTL_STS_DATASEL     (BIT12 | BIT11 | BIT10 | BIT9)
#define B_PCH_XHCI_PWR_CNTL_STS_PME_EN      BIT8
#define B_PCH_XHCI_PWR_CNTL_STS_PWR_STS     (BIT1 | BIT0)
#define V_PCH_XHCI_PWR_CNTL_STS_PWR_STS_D3  (BIT1 | BIT0)

#define R_PCH_XHCI_U2OCM1                   0xC0
#define B_PCH_XHCI_U2OCM1_OC4_MAPPING       0xFF000000
#define B_PCH_XHCI_U2OCM1_OC3_MAPPING       0x00FF0000
#define B_PCH_XHCI_U2OCM1_OC2_MAPPING       0x0000FF00
#define B_PCH_XHCI_U2OCM1_OC1_MAPPING       0x000000FF

#define R_PCH_XHCI_U2OCM2                   0xC4
#define B_PCH_XHCI_U2OCM2_OC8_MAPPING       0x3F000000
#define B_PCH_XHCI_U2OCM2_OC7_MAPPING       0x003F0000
#define B_PCH_XHCI_U2OCM2_OC6_MAPPING       0x00003F00
#define B_PCH_XHCI_U2OCM2_OC5_MAPPING       0x0000003F

#define R_PCH_XHCI_U3OCM1                   0xC8
#define B_PCH_XHCI_U3OCM1_OC4_MAPPING       0x3F000000
#define B_PCH_XHCI_U3OCM1_OC3_MAPPING       0x003F0000
#define B_PCH_XHCI_U3OCM1_OC2_MAPPING       0x00003F00
#define B_PCH_XHCI_U3OCM1_OC1_MAPPING       0x0000003F

#define R_PCH_XHCI_U3OCM2                   0xCC
#define B_PCH_XHCI_U3OCM2_OC8_MAPPING       0x3F000000
#define B_PCH_XHCI_U3OCM2_OC7_MAPPING       0x003F0000
#define B_PCH_XHCI_U3OCM2_OC6_MAPPING       0x00003F00
#define B_PCH_XHCI_U3OCM2_OC5_MAPPING       0x0000003F

#define R_PCH_XHCI_USB2PR                   0xD0
#define B_PCH_XHCI_USB2PR_USB2HCSEL         0x7FFF
#define R_PCH_XHCI_USB2PRM                  0xD4
#define B_PCH_XHCI_USB2PR_USB2HCSELM        0x7FFF

#define R_PCH_XHCI_USB3PR                   0xD8
#define B_PCH_XHCI_USB3PR_USB3SSEN          0x3F
#define R_PCH_XHCI_USB3PRM                  0xDC
#define B_PCH_XHCI_USB3PR_USB3SSENM         0x3F

#define R_PCH_XHCI_FUS                      0xE0
#define B_PCH_XHCI_FUS_USBR                 (BIT5)
#define V_PCH_XHCI_FUS_USBR_EN              0
#define V_PCH_XHCI_FUS_USBR_DIS             (BIT5)

#define B_PCH_XHCI_FUS_SSPRTCNT             (BIT4 | BIT3)
#define V_PCH_XHCI_FUS_SSPRTCNT_00B         0
#define V_PCH_XHCI_FUS_SSPRTCNT_01B         (BIT3)
#define V_PCH_XHCI_FUS_SSPRTCNT_10B         (BIT4)
#define V_PCH_XHCI_FUS_SSPRTCNT_11B         (BIT4 | BIT3)

#define B_PCH_XHCI_FUS_HSPRTCNT             (BIT2 | BIT1)
#define V_PCH_XHCI_FUS_HSPRTCNT_00B         0
#define V_PCH_XHCI_FUS_HSPRTCNT_01B         (BIT1)
#define V_PCH_XHCI_FUS_HSPRTCNT_10B         (BIT2)
#define V_PCH_XHCI_FUS_HSPRTCNT_11B         (BIT2 | BIT1)

#define V_PCH_H_XHCI_FUS_SSPRTCNT_00B_CNT   6
#define V_PCH_H_XHCI_FUS_SSPRTCNT_01B_CNT   4
#define V_PCH_H_XHCI_FUS_SSPRTCNT_10B_CNT   2
#define V_PCH_H_XHCI_FUS_SSPRTCNT_11B_CNT   0
#define V_PCH_H_XHCI_FUS_SSPRTCNT_00B_MASK  0x3F
#define V_PCH_H_XHCI_FUS_SSPRTCNT_01B_MASK  0x0F
#define V_PCH_H_XHCI_FUS_SSPRTCNT_10B_MASK  0x03
#define V_PCH_H_XHCI_FUS_SSPRTCNT_11B_MASK  0x00

#define V_PCH_H_XHCI_FUS_HSPRTCNT_00B_CNT   14
#define V_PCH_H_XHCI_FUS_HSPRTCNT_01B_CNT   12
#define V_PCH_H_XHCI_FUS_HSPRTCNT_10B_CNT   10
#define V_PCH_H_XHCI_FUS_HSPRTCNT_11B_CNT   8
#define V_PCH_H_XHCI_FUS_HSPRTCNT_00B_MASK  0x3FFF
#define V_PCH_H_XHCI_FUS_HSPRTCNT_01B_MASK  0x3FFF
#define V_PCH_H_XHCI_FUS_HSPRTCNT_10B_MASK  0x0FFF
#define V_PCH_H_XHCI_FUS_HSPRTCNT_11B_MASK  0x00FF

#define V_PCH_LP_XHCI_FIXED_SSPRTCNT        4
#define V_PCH_LP_XHCI_FIXED_SSPRTCNT_MASK   0x0F

#define V_PCH_LP_XHCI_FIXED_HSPRTCNT        8
#define V_PCH_LP_XHCI_FIXED_HSPRTCNT_MASK   0x00FF

#define R_PCH_XHCI_USB2PDO                  0xE4
#define B_PCH_XHCI_USB2PDO_MASK             0x7FFF
#define B_PCH_XHCI_USB2PDO_DIS_PORT0        BIT0

#define R_PCH_XHCI_USB3PDO                  0xE8
#define B_PCH_XHCI_USB3PDO_MASK             0x3F
#define B_PCH_XHCI_USB3PDO_DIS_PORT0        BIT0

//
// xHCI MMIO registers
//

//
// 0x00 - 0x1F - Capability Registers
//
#define R_PCH_XHCI_CAPLENGTH                0x00
#define R_PCH_XHCI_HCIVERSION               0x02
#define R_PCH_XHCI_HCSPARAMS1               0x04
#define R_PCH_XHCI_HCSPARAMS2               0x08
#define R_PCH_XHCI_HCSPARAMS3               0x0C
#define B_PCH_XHCI_HCSPARAMS3_U2DEL         0xFFFF0000
#define B_PCH_XHCI_HCSPARAMS3_U1DEL         0x0000FFFF
#define R_PCH_XHCI_HCCPARAMS                0x10
#define B_PCH_XHCI_HCCPARAMS_LHRC           BIT5
#define B_PCH_XHCI_HCCPARAMS_MAXPSASIZE     0xF000
#define R_PCH_XHCI_DBOFF                    0x14
#define R_PCH_XHCI_RTSOFF                   0x18

//
// 0x80 - 0xBF - Operational Registers
//
#define R_PCH_XHCI_USBCMD                   0x80
#define B_PCH_XHCI_USBCMD_RS                BIT0   ///< Run/Stop
#define B_PCH_XHCI_USBCMD_RST               BIT1   ///< HCRST
#define R_PCH_XHCI_USBSTS                   0x84

//
// 0x480 - 0x5CF - Port Status and Control Registers
//
#define R_PCH_XHCI_PORTSC01USB2             0x480
#define R_PCH_XHCI_PORTSC02USB2             0x490
#define R_PCH_XHCI_PORTSC03USB2             0x4A0
#define R_PCH_XHCI_PORTSC04USB2             0x4B0
#define R_PCH_XHCI_PORTSC05USB2             0x4C0
#define R_PCH_XHCI_PORTSC06USB2             0x4D0
#define R_PCH_XHCI_PORTSC07USB2             0x4E0
#define R_PCH_XHCI_PORTSC08USB2             0x4F0
#define R_PCH_XHCI_PORTSC09USB2             0x500
#define R_PCH_H_XHCI_PORTSC10USB2           0x510
#define R_PCH_H_XHCI_PORTSC11USB2           0x520
#define R_PCH_H_XHCI_PORTSC12USB2           0x530
#define R_PCH_H_XHCI_PORTSC13USB2           0x540
#define R_PCH_H_XHCI_PORTSC14USB2           0x550
#define R_PCH_H_XHCI_PORTSC15USB2           0x560

#define B_PCH_XHCI_PORTSCXUSB2_WPR          BIT31  ///< Warm Port Reset
#define B_PCH_XHCI_PORTSCXUSB2_CEC          BIT23  ///< Port Config Error Change
#define B_PCH_XHCI_PORTSCXUSB2_PLC          BIT22  ///< Port Link State Change
#define B_PCH_XHCI_PORTSCXUSB2_PRC          BIT21  ///< Port Reset Change
#define B_PCH_XHCI_PORTSCXUSB2_OCC          BIT20  ///< Over-current Change
#define B_PCH_XHCI_PORTSCXUSB2_WRC          BIT19  ///< Warm Port Reset Change
#define B_PCH_XHCI_PORTSCXUSB2_PEC          BIT18  ///< Port Enabled Disabled Change
#define B_PCH_XHCI_PORTSCXUSB2_CSC          BIT17  ///< Connect Status Change
#define B_PCH_XHCI_PORTSCXUSB2_LWS          BIT16  ///< Port Link State Write Strobe
#define B_PCH_XHCI_USB2_U3_EXIT             (BIT5 | BIT6 | BIT7 | BIT8)
#define B_PCH_XHCI_USB2_U0_MASK             (BIT5 | BIT6 | BIT7 | BIT8)
#define B_PCH_XHCI_PORTSCXUSB2_PP           BIT9
#define B_PCH_XHCI_PORTSCXUSB2_PR           BIT4   ///< Port Reset
#define B_PCH_XHCI_PORTSCXUSB2_PED          BIT1   ///< Port Enable/Disabled
#define B_PCH_XHCI_PORTSCXUSB2_CCS          BIT0   ///< Current Connect Status
#define B_PCH_XHCI_PORT_CHANGE_ENABLE_MASK  (B_PCH_XHCI_PORTSCXUSB2_CEC | B_PCH_XHCI_PORTSCXUSB2_PLC | B_PCH_XHCI_PORTSCXUSB2_PRC | B_PCH_XHCI_PORTSCXUSB2_OCC | B_PCH_XHCI_PORTSCXUSB2_WRC | B_PCH_XHCI_PORTSCXUSB2_PEC | B_PCH_XHCI_PORTSCXUSB2_CSC | B_PCH_XHCI_PORTSCXUSB2_PED)

#define R_PCH_H_XHCI_PORTSC1USB3            0x570
#define R_PCH_H_XHCI_PORTSC2USB3            0x580
#define R_PCH_H_XHCI_PORTSC3USB3            0x590
#define R_PCH_H_XHCI_PORTSC4USB3            0x5A0
#define R_PCH_H_XHCI_PORTSC5USB3            0x5B0
#define R_PCH_H_XHCI_PORTSC6USB3            0x5C0

#define R_PCH_LP_XHCI_PORTSC1USB3           0x510
#define R_PCH_LP_XHCI_PORTSC2USB3           0x520
#define R_PCH_LP_XHCI_PORTSC3USB3           0x530
#define R_PCH_LP_XHCI_PORTSC4USB3           0x540

#define B_PCH_XHCI_PORTSCXUSB3_WPR          BIT31  ///< Warm Port Reset
#define B_PCH_XHCI_PORTSCXUSB3_CEC          BIT23  ///< Port Config Error Change
#define B_PCH_XHCI_PORTSCXUSB3_PLC          BIT22  ///< Port Link State Change
#define B_PCH_XHCI_PORTSCXUSB3_PRC          BIT21  ///< Port Reset Change
#define B_PCH_XHCI_PORTSCXUSB3_OCC          BIT20  ///< Over-current Change
#define B_PCH_XHCI_PORTSCXUSB3_WRC          BIT19  ///< Warm Port Reset Change
#define B_PCH_XHCI_PORTSCXUSB3_PEC          BIT18  ///< Port Enabled Disabled Change
#define B_PCH_XHCI_PORTSCXUSB3_CSC          BIT17  ///< Connect Status Change
#define B_PCH_XHCI_PORTSCXUSB3_LWS          BIT16  ///< Port Link State Write Strobe   //AMI_OVERRITE
#define B_PCH_XHCI_PORTSCXUSB3_PLS          (BIT8 | BIT7 | BIT6 | BIT5)    ///< Port Link State
#define V_PCH_XHCI_PORTSCXUSB3_PLS_POLLING  0x000000E0    ///< Link is in the Polling State
#define V_PCH_XHCI_PORTSCXUSB3_PLS_RXDETECT 0x000000A0    ///< Link is in the RxDetect State
#define B_PCH_XHCI_PORTSCXUSB3_PP           BIT9   ///< Port Power                     //AMI_OVERRITE
#define B_PCH_XHCI_PORTSCXUSB3_PR           BIT4   ///< Port Reset
#define B_PCH_XHCI_PORTSCXUSB3_PED          BIT1   ///< Port Enable/Disabled
#define B_PCH_XHCI_PORTSCXUSB3_CHANGE_ENABLE_MASK  (B_PCH_XHCI_PORTSCXUSB3_CEC | B_PCH_XHCI_PORTSCXUSB3_PLC | B_PCH_XHCI_PORTSCXUSB3_PRC | B_PCH_XHCI_PORTSCXUSB3_OCC | B_PCH_XHCI_PORTSCXUSB3_WRC | B_PCH_XHCI_PORTSCXUSB3_PEC | B_PCH_XHCI_PORTSCXUSB3_CSC | B_PCH_XHCI_PORTSCXUSB3_PED)
//
// 0x2000 - 0x21FF - Runtime Registers
// 0x3000 - 0x307F - Doorbell Registers
//

//
// 0x8000 - 0x833F - Extended Capabilities Registers
//
#define R_PCH_XHCI_MMIO_ECR_8058            0x8058
#define B_PCH_XHCI_MMIO_ECR_8058_BIT8       BIT8   ///< Set 0

#define R_PCH_XHCI_MMIO_ECR_8090            0x8090
#define B_PCH_XHCI_MMIO_ECR_8090_BIT14      BIT14  ///< Set 1
#define B_PCH_XHCI_MMIO_ECR_8090_BIT8       BIT8   ///< Set 1

#define R_PCH_XHCI_MMIO_ECR_8094            0x8094
#define B_PCH_XHCI_MMIO_ECR_8094_BIT23      BIT23  ///< Set 1

#define R_PCH_XHCI_MMIO_ECR_80E0            0x80E0
#define B_PCH_XHCI_MMIO_ECR_80E0_BIT9       BIT9   ///< Set 1
#define B_PCH_XHCI_MMIO_ECR_80E0_BIT6       BIT6   ///< Set 1

#define R_PCH_XHCI_MMIO_ECR_80EC            0x80EC
#define B_PCH_XHCI_MMIO_ECR_80EC_BIT_14_12  0x7000 ///< Set 6
#define B_PCH_XHCI_MMIO_ECR_80EC_BIT_11_9   0x0E00 ///< Set 6

#define R_PCH_XHCI_MMIO_ECR_8110            0x8110
#define B_PCH_XHCI_MMIO_ECR_8110_BIT2       BIT2   ///< Set 0

#endif