linux: disable PCI to PCI bridge

The presence of the PCI bridge introduces a regression when booting
OVMF:

  PciHostBridgeDxe: IntersectMemoryDescriptor: desc [0, A0000) type 2 cap
  800000000002600F conflicts with aperture [0, D0021000) cap 1

The root cause is that the bridge does not correctly populate the memory
base/limit and prefetchable memory base/limit PCI bridge configuration
registers.

For the short term, since this bridge is only needed for the PCI hotplug
feature that is not enabled yet, remove the creation of the bridge from
the startup code.  Fixing the bridge will be done in another commit to
keep this change small and easy to backport.

BUG=b:199442120
BUG=b:185084350
TEST=crosvm run --bios OVMF.fd

Change-Id: I91b2cc6628e320ac2403bd8b74d18ef5a26d7c0f
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3158942
Reviewed-by: Xiong  Zhang <xiong.y.zhang@intel.corp-partner.google.com>
Reviewed-by: Dennis Kempin <denniskempin@google.com>
Tested-by: kokoro <noreply+kokoro@google.com>
Commit-Queue: Daniel Verkamp <dverkamp@chromium.org>
This commit is contained in:
Daniel Verkamp 2021-09-13 13:34:34 -07:00 committed by Commit Bot
parent 70a71f8d89
commit 127a90ff3e

View file

@ -47,9 +47,8 @@ use devices::virtio::{
use devices::Ac97Dev;
use devices::ProtectionType;
use devices::{
self, HostHotPlugKey, IrqChip, IrqEventIndex, KvmKernelIrqChip, PciAddress, PciBridge,
PciDevice, PcieRootPort, VcpuRunState, VfioContainer, VfioDevice, VfioPciDevice,
VirtioPciDevice,
self, HostHotPlugKey, IrqChip, IrqEventIndex, KvmKernelIrqChip, PciAddress, PciDevice,
VcpuRunState, VfioContainer, VfioDevice, VfioPciDevice, VirtioPciDevice,
};
#[cfg(feature = "usb")]
use devices::{HostBackendDeviceProvider, XhciController};
@ -1649,14 +1648,6 @@ fn create_devices(
pci_devices.push((usb_controller, simple_jail(cfg, "xhci")?));
}
// Create Pcie Root Port
let pcie_root_port = Box::new(PcieRootPort::new());
let (msi_host_tube, msi_device_tube) = Tube::pair().map_err(Error::CreateTube)?;
control_tubes.push(TaggedControlTube::VmIrq(msi_host_tube));
let pci_bridge = Box::new(PciBridge::new(pcie_root_port, msi_device_tube));
// pcie root port is used in hotplug process only, so disable sandbox for it
pci_devices.push((pci_bridge, None));
if !cfg.vfio.is_empty() {
let mut iommu_attached_endpoints: BTreeMap<u32, Arc<Mutex<VfioContainer>>> =
BTreeMap::new();