summaryrefslogtreecommitdiff
path: root/drivers/hid/intel-thc-hid/intel-thc/intel-thc-hw.h
blob: 6729c4c25dabc09b3cb108b62e761cba394457f0 (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
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
/* SPDX-License-Identifier: GPL-2.0 */
/* Copyright (c) 2024 Intel Corporation */

#ifndef _INTEL_THC_HW_H_
#define _INTEL_THC_HW_H_

#include <linux/bits.h>

/* THC registers offset */
/* Touch Host Controller Control Register */
#define THC_M_PRT_CONTROL_OFFSET		0x1008
/* THC SPI Bus Configuration Register */
#define THC_M_PRT_SPI_CFG_OFFSET		0x1010
/* THC SPI Bus Read Opcode Register */
#define THC_M_PRT_SPI_ICRRD_OPCODE_OFFSET	0x1014
/* THC SPI Bus Read Opcode Register */
#define THC_M_PRT_SPI_DMARD_OPCODE_OFFSET	0x1018
/* THC SPI Bus Write Opcode Register */
#define THC_M_PRT_SPI_WR_OPCODE_OFFSET		0x101C
/* THC Interrupt Enable Register */
#define THC_M_PRT_INT_EN_OFFSET			0x1020
/* THC Interrupt Status Register */
#define THC_M_PRT_INT_STATUS_OFFSET		0x1024
/* THC Error Cause Register */
#define THC_M_PRT_ERR_CAUSE_OFFSET		0x1028
/* THC SW sequencing Control */
#define THC_M_PRT_SW_SEQ_CNTRL_OFFSET		0x1040
/* THC SW sequencing Status */
#define THC_M_PRT_SW_SEQ_STS_OFFSET		0x1044
/* THC SW Sequencing Data DW0 or SPI Address Register */
#define THC_M_PRT_SW_SEQ_DATA0_ADDR_OFFSET	0x1048
/* THC SW sequencing Data DW1 */
#define THC_M_PRT_SW_SEQ_DATA1_OFFSET		0x104C
/* THC SW sequencing Data DW2 */
#define THC_M_PRT_SW_SEQ_DATA2_OFFSET		0x1050
/* THC SW sequencing Data DW3 */
#define THC_M_PRT_SW_SEQ_DATA3_OFFSET		0x1054
/* THC SW sequencing Data DW4 */
#define THC_M_PRT_SW_SEQ_DATA4_OFFSET		0x1058
/* THC SW sequencing Data DW5 */
#define THC_M_PRT_SW_SEQ_DATA5_OFFSET		0x105C
/* THC SW sequencing Data DW6 */
#define THC_M_PRT_SW_SEQ_DATA6_OFFSET		0x1060
/* THC SW sequencing Data DW7 */
#define THC_M_PRT_SW_SEQ_DATA7_OFFSET		0x1064
/* THC SW sequencing Data DW8 */
#define THC_M_PRT_SW_SEQ_DATA8_OFFSET		0x1068
/* THC SW sequencing Data DW9 */
#define THC_M_PRT_SW_SEQ_DATA9_OFFSET		0x106C
/* THC SW sequencing Data DW10 */
#define THC_M_PRT_SW_SEQ_DATA10_OFFSET		0x1070
/* THC SW sequencing Data DW11 */
#define THC_M_PRT_SW_SEQ_DATA11_OFFSET		0x1074
/* THC SW sequencing Data DW12 */
#define THC_M_PRT_SW_SEQ_DATA12_OFFSET		0x1078
/* THC SW sequencing Data DW13 */
#define THC_M_PRT_SW_SEQ_DATA13_OFFSET		0x107C
/* THC SW sequencing Data DW14 */
#define THC_M_PRT_SW_SEQ_DATA14_OFFSET		0x1080
/* THC SW sequencing Data DW15 */
#define THC_M_PRT_SW_SEQ_DATA15_OFFSET		0x1084
/* THC SW sequencing Data DW16 */
#define THC_M_PRT_SW_SEQ_DATA16_OFFSET		0x1088
/* THC Write PRD Base Address Register Low */
#define THC_M_PRT_WPRD_BA_LOW_OFFSET		0x1090
/* THC Write PRD Base Address Register High */
#define THC_M_PRT_WPRD_BA_HI_OFFSET		0x1094
/* THC Write DMA Control */
#define THC_M_PRT_WRITE_DMA_CNTRL_OFFSET	0x1098
/* THC Write Interrupt Status */
#define THC_M_PRT_WRITE_INT_STS_OFFSET		0x109C
/* THC Write DMA Error Register */
#define THC_M_PRT_WRITE_DMA_ERR_OFFSET		0x10A0
/* THC device address for the bulk write */
#define THC_M_PRT_WR_BULK_ADDR_OFFSET		0x10B4
/* THC Device Interrupt Cause Register Address */
#define THC_M_PRT_DEV_INT_CAUSE_ADDR_OFFSET	0x10B8
/* THC Device Interrupt Cause Register Value */
#define THC_M_PRT_DEV_INT_CAUSE_REG_VAL_OFFSET	0x10BC
/* THC TXDMA Frame Count */
#define THC_M_PRT_TX_FRM_CNT_OFFSET		0x10E0
/* THC TXDMA Packet Count */
#define THC_M_PRT_TXDMA_PKT_CNT_OFFSET		0x10E4
/* THC Device Interrupt Count on this port */
#define THC_M_PRT_DEVINT_CNT_OFFSET		0x10E8
/* Touch Device Interrupt Cause register Format Configuration Register 1 */
#define THC_M_PRT_DEVINT_CFG_1_OFFSET		0x10EC
/* Touch Device Interrupt Cause register Format Configuration Register 2 */
#define THC_M_PRT_DEVINT_CFG_2_OFFSET		0x10F0
/* THC Read PRD Base Address Low for the 1st RXDMA */
#define THC_M_PRT_RPRD_BA_LOW_1_OFFSET		0x1100
/* THC Read PRD Base Address High for the 1st RXDMA */
#define THC_M_PRT_RPRD_BA_HI_1_OFFSET		0x1104
/* THC Read PRD Control for the 1st RXDMA */
#define THC_M_PRT_RPRD_CNTRL_1_OFFSET		0x1108
/* THC Read DMA Control for the 1st RXDMA */
#define THC_M_PRT_READ_DMA_CNTRL_1_OFFSET	0x110C
/* THC Read Interrupt Status for the 1st RXDMA */
#define THC_M_PRT_READ_DMA_INT_STS_1_OFFSET	0x1110
/* THC Read DMA Error Register for the 1st RXDMA */
#define THC_M_PRT_READ_DMA_ERR_1_OFFSET		0x1114
/* Touch Sequencer GuC Tail Offset Address Low for the 1st RXDMA */
#define THC_M_PRT_GUC_OFFSET_LOW_1_OFFSET	0x1118
/* Touch Sequencer GuC Tail Offset Address High for the 1st RXDMA */
#define THC_M_PRT_GUC_OFFSET_HI_1_OFFSET	0x111C
/* Touch Host Controller GuC Work Queue Item Size for the 1st RXDMA */
#define THC_M_PRT_GUC_WORKQ_ITEM_SZ_1_OFFSET	0x1120
/* Touch Host Controller GuC Control register for the 1st RXDMA */
#define THC_M_PRT_GUC_WORKQ_SZ_1_OFFSET		0x1124
/* Touch Sequencer Control for the 1st DMA */
#define THC_M_PRT_TSEQ_CNTRL_1_OFFSET		0x1128
/* Touch Sequencer GuC Doorbell Address Low for the 1st RXDMA */
#define THC_M_PRT_GUC_DB_ADDR_LOW_1_OFFSET	0x1130
/* Touch Sequencer GuC Doorbell Address High for the 1st RXDMA */
#define THC_M_PRT_GUC_DB_ADDR_HI_1_OFFSET	0x1134
/* Touch Sequencer GuC Doorbell Data */
#define THC_M_PRT_GUC_DB_DATA_1_OFFSET		0x1138
/* Touch Sequencer GuC Tail Offset Initial Value for the 1st RXDMA */
#define THC_M_PRT_GUC_OFFSET_INITVAL_1_OFFSET	0x1140
/* THC Device Address for the bulk/touch data read for the 1st RXDMA */
#define THC_M_PRT_RD_BULK_ADDR_1_OFFSET		0x1170
/* THC Gfx/SW Doorbell Count from the 1st Stream RXDMA on this port */
#define THC_M_PRT_DB_CNT_1_OFFSET		0x11A0
/* THC Frame Count from the 1st Stream RXDMA on this port */
#define THC_M_PRT_FRM_CNT_1_OFFSET		0x11A4
/* THC Micro Frame Count from the 1st Stream RXDMA on this port */
#define THC_M_PRT_UFRM_CNT_1_OFFSET		0x11A8
/* THC Packet Count from the 1st Stream RXDMA on this port */
#define THC_M_PRT_RXDMA_PKT_CNT_1_OFFSET	0x11AC
/*
 * THC Software Interrupt Count from the 1st Stream RXDMA
 * on this port
 */
#define THC_M_PRT_SWINT_CNT_1_OFFSET		0x11B0
/* Touch Sequencer Frame Drop Counter for the 1st RXDMA */
#define THC_M_PRT_FRAME_DROP_CNT_1_OFFSET	0x11B4
/* THC Coaescing 1 */
#define THC_M_PRT_COALESCE_1_OFFSET		0x11B8
/* THC Read PRD Base Address Low for the 2nd RXDMA */
#define THC_M_PRT_RPRD_BA_LOW_2_OFFSET		0x1200
/* THC Read PRD Base Address High for the 2nd RXDMA */
#define THC_M_PRT_RPRD_BA_HI_2_OFFSET		0x1204
/* THC Read PRD Control for the 2nd RXDMA */
#define THC_M_PRT_RPRD_CNTRL_2_OFFSET		0x1208
/* THC Read DMA Control for the 2nd RXDMA */
#define THC_M_PRT_READ_DMA_CNTRL_2_OFFSET	0x120C
/* THC Read Interrupt Status for the 2nd RXDMA */
#define THC_M_PRT_READ_DMA_INT_STS_2_OFFSET	0x1210
/* THC Read DMA Error Register for the 2nd RXDMA */
#define THC_M_PRT_READ_DMA_ERR_2_OFFSET		0x1214
/* Touch Sequencer GuC Tail Offset Address Low for the 2nd RXDMA */
#define THC_M_PRT_GUC_OFFSET_LOW_2_OFFSET	0x1218
/* Touch Sequencer GuC Tail Offset Address High for the 2nd RXDMA */
#define THC_M_PRT_GUC_OFFSET_HI_2_OFFSET	0x121C
/* Touch Host Controller GuC Work Queue Item Size for the 2nd RXDMA */
#define THC_M_PRT_GUC_WORKQ_ITEM_SZ_2_OFFSET	0x1220
/* Touch Host Controller GuC Control register for the 2nd RXDMA */
#define THC_M_PRT_GUC_WORKQ_SZ_2_OFFSET		0x1224
/* Touch Sequencer Control for the 2nd DMA */
#define THC_M_PRT_TSEQ_CNTRL_2_OFFSET		0x1228
/* Touch Sequencer GuC Doorbell Address Low for the 2nd RXDMA */
#define THC_M_PRT_GUC_DB_ADDR_LOW_2_OFFSET	0x1230
/* Touch Sequencer GuC Doorbell Address High for the 2nd RXDMA */
#define THC_M_PRT_GUC_DB_ADDR_HI_2_OFFSET	0x1234
/* Touch Sequencer GuC Doorbell Data for PRD2 */
#define THC_M_PRT_GUC_DB_DATA_2_OFFSET		0x1238
/* Touch Sequencer GuC Tail Offset Initial Value for the 2nd RXDMA */
#define THC_M_PRT_GUC_OFFSET_INITVAL_2_OFFSET	0x1240
/* THC Device Address for the bulk/touch data read for the 2nd RXDMA */
#define THC_M_PRT_RD_BULK_ADDR_2_OFFSET		0x1270
/* THC Gfx/SW Doorbell Count from the 2nd Stream RXDMA on this port */
#define THC_M_PRT_DB_CNT_2_OFFSET		0x12A0
/* THC Frame Count from the 2nd Stream RXDMA on this port */
#define THC_M_PRT_FRM_CNT_2_OFFSET		0x12A4
/* THC Micro Frame Count from the 2nd Stream RXDMA on this port */
#define THC_M_PRT_UFRM_CNT_2_OFFSET		0x12A8
/* THC Packet Count from the 2nd Stream RXDMA on this port */
#define THC_M_PRT_RXDMA_PKT_CNT_2_OFFSET	0x12AC
/*
 * THC Software Interrupt Count from the 2nd Stream RXDMA
 * on this port
 */
#define THC_M_PRT_SWINT_CNT_2_OFFSET		0x12B0
/* Touch Sequencer Frame Drop Counter for the 2nd RXDMA */
#define THC_M_PRT_FRAME_DROP_CNT_2_OFFSET	0x12B4
/* THC Coaescing 2 */
#define THC_M_PRT_COALESCE_2_OFFSET		0x12B8
/* THC SPARE REGISTER */
#define THC_M_PRT_SPARE_REG_OFFSET		0x12BC
/* THC Read PRD Base Address Low for the SW RXDMA */
#define THC_M_PRT_RPRD_BA_LOW_SW_OFFSET		0x12C0
/* THC Read PRD Base Address High for the SW RXDMA */
#define THC_M_PRT_RPRD_BA_HI_SW_OFFSET		0x12C4
/* THC Read PRD Control for the SW RXDMA */
#define THC_M_PRT_RPRD_CNTRL_SW_OFFSET		0x12C8
/* THC Read DMA Control for the SW RXDMA */
#define THC_M_PRT_READ_DMA_CNTRL_SW_OFFSET	0x12CC
/* THC Read Interrupt Status for the SW RXDMA */
#define THC_M_PRT_READ_DMA_INT_STS_SW_OFFSET	0x12D0
/* Touch Sequencer Control for the SW DMA */
#define THC_M_PRT_TSEQ_CNTRL_SW_OFFSET		0x12D4
/* Address for the bulk read for SW DMA engine */
#define THC_M_PRT_RD_BULK_ADDR_SW_OFFSET	0x12D8
/* THC Frame Count from the SW RXDMA on this port */
#define THC_M_PRT_FRM_CNT_SW_OFFSET		0x12DC
/* THC Packet Count from the SW RXDMA on this port */
#define THC_M_PRT_RXDMA_PKT_CNT_SW_OFFSET	0x12E0
/* SW DMA PRD Table Length */
#define THC_M_PRT_SW_DMA_PRD_TABLE_LEN_OFFSET	0x12E4
/* THC timing based Frame/Interrupt caolescing control register for 1st RXDMA */
#define THC_M_PRT_COALESCE_CNTRL_1_OFFSET	0x12E8
/* THC timing based Frame/Interrupt caolescing control register for 2nd RXDMA */
#define THC_M_PRT_COALESCE_CNTRL_2_OFFSET	0x12EC
/* Touch Sequencer PRD Table Empty Counter for the 1st RXDMA */
#define THC_M_PRT_PRD_EMPTY_CNT_1_OFFSET	0x12F0
/* Touch Sequencer PRD Table Empty Counter for the 2nd RXDM */
#define THC_M_PRT_PRD_EMPTY_CNT_2_OFFSET	0x12F4
/* THC coalescing status to reflect the current coalescing FSM state for 1st RXDMA */
#define THC_M_PRT_COALESCE_STS_1_OFFSET		0x12F8
/* THC coalescing status to reflect the current coalescing FSM state for 2nd RXDMA */
#define THC_M_PRT_COALESCE_STS_2_OFFSET		0x12FC
/* THC Register for the SPI Port Duty Cycle Configuration */
#define THC_M_PRT_SPI_DUTYC_CFG_OFFSET		0x1300
/* THC Register for SW I2C Wtite Sequecning control */
#define THC_M_PRT_SW_SEQ_I2C_WR_CNTRL_OFFSET	0x1304
/* THC current Timestamp Register for RXDMA1 */
#define THC_M_PRT_TIMESTAMP_1_OFFSET		0x1308
/* THC current Timestamp Register for RXDMA2 */
#define THC_M_PRT_TIMESTAMP_2_OFFSET		0x130C
/* Current SYNC Event Timestamp Register */
#define THC_M_PRT_SYNC_TIMESTAMP_OFFSET		0x1310
/* THC Display Sync Register */
#define THC_M_PRT_DISP_SYNC_OFFSET		0x1314
/* THC Display Sync Register */
#define THC_M_PRT_DISP_SYNC_2_OFFSET		0x1318
/* THC Register for SW I2C Wtite Sequecning control */
#define THC_M_PRT_I2C_CFG_OFFSET		0x131C

/* THC register bits definition */
#define TXN_ERR_INT_STS_BIT			BIT(28)
#define TXN_FATAL_INT_STS_BIT			BIT(30)

#define NONDMA_INT_STS_BIT			BIT(4)
#define EOF_INT_STS_BIT				BIT(5)

#define THC_CFG_DID_VID_VID		        GENMASK(15, 0)
#define THC_CFG_DID_VID_DID		        GENMASK(31, 16)

#define THC_CFG_STS_CMD_IOSE			BIT(0)
#define THC_CFG_STS_CMD_MSE			BIT(1)
#define THC_CFG_STS_CMD_BME			BIT(2)
#define THC_CFG_STS_CMD_SPCYC			BIT(3)
#define THC_CFG_STS_CMD_MWRIEN			BIT(4)
#define THC_CFG_STS_CMD_VGAPS			BIT(5)
#define THC_CFG_STS_CMD_PERRR			BIT(6)
#define THC_CFG_STS_CMD_SERREN			BIT(8)
#define THC_CFG_STS_CMD_FBTBEN			BIT(9)
#define THC_CFG_STS_CMD_INTD			BIT(10)
#define THC_CFG_STS_CMD_INTS			BIT(19)
#define THC_CFG_STS_CMD_CAPL			BIT(20)
#define THC_CFG_STS_CMD_MCAP			BIT(21)
#define THC_CFG_STS_CMD_FBTBC			BIT(23)
#define THC_CFG_STS_CMD_MDPE			BIT(24)
#define THC_CFG_STS_CMD_DEVT			GENMASK(26, 25)
#define THC_CFG_STS_CMD_STA			BIT(27)
#define THC_CFG_STS_CMD_RTA			BIT(28)
#define THC_CFG_STS_CMD_RMA			BIT(29)
#define THC_CFG_STS_CMD_SSE			BIT(30)
#define THC_CFG_STS_CMD_DPE			BIT(31)

#define THC_CFG_CC_RID_RID			GENMASK(7, 0)
#define THC_CFG_CC_RID_PI			GENMASK(15, 8)
#define THC_CFG_CC_RID_SCC			GENMASK(23, 16)
#define THC_CFG_CC_RID_BCC			GENMASK(31, 24)

#define THC_CFG_BIST_HTYPE_LT_CLS_CLSZ		GENMASK(7, 0)
#define THC_CFG_BIST_HTYPE_LT_CLS_LT		GENMASK(15, 8)
#define THC_CFG_BIST_HTYPE_LT_CLS_HTYPE		GENMASK(22, 16)
#define THC_CFG_BIST_HTYPE_LT_CLS_MFD		BIT(23)

#define THC_CFG_BAR0_LOW_MEMSPACE		BIT(0)
#define THC_CFG_BAR0_LOW_TYP			GENMASK(2, 1)
#define THC_CFG_BAR0_LOW_PREFETCH		BIT(3)
#define THC_CFG_BAR0_LOW_MEMSIZE		GENMASK(14, 4)
#define THC_CFG_BAR0_LOW_MEMBAR			GENMASK(31, 15)
#define THC_CFG_BAR0_HI_MEMBAR			GENMASK(31, 0)

#define THC_CFG_SID_SVID_SSVID			GENMASK(15, 0)
#define THC_CFG_SID_SVID_SSID			GENMASK(31, 16)

#define THC_CFG_CAPP_CP				GENMASK(7, 0)

#define THC_CFG_INT_ILINE			GENMASK(7, 0)
#define THC_CFG_INT_IPIN			GENMASK(15, 8)

#define THC_CFG_UR_STS_CTL_URRE			BIT(0)
#define THC_CFG_UR_STS_CTL_URD			BIT(1)
#define THC_CFG_UR_STS_CTL_FD			BIT(2)

#define THC_CFG_MSIMC_MSINP_MSICID_CAPID	GENMASK(7, 0)
#define THC_CFG_MSIMC_MSINP_MSICID_NXTP	        GENMASK(15, 8)
#define THC_CFG_MSIMC_MSINP_MSICID_MSIE		BIT(16)
#define THC_CFG_MSIMC_MSINP_MSICID_MMC	        GENMASK(19, 17)
#define THC_CFG_MSIMC_MSINP_MSICID_MMEN	        GENMASK(22, 20)
#define THC_CFG_MSIMC_MSINP_MSICID_XAC		BIT(23)
#define THC_CFG_MSIMC_MSINP_MSICID_PVMC		BIT(24)
#define THC_CFG_MSIMA_MADDR		        GENMASK(31, 2)
#define THC_CFG_MSIMUA_MAUDDR		        GENMASK(31, 0)
#define THC_CFG_MSIMD_MDAT			GENMASK(15, 0)

#define THC_CFG_PMCAP_PMNP_PMCID_CAPP	        GENMASK(7, 0)
#define THC_CFG_PMCAP_PMNP_PMCID_NXTP	        GENMASK(15, 8)
#define THC_CFG_PMCAP_PMNP_PMCID_VER	        GENMASK(18, 16)
#define THC_CFG_PMCAP_PMNP_PMCID_PMECLK		BIT(19)
#define THC_CFG_PMCAP_PMNP_PMCID_DSI		BIT(21)
#define THC_CFG_PMCAP_PMNP_PMCID_AUXC	        GENMASK(24, 22)
#define THC_CFG_PMCAP_PMNP_PMCID_D1S		BIT(25)
#define THC_CFG_PMCAP_PMNP_PMCID_D2S		BIT(26)
#define THC_CFG_PMCAP_PMNP_PMCID_PMES	        GENMASK(31, 27)

#define THC_CFG_PMD_PMCSRBSE_PMCSR_PWRST	GENMASK(1, 0)
#define THC_CFG_PMD_PMCSRBSE_PMCSR_NSR		BIT(3)
#define THC_CFG_PMD_PMCSRBSE_PMCSR_PMEEN	BIT(8)
#define THC_CFG_PMD_PMCSRBSE_PMCSR_DSEL	        GENMASK(12, 9)
#define THC_CFG_PMD_PMCSRBSE_PMCSR_DS	        GENMASK(14, 13)
#define THC_CFG_PMD_PMCSRBSE_PMCSR_PMESTS	BIT(15)

#define THC_CFG_DEVIDLE_CAPPID		        GENMASK(7, 0)
#define THC_CFG_DEVIDLE_NCAPPP		        GENMASK(15, 8)
#define THC_CFG_DEVIDLE_LENGTH		        GENMASK(23, 16)
#define THC_CFG_DEVIDLE_REV		        GENMASK(27, 24)
#define THC_CFG_DEVIDLE_VID		        GENMASK(31, 28)

#define THC_CFG_VSHDR_VSECID		        GENMASK(15, 0)
#define THC_CFG_VSHDR_VSECR		        GENMASK(19, 16)
#define THC_CFG_VSHDR_VSECL		        GENMASK(31, 20)

#define THC_CFG_SWLTRPTR_VALID			BIT(0)
#define THC_CFG_SWLTRPTR_BARNUM		        GENMASK(3, 1)
#define THC_CFG_SWLTRPTR_SWLTRLOC		GENMASK(31, 4)

#define THC_CFG_DEVIDLEPTR_VALID		BIT(0)
#define THC_CFG_DEVIDLEPTR_BARNUM		GENMASK(3, 1)
#define THC_CFG_DEVIDLEPTR_DEVIDLELOC	        GENMASK(31, 4)
#define THC_CFG_DEVIDLEPOL_POLV		        GENMASK(9, 0)
#define THC_CFG_DEVIDLEPOL_POLS		        GENMASK(12, 10)

#define THC_CFG_PCE_SPE				BIT(0)
#define THC_CFG_PCE_I3E				BIT(1)
#define THC_CFG_PCE_D3HE			BIT(2)
#define THC_CFG_PCE_SE				BIT(3)
#define THC_CFG_PCE_HAE				BIT(5)

#define THC_CFG_MANID_PROC			GENMASK(7, 0)
#define THC_CFG_MANID_MID			GENMASK(15, 8)
#define THC_CFG_MANID_MSID			GENMASK(23, 16)
#define THC_CFG_MANID_DOT			GENMASK(27, 24)

#define THC_M_CMN_DEVIDLECTRL_CIP		BIT(0)
#define THC_M_CMN_DEVIDLECTRL_IR		BIT(1)
#define THC_M_CMN_DEVIDLECTRL_DEVIDLE		BIT(2)
#define THC_M_CMN_DEVIDLECTRL_RR		BIT(3)
#define THC_M_CMN_DEVIDLECTRL_IRC		BIT(4)

#define THC_M_CMN_LTR_CTRL_OFFSET		0x14
#define THC_M_CMN_LTR_CTRL_ACTIVE_LTR_REQ	BIT(0)
#define THC_M_CMN_LTR_CTRL_ACTIVE_LTR_EN	BIT(1)
#define THC_M_CMN_LTR_CTRL_LP_LTR_REQ		BIT(2)
#define THC_M_CMN_LTR_CTRL_LP_LTR_EN		BIT(3)
#define THC_M_CMN_LTR_CTRL_LP_LTR_SCALE	        GENMASK(6, 4)
#define THC_M_CMN_LTR_CTRL_LP_LTR_VAL	        GENMASK(16, 7)
#define THC_M_CMN_LTR_CTRL_ACT_LTR_SCALE	GENMASK(19, 17)
#define THC_M_CMN_LTR_CTRL_ACT_LTR_VAL	        GENMASK(29, 20)
#define THC_M_CMN_LTR_CTRL_LAST_LTR_SENT	GENMASK(31, 30)

#define THC_M_PRT_CONTROL_TSFTRST		BIT(0)
#define THC_M_PRT_CONTROL_THC_DEVINT_QUIESCE_EN	BIT(1)
#define THC_M_PRT_CONTROL_THC_DEVINT_QUIESCE_HW_STS	BIT(2)
#define THC_M_PRT_CONTROL_DEVRST		BIT(3)
#define THC_M_PRT_CONTROL_THC_DRV_LOCK_EN	BIT(13)
#define THC_M_PRT_CONTROL_THC_INSTANCE_INDEX	GENMASK(18, 16)
#define THC_M_PRT_CONTROL_PORT_INDEX	        GENMASK(22, 20)
#define THC_M_PRT_CONTROL_THC_ARB_POLICY	GENMASK(25, 24)
#define THC_M_PRT_CONTROL_THC_BIOS_LOCK_EN	BIT(27)
#define THC_M_PRT_CONTROL_PORT_SUPPORTED	BIT(28)
#define THC_M_PRT_CONTROL_SPI_IO_RDY		BIT(29)
#define THC_M_PRT_CONTROL_PORT_TYPE	        GENMASK(31, 30)

#define THC_M_PRT_SPI_CFG_SPI_TRDC		GENMASK(1, 0)
#define THC_M_PRT_SPI_CFG_SPI_TRMODE	        GENMASK(3, 2)
#define THC_M_PRT_SPI_CFG_SPI_TCRF		GENMASK(6, 4)
#define THC_M_PRT_SPI_CFG_SPI_RD_MPS	        GENMASK(15, 7)
#define THC_M_PRT_SPI_CFG_SPI_TWMODE	        GENMASK(19, 18)
#define THC_M_PRT_SPI_CFG_SPI_TCWF		GENMASK(22, 20)
#define THC_M_PRT_SPI_CFG_SPI_LOW_FREQ_EN	BIT(23)
#define THC_M_PRT_SPI_CFG_SPI_WR_MPS	        GENMASK(31, 24)

#define THC_M_PRT_SPI_ICRRD_OPCODE_SPI_SIO	GENMASK(31, 24)
#define THC_M_PRT_SPI_ICRRD_OPCODE_SPI_DIO	GENMASK(23, 16)
#define THC_M_PRT_SPI_ICRRD_OPCODE_SPI_QIO	GENMASK(15, 8)

#define THC_M_PRT_INT_EN_SIPE				BIT(0)
#define THC_M_PRT_INT_EN_SBO				BIT(1)
#define THC_M_PRT_INT_EN_SIDR				BIT(2)
#define THC_M_PRT_INT_EN_SOFB				BIT(3)
#define THC_M_PRT_INT_EN_INVLD_DEV_ENTRY_INT_EN		BIT(9)
#define THC_M_PRT_INT_EN_FRAME_BABBLE_ERR_INT_EN	BIT(10)
#define THC_M_PRT_INT_EN_BUF_OVRRUN_ERR_INT_EN		BIT(12)
#define THC_M_PRT_INT_EN_PRD_ENTRY_ERR_INT_EN		BIT(13)
#define THC_M_PRT_INT_EN_DISP_SYNC_EVT_INT_EN		BIT(14)
#define THC_M_PRT_INT_EN_DEV_RAW_INT_EN			BIT(15)
#define THC_M_PRT_INT_EN_FATAL_ERR_INT_EN		BIT(16)
#define THC_M_PRT_INT_EN_THC_I2C_IC_RX_UNDER_INT_EN	BIT(17)
#define THC_M_PRT_INT_EN_THC_I2C_IC_RX_OVER_INT_EN	BIT(18)
#define THC_M_PRT_INT_EN_THC_I2C_IC_RX_FULL_INT_EN	BIT(19)
#define THC_M_PRT_INT_EN_THC_I2C_IC_TX_OVER_INT_EN	BIT(20)
#define THC_M_PRT_INT_EN_THC_I2C_IC_TX_EMPTY_INT_EN	BIT(21)
#define THC_M_PRT_INT_EN_THC_I2C_IC_TX_ABRT_INT_EN	BIT(22)
#define THC_M_PRT_INT_EN_THC_I2C_IC_SCL_STUCK_AT_LOW_DET_INT_EN	BIT(24)
#define THC_M_PRT_INT_EN_THC_I2C_IC_STOP_DET_INT_EN	BIT(25)
#define THC_M_PRT_INT_EN_THC_I2C_IC_START_DET_INT_EN	BIT(26)
#define THC_M_PRT_INT_EN_THC_I2C_IC_MST_ON_HOLD_INT_EN	BIT(27)
#define THC_M_PRT_INT_EN_TXN_ERR_INT_EN			BIT(29)
#define THC_M_PRT_INT_EN_GBL_INT_EN			BIT(31)

#define THC_M_PRT_INT_STATUS_DISP_SYNC_EVT_INT_STS		BIT(14)
#define THC_M_PRT_INT_STATUS_DEV_RAW_INT_STS			BIT(15)
#define THC_M_PRT_INT_STATUS_THC_I2C_IC_RX_UNDER_INT_STS	BIT(17)
#define THC_M_PRT_INT_STATUS_THC_I2C_IC_RX_OVER_INT_STS		BIT(18)
#define THC_M_PRT_INT_STATUS_THC_I2C_IC_RX_FULL_INT_STS		BIT(19)
#define THC_M_PRT_INT_STATUS_THC_I2C_IC_TX_OVER_INT_STS		BIT(20)
#define THC_M_PRT_INT_STATUS_THC_I2C_IC_TX_EMPTY_INT_STS	BIT(21)
#define THC_M_PRT_INT_STATUS_THC_I2C_IC_TX_ABRT_INT_STS		BIT(22)
#define THC_M_PRT_INT_STATUS_THC_I2C_IC_ACTIVITY_INT_STS	BIT(23)
#define THC_M_PRT_INT_STATUS_THC_I2C_IC_SCL_STUCK_AT_LOW_INT_STS	BIT(24)
#define THC_M_PRT_INT_STATUS_THC_I2C_IC_STOP_DET_INT_STS	BIT(25)
#define THC_M_PRT_INT_STATUS_THC_I2C_IC_START_DET_INT_STS	BIT(26)
#define THC_M_PRT_INT_STATUS_THC_I2C_IC_MST_ON_HOLD_INT_STS	BIT(27)
#define THC_M_PRT_INT_STATUS_TXN_ERR_INT_STS			BIT(28)
#define THC_M_PRT_INT_STATUS_FATAL_ERR_INT_STS			BIT(30)

#define THC_M_PRT_ERR_CAUSE_INVLD_DEV_ENTRY	BIT(9)
#define THC_M_PRT_ERR_CAUSE_FRAME_BABBLE_ERR	BIT(10)
#define THC_M_PRT_ERR_CAUSE_BUF_OVRRUN_ERR	BIT(12)
#define THC_M_PRT_ERR_CAUSE_PRD_ENTRY_ERR	BIT(13)
#define THC_M_PRT_ERR_CAUSE_FATAL_ERR_CAUSE	GENMASK(23, 16)

#define THC_M_PRT_SW_SEQ_CNTRL_TSSGO		BIT(0)
#define THC_M_PRT_SW_SEQ_CNTRL_THC_SS_CD_IE	BIT(1)
#define THC_M_PRT_SW_SEQ_CNTRL_THC_SS_CMD	GENMASK(15, 8)
#define THC_M_PRT_SW_SEQ_CNTRL_THC_SS_BC	GENMASK(31, 16)
#define THC_M_PRT_SW_SEQ_STS_TSSDONE		BIT(0)
#define THC_M_PRT_SW_SEQ_STS_THC_SS_ERR		BIT(1)
#define THC_M_PRT_SW_SEQ_STS_THC_SS_CIP		BIT(3)
#define THC_M_PRT_SW_SEQ_DATA0_ADDR_THC_SW_SEQ_DATA0_ADDR	GENMASK(31, 0)
#define THC_M_PRT_SW_SEQ_DATA1_THC_SW_SEQ_DATA1		        GENMASK(31, 0)

#define THC_M_PRT_WPRD_BA_LOW_THC_M_PRT_WPRD_BA_LOW	        GENMASK(31, 12)
#define THC_M_PRT_WPRD_BA_HI_THC_M_PRT_WPRD_BA_HI		GENMASK(31, 0)

#define THC_M_PRT_WRITE_DMA_CNTRL_THC_WRDMA_START		BIT(0)
#define THC_M_PRT_WRITE_DMA_CNTRL_THC_WRDMA_IE_IOC_ERROR	BIT(1)
#define THC_M_PRT_WRITE_DMA_CNTRL_THC_WRDMA_IE_IOC		BIT(2)
#define THC_M_PRT_WRITE_DMA_CNTRL_THC_WRDMA_IE_IOC_DMACPL	BIT(3)
#define THC_M_PRT_WRITE_DMA_CNTRL_THC_WRDMA_UHS			BIT(23)
#define THC_M_PRT_WRITE_DMA_CNTRL_THC_WRDMA_PTEC		GENMASK(31, 24)

#define THC_M_PRT_WRITE_INT_STS_THC_WRDMA_CMPL_STATUS		BIT(0)
#define THC_M_PRT_WRITE_INT_STS_THC_WRDMA_ERROR_STS		BIT(1)
#define THC_M_PRT_WRITE_INT_STS_THC_WRDMA_IOC_STS		BIT(2)
#define THC_M_PRT_WRITE_INT_STS_THC_WRDMA_ACTIVE		BIT(3)

#define THC_M_PRT_WR_BULK_ADDR_THC_M_PRT_WR_BULK_ADDR	        GENMASK(31, 0)

#define THC_M_PRT_DEV_INT_CAUSE_ADDR_THC_M_PRT_DEV_INT_CAUSE_ADDR	GENMASK(31, 0)
#define THC_M_PRT_DEV_INT_CAUSE_REG_VAL_INTERRUPT_TYPE	        GENMASK(3, 0)
#define THC_M_PRT_DEV_INT_CAUSE_REG_VAL_MICRO_FRAME_SIZE	GENMASK(23, 4)
#define THC_M_PRT_DEV_INT_CAUSE_REG_VAL_BEGINNING_OF_FRAME	BIT(29)
#define THC_M_PRT_DEV_INT_CAUSE_REG_VAL_END_OF_FRAME		BIT(30)
#define THC_M_PRT_DEV_INT_CAUSE_REG_VAL_FRAME_TYPE		BIT(31)

#define THC_M_PRT_TX_FRM_CNT_THC_M_PRT_TX_FRM_CNT		GENMASK(30, 0)
#define THC_M_PRT_TX_FRM_CNT_THC_M_PRT_TX_FRM_CNT_RST		BIT(31)

#define THC_M_PRT_TXDMA_PKT_CNT_THC_M_PRT_TXDMA_PKT_CNT	        GENMASK(30, 0)
#define THC_M_PRT_TXDMA_PKT_CNT_THC_M_PRT_TXDMA_PKT_CNT_RST	BIT(31)

#define THC_M_PRT_DEVINT_CNT_THC_M_PRT_DEVINT_CNT		GENMASK(30, 0)
#define THC_M_PRT_DEVINT_CNT_THC_M_PRT_DEVINT_CNT_RST		BIT(31)

#define THC_M_PRT_DEVINT_CFG_1_THC_M_PRT_INTTYP_OFFSET	        GENMASK(4, 0)
#define THC_M_PRT_DEVINT_CFG_1_THC_M_PRT_INTTYP_LEN	        GENMASK(9, 5)
#define THC_M_PRT_DEVINT_CFG_1_THC_M_PRT_EOF_OFFSET	        GENMASK(14, 10)
#define THC_M_PRT_DEVINT_CFG_1_THC_M_PRT_SEND_ICR_US_EN		BIT(15)
#define THC_M_PRT_DEVINT_CFG_1_THC_M_PRT_INTTYP_DATA_VAL	GENMASK(31, 16)

#define THC_M_PRT_DEVINT_CFG_2_THC_M_PRT_UFSIZE_OFFSET	        GENMASK(4, 0)
#define THC_M_PRT_DEVINT_CFG_2_THC_M_PRT_UFSIZE_LEN	        GENMASK(9, 5)
#define THC_M_PRT_DEVINT_CFG_2_THC_M_PRT_UFSIZE_UNIT	        GENMASK(15, 12)
#define THC_M_PRT_DEVINT_CFG_2_THC_M_PRT_FTYPE_IGNORE		BIT(16)
#define THC_M_PRT_DEVINT_CFG_2_THC_M_PRT_FTYPE_VAL		BIT(17)
#define THC_M_PRT_DEVINT_CFG_2_THC_M_PRT_RXDMA_ADDRINC_DIS	BIT(24)
#define THC_M_PRT_DEVINT_CFG_2_THC_M_PRT_TXDMA_ADDRINC_DIS	BIT(25)
#define THC_M_PRT_DEVINT_CFG_2_THC_M_PRT_RXDMA_PKT_STRM_EN	BIT(26)
#define THC_M_PRT_DEVINT_CFG_2_THC_M_PRT_TXDMA_PKT_STRM_EN	BIT(27)
#define THC_M_PRT_DEVINT_CFG_2_THC_M_PRT_DEVINT_POL		BIT(28)

#define THC_M_PRT_RPRD_BA_LOW_1_THC_M_PRT_RPRD_BA_LOW	        GENMASK(31, 12)
#define THC_M_PRT_RPRD_BA_HI_1_THC_M_PRT_RPRD_BA_HI	        GENMASK(31, 0)

#define THC_M_PRT_RPRD_CNTRL_PCD		GENMASK(6, 0)
#define THC_M_PRT_RPRD_CNTRL_PTEC		GENMASK(15, 8)
#define THC_M_PRT_RPRD_CNTRL_PREFETCH_WM	GENMASK(19, 16)

#define THC_M_PRT_READ_DMA_CNTRL_START		BIT(0)
#define THC_M_PRT_READ_DMA_CNTRL_IE_ERROR	BIT(1)
#define THC_M_PRT_READ_DMA_CNTRL_IE_IOC		BIT(2)
#define THC_M_PRT_READ_DMA_CNTRL_IE_STALL	BIT(3)
#define THC_M_PRT_READ_DMA_CNTRL_IE_NDDI	BIT(4)
#define THC_M_PRT_READ_DMA_CNTRL_IE_EOF		BIT(5)
#define THC_M_PRT_READ_DMA_CNTRL_IE_DMACPL	BIT(7)
#define THC_M_PRT_READ_DMA_CNTRL_TPCRP	        GENMASK(15, 8)
#define THC_M_PRT_READ_DMA_CNTRL_TPCWP	        GENMASK(23, 16)
#define THC_M_PRT_READ_DMA_CNTRL_INT_SW_DMA_EN	BIT(28)
#define THC_M_PRT_READ_DMA_CNTRL_SOO		BIT(29)
#define THC_M_PRT_READ_DMA_CNTRL_UHS		BIT(30)
#define THC_M_PRT_READ_DMA_CNTRL_TPCPR		BIT(31)

#define THC_M_PRT_READ_DMA_INT_STS_DMACPL_STS	BIT(0)
#define THC_M_PRT_READ_DMA_INT_STS_ERROR_STS	BIT(1)
#define THC_M_PRT_READ_DMA_INT_STS_IOC_STS	BIT(2)
#define THC_M_PRT_READ_DMA_INT_STS_STALL_STS	BIT(3)
#define THC_M_PRT_READ_DMA_INT_STS_NONDMA_INT_STS	BIT(4)
#define THC_M_PRT_READ_DMA_INT_STS_EOF_INT_STS	BIT(5)
#define THC_M_PRT_READ_DMA_INT_STS_ACTIVE	BIT(8)

#define THC_M_PRT_READ_DMA_ERR_1_DLERR		BIT(0)

#define THC_M_PRT_GUC_OFFSET_LOW_1_THC_M_PRT_GUC_OFFSET_LOW	GENMASK(31, 3)
#define THC_M_PRT_GUC_OFFSET_HI_1_THC_M_PRT_GUC_OFFSET_HI	GENMASK(31, 0)
#define THC_M_PRT_GUC_WORKQ_ITEM_SZ_1_WORKQ_ITEM_SZ	        GENMASK(23, 0)
#define THC_M_PRT_GUC_WORKQ_SZ_1_WORKQ_SZ       GENMASK(23, 0)
#define THC_M_PRT_GUC_WORKQ_SZ_1_FCD	        GENMASK(27, 24)
#define THC_M_PRT_GUC_WORKQ_SZ_1_GIC	        GENMASK(31, 28)

#define THC_M_PRT_TSEQ_CNTRL_1_RGD		BIT(2)
#define THC_M_PRT_TSEQ_CNTRL_1_EGP		BIT(3)
#define THC_M_PRT_TSEQ_CNTRL_1_RTO		BIT(4)
#define THC_M_PRT_TSEQ_CNTRL_1_EWOG		BIT(5)
#define THC_M_PRT_TSEQ_CNTRL_1_RWOGC		BIT(6)
#define THC_M_PRT_TSEQ_CNTRL_1_RX_DATA_FIFO_WR_WM		GENMASK(25, 16)
#define THC_M_PRT_TSEQ_CNTRL_1_RESET_PREP_CHICKEN		BIT(30)
#define THC_M_PRT_TSEQ_CNTRL_1_INT_EDG_DET_EN			BIT(31)

#define THC_M_PRT_GUC_DB_ADDR_LOW_1_GUC_DB_ADDR_LOW	        GENMASK(31, 2)
#define THC_M_PRT_GUC_DB_ADDR_HI_1_GUC_DB_ADDR_HI		GENMASK(31, 0)
#define THC_M_PRT_GUC_DB_DATA_1_GUC_DB_DATA		        GENMASK(31, 0)
#define THC_M_PRT_GUC_OFFSET_INITVAL_1_THC_M_PRT_GUC_OFFSET_INITVAL	GENMASK(31, 0)

#define THC_M_PRT_RD_BULK_ADDR_1_THC_M_PRT_RD_BULK_ADDR	        GENMASK(31, 0)

#define THC_M_PRT_DB_CNT_1_THC_M_PRT_DB_CNT		        GENMASK(30, 0)
#define THC_M_PRT_DB_CNT_1_THC_M_PRT_DB_CNT_RST			BIT(31)

#define THC_M_PRT_FRM_CNT_1_THC_M_PRT_FRM_CNT		        GENMASK(30, 0)
#define THC_M_PRT_FRM_CNT_1_THC_M_PRT_FRM_CNT_RST		BIT(31)

#define THC_M_PRT_UFRM_CNT_1_THC_M_PRT_UFRM_CNT		        GENMASK(30, 0)
#define THC_M_PRT_UFRM_CNT_1_THC_M_PRT_UFRM_CNT_RST		BIT(31)

#define THC_M_PRT_RXDMA_PKT_CNT_1_THC_M_PRT_RXDMA_PKT_CNT	GENMASK(30, 0)
#define THC_M_PRT_RXDMA_PKT_CNT_1_THC_M_PRT_RXDMA_PKT_CNT_RST	BIT(31)

#define THC_M_PRT_SWINT_CNT_1_THC_M_PRT_SWINT_CNT		GENMASK(30, 0)
#define THC_M_PRT_SWINT_CNT_1_THC_M_PRT_SWINT_CNT_RST		BIT(31)

#define THC_M_PRT_FRAME_DROP_CNT_1_NOFD			        GENMASK(30, 0)
#define THC_M_PRT_FRAME_DROP_CNT_1_RFDC				BIT(31)

#define THC_M_PRT_COALESCE_1_COALESCE_TIMEOUT		        GENMASK(6, 0)

#define THC_M_PRT_RPRD_BA_LOW_2_THC_M_PRT_RPRD_BA_LOW	        GENMASK(31, 12)
#define THC_M_PRT_RPRD_BA_HI_2_THC_M_PRT_RPRD_BA_HI	        GENMASK(31, 0)

#define THC_M_PRT_READ_DMA_ERR_2_DLERR				BIT(0)

#define THC_M_PRT_GUC_OFFSET_LOW_2_THC_M_PRT_GUC_OFFSET_LOW     GENMASK(31, 3)
#define THC_M_PRT_GUC_OFFSET_HI_2_THC_M_PRT_GUC_OFFSET_HI	GENMASK(31, 0)

#define THC_M_PRT_GUC_WORKQ_ITEM_SZ_2_WORKQ_ITEM_SZ	        GENMASK(23, 0)
#define THC_M_PRT_GUC_WORKQ_SZ_2_WORKQ_SZ			GENMASK(23, 0)
#define THC_M_PRT_GUC_WORKQ_SZ_2_FCD			        GENMASK(27, 24)
#define THC_M_PRT_GUC_WORKQ_SZ_2_GIC			        GENMASK(31, 28)

#define THC_M_PRT_TSEQ_CNTRL_2_RGD				BIT(2)
#define THC_M_PRT_TSEQ_CNTRL_2_EGP				BIT(3)
#define THC_M_PRT_TSEQ_CNTRL_2_RTO				BIT(4)

#define THC_M_PRT_GUC_DB_ADDR_LOW_2_GUC_DB_ADDR_LOW	        GENMASK(31, 2)
#define THC_M_PRT_GUC_DB_ADDR_HI_2_GUC_DB_ADDR_HI		GENMASK(31, 0)

#define THC_M_PRT_GUC_DB_DATA_2_GUC_DB_DATA		        GENMASK(31, 0)

#define THC_M_PRT_GUC_OFFSET_INITVAL_2_THC_M_PRT_GUC_OFFSET_INITVAL	GENMASK(31, 0)

#define THC_M_PRT_RD_BULK_ADDR_2_THC_M_PRT_RD_BULK_ADDR	        GENMASK(31, 0)

#define THC_M_PRT_DB_CNT_2_THC_M_PRT_DB_CNT		        GENMASK(30, 0)
#define THC_M_PRT_DB_CNT_2_THC_M_PRT_DB_CNT_RST			BIT(31)

#define THC_M_PRT_FRM_CNT_2_THC_M_PRT_FRM_CNT		        GENMASK(30, 0)
#define THC_M_PRT_FRM_CNT_2_THC_M_PRT_FRM_CNT_RST		BIT(31)

#define THC_M_PRT_UFRM_CNT_2_THC_M_PRT_UFRM_CNT		        GENMASK(30, 0)
#define THC_M_PRT_UFRM_CNT_2_THC_M_PRT_UFRM_CNT_RST		BIT(31)

#define THC_M_PRT_RXDMA_PKT_CNT_2_THC_M_PRT_RXDMA_PKT_CNT	GENMASK(30, 0)
#define THC_M_PRT_RXDMA_PKT_CNT_2_THC_M_PRT_RXDMA_PKT_CNT_RST	BIT(31)

#define THC_M_PRT_SWINT_CNT_2_THC_M_PRT_SWINT_CNT		GENMASK(30, 0)
#define THC_M_PRT_SWINT_CNT_2_THC_M_PRT_SWINT_CNT_RST		BIT(31)

#define THC_M_PRT_FRAME_DROP_CNT_2_NOFD			        GENMASK(30, 0)
#define THC_M_PRT_FRAME_DROP_CNT_2_RFDC				BIT(31)

#define THC_M_PRT_COALESCE_2_COALESCE_TIMEOUT		        GENMASK(6, 0)

#define THC_M_PRT_SW_SEQ_I2C_WR_CNTRL_THC_I2C_RW_PIO_EN		BIT(23)
#define THC_M_PRT_SW_SEQ_I2C_WR_CNTRL_THC_PIO_I2C_WBC	        GENMASK(31, 26)

#define THC_M_PRT_RPRD_CNTRL_SW_THC_SWDMA_I2C_RX_DLEN_EN	BIT(23)
#define THC_M_PRT_RPRD_CNTRL_SW_THC_SWDMA_I2C_WBC		GENMASK(31, 26)

#define THC_M_PRT_PRD_EMPTY_CNT_1_RPTEC				BIT(31)
#define THC_M_PRT_PRD_EMPTY_CNT_2_RPTEC				BIT(31)

#define THC_M_PRT_SW_DMA_PRD_TABLE_LEN_THC_M_PRT_SW_DMA_PRD_TABLE_LEN	GENMASK(23, 0)

#define THC_M_PRT_SPI_DUTYC_CFG_SPI_CSA_CK_DELAY_VAL		GENMASK(3, 0)
#define THC_M_PRT_SPI_DUTYC_CFG_SPI_CSA_CK_DELAY_EN		BIT(25)

/* CS Assertion delay default value */
#define THC_CSA_CK_DELAY_VAL_DEFAULT		4

/* ARB policy definition */
/* Arbiter switches on packet boundary */
#define THC_ARB_POLICY_PACKET_BOUNDARY		0
/* Arbiter switches on Micro Frame boundary */
#define THC_ARB_POLICY_UFRAME_BOUNDARY		1
/* Arbiter switches on Frame boundary */
#define THC_ARB_POLICY_FRAME_BOUNDARY		2

#define THC_REGMAP_POLLING_INTERVAL_US		10 /* 10us */
#define THC_PIO_DONE_TIMEOUT_US			USEC_PER_SEC /* 1s */

/* Default configures for HIDSPI */
#define THC_BIT_OFFSET_INTERRUPT_TYPE		4
/* input_report_type is 4 bits for HIDSPI */
#define THC_BIT_LENGTH_INTERRUPT_TYPE		4
/* Last fragment indicator is bit 15 for HIDSPI */
#define THC_BIT_OFFSET_LAST_FRAGMENT_FLAG	22
#define THC_BIT_OFFSET_MICROFRAME_SIZE		8
/* input_report_length is 14 bits for HIDSPI */
#define THC_BIT_LENGTH_MICROFRAME_SIZE		14
/* MFS unit in power of 2 */
#define THC_UNIT_MICROFRAME_SIZE		2
#define THC_BITMASK_INTERRUPT_TYPE_DATA		1
#define THC_BITMASK_INVALID_TYPE_DATA		2

/* Interrupt Quiesce default timeout value */
#define THC_QUIESCE_EN_TIMEOUT_US		USEC_PER_SEC /* 1s */

/* LTR definition */
/*
 * THC uses scale to calculate final LTR value.
 * Scale is geometric progression of 2^5 step, starting from 2^0.
 * For example, THC_LTR_SCALE_2(2) means 2^(5 * 2) = 1024, unit is ns.
 */
#define THC_LTR_SCALE_0				0
#define THC_LTR_SCALE_1				1
#define THC_LTR_SCALE_2				2
#define THC_LTR_SCALE_3				3
#define THC_LTR_SCALE_4				4
#define THC_LTR_SCALE_5				5
#define THC_LTR_MODE_ACTIVE			0
#define THC_LTR_MODE_LP				1
#define THC_LTR_MIN_VAL_SCALE_3			BIT(10)
#define THC_LTR_MAX_VAL_SCALE_3			BIT(15)
#define THC_LTR_MIN_VAL_SCALE_4			BIT(15)
#define THC_LTR_MAX_VAL_SCALE_4			BIT(20)
#define THC_LTR_MIN_VAL_SCALE_5			BIT(20)
#define THC_LTR_MAX_VAL_SCALE_5			BIT(25)

/*
 * THC PIO opcode default value
 * @THC_PIO_OP_SPI_TIC_READ: THC opcode for SPI PIO read
 * @THC_PIO_OP_SPI_TIC_WRITE: THC opcode for SPI PIO write
 * @THC_PIO_OP_I2C_SUBSYSTEM_READ: THC opcode for read I2C subsystem registers
 * @THC_PIO_OP_I2C_SUBSYSTEM_WRITE: THC opcode for write I2C subsystem registers
 * @THC_PIO_OP_I2C_TIC_READ: THC opcode for read I2C device
 * @THC_PIO_OP_I2C_TIC_WRITE: THC opcode for write I2C device
 * @THC_PIO_OP_I2C_TIC_WRITE_AND_READ: THC opcode for write followed by read I2C device
 */
enum thc_pio_opcode {
	THC_PIO_OP_SPI_TIC_READ = 0x4,
	THC_PIO_OP_SPI_TIC_WRITE = 0x6,
	THC_PIO_OP_I2C_SUBSYSTEM_READ = 0x12,
	THC_PIO_OP_I2C_SUBSYSTEM_WRITE = 0x13,
	THC_PIO_OP_I2C_TIC_READ = 0x14,
	THC_PIO_OP_I2C_TIC_WRITE = 0x18,
	THC_PIO_OP_I2C_TIC_WRITE_AND_READ = 0x1C,
};

/**
 * THC SPI IO mode
 * @THC_SINGLE_IO: single IO mode, 1(opcode) - 1(address) - 1(data)
 * @THC_DUAL_IO: dual IO mode, 1(opcode) - 2(address) - 2(data)
 * @THC_QUAD_IO: quad IO mode, 1(opcode) - 4(address) - 4(data)
 * @THC_QUAD_PARALLEL_IO: parallel quad IO mode, 4(opcode) - 4(address) - 4(data)
 */
enum thc_spi_iomode {
	THC_SINGLE_IO = 0,
	THC_DUAL_IO = 1,
	THC_QUAD_IO = 2,
	THC_QUAD_PARALLEL_IO = 3,
};

/**
 * THC SPI frequency divider
 *
 * This DIV final value is determined by THC_M_PRT_SPI_CFG_SPI_LOW_FREQ_EN bit.
 * If THC_M_PRT_SPI_CFG_SPI_LOW_FREQ_EN isn't be set, THC takes the DIV value directly;
 * If THC_M_PRT_SPI_CFG_SPI_LOW_FREQ_EN is set, THC takes the DIV value multiply by 8.
 *
 * For example, if THC input clock is 125MHz:
 * When THC_M_PRT_SPI_CFG_SPI_LOW_FREQ_EN isn't set, THC_SPI_FRQ_DIV_3 means DIV is 3,
 * THC final clock is 125 / 3 = 41.667MHz;
 * When THC_M_PRT_SPI_CFG_SPI_LOW_FREQ_EN is set, THC_SPI_FRQ_DIV_3 means DIV is 3 * 8,
 * THC final clock is 125 / (3 * 8) = 5.208MHz;
 */
enum thc_spi_frq_div {
	THC_SPI_FRQ_RESERVED = 0,
	THC_SPI_FRQ_DIV_1 = 1,
	THC_SPI_FRQ_DIV_2 = 2,
	THC_SPI_FRQ_DIV_3 = 3,
	THC_SPI_FRQ_DIV_4 = 4,
	THC_SPI_FRQ_DIV_5 = 5,
	THC_SPI_FRQ_DIV_6 = 6,
	THC_SPI_FRQ_DIV_7 = 7,
};

/* THC I2C sub-system registers */
#define THC_I2C_IC_CON_OFFSET				0x0
#define THC_I2C_IC_TAR_OFFSET				0x4
#define THC_I2C_IC_SAR_OFFSET				0x8
#define THC_I2C_IC_HS_MADDR_OFFSET			0xC
#define THC_I2C_IC_DATA_CMD_OFFSET			0x10
#define THC_I2C_IC_SS_SCL_HCNT_OFFSET			0x14
#define THC_I2C_IC_UFM_SCL_HCNT_OFFSET			0x14
#define THC_I2C_IC_SS_SCL_LCNT_OFFSET			0x18
#define THC_I2C_IC_UFM_SCL_LCNT_OFFSET			0x18
#define THC_I2C_IC_FS_SCL_HCNT_OFFSET			0x1C
#define THC_I2C_IC_UFM_TBUF_CNT_OFFSET			0x1C
#define THC_I2C_IC_FS_SCL_LCNT_OFFSET			0x20
#define THC_I2C_IC_HS_SCL_HCNT_OFFSET			0x24
#define THC_I2C_IC_HS_SCL_LCNT_OFFSET			0x28
#define THC_I2C_IC_INTR_STAT_OFFSET			0x2C
#define THC_I2C_IC_INTR_MASK_OFFSET			0x30
#define THC_I2C_IC_RAW_INTR_STAT_OFFSET			0x34
#define THC_I2C_IC_RX_TL_OFFSET				0x38
#define THC_I2C_IC_TX_TL_OFFSET				0x3C
#define THC_I2C_IC_CLR_INTR_OFFSET			0x40
#define THC_I2C_IC_CLR_RX_UNDER_OFFSET			0x44
#define THC_I2C_IC_CLR_RX_OVER_OFFSET			0x48
#define THC_I2C_IC_CLR_TX_OVER_OFFSET			0x4C
#define THC_I2C_IC_CLR_RD_REQ_OFFSET			0x50
#define THC_I2C_IC_CLR_TX_ABRT_OFFSET			0x54
#define THC_I2C_IC_CLR_RX_DONE_OFFSET			0x58
#define THC_I2C_IC_CLR_ACTIVITY_OFFSET			0x5C
#define THC_I2C_IC_CLR_STOP_DET_OFFSET			0x60
#define THC_I2C_IC_CLR_START_DET_OFFSET			0x64
#define THC_I2C_IC_CLR_GEN_CALL_OFFSET			0x68
#define THC_I2C_IC_ENABLE_OFFSET			0x6C
#define THC_I2C_IC_STATUS_OFFSET			0x70
#define THC_I2C_IC_TXFLR_OFFSET				0x74
#define THC_I2C_IC_RXFLR_OFFSET				0x78
#define THC_I2C_IC_SDA_HOLD_OFFSET			0x7C
#define THC_I2C_IC_TX_ABRT_SOURCE_OFFSET		0x80
#define THC_I2C_IC_SLV_DATA_NACK_ONLY_OFFSET		0x84
#define THC_I2C_IC_DMA_CR_OFFSET			0x88
#define THC_I2C_IC_DMA_TDLR_OFFSET			0x8C
#define THC_I2C_IC_DMA_RDLR_OFFSET			0x90
#define THC_I2C_IC_SDA_SETUP_OFFSET			0x94
#define THC_I2C_IC_ACK_GENERAL_CALL_OFFSET		0x98
#define THC_I2C_IC_ENABLE_STATUS_OFFSET			0x9C
#define THC_I2C_IC_FS_SPKLEN_OFFSET			0xA0
#define THC_I2C_IC_UFM_SPKLEN_OFFSET			0xA0
#define THC_I2C_IC_HS_SPKLEN_OFFSET			0xA4
#define THC_I2C_IC_CLR_RESTART_DET_OFFSET		0xA8
#define THC_I2C_IC_SCL_STUCK_AT_LOW_TIMEOUT_OFFSET	0xAC
#define THC_I2C_IC_SDA_STUCK_AT_LOW_TIMEOUT_OFFSET	0xB0
#define THC_I2C_IC_CLR_SCL_STUCK_DET_OFFSET		0xB4
#define THC_I2C_IC_DEVICE_ID_OFFSET			0xB8
#define THC_I2C_IC_SMBUS_CLK_LOW_SEXT_OFFSET		0xBC
#define THC_I2C_IC_SMBUS_CLK_LOW_MEXT_OFFSET		0xC0
#define THC_I2C_IC_SMBUS_THIGH_MAX_IDLE_COUNT_OFFSET	0xC4
#define THC_I2C_IC_SMBUS_INTR_STAT_OFFSET		0xC8
#define THC_I2C_IC_SMBUS_INTR_MASK_OFFSET		0xCC
#define THC_I2C_IC_SMBUS_RAW_INTR_STAT_OFFSET		0xD0
#define THC_I2C_IC_CLR_SMBUS_INTR_OFFSET		0xD4
#define THC_I2C_IC_OPTIONAL_SAR_OFFSET			0xD8
#define THC_I2C_IC_SMBUS_UDID_LSB_OFFSET		0xDC
#define THC_I2C_IC_SMBUS_UDID_WORD0_OFFSET		0xDC
#define THC_I2C_IC_SMBUS_UDID_WORD1_OFFSET		0xE0
#define THC_I2C_IC_SMBUS_UDID_WORD2_OFFSET		0xE4
#define THC_I2C_IC_SMBUS_UDID_WORD3_OFFSET		0xE8
#define THC_I2C_IC_COMP_PARAM_1_OFFSET			0xF4
#define THC_I2C_IC_COMP_VERSION_OFFSET			0xF8
#define THC_I2C_IC_COMP_TYPE_OFFSET			0xFC

/**
 * THC I2C sub-system supported speed mode
 */
enum THC_I2C_SPEED_MODE {
	THC_I2C_STANDARD = 1,
	THC_I2C_FAST_AND_PLUS = 2,
	THC_I2C_HIGH_SPEED = 3,
};

/* THC I2C sub-system register bits definition */
#define THC_I2C_IC_ENABLE_ENABLE			BIT(0)
#define THC_I2C_IC_ENABLE_ABORT				BIT(1)
#define THC_I2C_IC_ENABLE_TX_CMD_BLOCK			BIT(2)
#define THC_I2C_IC_ENABLE_SDA_STUCK_RECOVERY_ENABLE	BIT(3)
#define THC_I2C_IC_ENABLE_SMBUS_CLK_RESET		BIT(16)
#define THC_I2C_IC_ENABLE_SMBUS_SUSPEND_EN		BIT(17)
#define THC_I2C_IC_ENABLE_SMBUS_ALERT_EN		BIT(18)

#define THC_I2C_IC_CON_MASTER_MODE			BIT(0)
#define THC_I2C_IC_CON_SPEED				GENMASK(2, 1)
#define THC_I2C_IC_CON_IC_10BITADDR_SLAVE		BIT(3)
#define THC_I2C_IC_CON_IC_10BITADDR_MASTER		BIT(4)
#define THC_I2C_IC_CON_IC_RESTART_EN			BIT(5)
#define THC_I2C_IC_CON_IC_SLAVE_DISABLE			BIT(6)
#define THC_I2C_IC_CON_STOP_DET_IFADDRESSED		BIT(7)
#define THC_I2C_IC_CON_TX_EMPTY_CTRL			BIT(8)
#define THC_I2C_IC_CON_RX_FIFO_FULL_HLD_CTRL		BIT(9)
#define THC_I2C_IC_CON_STOP_DET_IF_MASTER_ACTIVE	BIT(10)
#define THC_I2C_IC_CON_BUS_CLEAR_FEATURE_CTRL		BIT(11)
#define THC_I2C_IC_CON_OPTIONAL_SAR_CTRL		BIT(16)
#define THC_I2C_IC_CON_SMBUS_SLAVE_QUICK_EN		BIT(17)
#define THC_I2C_IC_CON_SMBUS_ARP_EN			BIT(18)
#define THC_I2C_IC_CON_SMBUS_PERSISTENT_SLV_ADDR_EN	BIT(19)

#define THC_I2C_IC_TAR_IC_TAR				GENMASK(9, 0)
#define THC_I2C_IC_TAR_GC_OR_START			BIT(10)
#define THC_I2C_IC_TAR_SPECIAL				BIT(11)
#define THC_I2C_IC_TAR_IC_10BITADDR_MASTER		BIT(12)
#define THC_I2C_IC_TAR_DEVICE_ID			BIT(13)
#define THC_I2C_IC_TAR_SMBUS_QUICK_CMD			BIT(16)

#define THC_I2C_IC_INTR_MASK_M_RX_UNDER			BIT(0)
#define THC_I2C_IC_INTR_MASK_M_RX_OVER			BIT(1)
#define THC_I2C_IC_INTR_MASK_M_RX_FULL			BIT(2)
#define THC_I2C_IC_INTR_MASK_M_TX_OVER			BIT(3)
#define THC_I2C_IC_INTR_MASK_M_TX_EMPTY			BIT(4)
#define THC_I2C_IC_INTR_MASK_M_RD_REQ			BIT(5)
#define THC_I2C_IC_INTR_MASK_M_TX_ABRT			BIT(6)
#define THC_I2C_IC_INTR_MASK_M_RX_DONE			BIT(7)
#define THC_I2C_IC_INTR_MASK_M_ACTIVITY			BIT(8)
#define THC_I2C_IC_INTR_MASK_M_STOP_DET			BIT(9)
#define THC_I2C_IC_INTR_MASK_M_START_DET		BIT(10)
#define THC_I2C_IC_INTR_MASK_M_GEN_CALL			BIT(11)
#define THC_I2C_IC_INTR_MASK_M_RESTART_DET		BIT(12)
#define THC_I2C_IC_INTR_MASK_M_MASTER_ON_HOLD		BIT(13)
#define THC_I2C_IC_INTR_MASK_M_SCL_STUCK_AT_LOW		BIT(14)

#define THC_I2C_IC_DMA_CR_RDMAE				BIT(0)
#define THC_I2C_IC_DMA_CR_TDMAE				BIT(1)

#endif /* _INTEL_THC_HW_H_  */