[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-ppc] [PULL 09/24] e500: fix pci host bridge class/type
From: |
David Gibson |
Subject: |
[Qemu-ppc] [PULL 09/24] e500: fix pci host bridge class/type |
Date: |
Fri, 15 Dec 2017 16:54:20 +1100 |
From: Michael Davidsaver <address@hidden>
Correct some confusion wrt. the PCI facing
side of the PCI host bridge (not PCIe root complex).
The ref. manual for the mpc8533 (as well as
mpc8540 and mpc8540) give the class code as
PCI_CLASS_PROCESSOR_POWERPC.
While the PCI_HEADER_TYPE field is oddly omitted,
the tables in the "PCI Configuration Header"
section shows a type 0 layout using all 6 BAR
registers (as 2x 32, and 2x 64 bit regions)
So 997505065dc92e533debf5cb23012ba4e673d387
seems to be in error. Although there was
perhaps some confusion as the mpc8533
has a separate PCIe root complex.
With PCIe, a root complex has PCI_HEADER_TYPE=1.
Neither the PCI host bridge, nor the PCIe
root complex advertise class PCI_CLASS_BRIDGE_PCI.
This was confusing Linux guests, which try
to interpret the host bridge as a pci-pci
bridge, but get confused and re-enumerate
the bus when the primary/secondary/subordinate
bus registers don't have valid values.
Signed-off-by: Michael Davidsaver <address@hidden>
Signed-off-by: David Gibson <address@hidden>
---
hw/pci-host/ppce500.c | 5 -----
1 file changed, 5 deletions(-)
diff --git a/hw/pci-host/ppce500.c b/hw/pci-host/ppce500.c
index 39cd24464d..279badc894 100644
--- a/hw/pci-host/ppce500.c
+++ b/hw/pci-host/ppce500.c
@@ -423,11 +423,6 @@ static void e500_pcihost_bridge_realize(PCIDevice *d,
Error **errp)
PPCE500CCSRState *ccsr = CCSR(container_get(qdev_get_machine(),
"/e500-ccsr"));
- pci_config_set_class(d->config, PCI_CLASS_BRIDGE_PCI);
- d->config[PCI_HEADER_TYPE] =
- (d->config[PCI_HEADER_TYPE] & PCI_HEADER_TYPE_MULTI_FUNCTION) |
- PCI_HEADER_TYPE_BRIDGE;
-
memory_region_init_alias(&b->bar0, OBJECT(ccsr), "e500-pci-bar0",
&ccsr->ccsr_space,
0, int128_get64(ccsr->ccsr_space.size));
pci_register_bar(d, 0, PCI_BASE_ADDRESS_SPACE_MEMORY, &b->bar0);
--
2.14.3
- [Qemu-ppc] [PULL 00/24] ppc-for-2.12 queue 20171215, David Gibson, 2017/12/15
- [Qemu-ppc] [PULL 01/24] target/ppc: Use tcg_gen_lookup_and_goto_ptr, David Gibson, 2017/12/15
- [Qemu-ppc] [PULL 02/24] ppc/xics: remove useless if condition, David Gibson, 2017/12/15
- [Qemu-ppc] [PULL 03/24] spapr: Add pseries-2.12 machine type, David Gibson, 2017/12/15
- [Qemu-ppc] [PULL 10/24] spapr/rtas: disable the decrementer interrupt when a CPU is unplugged, David Gibson, 2017/12/15
- [Qemu-ppc] [PULL 04/24] spapr_cpu_core: instantiate CPUs separately, David Gibson, 2017/12/15
- [Qemu-ppc] [PULL 11/24] spapr/rtas: fix reboot of a a SMP TCG guest, David Gibson, 2017/12/15
- [Qemu-ppc] [PULL 09/24] e500: fix pci host bridge class/type,
David Gibson <=
- [Qemu-ppc] [PULL 16/24] spapr: introduce a spapr_irq_set_lsi() helper, David Gibson, 2017/12/15
- [Qemu-ppc] [PULL 23/24] spapr: Assume msi_nonbroken, David Gibson, 2017/12/15
- [Qemu-ppc] [PULL 12/24] spapr/rtas: do not reset the MSR in stop-self command, David Gibson, 2017/12/15
- [Qemu-ppc] [PULL 14/24] ppc/xics: assign of the CPU 'intc' pointer under the core, David Gibson, 2017/12/15
- [Qemu-ppc] [PULL 07/24] pcc: define the Power-saving mode Exit Cause Enable bits in PowerPCCPUClass, David Gibson, 2017/12/15
- [Qemu-ppc] [PULL 13/24] ppc/xics: introduce an icp_create() helper, David Gibson, 2017/12/15
- [Qemu-ppc] [PULL 17/24] spapr: introduce a spapr_qirq() helper, David Gibson, 2017/12/15
- [Qemu-ppc] [PULL 18/24] spapr: replace numa_get_node() with lookup in pc-dimm list, David Gibson, 2017/12/15
- [Qemu-ppc] [PULL 21/24] target/ppc: introduce the PPC_BIT() macro, David Gibson, 2017/12/15
- [Qemu-ppc] [PULL 08/24] openpic: debug w/ info_report(), David Gibson, 2017/12/15