|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] RFC: [PATCH 1/3] Enhance platform support for PCI
On Thu, 26 Feb 2015, Ian Campbell wrote:
> On Thu, 2015-02-26 at 15:39 +0530, Manish Jaggi wrote:
> > Have you reached a conclusion?
>
> My current thinking on how PCI for Xen on ARM should look is thus:
>
> xen/arch/arm/pci.c:
>
> New file, containing core PCI infrastructure for ARM. Includes:
>
> pci_hostbridge_register(), which registers a host bridge:
>
> Registration includes:
> DT node pointer
>
> CFG space address
>
> pci_hostbridge_ops function table, which
> contains e.g. cfg space read/write ops, perhaps
> other stuff).
>
> Function for setting the (segment,bus) for a given host bridge.
> Lets say pci_hostbridge_setup(), the host bridge must have been
> previously registered. Looks up the host bridge via CFG space
> address and maps that to (segment,bus).
>
> Functions for looking up host bridges by various keys as needed
> (cfg base address, DT node, etc)
>
> pci_init() function, called from somewhere appropriate in
> setup.c which calls device_init(node, DEVICE_PCIHOST, NULL) (see
> gic_init() for the shape of this)
>
> Any other common helper functions for managing PCI devices, e.g.
> for implementing PHYSDEVOP_*, which cannot be made properly
> common (i.e. shared with x86).
>
> xen/drivers/pci/host-*.c (or pci/host/*.c):
>
> New files, one per supported PCI controller IP block. Each
> should use the normal DT_DEVICE infrastructure for probing,
> i.e.:
> DT_DEVICE_START(foo, "FOO", DEVICE_PCIHOST)
>
> Probe function should call pci_hostbridge_register() for each
> host bridge which the controller exposes.
>
> xen/arch/arm/physdev.c:
>
> Implements do_physdev_op handling PHYSDEVOP_*. Includes:
>
> New hypercall subop PHYSDEVOP_pci_host_bridge_add:
>
> As per 1424703761.27930.140.camel@xxxxxxxxxx> which
> calls pci_hostbridge_setup() to map the (segment,bus) to
> a specific pci_hostbridge_ops (i.e. must have previously
> been registered with pci_hostbridge_register(), else
> error).
I think that the new hypercall is unnecessary. We know the MMCFG address
ranges belonging to a given host bridge from DT and
PHYSDEVOP_pci_mmcfg_reserved gives us segment, start_bus and end_bus for
a specific MMCFG. We don't need anything else: we can simply match the
host bridge based on the MMCFG address that dom0 tells us via
PHYSDEVOP_pci_mmcfg_reserved with the addresses on DT.
But we do need to support PHYSDEVOP_pci_mmcfg_reserved on ARM.
> PHYSDEVOP_pci_device_add/remove: Implement existing hypercall
> interface used by x86 for ARM.
>
> This requires that PHYSDEVOP_pci_host_bridge_add has
> been called for the (segment,bus) which it refers to,
> otherwise error.
>
> Looks up the host bridge and does whatever setup is
> required plus e.g. calling of pci_add_device().
>
> No doubt various other existing interfaces will need wiring up, e.g.
> pci_conf_{read,write}* should lookup the host bridge ops struct and call
> the associated method.
>
> I'm sure the above must be incomplete, but I hope the general shape
> makes sense?
I think it makes sense and it is along the lines of what I was thinking
too.
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |