blob: 31fd98b82facbeb02f0f57d24f20c99f6f64ff94 [file] [log] [blame]
AlexeiFedorov9f0dc012024-09-10 10:22:06 +01001/*
2 * Copyright (c) 2024, Arm Limited or its affiliates. All rights reserved.
3 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 *
6 */
7
8#ifndef PCIE_SPEC_H
9#define PCIE_SPEC_H
10
11/* Header Type */
12#define TYPE0_HEADER 0
13#define TYPE1_HEADER 1
14
15/* TYPE 0/1 Cmn Cfg reg offsets */
16#define TYPE01_VIDR 0x0
17#define TYPE01_CR 0x4
18#define TYPE01_RIDR 0x8
19#define TYPE01_CLSR 0xc
20#define TYPE01_BAR 0x10
21#define TYPE01_CPR 0x34
22#define TYPE01_ILR 0x3c
23
24/* TYPE 0/1 Cmn Cfg reg shifts and masks */
25#define TYPE01_VIDR_SHIFT 0
26#define TYPE01_VIDR_MASK 0xffff
27#define TYPE01_DIDR_SHIFT 16
28#define TYPE01_DIDR_MASK 0xffff
29#define TYPE01_CCR_SHIFT 8
30#define TYPE01_CCR_MASK 0xffffff
31#define TYPE01_CPR_SHIFT 0
32#define TYPE01_CPR_MASK 0xff
33#define TYPE01_HTR_SHIFT 16
34#define TYPE01_HTR_MASK 0xff
35#define TYPE01_IPR_SHIFT 8
36#define TYPE01_IPR_MASK 0xFF
37#define TYPE01_ILR_SHIFT 0
38#define TYPE01_ILR_MASK 0xFF
39#define TYPE01_BCC_SHIFT 24
40
41#define HB_BASE_CLASS 0x06
42#define HB_SUB_CLASS 0x00
43
44/* Header type reg shifts and masks */
45#define HTR_HL_SHIFT 0x0
46#define HTR_HL_MASK 0x7f
47#define HTR_MFD_SHIFT 7
48#define HTR_MFD_MASK 0x1
49
50/* BAR offset */
51#define BAR0_OFFSET 0x10
52#define BAR_TYPE_0_MAX_OFFSET 0x24
53#define BAR_TYPE_1_MAX_OFFSET 0x14
54#define BAR_NP_TYPE 0x0
55#define BAR_P_TYPE 0x1
56#define BAR_64_BIT 0x1
57#define BAR_32_BIT 0x0
58#define BAR_REG(bar_reg_value) ((bar_reg_value >> 2) & 0x1)
59
60/* Type 1 Cfg reg offsets */
61#define TYPE1_PBN 0x18
62#define TYPE1_SEC_STA 0x1C
63#define TYPE1_NP_MEM 0x20
64#define TYPE1_P_MEM 0x24
65#define TYPE1_P_MEM_BU 0x28 /* Prefetchable Base Upper Offset */
66#define TYPE1_P_MEM_LU 0x2C /* Prefetchable Limit Upper Offset */
67
68/* Bus Number reg shifts */
69#define SECBN_SHIFT 8
70#define SUBBN_SHIFT 16
71
72/* Bus Number reg masks */
73#define PRIBN_MASK 0xff
74#define SECBN_MASK 0xff
75#define SUBBN_MASK 0xff
76#define SECBN_EXTRACT 0xffff00ff
77
78/* Capability header reg shifts */
79#define PCIE_CIDR_SHIFT 0
80#define PCIE_NCPR_SHIFT 8
81#define PCIE_ECAP_CIDR_SHIFT 0
82#define PCIE_ECAP_NCPR_SHIFT 20
83
84/* Capability header reg masks */
85#define PCIE_CIDR_MASK 0xff
86#define PCIE_NCPR_MASK 0xff
87#define PCIE_ECAP_CIDR_MASK 0xffff
88#define PCIE_ECAP_NCPR_MASK 0xfff
89
90#define PCIE_CAP_START 0x40
91#define PCIE_CAP_END 0xFC
92#define PCIE_ECAP_START 0x100
93#define PCIE_ECAP_END 0xFFC
94
95/* Capability Structure IDs */
96#define CID_PCIECS 0x10
97#define CID_MSI 0x05
98#define CID_MSIX 0x11
99#define CID_PMC 0x01
100#define CID_EA 0x14
101#define ECID_AER 0x0001
102#define ECID_RCECEA 0x0007
103#define ECID_ACS 0x000D
104#define ECID_ARICS 0x000E
105#define ECID_ATS 0x000F
106#define ECID_PRI 0x0013
107#define ECID_PASID 0x001B
108#define ECID_DPC 0x001D
109#define ECID_DVSEC 0x0023
110
111/* PCI Express capability struct offsets */
112#define CIDR_OFFSET 0x0
113#define PCIECR_OFFSET 0x2
114#define DCAPR_OFFSET 0x4
115#define ACSCR_OFFSET 0x4
116#define DCTLR_OFFSET 0x8
117#define LCAPR_OFFSET 0xC
118#define LCTRLR_OFFSET 0x10
119#define DCAP2R_OFFSET 0x24
120#define DCTL2R_OFFSET 0x28
121#define DCTL2R_MASK 0xFFFF
122#define LCAP2R_OFFSET 0x2C
123#define LCTL2R_OFFSET 0x30
124#define DCTL2R_MASK 0xFFFF
125#define DSTS_SHIFT 16
126#define DS_UNCORR_MASK 0x6
127#define DS_CORR_MASK 0x1
128
129/* PCIe capabilities reg shifts and masks */
130#define PCIECR_DPT_SHIFT 4
131#define PCIECR_DPT_MASK 0xf
132
133/* Device bitmask definitions */
134#define RCiEP (1 << 0b1001)
135#define RCEC (1 << 0b1010)
136#define EP (1 << 0b0000)
137#define RP (1 << 0b0100)
138#define UP (1 << 0b0101)
139#define DP (1 << 0b0110)
140#define iEP_EP (1 << 0b1100)
141#define iEP_RP (1 << 0b1011)
142#define PCI_PCIE (1 << 0b1000)
143#define PCIE_PCI (1 << 0b0111)
144#define PCIe_ALL (iEP_RP | iEP_EP | RP | EP | RCEC | RCiEP)
145
146#endif /* PCIE_SPEC_H */