aboutsummaryrefslogtreecommitdiff
path: root/src/vendorcode/cavium/include/bdk/libbdk-arch/bdk-csrs-l2c.h
blob: 3b32bc59f7e43fb9ce5e6599fa21e81c664d724a (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
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563
2564
2565
2566
2567
2568
2569
2570
2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583
2584
2585
2586
2587
2588
2589
2590
2591
2592
2593
2594
2595
2596
2597
2598
2599
2600
2601
2602
2603
2604
2605
2606
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627
2628
2629
2630
2631
2632
2633
2634
2635
2636
2637
#ifndef __BDK_CSRS_L2C_H__
#define __BDK_CSRS_L2C_H__
/* This file is auto-generated. Do not edit */

/***********************license start***************
 * Copyright (c) 2003-2017  Cavium Inc. (support@cavium.com). All rights
 * reserved.
 *
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are
 * met:
 *
 *   * Redistributions of source code must retain the above copyright
 *     notice, this list of conditions and the following disclaimer.
 *
 *   * Redistributions in binary form must reproduce the above
 *     copyright notice, this list of conditions and the following
 *     disclaimer in the documentation and/or other materials provided
 *     with the distribution.

 *   * Neither the name of Cavium Inc. nor the names of
 *     its contributors may be used to endorse or promote products
 *     derived from this software without specific prior written
 *     permission.

 * This Software, including technical data, may be subject to U.S. export  control
 * laws, including the U.S. Export Administration Act and its  associated
 * regulations, and may be subject to export or import  regulations in other
 * countries.

 * TO THE MAXIMUM EXTENT PERMITTED BY LAW, THE SOFTWARE IS PROVIDED "AS IS"
 * AND WITH ALL FAULTS AND CAVIUM  NETWORKS MAKES NO PROMISES, REPRESENTATIONS OR
 * WARRANTIES, EITHER EXPRESS, IMPLIED, STATUTORY, OR OTHERWISE, WITH RESPECT TO
 * THE SOFTWARE, INCLUDING ITS CONDITION, ITS CONFORMITY TO ANY REPRESENTATION OR
 * DESCRIPTION, OR THE EXISTENCE OF ANY LATENT OR PATENT DEFECTS, AND CAVIUM
 * SPECIFICALLY DISCLAIMS ALL IMPLIED (IF ANY) WARRANTIES OF TITLE,
 * MERCHANTABILITY, NONINFRINGEMENT, FITNESS FOR A PARTICULAR PURPOSE, LACK OF
 * VIRUSES, ACCURACY OR COMPLETENESS, QUIET ENJOYMENT, QUIET POSSESSION OR
 * CORRESPONDENCE TO DESCRIPTION. THE ENTIRE  RISK ARISING OUT OF USE OR
 * PERFORMANCE OF THE SOFTWARE LIES WITH YOU.
 ***********************license end**************************************/


/**
 * @file
 *
 * Configuration and status register (CSR) address and type definitions for
 * Cavium L2C.
 *
 * This file is auto generated. Do not edit.
 *
 */

/**
 * Enumeration inv_cmd_e
 *
 * INTERNAL: INV Command Enumeration
 *
 * Enumerates the different INV command encodings.
 */
#define BDK_INV_CMD_E_ALLEX (0xc)
#define BDK_INV_CMD_E_ASIDE1 (0xd)
#define BDK_INV_CMD_E_GBLSYNC (0xf)
#define BDK_INV_CMD_E_IALLU (9)
#define BDK_INV_CMD_E_INV (8)
#define BDK_INV_CMD_E_IPAS2E1 (7)
#define BDK_INV_CMD_E_IVAU (4)
#define BDK_INV_CMD_E_NOP (0)
#define BDK_INV_CMD_E_SEV (0xe)
#define BDK_INV_CMD_E_VAAE1 (6)
#define BDK_INV_CMD_E_VAEX (5)
#define BDK_INV_CMD_E_VMALLE1 (0xa)
#define BDK_INV_CMD_E_VMALLS12 (0xb)

/**
 * Enumeration ioc_cmd_e
 *
 * INTERNAL: IOC Command Enumeration
 *
 * Enumerates the different IOC command encodings.
 */
#define BDK_IOC_CMD_E_ADDR (6)
#define BDK_IOC_CMD_E_IAADD (0xc)
#define BDK_IOC_CMD_E_IACAS (0xa)
#define BDK_IOC_CMD_E_IACLR (0xd)
#define BDK_IOC_CMD_E_IASET (0xe)
#define BDK_IOC_CMD_E_IASWP (0xb)
#define BDK_IOC_CMD_E_IDLE (0)
#define BDK_IOC_CMD_E_LMTST (3)
#define BDK_IOC_CMD_E_LOAD (2)
#define BDK_IOC_CMD_E_SLILD (8)
#define BDK_IOC_CMD_E_SLIST (7)
#define BDK_IOC_CMD_E_STORE (1)
#define BDK_IOC_CMD_E_STOREP (9)

/**
 * Enumeration ior_cmd_e
 *
 * INTERNAL: IOR Command Enumeration
 *
 * Enumerates the different IOR command encodings.
 */
#define BDK_IOR_CMD_E_DATA (1)
#define BDK_IOR_CMD_E_IDLE (0)
#define BDK_IOR_CMD_E_SLIRSP (3)

/**
 * Enumeration l2c_bar_e
 *
 * L2C Base Address Register Enumeration
 * Enumerates the base address registers.
 */
#define BDK_L2C_BAR_E_L2C_PF_BAR0 (0x87e080800000ll)
#define BDK_L2C_BAR_E_L2C_PF_BAR0_SIZE 0x800000ull

/**
 * Enumeration l2c_dat_errprio_e
 *
 * L2C Quad Error Priority Enumeration
 * Enumerates the different quad error priorities.
 */
#define BDK_L2C_DAT_ERRPRIO_E_FBFDBE (4)
#define BDK_L2C_DAT_ERRPRIO_E_FBFSBE (1)
#define BDK_L2C_DAT_ERRPRIO_E_L2DDBE (6)
#define BDK_L2C_DAT_ERRPRIO_E_L2DSBE (3)
#define BDK_L2C_DAT_ERRPRIO_E_NBE (0)
#define BDK_L2C_DAT_ERRPRIO_E_SBFDBE (5)
#define BDK_L2C_DAT_ERRPRIO_E_SBFSBE (2)

/**
 * Enumeration l2c_tad_prf_sel_e
 *
 * L2C TAD Performance Counter Select Enumeration
 * Enumerates the different TAD performance counter selects.
 */
#define BDK_L2C_TAD_PRF_SEL_E_L2T_HIT (1)
#define BDK_L2C_TAD_PRF_SEL_E_L2T_MISS (2)
#define BDK_L2C_TAD_PRF_SEL_E_L2T_NOALLOC (3)
#define BDK_L2C_TAD_PRF_SEL_E_L2_OPEN_OCI (0x48)
#define BDK_L2C_TAD_PRF_SEL_E_L2_RTG_VIC (0x44)
#define BDK_L2C_TAD_PRF_SEL_E_L2_VIC (4)
#define BDK_L2C_TAD_PRF_SEL_E_LFB_OCC (7)
#define BDK_L2C_TAD_PRF_SEL_E_LMC_WR (0x4e)
#define BDK_L2C_TAD_PRF_SEL_E_LMC_WR_SBLKDTY (0x4f)
#define BDK_L2C_TAD_PRF_SEL_E_LOOKUP (0x40)
#define BDK_L2C_TAD_PRF_SEL_E_LOOKUP_ALL (0x44)
#define BDK_L2C_TAD_PRF_SEL_E_LOOKUP_MIB (0x43)
#define BDK_L2C_TAD_PRF_SEL_E_LOOKUP_XMC_LCL (0x41)
#define BDK_L2C_TAD_PRF_SEL_E_LOOKUP_XMC_RMT (0x42)
#define BDK_L2C_TAD_PRF_SEL_E_NONE (0)
#define BDK_L2C_TAD_PRF_SEL_E_OCI_FLDX_TAG_E_DAT (0x6d)
#define BDK_L2C_TAD_PRF_SEL_E_OCI_FLDX_TAG_E_NODAT (0x6c)
#define BDK_L2C_TAD_PRF_SEL_E_OCI_FWD_CYC_HIT (0x69)
#define BDK_L2C_TAD_PRF_SEL_E_OCI_FWD_RACE (0x6a)
#define BDK_L2C_TAD_PRF_SEL_E_OCI_HAKS (0x6b)
#define BDK_L2C_TAD_PRF_SEL_E_OCI_RLDD (0x6e)
#define BDK_L2C_TAD_PRF_SEL_E_OCI_RLDD_PEMD (0x6f)
#define BDK_L2C_TAD_PRF_SEL_E_OCI_RRQ_DAT_CNT (0x70)
#define BDK_L2C_TAD_PRF_SEL_E_OCI_RRQ_DAT_DMASK (0x71)
#define BDK_L2C_TAD_PRF_SEL_E_OCI_RSP_DAT_CNT (0x72)
#define BDK_L2C_TAD_PRF_SEL_E_OCI_RSP_DAT_DMASK (0x73)
#define BDK_L2C_TAD_PRF_SEL_E_OCI_RSP_DAT_VICD_CNT (0x74)
#define BDK_L2C_TAD_PRF_SEL_E_OCI_RSP_DAT_VICD_DMASK (0x75)
#define BDK_L2C_TAD_PRF_SEL_E_OCI_RTG_WAIT (0x68)
#define BDK_L2C_TAD_PRF_SEL_E_OPEN_CCPI (0xa)
#define BDK_L2C_TAD_PRF_SEL_E_QDX_BNKS(a) (0x82 + 0x10 * (a))
#define BDK_L2C_TAD_PRF_SEL_E_QDX_IDX(a) (0x80 + 0x10 * (a))
#define BDK_L2C_TAD_PRF_SEL_E_QDX_RDAT(a) (0x81 + 0x10 * (a))
#define BDK_L2C_TAD_PRF_SEL_E_QDX_WDAT(a) (0x83 + 0x10 * (a))
#define BDK_L2C_TAD_PRF_SEL_E_RTG_ALC (0x5d)
#define BDK_L2C_TAD_PRF_SEL_E_RTG_ALC_EVICT (0x76)
#define BDK_L2C_TAD_PRF_SEL_E_RTG_ALC_HIT (0x5e)
#define BDK_L2C_TAD_PRF_SEL_E_RTG_ALC_HITWB (0x5f)
#define BDK_L2C_TAD_PRF_SEL_E_RTG_ALC_VIC (0x77)
#define BDK_L2C_TAD_PRF_SEL_E_RTG_HIT (0x41)
#define BDK_L2C_TAD_PRF_SEL_E_RTG_MISS (0x42)
#define BDK_L2C_TAD_PRF_SEL_E_SC_FAIL (5)
#define BDK_L2C_TAD_PRF_SEL_E_SC_PASS (6)
#define BDK_L2C_TAD_PRF_SEL_E_STC_LCL (0x64)
#define BDK_L2C_TAD_PRF_SEL_E_STC_LCL_FAIL (0x65)
#define BDK_L2C_TAD_PRF_SEL_E_STC_RMT (0x62)
#define BDK_L2C_TAD_PRF_SEL_E_STC_RMT_FAIL (0x63)
#define BDK_L2C_TAD_PRF_SEL_E_STC_TOTAL (0x60)
#define BDK_L2C_TAD_PRF_SEL_E_STC_TOTAL_FAIL (0x61)
#define BDK_L2C_TAD_PRF_SEL_E_TAG_ALC_HIT (0x48)
#define BDK_L2C_TAD_PRF_SEL_E_TAG_ALC_LCL_CLNVIC (0x59)
#define BDK_L2C_TAD_PRF_SEL_E_TAG_ALC_LCL_DTYVIC (0x5a)
#define BDK_L2C_TAD_PRF_SEL_E_TAG_ALC_LCL_EVICT (0x58)
#define BDK_L2C_TAD_PRF_SEL_E_TAG_ALC_MISS (0x49)
#define BDK_L2C_TAD_PRF_SEL_E_TAG_ALC_NALC (0x4a)
#define BDK_L2C_TAD_PRF_SEL_E_TAG_ALC_RMT_EVICT (0x5b)
#define BDK_L2C_TAD_PRF_SEL_E_TAG_ALC_RMT_VIC (0x5c)
#define BDK_L2C_TAD_PRF_SEL_E_TAG_ALC_RTG_HIT (0x50)
#define BDK_L2C_TAD_PRF_SEL_E_TAG_ALC_RTG_HITE (0x51)
#define BDK_L2C_TAD_PRF_SEL_E_TAG_ALC_RTG_HITS (0x52)
#define BDK_L2C_TAD_PRF_SEL_E_TAG_ALC_RTG_MISS (0x53)
#define BDK_L2C_TAD_PRF_SEL_E_TAG_NALC_HIT (0x4b)
#define BDK_L2C_TAD_PRF_SEL_E_TAG_NALC_MISS (0x4c)
#define BDK_L2C_TAD_PRF_SEL_E_TAG_NALC_RTG_HIT (0x54)
#define BDK_L2C_TAD_PRF_SEL_E_TAG_NALC_RTG_HITE (0x56)
#define BDK_L2C_TAD_PRF_SEL_E_TAG_NALC_RTG_HITS (0x57)
#define BDK_L2C_TAD_PRF_SEL_E_TAG_NALC_RTG_MISS (0x55)
#define BDK_L2C_TAD_PRF_SEL_E_WAIT_LFB (8)
#define BDK_L2C_TAD_PRF_SEL_E_WAIT_VAB (9)

/**
 * Enumeration l2c_tag_errprio_e
 *
 * L2C Tag Error Priority Enumeration
 * Enumerates the different TAG error priorities.
 */
#define BDK_L2C_TAG_ERRPRIO_E_DBE (3)
#define BDK_L2C_TAG_ERRPRIO_E_NBE (0)
#define BDK_L2C_TAG_ERRPRIO_E_NOWAY (1)
#define BDK_L2C_TAG_ERRPRIO_E_SBE (2)

/**
 * Enumeration oci_ireq_cmd_e
 *
 * INTERNAL: OCI IREQ Command Enumeration
 */
#define BDK_OCI_IREQ_CMD_E_IAADD (0x10)
#define BDK_OCI_IREQ_CMD_E_IACAS (0x15)
#define BDK_OCI_IREQ_CMD_E_IACLR (0x12)
#define BDK_OCI_IREQ_CMD_E_IASET (0x13)
#define BDK_OCI_IREQ_CMD_E_IASWP (0x14)
#define BDK_OCI_IREQ_CMD_E_IDLE (0x1f)
#define BDK_OCI_IREQ_CMD_E_IOBADDR (6)
#define BDK_OCI_IREQ_CMD_E_IOBADDRA (7)
#define BDK_OCI_IREQ_CMD_E_IOBLD (0)
#define BDK_OCI_IREQ_CMD_E_IOBST (2)
#define BDK_OCI_IREQ_CMD_E_IOBSTA (3)
#define BDK_OCI_IREQ_CMD_E_IOBSTP (4)
#define BDK_OCI_IREQ_CMD_E_IOBSTPA (5)
#define BDK_OCI_IREQ_CMD_E_LMTST (8)
#define BDK_OCI_IREQ_CMD_E_LMTSTA (9)
#define BDK_OCI_IREQ_CMD_E_SLILD (0x1c)
#define BDK_OCI_IREQ_CMD_E_SLIST (0x1d)

/**
 * Enumeration oci_irsp_cmd_e
 *
 * INTERNAL: OCI IRSP Command Enumeration
 */
#define BDK_OCI_IRSP_CMD_E_IDLE (0x1f)
#define BDK_OCI_IRSP_CMD_E_IOBACK (1)
#define BDK_OCI_IRSP_CMD_E_IOBRSP (0)
#define BDK_OCI_IRSP_CMD_E_SLIRSP (2)

/**
 * Enumeration oci_mfwd_cmd_e
 *
 * INTERNAL: OCI MFWD Command Enumeration
 */
#define BDK_OCI_MFWD_CMD_E_FEVX_EH (0xb)
#define BDK_OCI_MFWD_CMD_E_FEVX_OH (0xc)
#define BDK_OCI_MFWD_CMD_E_FLDRO_E (0)
#define BDK_OCI_MFWD_CMD_E_FLDRO_O (1)
#define BDK_OCI_MFWD_CMD_E_FLDRS_E (2)
#define BDK_OCI_MFWD_CMD_E_FLDRS_EH (4)
#define BDK_OCI_MFWD_CMD_E_FLDRS_O (3)
#define BDK_OCI_MFWD_CMD_E_FLDRS_OH (5)
#define BDK_OCI_MFWD_CMD_E_FLDT_E (6)
#define BDK_OCI_MFWD_CMD_E_FLDX_E (7)
#define BDK_OCI_MFWD_CMD_E_FLDX_EH (9)
#define BDK_OCI_MFWD_CMD_E_FLDX_O (8)
#define BDK_OCI_MFWD_CMD_E_FLDX_OH (0xa)
#define BDK_OCI_MFWD_CMD_E_IDLE (0x1f)
#define BDK_OCI_MFWD_CMD_E_SINV (0xd)
#define BDK_OCI_MFWD_CMD_E_SINV_H (0xe)

/**
 * Enumeration oci_mreq_cmd_e
 *
 * INTERNAL: OCI MREQ Command Enumeration
 */
#define BDK_OCI_MREQ_CMD_E_GINV (0x14)
#define BDK_OCI_MREQ_CMD_E_GSYNC (0x18)
#define BDK_OCI_MREQ_CMD_E_IDLE (0x1f)
#define BDK_OCI_MREQ_CMD_E_RADD (0xd)
#define BDK_OCI_MREQ_CMD_E_RC2D_O (6)
#define BDK_OCI_MREQ_CMD_E_RC2D_S (7)
#define BDK_OCI_MREQ_CMD_E_RCAS (0x13)
#define BDK_OCI_MREQ_CMD_E_RCAS_O (0x15)
#define BDK_OCI_MREQ_CMD_E_RCAS_S (0x16)
#define BDK_OCI_MREQ_CMD_E_RCLR (0x12)
#define BDK_OCI_MREQ_CMD_E_RDEC (0xf)
#define BDK_OCI_MREQ_CMD_E_REOR (0xb)
#define BDK_OCI_MREQ_CMD_E_RINC (0xe)
#define BDK_OCI_MREQ_CMD_E_RLDD (0)
#define BDK_OCI_MREQ_CMD_E_RLDI (1)
#define BDK_OCI_MREQ_CMD_E_RLDT (2)
#define BDK_OCI_MREQ_CMD_E_RLDWB (4)
#define BDK_OCI_MREQ_CMD_E_RLDX (5)
#define BDK_OCI_MREQ_CMD_E_RLDY (3)
#define BDK_OCI_MREQ_CMD_E_RSET (0x11)
#define BDK_OCI_MREQ_CMD_E_RSMAX (0x1b)
#define BDK_OCI_MREQ_CMD_E_RSMIN (0x1c)
#define BDK_OCI_MREQ_CMD_E_RSTC (0x17)
#define BDK_OCI_MREQ_CMD_E_RSTC_O (0x19)
#define BDK_OCI_MREQ_CMD_E_RSTC_S (0x1a)
#define BDK_OCI_MREQ_CMD_E_RSTP (0xa)
#define BDK_OCI_MREQ_CMD_E_RSTT (8)
#define BDK_OCI_MREQ_CMD_E_RSTY (9)
#define BDK_OCI_MREQ_CMD_E_RSWP (0x10)
#define BDK_OCI_MREQ_CMD_E_RUMAX (0x1d)
#define BDK_OCI_MREQ_CMD_E_RUMIN (0x1e)

/**
 * Enumeration oci_mrsp_cmd_e
 *
 * INTERNAL: OCI MRSP Command Enumeration
 */
#define BDK_OCI_MRSP_CMD_E_GSDN (0x18)
#define BDK_OCI_MRSP_CMD_E_HAKD (4)
#define BDK_OCI_MRSP_CMD_E_HAKI (6)
#define BDK_OCI_MRSP_CMD_E_HAKN_S (5)
#define BDK_OCI_MRSP_CMD_E_HAKS (7)
#define BDK_OCI_MRSP_CMD_E_HAKV (8)
#define BDK_OCI_MRSP_CMD_E_IDLE (0x1f)
#define BDK_OCI_MRSP_CMD_E_P2DF (0xd)
#define BDK_OCI_MRSP_CMD_E_PACK (0xc)
#define BDK_OCI_MRSP_CMD_E_PATM (0xb)
#define BDK_OCI_MRSP_CMD_E_PEMD (0xa)
#define BDK_OCI_MRSP_CMD_E_PSHA (9)
#define BDK_OCI_MRSP_CMD_E_VICC (1)
#define BDK_OCI_MRSP_CMD_E_VICD (0)
#define BDK_OCI_MRSP_CMD_E_VICDHI (3)
#define BDK_OCI_MRSP_CMD_E_VICS (2)

/**
 * Enumeration rsc_cmd_e
 *
 * INTERNAL: RSC Command Enumeration
 *
 * Enumerates the different RSC command encodings.
 */
#define BDK_RSC_CMD_E_FLDN (3)
#define BDK_RSC_CMD_E_GSDN (2)
#define BDK_RSC_CMD_E_IACK (5)
#define BDK_RSC_CMD_E_IFDN (1)
#define BDK_RSC_CMD_E_NOP (0)
#define BDK_RSC_CMD_E_SCDN (6)
#define BDK_RSC_CMD_E_SCFL (7)
#define BDK_RSC_CMD_E_STDN (4)

/**
 * Enumeration xmc_cmd_e
 *
 * INTERNAL: XMC Command Enumeration
 *
 * Enumerates the different XMC command encodings.
 */
#define BDK_XMC_CMD_E_AADD (0x28)
#define BDK_XMC_CMD_E_ACAS (0x26)
#define BDK_XMC_CMD_E_ACLR (0x29)
#define BDK_XMC_CMD_E_ADEC (0x25)
#define BDK_XMC_CMD_E_AEOR (0x2a)
#define BDK_XMC_CMD_E_AINC (0x24)
#define BDK_XMC_CMD_E_ALLEX (0x3c)
#define BDK_XMC_CMD_E_ASET (0x2b)
#define BDK_XMC_CMD_E_ASIDE1 (0x3d)
#define BDK_XMC_CMD_E_ASMAX (0x2c)
#define BDK_XMC_CMD_E_ASMIN (0x2d)
#define BDK_XMC_CMD_E_ASWP (0x27)
#define BDK_XMC_CMD_E_AUMAX (0x2e)
#define BDK_XMC_CMD_E_AUMIN (0x2f)
#define BDK_XMC_CMD_E_DWB (5)
#define BDK_XMC_CMD_E_GBLSYNC (0x3f)
#define BDK_XMC_CMD_E_IAADD (0x68)
#define BDK_XMC_CMD_E_IACAS (0x66)
#define BDK_XMC_CMD_E_IACLR (0x69)
#define BDK_XMC_CMD_E_IALLU (0x39)
#define BDK_XMC_CMD_E_IASET (0x6b)
#define BDK_XMC_CMD_E_IASWP (0x67)
#define BDK_XMC_CMD_E_INVL2 (0x1c)
#define BDK_XMC_CMD_E_IOBADDR (0x43)
#define BDK_XMC_CMD_E_IOBADDRA (0x53)
#define BDK_XMC_CMD_E_IOBLD (0x40)
#define BDK_XMC_CMD_E_IOBST (0x41)
#define BDK_XMC_CMD_E_IOBSTA (0x51)
#define BDK_XMC_CMD_E_IOBSTP (0x42)
#define BDK_XMC_CMD_E_IOBSTPA (0x52)
#define BDK_XMC_CMD_E_IPAS2E1 (0x37)
#define BDK_XMC_CMD_E_IVAU (0x34)
#define BDK_XMC_CMD_E_LCKL2 (0x1f)
#define BDK_XMC_CMD_E_LDD (8)
#define BDK_XMC_CMD_E_LDDT (0xc)
#define BDK_XMC_CMD_E_LDE (0xb)
#define BDK_XMC_CMD_E_LDI (2)
#define BDK_XMC_CMD_E_LDP (7)
#define BDK_XMC_CMD_E_LDT (1)
#define BDK_XMC_CMD_E_LDWB (0xd)
#define BDK_XMC_CMD_E_LDY (6)
#define BDK_XMC_CMD_E_LMTST (0x45)
#define BDK_XMC_CMD_E_LMTSTA (0x55)
#define BDK_XMC_CMD_E_LTGL2I (0x19)
#define BDK_XMC_CMD_E_NOP (0)
#define BDK_XMC_CMD_E_PL2 (3)
#define BDK_XMC_CMD_E_PL2T (0x16)
#define BDK_XMC_CMD_E_PS2 (0xa)
#define BDK_XMC_CMD_E_PS2T (0x17)
#define BDK_XMC_CMD_E_PSL1 (9)
#define BDK_XMC_CMD_E_RPL2 (4)
#define BDK_XMC_CMD_E_RSTP (0xf)
#define BDK_XMC_CMD_E_SEV (0x3e)
#define BDK_XMC_CMD_E_STC (0x13)
#define BDK_XMC_CMD_E_STF (0x10)
#define BDK_XMC_CMD_E_STFIL1 (0x14)
#define BDK_XMC_CMD_E_STGL2I (0x1a)
#define BDK_XMC_CMD_E_STP (0x12)
#define BDK_XMC_CMD_E_STT (0x11)
#define BDK_XMC_CMD_E_STTIL1 (0x15)
#define BDK_XMC_CMD_E_STY (0xe)
#define BDK_XMC_CMD_E_VAAE1 (0x36)
#define BDK_XMC_CMD_E_VAEX (0x35)
#define BDK_XMC_CMD_E_VMALLE1 (0x3a)
#define BDK_XMC_CMD_E_VMALLS12 (0x3b)
#define BDK_XMC_CMD_E_WBIL2 (0x1d)
#define BDK_XMC_CMD_E_WBIL2I (0x18)
#define BDK_XMC_CMD_E_WBL2 (0x1e)
#define BDK_XMC_CMD_E_WBL2I (0x1b)

/**
 * Register (RSL) l2c_asc_region#_attr
 *
 * L2C Address Space Control Region Attributes Registers
 */
union bdk_l2c_asc_regionx_attr
{
    uint64_t u;
    struct bdk_l2c_asc_regionx_attr_s
    {
#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
        uint64_t reserved_2_63         : 62;
        uint64_t s_en                  : 1;  /**< [  1:  1](R/W) Enables secure access to region.
                                                                 Undefined if both [S_EN] and [NS_EN] are set for the same region. */
        uint64_t ns_en                 : 1;  /**< [  0:  0](R/W) Enables nonsecure access to region.
                                                                 Undefined if both [S_EN] and [NS_EN] are set for the same region.
                                                                 See also DFA_ASC_REGION()_ATTR[NS_EN]. */
#else /* Word 0 - Little Endian */
        uint64_t ns_en                 : 1;  /**< [  0:  0](R/W) Enables nonsecure access to region.
                                                                 Undefined if both [S_EN] and [NS_EN] are set for the same region.
                                                                 See also DFA_ASC_REGION()_ATTR[NS_EN]. */
        uint64_t s_en                  : 1;  /**< [  1:  1](R/W) Enables secure access to region.
                                                                 Undefined if both [S_EN] and [NS_EN] are set for the same region. */
        uint64_t reserved_2_63         : 62;
#endif /* Word 0 - End */
    } s;
    struct bdk_l2c_asc_regionx_attr_cn81xx
    {
#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
        uint64_t reserved_2_63         : 62;
        uint64_t s_en                  : 1;  /**< [  1:  1](R/W) Enables secure access to region.
                                                                 Undefined if both [S_EN] and [NS_EN] are set for the same region. */
        uint64_t ns_en                 : 1;  /**< [  0:  0](R/W) Enables nonsecure access to region.
                                                                 Undefined if both [S_EN] and [NS_EN] are set for the same region.

                                                                 Internal:
                                                                 See also DFA_ASC_REGION()_ATTR[NS_EN]. */
#else /* Word 0 - Little Endian */
        uint64_t ns_en                 : 1;  /**< [  0:  0](R/W) Enables nonsecure access to region.
                                                                 Undefined if both [S_EN] and [NS_EN] are set for the same region.

                                                                 Internal:
                                                                 See also DFA_ASC_REGION()_ATTR[NS_EN]. */
        uint64_t s_en                  : 1;  /**< [  1:  1](R/W) Enables secure access to region.
                                                                 Undefined if both [S_EN] and [NS_EN] are set for the same region. */
        uint64_t reserved_2_63         : 62;
#endif /* Word 0 - End */
    } cn81xx;
    /* struct bdk_l2c_asc_regionx_attr_s cn88xx; */
    /* struct bdk_l2c_asc_regionx_attr_cn81xx cn83xx; */
};
typedef union bdk_l2c_asc_regionx_attr bdk_l2c_asc_regionx_attr_t;

static inline uint64_t BDK_L2C_ASC_REGIONX_ATTR(unsigned long a) __attribute__ ((pure, always_inline));
static inline uint64_t BDK_L2C_ASC_REGIONX_ATTR(unsigned long a)
{
    if (CAVIUM_IS_MODEL(CAVIUM_CN8XXX) && (a<=3))
        return 0x87e080801010ll + 0x40ll * ((a) & 0x3);
    __bdk_csr_fatal("L2C_ASC_REGIONX_ATTR", 1, a, 0, 0, 0);
}

#define typedef_BDK_L2C_ASC_REGIONX_ATTR(a) bdk_l2c_asc_regionx_attr_t
#define bustype_BDK_L2C_ASC_REGIONX_ATTR(a) BDK_CSR_TYPE_RSL
#define basename_BDK_L2C_ASC_REGIONX_ATTR(a) "L2C_ASC_REGIONX_ATTR"
#define device_bar_BDK_L2C_ASC_REGIONX_ATTR(a) 0x0 /* PF_BAR0 */
#define busnum_BDK_L2C_ASC_REGIONX_ATTR(a) (a)
#define arguments_BDK_L2C_ASC_REGIONX_ATTR(a) (a),-1,-1,-1

/**
 * Register (RSL) l2c_asc_region#_end
 *
 * L2C Address Space Control Region End Address Registers
 */
union bdk_l2c_asc_regionx_end
{
    uint64_t u;
    struct bdk_l2c_asc_regionx_end_s
    {
#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
        uint64_t reserved_40_63        : 24;
        uint64_t addr                  : 20; /**< [ 39: 20](R/W) Node-local physical address \<39:20\> marking the inclusive end of the corresponding ASC
                                                                 region.
                                                                 Note that the region includes this address.
                                                                 Software must ensure that regions do not overlap.
                                                                 To specify an empty region, clear both the [S_EN] and [NS_EN] fields of
                                                                 the corresponding L2C_ASC_REGION()_ATTR register. */
        uint64_t reserved_0_19         : 20;
#else /* Word 0 - Little Endian */
        uint64_t reserved_0_19         : 20;
        uint64_t addr                  : 20; /**< [ 39: 20](R/W) Node-local physical address \<39:20\> marking the inclusive end of the corresponding ASC
                                                                 region.
                                                                 Note that the region includes this address.
                                                                 Software must ensure that regions do not overlap.
                                                                 To specify an empty region, clear both the [S_EN] and [NS_EN] fields of
                                                                 the corresponding L2C_ASC_REGION()_ATTR register. */
        uint64_t reserved_40_63        : 24;
#endif /* Word 0 - End */
    } s;
    /* struct bdk_l2c_asc_regionx_end_s cn; */
};
typedef union bdk_l2c_asc_regionx_end bdk_l2c_asc_regionx_end_t;

static inline uint64_t BDK_L2C_ASC_REGIONX_END(unsigned long a) __attribute__ ((pure, always_inline));
static inline uint64_t BDK_L2C_ASC_REGIONX_END(unsigned long a)
{
    if (CAVIUM_IS_MODEL(CAVIUM_CN8XXX) && (a<=3))
        return 0x87e080801008ll + 0x40ll * ((a) & 0x3);
    __bdk_csr_fatal("L2C_ASC_REGIONX_END", 1, a, 0, 0, 0);
}

#define typedef_BDK_L2C_ASC_REGIONX_END(a) bdk_l2c_asc_regionx_end_t
#define bustype_BDK_L2C_ASC_REGIONX_END(a) BDK_CSR_TYPE_RSL
#define basename_BDK_L2C_ASC_REGIONX_END(a) "L2C_ASC_REGIONX_END"
#define device_bar_BDK_L2C_ASC_REGIONX_END(a) 0x0 /* PF_BAR0 */
#define busnum_BDK_L2C_ASC_REGIONX_END(a) (a)
#define arguments_BDK_L2C_ASC_REGIONX_END(a) (a),-1,-1,-1

/**
 * Register (RSL) l2c_asc_region#_start
 *
 * L2C Address Space Control Region Start Address Registers
 */
union bdk_l2c_asc_regionx_start
{
    uint64_t u;
    struct bdk_l2c_asc_regionx_start_s
    {
#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
        uint64_t reserved_40_63        : 24;
        uint64_t addr                  : 20; /**< [ 39: 20](R/W) Node-local physical address \<39:20\> marking the start of the corresponding ASC region.
                                                                 Software must ensure that regions do not overlap. */
        uint64_t reserved_0_19         : 20;
#else /* Word 0 - Little Endian */
        uint64_t reserved_0_19         : 20;
        uint64_t addr                  : 20; /**< [ 39: 20](R/W) Node-local physical address \<39:20\> marking the start of the corresponding ASC region.
                                                                 Software must ensure that regions do not overlap. */
        uint64_t reserved_40_63        : 24;
#endif /* Word 0 - End */
    } s;
    /* struct bdk_l2c_asc_regionx_start_s cn; */
};
typedef union bdk_l2c_asc_regionx_start bdk_l2c_asc_regionx_start_t;

static inline uint64_t BDK_L2C_ASC_REGIONX_START(unsigned long a) __attribute__ ((pure, always_inline));
static inline uint64_t BDK_L2C_ASC_REGIONX_START(unsigned long a)
{
    if (CAVIUM_IS_MODEL(CAVIUM_CN8XXX) && (a<=3))
        return 0x87e080801000ll + 0x40ll * ((a) & 0x3);
    __bdk_csr_fatal("L2C_ASC_REGIONX_START", 1, a, 0, 0, 0);
}

#define typedef_BDK_L2C_ASC_REGIONX_START(a) bdk_l2c_asc_regionx_start_t
#define bustype_BDK_L2C_ASC_REGIONX_START(a) BDK_CSR_TYPE_RSL
#define basename_BDK_L2C_ASC_REGIONX_START(a) "L2C_ASC_REGIONX_START"
#define device_bar_BDK_L2C_ASC_REGIONX_START(a) 0x0 /* PF_BAR0 */
#define busnum_BDK_L2C_ASC_REGIONX_START(a) (a)
#define arguments_BDK_L2C_ASC_REGIONX_START(a) (a),-1,-1,-1

/**
 * Register (RSL) l2c_cbc#_bist_status
 *
 * L2C CBC BIST Status Registers
 */
union bdk_l2c_cbcx_bist_status
{
    uint64_t u;
    struct bdk_l2c_cbcx_bist_status_s
    {
#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
        uint64_t reserved_37_63        : 27;
        uint64_t mibfl                 : 5;  /**< [ 36: 32](RO/H) BIST failure status for various MIB memories. ({XMD, IPM, IRM, MXD, MXN}) */
        uint64_t rsdfl                 : 32; /**< [ 31:  0](RO/H) BIST failure status for RSDQW0-31. */
#else /* Word 0 - Little Endian */
        uint64_t rsdfl                 : 32; /**< [ 31:  0](RO/H) BIST failure status for RSDQW0-31. */
        uint64_t mibfl                 : 5;  /**< [ 36: 32](RO/H) BIST failure status for various MIB memories. ({XMD, IPM, IRM, MXD, MXN}) */
        uint64_t reserved_37_63        : 27;
#endif /* Word 0 - End */
    } s;
    /* struct bdk_l2c_cbcx_bist_status_s cn; */
};
typedef union bdk_l2c_cbcx_bist_status bdk_l2c_cbcx_bist_status_t;

static inline uint64_t BDK_L2C_CBCX_BIST_STATUS(unsigned long a) __attribute__ ((pure, always_inline));
static inline uint64_t BDK_L2C_CBCX_BIST_STATUS(unsigned long a)
{
    if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a==0))
        return 0x87e0580a0000ll + 0x1000000ll * ((a) & 0x0);
    if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=1))
        return 0x87e0580a0000ll + 0x1000000ll * ((a) & 0x1);
    if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=3))
        return 0x87e0580a0000ll + 0x1000000ll * ((a) & 0x3);
    __bdk_csr_fatal("L2C_CBCX_BIST_STATUS", 1, a, 0, 0, 0);
}

