Re: [PATCH v7 2/3] PCI: Add support for PCI inbound windows resources

2017-06-01 Thread Oza Oza via iommu
On Thu, Jun 1, 2017 at 10:38 PM, Bjorn Helgaas  wrote:
> On Wed, May 31, 2017 at 11:17 AM, Oza Oza  wrote:
>> On Wed, May 31, 2017 at 4:12 AM, Bjorn Helgaas  wrote:
>>> On Mon, May 22, 2017 at 11:39 AM, Oza Pawandeep  
>>> wrote:
 This patch adds support for inbound memory window
 for PCI RC drivers.

 It defines new function pci_create_root_bus2 which
 takes inbound resources as an argument and fills in the
 memory resource to PCI internal host bridge structure
 as inbound_windows.

 Legacy RC driver could continue to use pci_create_root_bus,
 but any RC driver who wants to reseve IOVAS for their
 inbound memory holes, should use new API pci_create_root_bus2.

 Signed-off-by: Oza Pawandeep 
 ...
>>>
 +struct pci_bus *pci_create_root_bus2(struct device *parent, int bus,
 +   struct pci_ops *ops, void *sysdata, struct list_head 
 *resources,
 +   struct list_head *in_res)
 +{
 +   return pci_create_root_bus_msi(parent, bus, ops, sysdata,
 +  resources, in_res, NULL);
 +}
 +EXPORT_SYMBOL_GPL(pci_create_root_bus2);
>>>
>>> Based on your response to Lorenzo's "[RFC/RFT PATCH 03/18] PCI:
>>> Introduce pci_scan_root_bus_bridge()", I'm hoping you can avoid adding
>>> yet another variant of pci_create_root_bus().
>>>
>>> So I think I can wait for that to settle out and look for a v8?
>>>
>>> Bjorn
>>
>> Sure Bjorn, please wait for v8.
>>
>> But there is one more associated patch
>> [PATCH v7 1/3] OF/PCI: Export inbound memory interface to PCI RC
>> which basically aims to provide an interface to RC drivers for their
>> inbound resources.
>> RC driver already get their outbound resources from
>> of_pci_get_host_bridge_resources,
>> similar attempt for inbound dma-ranges.
>
> Not sure I understand.  Patch 1/3 adds of_pci_get_dma_ranges(), but
> none of the patches adds a caller, so I don't see the point of it yet.
>
> In general, if I'm expecting another revision of one patch in a
> series, I expect the next revision to include *all* the patches in the
> series.  I normally don't pick out and apply individual patches from
> the series.
>
> Bjorn

Yes, it does not get called by anybody, because it is supposed to be called
by RC drivers who want to reserve IOVAs, not all the PCI host bridge driver
might call it, but certainly iproc based PCI driver has to call it.

Then I will have PATCH v8, and with that, I will include PCI RC driver
patch calling it as well.
Thanks for the Review.

Regards,
Oza.
___
iommu mailing list
iommu@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/iommu


Re: [PATCH v7 2/3] PCI: Add support for PCI inbound windows resources

2017-06-01 Thread Bjorn Helgaas via iommu
On Wed, May 31, 2017 at 11:17 AM, Oza Oza  wrote:
> On Wed, May 31, 2017 at 4:12 AM, Bjorn Helgaas  wrote:
>> On Mon, May 22, 2017 at 11:39 AM, Oza Pawandeep  wrote:
>>> This patch adds support for inbound memory window
>>> for PCI RC drivers.
>>>
>>> It defines new function pci_create_root_bus2 which
>>> takes inbound resources as an argument and fills in the
>>> memory resource to PCI internal host bridge structure
>>> as inbound_windows.
>>>
>>> Legacy RC driver could continue to use pci_create_root_bus,
>>> but any RC driver who wants to reseve IOVAS for their
>>> inbound memory holes, should use new API pci_create_root_bus2.
>>>
>>> Signed-off-by: Oza Pawandeep 
>>> ...
>>
>>> +struct pci_bus *pci_create_root_bus2(struct device *parent, int bus,
>>> +   struct pci_ops *ops, void *sysdata, struct list_head 
>>> *resources,
>>> +   struct list_head *in_res)
>>> +{
>>> +   return pci_create_root_bus_msi(parent, bus, ops, sysdata,
>>> +  resources, in_res, NULL);
>>> +}
>>> +EXPORT_SYMBOL_GPL(pci_create_root_bus2);
>>
>> Based on your response to Lorenzo's "[RFC/RFT PATCH 03/18] PCI:
>> Introduce pci_scan_root_bus_bridge()", I'm hoping you can avoid adding
>> yet another variant of pci_create_root_bus().
>>
>> So I think I can wait for that to settle out and look for a v8?
>>
>> Bjorn
>
> Sure Bjorn, please wait for v8.
>
> But there is one more associated patch
> [PATCH v7 1/3] OF/PCI: Export inbound memory interface to PCI RC
> which basically aims to provide an interface to RC drivers for their
> inbound resources.
> RC driver already get their outbound resources from
> of_pci_get_host_bridge_resources,
> similar attempt for inbound dma-ranges.

