hc
2024-03-22 a0752693d998599af469473b8dc239ef973a012f
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
/** @file
  PCI memory configuration for NXP
 
  Copyright 2018-2020 NXP
 
  SPDX-License-Identifier: BSD-2-Clause-Patent
**/
 
#ifndef PCI_H
#define PCI_H
 
#define PciLsGen4SetPg(Dbi, PgIdx)      MmioAndThenOr32 ((Dbi) + PAB_CTRL,  \
              ~(PAB_CTRL_PAGE_SEL_MASK << PAB_CTRL_PAGE_SEL_SHIFT),         \
              ((PgIdx) & PAB_CTRL_PAGE_SEL_MASK) << PAB_CTRL_PAGE_SEL_SHIFT)
 
#define PCI_SEG0_NUM              0
#define PCI_SEG1_NUM              1
#define PCI_SEG2_NUM              2
#define PCI_SEG3_NUM              3
#define PCI_SEG4_NUM              4
#define PCI_SEG5_NUM              5
#define PCI_SEG0_MMIO_MEMBASE     FixedPcdGet64 (PcdPciExp1BaseAddr)
#define PCI_SEG0_DBI_BASE         0x03400000
 
#define PCI_LINK_DOWN             0x0
#define PCI_LINK_UP               0x1
 
// Segment configuration
#define PCI_SEG_BUSNUM_MIN        0x0
#define PCI_SEG_BUSNUM_MAX        0xff
#define PCI_SEG_PORTIO_MIN        0x0
#define PCI_SEG_PORTIO_MAX        0xffff
#define SEG_CFG_SIZE              0x00001000
#define ECAM_DEVICE_SIZE          SIZE_32KB
#define ECAM_BUS_SIZE             SIZE_1MB
#define ECAM_CFG_REGION_SIZE      SIZE_256MB
#define SEG_MEM_BASE              0x40000000
#define SEG_MEM_SIZE              0xC0000000
#define SEG_MEM_LIMIT             (SEG_MEM_BASE + (SEG_MEM_SIZE -1))
#define SEG_IO_BASE               0x10000000
#define SEG_MEM64_BASE            0x400000000
#define PCI_BASE_DIFF             0x800000000
#define PCI_DBI_SIZE_DIFF         0x100000
#define PCI_SEG0_PHY_CFG0_BASE    PCI_SEG0_MMIO_MEMBASE
#define PCI_SEG0_PHY_CFG1_BASE    (PCI_SEG0_PHY_CFG0_BASE + SEG_CFG_SIZE)
#define PCI_SEG0_PHY_MEM_BASE     (PCI_SEG0_MMIO_MEMBASE + SEG_MEM_BASE)
#define PCI_SEG0_PHY_MEM64_BASE   (PCI_SEG0_MMIO_MEMBASE + SEG_MEM64_BASE)
#define PCI_MMIO64_WIN_SIZE       SIZE_16GB
#define PCI_SEG0_PHY_IO_BASE      (PCI_SEG0_MMIO_MEMBASE + SEG_IO_BASE)
#define PCI_SEG0_PORTIO_MIN       0x0
#define PCI_SEG0_PORTIO_MAX       0xffff
#define PCI_SEG0_PORTIO_OFFSET    0x0
#define PCI_SEG1_PORTIO_MIN       0x0
#define PCI_SEG1_PORTIO_MAX       0xffff
#define PCI_SEG1_PORTIO_OFFSET    0x10000
#define PCI_SEG2_PORTIO_MIN       0x0
#define PCI_SEG2_PORTIO_MAX       0xffff
#define PCI_SEG2_PORTIO_OFFSET    0x20000
#define PCI_SEG3_PORTIO_MIN       0x0
#define PCI_SEG3_PORTIO_MAX       0xffff
#define PCI_SEG3_PORTIO_OFFSET    0x30000
#define PCI_SEG4_PORTIO_MIN       0x0
#define PCI_SEG4_PORTIO_MAX       0xffff
#define PCI_SEG4_PORTIO_OFFSET    0x40000
#define PCI_SEG5_PORTIO_MIN       0x0
#define PCI_SEG5_PORTIO_MAX       0xffff
#define PCI_SEG5_PORTIO_OFFSET    0x50000
#define PCI_SEG_PORTIO_LIMIT      (PCI_SEG5_PORTIO_MAX + PCI_SEG5_PORTIO_OFFSET)
 
// PCIe Controller configuration
#define NUM_PCIE_CONTROLLER       FixedPcdGet32 (PcdNumPciController)
#define PCI_LUT_DBG               FixedPcdGet32 (PcdPcieLutDbg)
#define PCI_LUT_BASE              FixedPcdGet32 (PcdPcieLutBase)
#define LTSSM_PCIE_L0             0x11
 
#define PCI_CLASS_BRIDGE_PCI      0x0604
#define PCI_CLASS_DEVICE          0x8
#define PCI_DBI_RO_WR_EN          0x8bc
#define CLASS_CODE_MASK           0xffff
#define CLASS_CODE_SHIFT          0x10
 
// PCIe Layerscape Controller
#define IATU_VIEWPORT_OFF                            0x900
#define IATU_REGION_CTRL_1_OFF_OUTBOUND_0            0x904
#define IATU_REGION_CTRL_2_OFF_OUTBOUND_0            0x908
#define IATU_LWR_BASE_ADDR_OFF_OUTBOUND_0            0x90C
#define IATU_UPPER_BASE_ADDR_OFF_OUTBOUND_0          0x910
#define IATU_LIMIT_ADDR_OFF_OUTBOUND_0               0x914
#define IATU_LWR_TARGET_ADDR_OFF_OUTBOUND_0          0x918
#define IATU_UPPER_TARGET_ADDR_OFF_OUTBOUND_0        0x91C
#define IATU_VIEWPORT_OUTBOUND                       0x0
#define IATU_REGION_CTRL_2_OFF_OUTBOUND_0_REGION_EN  BIT31
#define IATU_ENABLE_CFG_SHIFT_FEATURE                BIT28
 