#define typedef_BDK_L2C_CBCX_BIST_STATUS(a) bdk_l2c_cbcx_bist_status_t
#define bustype_BDK_L2C_CBCX_BIST_STATUS(a) BDK_CSR_TYPE_RSL
#define basename_BDK_L2C_CBCX_BIST_STATUS(a) "L2C_CBCX_BIST_STATUS"
#define device_bar_BDK_L2C_CBCX_BIST_STATUS(a) 0x0 /* PF_BAR0 */
#define busnum_BDK_L2C_CBCX_BIST_STATUS(a) (a)
#define arguments_BDK_L2C_CBCX_BIST_STATUS(a) (a),-1,-1,-1

/**
 * Register (RSL) l2c_cbc#_dll
 *
 * L2C CBC DLL Observability Register
 * Register for DLL observability.
 */
union bdk_l2c_cbcx_dll
{
    uint64_t u;
    struct bdk_l2c_cbcx_dll_s
    {
#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
        uint64_t reserved_60_63        : 4;
        uint64_t max_dll_setting       : 12; /**< [ 59: 48](RO/H) Max reported DLL setting. */
        uint64_t min_dll_setting       : 12; /**< [ 47: 36](RO/H) Min reported DLL setting. */
        uint64_t pd_pos_rclk_refclk    : 1;  /**< [ 35: 35](RO/H) Phase detector output. */
        uint64_t pdl_rclk_refclk       : 1;  /**< [ 34: 34](RO/H) Phase detector output. */
        uint64_t pdr_rclk_refclk       : 1;  /**< [ 33: 33](RO/H) Phase detector output. */
        uint64_t reserved_32           : 1;
        uint64_t dly_elem_enable       : 16; /**< [ 31: 16](RO/H) Delay element enable. */
        uint64_t dll_setting           : 12; /**< [ 15:  4](RO/H) DLL setting. */
        uint64_t reserved_1_3          : 3;
        uint64_t dll_lock              : 1;  /**< [  0:  0](RO/H) DLL locked. */
#else /* Word 0 - Little Endian */
        uint64_t dll_lock              : 1;  /**< [  0:  0](RO/H) DLL locked. */
        uint64_t reserved_1_3          : 3;
        uint64_t dll_setting           : 12; /**< [ 15:  4](RO/H) DLL setting. */
        uint64_t dly_elem_enable       : 16; /**< [ 31: 16](RO/H) Delay element enable. */
        uint64_t reserved_32           : 1;
        uint64_t pdr_rclk_refclk       : 1;  /**< [ 33: 33](RO/H) Phase detector output. */
        uint64_t pdl_rclk_refclk       : 1;  /**< [ 34: 34](RO/H) Phase detector output. */
        uint64_t pd_pos_rclk_refclk    : 1;  /**< [ 35: 35](RO/H) Phase detector output. */
        uint64_t min_dll_setting       : 12; /**< [ 47: 36](RO/H) Min reported DLL setting. */
        uint64_t max_dll_setting       : 12; /**< [ 59: 48](RO/H) Max reported DLL setting. */
        uint64_t reserved_60_63        : 4;
#endif /* Word 0 - End */
    } s;
    /* struct bdk_l2c_cbcx_dll_s cn; */
};
typedef union bdk_l2c_cbcx_dll bdk_l2c_cbcx_dll_t;

static inline uint64_t BDK_L2C_CBCX_DLL(unsigned long a) __attribute__ ((pure, always_inline));
static inline uint64_t BDK_L2C_CBCX_DLL(unsigned long a)
{
    if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a==0))
        return 0x87e058040000ll + 0x1000000ll * ((a) & 0x0);
    if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=1))
        return 0x87e058040000ll + 0x1000000ll * ((a) & 0x1);
    if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=3))
        return 0x87e058040000ll + 0x1000000ll * ((a) & 0x3);
    __bdk_csr_fatal("L2C_CBCX_DLL", 1, a, 0, 0, 0);
}

#define typedef_BDK_L2C_CBCX_DLL(a) bdk_l2c_cbcx_dll_t
#define bustype_BDK_L2C_CBCX_DLL(a) BDK_CSR_TYPE_RSL
#define basename_BDK_L2C_CBCX_DLL(a) "L2C_CBCX_DLL"
#define device_bar_BDK_L2C_CBCX_DLL(a) 0x0 /* PF_BAR0 */
#define busnum_BDK_L2C_CBCX_DLL(a) (a)
#define arguments_BDK_L2C_CBCX_DLL(a) (a),-1,-1,-1

/**
 * Register (RSL) l2c_cbc#_iocerr
 *
 * L2C CBC Error Information Registers
 * Reserved.
 */
union bdk_l2c_cbcx_iocerr
{
    uint64_t u;
    struct bdk_l2c_cbcx_iocerr_s
    {
#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
        uint64_t reserved_0_63         : 64;
#else /* Word 0 - Little Endian */
        uint64_t reserved_0_63         : 64;
#endif /* Word 0 - End */
    } s;
    /* struct bdk_l2c_cbcx_iocerr_s cn; */
};
typedef union bdk_l2c_cbcx_iocerr bdk_l2c_cbcx_iocerr_t;

static inline uint64_t BDK_L2C_CBCX_IOCERR(unsigned long a) __attribute__ ((pure, always_inline));
static inline uint64_t BDK_L2C_CBCX_IOCERR(unsigned long a)
{
    if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a==0))
        return 0x87e058080010ll + 0x1000000ll * ((a) & 0x0);
    if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=1))
        return 0x87e058080010ll + 0x1000000ll * ((a) & 0x1);
    if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=3))
        return 0x87e058080010ll + 0x1000000ll * ((a) & 0x3);
    __bdk_csr_fatal("L2C_CBCX_IOCERR", 1, a, 0, 0, 0);
}

#define typedef_BDK_L2C_CBCX_IOCERR(a) bdk_l2c_cbcx_iocerr_t
#define bustype_BDK_L2C_CBCX_IOCERR(a) BDK_CSR_TYPE_RSL
#define basename_BDK_L2C_CBCX_IOCERR(a) "L2C_CBCX_IOCERR"
#define device_bar_BDK_L2C_CBCX_IOCERR(a) 0x0 /* PF_BAR0 */
#define busnum_BDK_L2C_CBCX_IOCERR(a) (a)
#define arguments_BDK_L2C_CBCX_IOCERR(a) (a),-1,-1,-1

/**
 * Register (RSL) l2c_cbc#_iodisocierr
 *
 * L2C CBC IODISOCI Error Information Registers
 * This register records error information associated with IORDDISOCI/IOWRDISOCI interrupts.
 * IOWRDISOCI events take priority over previously captured IORDDISOCI events. Of the available
 * I/O transactions, some commands will either set [IORDDISOCI], set [IOWRDISOCI], or set both
 * [IORDDISOCI] and [IOWRDISOCI]. See L2C_CBC()_INT_W1C for information about which I/O
 * transactions
 * may result in IORDDISOCI/IOWRDISOCI interrupts.
 */
union bdk_l2c_cbcx_iodisocierr
{
    uint64_t u;
    struct bdk_l2c_cbcx_iodisocierr_s
    {
#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
        uint64_t iorddisoci            : 1;  /**< [ 63: 63](RO/H) Logged information is for a IORDDISOCI error. */
        uint64_t iowrdisoci            : 1;  /**< [ 62: 62](RO/H) Logged information is for a IOWRDISOCI error. */
        uint64_t reserved_59_61        : 3;
        uint64_t cmd                   : 7;  /**< [ 58: 52](RO/H) Encoding of XMC command.
                                                                 Internal:
                                                                 Enumerated by XMC_CMD_E. */
        uint64_t ppvid                 : 6;  /**< [ 51: 46](RO/H) CMB source PPVID. */
        uint64_t node                  : 2;  /**< [ 45: 44](RO/H) Destination node ID. */
        uint64_t did                   : 8;  /**< [ 43: 36](RO/H) Destination device ID. */
        uint64_t addr                  : 36; /**< [ 35:  0](RO/H) I/O address. */
#else /* Word 0 - Little Endian */
        uint64_t addr                  : 36; /**< [ 35:  0](RO/H) I/O address. */
        uint64_t did                   : 8;  /**< [ 43: 36](RO/H) Destination device ID. */
        uint64_t node                  : 2;  /**< [ 45: 44](RO/H) Destination node ID. */
        uint64_t ppvid                 : 6;  /**< [ 51: 46](RO/H) CMB source PPVID. */
        uint64_t cmd                   : 7;  /**< [ 58: 52](RO/H) Encoding of XMC command.
                                                                 Internal:
                                                                 Enumerated by XMC_CMD_E. */
        uint64_t reserved_59_61        : 3;
        uint64_t iowrdisoci            : 1;  /**< [ 62: 62](RO/H) Logged information is for a IOWRDISOCI error. */
        uint64_t iorddisoci            : 1;  /**< [ 63: 63](RO/H) Logged information is for a IORDDISOCI error. */
#endif /* Word 0 - End */
    } s;
    /* struct bdk_l2c_cbcx_iodisocierr_s cn; */
};
typedef union bdk_l2c_cbcx_iodisocierr bdk_l2c_cbcx_iodisocierr_t;

