blob: cd851ee547ce62704063c7bb445af886808a0909 [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
Arunachalam Ganapathybbb13052025-06-24 14:00:06 +010090/* PCIe Extended Capability Header */
91#define PCIE_ECH_ID_SHIFT U(0)
92#define PCIE_ECH_ID_WIDTH U(16)
93#define PCIE_ECH_CAP_VER_SHIFT U(16)
94#define PCIE_ECH_CAP_VER_WIDTH U(4)
95#define PCIE_ECH_NEXT_CAP_OFFSET_SHIFT U(20)
96#define PCIE_ECH_NEXT_CAP_OFFSET_WIDTH U(12)
97
AlexeiFedorov9f0dc012024-09-10 10:22:06 +010098#define PCIE_CAP_START 0x40
99#define PCIE_CAP_END 0xFC
100#define PCIE_ECAP_START 0x100
101#define PCIE_ECAP_END 0xFFC
102
103/* Capability Structure IDs */
104#define CID_PCIECS 0x10
105#define CID_MSI 0x05
106#define CID_MSIX 0x11
107#define CID_PMC 0x01
108#define CID_EA 0x14
109#define ECID_AER 0x0001
110#define ECID_RCECEA 0x0007
111#define ECID_ACS 0x000D
112#define ECID_ARICS 0x000E
113#define ECID_ATS 0x000F
114#define ECID_PRI 0x0013
115#define ECID_PASID 0x001B
116#define ECID_DPC 0x001D
117#define ECID_DVSEC 0x0023
Arunachalam Ganapathybbb13052025-06-24 14:00:06 +0100118#define ECID_DOE 0x002E
119#define ECID_IDE 0x0030
AlexeiFedorov9f0dc012024-09-10 10:22:06 +0100120
121/* PCI Express capability struct offsets */
122#define CIDR_OFFSET 0x0
123#define PCIECR_OFFSET 0x2
124#define DCAPR_OFFSET 0x4
125#define ACSCR_OFFSET 0x4
126#define DCTLR_OFFSET 0x8
127#define LCAPR_OFFSET 0xC
128#define LCTRLR_OFFSET 0x10
129#define DCAP2R_OFFSET 0x24
130#define DCTL2R_OFFSET 0x28
131#define DCTL2R_MASK 0xFFFF
132#define LCAP2R_OFFSET 0x2C
133#define LCTL2R_OFFSET 0x30
134#define DCTL2R_MASK 0xFFFF
135#define DSTS_SHIFT 16
136#define DS_UNCORR_MASK 0x6
137#define DS_CORR_MASK 0x1
138
139/* PCIe capabilities reg shifts and masks */
140#define PCIECR_DPT_SHIFT 4
141#define PCIECR_DPT_MASK 0xf
142
143/* Device bitmask definitions */
144#define RCiEP (1 << 0b1001)
145#define RCEC (1 << 0b1010)
146#define EP (1 << 0b0000)
147#define RP (1 << 0b0100)
148#define UP (1 << 0b0101)
149#define DP (1 << 0b0110)
150#define iEP_EP (1 << 0b1100)
151#define iEP_RP (1 << 0b1011)
152#define PCI_PCIE (1 << 0b1000)
153#define PCIE_PCI (1 << 0b0111)
154#define PCIe_ALL (iEP_RP | iEP_EP | RP | EP | RCEC | RCiEP)
155
156#endif /* PCIE_SPEC_H */