@@ -139,8 +139,13 @@ struct pci_bridge_reg_behavior pci_regs_behavior[PCI_STD_HEADER_SIZEOF / 4] = {
139
139
.ro = GENMASK (7 , 0 ),
140
140
},
141
141
142
+ /*
143
+ * If expansion ROM is unsupported then ROM Base Address register must
144
+ * be implemented as read-only register that return 0 when read, same
145
+ * as for unused Base Address registers.
146
+ */
142
147
[PCI_ROM_ADDRESS1 / 4 ] = {
143
- .rw = GENMASK ( 31 , 11 ) | BIT ( 0 ) ,
148
+ .ro = ~ 0 ,
144
149
},
145
150
146
151
/*
@@ -171,41 +176,55 @@ struct pci_bridge_reg_behavior pcie_cap_regs_behavior[PCI_CAP_PCIE_SIZEOF / 4] =
171
176
[PCI_CAP_LIST_ID / 4 ] = {
172
177
/*
173
178
* Capability ID, Next Capability Pointer and
174
- * Capabilities register are all read-only.
179
+ * bits [14:0] of Capabilities register are all read-only.
180
+ * Bit 15 of Capabilities register is reserved.
175
181
*/
176
- .ro = ~ 0 ,
182
+ .ro = GENMASK ( 30 , 0 ) ,
177
183
},
178
184
179
185
[PCI_EXP_DEVCAP / 4 ] = {
180
- .ro = ~0 ,
186
+ /*
187
+ * Bits [31:29] and [17:16] are reserved.
188
+ * Bits [27:18] are reserved for non-upstream ports.
189
+ * Bits 28 and [14:6] are reserved for non-endpoint devices.
190
+ * Other bits are read-only.
191
+ */
192
+ .ro = BIT (15 ) | GENMASK (5 , 0 ),
181
193
},
182
194
183
195
[PCI_EXP_DEVCTL / 4 ] = {
184
- /* Device control register is RW */
185
- .rw = GENMASK (15 , 0 ),
196
+ /*
197
+ * Device control register is RW, except bit 15 which is
198
+ * reserved for non-endpoints or non-PCIe-to-PCI/X bridges.
199
+ */
200
+ .rw = GENMASK (14 , 0 ),
186
201
187
202
/*
188
203
* Device status register has bits 6 and [3:0] W1C, [5:4] RO,
189
- * the rest is reserved
204
+ * the rest is reserved. Also bit 6 is reserved for non-upstream
205
+ * ports.
190
206
*/
191
- .w1c = ( BIT ( 6 ) | GENMASK (3 , 0 ) ) << 16 ,
207
+ .w1c = GENMASK (3 , 0 ) << 16 ,
192
208
.ro = GENMASK (5 , 4 ) << 16 ,
193
209
},
194
210
195
211
[PCI_EXP_LNKCAP / 4 ] = {
196
- /* All bits are RO, except bit 23 which is reserved */
197
- .ro = lower_32_bits (~BIT (23 )),
212
+ /*
213
+ * All bits are RO, except bit 23 which is reserved and
214
+ * bit 18 which is reserved for non-upstream ports.
215
+ */
216
+ .ro = lower_32_bits (~(BIT (23 ) | PCI_EXP_LNKCAP_CLKPM )),
198
217
},
199
218
200
219
[PCI_EXP_LNKCTL / 4 ] = {
201
220
/*
202
221
* Link control has bits [15:14], [11:3] and [1:0] RW, the
203
- * rest is reserved.
222
+ * rest is reserved. Bit 8 is reserved for non-upstream ports.
204
223
*
205
224
* Link status has bits [13:0] RO, and bits [15:14]
206
225
* W1C.
207
226
*/
208
- .rw = GENMASK (15 , 14 ) | GENMASK (11 , 3 ) | GENMASK (1 , 0 ),
227
+ .rw = GENMASK (15 , 14 ) | GENMASK (11 , 9 ) | GENMASK ( 7 , 3 ) | GENMASK (1 , 0 ),
209
228
.ro = GENMASK (13 , 0 ) << 16 ,
210
229
.w1c = GENMASK (15 , 14 ) << 16 ,
211
230
},
@@ -324,11 +343,9 @@ int pci_bridge_emul_init(struct pci_bridge_emul *bridge,
324
343
325
344
if (bridge -> has_pcie ) {
326
345
bridge -> conf .capabilities_pointer = PCI_CAP_PCIE_START ;
346
+ bridge -> conf .status |= cpu_to_le16 (PCI_STATUS_CAP_LIST );
327
347
bridge -> pcie_conf .cap_id = PCI_CAP_ID_EXP ;
328
- /* Set PCIe v2, root port, slot support */
329
- bridge -> pcie_conf .cap =
330
- cpu_to_le16 (PCI_EXP_TYPE_ROOT_PORT << 4 | 2 |
331
- PCI_EXP_FLAGS_SLOT );
348
+ bridge -> pcie_conf .cap |= cpu_to_le16 (PCI_EXP_TYPE_ROOT_PORT << 4 );
332
349
bridge -> pcie_cap_regs_behavior =
333
350
kmemdup (pcie_cap_regs_behavior ,
334
351
sizeof (pcie_cap_regs_behavior ),
@@ -337,6 +354,27 @@ int pci_bridge_emul_init(struct pci_bridge_emul *bridge,
337
354
kfree (bridge -> pci_regs_behavior );
338
355
return - ENOMEM ;
339
356
}
357
+ /* These bits are applicable only for PCI and reserved on PCIe */
358
+ bridge -> pci_regs_behavior [PCI_CACHE_LINE_SIZE / 4 ].ro &=
359
+ ~GENMASK (15 , 8 );
360
+ bridge -> pci_regs_behavior [PCI_COMMAND / 4 ].ro &=
361
+ ~((PCI_COMMAND_SPECIAL | PCI_COMMAND_INVALIDATE |
362
+ PCI_COMMAND_VGA_PALETTE | PCI_COMMAND_WAIT |
363
+ PCI_COMMAND_FAST_BACK ) |
364
+ (PCI_STATUS_66MHZ | PCI_STATUS_FAST_BACK |
365
+ PCI_STATUS_DEVSEL_MASK ) << 16 );
366
+ bridge -> pci_regs_behavior [PCI_PRIMARY_BUS / 4 ].ro &=
367
+ ~GENMASK (31 , 24 );
368
+ bridge -> pci_regs_behavior [PCI_IO_BASE / 4 ].ro &=
369
+ ~((PCI_STATUS_66MHZ | PCI_STATUS_FAST_BACK |
370
+ PCI_STATUS_DEVSEL_MASK ) << 16 );
371
+ bridge -> pci_regs_behavior [PCI_INTERRUPT_LINE / 4 ].rw &=
372
+ ~((PCI_BRIDGE_CTL_MASTER_ABORT |
373
+ BIT (8 ) | BIT (9 ) | BIT (11 )) << 16 );
374
+ bridge -> pci_regs_behavior [PCI_INTERRUPT_LINE / 4 ].ro &=
375
+ ~((PCI_BRIDGE_CTL_FAST_BACK ) << 16 );
376
+ bridge -> pci_regs_behavior [PCI_INTERRUPT_LINE / 4 ].w1c &=
377
+ ~(BIT (10 ) << 16 );
340
378
}
341
379
342
380
if (flags & PCI_BRIDGE_EMUL_NO_PREFETCHABLE_BAR ) {
0 commit comments