static inline uint64_t BDK_L2C_CBCX_IODISOCIERR(unsigned long a) __attribute__ ((pure, always_inline));
static inline uint64_t BDK_L2C_CBCX_IODISOCIERR(unsigned long a)
{
    if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a==0))
        return 0x87e058080008ll + 0x1000000ll * ((a) & 0x0);
    if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=1))
        return 0x87e058080008ll + 0x1000000ll * ((a) & 0x1);
    if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=3))
        return 0x87e058080008ll + 0x1000000ll * ((a) & 0x3);
    __bdk_csr_fatal("L2C_CBCX_IODISOCIERR", 1, a, 0, 0, 0);
}

#define typedef_BDK_L2C_CBCX_IODISOCIERR(a) bdk_l2c_cbcx_iodisocierr_t
#define bustype_BDK_L2C_CBCX_IODISOCIERR(a) BDK_CSR_TYPE_RSL
#define basename_BDK_L2C_CBCX_IODISOCIERR(a) "L2C_CBCX_IODISOCIERR"
#define device_bar_BDK_L2C_CBCX_IODISOCIERR(a) 0x0 /* PF_BAR0 */
#define busnum_BDK_L2C_CBCX_IODISOCIERR(a) (a)
#define arguments_BDK_L2C_CBCX_IODISOCIERR(a) (a),-1,-1,-1

/**
 * Register (RSL) l2c_cbc#_miberr
 *
 * L2C CBC MIB Error Information Registers
 * This register records error information for all CBC MIB errors. An error locks the INDEX and
 * [SYN] fields and set the bit corresponding to the error received. MIBDBE errors take priority
 * and overwrite an earlier logged MIBSBE error. Only one of [MIBSBE]/[MIBDBE] is set at any
 * given
 * time and serves to document which error the INDEX/[SYN] is associated with. The syndrome is
 * recorded for DBE errors, though the utility of the value is not clear.
 */
union bdk_l2c_cbcx_miberr
{
    uint64_t u;
    struct bdk_l2c_cbcx_miberr_s
    {
#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
        uint64_t mibdbe                : 1;  /**< [ 63: 63](RO/H) INDEX/SYN corresponds to a double-bit MIB ECC error. */
        uint64_t mibsbe                : 1;  /**< [ 62: 62](RO/H) INDEX/SYN corresponds to a single-bit MIB ECC error. */
        uint64_t reserved_40_61        : 22;
        uint64_t syn                   : 8;  /**< [ 39: 32](RO/H) Error syndrome. */
        uint64_t reserved_3_31         : 29;
        uint64_t memid                 : 2;  /**< [  2:  1](RO/H) Indicates the memory that had the error.
                                                                 0x0 = Error from MXB_VC_MRN, MXB_VC_MFN, MXB_VC_MPN VCs.
                                                                 0x1 = Error from MXB_VC_MRD, MXB_VC_MPD VCs.
                                                                 0x2 = Error from MXB_VC_IRM VC.
                                                                 0x3 = Error from MXB_VC_IPM VC. */
        uint64_t mibnum                : 1;  /**< [  0:  0](RO/H) Indicates the MIB bus that had the error. */
#else /* Word 0 - Little Endian */
        uint64_t mibnum                : 1;  /**< [  0:  0](RO/H) Indicates the MIB bus that had the error. */
        uint64_t memid                 : 2;  /**< [  2:  1](RO/H) Indicates the memory that had the error.
                                                                 0x0 = Error from MXB_VC_MRN, MXB_VC_MFN, MXB_VC_MPN VCs.
                                                                 0x1 = Error from MXB_VC_MRD, MXB_VC_MPD VCs.
                                                                 0x2 = Error from MXB_VC_IRM VC.
                                                                 0x3 = Error from MXB_VC_IPM VC. */
        uint64_t reserved_3_31         : 29;
        uint64_t syn                   : 8;  /**< [ 39: 32](RO/H) Error syndrome. */
        uint64_t reserved_40_61        : 22;
        uint64_t mibsbe                : 1;  /**< [ 62: 62](RO/H) INDEX/SYN corresponds to a single-bit MIB ECC error. */
        uint64_t mibdbe                : 1;  /**< [ 63: 63](RO/H) INDEX/SYN corresponds to a double-bit MIB ECC error. */
#endif /* Word 0 - End */
    } s;
    /* struct bdk_l2c_cbcx_miberr_s cn; */
};
typedef union bdk_l2c_cbcx_miberr bdk_l2c_cbcx_miberr_t;

static inline uint64_t BDK_L2C_CBCX_MIBERR(unsigned long a) __attribute__ ((pure, always_inline));
static inline uint64_t BDK_L2C_CBCX_MIBERR(unsigned long a)
{
    if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a==0))
        return 0x87e058080020ll + 0x1000000ll * ((a) & 0x0);
    if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=1))
        return 0x87e058080020ll + 0x1000000ll * ((a) & 0x1);
    if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=3))
        return 0x87e058080020ll + 0x1000000ll * ((a) & 0x3);
    __bdk_csr_fatal("L2C_CBCX_MIBERR", 1, a, 0, 0, 0);
}

#define typedef_BDK_L2C_CBCX_MIBERR(a) bdk_l2c_cbcx_miberr_t
#define bustype_BDK_L2C_CBCX_MIBERR(a) BDK_CSR_TYPE_RSL
#define basename_BDK_L2C_CBCX_MIBERR(a) "L2C_CBCX_MIBERR"
#define device_bar_BDK_L2C_CBCX_MIBERR(a) 0x0 /* PF_BAR0 */
#define busnum_BDK_L2C_CBCX_MIBERR(a) (a)
#define arguments_BDK_L2C_CBCX_MIBERR(a) (a),-1,-1,-1

/**
 * Register (RSL) l2c_cbc#_rsderr
 *
 * L2C CBC RSD Error Information Registers
 * This register records error information for all CBC RSD errors.
 * An error locks the INDEX and [SYN] fields and set the bit corresponding to the error received.
 * RSDDBE errors take priority and overwrite an earlier logged RSDSBE error. Only one of
 * [RSDSBE]/[RSDDBE] is set at any given time and serves to document which error the INDEX/[SYN]
 * is
 * associated with.
 * The syndrome is recorded for DBE errors, though the utility of the value is not clear.
 */
union bdk_l2c_cbcx_rsderr
{
    uint64_t u;
    struct bdk_l2c_cbcx_rsderr_s
    {
#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
        uint64_t rsddbe                : 1;  /**< [ 63: 63](RO/H) INDEX/SYN corresponds to a double-bit RSD ECC error. */
        uint64_t rsdsbe                : 1;  /**< [ 62: 62](RO/H) INDEX/SYN corresponds to a single-bit RSD ECC error. */
        uint64_t reserved_40_61        : 22;
        uint64_t syn                   : 8;  /**< [ 39: 32](RO/H) Error syndrome. */
        uint64_t reserved_9_31         : 23;
        uint64_t tadnum                : 3;  /**< [  8:  6](RO/H) Indicates the TAD FIFO containing the error. */
        uint64_t qwnum                 : 2;  /**< [  5:  4](RO/H) Indicates the QW containing the error. */
        uint64_t rsdnum                : 4;  /**< [  3:  0](RO/H) Indicates the RSD that had the error. */
#else /* Word 0 - Little Endian */
        uint64_t rsdnum                : 4;  /**< [  3:  0](RO/H) Indicates the RSD that had the error. */
        uint64_t qwnum                 : 2;  /**< [  5:  4](RO/H) Indicates the QW containing the error. */
        uint64_t tadnum                : 3;  /**< [  8:  6](RO/H) Indicates the TAD FIFO containing the error. */
        uint64_t reserved_9_31         : 23;
        uint64_t syn                   : 8;  /**< [ 39: 32](RO/H) Error syndrome. */
        uint64_t reserved_40_61        : 22;
        uint64_t rsdsbe                : 1;  /**< [ 62: 62](RO/H) INDEX/SYN corresponds to a single-bit RSD ECC error. */
        uint64_t rsddbe                : 1;  /**< [ 63: 63](RO/H) INDEX/SYN corresponds to a double-bit RSD ECC error. */
#endif /* Word 0 - End */
    } s;
    /* struct bdk_l2c_cbcx_rsderr_s cn; */
};
typedef union bdk_l2c_cbcx_rsderr bdk_l2c_cbcx_rsderr_t;

static inline uint64_t BDK_L2C_CBCX_RSDERR(unsigned long a) __attribute__ ((pure, always_inline));
static inline uint64_t BDK_L2C_CBCX_RSDERR(unsigned long a)
{
    if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a==0))
        return 0x87e058080018ll + 0x1000000ll * ((a) & 0x0);
    if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=1))
        return 0x87e058080018ll + 0x1000000ll * ((a) & 0x1);
    if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=3))
        return 0x87e058080018ll + 0x1000000ll * ((a) & 0x3);
    __bdk_csr_fatal("L2C_CBCX_RSDERR", 1, a, 0, 0, 0);
}

#define typedef_BDK_L2C_CBCX_RSDERR(a) bdk_l2c_cbcx_rsderr_t
#define bustype_BDK_L2C_CBCX_RSDERR(a) BDK_CSR_TYPE_RSL
#define basename_BDK_L2C_CBCX_RSDERR(a) "L2C_CBCX_RSDERR"
#define device_bar_BDK_L2C_CBCX_RSDERR(a) 0x0 /* PF_BAR0 */
#define busnum_BDK_L2C_CBCX_RSDERR(a) (a)
#define arguments_BDK_L2C_CBCX_RSDERR(a) (a),-1,-1,-1

/**
 * Register (RSL) l2c_ctl
 *
 * L2C Control Register
 */
union bdk_l2c_ctl
{
    uint64_t u;
    struct bdk_l2c_ctl_s
    {
#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
        uint64_t reserved_32_63        : 32;
        uint64_t ocla_qos              : 3;  /**< [ 31: 29](R/W) QOS level for the transactions from OCLA to L2C. */
        uint64_t reserved_28           : 1;
        uint64_t disstgl2i             : 1;  /**< [ 27: 27](R/W) Disable STGL2Is from changing the tags. */
        uint64_t reserved_25_26        : 2;
        uint64_t discclk               : 1;  /**< [ 24: 24](R/W) Disable conditional clocking in L2C PNR blocks. */
        uint64_t reserved_16_23        : 8;
        uint64_t rsp_arb_mode          : 1;  /**< [ 15: 15](R/W) Arbitration mode for RSC/RSD bus. 0 = round-robin; 1 = static priority.
                                                                 1. IOR data.
                                                                 2. STIN/FILLs.
                                                                 3. STDN/SCDN/SCFL. */
        uint64_t xmc_arb_mode          : 1;  /**< [ 14: 14](R/W) Arbitration mode for ADD bus QOS queues. 0 = fully determined through QOS, 1 = QOS0
                                                                 highest priority; QOS 1-7 use normal mode. */
        uint64_t rdf_cnt               : 8;  /**< [ 13:  6](R/W) Defines the sample point of the LMC response data in the DDR-clock/core-clock crossing.
                                                                 For optimal performance set to
                                                                 10 * (DDR-clock period/core-clock period) - 1.
                                                                 To disable set to 0. All other values are reserved. */
        uint64_t disdwb                : 1;  /**< [  5:  5](R/W) Suppresses DWB and INVL2 commands, effectively turning them into NOPs.
                                                                 Internal:
                                                                 The real behavior is DWB and INVL2 commands are forced to look like STGL2I commands with
                                                                 DISSTGL2I set. */
        uint64_t disgsyncto            : 1;  /**< [  4:  4](R/W) Disable global sync timeout. */
        uint64_t disldwb               : 1;  /**< [  3:  3](R/W) Suppresses the DWB functionality of any received LDWB, effectively turning them into LDTs. */
        uint64_t dissblkdty            : 1;  /**< [  2:  2](R/W) Disable bandwidth optimization between L2 and LMC and MOB which only transfers modified
                                                                 sub-blocks when possible. In an CCPI system all nodes must use the same setting of
                                                                 DISSBLKDTY or operation is undefined. */
        uint64_t disecc                : 1;  /**< [  1:  1](R/W) Tag and data ECC disable. */
        uint64_t disidxalias           : 1;  /**< [  0:  0](R/W) Index alias disable. */
#else /* Word 0 - Little Endian */
        uint64_t disidxalias           : 1;  /**< [  0:  0](R/W) Index alias disable. */
        uint64_t disecc                : 1;  /**< [  1:  1](R/W) Tag and data ECC disable. */
        uint64_t dissblkdty            : 1;  /**< [  2:  2](R/W) Disable bandwidth optimization between L2 and LMC and MOB which only transfers modified
                                                                 sub-blocks when possible. In an CCPI system all nodes must use the same setting of
                                                                 DISSBLKDTY or operation is undefined. */
        uint64_t disldwb               : 1;  /**< [  3:  3](R/W) Suppresses the DWB functionality of any received LDWB, effectively turning them into LDTs. */
        uint64_t disgsyncto            : 1;  /**< [  4:  4](R/W) Disable global sync timeout. */
        uint64_t disdwb                : 1;  /**< [  5:  5](R/W) Suppresses DWB and INVL2 commands, effectively turning them into NOPs.
                                                                 Internal:
                                                                 The real behavior is DWB and INVL2 commands are forced to look like STGL2I commands with
                                                                 DISSTGL2I set. */
        uint64_t rdf_cnt               : 8;  /**< [ 13:  6](R/W) Defines the sample point of the LMC response data in the DDR-clock/core-clock crossing.
                                                                 For optimal performance set to
                                                                 10 * (DDR-clock period/core-clock period) - 1.
                                                                 To disable set to 0. All other values are reserved. */
        uint64_t xmc_arb_mode          : 1;  /**< [ 14: 14](R/W) Arbitration mode for ADD bus QOS queues. 0 = fully determined through QOS, 1 = QOS0
                                                                 highest priority; QOS 1-7 use normal mode. */
        uint64_t rsp_arb_mode          : 1;  /**< [ 15: 15](R/W) Arbitration mode for RSC/RSD bus. 0 = round-robin; 1 = static priority.
                                                                 1. IOR data.
                                                                 2. STIN/FILLs.
                                                                 3. STDN/SCDN/SCFL. */
        uint64_t reserved_16_23        : 8;
        uint64_t discclk               : 1;  /**< [ 24: 24](R/W) Disable conditional clocking in L2C PNR blocks. */
        uint64_t reserved_25_26        : 2;
        uint64_t disstgl2i             : 1;  /**< [ 27: 27](R/W) Disable STGL2Is from changing the tags. */
        uint64_t reserved_28           : 1;
        uint64_t ocla_qos              : 3;  /**< [ 31: 29](R/W) QOS level for the transactions from OCLA to L2C. */
        uint64_t reserved_32_63        : 32;
#endif /* Word 0 - End */
    } s;
    struct bdk_l2c_ctl_cn88xxp1
    {
#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
        uint64_t reserved_32_63        : 32;
        uint64_t ocla_qos              : 3;  /**< [ 31: 29](R/W) QOS level for the transactions from OCLA to L2C. */
        uint64_t reserved_28           : 1;
        uint64_t disstgl2i             : 1;  /**< [ 27: 27](R/W) Disable STGL2Is from changing the tags. */
        uint64_t reserved_25_26        : 2;
        uint64_t discclk               : 1;  /**< [ 24: 24](R/W) Disable conditional clocking in L2C PNR blocks. */
        uint64_t reserved_16_23        : 8;
        uint64_t rsp_arb_mode          : 1;  /**< [ 15: 15](R/W) Arbitration mode for RSC/RSD bus. 0 = round-robin; 1 = static priority.
                                                                 1. IOR data.
                                                                 2. STIN/FILLs.
                                                                 3. STDN/SCDN/SCFL. */
        uint64_t xmc_arb_mode          : 1;  /**< [ 14: 14](R/W) Arbitration mode for ADD bus QOS queues. 0 = fully determined through QOS, 1 = QOS0
                                                                 highest priority; QOS 1-7 use normal mode. */
        uint64_t rdf_cnt               : 8;  /**< [ 13:  6](R/W) Defines the sample point of the LMC response data in the DDR-clock/core-clock crossing.
                                                                 For optimal performance set to
                                                                 10 * (DDR-clock period/core-clock period) - 1.
                                                                 To disable set to 0. All other values are reserved. */
        uint64_t reserved_5            : 1;
        uint64_t reserved_4            : 1;
        uint64_t disldwb               : 1;  /**< [  3:  3](R/W) Suppresses the DWB functionality of any received LDWB, effectively turning them into LDTs. */
        uint64_t dissblkdty            : 1;  /**< [  2:  2](R/W) Disable bandwidth optimization between L2 and LMC and MOB which only transfers modified
                                                                 sub-blocks when possible. In an CCPI system all nodes must use the same setting of
                                                                 DISSBLKDTY or operation is undefined. */
        uint64_t disecc                : 1;  /**< [  1:  1](R/W) Tag and data ECC disable. */
        uint64_t disidxalias           : 1;  /**< [  0:  0](R/W) Index alias disable. */
#else /* Word 0 - Little Endian */
        uint64_t disidxalias           : 1;  /**< [  0:  0](R/W) Index alias disable. */
        uint64_t disecc                : 1;  /**< [  1:  1](R/W) Tag and data ECC disable. */
        uint64_t dissblkdty            : 1;  /**< [  2:  2](R/W) Disable bandwidth optimization between L2 and LMC and MOB which only transfers modified
                                                                 sub-blocks when possible. In an CCPI system all nodes must use the same setting of
                                                                 DISSBLKDTY or operation is undefined. */
        uint64_t disldwb               : 1;  /**< [  3:  3](R/W) Suppresses the DWB functionality of any received LDWB, effectively turning them into LDTs. */
        uint64_t reserved_4            : 1;
        uint64_t reserved_5            : 1;
        uint64_t rdf_cnt               : 8;  /**< [ 13:  6](R/W) Defines the sample point of the LMC response data in the DDR-clock/core-clock crossing.
                                                                 For optimal performance set to
                                                                 10 * (DDR-clock period/core-clock period) - 1.
                                                                 To disable set to 0. All other values are reserved. */
        uint64_t xmc_arb_mode          : 1;  /**< [ 14: 14](R/W) Arbitration mode for ADD bus QOS queues. 0 = fully determined through QOS, 1 = QOS0
                                                                 highest priority; QOS 1-7 use normal mode. */
        uint64_t rsp_arb_mode          : 1;  /**< [ 15: 15](R/W) Arbitration mode for RSC/RSD bus. 0 = round-robin; 1 = static priority.
                                                                 1. IOR data.
                                                                 2. STIN/FILLs.
                                                                 3. STDN/SCDN/SCFL. */
        uint64_t reserved_16_23        : 8;
        uint64_t discclk               : 1;  /**< [ 24: 24](R/W) Disable conditional clocking in L2C PNR blocks. */
        uint64_t reserved_25_26        : 2;
        uint64_t disstgl2i             : 1;  /**< [ 27: 27](R/W) Disable STGL2Is from changing the tags. */
        uint64_t reserved_28           : 1;
        uint64_t ocla_qos              : 3;  /**< [ 31: 29](R/W) QOS level for the transactions from OCLA to L2C. */
        uint64_t reserved_32_63        : 32;
#endif /* Word 0 - End */
    } cn88xxp1;
    /* struct bdk_l2c_ctl_s cn81xx; */
    /* struct bdk_l2c_ctl_s cn83xx; */
    struct bdk_l2c_ctl_cn88xxp2
    {
#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
        uint64_t reserved_32_63        : 32;
        uint64_t ocla_qos              : 3;  /**< [ 31: 29](R/W) QOS level for the transactions from OCLA to L2C. */
        uint64_t reserved_28           : 1;
        uint64_t disstgl2i             : 1;  /**< [ 27: 27](R/W) Disable STGL2Is from changing the tags. */
        uint64_t reserved_25_26        : 2;
        uint64_t discclk               : 1;  /**< [ 24: 24](R/W) Disable conditional clocking in L2C PNR blocks. */
        uint64_t reserved_16_23        : 8;
        uint64_t rsp_arb_mode          : 1;  /**< [ 15: 15](R/W) Arbitration mode for RSC/RSD bus. 0 = round-robin; 1 = static priority.
                                                                 1. IOR data.
                                                                 2. STIN/FILLs.
                                                                 3. STDN/SCDN/SCFL. */
        uint64_t xmc_arb_mode          : 1;  /**< [ 14: 14](R/W) Arbitration mode for ADD bus QOS queues. 0 = fully determined through QOS, 1 = QOS0
                                                                 highest priority; QOS 1-7 use normal mode. */
        uint64_t rdf_cnt               : 8;  /**< [ 13:  6](R/W) Defines the sample point of the LMC response data in the DDR-clock/core-clock crossing.
                                                                 For optimal performance set to
                                                                 10 * (DDR-clock period/core-clock period) - 1.
                                                                 To disable set to 0. All other values are reserved. */
        uint64_t reserved_5            : 1;
        uint64_t disgsyncto            : 1;  /**< [  4:  4](R/W) Disable global sync timeout. */
        uint64_t disldwb               : 1;  /**< [  3:  3](R/W) Suppresses the DWB functionality of any received LDWB, effectively turning them into LDTs. */
        uint64_t dissblkdty            : 1;  /**< [  2:  2](R/W) Disable bandwidth optimization between L2 and LMC and MOB which only transfers modified
                                                                 sub-blocks when possible. In an CCPI system all nodes must use the same setting of
                                                                 DISSBLKDTY or operation is undefined. */
        uint64_t disecc                : 1;  /**< [  1:  1](R/W) Tag and data ECC disable. */
        uint64_t disidxalias           : 1;  /**< [  0:  0](R/W) Index alias disable. */
#else /* Word 0 - Little Endian */
        uint64_t disidxalias           : 1;  /**< [  0:  0](R/W) Index alias disable. */
        uint64_t disecc                : 1;  /**< [  1:  1](R/W) Tag and data ECC disable. */
        uint64_t dissblkdty            : 1;  /**< [  2:  2](R/W) Disable bandwidth optimization between L2 and LMC and MOB which only transfers modified
                                                                 sub-blocks when possible. In an CCPI system all nodes must use the same setting of
                                                                 DISSBLKDTY or operation is undefined. */
        uint64_t disldwb               : 1;  /**< [  3:  3](R/W) Suppresses the DWB functionality of any received LDWB, effectively turning them into LDTs. */
        uint64_t disgsyncto            : 1;  /**< [  4:  4](R/W) Disable global sync timeout. */
        uint64_t reserved_5            : 1;
        uint64_t rdf_cnt               : 8;  /**< [ 13:  6](R/W) Defines the sample point of the LMC response data in the DDR-clock/core-clock crossing.
                                                                 For optimal performance set to
                                                                 10 * (DDR-clock period/core-clock period) - 1.
                                                                 To disable set to 0. All other values are reserved. */
        uint64_t xmc_arb_mode          : 1;  /**< [ 14: 14](R/W) Arbitration mode for ADD bus QOS queues. 0 = fully determined through QOS, 1 = QOS0
                                                                 highest priority; QOS 1-7 use normal mode. */
        uint64_t rsp_arb_mode          : 1;  /**< [ 15: 15](R/W) Arbitration mode for RSC/RSD bus. 0 = round-robin; 1 = static priority.
                                                                 1. IOR data.
                                                                 2. STIN/FILLs.
                                                                 3. STDN/SCDN/SCFL. */
        uint64_t reserved_16_23        : 8;
        uint64_t discclk               : 1;  /**< [ 24: 24](R/W) Disable conditional clocking in L2C PNR blocks. */
        uint64_t reserved_25_26        : 2;
        uint64_t disstgl2i             : 1;  /**< [ 27: 27](R/W) Disable STGL2Is from changing the tags. */
        uint64_t reserved_28           : 1;
        uint64_t ocla_qos              : 3;  /**< [ 31: 29](R/W) QOS level for the transactions from OCLA to L2C. */
        uint64_t reserved_32_63        : 32;
#endif /* Word 0 - End */
    } cn88xxp2;
};
typedef union bdk_l2c_ctl bdk_l2c_ctl_t;

