mirror of
https://github.com/u-boot/u-boot.git
synced 2025-05-08 19:11:53 +00:00
RFC: arm: pci: Add PCI cam support to PCI-E ecam driver
When booting U-Boot in crosvm, the virtual machine emulates a PCI cam device, not the PCI-E 'ecam' device normally seen on e.g. QEMU. This PCI device can be supported with only trivial changes to the ecam driver. Instead of adding a completely new driver which is identical besides the initialization step, add support for the PCI version to the existing driver. Signed-off-by: Alistair Delva <adelva@google.com> Cc: Tuomas Tynkkynen <tuomas.tynkkynen@iki.fi> Cc: Ram Muthiah <rammuthiah@google.com>
This commit is contained in:
parent
e3cdc2cbb1
commit
4f2e228086
1 changed files with 12 additions and 3 deletions
|
@ -14,6 +14,8 @@
|
||||||
|
|
||||||
#include <asm/io.h>
|
#include <asm/io.h>
|
||||||
|
|
||||||
|
#define TYPE_PCI 0x1
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* struct generic_ecam_pcie - generic_ecam PCIe controller state
|
* struct generic_ecam_pcie - generic_ecam PCIe controller state
|
||||||
* @cfg_base: The base address of memory mapped configuration space
|
* @cfg_base: The base address of memory mapped configuration space
|
||||||
|
@ -46,8 +48,14 @@ static int pci_generic_ecam_conf_address(const struct udevice *bus,
|
||||||
void *addr;
|
void *addr;
|
||||||
|
|
||||||
addr = pcie->cfg_base;
|
addr = pcie->cfg_base;
|
||||||
addr += PCIE_ECAM_OFFSET(PCI_BUS(bdf) - pcie->first_busno,
|
|
||||||
PCI_DEV(bdf), PCI_FUNC(bdf), offset);
|
if (dev_get_driver_data(bus) == TYPE_PCI) {
|
||||||
|
addr += ((PCI_BUS(bdf) - pcie->first_busno) << 16) |
|
||||||
|
(PCI_DEV(bdf) << 11) | (PCI_FUNC(bdf) << 8) | offset;
|
||||||
|
} else {
|
||||||
|
addr += PCIE_ECAM_OFFSET(PCI_BUS(bdf) - pcie->first_busno,
|
||||||
|
PCI_DEV(bdf), PCI_FUNC(bdf), offset);
|
||||||
|
}
|
||||||
*paddress = addr;
|
*paddress = addr;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -156,7 +164,8 @@ static const struct dm_pci_ops pci_generic_ecam_ops = {
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct udevice_id pci_generic_ecam_ids[] = {
|
static const struct udevice_id pci_generic_ecam_ids[] = {
|
||||||
{ .compatible = "pci-host-ecam-generic" },
|
{ .compatible = "pci-host-ecam-generic" /* PCI-E */ },
|
||||||
|
{ .compatible = "pci-host-cam-generic", .data = TYPE_PCI },
|
||||||
{ }
|
{ }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue