On Wed, Jun 03, 2009 at 01:41:34PM +0800, Yu Zhao wrote:
> PCIe Root Complex Integrated Endpoint does not implement ARI, so this
> kind of endpoint uses 3-bit function number. The function dependency
> link of the integrated endpoint should be calculated using the device
> number field in conjunction with the value from function dependency
> link register.
>
> Normal SR-IOV endpoint always implements ARI and the function dependency
> link register contains 8-bit function number (i.e. `devfn' from software
> perspective).
>
> Signed-off-by: Yu Zhao <yu.zhao@xxxxxxxxx>
> # HG changeset patch
> # User Yu Zhao <yu.zhao@xxxxxxxxx>
> # Date 1244007161 -28800
> # Node ID 3a959a6975152b741389d2eed1823d55be4f2889
> # Parent ec3442c2ed48eb11fcacd3fe31af48932f0a6645
> PCI: fix SR-IOV function dependency link problem
>
> PCIe Root Complex Integrated Endpoint does not implement ARI, so this
> kind of endpoint uses 3-bit function number. The function dependency
> link of the integrated endpoint should be calculated using the device
> number field in conjunction with the value from function dependency
> link register.
>
> Normal SR-IOV endpoint always implements ARI and the function dependency
> link register contains 8-bit function number (i.e. `devfn' from software
> perspective).
>
> Signed-off-by: Yu Zhao <yu.zhao@xxxxxxxxx>
>
> diff -r ec3442c2ed48 -r 3a959a697515 drivers/pci/iov.c
> --- a/drivers/pci/iov.c Wed Jun 03 13:30:08 2009 +0800
> +++ b/drivers/pci/iov.c Wed Jun 03 13:32:41 2009 +0800
> @@ -366,6 +366,8 @@
> iov->self = dev;
> pci_read_config_dword(dev, pos + PCI_SRIOV_CAP, &iov->cap);
> pci_read_config_byte(dev, pos + PCI_SRIOV_FUNC_LINK, &iov->link);
> + if (!dev->bus->number) /* Root Complex Integrated Endpoint */
> + iov->link = PCI_DEVFN(PCI_SLOT(dev->devfn), iov->link);
>
> if (pdev)
> iov->dev = pci_dev_get(pdev);
Possibly the above check may work.
But pci capability list should be examined.
something like
rpcap = pci_find_capability(pdev, PCI_CAP_ID_EXP);
if (!rpcap)
pci_read_config_word(pdev, rpcap + PCI_CAP_FLAGS, &cap);
if (cap == PCI_EXP_TYPE_RC_END)
...
thanks,
--
yamahata
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|