#define BDK_L2C_CTL BDK_L2C_CTL_FUNC()
static inline uint64_t BDK_L2C_CTL_FUNC(void) __attribute__ ((pure, always_inline));
static inline uint64_t BDK_L2C_CTL_FUNC(void)
{
    if (CAVIUM_IS_MODEL(CAVIUM_CN8XXX))
        return 0x87e080800000ll;
    __bdk_csr_fatal("L2C_CTL", 0, 0, 0, 0, 0);
}

#define typedef_BDK_L2C_CTL bdk_l2c_ctl_t
#define bustype_BDK_L2C_CTL BDK_CSR_TYPE_RSL
#define basename_BDK_L2C_CTL "L2C_CTL"
#define device_bar_BDK_L2C_CTL 0x0 /* PF_BAR0 */
#define busnum_BDK_L2C_CTL 0
#define arguments_BDK_L2C_CTL -1,-1,-1,-1

/**
 * Register (RSL) l2c_ecc_ctl
 *
 * L2C ECC Control Register
 * Flip ECC bits to generate single-bit or double-bit ECC errors in all instances of a given
 * memory type. Encodings are as follows.
 * 0x0 = No error.
 * 0x1 = Single-bit error on ECC\<0\>.
 * 0x2 = Single-bit error on ECC\<1\>.
 * 0x3 = Double-bit error on ECC\<1:0\>.
 *
 * L2DFLIP allows software to generate L2DSBE, L2DDBE, VBFSBE, and VBFDBE errors for the purposes
 * of testing error handling code. When one (or both) of these bits are set, a PL2 that misses in
 * the L2 will fill with the appropriate error in the first two OWs of the fill. Software can
 * determine which OW pair gets the error by choosing the desired fill order (address\<6:5\>). A
 * PL2 that hits in the L2 will not inject any errors. Therefore sending a WBIL2 prior to the PL2
 * is recommended to make a miss likely. (If multiple processors are involved, software must be
 * sure that no other processor or I/O device can bring the block into the L2).
 *
 * To generate a VBFSBE or VBFDBE, software must first get the cache block into the cache with an
 * error using a PL2 that misses the L2. Then a store partial to a portion of the cache block
 * without the error must change the block to dirty. Then, a subsequent WBL2/WBIL2/victim will
 * trigger the VBFSBE/VBFDBE error.
 */
union bdk_l2c_ecc_ctl
{
    uint64_t u;
    struct bdk_l2c_ecc_ctl_s
    {
#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
        uint64_t reserved_12_63        : 52;
        uint64_t mibflip               : 2;  /**< [ 11: 10](R/W) Generate an ECC error in the MIB. See note above. */
        uint64_t l2dflip               : 2;  /**< [  9:  8](R/W) Generate an ECC error in the L2D. See note above. */
        uint64_t l2tflip               : 2;  /**< [  7:  6](R/W) Generate an ECC error in the L2T. */
        uint64_t rdfflip               : 2;  /**< [  5:  4](R/W) Generate an ECC error in RDF memory. */
        uint64_t xmdflip               : 2;  /**< [  3:  2](R/W) Generate an ECC error in all corresponding CBC XMD memories. */
        uint64_t reserved_0_1          : 2;
#else /* Word 0 - Little Endian */
        uint64_t reserved_0_1          : 2;
        uint64_t xmdflip               : 2;  /**< [  3:  2](R/W) Generate an ECC error in all corresponding CBC XMD memories. */
        uint64_t rdfflip               : 2;  /**< [  5:  4](R/W) Generate an ECC error in RDF memory. */
        uint64_t l2tflip               : 2;  /**< [  7:  6](R/W) Generate an ECC error in the L2T. */
        uint64_t l2dflip               : 2;  /**< [  9:  8](R/W) Generate an ECC error in the L2D. See note above. */
        uint64_t mibflip               : 2;  /**< [ 11: 10](R/W) Generate an ECC error in the MIB. See note above. */
        uint64_t reserved_12_63        : 52;
#endif /* Word 0 - End */
    } s;
    /* struct bdk_l2c_ecc_ctl_s cn; */
};
typedef union bdk_l2c_ecc_ctl bdk_l2c_ecc_ctl_t;

#define BDK_L2C_ECC_CTL BDK_L2C_ECC_CTL_FUNC()
static inline uint64_t BDK_L2C_ECC_CTL_FUNC(void) __attribute__ ((pure, always_inline));
static inline uint64_t BDK_L2C_ECC_CTL_FUNC(void)
{
    if (CAVIUM_IS_MODEL(CAVIUM_CN8XXX))
        return 0x87e080800010ll;
    __bdk_csr_fatal("L2C_ECC_CTL", 0, 0, 0, 0, 0);
}

#define typedef_BDK_L2C_ECC_CTL bdk_l2c_ecc_ctl_t
#define bustype_BDK_L2C_ECC_CTL BDK_CSR_TYPE_RSL
#define basename_BDK_L2C_ECC_CTL "L2C_ECC_CTL"
#define device_bar_BDK_L2C_ECC_CTL 0x0 /* PF_BAR0 */
#define busnum_BDK_L2C_ECC_CTL 0
#define arguments_BDK_L2C_ECC_CTL -1,-1,-1,-1

/**
 * Register (RSL) l2c_mci#_bist_status
 *
 * Level 2 MCI BIST Status (DCLK) Registers
 * If clear BIST is desired, [CLEAR_BIST] must be written to 1 before [START_BIST] is
 * written to 1 using a separate CSR write operation. [CLEAR_BIST] must not be changed
 * after writing [START_BIST] to 1 until the BIST operation completes (indicated by
 * [START_BIST] returning to 0) or operation is undefined.
 */
union bdk_l2c_mcix_bist_status
{
    uint64_t u;
    struct bdk_l2c_mcix_bist_status_s
    {
#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
        uint64_t start_bist            : 1;  /**< [ 63: 63](R/W/H) When written to 1, starts BIST. Remains 1 until BIST is complete. */
        uint64_t clear_bist            : 1;  /**< [ 62: 62](R/W) When BIST is triggered, run clear BIST. */
        uint64_t reserved_2_61         : 60;
        uint64_t vbffl                 : 2;  /**< [  1:  0](RO/H) BIST failure status for VBF0-1. */
#else /* Word 0 - Little Endian */
        uint64_t vbffl                 : 2;  /**< [  1:  0](RO/H) BIST failure status for VBF0-1. */
        uint64_t reserved_2_61         : 60;
        uint64_t clear_bist            : 1;  /**< [ 62: 62](R/W) When BIST is triggered, run clear BIST. */
        uint64_t start_bist            : 1;  /**< [ 63: 63](R/W/H) When written to 1, starts BIST. Remains 1 until BIST is complete. */
#endif /* Word 0 - End */
    } s;
    /* struct bdk_l2c_mcix_bist_status_s cn; */
};
typedef union bdk_l2c_mcix_bist_status bdk_l2c_mcix_bist_status_t;

static inline uint64_t BDK_L2C_MCIX_BIST_STATUS(unsigned long a) __attribute__ ((pure, always_inline));
static inline uint64_t BDK_L2C_MCIX_BIST_STATUS(unsigned long a)
{
    if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a==0))
        return 0x87e05c020000ll + 0x1000000ll * ((a) & 0x0);
    if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=2))
        return 0x87e05c020000ll + 0x1000000ll * ((a) & 0x3);
    if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=3))
        return 0x87e05c020000ll + 0x1000000ll * ((a) & 0x3);
    __bdk_csr_fatal("L2C_MCIX_BIST_STATUS", 1, a, 0, 0, 0);
}

#define typedef_BDK_L2C_MCIX_BIST_STATUS(a) bdk_l2c_mcix_bist_status_t
#define bustype_BDK_L2C_MCIX_BIST_STATUS(a) BDK_CSR_TYPE_RSL
#define basename_BDK_L2C_MCIX_BIST_STATUS(a) "L2C_MCIX_BIST_STATUS"
#define device_bar_BDK_L2C_MCIX_BIST_STATUS(a) 0x0 /* PF_BAR0 */
#define busnum_BDK_L2C_MCIX_BIST_STATUS(a) (a)
#define arguments_BDK_L2C_MCIX_BIST_STATUS(a) (a),-1,-1,-1

/**
 * Register (RSL) l2c_mci#_err
 *
 * L2C MCI Error Information Registers
 * This register records error information for all MCI errors.
 * An error locks [VBF4], [INDEX], [SYN0] and [SYN1] and sets the bit corresponding to the error
 * received. VBFDBE errors take priority and will overwrite an earlier logged VBFSBE error. The
 * information from exactly one VBF read is present at any given time and serves to document
 * which error(s) were present in the read with the highest priority error.
 * The syndrome is recorded for DBE errors.
 */
union bdk_l2c_mcix_err
{
    uint64_t u;
    struct bdk_l2c_mcix_err_s
    {
#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
        uint64_t vbfdbe1               : 1;  /**< [ 63: 63](RO/H) INDEX/SYN1 corresponds to a double-bit VBF ECC error. */
        uint64_t vbfdbe0               : 1;  /**< [ 62: 62](RO/H) INDEX/SYN0 corresponds to a double-bit VBF ECC error. */
        uint64_t vbfsbe1               : 1;  /**< [ 61: 61](RO/H) INDEX/SYN1 corresponds to a single-bit VBF ECC error. */
        uint64_t vbfsbe0               : 1;  /**< [ 60: 60](RO/H) INDEX/SYN0 corresponds to a single-bit VBF ECC error. */
        uint64_t reserved_48_59        : 12;
        uint64_t syn1                  : 8;  /**< [ 47: 40](RO/H) Error syndrome for QW1 ([127:64]).
                                                                 Records only on single bit errors.

                                                                 Internal:
                                                                 See bug26334. */
        uint64_t syn0                  : 8;  /**< [ 39: 32](RO/H) Error syndrome for QW0 ([63:0]).
                                                                 Records only on single bit errors.

                                                                 Internal:
                                                                 See bug26334. */
        uint64_t reserved_12_31        : 20;
        uint64_t vbf4                  : 1;  /**< [ 11: 11](RO/H) When 1, errors were from VBF (4+a), when 0, from VBF (0+a). */
        uint64_t index                 : 7;  /**< [ 10:  4](RO/H) VBF index which was read and had the error(s). */
        uint64_t reserved_0_3          : 4;
#else /* Word 0 - Little Endian */
        uint64_t reserved_0_3          : 4;
        uint64_t index                 : 7;  /**< [ 10:  4](RO/H) VBF index which was read and had the error(s). */
        uint64_t vbf4                  : 1;  /**< [ 11: 11](RO/H) When 1, errors were from VBF (4+a), when 0, from VBF (0+a). */
        uint64_t reserved_12_31        : 20;
        uint64_t syn0                  : 8;  /**< [ 39: 32](RO/H) Error syndrome for QW0 ([63:0]).
                                                                 Records only on single bit errors.

                                                                 Internal:
                                                                 See bug26334. */
        uint64_t syn1                  : 8;  /**< [ 47: 40](RO/H) Error syndrome for QW1 ([127:64]).
                                                                 Records only on single bit errors.

                                                                 Internal:
                                                                 See bug26334. */
        uint64_t reserved_48_59        : 12;
        uint64_t vbfsbe0               : 1;  /**< [ 60: 60](RO/H) INDEX/SYN0 corresponds to a single-bit VBF ECC error. */
        uint64_t vbfsbe1               : 1;  /**< [ 61: 61](RO/H) INDEX/SYN1 corresponds to a single-bit VBF ECC error. */
        uint64_t vbfdbe0               : 1;  /**< [ 62: 62](RO/H) INDEX/SYN0 corresponds to a double-bit VBF ECC error. */
        uint64_t vbfdbe1               : 1;  /**< [ 63: 63](RO/H) INDEX/SYN1 corresponds to a double-bit VBF ECC error. */
#endif /* Word 0 - End */
    } s;
    /* struct bdk_l2c_mcix_err_s cn; */
};
typedef union bdk_l2c_mcix_err bdk_l2c_mcix_err_t;

static inline uint64_t BDK_L2C_MCIX_ERR(unsigned long a) __attribute__ ((pure, always_inline));
static inline uint64_t BDK_L2C_MCIX_ERR(unsigned long a)
{
    if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a==0))
        return 0x87e05c010000ll + 0x1000000ll * ((a) & 0x0);
    if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=2))
        return 0x87e05c010000ll + 0x1000000ll * ((a) & 0x3);
    if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=3))
        return 0x87e05c010000ll + 0x1000000ll * ((a) & 0x3);
    __bdk_csr_fatal("L2C_MCIX_ERR", 1, a, 0, 0, 0);
}

#define typedef_BDK_L2C_MCIX_ERR(a) bdk_l2c_mcix_err_t
#define bustype_BDK_L2C_MCIX_ERR(a) BDK_CSR_TYPE_RSL
#define basename_BDK_L2C_MCIX_ERR(a) "L2C_MCIX_ERR"
#define device_bar_BDK_L2C_MCIX_ERR(a) 0x0 /* PF_BAR0 */
#define busnum_BDK_L2C_MCIX_ERR(a) (a)
#define arguments_BDK_L2C_MCIX_ERR(a) (a),-1,-1,-1

/**
 * Register (RSL) l2c_oci_ctl
 *
 * L2C CCPI Control Register
 */
union bdk_l2c_oci_ctl
{
    uint64_t u;
    struct bdk_l2c_oci_ctl_s
    {
#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
        uint64_t reserved_31_63        : 33;
        uint64_t ncpend                : 1;  /**< [ 30: 30](RO/H) An indication that a node change is pending.  Hardware sets this bit when
                                                                 OCX_COM_NODE[ID] is changed and clears the bit when the node change has taken
                                                                 effect. */
        uint64_t lock_local_cas        : 1;  /**< [ 29: 29](RO) Reserved. */
        uint64_t lock_local_stc        : 1;  /**< [ 28: 28](RO) Reserved. */
        uint64_t lock_local_pp         : 1;  /**< [ 27: 27](RO) Reserved. */
        uint64_t lngtolen              : 5;  /**< [ 26: 22](R/W) Reserved.
                                                                 Internal:
                                                                 This only controls the GSYNC timeout in the L2C_CBCs in non-OCI chips. */
        uint64_t shtolen               : 5;  /**< [ 21: 17](RO) Reserved. */
        uint64_t shtoioen              : 1;  /**< [ 16: 16](RO) Reserved. */
        uint64_t shtoen                : 3;  /**< [ 15: 13](RO) Reserved. */
        uint64_t shto                  : 1;  /**< [ 12: 12](RO) Reserved. */
        uint64_t inv_mode              : 2;  /**< [ 11: 10](RO) Reserved. */
        uint64_t cas_fdx               : 1;  /**< [  9:  9](RO) Reserved. */
        uint64_t rldd_psha             : 1;  /**< [  8:  8](RO) Reserved. */
        uint64_t lock_local_iob        : 1;  /**< [  7:  7](RO) Reserved. */
        uint64_t iofrcl                : 1;  /**< [  6:  6](RO) Reserved. */
        uint64_t reserved_4_5          : 2;
        uint64_t enaoci                : 4;  /**< [  3:  0](RO) CCPI is not present. Any attempt to enable it will be ignored. */
#else /* Word 0 - Little Endian */
        uint64_t enaoci                : 4;  /**< [  3:  0](RO) CCPI is not present. Any attempt to enable it will be ignored. */
        uint64_t reserved_4_5          : 2;
        uint64_t iofrcl                : 1;  /**< [  6:  6](RO) Reserved. */
        uint64_t lock_local_iob        : 1;  /**< [  7:  7](RO) Reserved. */
        uint64_t rldd_psha             : 1;  /**< [  8:  8](RO) Reserved. */
        uint64_t cas_fdx               : 1;  /**< [  9:  9](RO) Reserved. */
        uint64_t inv_mode              : 2;  /**< [ 11: 10](RO) Reserved. */
        uint64_t shto                  : 1;  /**< [ 12: 12](RO) Reserved. */
        uint64_t shtoen                : 3;  /**< [ 15: 13](RO) Reserved. */
        uint64_t shtoioen              : 1;  /**< [ 16: 16](RO) Reserved. */
        uint64_t shtolen               : 5;  /**< [ 21: 17](RO) Reserved. */
        uint64_t lngtolen              : 5;  /**< [ 26: 22](R/W) Reserved.
                                                                 Internal:
                                                                 This only controls the GSYNC timeout in the L2C_CBCs in non-OCI chips. */
        uint64_t lock_local_pp         : 1;  /**< [ 27: 27](RO) Reserved. */
        uint64_t lock_local_stc        : 1;  /**< [ 28: 28](RO) Reserved. */
        uint64_t lock_local_cas        : 1;  /**< [ 29: 29](RO) Reserved. */
        uint64_t ncpend                : 1;  /**< [ 30: 30](RO/H) An indication that a node change is pending.  Hardware sets this bit when
                                                                 OCX_COM_NODE[ID] is changed and clears the bit when the node change has taken
                                                                 effect. */
        uint64_t reserved_31_63        : 33;
#endif /* Word 0 - End */
    } s;
    struct bdk_l2c_oci_ctl_cn88xxp1
    {
#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
        uint64_t reserved_31_63        : 33;
        uint64_t reserved_30           : 1;
        uint64_t lock_local_cas        : 1;  /**< [ 29: 29](R/W) When set, L2 CAS operations to remote addresses which miss at the requester will be
                                                                 performed locally (if possible) on the requesting node. Default operation will instead
                                                                 send the CAS request to be performed on the home node. For STC ops [LOCK_LOCAL_STC]. */
        uint64_t lock_local_stc        : 1;  /**< [ 28: 28](R/W) When set, L2 STC operations to remote addresses which miss at the requester will be
                                                                 performed locally (if possible) on the requesting node. Default operation will instead
                                                                 send the STC request to be performed on the home node. For CAS ops [LOCK_LOCAL_CAS]. */
        uint64_t lock_local_pp         : 1;  /**< [ 27: 27](R/W) When clear, L2 atomic operations (excluding CAS/STC) core initiated requests to remote
                                                                 addresses which miss at the requester will send the atomic request to be performed on the
                                                                 home node. Default operation will instead  be performed locally on the requesting node.
                                                                 For request initiated by IOB & for STC & CAS ops, see
                                                                 [LOCK_LOCAL_IOB]/[LOCK_LOCAL_STC]/[LOCK_LOCAL_CAS]. */
        uint64_t lngtolen              : 5;  /**< [ 26: 22](R/W) Selects the bit in the counter for the long timeout value (timeout used when [SHTO] is
                                                                 clear). Values supported are between 11 and 29 (for a timeout values between 2^11 and
                                                                 2^29). Actual timeout is between 1x and 2x this interval. For example if [LNGTOLEN] = 28
                                                                 (the reset value), the timeout is between 256M and 512M core clocks. Note: a value of 0
                                                                 disables this timer. */
        uint64_t shtolen               : 5;  /**< [ 21: 17](R/W) Selects the bit in the counter for the short timeout value (timeout used when [SHTO] is
                                                                 set). Values supported are between 9 and 29 (for a timeout values between 2^9 and 2^29).
                                                                 Actual timeout is between 1x and 2x this interval. For example if [SHTOLEN] = 14 (the
                                                                 reset
                                                                 value), the timeout is between 16K and 32K core clocks. Note: a value of 0 disables this
                                                                 timer. */
        uint64_t shtoioen              : 1;  /**< [ 16: 16](R/W) When set, any core issues any of an IO load, atomic, acking store, acking IOBADDR, or
                                                                 acking LMTST to a node that doesn't exist (existence defined by the ENAOCI bits), then the
                                                                 hardware sets [SHTO]. */
        uint64_t shtoen                : 3;  /**< [ 15: 13](R/W) When set, if the corresponding CCPI link is down, the hardware sets [SHTO].
                                                                 See OCX_COM_LINK(0..2)_CTL for a description of what events can contribute to the
                                                                 link_down condition. */
        uint64_t shto                  : 1;  /**< [ 12: 12](R/W/H) Use short timeout intervals. When set, core uses SDIDTTO for both DID and commit counter
                                                                 timeouts, rather than DIDTTO/DIDTTO2. Similarly, L2C will use short instead of long
                                                                 timeout. */
        uint64_t inv_mode              : 2;  /**< [ 11: 10](R/W) Describes how aggressive to be when waiting for local invalidates before sending CCPI
                                                                 responses which act like commits at the remote.
                                                                 0x0 = Conservative mode, waits until all local invalidates have been sent by their
                                                                 respective CBCs to the cores.
                                                                 0x1 = Moderate mode, waits until all local invalidates have been sent to their respective
                                                                 CBCs, but not necessarily actually sent to the cores themselves.
                                                                 0x2 = Aggressive mode, does not wait for local invalidates to begin their processing. */
        uint64_t cas_fdx               : 1;  /**< [  9:  9](R/W) When set, L2 STC/CAS operations performed at the home will immediately bring the block
                                                                 exclusive into the home. Default operation is to first request the block shared and only
                                                                 invalidate the remote if the compare succeeds. */
        uint64_t rldd_psha             : 1;  /**< [  8:  8](R/W) When set, RLDD is assumed to return a shared response (PSHA). Default operation assumes an
                                                                 exclusive response (PEMD). Note that an incorrect assumption only causes an extra tag
                                                                 write to be done upon receiving the response. */
        uint64_t lock_local_iob        : 1;  /**< [  7:  7](R/W) When set, L2 atomic operations (excluding CAS/STC) initiated by IOB to remote addresses
                                                                 which miss at the requester are performed locally on the requesting node. When clear the
                                                                 operation instead sends the atomic request to be performed on the home node. For request
                                                                 initiated by core for STC and CAS ops; see
                                                                 [LOCK_LOCAL_PP]/[LOCK_LOCAL_STC]/[LOCK_LOCAL_CAS].
                                                                 Default is set to 1 (local locks). */
        uint64_t iofrcl                : 1;  /**< [  6:  6](R/W) When set, L2C services all I/O read and write operations on the local node, regardless of
                                                                 the value of the node ID bits in the physical address. During normal operation this bit is
                                                                 expected to be 0. Will only transition from 1 to 0, never from 0 to 1. */
        uint64_t reserved_4_5          : 2;
        uint64_t enaoci                : 4;  /**< [  3:  0](R/W) Enable CCPI processing (one bit per node_id). When set, perform CCPI
                                                                 processing. When clear, CCPI memory writes are blocked and CCPI memory reads
                                                                 return unpredictable data. When clear,
                                                                 CCPI I/O requests and MOC references are processed and sent to OCX where they are
                                                                 ultimately discarded. RDDISOCI/WRDISOCI/IORDDISOCI/IOWRDISOCI interrupts occur if and only
                                                                 if the corresponding ENAOCI\<node\> bit is clear. References to the local node (configured
                                                                 via OCX_COM_NODE[ID]) ignore the value of ENAOCI\<node\> because no CCPI processing is
                                                                 required. Similarly, all I/O references ignore the value of ENAOCI when
                                                                 L2C_OCI_CTL[IOFRCL] is set. */
#else /* Word 0 - Little Endian */
        uint64_t enaoci                : 4;  /**< [  3:  0](R/W) Enable CCPI processing (one bit per node_id). When set, perform CCPI
                                                                 processing. When clear, CCPI memory writes are blocked and CCPI memory reads
                                                                 return unpredictable data. When clear,
                                                                 CCPI I/O requests and MOC references are processed and sent to OCX where they are
                                                                 ultimately discarded. RDDISOCI/WRDISOCI/IORDDISOCI/IOWRDISOCI interrupts occur if and only
                                                                 if the corresponding ENAOCI\<node\> bit is clear. References to the local node (configured
                                                                 via OCX_COM_NODE[ID]) ignore the value of ENAOCI\<node\> because no CCPI processing is
                                                                 required. Similarly, all I/O references ignore the value of ENAOCI when
                                                                 L2C_OCI_CTL[IOFRCL] is set. */
        uint64_t reserved_4_5          : 2;
        uint64_t iofrcl                : 1;  /**< [  6:  6](R/W) When set, L2C services all I/O read and write operations on the local node, regardless of
                                                                 the value of the node ID bits in the physical address. During normal operation this bit is
                                                                 expected to be 0. Will only transition from 1 to 0, never from 0 to 1. */
        uint64_t lock_local_iob        : 1;  /**< [  7:  7](R/W) When set, L2 atomic operations (excluding CAS/STC) initiated by IOB to remote addresses
                                                                 which miss at the requester are performed locally on the requesting node. When clear the
                                                                 operation instead sends the atomic request to be performed on the home node. For request
                                                                 initiated by core for STC and CAS ops; see
                                                                 [LOCK_LOCAL_PP]/[LOCK_LOCAL_STC]/[LOCK_LOCAL_CAS].
                                                                 Default is set to 1 (local locks). */
        uint64_t rldd_psha             : 1;  /**< [  8:  8](R/W) When set, RLDD is assumed to return a shared response (PSHA). Default operation assumes an
                                                                 exclusive response (PEMD). Note that an incorrect assumption only causes an extra tag
                                                                 write to be done upon receiving the response. */
        uint64_t cas_fdx               : 1;  /**< [  9:  9](R/W) When set, L2 STC/CAS operations performed at the home will immediately bring the block
                                                                 exclusive into the home. Default operation is to first request the block shared and only
                                                                 invalidate the remote if the compare succeeds. */
        uint64_t inv_mode              : 2;  /**< [ 11: 10](R/W) Describes how aggressive to be when waiting for local invalidates before sending CCPI
                                                                 responses which act like commits at the remote.
                                                                 0x0 = Conservative mode, waits until all local invalidates have been sent by their
                                                                 respective CBCs to the cores.
                                                                 0x1 = Moderate mode, waits until all local invalidates have been sent to their respective
                                                                 CBCs, but not necessarily actually sent to the cores themselves.
                                                                 0x2 = Aggressive mode, does not wait for local invalidates to begin their processing. */
        uint64_t shto                  : 1;  /**< [ 12: 12](R/W/H) Use short timeout intervals. When set, core uses SDIDTTO for both DID and commit counter
                                                                 timeouts, rather than DIDTTO/DIDTTO2. Similarly, L2C will use short instead of long
                                                                 timeout. */
        uint64_t shtoen                : 3;  /**< [ 15: 13](R/W) When set, if the corresponding CCPI link is down, the hardware sets [SHTO].
                                                                 See OCX_COM_LINK(0..2)_CTL for a description of what events can contribute to the
                                                                 link_down condition. */
        uint64_t shtoioen              : 1;  /**< [ 16: 16](R/W) When set, any core issues any of an IO load, atomic, acking store, acking IOBADDR, or
                                                                 acking LMTST to a node that doesn't exist (existence defined by the ENAOCI bits), then the
                                                                 hardware sets [SHTO]. */
        uint64_t shtolen               : 5;  /**< [ 21: 17](R/W) Selects the bit in the counter for the short timeout value (timeout used when [SHTO] is
                                                                 set). Values supported are between 9 and 29 (for a timeout values between 2^9 and 2^29).
                                                                 Actual timeout is between 1x and 2x this interval. For example if [SHTOLEN] = 14 (the
                                                                 reset
                                                                 value), the timeout is between 16K and 32K core clocks. Note: a value of 0 disables this
                                                                 timer. */
        uint64_t lngtolen              : 5;  /**< [ 26: 22](R/W) Selects the bit in the counter for the long timeout value (timeout used when [SHTO] is
                                                                 clear). Values supported are between 11 and 29 (for a timeout values between 2^11 and
                                                                 2^29). Actual timeout is between 1x and 2x this interval. For example if [LNGTOLEN] = 28
                                                                 (the reset value), the timeout is between 256M and 512M core clocks. Note: a value of 0
                                                                 disables this timer. */
        uint64_t lock_local_pp         : 1;  /**< [ 27: 27](R/W) When clear, L2 atomic operations (excluding CAS/STC) core initiated requests to remote
                                                                 addresses which miss at the requester will send the atomic request to be performed on the
                                                                 home node. Default operation will instead  be performed locally on the requesting node.
                                                                 For request initiated by IOB & for STC & CAS ops, see
                                                                 [LOCK_LOCAL_IOB]/[LOCK_LOCAL_STC]/[LOCK_LOCAL_CAS]. */
        uint64_t lock_local_stc        : 1;  /**< [ 28: 28](R/W) When set, L2 STC operations to remote addresses which miss at the requester will be
                                                                 performed locally (if possible) on the requesting node. Default operation will instead
                                                                 send the STC request to be performed on the home node. For CAS ops [LOCK_LOCAL_CAS]. */
        uint64_t lock_local_cas        : 1;  /**< [ 29: 29](R/W) When set, L2 CAS operations to remote addresses which miss at the requester will be
                                                                 performed locally (if possible) on the requesting node. Default operation will instead
                                                                 send the CAS request to be performed on the home node. For STC ops [LOCK_LOCAL_STC]. */
        uint64_t reserved_30           : 1;
        uint64_t reserved_31_63        : 33;
#endif /* Word 0 - End */
    } cn88xxp1;
    /* struct bdk_l2c_oci_ctl_s cn81xx; */
    /* struct bdk_l2c_oci_ctl_s cn83xx; */
    struct bdk_l2c_oci_ctl_cn88xxp2
    {
#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
        uint64_t reserved_31_63        : 33;
        uint64_t ncpend                : 1;  /**< [ 30: 30](RO/H) An indication that a node change is pending.  Hardware sets this bit when
                                                                 OCX_COM_NODE[ID] is changed and clears the bit when the node change has taken
                                                                 effect. */
        uint64_t lock_local_cas        : 1;  /**< [ 29: 29](R/W) When set, L2 CAS operations to remote addresses which miss at the requester will be
                                                                 performed locally (if possible) on the requesting node. Default operation will instead
                                                                 send the CAS request to be performed on the home node. For STC ops [LOCK_LOCAL_STC]. */
        uint64_t lock_local_stc        : 1;  /**< [ 28: 28](R/W) When set, L2 STC operations to remote addresses which miss at the requester will be
                                                                 performed locally (if possible) on the requesting node. Default operation will instead
                                                                 send the STC request to be performed on the home node. For CAS ops [LOCK_LOCAL_CAS]. */
        uint64_t lock_local_pp         : 1;  /**< [ 27: 27](R/W) When clear, L2 atomic operations (excluding CAS/STC) core initiated requests to remote
                                                                 addresses which miss at the requester will send the atomic request to be performed on the
                                                                 home node. Default operation will instead  be performed locally on the requesting node.
                                                                 For request initiated by IOB & for STC & CAS ops, see
                                                                 [LOCK_LOCAL_IOB]/[LOCK_LOCAL_STC]/[LOCK_LOCAL_CAS]. */
        uint64_t lngtolen              : 5;  /**< [ 26: 22](R/W) Selects the bit in the counter for the long timeout value (timeout used when [SHTO] is
                                                                 clear). Values supported are between 11 and 29 (for a timeout values between 2^11 and
                                                                 2^29). Actual timeout is between 1x and 2x this interval. For example if [LNGTOLEN] = 28
                                                                 (the reset value), the timeout is between 256M and 512M core clocks. Note: a value of 0
                                                                 disables this timer. */
        uint64_t shtolen               : 5;  /**< [ 21: 17](R/W) Selects the bit in the counter for the short timeout value (timeout used when [SHTO] is
                                                                 set). Values supported are between 9 and 29 (for a timeout values between 2^9 and 2^29).
                                                                 Actual timeout is between 1x and 2x this interval. For example if [SHTOLEN] = 14 (the
                                                                 reset
                                                                 value), the timeout is between 16K and 32K core clocks. Note: a value of 0 disables this
                                                                 timer. */
        uint64_t shtoioen              : 1;  /**< [ 16: 16](R/W) When set, any core issues any of an IO load, atomic, acking store, acking IOBADDR, or
                                                                 acking LMTST to a node that doesn't exist (existence defined by the ENAOCI bits), then the
                                                                 hardware sets [SHTO]. */
        uint64_t shtoen                : 3;  /**< [ 15: 13](R/W) When set, if the corresponding CCPI link is down, the hardware sets [SHTO].
                                                                 See OCX_COM_LINK(0..2)_CTL for a description of what events can contribute to the
                                                                 link_down condition. */
        uint64_t shto                  : 1;  /**< [ 12: 12](R/W/H) Use short timeout intervals. When set, core uses SDIDTTO for both DID and commit counter
                                                                 timeouts, rather than DIDTTO/DIDTTO2. Similarly, L2C will use short instead of long
                                                                 timeout. */
        uint64_t inv_mode              : 2;  /**< [ 11: 10](R/W) Describes how aggressive to be when waiting for local invalidates before sending CCPI
                                                                 responses which act like commits at the remote.
                                                                 0x0 = Conservative mode, waits until all local invalidates have been sent by their
                                                                 respective CBCs to the cores.
                                                                 0x1 = Moderate mode, waits until all local invalidates have been sent to their respective
                                                                 CBCs, but not necessarily actually sent to the cores themselves.
                                                                 0x2 = Aggressive mode, does not wait for local invalidates to begin their processing. */
        uint64_t cas_fdx               : 1;  /**< [  9:  9](R/W) When set, L2 STC/CAS operations performed at the home will immediately bring the block
                                                                 exclusive into the home. Default operation is to first request the block shared and only
                                                                 invalidate the remote if the compare succeeds. */
        uint64_t rldd_psha             : 1;  /**< [  8:  8](R/W) When set, RLDD is assumed to return a shared response (PSHA). Default operation assumes an
                                                                 exclusive response (PEMD). Note that an incorrect assumption only causes an extra tag
                                                                 write to be done upon receiving the response. */
        uint64_t lock_local_iob        : 1;  /**< [  7:  7](R/W) When set, L2 atomic operations (excluding CAS/STC) initiated by IOB to remote addresses
                                                                 which miss at the requester are performed locally on the requesting node. When clear the
                                                                 operation instead sends the atomic request to be performed on the home node. For request
                                                                 initiated by core for STC and CAS ops; see
                                                                 [LOCK_LOCAL_PP]/[LOCK_LOCAL_STC]/[LOCK_LOCAL_CAS].
                                                                 Default is set to 1 (local locks). */
        uint64_t iofrcl                : 1;  /**< [  6:  6](R/W) When set, L2C services all I/O read and write operations on the local node, regardless of
                                                                 the value of the node ID bits in the physical address. During normal operation this bit is
                                                                 expected to be 0. Will only transition from 1 to 0, never from 0 to 1. */
        uint64_t reserved_4_5          : 2;
        uint64_t enaoci                : 4;  /**< [  3:  0](R/W) Enable CCPI processing (one bit per node_id). When set, perform CCPI
                                                                 processing. When clear, CCPI memory writes are blocked and CCPI memory reads
                                                                 return unpredictable data. When clear,
                                                                 CCPI I/O requests and MOC references are processed and sent to OCX where they are
                                                                 ultimately discarded. RDDISOCI/WRDISOCI/IORDDISOCI/IOWRDISOCI interrupts occur if and only
                                                                 if the corresponding ENAOCI\<node\> bit is clear. References to the local node (configured
                                                                 via OCX_COM_NODE[ID]) ignore the value of ENAOCI\<node\> because no CCPI processing is
                                                                 required. Similarly, all I/O references ignore the value of ENAOCI when
                                                                 L2C_OCI_CTL[IOFRCL] is set. */
#else /* Word 0 - Little Endian */
        uint64_t enaoci                : 4;  /**< [  3:  0](R/W) Enable CCPI processing (one bit per node_id). When set, perform CCPI
                                                                 processing. When clear, CCPI memory writes are blocked and CCPI memory reads
                                                                 return unpredictable data. When clear,
                                                                 CCPI I/O requests and MOC references are processed and sent to OCX where they are
                                                                 ultimately discarded. RDDISOCI/WRDISOCI/IORDDISOCI/IOWRDISOCI interrupts occur if and only
                                                                 if the corresponding ENAOCI\<node\> bit is clear. References to the local node (configured
                                                                 via OCX_COM_NODE[ID]) ignore the value of ENAOCI\<node\> because no CCPI processing is
                                                                 required. Similarly, all I/O references ignore the value of ENAOCI when
                                                                 L2C_OCI_CTL[IOFRCL] is set. */
        uint64_t reserved_4_5          : 2;
        uint64_t iofrcl                : 1;  /**< [  6:  6](R/W) When set, L2C services all I/O read and write operations on the local node, regardless of
                                                                 the value of the node ID bits in the physical address. During normal operation this bit is
                                                                 expected to be 0. Will only transition from 1 to 0, never from 0 to 1. */
        uint64_t lock_local_iob        : 1;  /**< [  7:  7](R/W) When set, L2 atomic operations (excluding CAS/STC) initiated by IOB to remote addresses
                                                                 which miss at the requester are performed locally on the requesting node. When clear the
                                                                 operation instead sends the atomic request to be performed on the home node. For request
                                                                 initiated by core for STC and CAS ops; see
                                                                 [LOCK_LOCAL_PP]/[LOCK_LOCAL_STC]/[LOCK_LOCAL_CAS].
                                                                 Default is set to 1 (local locks). */
        uint64_t rldd_psha             : 1;  /**< [  8:  8](R/W) When set, RLDD is assumed to return a shared response (PSHA). Default operation assumes an
                                                                 exclusive response (PEMD). Note that an incorrect assumption only causes an extra tag
                                                                 write to be done upon receiving the response. */
        uint64_t cas_fdx               : 1;  /**< [  9:  9](R/W) When set, L2 STC/CAS operations performed at the home will immediately bring the block
                                                                 exclusive into the home. Default operation is to first request the block shared and only
                                                                 invalidate the remote if the compare succeeds. */
        uint64_t inv_mode              : 2;  /**< [ 11: 10](R/W) Describes how aggressive to be when waiting for local invalidates before sending CCPI
                                                                 responses which act like commits at the remote.
                                                                 0x0 = Conservative mode, waits until all local invalidates have been sent by their
                                                                 respective CBCs to the cores.
                                                                 0x1 = Moderate mode, waits until all local invalidates have been sent to their respective
                                                                 CBCs, but not necessarily actually sent to the cores themselves.
                                                                 0x2 = Aggressive mode, does not wait for local invalidates to begin their processing. */
        uint64_t shto                  : 1;  /**< [ 12: 12](R/W/H) Use short timeout intervals. When set, core uses SDIDTTO for both DID and commit counter
                                                                 timeouts, rather than DIDTTO/DIDTTO2. Similarly, L2C will use short instead of long
                                                                 timeout. */
        uint64_t shtoen                : 3;  /**< [ 15: 13](R/W) When set, if the corresponding CCPI link is down, the hardware sets [SHTO].
                                                                 See OCX_COM_LINK(0..2)_CTL for a description of what events can contribute to the
                                                                 link_down condition. */
        uint64_t shtoioen              : 1;  /**< [ 16: 16](R/W) When set, any core issues any of an IO load, atomic, acking store, acking IOBADDR, or
                                                                 acking LMTST to a node that doesn't exist (existence defined by the ENAOCI bits), then the
                                                                 hardware sets [SHTO]. */
        uint64_t shtolen               : 5;  /**< [ 21: 17](R/W) Selects the bit in the counter for the short timeout value (timeout used when [SHTO] is
                                                                 set). Values supported are between 9 and 29 (for a timeout values between 2^9 and 2^29).
                                                                 Actual timeout is between 1x and 2x this interval. For example if [SHTOLEN] = 14 (the
                                                                 reset
                                                                 value), the timeout is between 16K and 32K core clocks. Note: a value of 0 disables this
                                                                 timer. */
        uint64_t lngtolen              : 5;  /**< [ 26: 22](R/W) Selects the bit in the counter for the long timeout value (timeout used when [SHTO] is
                                                                 clear). Values supported are between 11 and 29 (for a timeout values between 2^11 and
                                                                 2^29). Actual timeout is between 1x and 2x this interval. For example if [LNGTOLEN] = 28
                                                                 (the reset value), the timeout is between 256M and 512M core clocks. Note: a value of 0
                                                                 disables this timer. */
        uint64_t lock_local_pp         : 1;  /**< [ 27: 27](R/W) When clear, L2 atomic operations (excluding CAS/STC) core initiated requests to remote
                                                                 addresses which miss at the requester will send the atomic request to be performed on the
                                                                 home node. Default operation will instead  be performed locally on the requesting node.
                                                                 For request initiated by IOB & for STC & CAS ops, see
                                                                 [LOCK_LOCAL_IOB]/[LOCK_LOCAL_STC]/[LOCK_LOCAL_CAS]. */
        uint64_t lock_local_stc        : 1;  /**< [ 28: 28](R/W) When set, L2 STC operations to remote addresses which miss at the requester will be
                                                                 performed locally (if possible) on the requesting node. Default operation will instead
                                                                 send the STC request to be performed on the home node. For CAS ops [LOCK_LOCAL_CAS]. */
        uint64_t lock_local_cas        : 1;  /**< [ 29: 29](R/W) When set, L2 CAS operations to remote addresses which miss at the requester will be
                                                                 performed locally (if possible) on the requesting node. Default operation will instead
                                                                 send the CAS request to be performed on the home node. For STC ops [LOCK_LOCAL_STC]. */
        uint64_t ncpend                : 1;  /**< [ 30: 30](RO/H) An indication that a node change is pending.  Hardware sets this bit when
                                                                 OCX_COM_NODE[ID] is changed and clears the bit when the node change has taken
                                                                 effect. */
        uint64_t reserved_31_63        : 33;
#endif /* Word 0 - End */
    } cn88xxp2;
};
typedef union bdk_l2c_oci_ctl bdk_l2c_oci_ctl_t;

#define BDK_L2C_OCI_CTL BDK_L2C_OCI_CTL_FUNC()
static inline uint64_t BDK_L2C_OCI_CTL_FUNC(void) __attribute__ ((pure, always_inline));
static inline uint64_t BDK_L2C_OCI_CTL_FUNC(void)
{
    if (CAVIUM_IS_MODEL(CAVIUM_CN8XXX))
        return 0x87e080800020ll;
    __bdk_csr_fatal("L2C_OCI_CTL", 0, 0, 0, 0, 0);
}

#define typedef_BDK_L2C_OCI_CTL bdk_l2c_oci_ctl_t
#define bustype_BDK_L2C_OCI_CTL BDK_CSR_TYPE_RSL
#define basename_BDK_L2C_OCI_CTL "L2C_OCI_CTL"
#define device_bar_BDK_L2C_OCI_CTL 0x0 /* PF_BAR0 */
#define busnum_BDK_L2C_OCI_CTL 0
#define arguments_BDK_L2C_OCI_CTL -1,-1,-1,-1

/**
 * Register (RSL) l2c_qos_pp#
 *
 * L2C Core QOS Level Registers
 */
union bdk_l2c_qos_ppx
{
    uint64_t u;
    struct bdk_l2c_qos_ppx_s
    {
#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
        uint64_t reserved_3_63         : 61;
        uint64_t lvl                   : 3;  /**< [  2:  0](R/W) QOS level to use for this core. */
#else /* Word 0 - Little Endian */
        uint64_t lvl                   : 3;  /**< [  2:  0](R/W) QOS level to use for this core. */
        uint64_t reserved_3_63         : 61;
#endif /* Word 0 - End */
    } s;
    /* struct bdk_l2c_qos_ppx_s cn; */
};
typedef union bdk_l2c_qos_ppx bdk_l2c_qos_ppx_t;

static inline uint64_t BDK_L2C_QOS_PPX(unsigned long a) __attribute__ ((pure, always_inline));
static inline uint64_t BDK_L2C_QOS_PPX(unsigned long a)
{
    if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=3))
        return 0x87e080880000ll + 8ll * ((a) & 0x3);
    if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=23))
        return 0x87e080880000ll + 8ll * ((a) & 0x1f);
    if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=47))
        return 0x87e080880000ll + 8ll * ((a) & 0x3f);
    __bdk_csr_fatal("L2C_QOS_PPX", 1, a, 0, 0, 0);
}