Not sure I understand.  Patch 1/3 adds of_pci_get_dma_ranges(), but
none of the patches adds a caller, so I don't see the point of it yet.

In general, if I'm expecting another revision of one patch in a
series, I expect the next revision to include *all* the patches in the
series.  I normally don't pick out and apply individual patches from
the series.

Bjorn
___
iommu mailing list
iommu@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/iommu


Re: [PATCH v7 2/3] PCI: Add support for PCI inbound windows resources

2017-05-31 Thread Oza Oza via iommu
On Wed, May 31, 2017 at 4:12 AM, Bjorn Helgaas  wrote:
> On Mon, May 22, 2017 at 11:39 AM, Oza Pawandeep  wrote:
>> This patch adds support for inbound memory window
>> for PCI RC drivers.
>>
>> It defines new function pci_create_root_bus2 which
>> takes inbound resources as an argument and fills in the
>> memory resource to PCI internal host bridge structure
>> as inbound_windows.
>>
>> Legacy RC driver could continue to use pci_create_root_bus,
>> but any RC driver who wants to reseve IOVAS for their
>> inbound memory holes, should use new API pci_create_root_bus2.
>>
>> Signed-off-by: Oza Pawandeep 
>> ...
>
>> +struct pci_bus *pci_create_root_bus2(struct device *parent, int bus,
>> +   struct pci_ops *ops, void *sysdata, struct list_head 
>> *resources,
>> +   struct list_head *in_res)
>> +{
>> +   return pci_create_root_bus_msi(parent, bus, ops, sysdata,
>> +  resources, in_res, NULL);
>> +}
>> +EXPORT_SYMBOL_GPL(pci_create_root_bus2);
>
> Based on your response to Lorenzo's "[RFC/RFT PATCH 03/18] PCI:
> Introduce pci_scan_root_bus_bridge()", I'm hoping you can avoid adding
> yet another variant of pci_create_root_bus().
>
> So I think I can wait for that to settle out and look for a v8?
>
> Bjorn

Sure Bjorn, please wait for v8.

But there is one more associated patch
[PATCH v7 1/3] OF/PCI: Export inbound memory interface to PCI RC
which basically aims to provide an interface to RC drivers for their
inbound resources.
RC driver already get their outbound resources from
of_pci_get_host_bridge_resources,
similar attempt for inbound dma-ranges.

Thanking you for looking into this.

Regards,
Oza.
___
iommu mailing list
iommu@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/iommu


Re: [PATCH v7 2/3] PCI: Add support for PCI inbound windows resources

2017-05-30 Thread Bjorn Helgaas via iommu
On Mon, May 22, 2017 at 11:39 AM, Oza Pawandeep  wrote:
> This patch adds support for inbound memory window
> for PCI RC drivers.
>
> It defines new function pci_create_root_bus2 which
> takes inbound resources as an argument and fills in the
> memory resource to PCI internal host bridge structure
> as inbound_windows.
>
> Legacy RC driver could continue to use pci_create_root_bus,
> but any RC driver who wants to reseve IOVAS for their
> inbound memory holes, should use new API pci_create_root_bus2.
>
> Signed-off-by: Oza Pawandeep 
> ...

> +struct pci_bus *pci_create_root_bus2(struct device *parent, int bus,
> +   struct pci_ops *ops, void *sysdata, struct list_head 
> *resources,
> +   struct list_head *in_res)
> +{
> +   return pci_create_root_bus_msi(parent, bus, ops, sysdata,
> +  resources, in_res, NULL);
> +}
> +EXPORT_SYMBOL_GPL(pci_create_root_bus2);

Based on your response to Lorenzo's "[RFC/RFT PATCH 03/18] PCI:
Introduce pci_scan_root_bus_bridge()", I'm hoping you can avoid adding
yet another variant of pci_create_root_bus().

So I think I can wait for that to settle out and look for a v8?

Bjorn
___
iommu mailing list
iommu@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/iommu


[PATCH v7 2/3] PCI: Add support for PCI inbound windows resources

2017-05-22 Thread Oza Pawandeep via iommu
This patch adds support for inbound memory window
for PCI RC drivers.

It defines new function pci_create_root_bus2 which
takes inbound resources as an argument and fills in the
memory resource to PCI internal host bridge structure
as inbound_windows.