// ATU Programming
#define IATU_REGION_CTRL_1_OFF_OUTBOUND_0_TYPE_MEM   0x0
#define IATU_REGION_CTRL_1_OFF_OUTBOUND_0_TYPE_IO    0x2
#define IATU_REGION_CTRL_1_OFF_OUTBOUND_0_TYPE_CFG0  0x4
#define IATU_REGION_CTRL_1_OFF_OUTBOUND_0_TYPE_CFG1  0x5
#define IATU_REGION_INDEX0        0x0
#define IATU_REGION_INDEX1        0x1
#define SEG_CFG_BUS               0x00000000
#define SEG_MEM_BUS               0x40000000
#define SEG_IO_SIZE               0x10000
#define SEG_IO_BUS                0x0
 
#define CFG_SHIFT_ENABLE          (PcdGetBool (PcdPciCfgShiftEnable))
#define PCI_LS_GEN4_CTRL          (PcdGetBool (PcdPciLsGen4Ctrl))
 
// PCIe Layerscape Gen4 Controller
#define GPEX_CLASSCODE                          0x474
#define GPEX_CLASSCODE_SHIFT                    16
#define GPEX_CLASSCODE_MASK                     0xffff
#define PAB_AXI_PIO_CTRL(Idx)                   (0x840 + 0x10 * (Idx))
#define APIO_EN                                 0x1
#define MEM_WIN_EN                              0x1 << 1
#define IO_WIN_EN                               0x1 << 2
#define CFG_WIN_EN                              0x1 << 3
#define PAB_PEX_PIO_CTRL(Idx)                   (0x8c0 + 0x10 * (Idx))
#define PPIO_EN                                 (0x1 << 0)
#define PAB_PEX_PIO_STAT(Idx)                   (0x8c4 + 0x10 * (Idx))
#define PAB_PEX_PIO_MT_STAT(Idx)                (0x8c8 + 0x10 * (Idx))
#define PEX_AMAP_CTRL_TYPE_SHIFT                0x1
#define PEX_AMAP_CTRL_EN_SHIFT                  0x0
#define PEX_AMAP_CTRL_TYPE_MASK                 0x3
#define PEX_AMAP_CTRL_EN_MASK                   0x1
#define PAB_PEX_AMAP_CTRL(Idx)                  (0x4ba0 + 0x10 * (Idx))
#define PAB_EXT_PEX_AMAP_SIZE(Idx)              (0xbef0 + 0x04 * (Idx))
#define PAB_PEX_AMAP_AXI_WIN(Idx)               (0x4ba4 + 0x10 * (Idx))
#define PAB_EXT_PEX_AMAP_AXI_WIN(Idx)           (0xb4a0 + 0x04 * (Idx))
#define PAB_PEX_AMAP_PEX_WIN_L(Idx)             (0x4ba8 + 0x10 * (Idx))
#define PAB_PEX_AMAP_PEX_WIN_H(Idx)             (0x4bac + 0x10 * (Idx))
#define PAB_CTRL                                0x808
#define PAB_CTRL_APIO_EN                        0x1
#define PAB_CTRL_PPIO_EN                        (0x1 << 1)
#define PAB_CTRL_PAGE_SEL_SHIFT                 13
#define PAB_CTRL_PAGE_SEL_MASK                  0x3f
#define INDIRECT_ADDR_BNDRY                     0xc00
#define PAGE_IDX_SHIFT                          10
#define PAGE_ADDR_MASK                          0x3ff
#define PAB_AXI_AMAP_CTRL(Idx)                  (0xba0 + 0x10 * (Idx))
#define PAB_EXT_AXI_AMAP_SIZE(Idx)              (0xbaf0 + 0x4 * (Idx))
#define PAB_AXI_AMAP_AXI_WIN(Idx)               (0xba4 + 0x10 * (Idx))
#define PAB_EXT_AXI_AMAP_AXI_WIN(Idx)           (0x80a0 + 0x4 * (Idx))
#define PAB_AXI_AMAP_PEX_WIN_L(Idx)             (0xba8 + 0x10 * (Idx))
#define PAB_AXI_AMAP_PEX_WIN_H(Idx)             (0xbac + 0x10 * (Idx))
#define PAB_AXI_TYPE_CFG                        0x00
#define PAB_AXI_TYPE_IO                         0x01
#define PAB_AXI_TYPE_MEM                        0x02
#define AXI_AMAP_CTRL_EN                        0x1
#define AXI_AMAP_CTRL_TYPE_SHIFT                1
#define AXI_AMAP_CTRL_TYPE_MASK                 0x3
#define AXI_AMAP_CTRL_SIZE_SHIFT                10
#define AXI_AMAP_CTRL_SIZE_MASK                 0x3fffff
 
 
#define OFFSET_TO_PAGE_IDX(Off)                 ((Off >> PAGE_IDX_SHIFT) \
                                                & PAB_CTRL_PAGE_SEL_MASK)
 
#define OFFSET_TO_PAGE_ADDR(Off)                ((Off & PAGE_ADDR_MASK) \
                                                | INDIRECT_ADDR_BNDRY)
 
#define GPEX_ACK_REPLAY_TO                      0x438
#define ACK_LAT_TO_VAL_SHIFT                    0
#define ACK_LAT_TO_VAL_MASK                     0x1fff
 
#endif