#define typedef_BDK_L2C_QOS_PPX(a) bdk_l2c_qos_ppx_t
#define bustype_BDK_L2C_QOS_PPX(a) BDK_CSR_TYPE_RSL
#define basename_BDK_L2C_QOS_PPX(a) "L2C_QOS_PPX"
#define device_bar_BDK_L2C_QOS_PPX(a) 0x0 /* PF_BAR0 */
#define busnum_BDK_L2C_QOS_PPX(a) (a)
#define arguments_BDK_L2C_QOS_PPX(a) (a),-1,-1,-1

/**
 * Register (RSL) l2c_qos_wgt
 *
 * L2C QOS Weight Register
 */
union bdk_l2c_qos_wgt
{
    uint64_t u;
    struct bdk_l2c_qos_wgt_s
    {
#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
        uint64_t wgt7                  : 8;  /**< [ 63: 56](R/W) Weight for QOS level 7. */
        uint64_t wgt6                  : 8;  /**< [ 55: 48](R/W) Weight for QOS level 6. */
        uint64_t wgt5                  : 8;  /**< [ 47: 40](R/W) Weight for QOS level 5. */
        uint64_t wgt4                  : 8;  /**< [ 39: 32](R/W) Weight for QOS level 4. */
        uint64_t wgt3                  : 8;  /**< [ 31: 24](R/W) Weight for QOS level 3. */
        uint64_t wgt2                  : 8;  /**< [ 23: 16](R/W) Weight for QOS level 2. */
        uint64_t wgt1                  : 8;  /**< [ 15:  8](R/W) Weight for QOS level 1. */
        uint64_t wgt0                  : 8;  /**< [  7:  0](R/W) Weight for QOS level 0. */
#else /* Word 0 - Little Endian */
        uint64_t wgt0                  : 8;  /**< [  7:  0](R/W) Weight for QOS level 0. */
        uint64_t wgt1                  : 8;  /**< [ 15:  8](R/W) Weight for QOS level 1. */
        uint64_t wgt2                  : 8;  /**< [ 23: 16](R/W) Weight for QOS level 2. */
        uint64_t wgt3                  : 8;  /**< [ 31: 24](R/W) Weight for QOS level 3. */
        uint64_t wgt4                  : 8;  /**< [ 39: 32](R/W) Weight for QOS level 4. */
        uint64_t wgt5                  : 8;  /**< [ 47: 40](R/W) Weight for QOS level 5. */
        uint64_t wgt6                  : 8;  /**< [ 55: 48](R/W) Weight for QOS level 6. */
        uint64_t wgt7                  : 8;  /**< [ 63: 56](R/W) Weight for QOS level 7. */
#endif /* Word 0 - End */
    } s;
    /* struct bdk_l2c_qos_wgt_s cn; */
};
typedef union bdk_l2c_qos_wgt bdk_l2c_qos_wgt_t;

#define BDK_L2C_QOS_WGT BDK_L2C_QOS_WGT_FUNC()
static inline uint64_t BDK_L2C_QOS_WGT_FUNC(void) __attribute__ ((pure, always_inline));
static inline uint64_t BDK_L2C_QOS_WGT_FUNC(void)
{
    if (CAVIUM_IS_MODEL(CAVIUM_CN8XXX))
        return 0x87e080800008ll;
    __bdk_csr_fatal("L2C_QOS_WGT", 0, 0, 0, 0, 0);
}

#define typedef_BDK_L2C_QOS_WGT bdk_l2c_qos_wgt_t
#define bustype_BDK_L2C_QOS_WGT BDK_CSR_TYPE_RSL
#define basename_BDK_L2C_QOS_WGT "L2C_QOS_WGT"
#define device_bar_BDK_L2C_QOS_WGT 0x0 /* PF_BAR0 */
#define busnum_BDK_L2C_QOS_WGT 0
#define arguments_BDK_L2C_QOS_WGT -1,-1,-1,-1

/**
 * Register (RSL) l2c_tad#_dll
 *
 * L2C TAD DLL Observability Register
 * This register provides the parameters for DLL observability.
 */
union bdk_l2c_tadx_dll
{
    uint64_t u;
    struct bdk_l2c_tadx_dll_s
    {
#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
        uint64_t reserved_60_63        : 4;
        uint64_t max_dll_setting       : 12; /**< [ 59: 48](RO/H) Max reported DLL setting. */
        uint64_t min_dll_setting       : 12; /**< [ 47: 36](RO/H) Min reported DLL setting. */
        uint64_t pd_pos_rclk_refclk    : 1;  /**< [ 35: 35](RO/H) Phase detector output. */
        uint64_t pdl_rclk_refclk       : 1;  /**< [ 34: 34](RO/H) Phase detector output. */
        uint64_t pdr_rclk_refclk       : 1;  /**< [ 33: 33](RO/H) Phase detector output. */
        uint64_t reserved_32           : 1;
        uint64_t dly_elem_enable       : 16; /**< [ 31: 16](RO/H) Delay element enable. */
        uint64_t dll_setting           : 12; /**< [ 15:  4](RO/H) DLL setting. */
        uint64_t reserved_1_3          : 3;
        uint64_t dll_lock              : 1;  /**< [  0:  0](RO/H) DLL lock: 1 = locked, 0 = unlocked. */
#else /* Word 0 - Little Endian */
        uint64_t dll_lock              : 1;  /**< [  0:  0](RO/H) DLL lock: 1 = locked, 0 = unlocked. */
        uint64_t reserved_1_3          : 3;
        uint64_t dll_setting           : 12; /**< [ 15:  4](RO/H) DLL setting. */
        uint64_t dly_elem_enable       : 16; /**< [ 31: 16](RO/H) Delay element enable. */
        uint64_t reserved_32           : 1;
        uint64_t pdr_rclk_refclk       : 1;  /**< [ 33: 33](RO/H) Phase detector output. */
        uint64_t pdl_rclk_refclk       : 1;  /**< [ 34: 34](RO/H) Phase detector output. */
        uint64_t pd_pos_rclk_refclk    : 1;  /**< [ 35: 35](RO/H) Phase detector output. */
        uint64_t min_dll_setting       : 12; /**< [ 47: 36](RO/H) Min reported DLL setting. */
        uint64_t max_dll_setting       : 12; /**< [ 59: 48](RO/H) Max reported DLL setting. */
        uint64_t reserved_60_63        : 4;
#endif /* Word 0 - End */
    } s;
    /* struct bdk_l2c_tadx_dll_s cn; */
};
typedef union bdk_l2c_tadx_dll bdk_l2c_tadx_dll_t;

static inline uint64_t BDK_L2C_TADX_DLL(unsigned long a) __attribute__ ((pure, always_inline));
static inline uint64_t BDK_L2C_TADX_DLL(unsigned long a)
{
    if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a==0))
        return 0x87e050030000ll + 0x1000000ll * ((a) & 0x0);
    if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
        return 0x87e050030000ll + 0x1000000ll * ((a) & 0x3);
    if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=7))
        return 0x87e050030000ll + 0x1000000ll * ((a) & 0x7);
    __bdk_csr_fatal("L2C_TADX_DLL", 1, a, 0, 0, 0);
}

#define typedef_BDK_L2C_TADX_DLL(a) bdk_l2c_tadx_dll_t
#define bustype_BDK_L2C_TADX_DLL(a) BDK_CSR_TYPE_RSL
#define basename_BDK_L2C_TADX_DLL(a) "L2C_TADX_DLL"
#define device_bar_BDK_L2C_TADX_DLL(a) 0x0 /* PF_BAR0 */
#define busnum_BDK_L2C_TADX_DLL(a) (a)
#define arguments_BDK_L2C_TADX_DLL(a) (a),-1,-1,-1

/**
 * Register (RSL) l2c_tad#_err
 *
 * L2C TAD Request Error Info Registers
 * This register records error information for *DISOCI and *NXM
 * interrupts. The NXM logic only applies to local addresses. A command for
 * a remote address does not cause a [RDNXM]/[WRNXM] on the requesting node, but
 * may on the remote node. Similarly, [RDDISOCI]/[WRDISOCI] is always for a remote
 * address. The first [WRDISOCI]/[WRNXM] error will lock the register until the
 * logged error type is cleared; [RDDISOCI]/[RDNXM] never locks the register.
 */
union bdk_l2c_tadx_err
{
    uint64_t u;
    struct bdk_l2c_tadx_err_s
    {
#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
        uint64_t rdnxm                 : 1;  /**< [ 63: 63](RO/H) Logged information is for a L2C_TAD()_INT_W1C[RDNXM] error. */
        uint64_t wrnxm                 : 1;  /**< [ 62: 62](RO/H) Logged information is for a L2C_TAD()_INT_W1C[WRNXM] error. */
        uint64_t rddisoci              : 1;  /**< [ 61: 61](RO/H) Logged information is for a L2C_TAD()_INT_W1C[RDDISOCI] error. */
        uint64_t wrdisoci              : 1;  /**< [ 60: 60](RO/H) Logged information is for a L2C_TAD()_INT_W1C[WRDISOCI] error. */
        uint64_t nonsec                : 1;  /**< [ 59: 59](RO/H) Nonsecure (NS) bit of request causing error. */
        uint64_t cmd                   : 8;  /**< [ 58: 51](RO/H) Encoding of XMC or CCPI command causing error.
                                                                 Internal:
                                                                 If CMD\<7\>==1, use XMC_CMD_E to
                                                                 decode CMD\<6:0\>. If CMD\<7:5\>==0, use OCI_MREQ_CMD_E to decode CMD\<4:0\>. If CMD\<7:5\>==1,
                                                                 use OCI_MFWD_CMD_E to decode CMD\<4:0\>. If CMD\<7:5\>==2, use OCI_MRSP_CMD_E to decode
                                                                 CMD\<4:0\>. */
        uint64_t source                : 7;  /**< [ 50: 44](RO/H) XMC source of request causing error. If [SOURCE]\<6\>==0, then [SOURCE]\<5:0\> is
                                                                 PPID, else [SOURCE]\<3:0\> is BUSID of the IOB which made the request. If
                                                                 [CMD]\<7\>==0, this field is unpredictable. */
        uint64_t reserved_42_43        : 2;
        uint64_t node                  : 2;  /**< [ 41: 40](RO/H) CCPI node of XMC request causing error. For *NXM errors [NODE] is always the node that
                                                                 generated request causing the error (*NXM errors are logged at the home node). For *DISOCI
                                                                 errors, is the NODE the request is directed to (DISOCI request is always the current
                                                                 node). */
        uint64_t addr                  : 40; /**< [ 39:  0](RO/H) XMC address causing the error. [ADDR]\<6:0\> is unpredictable for *DISOCI and *NXM
                                                                 errors. This field is the physical address after index aliasing (if enabled). */
#else /* Word 0 - Little Endian */
        uint64_t addr                  : 40; /**< [ 39:  0](RO/H) XMC address causing the error. [ADDR]\<6:0\> is unpredictable for *DISOCI and *NXM
                                                                 errors. This field is the physical address after index aliasing (if enabled). */
        uint64_t node                  : 2;  /**< [ 41: 40](RO/H) CCPI node of XMC request causing error. For *NXM errors [NODE] is always the node that
                                                                 generated request causing the error (*NXM errors are logged at the home node). For *DISOCI
                                                                 errors, is the NODE the request is directed to (DISOCI request is always the current
                                                                 node). */
        uint64_t reserved_42_43        : 2;
        uint64_t source                : 7;  /**< [ 50: 44](RO/H) XMC source of request causing error. If [SOURCE]\<6\>==0, then [SOURCE]\<5:0\> is
                                                                 PPID, else [SOURCE]\<3:0\> is BUSID of the IOB which made the request. If
                                                                 [CMD]\<7\>==0, this field is unpredictable. */
        uint64_t cmd                   : 8;  /**< [ 58: 51](RO/H) Encoding of XMC or CCPI command causing error.
                                                                 Internal:
                                                                 If CMD\<7\>==1, use XMC_CMD_E to
                                                                 decode CMD\<6:0\>. If CMD\<7:5\>==0, use OCI_MREQ_CMD_E to decode CMD\<4:0\>. If CMD\<7:5\>==1,
                                                                 use OCI_MFWD_CMD_E to decode CMD\<4:0\>. If CMD\<7:5\>==2, use OCI_MRSP_CMD_E to decode
                                                                 CMD\<4:0\>. */
        uint64_t nonsec                : 1;  /**< [ 59: 59](RO/H) Nonsecure (NS) bit of request causing error. */
        uint64_t wrdisoci              : 1;  /**< [ 60: 60](RO/H) Logged information is for a L2C_TAD()_INT_W1C[WRDISOCI] error. */
        uint64_t rddisoci              : 1;  /**< [ 61: 61](RO/H) Logged information is for a L2C_TAD()_INT_W1C[RDDISOCI] error. */
        uint64_t wrnxm                 : 1;  /**< [ 62: 62](RO/H) Logged information is for a L2C_TAD()_INT_W1C[WRNXM] error. */
        uint64_t rdnxm                 : 1;  /**< [ 63: 63](RO/H) Logged information is for a L2C_TAD()_INT_W1C[RDNXM] error. */
#endif /* Word 0 - End */
    } s;
    /* struct bdk_l2c_tadx_err_s cn; */
};
typedef union bdk_l2c_tadx_err bdk_l2c_tadx_err_t;

static inline uint64_t BDK_L2C_TADX_ERR(unsigned long a) __attribute__ ((pure, always_inline));
static inline uint64_t BDK_L2C_TADX_ERR(unsigned long a)
{
    if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a==0))
        return 0x87e050060000ll + 0x1000000ll * ((a) & 0x0);
    if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
        return 0x87e050060000ll + 0x1000000ll * ((a) & 0x3);
    if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=7))
        return 0x87e050060000ll + 0x1000000ll * ((a) & 0x7);
    __bdk_csr_fatal("L2C_TADX_ERR", 1, a, 0, 0, 0);
}

#define typedef_BDK_L2C_TADX_ERR(a) bdk_l2c_tadx_err_t
#define bustype_BDK_L2C_TADX_ERR(a) BDK_CSR_TYPE_RSL
#define basename_BDK_L2C_TADX_ERR(a) "L2C_TADX_ERR"
#define device_bar_BDK_L2C_TADX_ERR(a) 0x0 /* PF_BAR0 */
#define busnum_BDK_L2C_TADX_ERR(a) (a)
#define arguments_BDK_L2C_TADX_ERR(a) (a),-1,-1,-1

/**
 * Register (RSL) l2c_tad#_pfc#
 *
 * L2C TAD Performance Counter Registers
 */
union bdk_l2c_tadx_pfcx
{
    uint64_t u;
    struct bdk_l2c_tadx_pfcx_s
    {
#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
        uint64_t count                 : 64; /**< [ 63:  0](R/W/H) Current counter value. */
#else /* Word 0 - Little Endian */
        uint64_t count                 : 64; /**< [ 63:  0](R/W/H) Current counter value. */
#endif /* Word 0 - End */
    } s;
    /* struct bdk_l2c_tadx_pfcx_s cn; */
};
typedef union bdk_l2c_tadx_pfcx bdk_l2c_tadx_pfcx_t;

static inline uint64_t BDK_L2C_TADX_PFCX(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
static inline uint64_t BDK_L2C_TADX_PFCX(unsigned long a, unsigned long b)
{
    if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a==0) && (b<=3)))
        return 0x87e050010100ll + 0x1000000ll * ((a) & 0x0) + 8ll * ((b) & 0x3);
    if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
        return 0x87e050010100ll + 0x1000000ll * ((a) & 0x3) + 8ll * ((b) & 0x3);
    if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=7) && (b<=3)))
        return 0x87e050010100ll + 0x1000000ll * ((a) & 0x7) + 8ll * ((b) & 0x3);
    __bdk_csr_fatal("L2C_TADX_PFCX", 2, a, b, 0, 0);
}

#define typedef_BDK_L2C_TADX_PFCX(a,b) bdk_l2c_tadx_pfcx_t
#define bustype_BDK_L2C_TADX_PFCX(a,b) BDK_CSR_TYPE_RSL
#define basename_BDK_L2C_TADX_PFCX(a,b) "L2C_TADX_PFCX"
#define device_bar_BDK_L2C_TADX_PFCX(a,b) 0x0 /* PF_BAR0 */
#define busnum_BDK_L2C_TADX_PFCX(a,b) (a)
#define arguments_BDK_L2C_TADX_PFCX(a,b) (a),(b),-1,-1

/**
 * Register (RSL) l2c_tad#_prf
 *
 * L2C TAD Performance Counter Control Registers
 * All four counters are equivalent and can use any of the defined selects.
 */
union bdk_l2c_tadx_prf
{
    uint64_t u;
    struct bdk_l2c_tadx_prf_s
    {
#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
        uint64_t reserved_32_63        : 32;
        uint64_t cnt3sel               : 8;  /**< [ 31: 24](R/W) Selects event to count for L2C_TAD(0)_PFC(3). Enumerated by L2C_TAD_PRF_SEL_E. */
        uint64_t cnt2sel               : 8;  /**< [ 23: 16](R/W) Selects event to count for L2C_TAD(0)_PFC(2). Enumerated by L2C_TAD_PRF_SEL_E. */
        uint64_t cnt1sel               : 8;  /**< [ 15:  8](R/W) Selects event to count for L2C_TAD(0)_PFC(1). Enumerated by L2C_TAD_PRF_SEL_E. */
        uint64_t cnt0sel               : 8;  /**< [  7:  0](R/W) Selects event to count for L2C_TAD(0)_PFC(0). Enumerated by L2C_TAD_PRF_SEL_E. */
#else /* Word 0 - Little Endian */
        uint64_t cnt0sel               : 8;  /**< [  7:  0](R/W) Selects event to count for L2C_TAD(0)_PFC(0). Enumerated by L2C_TAD_PRF_SEL_E. */
        uint64_t cnt1sel               : 8;  /**< [ 15:  8](R/W) Selects event to count for L2C_TAD(0)_PFC(1). Enumerated by L2C_TAD_PRF_SEL_E. */
        uint64_t cnt2sel               : 8;  /**< [ 23: 16](R/W) Selects event to count for L2C_TAD(0)_PFC(2). Enumerated by L2C_TAD_PRF_SEL_E. */
        uint64_t cnt3sel               : 8;  /**< [ 31: 24](R/W) Selects event to count for L2C_TAD(0)_PFC(3). Enumerated by L2C_TAD_PRF_SEL_E. */
        uint64_t reserved_32_63        : 32;
#endif /* Word 0 - End */
    } s;
    /* struct bdk_l2c_tadx_prf_s cn81xx; */
    struct bdk_l2c_tadx_prf_cn88xx
    {
#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
        uint64_t reserved_32_63        : 32;
        uint64_t cnt3sel               : 8;  /**< [ 31: 24](R/W) Selects event to count for L2C_TAD(0..7)_PFC(3). Enumerated by L2C_TAD_PRF_SEL_E. */
        uint64_t cnt2sel               : 8;  /**< [ 23: 16](R/W) Selects event to count for L2C_TAD(0..7)_PFC(2). Enumerated by L2C_TAD_PRF_SEL_E. */
        uint64_t cnt1sel               : 8;  /**< [ 15:  8](R/W) Selects event to count for L2C_TAD(0..7)_PFC(1). Enumerated by L2C_TAD_PRF_SEL_E. */
        uint64_t cnt0sel               : 8;  /**< [  7:  0](R/W) Selects event to count for L2C_TAD(0..7)_PFC(0). Enumerated by L2C_TAD_PRF_SEL_E. */
#else /* Word 0 - Little Endian */
        uint64_t cnt0sel               : 8;  /**< [  7:  0](R/W) Selects event to count for L2C_TAD(0..7)_PFC(0). Enumerated by L2C_TAD_PRF_SEL_E. */
        uint64_t cnt1sel               : 8;  /**< [ 15:  8](R/W) Selects event to count for L2C_TAD(0..7)_PFC(1). Enumerated by L2C_TAD_PRF_SEL_E. */
        uint64_t cnt2sel               : 8;  /**< [ 23: 16](R/W) Selects event to count for L2C_TAD(0..7)_PFC(2). Enumerated by L2C_TAD_PRF_SEL_E. */
        uint64_t cnt3sel               : 8;  /**< [ 31: 24](R/W) Selects event to count for L2C_TAD(0..7)_PFC(3). Enumerated by L2C_TAD_PRF_SEL_E. */
        uint64_t reserved_32_63        : 32;
#endif /* Word 0 - End */
    } cn88xx;
    struct bdk_l2c_tadx_prf_cn83xx
    {
#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
        uint64_t reserved_32_63        : 32;
        uint64_t cnt3sel               : 8;  /**< [ 31: 24](R/W) Selects event to count for L2C_TAD(0..3)_PFC(3). Enumerated by L2C_TAD_PRF_SEL_E. */
        uint64_t cnt2sel               : 8;  /**< [ 23: 16](R/W) Selects event to count for L2C_TAD(0..3)_PFC(2). Enumerated by L2C_TAD_PRF_SEL_E. */
        uint64_t cnt1sel               : 8;  /**< [ 15:  8](R/W) Selects event to count for L2C_TAD(0..3)_PFC(1). Enumerated by L2C_TAD_PRF_SEL_E. */
        uint64_t cnt0sel               : 8;  /**< [  7:  0](R/W) Selects event to count for L2C_TAD(0..3)_PFC(0). Enumerated by L2C_TAD_PRF_SEL_E. */
#else /* Word 0 - Little Endian */
        uint64_t cnt0sel               : 8;  /**< [  7:  0](R/W) Selects event to count for L2C_TAD(0..3)_PFC(0). Enumerated by L2C_TAD_PRF_SEL_E. */
        uint64_t cnt1sel               : 8;  /**< [ 15:  8](R/W) Selects event to count for L2C_TAD(0..3)_PFC(1). Enumerated by L2C_TAD_PRF_SEL_E. */
        uint64_t cnt2sel               : 8;  /**< [ 23: 16](R/W) Selects event to count for L2C_TAD(0..3)_PFC(2). Enumerated by L2C_TAD_PRF_SEL_E. */
        uint64_t cnt3sel               : 8;  /**< [ 31: 24](R/W) Selects event to count for L2C_TAD(0..3)_PFC(3). Enumerated by L2C_TAD_PRF_SEL_E. */
        uint64_t reserved_32_63        : 32;
#endif /* Word 0 - End */
    } cn83xx;
};
typedef union bdk_l2c_tadx_prf bdk_l2c_tadx_prf_t;