Legacy RC driver could continue to use pci_create_root_bus,
but any RC driver who wants to reseve IOVAS for their
inbound memory holes, should use new API pci_create_root_bus2.

Signed-off-by: Oza Pawandeep 

diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
index 19c8950..a95b9bb 100644
--- a/drivers/pci/probe.c
+++ b/drivers/pci/probe.c
@@ -531,6 +531,7 @@ struct pci_host_bridge *pci_alloc_host_bridge(size_t priv)
return NULL;
 
INIT_LIST_HEAD(&bridge->windows);
+   INIT_LIST_HEAD(&bridge->inbound_windows);
 
return bridge;
 }
@@ -726,6 +727,7 @@ int pci_register_host_bridge(struct pci_host_bridge *bridge)
struct pci_bus *bus, *b;
resource_size_t offset;
LIST_HEAD(resources);
+   LIST_HEAD(inbound_resources);
struct resource *res;
char addr[64], *fmt;
const char *name;
@@ -739,6 +741,8 @@ int pci_register_host_bridge(struct pci_host_bridge *bridge)
 
/* temporarily move resources off the list */
list_splice_init(&bridge->windows, &resources);
+   list_splice_init(&bridge->inbound_windows, &inbound_resources);
+
bus->sysdata = bridge->sysdata;
bus->msi = bridge->msi;
bus->ops = bridge->ops;
@@ -794,6 +798,10 @@ int pci_register_host_bridge(struct pci_host_bridge 
*bridge)
else
pr_info("PCI host bridge to bus %s\n", name);
 
+   /* Add inbound mem resource. */
+   resource_list_for_each_entry_safe(window, n, &inbound_resources)
+   list_move_tail(&window->node, &bridge->inbound_windows);
+
/* Add initial resources to the bus */
resource_list_for_each_entry_safe(window, n, &resources) {
list_move_tail(&window->node, &bridge->windows);
@@ -2300,7 +2308,8 @@ void __weak pcibios_remove_bus(struct pci_bus *bus)
 
 static struct pci_bus *pci_create_root_bus_msi(struct device *parent,
int bus, struct pci_ops *ops, void *sysdata,
-   struct list_head *resources, struct msi_controller *msi)
+   struct list_head *resources, struct list_head *in_res,
+   struct msi_controller *msi)
 {
int error;
struct pci_host_bridge *bridge;
@@ -2313,6 +2322,9 @@ static struct pci_bus *pci_create_root_bus_msi(struct 
device *parent,
bridge->dev.release = pci_release_host_bridge_dev;
 
list_splice_init(resources, &bridge->windows);
+   if (in_res)
+   list_splice_init(in_res, &bridge->inbound_windows);
+
bridge->sysdata = sysdata;
bridge->busnr = bus;
bridge->ops = ops;
@@ -2329,11 +2341,20 @@ static struct pci_bus *pci_create_root_bus_msi(struct 
device *parent,
return NULL;
 }
 
+struct pci_bus *pci_create_root_bus2(struct device *parent, int bus,
+   struct pci_ops *ops, void *sysdata, struct list_head *resources,
+   struct list_head *in_res)
+{
+   return pci_create_root_bus_msi(parent, bus, ops, sysdata,
+  resources, in_res, NULL);
+}
+EXPORT_SYMBOL_GPL(pci_create_root_bus2);
+
 struct pci_bus *pci_create_root_bus(struct device *parent, int bus,
struct pci_ops *ops, void *sysdata, struct list_head *resources)
 {
-   return pci_create_root_bus_msi(parent, bus, ops, sysdata, resources,
-  NULL);
+   return pci_create_root_bus_msi(parent, bus, ops, sysdata,
+  resources, NULL, NULL);
 }
 EXPORT_SYMBOL_GPL(pci_create_root_bus);
 
@@ -2415,7 +2436,8 @@ struct pci_bus *pci_scan_root_bus_msi(struct device 
*parent, int bus,
break;
}
 
-   b = pci_create_root_bus_msi(parent, bus, ops, sysdata, resources, msi);
+   b = pci_create_root_bus_msi(parent, bus, ops, sysdata,
+   resources, NULL, msi);
if (!b)
return NULL;
 
diff --git a/include/linux/pci.h b/include/linux/pci.h
index 33c2b0b..d2df107 100644
--- a/include/linux/pci.h
+++ b/include/linux/pci.h
@@ -432,6 +432,7 @@ struct pci_host_bridge {
void *sysdata;
int busnr;
struct list_head windows;   /* resource_entry */
+   struct list_head inbound_windows;   /* inbound memory */
void (*release_fn)(struct pci_host_bridge *);
void *release_data;
struct msi_controller *msi;
-- 
1.9.1

___
iommu mailing list
iommu@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/iommu