static inline uint64_t BDK_L2C_TADX_PRF(unsigned long a) __attribute__ ((pure, always_inline));
static inline uint64_t BDK_L2C_TADX_PRF(unsigned long a)
{
    if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a==0))
        return 0x87e050010000ll + 0x1000000ll * ((a) & 0x0);
    if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
        return 0x87e050010000ll + 0x1000000ll * ((a) & 0x3);
    if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=7))
        return 0x87e050010000ll + 0x1000000ll * ((a) & 0x7);
    __bdk_csr_fatal("L2C_TADX_PRF", 1, a, 0, 0, 0);
}

#define typedef_BDK_L2C_TADX_PRF(a) bdk_l2c_tadx_prf_t
#define bustype_BDK_L2C_TADX_PRF(a) BDK_CSR_TYPE_RSL
#define basename_BDK_L2C_TADX_PRF(a) "L2C_TADX_PRF"
#define device_bar_BDK_L2C_TADX_PRF(a) 0x0 /* PF_BAR0 */
#define busnum_BDK_L2C_TADX_PRF(a) (a)
#define arguments_BDK_L2C_TADX_PRF(a) (a),-1,-1,-1

/**
 * Register (RSL) l2c_tad#_stat
 *
 * L2C TAD Status Registers
 * This register holds information about the instantaneous state of the TAD.
 */
union bdk_l2c_tadx_stat
{
    uint64_t u;
    struct bdk_l2c_tadx_stat_s
    {
#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
        uint64_t reserved_14_63        : 50;
        uint64_t lfb_valid_cnt         : 6;  /**< [ 13:  8](RO/H) The number of LFBs in use. */
        uint64_t reserved_5_7          : 3;
        uint64_t vbf_inuse_cnt         : 5;  /**< [  4:  0](RO/H) The number of MCI VBFs in use. */
#else /* Word 0 - Little Endian */
        uint64_t vbf_inuse_cnt         : 5;  /**< [  4:  0](RO/H) The number of MCI VBFs in use. */
        uint64_t reserved_5_7          : 3;
        uint64_t lfb_valid_cnt         : 6;  /**< [ 13:  8](RO/H) The number of LFBs in use. */
        uint64_t reserved_14_63        : 50;
#endif /* Word 0 - End */
    } s;
    /* struct bdk_l2c_tadx_stat_s cn; */
};
typedef union bdk_l2c_tadx_stat bdk_l2c_tadx_stat_t;

static inline uint64_t BDK_L2C_TADX_STAT(unsigned long a) __attribute__ ((pure, always_inline));
static inline uint64_t BDK_L2C_TADX_STAT(unsigned long a)
{
    if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a==0))
        return 0x87e050020008ll + 0x1000000ll * ((a) & 0x0);
    if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
        return 0x87e050020008ll + 0x1000000ll * ((a) & 0x3);
    if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=7))
        return 0x87e050020008ll + 0x1000000ll * ((a) & 0x7);
    __bdk_csr_fatal("L2C_TADX_STAT", 1, a, 0, 0, 0);
}

#define typedef_BDK_L2C_TADX_STAT(a) bdk_l2c_tadx_stat_t
#define bustype_BDK_L2C_TADX_STAT(a) BDK_CSR_TYPE_RSL
#define basename_BDK_L2C_TADX_STAT(a) "L2C_TADX_STAT"
#define device_bar_BDK_L2C_TADX_STAT(a) 0x0 /* PF_BAR0 */
#define busnum_BDK_L2C_TADX_STAT(a) (a)
#define arguments_BDK_L2C_TADX_STAT(a) (a),-1,-1,-1

/**
 * Register (RSL) l2c_tad#_tag
 *
 * L2C TAD Tag Data Registers
 * This register holds the tag information for LTGL2I and STGL2I commands.
 */
union bdk_l2c_tadx_tag
{
    uint64_t u;
    struct bdk_l2c_tadx_tag_s
    {
#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
        uint64_t sblkdty               : 4;  /**< [ 63: 60](R/W/H) Sub-block dirty bits. Ignored/loaded with 0 for RTG accesses. If [TS] is invalid
                                                                 (0), [SBLKDTY] must be 0 or operation is undefined. */
        uint64_t reserved_59           : 1;
        uint64_t nonsec                : 1;  /**< [ 58: 58](R/W/H) Nonsecure bit. */
        uint64_t businfo               : 9;  /**< [ 57: 49](R/W/H) The bus information bits. Ignored/loaded with 0 for RTG accesses. */
        uint64_t ecc                   : 7;  /**< [ 48: 42](R/W/H) The tag ECC. This field is undefined if L2C_CTL[DISECC] is not 1 when the LTGL2I reads the tags. */
        uint64_t reserved_6_41         : 36;
        uint64_t node                  : 2;  /**< [  5:  4](RAZ) Reserved. */
        uint64_t ts                    : 2;  /**< [  3:  2](R/W/H) The tag state.
                                                                 0x0 = Invalid.
                                                                 0x1 = Shared.
                                                                 0x2 = Exclusive.

                                                                 Note that a local address will never have the value of exclusive as that state
                                                                 is encoded as shared in the tag and invalid in the RTG. */
        uint64_t used                  : 1;  /**< [  1:  1](R/W/H) The LRU use bit. If setting the [LOCK] bit, the USE bit should also be set or
                                                                 the operation is undefined. Ignored/loaded with 0 for RTG accesses. */
        uint64_t lock                  : 1;  /**< [  0:  0](R/W/H) The lock bit. If setting the [LOCK] bit, the USE bit should also be set or the
                                                                 operation is undefined. Ignored/loaded with 0 for RTG accesses. */
#else /* Word 0 - Little Endian */
        uint64_t lock                  : 1;  /**< [  0:  0](R/W/H) The lock bit. If setting the [LOCK] bit, the USE bit should also be set or the
                                                                 operation is undefined. Ignored/loaded with 0 for RTG accesses. */
        uint64_t used                  : 1;  /**< [  1:  1](R/W/H) The LRU use bit. If setting the [LOCK] bit, the USE bit should also be set or
                                                                 the operation is undefined. Ignored/loaded with 0 for RTG accesses. */
        uint64_t ts                    : 2;  /**< [  3:  2](R/W/H) The tag state.
                                                                 0x0 = Invalid.
                                                                 0x1 = Shared.
                                                                 0x2 = Exclusive.

                                                                 Note that a local address will never have the value of exclusive as that state
                                                                 is encoded as shared in the tag and invalid in the RTG. */
        uint64_t node                  : 2;  /**< [  5:  4](RAZ) Reserved. */
        uint64_t reserved_6_41         : 36;
        uint64_t ecc                   : 7;  /**< [ 48: 42](R/W/H) The tag ECC. This field is undefined if L2C_CTL[DISECC] is not 1 when the LTGL2I reads the tags. */
        uint64_t businfo               : 9;  /**< [ 57: 49](R/W/H) The bus information bits. Ignored/loaded with 0 for RTG accesses. */
        uint64_t nonsec                : 1;  /**< [ 58: 58](R/W/H) Nonsecure bit. */
        uint64_t reserved_59           : 1;
        uint64_t sblkdty               : 4;  /**< [ 63: 60](R/W/H) Sub-block dirty bits. Ignored/loaded with 0 for RTG accesses. If [TS] is invalid
                                                                 (0), [SBLKDTY] must be 0 or operation is undefined. */
#endif /* Word 0 - End */
    } s;
    struct bdk_l2c_tadx_tag_cn81xx
    {
#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
        uint64_t sblkdty               : 4;  /**< [ 63: 60](R/W/H) Sub-block dirty bits. Ignored/loaded with 0 for RTG accesses. If [TS] is invalid
                                                                 (0), [SBLKDTY] must be 0 or operation is undefined. */
        uint64_t reserved_59           : 1;
        uint64_t nonsec                : 1;  /**< [ 58: 58](R/W/H) Nonsecure bit. */
        uint64_t reserved_57           : 1;
        uint64_t businfo               : 8;  /**< [ 56: 49](R/W/H) The bus information bits. Ignored/loaded with 0 for RTG accesses. */
        uint64_t ecc                   : 7;  /**< [ 48: 42](R/W/H) The tag ECC. This field is undefined if L2C_CTL[DISECC] is not 1 when the LTGL2I reads the tags. */
        uint64_t reserved_40_41        : 2;
        uint64_t tag                   : 23; /**< [ 39: 17](R/W/H) The tag. TAG\<39:17\> is the corresponding bits from the L2C+LMC internal L2/DRAM byte
                                                                 address. */
        uint64_t reserved_6_16         : 11;
        uint64_t node                  : 2;  /**< [  5:  4](RAZ) Reserved. */
        uint64_t ts                    : 2;  /**< [  3:  2](R/W/H) The tag state.
                                                                 0x0 = Invalid.
                                                                 0x1 = Shared.
                                                                 0x2 = Exclusive.

                                                                 Note that a local address will never have the value of exclusive as that state
                                                                 is encoded as shared in the tag and invalid in the RTG. */
        uint64_t used                  : 1;  /**< [  1:  1](R/W/H) The LRU use bit. If setting the [LOCK] bit, the USE bit should also be set or
                                                                 the operation is undefined. Ignored/loaded with 0 for RTG accesses. */
        uint64_t lock                  : 1;  /**< [  0:  0](R/W/H) The lock bit. If setting the [LOCK] bit, the USE bit should also be set or the
                                                                 operation is undefined. Ignored/loaded with 0 for RTG accesses. */
#else /* Word 0 - Little Endian */
        uint64_t lock                  : 1;  /**< [  0:  0](R/W/H) The lock bit. If setting the [LOCK] bit, the USE bit should also be set or the
                                                                 operation is undefined. Ignored/loaded with 0 for RTG accesses. */
        uint64_t used                  : 1;  /**< [  1:  1](R/W/H) The LRU use bit. If setting the [LOCK] bit, the USE bit should also be set or
                                                                 the operation is undefined. Ignored/loaded with 0 for RTG accesses. */
        uint64_t ts                    : 2;  /**< [  3:  2](R/W/H) The tag state.
                                                                 0x0 = Invalid.
                                                                 0x1 = Shared.
                                                                 0x2 = Exclusive.

                                                                 Note that a local address will never have the value of exclusive as that state
                                                                 is encoded as shared in the tag and invalid in the RTG. */
        uint64_t node                  : 2;  /**< [  5:  4](RAZ) Reserved. */
        uint64_t reserved_6_16         : 11;
        uint64_t tag                   : 23; /**< [ 39: 17](R/W/H) The tag. TAG\<39:17\> is the corresponding bits from the L2C+LMC internal L2/DRAM byte
                                                                 address. */
        uint64_t reserved_40_41        : 2;
        uint64_t ecc                   : 7;  /**< [ 48: 42](R/W/H) The tag ECC. This field is undefined if L2C_CTL[DISECC] is not 1 when the LTGL2I reads the tags. */
        uint64_t businfo               : 8;  /**< [ 56: 49](R/W/H) The bus information bits. Ignored/loaded with 0 for RTG accesses. */
        uint64_t reserved_57           : 1;
        uint64_t nonsec                : 1;  /**< [ 58: 58](R/W/H) Nonsecure bit. */
        uint64_t reserved_59           : 1;
        uint64_t sblkdty               : 4;  /**< [ 63: 60](R/W/H) Sub-block dirty bits. Ignored/loaded with 0 for RTG accesses. If [TS] is invalid
                                                                 (0), [SBLKDTY] must be 0 or operation is undefined. */
#endif /* Word 0 - End */
    } cn81xx;
    struct bdk_l2c_tadx_tag_cn88xx
    {
#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
        uint64_t sblkdty               : 4;  /**< [ 63: 60](R/W/H) Sub-block dirty bits. Ignored/loaded with 0 for RTG accesses. If [TS] is invalid
                                                                 (0), [SBLKDTY] must be 0 or operation is undefined. */
        uint64_t reserved_59           : 1;
        uint64_t nonsec                : 1;  /**< [ 58: 58](R/W/H) Nonsecure bit. */
        uint64_t businfo               : 9;  /**< [ 57: 49](R/W/H) The bus information bits. Ignored/loaded with 0 for RTG accesses. */
        uint64_t ecc                   : 7;  /**< [ 48: 42](R/W/H) The tag ECC. This field is undefined if L2C_CTL[DISECC] is not 1 when the LTGL2I reads the tags. */
        uint64_t tag                   : 22; /**< [ 41: 20](R/W/H) The tag. TAG\<39:20\> is the corresponding bits from the L2C+LMC internal L2/DRAM byte
                                                                 address. TAG\<41:40\> is the CCPI node of the address. The RTG must always have the
                                                                 TAG\<41:40\> equal to the current node or operation is undefined. */
        uint64_t reserved_6_19         : 14;
        uint64_t node                  : 2;  /**< [  5:  4](R/W/H) The node ID for the remote node which holds this block. Ignored/loaded with 0 for TAG accesses. */
        uint64_t ts                    : 2;  /**< [  3:  2](R/W/H) The tag state.
                                                                 0x0 = Invalid.
                                                                 0x1 = Shared.
                                                                 0x2 = Exclusive.

                                                                 Note that a local address will never have the value of exclusive as that state
                                                                 is encoded as shared in the tag and invalid in the RTG. */
        uint64_t used                  : 1;  /**< [  1:  1](R/W/H) The LRU use bit. If setting the [LOCK] bit, the USE bit should also be set or
                                                                 the operation is undefined. Ignored/loaded with 0 for RTG accesses. */
        uint64_t lock                  : 1;  /**< [  0:  0](R/W/H) The lock bit. If setting the [LOCK] bit, the USE bit should also be set or the
                                                                 operation is undefined. Ignored/loaded with 0 for RTG accesses. */
#else /* Word 0 - Little Endian */
        uint64_t lock                  : 1;  /**< [  0:  0](R/W/H) The lock bit. If setting the [LOCK] bit, the USE bit should also be set or the
                                                                 operation is undefined. Ignored/loaded with 0 for RTG accesses. */
        uint64_t used                  : 1;  /**< [  1:  1](R/W/H) The LRU use bit. If setting the [LOCK] bit, the USE bit should also be set or
                                                                 the operation is undefined. Ignored/loaded with 0 for RTG accesses. */
        uint64_t ts                    : 2;  /**< [  3:  2](R/W/H) The tag state.
                                                                 0x0 = Invalid.
                                                                 0x1 = Shared.
                                                                 0x2 = Exclusive.

                                                                 Note that a local address will never have the value of exclusive as that state
                                                                 is encoded as shared in the tag and invalid in the RTG. */
        uint64_t node                  : 2;  /**< [  5:  4](R/W/H) The node ID for the remote node which holds this block. Ignored/loaded with 0 for TAG accesses. */
        uint64_t reserved_6_19         : 14;
        uint64_t tag                   : 22; /**< [ 41: 20](R/W/H) The tag. TAG\<39:20\> is the corresponding bits from the L2C+LMC internal L2/DRAM byte
                                                                 address. TAG\<41:40\> is the CCPI node of the address. The RTG must always have the
                                                                 TAG\<41:40\> equal to the current node or operation is undefined. */
        uint64_t ecc                   : 7;  /**< [ 48: 42](R/W/H) The tag ECC. This field is undefined if L2C_CTL[DISECC] is not 1 when the LTGL2I reads the tags. */
        uint64_t businfo               : 9;  /**< [ 57: 49](R/W/H) The bus information bits. Ignored/loaded with 0 for RTG accesses. */
        uint64_t nonsec                : 1;  /**< [ 58: 58](R/W/H) Nonsecure bit. */
        uint64_t reserved_59           : 1;
        uint64_t sblkdty               : 4;  /**< [ 63: 60](R/W/H) Sub-block dirty bits. Ignored/loaded with 0 for RTG accesses. If [TS] is invalid
                                                                 (0), [SBLKDTY] must be 0 or operation is undefined. */
#endif /* Word 0 - End */
    } cn88xx;
    struct bdk_l2c_tadx_tag_cn83xx
    {
#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
        uint64_t sblkdty               : 4;  /**< [ 63: 60](R/W/H) Sub-block dirty bits. Ignored/loaded with 0 for RTG accesses. If [TS] is invalid
                                                                 (0), [SBLKDTY] must be 0 or operation is undefined. */
        uint64_t reserved_59           : 1;
        uint64_t nonsec                : 1;  /**< [ 58: 58](R/W/H) Nonsecure bit. */
        uint64_t businfo               : 9;  /**< [ 57: 49](R/W/H) The bus information bits. Ignored/loaded with 0 for RTG accesses. */
        uint64_t ecc                   : 7;  /**< [ 48: 42](R/W/H) The tag ECC. This field is undefined if L2C_CTL[DISECC] is not 1 when the LTGL2I reads the tags. */
        uint64_t reserved_40_41        : 2;
        uint64_t tag                   : 22; /**< [ 39: 18](R/W/H) The tag. TAG\<39:18\> is the corresponding bits from the L2C+LMC internal L2/DRAM byte
                                                                 address. */
        uint64_t reserved_6_17         : 12;
        uint64_t node                  : 2;  /**< [  5:  4](RAZ) Reserved. */
        uint64_t ts                    : 2;  /**< [  3:  2](R/W/H) The tag state.
                                                                 0x0 = Invalid.
                                                                 0x1 = Shared.
                                                                 0x2 = Exclusive.

                                                                 Note that a local address will never have the value of exclusive as that state
                                                                 is encoded as shared in the tag and invalid in the RTG. */
        uint64_t used                  : 1;  /**< [  1:  1](R/W/H) The LRU use bit. If setting the [LOCK] bit, the USE bit should also be set or
                                                                 the operation is undefined. Ignored/loaded with 0 for RTG accesses. */
        uint64_t lock                  : 1;  /**< [  0:  0](R/W/H) The lock bit. If setting the [LOCK] bit, the USE bit should also be set or the
                                                                 operation is undefined. Ignored/loaded with 0 for RTG accesses. */
#else /* Word 0 - Little Endian */
        uint64_t lock                  : 1;  /**< [  0:  0](R/W/H) The lock bit. If setting the [LOCK] bit, the USE bit should also be set or the
                                                                 operation is undefined. Ignored/loaded with 0 for RTG accesses. */
        uint64_t used                  : 1;  /**< [  1:  1](R/W/H) The LRU use bit. If setting the [LOCK] bit, the USE bit should also be set or
                                                                 the operation is undefined. Ignored/loaded with 0 for RTG accesses. */
        uint64_t ts                    : 2;  /**< [  3:  2](R/W/H) The tag state.
                                                                 0x0 = Invalid.
                                                                 0x1 = Shared.
                                                                 0x2 = Exclusive.

                                                                 Note that a local address will never have the value of exclusive as that state
                                                                 is encoded as shared in the tag and invalid in the RTG. */
        uint64_t node                  : 2;  /**< [  5:  4](RAZ) Reserved. */
        uint64_t reserved_6_17         : 12;
        uint64_t tag                   : 22; /**< [ 39: 18](R/W/H) The tag. TAG\<39:18\> is the corresponding bits from the L2C+LMC internal L2/DRAM byte
                                                                 address. */
        uint64_t reserved_40_41        : 2;
        uint64_t ecc                   : 7;  /**< [ 48: 42](R/W/H) The tag ECC. This field is undefined if L2C_CTL[DISECC] is not 1 when the LTGL2I reads the tags. */
        uint64_t businfo               : 9;  /**< [ 57: 49](R/W/H) The bus information bits. Ignored/loaded with 0 for RTG accesses. */
        uint64_t nonsec                : 1;  /**< [ 58: 58](R/W/H) Nonsecure bit. */
        uint64_t reserved_59           : 1;
        uint64_t sblkdty               : 4;  /**< [ 63: 60](R/W/H) Sub-block dirty bits. Ignored/loaded with 0 for RTG accesses. If [TS] is invalid
                                                                 (0), [SBLKDTY] must be 0 or operation is undefined. */
#endif /* Word 0 - End */
    } cn83xx;
};
typedef union bdk_l2c_tadx_tag bdk_l2c_tadx_tag_t;

static inline uint64_t BDK_L2C_TADX_TAG(unsigned long a) __attribute__ ((pure, always_inline));
static inline uint64_t BDK_L2C_TADX_TAG(unsigned long a)
{
    if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a==0))
        return 0x87e050020000ll + 0x1000000ll * ((a) & 0x0);
    if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
        return 0x87e050020000ll + 0x1000000ll * ((a) & 0x3);
    if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=7))
        return 0x87e050020000ll + 0x1000000ll * ((a) & 0x7);
    __bdk_csr_fatal("L2C_TADX_TAG", 1, a, 0, 0, 0);
}

#define typedef_BDK_L2C_TADX_TAG(a) bdk_l2c_tadx_tag_t
#define bustype_BDK_L2C_TADX_TAG(a) BDK_CSR_TYPE_RSL
#define basename_BDK_L2C_TADX_TAG(a) "L2C_TADX_TAG"
#define device_bar_BDK_L2C_TADX_TAG(a) 0x0 /* PF_BAR0 */
#define busnum_BDK_L2C_TADX_TAG(a) (a)
#define arguments_BDK_L2C_TADX_TAG(a) (a),-1,-1,-1

/**
 * Register (RSL) l2c_tad#_timeout
 *
 * L2C TAD LFB Timeout Info Registers
 * This register records error information for an LFBTO (LFB TimeOut). The first LFBTO error will
 * lock the register until the logged error type s cleared. If multiple LFBs timed out
 * simultaneously, then this will contain the information from the lowest LFB number that has
 * timed-out. The address can be for the original transaction address or the replacement address
 * (if both could have timed out, then the transaction address will be here).
 */
union bdk_l2c_tadx_timeout
{
    uint64_t u;
    struct bdk_l2c_tadx_timeout_s
    {
#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
        uint64_t infolfb               : 1;  /**< [ 63: 63](RO/H) Logged address information is for the LFB original transation. */
        uint64_t infovab               : 1;  /**< [ 62: 62](RO/H) Logged address information is for the VAB (replacement). If both this and
                                                                 [INFOLFB] is set, then both could have timed out, but info captured is from the
                                                                 original LFB. */
        uint64_t reserved_57_61        : 5;
        uint64_t lfbnum                : 5;  /**< [ 56: 52](RO/H) The LFB number of the entry that timed out, and have its info captures in this register. */
        uint64_t cmd                   : 8;  /**< [ 51: 44](RO/H) Encoding of XMC or CCPI command causing error.
                                                                 Internal:
                                                                 If CMD\<7\>==1, use XMC_CMD_E to decode CMD\<6:0\>. If CMD\<7:5\>==0, use
                                                                 OCI_MREQ_CMD_E to
                                                                 decode CMD\<4:0\>. If CMD\<7:5\>==1, use OCI_MFWD_CMD_E to decode CMD\<4:0\>. If CMD\<7:5\>==2,
                                                                 use OCI_MRSP_CMD_E to decode CMD\<4:0\>. */
        uint64_t reserved_42_43        : 2;
        uint64_t node                  : 2;  /**< [ 41: 40](RO/H) Home node of the address causing the error. Similar to [ADDR] below, this can be the
                                                                 request address (if [INFOLFB] is set), else it is the replacement address (if [INFOLFB] is
                                                                 clear & [INFOVAB] is set). */
        uint64_t addr                  : 33; /**< [ 39:  7](RO/H) Cache line address causing the error. This can be either the request address or
                                                                 the replacement (if [INFOLFB] is set), else it is the replacement address (if
                                                                 [INFOLFB] is clear & [INFOVAB] is set). This address is a physical address. L2C
                                                                 performs index aliasing (if enabled) on the written address and uses that for
                                                                 the command. This index-aliased address is what is returned on a read of
                                                                 L2C_XMC_CMD. */
        uint64_t reserved_0_6          : 7;
#else /* Word 0 - Little Endian */
        uint64_t reserved_0_6          : 7;
        uint64_t addr                  : 33; /**< [ 39:  7](RO/H) Cache line address causing the error. This can be either the request address or
                                                                 the replacement (if [INFOLFB] is set), else it is the replacement address (if
                                                                 [INFOLFB] is clear & [INFOVAB] is set). This address is a physical address. L2C
                                                                 performs index aliasing (if enabled) on the written address and uses that for
                                                                 the command. This index-aliased address is what is returned on a read of
                                                                 L2C_XMC_CMD. */
        uint64_t node                  : 2;  /**< [ 41: 40](RO/H) Home node of the address causing the error. Similar to [ADDR] below, this can be the
                                                                 request address (if [INFOLFB] is set), else it is the replacement address (if [INFOLFB] is
                                                                 clear & [INFOVAB] is set). */
        uint64_t reserved_42_43        : 2;
        uint64_t cmd                   : 8;  /**< [ 51: 44](RO/H) Encoding of XMC or CCPI command causing error.
                                                                 Internal:
                                                                 If CMD\<7\>==1, use XMC_CMD_E to decode CMD\<6:0\>. If CMD\<7:5\>==0, use
                                                                 OCI_MREQ_CMD_E to
                                                                 decode CMD\<4:0\>. If CMD\<7:5\>==1, use OCI_MFWD_CMD_E to decode CMD\<4:0\>. If CMD\<7:5\>==2,
                                                                 use OCI_MRSP_CMD_E to decode CMD\<4:0\>. */
        uint64_t lfbnum                : 5;  /**< [ 56: 52](RO/H) The LFB number of the entry that timed out, and have its info captures in this register. */
        uint64_t reserved_57_61        : 5;
        uint64_t infovab               : 1;  /**< [ 62: 62](RO/H) Logged address information is for the VAB (replacement). If both this and
                                                                 [INFOLFB] is set, then both could have timed out, but info captured is from the
                                                                 original LFB. */
        uint64_t infolfb               : 1;  /**< [ 63: 63](RO/H) Logged address information is for the LFB original transation. */
#endif /* Word 0 - End */
    } s;
    /* struct bdk_l2c_tadx_timeout_s cn; */
};
typedef union bdk_l2c_tadx_timeout bdk_l2c_tadx_timeout_t;

static inline uint64_t BDK_L2C_TADX_TIMEOUT(unsigned long a) __attribute__ ((pure, always_inline));
static inline uint64_t BDK_L2C_TADX_TIMEOUT(unsigned long a)
{
    if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a==0))
        return 0x87e050050100ll + 0x1000000ll * ((a) & 0x0);
    if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
        return 0x87e050050100ll + 0x1000000ll * ((a) & 0x3);
    if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=7))
        return 0x87e050050100ll + 0x1000000ll * ((a) & 0x7);
    __bdk_csr_fatal("L2C_TADX_TIMEOUT", 1, a, 0, 0, 0);
}

#define typedef_BDK_L2C_TADX_TIMEOUT(a) bdk_l2c_tadx_timeout_t
#define bustype_BDK_L2C_TADX_TIMEOUT(a) BDK_CSR_TYPE_RSL
#define basename_BDK_L2C_TADX_TIMEOUT(a) "L2C_TADX_TIMEOUT"
#define device_bar_BDK_L2C_TADX_TIMEOUT(a) 0x0 /* PF_BAR0 */
#define busnum_BDK_L2C_TADX_TIMEOUT(a) (a)
#define arguments_BDK_L2C_TADX_TIMEOUT(a) (a),-1,-1,-1

/**
 * Register (RSL) l2c_tad#_timetwo
 *
 * L2C TAD LFB Timeout Count Registers
 * This register records the number of LFB entries that have timed out.
 */
union bdk_l2c_tadx_timetwo
{
    uint64_t u;
    struct bdk_l2c_tadx_timetwo_s
    {
#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
        uint64_t reserved_33_63        : 31;
        uint64_t sid                   : 4;  /**< [ 32: 29](RO/H) Source id of the original request, that is 'source' of request. This is only valid if the
                                                                 request is a local request (valid if L2C_TAD()_TIMEOUT[CMD] is an XMC request and not
                                                                 relevant if it is an CCPI request). */
        uint64_t busid                 : 4;  /**< [ 28: 25](RO/H) Busid of the original request, that is 'source' of request. */
        uint64_t vabst                 : 3;  /**< [ 24: 22](RO/H) This is the LFB internal state if INFOLFB is set, else will contain VAB internal state if
                                                                 INFOVAB is set. */
        uint64_t lfbst                 : 14; /**< [ 21:  8](RO/H) This is the LFB internal state if INFOLFB is set, else will contain VAB internal state if
                                                                 INFOVAB is set. */
        uint64_t tocnt                 : 8;  /**< [  7:  0](RO/H) This is a running count of the LFB that has timed out ... the count will saturate at 0xFF.
                                                                 Will clear when the LFBTO interrupt is cleared. */
#else /* Word 0 - Little Endian */
        uint64_t tocnt                 : 8;  /**< [  7:  0](RO/H) This is a running count of the LFB that has timed out ... the count will saturate at 0xFF.
                                                                 Will clear when the LFBTO interrupt is cleared. */
        uint64_t lfbst                 : 14; /**< [ 21:  8](RO/H) This is the LFB internal state if INFOLFB is set, else will contain VAB internal state if
                                                                 INFOVAB is set. */
        uint64_t vabst                 : 3;  /**< [ 24: 22](RO/H) This is the LFB internal state if INFOLFB is set, else will contain VAB internal state if
                                                                 INFOVAB is set. */
        uint64_t busid                 : 4;  /**< [ 28: 25](RO/H) Busid of the original request, that is 'source' of request. */
        uint64_t sid                   : 4;  /**< [ 32: 29](RO/H) Source id of the original request, that is 'source' of request. This is only valid if the
                                                                 request is a local request (valid if L2C_TAD()_TIMEOUT[CMD] is an XMC request and not
                                                                 relevant if it is an CCPI request). */
        uint64_t reserved_33_63        : 31;
#endif /* Word 0 - End */
    } s;
    /* struct bdk_l2c_tadx_timetwo_s cn; */
};
typedef union bdk_l2c_tadx_timetwo bdk_l2c_tadx_timetwo_t;

static inline uint64_t BDK_L2C_TADX_TIMETWO(unsigned long a) __attribute__ ((pure, always_inline));
static inline uint64_t BDK_L2C_TADX_TIMETWO(unsigned long a)
{
    if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a==0))
        return 0x87e050050000ll + 0x1000000ll * ((a) & 0x0);
    if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
        return 0x87e050050000ll + 0x1000000ll * ((a) & 0x3);
    if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=7))
        return 0x87e050050000ll + 0x1000000ll * ((a) & 0x7);
    __bdk_csr_fatal("L2C_TADX_TIMETWO", 1, a, 0, 0, 0);
}

#define typedef_BDK_L2C_TADX_TIMETWO(a) bdk_l2c_tadx_timetwo_t
#define bustype_BDK_L2C_TADX_TIMETWO(a) BDK_CSR_TYPE_RSL
#define basename_BDK_L2C_TADX_TIMETWO(a) "L2C_TADX_TIMETWO"
#define device_bar_BDK_L2C_TADX_TIMETWO(a) 0x0 /* PF_BAR0 */
#define busnum_BDK_L2C_TADX_TIMETWO(a) (a)
#define arguments_BDK_L2C_TADX_TIMETWO(a) (a),-1,-1,-1

/**
 * Register (RSL) l2c_tad_ctl
 *
 * L2C TAD Control Register
 * In CNXXXX, [MAXLFB], EXLRQ, EXRRQ, EXFWD, EXVIC refer to half-TAD
 * LFBs/VABs. Therefore, even though there are 32 LFBs/VABs in a full TAD, the number
 * applies to both halves.
 * * If [MAXLFB] is != 0, [VBF_THRESH] should be less than [MAXLFB].
 * * If [MAXVBF] is != 0, [VBF_THRESH] should be less than [MAXVBF].
 * * If [MAXLFB] != 0, EXLRQ + EXRRQ + EXFWD + EXVIC must be less than or equal to [MAXLFB] - 4.
 * * If [MAXLFB] == 0, EXLRQ + EXRRQ + EXFWD + EXVIC must be less than or equal to 12.
 */
union bdk_l2c_tad_ctl
{
    uint64_t u;
    struct bdk_l2c_tad_ctl_s
    {
#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
        uint64_t reserved_33_63        : 31;
        uint64_t frcnalc               : 1;  /**< [ 32: 32](R/W) When set, all cache accesses are forced to not allocate in the local L2. */
        uint64_t disrstp               : 1;  /**< [ 31: 31](RO) Reserved. */
        uint64_t wtlmcwrdn             : 1;  /**< [ 30: 30](R/W) Be more conservative with LFB done relative to LMC writes. */
        uint64_t wtinvdn               : 1;  /**< [ 29: 29](R/W) Be more conservative with LFB done relative to invalidates. */
        uint64_t wtfilldn              : 1;  /**< [ 28: 28](R/W) Be more conservative with LFB done relative to fills. */
        uint64_t exlrq                 : 4;  /**< [ 27: 24](RO) Reserved. */
        uint64_t exrrq                 : 4;  /**< [ 23: 20](RO) Reserved. */
        uint64_t exfwd                 : 4;  /**< [ 19: 16](RO) Reserved. */
        uint64_t exvic                 : 4;  /**< [ 15: 12](RO) Reserved. */
        uint64_t vbf_thresh            : 4;  /**< [ 11:  8](R/W) VBF threshold. When the number of in-use VBFs exceeds this number the L2C TAD increases
                                                                 the priority of all its write operations in the LMC. */
        uint64_t maxvbf                : 4;  /**< [  7:  4](R/W) Maximum VBFs in use at once (0 means 16, 1-15 as expected). */
        uint64_t maxlfb                : 4;  /**< [  3:  0](R/W) Maximum VABs/LFBs in use at once (0 means 16, 1-15 as expected). */
#else /* Word 0 - Little Endian */
        uint64_t maxlfb                : 4;  /**< [  3:  0](R/W) Maximum VABs/LFBs in use at once (0 means 16, 1-15 as expected). */
        uint64_t maxvbf                : 4;  /**< [  7:  4](R/W) Maximum VBFs in use at once (0 means 16, 1-15 as expected). */
        uint64_t vbf_thresh            : 4;  /**< [ 11:  8](R/W) VBF threshold. When the number of in-use VBFs exceeds this number the L2C TAD increases
                                                                 the priority of all its write operations in the LMC. */
        uint64_t exvic                 : 4;  /**< [ 15: 12](RO) Reserved. */
        uint64_t exfwd                 : 4;  /**< [ 19: 16](RO) Reserved. */
        uint64_t exrrq                 : 4;  /**< [ 23: 20](RO) Reserved. */
        uint64_t exlrq                 : 4;  /**< [ 27: 24](RO) Reserved. */
        uint64_t wtfilldn              : 1;  /**< [ 28: 28](R/W) Be more conservative with LFB done relative to fills. */
        uint64_t wtinvdn               : 1;  /**< [ 29: 29](R/W) Be more conservative with LFB done relative to invalidates. */
        uint64_t wtlmcwrdn             : 1;  /**< [ 30: 30](R/W) Be more conservative with LFB done relative to LMC writes. */
        uint64_t disrstp               : 1;  /**< [ 31: 31](RO) Reserved. */
        uint64_t frcnalc               : 1;  /**< [ 32: 32](R/W) When set, all cache accesses are forced to not allocate in the local L2. */
        uint64_t reserved_33_63        : 31;
#endif /* Word 0 - End */
    } s;
    /* struct bdk_l2c_tad_ctl_s cn81xx; */
    struct bdk_l2c_tad_ctl_cn88xx
    {
#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
        uint64_t reserved_33_63        : 31;
        uint64_t frcnalc               : 1;  /**< [ 32: 32](R/W) When set, all cache accesses are forced to not allocate in the local L2. */
        uint64_t disrstp               : 1;  /**< [ 31: 31](R/W) When set, if the L2 receives an RSTP XMC command, it treats it as a STP. */
        uint64_t wtlmcwrdn             : 1;  /**< [ 30: 30](R/W) Be more conservative with LFB done relative to LMC writes. */
        uint64_t wtinvdn               : 1;  /**< [ 29: 29](R/W) Be more conservative with LFB done relative to invalidates. */
        uint64_t wtfilldn              : 1;  /**< [ 28: 28](R/W) Be more conservative with LFB done relative to fills. */
        uint64_t exlrq                 : 4;  /**< [ 27: 24](R/W) Extra LFBs to reserve for locally generated XMC commands. None are reserved for functional
                                                                 correctness. Ignored if L2C_OCI_CTL[ENAOCI] is 0. */
        uint64_t exrrq                 : 4;  /**< [ 23: 20](R/W) Extra LFBs to reserve for Rxxx CCPI commands beyond the 1 required for CCPI protocol
                                                                 functional correctness. Ignored if L2C_OCI_CTL[ENAOCI] is 0. */
        uint64_t exfwd                 : 4;  /**< [ 19: 16](R/W) Extra LFBs to reserve for Fxxx/SINV CCPI commands beyond the 1 required for CCPI protocol
                                                                 functional correctness. Ignored if L2C_OCI_CTL[ENAOCI] is 0. */
        uint64_t exvic                 : 4;  /**< [ 15: 12](R/W) Extra LFBs to reserve for VICx CCPI commands beyond the 1 required for CCPI protocol
                                                                 functional correctness. Ignored if L2C_OCI_CTL[ENAOCI] is 0. */
        uint64_t vbf_thresh            : 4;  /**< [ 11:  8](R/W) VBF threshold. When the number of in-use VBFs exceeds this number the L2C TAD increases
                                                                 the priority of all its write operations in the LMC. */
        uint64_t maxvbf                : 4;  /**< [  7:  4](R/W) Maximum VBFs in use at once (0 means 16, 1-15 as expected). */
        uint64_t maxlfb                : 4;  /**< [  3:  0](R/W) Maximum VABs/LFBs in use at once (0 means 16, 1-15 as expected). */
#else /* Word 0 - Little Endian */
        uint64_t maxlfb                : 4;  /**< [  3:  0](R/W) Maximum VABs/LFBs in use at once (0 means 16, 1-15 as expected). */
        uint64_t maxvbf                : 4;  /**< [  7:  4](R/W) Maximum VBFs in use at once (0 means 16, 1-15 as expected). */
        uint64_t vbf_thresh            : 4;  /**< [ 11:  8](R/W) VBF threshold. When the number of in-use VBFs exceeds this number the L2C TAD increases
                                                                 the priority of all its write operations in the LMC. */
        uint64_t exvic                 : 4;  /**< [ 15: 12](R/W) Extra LFBs to reserve for VICx CCPI commands beyond the 1 required for CCPI protocol
                                                                 functional correctness. Ignored if L2C_OCI_CTL[ENAOCI] is 0. */
        uint64_t exfwd                 : 4;  /**< [ 19: 16](R/W) Extra LFBs to reserve for Fxxx/SINV CCPI commands beyond the 1 required for CCPI protocol
                                                                 functional correctness. Ignored if L2C_OCI_CTL[ENAOCI] is 0. */
        uint64_t exrrq                 : 4;  /**< [ 23: 20](R/W) Extra LFBs to reserve for Rxxx CCPI commands beyond the 1 required for CCPI protocol
                                                                 functional correctness. Ignored if L2C_OCI_CTL[ENAOCI] is 0. */
        uint64_t exlrq                 : 4;  /**< [ 27: 24](R/W) Extra LFBs to reserve for locally generated XMC commands. None are reserved for functional
                                                                 correctness. Ignored if L2C_OCI_CTL[ENAOCI] is 0. */
        uint64_t wtfilldn              : 1;  /**< [ 28: 28](R/W) Be more conservative with LFB done relative to fills. */
        uint64_t wtinvdn               : 1;  /**< [ 29: 29](R/W) Be more conservative with LFB done relative to invalidates. */
        uint64_t wtlmcwrdn             : 1;  /**< [ 30: 30](R/W) Be more conservative with LFB done relative to LMC writes. */
        uint64_t disrstp               : 1;  /**< [ 31: 31](R/W) When set, if the L2 receives an RSTP XMC command, it treats it as a STP. */
        uint64_t frcnalc               : 1;  /**< [ 32: 32](R/W) When set, all cache accesses are forced to not allocate in the local L2. */
        uint64_t reserved_33_63        : 31;
#endif /* Word 0 - End */
    } cn88xx;
    /* struct bdk_l2c_tad_ctl_s cn83xx; */
};
typedef union bdk_l2c_tad_ctl bdk_l2c_tad_ctl_t;

#define BDK_L2C_TAD_CTL BDK_L2C_TAD_CTL_FUNC()
static inline uint64_t BDK_L2C_TAD_CTL_FUNC(void) __attribute__ ((pure, always_inline));
static inline uint64_t BDK_L2C_TAD_CTL_FUNC(void)
{
    if (CAVIUM_IS_MODEL(CAVIUM_CN8XXX))
        return 0x87e080800018ll;
    __bdk_csr_fatal("L2C_TAD_CTL", 0, 0, 0, 0, 0);
}

#define typedef_BDK_L2C_TAD_CTL bdk_l2c_tad_ctl_t
#define bustype_BDK_L2C_TAD_CTL BDK_CSR_TYPE_RSL
#define basename_BDK_L2C_TAD_CTL "L2C_TAD_CTL"
#define device_bar_BDK_L2C_TAD_CTL 0x0 /* PF_BAR0 */
#define busnum_BDK_L2C_TAD_CTL 0
#define arguments_BDK_L2C_TAD_CTL -1,-1,-1,-1

/**
 * Register (RSL) l2c_wpar_iob#
 *
 * L2C IOB Way Partitioning Registers
 */
union bdk_l2c_wpar_iobx
{
    uint64_t u;
    struct bdk_l2c_wpar_iobx_s
    {
#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
        uint64_t reserved_16_63        : 48;
        uint64_t mask                  : 16; /**< [ 15:  0](R/W/H) Way partitioning mask (1 means do not use). The read value of [MASK] includes bits set
                                                                 because of the L2C cripple fuses. */
#else /* Word 0 - Little Endian */
        uint64_t mask                  : 16; /**< [ 15:  0](R/W/H) Way partitioning mask (1 means do not use). The read value of [MASK] includes bits set
                                                                 because of the L2C cripple fuses. */
        uint64_t reserved_16_63        : 48;
#endif /* Word 0 - End */
    } s;
    /* struct bdk_l2c_wpar_iobx_s cn; */
};
typedef union bdk_l2c_wpar_iobx bdk_l2c_wpar_iobx_t;

static inline uint64_t BDK_L2C_WPAR_IOBX(unsigned long a) __attribute__ ((pure, always_inline));
static inline uint64_t BDK_L2C_WPAR_IOBX(unsigned long a)
{
    if (CAVIUM_IS_MODEL(CAVIUM_CN8XXX) && (a<=15))
        return 0x87e080840200ll + 8ll * ((a) & 0xf);
    __bdk_csr_fatal("L2C_WPAR_IOBX", 1, a, 0, 0, 0);
}

#define typedef_BDK_L2C_WPAR_IOBX(a) bdk_l2c_wpar_iobx_t
#define bustype_BDK_L2C_WPAR_IOBX(a) BDK_CSR_TYPE_RSL
#define basename_BDK_L2C_WPAR_IOBX(a) "L2C_WPAR_IOBX"
#define device_bar_BDK_L2C_WPAR_IOBX(a) 0x0 /* PF_BAR0 */
#define busnum_BDK_L2C_WPAR_IOBX(a) (a)
#define arguments_BDK_L2C_WPAR_IOBX(a) (a),-1,-1,-1

/**
 * Register (RSL) l2c_wpar_pp#
 *
 * L2C Core Way Partitioning Registers
 */
union bdk_l2c_wpar_ppx
{
    uint64_t u;
    struct bdk_l2c_wpar_ppx_s
    {
#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
        uint64_t reserved_16_63        : 48;
        uint64_t mask                  : 16; /**< [ 15:  0](R/W/H) Way partitioning mask (1 means do not use). The read value of [MASK] includes bits set
                                                                 because of the L2C cripple fuses. */
#else /* Word 0 - Little Endian */
        uint64_t mask                  : 16; /**< [ 15:  0](R/W/H) Way partitioning mask (1 means do not use). The read value of [MASK] includes bits set
                                                                 because of the L2C cripple fuses. */
        uint64_t reserved_16_63        : 48;
#endif /* Word 0 - End */
    } s;
    /* struct bdk_l2c_wpar_ppx_s cn; */
};
typedef union bdk_l2c_wpar_ppx bdk_l2c_wpar_ppx_t;

static inline uint64_t BDK_L2C_WPAR_PPX(unsigned long a) __attribute__ ((pure, always_inline));
static inline uint64_t BDK_L2C_WPAR_PPX(unsigned long a)
{
    if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=3))
        return 0x87e080840000ll + 8ll * ((a) & 0x3);
    if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=23))
        return 0x87e080840000ll + 8ll * ((a) & 0x1f);
    if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=47))
        return 0x87e080840000ll + 8ll * ((a) & 0x3f);
    __bdk_csr_fatal("L2C_WPAR_PPX", 1, a, 0, 0, 0);
}

#define typedef_BDK_L2C_WPAR_PPX(a) bdk_l2c_wpar_ppx_t
#define bustype_BDK_L2C_WPAR_PPX(a) BDK_CSR_TYPE_RSL
#define basename_BDK_L2C_WPAR_PPX(a) "L2C_WPAR_PPX"
#define device_bar_BDK_L2C_WPAR_PPX(a) 0x0 /* PF_BAR0 */
#define busnum_BDK_L2C_WPAR_PPX(a) (a)
#define arguments_BDK_L2C_WPAR_PPX(a) (a),-1,-1,-1

#endif /* __BDK_CSRS_L2C_H__ */