linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH -v2 00/26] PCI, x86: Add for_each_res and addon resource support
@ 2012-03-19  5:48 Yinghai Lu
  2012-03-19  5:48 ` [PATCH -v2 01/26] PCI: Add pci_dev_resource_n() Yinghai Lu
                   ` (25 more replies)
  0 siblings, 26 replies; 27+ messages in thread
From: Yinghai Lu @ 2012-03-19  5:48 UTC (permalink / raw)
  To: Jesse Barnes, x86
  Cc: Bjorn Helgaas, Andrew Morton, Linus Torvalds, Greg Kroah-Hartman,
	linux-pci, linux-kernel, Yinghai Lu

Make device resource loop easier and readable.
Also add addon_resource support about non-stanard resources.

The patches need to apply to pci/for-linus and pci/linux-next
        [PATCH -v3] PCI: pci_host_bridge related cleanup
        [PATCH -v11] PCI: allocate pci bus num range for unassigned bridge busn
	[PATCH -v3] PCI, x86: pci root bus hotplug support

could get from
        git://git.kernel.org/pub/scm/linux/kernel/git/yinghai/linux-yinghai.git for-pci-for-each-res-addon

-v2: Split to small patches.

Thanks

Yinghai

Yinghai Lu (26):
  PCI: Add pci_dev_resource_n()
  PCI: Add for_each_resource helpers to make resource loop easier.
  PCI: Add pci_dev_resource_idx()
  PCI: Update pci_resource_start to use pci_dev_resource_n()
  x86, PCI: Use for_each_res with pci_allocate_bridge_resources
  x86, PCI: Use for_each_res with pci_allocate_dev_resources
  PCI: Use for_each_res with IOV releated funcs
  PCI, acpiphp: Use for_each_pci_dev_resource helper
  PCI, pciehp: Use for_each_pci_dev_resource helper
  PCI: Use for_each_pci_dev_resource pci_enable_dev
  PCI: Use for_each_pci_dev_resource pci_reassigndev
  PCI: Use for_each_res with pci bar reassign funcs
  PCI: Use for_each_res pci_assign_resource
  PCI: Use for_each_res with noassign_bars
  PCI: Use for_each_res pci bases pci_dev_driver()
  PCI: Use for_each_res pci release release
  PCI: Use for_each_res pci bases reading
  PCI: Use for_each_res with mrs
  PCI: Use for_each_res with xen pci
  PCI: Add addon_resource support for pci_dev
  PCI: Add helpers for add addon_resource
  PCI: Update pci_resource_bar() to support addon_resource
  PCI: Make assign/update resource to support addon_res
  PCI: Make piix4 quirk to use addon_resource support
  PCI: Make quirk_io_region to use addon_resource support
  PCI: Use addon_fixed_resource with ati fixed resource

 arch/x86/pci/common.c              |    3 +-
 arch/x86/pci/i386.c                |   57 +++-----
 arch/x86/pci/mrst.c                |    7 +-
 drivers/pci/hotplug/acpiphp_glue.c |    4 +-
 drivers/pci/hotplug/pciehp_hpc.c   |    5 +-
 drivers/pci/iov.c                  |   31 ++---
 drivers/pci/pci-driver.c           |    6 +-
 drivers/pci/pci.c                  |   28 +++--
 drivers/pci/probe.c                |  114 ++++++++++++++++-
 drivers/pci/quirks.c               |  256 +++++++++++++++++++++---------------
 drivers/pci/remove.c               |    5 +-
 drivers/pci/setup-bus.c            |   28 ++---
 drivers/pci/setup-res.c            |   38 ++++--
 drivers/pci/xen-pcifront.c         |    4 +-
 include/linux/pci.h                |   79 +++++++++++-
 15 files changed, 446 insertions(+), 219 deletions(-)

-- 
1.7.7


^ permalink raw reply	[flat|nested] 27+ messages in thread

* [PATCH -v2 01/26] PCI: Add pci_dev_resource_n()
  2012-03-19  5:48 [PATCH -v2 00/26] PCI, x86: Add for_each_res and addon resource support Yinghai Lu
@ 2012-03-19  5:48 ` Yinghai Lu
  2012-03-19  5:48 ` [PATCH -v2 02/26] PCI: Add for_each_resource helpers to make resource loop easier Yinghai Lu
                   ` (24 subsequent siblings)
  25 siblings, 0 replies; 27+ messages in thread
From: Yinghai Lu @ 2012-03-19  5:48 UTC (permalink / raw)
  To: Jesse Barnes, x86
  Cc: Bjorn Helgaas, Andrew Morton, Linus Torvalds, Greg Kroah-Hartman,
	linux-pci, linux-kernel, Yinghai Lu

Prepare to use it with addon_resource and for_each_resource macro.

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
---
 drivers/pci/probe.c |   10 ++++++++++
 include/linux/pci.h |    2 ++
 2 files changed, 12 insertions(+), 0 deletions(-)

diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
index d626c4e..87e87b5 100644
--- a/drivers/pci/probe.c
+++ b/drivers/pci/probe.c
@@ -75,6 +75,16 @@ static int __init pcibus_class_init(void)
 }
 postcore_initcall(pcibus_class_init);
 
+struct resource *pci_dev_resource_n(struct pci_dev *dev, int n)
+{
+	struct pci_dev_addon_resource *addon_res;
+
+	if (n < PCI_NUM_RESOURCES)
+		return &dev->resource[n];
+
+	return NULL;
+}
+
 static u64 pci_size(u64 base, u64 maxbase, u64 mask)
 {
 	u64 size = mask & maxbase;	/* Find the significant bits */
diff --git a/include/linux/pci.h b/include/linux/pci.h
index 161f6c0..bb81080 100644
--- a/include/linux/pci.h
+++ b/include/linux/pci.h
@@ -347,6 +347,8 @@ struct pci_dev {
 #endif
 };
 
+struct resource *pci_dev_resource_n(struct pci_dev *dev, int n);
+
 static inline struct pci_dev *pci_physfn(struct pci_dev *dev)
 {
 #ifdef CONFIG_PCI_IOV
-- 
1.7.7


^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH -v2 02/26] PCI: Add for_each_resource helpers to make resource loop easier.
  2012-03-19  5:48 [PATCH -v2 00/26] PCI, x86: Add for_each_res and addon resource support Yinghai Lu
  2012-03-19  5:48 ` [PATCH -v2 01/26] PCI: Add pci_dev_resource_n() Yinghai Lu
@ 2012-03-19  5:48 ` Yinghai Lu
  2012-03-19  5:48 ` [PATCH -v2 03/26] PCI: Add pci_dev_resource_idx() Yinghai Lu
                   ` (23 subsequent siblings)
  25 siblings, 0 replies; 27+ messages in thread
From: Yinghai Lu @ 2012-03-19  5:48 UTC (permalink / raw)
  To: Jesse Barnes, x86
  Cc: Bjorn Helgaas, Andrew Morton, Linus Torvalds, Greg Kroah-Hartman,
	linux-pci, linux-kernel, Yinghai Lu

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
---
 include/linux/pci.h |   49 +++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 49 insertions(+), 0 deletions(-)

diff --git a/include/linux/pci.h b/include/linux/pci.h
index bb81080..2b1fff8 100644
--- a/include/linux/pci.h
+++ b/include/linux/pci.h
@@ -349,6 +349,55 @@ struct pci_dev {
 
 struct resource *pci_dev_resource_n(struct pci_dev *dev, int n);
 
+#define resno_is_for_bridge(n)						\
+	((n) >= PCI_BRIDGE_RESOURCES && (n) <= PCI_BRIDGE_RESOURCE_END)
+
+/* all (include bridge) resources */
+#define for_each_pci_dev_all_resource(dev, res, i)			\
+	for (i = 0;							\
+	     (res = pci_dev_resource_n(dev, i)) || i < PCI_NUM_RESOURCES; \
+	     i++)
+/* exclude bridge resources */
+#define for_each_pci_dev_nobridge_resource(dev, res, i)			\
+	for (i = 0;							\
+	     (res = pci_dev_resource_n(dev, i)) || i < PCI_NUM_RESOURCES; \
+	     i = (i != (PCI_BRIDGE_RESOURCES - 1)) ? (i+1) : PCI_NUM_RESOURCES)
+/* exclude bridge and IOV resources */
+#define for_each_pci_dev_base_resource(dev, res, i)			\
+	for (i = 0;							\
+	     (res = pci_dev_resource_n(dev, i)) || i < PCI_NUM_RESOURCES; \
+	     i = (i != PCI_ROM_RESOURCE) ? (i+1) : PCI_NUM_RESOURCES)
+/* exclude ROM and bridge and IOV resources */
+#define for_each_pci_dev_base_norom_resource(dev, res, i)		\
+	for (i = 0;							\
+	     (res = pci_dev_resource_n(dev, i)) || i < PCI_NUM_RESOURCES; \
+	     i = (i != (PCI_ROM_RESOURCE-1)) ? (i+1) : PCI_NUM_RESOURCES)
+/* exclude IOV resources */
+#define for_each_pci_dev_noiov_resource(dev, res, i)			\
+	for (i = 0;							\
+	     (res = pci_dev_resource_n(dev, i)) || i < PCI_NUM_RESOURCES; \
+	     i = (i != PCI_ROM_RESOURCE) ? (i+1) : PCI_BRIDGE_RESOURCES)
+/* only std resources */
+#define for_each_pci_dev_std_resource(dev, res, i)			\
+	for (i = PCI_STD_RESOURCES;					\
+	   (res = pci_dev_resource_n(dev, i)) && i < (PCI_STD_RESOURCE_END+1); \
+	     i++)
+/* only IOV resources */
+#define for_each_pci_dev_iov_resource(dev, res, i)			\
+	for (i = PCI_IOV_RESOURCES;					\
+	   (res = pci_dev_resource_n(dev, i)) && i < (PCI_IOV_RESOURCE_END+1); \
+	     i++)
+/* only bridge resources */
+#define for_each_pci_dev_bridge_resource(dev, res, i)			\
+	for (i = PCI_BRIDGE_RESOURCES;					\
+	(res = pci_dev_resource_n(dev, i)) && i < (PCI_BRIDGE_RESOURCE_END+1); \
+	     i++)
+/* only addon resources */
+#define for_each_pci_dev_addon_resource(dev, res, i)			\
+	for (i = PCI_NUM_RESOURCES;					\
+	     (res = pci_dev_resource_n(dev, i));			\
+	     i++)
+
 static inline struct pci_dev *pci_physfn(struct pci_dev *dev)
 {
 #ifdef CONFIG_PCI_IOV
-- 
1.7.7


^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH -v2 03/26] PCI: Add pci_dev_resource_idx()
  2012-03-19  5:48 [PATCH -v2 00/26] PCI, x86: Add for_each_res and addon resource support Yinghai Lu
  2012-03-19  5:48 ` [PATCH -v2 01/26] PCI: Add pci_dev_resource_n() Yinghai Lu
  2012-03-19  5:48 ` [PATCH -v2 02/26] PCI: Add for_each_resource helpers to make resource loop easier Yinghai Lu
@ 2012-03-19  5:48 ` Yinghai Lu
  2012-03-19  5:48 ` [PATCH -v2 04/26] PCI: Update pci_resource_start to use pci_dev_resource_n() Yinghai Lu
                   ` (22 subsequent siblings)
  25 siblings, 0 replies; 27+ messages in thread
From: Yinghai Lu @ 2012-03-19  5:48 UTC (permalink / raw)
  To: Jesse Barnes, x86
  Cc: Bjorn Helgaas, Andrew Morton, Linus Torvalds, Greg Kroah-Hartman,
	linux-pci, linux-kernel, Yinghai Lu

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
---
 drivers/pci/probe.c |   12 ++++++++++++
 include/linux/pci.h |    1 +
 2 files changed, 13 insertions(+), 0 deletions(-)

diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
index 87e87b5..7d5550a 100644
--- a/drivers/pci/probe.c
+++ b/drivers/pci/probe.c
@@ -85,6 +85,18 @@ struct resource *pci_dev_resource_n(struct pci_dev *dev, int n)
 	return NULL;
 }
 
+int pci_dev_resource_idx(struct pci_dev *dev, struct resource *res)
+{
+	int i;
+	struct resource *r;
+
+	for_each_pci_dev_all_resource(dev, r, i)
+		if (r == res)
+			return i;
+
+	return -1;
+}
+
 static u64 pci_size(u64 base, u64 maxbase, u64 mask)
 {
 	u64 size = mask & maxbase;	/* Find the significant bits */
diff --git a/include/linux/pci.h b/include/linux/pci.h
index 2b1fff8..e3f9ae1 100644
--- a/include/linux/pci.h
+++ b/include/linux/pci.h
@@ -348,6 +348,7 @@ struct pci_dev {
 };
 
 struct resource *pci_dev_resource_n(struct pci_dev *dev, int n);
+int pci_dev_resource_idx(struct pci_dev *dev, struct resource *res);
 
 #define resno_is_for_bridge(n)						\
 	((n) >= PCI_BRIDGE_RESOURCES && (n) <= PCI_BRIDGE_RESOURCE_END)
-- 
1.7.7


^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH -v2 04/26] PCI: Update pci_resource_start to use pci_dev_resource_n()
  2012-03-19  5:48 [PATCH -v2 00/26] PCI, x86: Add for_each_res and addon resource support Yinghai Lu
                   ` (2 preceding siblings ...)
  2012-03-19  5:48 ` [PATCH -v2 03/26] PCI: Add pci_dev_resource_idx() Yinghai Lu
@ 2012-03-19  5:48 ` Yinghai Lu
  2012-03-19  5:48 ` [PATCH -v2 05/26] x86, PCI: Use for_each_res with pci_allocate_bridge_resources Yinghai Lu
                   ` (21 subsequent siblings)
  25 siblings, 0 replies; 27+ messages in thread
From: Yinghai Lu @ 2012-03-19  5:48 UTC (permalink / raw)
  To: Jesse Barnes, x86
  Cc: Bjorn Helgaas, Andrew Morton, Linus Torvalds, Greg Kroah-Hartman,
	linux-pci, linux-kernel, Yinghai Lu

instead of use resource[bar], to prepare for addon resource usages.

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
---
 include/linux/pci.h |    6 +++---
 1 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/include/linux/pci.h b/include/linux/pci.h
index e3f9ae1..c7a2806 100644
--- a/include/linux/pci.h
+++ b/include/linux/pci.h
@@ -1400,9 +1400,9 @@ static inline int pci_domain_nr(struct pci_bus *bus)
 
 /* these helpers provide future and backwards compatibility
  * for accessing popular PCI BAR info */
-#define pci_resource_start(dev, bar)	((dev)->resource[(bar)].start)
-#define pci_resource_end(dev, bar)	((dev)->resource[(bar)].end)
-#define pci_resource_flags(dev, bar)	((dev)->resource[(bar)].flags)
+#define pci_resource_start(dev, bar)	(pci_dev_resource_n(dev, (bar))->start)
+#define pci_resource_end(dev, bar)	(pci_dev_resource_n(dev, (bar))->end)
+#define pci_resource_flags(dev, bar)	(pci_dev_resource_n(dev, (bar))->flags)
 #define pci_resource_len(dev,bar) \
 	((pci_resource_start((dev), (bar)) == 0 &&	\
 	  pci_resource_end((dev), (bar)) ==		\
-- 
1.7.7


^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH -v2 05/26] x86, PCI: Use for_each_res with pci_allocate_bridge_resources
  2012-03-19  5:48 [PATCH -v2 00/26] PCI, x86: Add for_each_res and addon resource support Yinghai Lu
                   ` (3 preceding siblings ...)
  2012-03-19  5:48 ` [PATCH -v2 04/26] PCI: Update pci_resource_start to use pci_dev_resource_n() Yinghai Lu
@ 2012-03-19  5:48 ` Yinghai Lu
  2012-03-19  5:48 ` [PATCH -v2 06/26] x86, PCI: Use for_each_res with pci_allocate_dev_resources Yinghai Lu
                   ` (20 subsequent siblings)
  25 siblings, 0 replies; 27+ messages in thread
From: Yinghai Lu @ 2012-03-19  5:48 UTC (permalink / raw)
  To: Jesse Barnes, x86
  Cc: Bjorn Helgaas, Andrew Morton, Linus Torvalds, Greg Kroah-Hartman,
	linux-pci, linux-kernel, Yinghai Lu

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
---
 arch/x86/pci/i386.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/arch/x86/pci/i386.c b/arch/x86/pci/i386.c
index e1ff375..570197e 100644
--- a/arch/x86/pci/i386.c
+++ b/arch/x86/pci/i386.c
@@ -198,7 +198,7 @@ static void pcibios_allocate_bridge_resources(struct pci_dev *dev)
 	int idx;
 	struct resource *r;
 
-	for (idx = PCI_BRIDGE_RESOURCES; idx < PCI_NUM_RESOURCES; idx++) {
+	for_each_pci_dev_bridge_resource(dev, r, idx) {
 		r = &dev->resource[idx];
 		if (r->parent)	/* Already allocated */
 			continue;
-- 
1.7.7


^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH -v2 06/26] x86, PCI: Use for_each_res with pci_allocate_dev_resources
  2012-03-19  5:48 [PATCH -v2 00/26] PCI, x86: Add for_each_res and addon resource support Yinghai Lu
                   ` (4 preceding siblings ...)
  2012-03-19  5:48 ` [PATCH -v2 05/26] x86, PCI: Use for_each_res with pci_allocate_bridge_resources Yinghai Lu
@ 2012-03-19  5:48 ` Yinghai Lu
  2012-03-19  5:48 ` [PATCH -v2 07/26] PCI: Use for_each_res with IOV releated funcs Yinghai Lu
                   ` (19 subsequent siblings)
  25 siblings, 0 replies; 27+ messages in thread
From: Yinghai Lu @ 2012-03-19  5:48 UTC (permalink / raw)
  To: Jesse Barnes, x86
  Cc: Bjorn Helgaas, Andrew Morton, Linus Torvalds, Greg Kroah-Hartman,
	linux-pci, linux-kernel, Yinghai Lu

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
---
 arch/x86/pci/i386.c |   55 ++++++++++++++++++--------------------------------
 1 files changed, 20 insertions(+), 35 deletions(-)

diff --git a/arch/x86/pci/i386.c b/arch/x86/pci/i386.c
index 570197e..83befee 100644
--- a/arch/x86/pci/i386.c
+++ b/arch/x86/pci/i386.c
@@ -228,49 +228,34 @@ static void pcibios_allocate_bus_resources(struct pci_bus *bus)
 		pcibios_allocate_bus_resources(child);
 }
 
-struct pci_check_idx_range {
-	int start;
-	int end;
-};
-
 static void pcibios_allocate_dev_resources(struct pci_dev *dev, int pass)
 {
-	int idx, disabled, i;
+	int idx, disabled;
 	u16 command;
 	struct resource *r;
 
-	struct pci_check_idx_range idx_range[] = {
-		{ PCI_STD_RESOURCES, PCI_STD_RESOURCE_END },
-#ifdef CONFIG_PCI_IOV
-		{ PCI_IOV_RESOURCES, PCI_IOV_RESOURCE_END },
-#endif
-	};
-
 	pci_read_config_word(dev, PCI_COMMAND, &command);
-	for (i = 0; i < ARRAY_SIZE(idx_range); i++)
-		for (idx = idx_range[i].start; idx <= idx_range[i].end; idx++) {
-			r = &dev->resource[idx];
-			if (r->parent)	/* Already allocated */
-				continue;
-			if (!r->start)	/* Address not assigned at all */
-				continue;
-			if (r->flags & IORESOURCE_IO)
-				disabled = !(command & PCI_COMMAND_IO);
-			else
-				disabled = !(command & PCI_COMMAND_MEMORY);
-			if (pass == disabled) {
-				dev_dbg(&dev->dev,
-					"BAR %d: reserving %pr (d=%d, p=%d)\n",
-					idx, r, disabled, pass);
-				if (pci_claim_resource(dev, idx) < 0) {
-					/* We'll assign a new address later */
-					pcibios_save_fw_addr(dev,
-							idx, r->start);
-					r->end -= r->start;
-					r->start = 0;
-				}
+	for_each_pci_dev_base_norom_resource(dev, r, idx) {
+		if (r->parent)	/* Already allocated */
+			continue;
+		if (!r->start)	/* Address not assigned at all */
+			continue;
+		if (r->flags & IORESOURCE_IO)
+			disabled = !(command & PCI_COMMAND_IO);
+		else
+			disabled = !(command & PCI_COMMAND_MEMORY);
+		if (pass == disabled) {
+			dev_dbg(&dev->dev,
+				"BAR %d: reserving %pr (d=%d, p=%d)\n",
+				idx, r, disabled, pass);
+			if (pci_claim_resource(dev, idx) < 0) {
+				/* We'll assign a new address later */
+				pcibios_save_fw_addr(dev, idx, r->start);
+				r->end -= r->start;
+				r->start = 0;
 			}
 		}
+	}
 	if (!pass) {
 		r = &dev->resource[PCI_ROM_RESOURCE];
 		if (r->flags & IORESOURCE_ROM_ENABLE) {
-- 
1.7.7


^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH -v2 07/26] PCI: Use for_each_res with IOV releated funcs
  2012-03-19  5:48 [PATCH -v2 00/26] PCI, x86: Add for_each_res and addon resource support Yinghai Lu
                   ` (5 preceding siblings ...)
  2012-03-19  5:48 ` [PATCH -v2 06/26] x86, PCI: Use for_each_res with pci_allocate_dev_resources Yinghai Lu
@ 2012-03-19  5:48 ` Yinghai Lu
  2012-03-19  5:48 ` [PATCH -v2 08/26] PCI, acpiphp: Use for_each_pci_dev_resource helper Yinghai Lu
                   ` (18 subsequent siblings)
  25 siblings, 0 replies; 27+ messages in thread
From: Yinghai Lu @ 2012-03-19  5:48 UTC (permalink / raw)
  To: Jesse Barnes, x86
  Cc: Bjorn Helgaas, Andrew Morton, Linus Torvalds, Greg Kroah-Hartman,
	linux-pci, linux-kernel, Yinghai Lu

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
---
 drivers/pci/iov.c |   31 +++++++++++++++----------------
 1 files changed, 15 insertions(+), 16 deletions(-)

diff --git a/drivers/pci/iov.c b/drivers/pci/iov.c
index 6554e1a..f015764 100644
--- a/drivers/pci/iov.c
+++ b/drivers/pci/iov.c
@@ -99,17 +99,20 @@ static int virtfn_add(struct pci_dev *dev, int id, int reset)
 	pci_setup_device(virtfn);
 	virtfn->dev.parent = dev->dev.parent;
 
-	for (i = 0; i < PCI_SRIOV_NUM_BARS; i++) {
-		res = dev->resource + PCI_IOV_RESOURCES + i;
+	for_each_pci_dev_iov_resource(dev, res, i) {
+		struct resource *virtfn_res;
+
 		if (!res->parent)
 			continue;
-		virtfn->resource[i].name = pci_name(virtfn);
-		virtfn->resource[i].flags = res->flags;
+
+		virtfn_res = pci_dev_resource_n(virtfn, i - PCI_IOV_RESOURCES);
+		virtfn_res->name = pci_name(virtfn);
+		virtfn_res->flags = res->flags;
 		size = resource_size(res);
 		do_div(size, iov->total);
-		virtfn->resource[i].start = res->start + size * id;
-		virtfn->resource[i].end = virtfn->resource[i].start + size - 1;
-		rc = request_resource(res, &virtfn->resource[i]);
+		virtfn_res->start = res->start + size * id;
+		virtfn_res->end = virtfn_res->start + size - 1;
+		rc = request_resource(res, virtfn_res);
 		BUG_ON(rc);
 	}
 
@@ -313,9 +316,8 @@ static int sriov_enable(struct pci_dev *dev, int nr_virtfn)
 		return -EIO;
 
 	nres = 0;
-	for (i = 0; i < PCI_SRIOV_NUM_BARS; i++) {
-		bars |= (1 << (i + PCI_IOV_RESOURCES));
-		res = dev->resource + PCI_IOV_RESOURCES + i;
+	for_each_pci_dev_iov_resource(dev, res, i) {
+		bars |= 1 << i;
 		if (res->parent)
 			nres++;
 	}
@@ -473,10 +475,9 @@ found:
 	pci_write_config_dword(dev, pos + PCI_SRIOV_SYS_PGSIZE, pgsz);
 
 	nres = 0;
-	for (i = 0; i < PCI_SRIOV_NUM_BARS; i++) {
-		res = dev->resource + PCI_IOV_RESOURCES + i;
+	for_each_pci_dev_iov_resource(dev, res, i) {
 		i += __pci_read_base(dev, pci_bar_unknown, res,
-				     pos + PCI_SRIOV_BAR + i * 4);
+			     pos + PCI_SRIOV_BAR + (i - PCI_IOV_RESOURCES) * 4);
 		if (!res->flags)
 			continue;
 		if (resource_size(res) & (PAGE_SIZE - 1)) {
@@ -519,10 +520,8 @@ found:
 	return 0;
 
 failed:
-	for (i = 0; i < PCI_SRIOV_NUM_BARS; i++) {
-		res = dev->resource + PCI_IOV_RESOURCES + i;
+	for_each_pci_dev_iov_resource(dev, res, i)
 		res->flags = 0;
-	}
 
 	return rc;
 }
-- 
1.7.7


^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH -v2 08/26] PCI, acpiphp: Use for_each_pci_dev_resource helper
  2012-03-19  5:48 [PATCH -v2 00/26] PCI, x86: Add for_each_res and addon resource support Yinghai Lu
                   ` (6 preceding siblings ...)
  2012-03-19  5:48 ` [PATCH -v2 07/26] PCI: Use for_each_res with IOV releated funcs Yinghai Lu
@ 2012-03-19  5:48 ` Yinghai Lu
  2012-03-19  5:48 ` [PATCH -v2 09/26] PCI, pciehp: " Yinghai Lu
                   ` (17 subsequent siblings)
  25 siblings, 0 replies; 27+ messages in thread
From: Yinghai Lu @ 2012-03-19  5:48 UTC (permalink / raw)
  To: Jesse Barnes, x86
  Cc: Bjorn Helgaas, Andrew Morton, Linus Torvalds, Greg Kroah-Hartman,
	linux-pci, linux-kernel, Yinghai Lu

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
---
 drivers/pci/hotplug/acpiphp_glue.c |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/pci/hotplug/acpiphp_glue.c b/drivers/pci/hotplug/acpiphp_glue.c
index 9d781a7..90e68670d 100644
--- a/drivers/pci/hotplug/acpiphp_glue.c
+++ b/drivers/pci/hotplug/acpiphp_glue.c
@@ -1025,10 +1025,10 @@ static void acpiphp_sanitize_bus(struct pci_bus *bus)
 	struct pci_dev *dev;
 	int i;
 	unsigned long type_mask = IORESOURCE_IO | IORESOURCE_MEM;
+	struct resource *res;
 
 	list_for_each_entry(dev, &bus->devices, bus_list) {
-		for (i=0; i<PCI_BRIDGE_RESOURCES; i++) {
-			struct resource *res = &dev->resource[i];
+		for_each_pci_dev_nobridge_resource(dev, res, i) {
 			if ((res->flags & type_mask) && !res->start &&
 					res->end) {
 				/* Could not assign a required resources
-- 
1.7.7


^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH -v2 09/26] PCI, pciehp: Use for_each_pci_dev_resource helper
  2012-03-19  5:48 [PATCH -v2 00/26] PCI, x86: Add for_each_res and addon resource support Yinghai Lu
                   ` (7 preceding siblings ...)
  2012-03-19  5:48 ` [PATCH -v2 08/26] PCI, acpiphp: Use for_each_pci_dev_resource helper Yinghai Lu
@ 2012-03-19  5:48 ` Yinghai Lu
  2012-03-19  5:48 ` [PATCH -v2 10/26] PCI: Use for_each_pci_dev_resource pci_enable_dev Yinghai Lu
                   ` (16 subsequent siblings)
  25 siblings, 0 replies; 27+ messages in thread
From: Yinghai Lu @ 2012-03-19  5:48 UTC (permalink / raw)
  To: Jesse Barnes, x86
  Cc: Bjorn Helgaas, Andrew Morton, Linus Torvalds, Greg Kroah-Hartman,
	linux-pci, linux-kernel, Yinghai Lu

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
---
 drivers/pci/hotplug/pciehp_hpc.c |    5 +++--
 1 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/drivers/pci/hotplug/pciehp_hpc.c b/drivers/pci/hotplug/pciehp_hpc.c
index a960fae..ef10429 100644
--- a/drivers/pci/hotplug/pciehp_hpc.c
+++ b/drivers/pci/hotplug/pciehp_hpc.c
@@ -899,6 +899,7 @@ static inline void dbg_ctrl(struct controller *ctrl)
 	int i;
 	u16 reg16;
 	struct pci_dev *pdev = ctrl->pcie->port;
+	struct resource *res;
 
 	if (!pciehp_debug)
 		return;
@@ -914,11 +915,11 @@ static inline void dbg_ctrl(struct controller *ctrl)
 		  pdev->subsystem_vendor);
 	ctrl_info(ctrl, "  PCIe Cap offset      : 0x%02x\n",
 		  pci_pcie_cap(pdev));
-	for (i = 0; i < DEVICE_COUNT_RESOURCE; i++) {
+	for_each_pci_dev_all_resource(pdev, res, i) {
 		if (!pci_resource_len(pdev, i))
 			continue;
 		ctrl_info(ctrl, "  PCI resource [%d]     : %pR\n",
-			  i, &pdev->resource[i]);
+			  i, res);
 	}
 	ctrl_info(ctrl, "Slot Capabilities      : 0x%08x\n", ctrl->slot_cap);
 	ctrl_info(ctrl, "  Physical Slot Number : %d\n", PSN(ctrl));
-- 
1.7.7


^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH -v2 10/26] PCI: Use for_each_pci_dev_resource pci_enable_dev
  2012-03-19  5:48 [PATCH -v2 00/26] PCI, x86: Add for_each_res and addon resource support Yinghai Lu
                   ` (8 preceding siblings ...)
  2012-03-19  5:48 ` [PATCH -v2 09/26] PCI, pciehp: " Yinghai Lu
@ 2012-03-19  5:48 ` Yinghai Lu
  2012-03-19  5:48 ` [PATCH -v2 11/26] PCI: Use for_each_pci_dev_resource pci_reassigndev Yinghai Lu
                   ` (15 subsequent siblings)
  25 siblings, 0 replies; 27+ messages in thread
From: Yinghai Lu @ 2012-03-19  5:48 UTC (permalink / raw)
  To: Jesse Barnes, x86
  Cc: Bjorn Helgaas, Andrew Morton, Linus Torvalds, Greg Kroah-Hartman,
	linux-pci, linux-kernel, Yinghai Lu

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
---
 drivers/pci/pci.c |   15 ++++++++-------
 1 files changed, 8 insertions(+), 7 deletions(-)

diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
index 82ed56a..44b4835 100644
--- a/drivers/pci/pci.c
+++ b/drivers/pci/pci.c
@@ -486,8 +486,9 @@ static void
 pci_restore_bars(struct pci_dev *dev)
 {
 	int i;
+	struct resource *res;
 
-	for (i = 0; i < PCI_BRIDGE_RESOURCES; i++)
+	for_each_pci_dev_nobridge_resource(dev, res, i)
 		pci_update_resource(dev, i);
 }
 
@@ -1141,6 +1142,7 @@ static int __pci_enable_device_flags(struct pci_dev *dev,
 {
 	int err;
 	int i, bars = 0;
+	struct resource *res;
 
 	/*
 	 * Power state could be unknown at this point, either due to a fresh
@@ -1158,12 +1160,11 @@ static int __pci_enable_device_flags(struct pci_dev *dev,
 		return 0;		/* already enabled */
 
 	/* only skip sriov related */
-	for (i = 0; i <= PCI_ROM_RESOURCE; i++)
-		if (dev->resource[i].flags & flags)
-			bars |= (1 << i);
-	for (i = PCI_BRIDGE_RESOURCES; i < DEVICE_COUNT_RESOURCE; i++)
-		if (dev->resource[i].flags & flags)
+	for_each_pci_dev_noiov_resource(dev, res, i) {
+		/* TODO: check i with bits of bars */
+		if (res->flags & flags)
 			bars |= (1 << i);
+	}
 
 	err = do_pci_enable_device(dev, bars);
 	if (err < 0)
@@ -2465,7 +2466,7 @@ static int __pci_request_region(struct pci_dev *pdev, int bar, const char *res_n
 
 err_out:
 	dev_warn(&pdev->dev, "BAR %d: can't reserve %pR\n", bar,
-		 &pdev->resource[bar]);
+		 pci_dev_resource_n(pdev, bar));
 	return -EBUSY;
 }
 
-- 
1.7.7


^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH -v2 11/26] PCI: Use for_each_pci_dev_resource pci_reassigndev
  2012-03-19  5:48 [PATCH -v2 00/26] PCI, x86: Add for_each_res and addon resource support Yinghai Lu
                   ` (9 preceding siblings ...)
  2012-03-19  5:48 ` [PATCH -v2 10/26] PCI: Use for_each_pci_dev_resource pci_enable_dev Yinghai Lu
@ 2012-03-19  5:48 ` Yinghai Lu
  2012-03-19  5:48 ` [PATCH -v2 12/26] PCI: Use for_each_res with pci bar reassign funcs Yinghai Lu
                   ` (14 subsequent siblings)
  25 siblings, 0 replies; 27+ messages in thread
From: Yinghai Lu @ 2012-03-19  5:48 UTC (permalink / raw)
  To: Jesse Barnes, x86
  Cc: Bjorn Helgaas, Andrew Morton, Linus Torvalds, Greg Kroah-Hartman,
	linux-pci, linux-kernel, Yinghai Lu

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
---
 drivers/pci/pci.c |    6 ++----
 1 files changed, 2 insertions(+), 4 deletions(-)

diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
index 44b4835..5439033 100644
--- a/drivers/pci/pci.c
+++ b/drivers/pci/pci.c
@@ -3718,8 +3718,7 @@ void pci_reassigndev_resource_alignment(struct pci_dev *dev)
 	command &= ~PCI_COMMAND_MEMORY;
 	pci_write_config_word(dev, PCI_COMMAND, command);
 
-	for (i = 0; i < PCI_BRIDGE_RESOURCES; i++) {
-		r = &dev->resource[i];
+	for_each_pci_dev_nobridge_resource(dev, r, i) {
 		if (!(r->flags & IORESOURCE_MEM))
 			continue;
 		size = resource_size(r);
@@ -3738,8 +3737,7 @@ void pci_reassigndev_resource_alignment(struct pci_dev *dev)
 	 */
 	if (dev->hdr_type == PCI_HEADER_TYPE_BRIDGE &&
 	    (dev->class >> 8) == PCI_CLASS_BRIDGE_PCI) {
-		for (i = PCI_BRIDGE_RESOURCES; i < PCI_NUM_RESOURCES; i++) {
-			r = &dev->resource[i];
+		for_each_pci_dev_bridge_resource(dev, r, i) {
 			if (!(r->flags & IORESOURCE_MEM))
 				continue;
 			r->end = resource_size(r) - 1;
-- 
1.7.7


^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH -v2 12/26] PCI: Use for_each_res with pci bar reassign funcs
  2012-03-19  5:48 [PATCH -v2 00/26] PCI, x86: Add for_each_res and addon resource support Yinghai Lu
                   ` (10 preceding siblings ...)
  2012-03-19  5:48 ` [PATCH -v2 11/26] PCI: Use for_each_pci_dev_resource pci_reassigndev Yinghai Lu
@ 2012-03-19  5:48 ` Yinghai Lu
  2012-03-19  5:48 ` [PATCH -v2 13/26] PCI: Use for_each_res pci_assign_resource Yinghai Lu
                   ` (13 subsequent siblings)
  25 siblings, 0 replies; 27+ messages in thread
From: Yinghai Lu @ 2012-03-19  5:48 UTC (permalink / raw)
  To: Jesse Barnes, x86
  Cc: Bjorn Helgaas, Andrew Morton, Linus Torvalds, Greg Kroah-Hartman,
	linux-pci, linux-kernel, Yinghai Lu

Replace those open code, and make code more readable.

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
---
 drivers/pci/setup-bus.c |   28 ++++++++++++----------------
 1 files changed, 12 insertions(+), 16 deletions(-)

diff --git a/drivers/pci/setup-bus.c b/drivers/pci/setup-bus.c
index d9a5500..13548a7 100644
--- a/drivers/pci/setup-bus.c
+++ b/drivers/pci/setup-bus.c
@@ -106,7 +106,7 @@ static resource_size_t get_res_add_size(struct list_head *head,
 
 	list_for_each_entry(dev_res, head, list) {
 		if (dev_res->res == res) {
-			int idx = res - &dev_res->dev->resource[0];
+			int idx = pci_dev_resource_idx(dev_res->dev, res);
 
 			dev_printk(KERN_DEBUG, &dev_res->dev->dev,
 				 "res[%d]=%pR get_res_add_size add_size %llx\n",
@@ -124,15 +124,13 @@ static resource_size_t get_res_add_size(struct list_head *head,
 static void pdev_sort_resources(struct pci_dev *dev, struct list_head *head)
 {
 	int i;
+	struct resource *r;
 
-	for (i = 0; i < PCI_NUM_RESOURCES; i++) {
-		struct resource *r;
+	for_each_pci_dev_all_resource(dev, r, i) {
 		struct pci_dev_resource *dev_res, *tmp;
 		resource_size_t r_align;
 		struct list_head *n;
 
-		r = &dev->resource[i];
-
 		if (r->flags & IORESOURCE_PCI_FIXED)
 			continue;
 
@@ -237,7 +235,7 @@ static void reassign_resources_sorted(struct list_head *realloc_head,
 		if (!found_match)/* just skip */
 			continue;
 
-		idx = res - &add_res->dev->resource[0];
+		idx = pci_dev_resource_idx(add_res->dev, res);
 		add_size = add_res->add_size;
 		if (!resource_size(res)) {
 			res->start = add_res->start;
@@ -280,7 +278,7 @@ static void assign_requested_resources_sorted(struct list_head *head,
 
 	list_for_each_entry(dev_res, head, list) {
 		res = dev_res->res;
-		idx = res - &dev_res->dev->resource[0];
+		idx = pci_dev_resource_idx(dev_res->dev, res);
 		if (resource_size(res) &&
 		    pci_assign_resource(dev_res->dev, idx)) {
 			if (fail_head && !pci_is_root_bus(dev_res->dev->bus)) {
@@ -716,9 +714,9 @@ static void pbus_size_io(struct pci_bus *bus, resource_size_t min_size,
 
 	list_for_each_entry(dev, &bus->devices, bus_list) {
 		int i;
+		struct resource *r;
 
-		for (i = 0; i < PCI_NUM_RESOURCES; i++) {
-			struct resource *r = &dev->resource[i];
+		for_each_pci_dev_all_resource(dev, r, i) {
 			unsigned long r_size;
 
 			if (r->parent || !(r->flags & IORESOURCE_IO))
@@ -798,9 +796,9 @@ static int pbus_size_mem(struct pci_bus *bus, unsigned long mask,
 
 	list_for_each_entry(dev, &bus->devices, bus_list) {
 		int i;
+		struct resource *r;
 
-		for (i = 0; i < PCI_NUM_RESOURCES; i++) {
-			struct resource *r = &dev->resource[i];
+		for_each_pci_dev_all_resource(dev, r, i) {
 			resource_size_t r_size;
 
 			if (r->parent || (r->flags & mask) != type)
@@ -1140,9 +1138,7 @@ static void pci_bridge_release_resources(struct pci_bus *bus,
 				  IORESOURCE_PREFETCH;
 
 	dev = bus->self;
-	for (idx = PCI_BRIDGE_RESOURCES; idx <= PCI_BRIDGE_RESOURCE_END;
-	     idx++) {
-		r = &dev->resource[idx];
+	for_each_pci_dev_bridge_resource(dev, r, idx) {
 		if ((r->flags & type_mask) != type)
 			continue;
 		if (!r->parent)
@@ -1313,9 +1309,9 @@ static void __init pci_realloc_detect(void)
 
 	for_each_pci_dev(dev) {
 		int i;
+		struct resource *r;
 
-		for (i = PCI_IOV_RESOURCES; i <= PCI_IOV_RESOURCE_END; i++) {
-			struct resource *r = &dev->resource[i];
+		for_each_pci_dev_iov_resource(dev, r, i) {
 
 			/* Not assigned, or rejected by kernel ? */
 			if (r->flags && !r->start) {
-- 
1.7.7


^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH -v2 13/26] PCI: Use for_each_res pci_assign_resource
  2012-03-19  5:48 [PATCH -v2 00/26] PCI, x86: Add for_each_res and addon resource support Yinghai Lu
                   ` (11 preceding siblings ...)
  2012-03-19  5:48 ` [PATCH -v2 12/26] PCI: Use for_each_res with pci bar reassign funcs Yinghai Lu
@ 2012-03-19  5:48 ` Yinghai Lu
  2012-03-19  5:48 ` [PATCH -v2 14/26] PCI: Use for_each_res with noassign_bars Yinghai Lu
                   ` (12 subsequent siblings)
  25 siblings, 0 replies; 27+ messages in thread
From: Yinghai Lu @ 2012-03-19  5:48 UTC (permalink / raw)
  To: Jesse Barnes, x86
  Cc: Bjorn Helgaas, Andrew Morton, Linus Torvalds, Greg Kroah-Hartman,
	linux-pci, linux-kernel, Yinghai Lu

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
---
 drivers/pci/setup-res.c |   14 ++++++--------
 1 files changed, 6 insertions(+), 8 deletions(-)

diff --git a/drivers/pci/setup-res.c b/drivers/pci/setup-res.c
index eea85da..161a015 100644
--- a/drivers/pci/setup-res.c
+++ b/drivers/pci/setup-res.c
@@ -92,7 +92,7 @@ void pci_update_resource(struct pci_dev *dev, int resno)
 
 int pci_claim_resource(struct pci_dev *dev, int resource)
 {
-	struct resource *res = &dev->resource[resource];
+	struct resource *res = pci_dev_resource_n(dev, resource);
 	struct resource *root, *conflict;
 
 	root = pci_find_parent_resource(dev, res);
@@ -130,7 +130,7 @@ void pci_disable_bridge_window(struct pci_dev *dev)
 static int __pci_assign_resource(struct pci_bus *bus, struct pci_dev *dev,
 		int resno, resource_size_t size, resource_size_t align)
 {
-	struct resource *res = dev->resource + resno;
+	struct resource *res = pci_dev_resource_n(dev, resno);
 	resource_size_t min;
 	int ret;
 
@@ -208,7 +208,7 @@ static int pci_revert_fw_address(struct resource *res, struct pci_dev *dev,
 
 static int _pci_assign_resource(struct pci_dev *dev, int resno, int size, resource_size_t min_align)
 {
-	struct resource *res = dev->resource + resno;
+	struct resource *res = pci_dev_resource_n(dev, resno);
 	struct pci_bus *bus;
 	int ret;
 	char *type;
@@ -241,7 +241,7 @@ static int _pci_assign_resource(struct pci_dev *dev, int resno, int size, resour
 int pci_reassign_resource(struct pci_dev *dev, int resno, resource_size_t addsize,
 			resource_size_t min_align)
 {
-	struct resource *res = dev->resource + resno;
+	struct resource *res = pci_dev_resource_n(dev, resno);
 	resource_size_t new_size;
 	int ret;
 
@@ -265,7 +265,7 @@ int pci_reassign_resource(struct pci_dev *dev, int resno, resource_size_t addsiz
 
 int pci_assign_resource(struct pci_dev *dev, int resno)
 {
-	struct resource *res = dev->resource + resno;
+	struct resource *res = pci_dev_resource_n(dev, resno);
 	resource_size_t align, size;
 	struct pci_bus *bus;
 	int ret;
@@ -307,12 +307,10 @@ int pci_enable_resources(struct pci_dev *dev, int mask)
 	pci_read_config_word(dev, PCI_COMMAND, &cmd);
 	old_cmd = cmd;
 
-	for (i = 0; i < PCI_NUM_RESOURCES; i++) {
+	for_each_pci_dev_all_resource(dev, r, i) {
 		if (!(mask & (1 << i)))
 			continue;
 
-		r = &dev->resource[i];
-
 		if (!(r->flags & (IORESOURCE_IO | IORESOURCE_MEM)))
 			continue;
 		if ((i == PCI_ROM_RESOURCE) &&
-- 
1.7.7


^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH -v2 14/26] PCI: Use for_each_res with noassign_bars
  2012-03-19  5:48 [PATCH -v2 00/26] PCI, x86: Add for_each_res and addon resource support Yinghai Lu
                   ` (12 preceding siblings ...)
  2012-03-19  5:48 ` [PATCH -v2 13/26] PCI: Use for_each_res pci_assign_resource Yinghai Lu
@ 2012-03-19  5:48 ` Yinghai Lu
  2012-03-19  5:48 ` [PATCH -v2 15/26] PCI: Use for_each_res pci bases pci_dev_driver() Yinghai Lu
                   ` (11 subsequent siblings)
  25 siblings, 0 replies; 27+ messages in thread
From: Yinghai Lu @ 2012-03-19  5:48 UTC (permalink / raw)
  To: Jesse Barnes, x86
  Cc: Bjorn Helgaas, Andrew Morton, Linus Torvalds, Greg Kroah-Hartman,
	linux-pci, linux-kernel, Yinghai Lu

Replace those open code, and make code more readable.

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
---
 arch/x86/pci/common.c |    3 +--
 1 files changed, 1 insertions(+), 2 deletions(-)

diff --git a/arch/x86/pci/common.c b/arch/x86/pci/common.c
index 0ec860f..7ea09f8 100644
--- a/arch/x86/pci/common.c
+++ b/arch/x86/pci/common.c
@@ -136,8 +136,7 @@ static void __devinit pcibios_fixup_device_resources(struct pci_dev *dev)
 		* resource so the kernel doesn't attmept to assign
 		* it later on in pci_assign_unassigned_resources
 		*/
-		for (bar = 0; bar <= PCI_STD_RESOURCE_END; bar++) {
-			bar_r = &dev->resource[bar];
+		for_each_pci_dev_base_norom_resource(dev, bar_r, bar) {
 			if (bar_r->start == 0 && bar_r->end != 0) {
 				bar_r->flags = 0;
 				bar_r->end = 0;
-- 
1.7.7


^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH -v2 15/26] PCI: Use for_each_res pci bases pci_dev_driver()
  2012-03-19  5:48 [PATCH -v2 00/26] PCI, x86: Add for_each_res and addon resource support Yinghai Lu
                   ` (13 preceding siblings ...)
  2012-03-19  5:48 ` [PATCH -v2 14/26] PCI: Use for_each_res with noassign_bars Yinghai Lu
@ 2012-03-19  5:48 ` Yinghai Lu
  2012-03-19  5:48 ` [PATCH -v2 16/26] PCI: Use for_each_res pci release release Yinghai Lu
                   ` (10 subsequent siblings)
  25 siblings, 0 replies; 27+ messages in thread
From: Yinghai Lu @ 2012-03-19  5:48 UTC (permalink / raw)
  To: Jesse Barnes, x86
  Cc: Bjorn Helgaas, Andrew Morton, Linus Torvalds, Greg Kroah-Hartman,
	linux-pci, linux-kernel, Yinghai Lu

Replace those open code, and make code more readable.

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
---
 drivers/pci/pci-driver.c |    6 ++++--
 1 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/drivers/pci/pci-driver.c b/drivers/pci/pci-driver.c
index 5d19695..a82c66f 100644
--- a/drivers/pci/pci-driver.c
+++ b/drivers/pci/pci-driver.c
@@ -1201,9 +1201,11 @@ pci_dev_driver(const struct pci_dev *dev)
 	if (dev->driver)
 		return dev->driver;
 	else {
+		struct resource *res;
 		int i;
-		for(i=0; i<=PCI_ROM_RESOURCE; i++)
-			if (dev->resource[i].flags & IORESOURCE_BUSY)
+
+		for_each_pci_dev_base_resource((struct pci_dev *)dev, res, i)
+			if (res->flags & IORESOURCE_BUSY)
 				return &pci_compat_driver;
 	}
 	return NULL;
-- 
1.7.7


^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH -v2 16/26] PCI: Use for_each_res pci release release
  2012-03-19  5:48 [PATCH -v2 00/26] PCI, x86: Add for_each_res and addon resource support Yinghai Lu
                   ` (14 preceding siblings ...)
  2012-03-19  5:48 ` [PATCH -v2 15/26] PCI: Use for_each_res pci bases pci_dev_driver() Yinghai Lu
@ 2012-03-19  5:48 ` Yinghai Lu
  2012-03-19  5:48 ` [PATCH -v2 17/26] PCI: Use for_each_res pci bases reading Yinghai Lu
                   ` (9 subsequent siblings)
  25 siblings, 0 replies; 27+ messages in thread
From: Yinghai Lu @ 2012-03-19  5:48 UTC (permalink / raw)
  To: Jesse Barnes, x86
  Cc: Bjorn Helgaas, Andrew Morton, Linus Torvalds, Greg Kroah-Hartman,
	linux-pci, linux-kernel, Yinghai Lu

Replace those open code, and make code more readable.

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
---
 drivers/pci/remove.c |    5 ++---
 1 files changed, 2 insertions(+), 3 deletions(-)

diff --git a/drivers/pci/remove.c b/drivers/pci/remove.c
index 18efb31..7dfe507 100644
--- a/drivers/pci/remove.c
+++ b/drivers/pci/remove.c
@@ -6,15 +6,14 @@
 static void pci_free_resources(struct pci_dev *dev)
 {
 	int i;
+	struct resource *res;
 
  	msi_remove_pci_irq_vectors(dev);
 
 	pci_cleanup_rom(dev);
-	for (i = 0; i < PCI_NUM_RESOURCES; i++) {
-		struct resource *res = dev->resource + i;
+	for_each_pci_dev_all_resource(dev, res, i)
 		if (res->parent)
 			release_resource(res);
-	}
 }
 
 static void pci_stop_dev(struct pci_dev *dev)
-- 
1.7.7


^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH -v2 17/26] PCI: Use for_each_res pci bases reading
  2012-03-19  5:48 [PATCH -v2 00/26] PCI, x86: Add for_each_res and addon resource support Yinghai Lu
                   ` (15 preceding siblings ...)
  2012-03-19  5:48 ` [PATCH -v2 16/26] PCI: Use for_each_res pci release release Yinghai Lu
@ 2012-03-19  5:48 ` Yinghai Lu
  2012-03-19  5:48 ` [PATCH -v2 18/26] PCI: Use for_each_res with mrs Yinghai Lu
                   ` (8 subsequent siblings)
  25 siblings, 0 replies; 27+ messages in thread
From: Yinghai Lu @ 2012-03-19  5:48 UTC (permalink / raw)
  To: Jesse Barnes, x86
  Cc: Bjorn Helgaas, Andrew Morton, Linus Torvalds, Greg Kroah-Hartman,
	linux-pci, linux-kernel, Yinghai Lu

Replace those open code, and make code more readable.

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
---
 drivers/pci/probe.c |    6 ++++--
 1 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
index 7d5550a..dfa56fb 100644
--- a/drivers/pci/probe.c
+++ b/drivers/pci/probe.c
@@ -277,9 +277,11 @@ int __pci_read_base(struct pci_dev *dev, enum pci_bar_type type,
 static void pci_read_bases(struct pci_dev *dev, unsigned int howmany, int rom)
 {
 	unsigned int pos, reg;
+	struct resource *res;
 
-	for (pos = 0; pos < howmany; pos++) {
-		struct resource *res = &dev->resource[pos];
+	for_each_pci_dev_std_resource(dev, res, pos) {
+		if (pos >= howmany)
+			break;
 		reg = PCI_BASE_ADDRESS_0 + (pos << 2);
 		pos += __pci_read_base(dev, pci_bar_unknown, res, reg);
 	}
-- 
1.7.7


^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH -v2 18/26] PCI: Use for_each_res with mrs
  2012-03-19  5:48 [PATCH -v2 00/26] PCI, x86: Add for_each_res and addon resource support Yinghai Lu
                   ` (16 preceding siblings ...)
  2012-03-19  5:48 ` [PATCH -v2 17/26] PCI: Use for_each_res pci bases reading Yinghai Lu
@ 2012-03-19  5:48 ` Yinghai Lu
  2012-03-19  5:48 ` [PATCH -v2 19/26] PCI: Use for_each_res with xen pci Yinghai Lu
                   ` (7 subsequent siblings)
  25 siblings, 0 replies; 27+ messages in thread
From: Yinghai Lu @ 2012-03-19  5:48 UTC (permalink / raw)
  To: Jesse Barnes, x86
  Cc: Bjorn Helgaas, Andrew Morton, Linus Torvalds, Greg Kroah-Hartman,
	linux-pci, linux-kernel, Yinghai Lu

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
---
 arch/x86/pci/mrst.c |    7 ++++---
 1 files changed, 4 insertions(+), 3 deletions(-)

diff --git a/arch/x86/pci/mrst.c b/arch/x86/pci/mrst.c
index 140942f..55e20d8 100644
--- a/arch/x86/pci/mrst.c
+++ b/arch/x86/pci/mrst.c
@@ -280,6 +280,7 @@ static void __devinit pci_fixed_bar_fixup(struct pci_dev *dev)
 	unsigned long offset;
 	u32 size;
 	int i;
+	struct resource *res;
 
 	if (!pci_soc_mode)
 		return;
@@ -294,10 +295,10 @@ static void __devinit pci_fixed_bar_fixup(struct pci_dev *dev)
 	    PCI_DEVFN(2, 2) == dev->devfn)
 		return;
 
-	for (i = 0; i < PCI_ROM_RESOURCE; i++) {
+	for_each_pci_dev_std_resource(dev, res, i) {
 		pci_read_config_dword(dev, offset + 8 + (i * 4), &size);
-		dev->resource[i].end = dev->resource[i].start + size - 1;
-		dev->resource[i].flags |= IORESOURCE_PCI_FIXED;
+		res->end = res->start + size - 1;
+		res->flags |= IORESOURCE_PCI_FIXED;
 	}
 }
 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_ANY_ID, pci_fixed_bar_fixup);
-- 
1.7.7


^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH -v2 19/26] PCI: Use for_each_res with xen pci
  2012-03-19  5:48 [PATCH -v2 00/26] PCI, x86: Add for_each_res and addon resource support Yinghai Lu
                   ` (17 preceding siblings ...)
  2012-03-19  5:48 ` [PATCH -v2 18/26] PCI: Use for_each_res with mrs Yinghai Lu
@ 2012-03-19  5:48 ` Yinghai Lu
  2012-03-19  5:48 ` [PATCH -v2 20/26] PCI: Add addon_resource support for pci_dev Yinghai Lu
                   ` (6 subsequent siblings)
  25 siblings, 0 replies; 27+ messages in thread
From: Yinghai Lu @ 2012-03-19  5:48 UTC (permalink / raw)
  To: Jesse Barnes, x86
  Cc: Bjorn Helgaas, Andrew Morton, Linus Torvalds, Greg Kroah-Hartman,
	linux-pci, linux-kernel, Yinghai Lu

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
---
 drivers/pci/xen-pcifront.c |    4 +---
 1 files changed, 1 insertions(+), 3 deletions(-)

diff --git a/drivers/pci/xen-pcifront.c b/drivers/pci/xen-pcifront.c
index 9c43ab4..9ae41ba 100644
--- a/drivers/pci/xen-pcifront.c
+++ b/drivers/pci/xen-pcifront.c
@@ -393,9 +393,7 @@ static int pcifront_claim_resource(struct pci_dev *dev, void *data)
 	int i;
 	struct resource *r;
 
-	for (i = 0; i < PCI_NUM_RESOURCES; i++) {
-		r = &dev->resource[i];
-
+	for_each_pci_dev_all_resource(dev, r, i) {
 		if (!r->parent && r->start && r->flags) {
 			dev_info(&pdev->xdev->dev, "claiming resource %s/%d\n",
 				pci_name(dev), i);
-- 
1.7.7


^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH -v2 20/26] PCI: Add addon_resource support for pci_dev
  2012-03-19  5:48 [PATCH -v2 00/26] PCI, x86: Add for_each_res and addon resource support Yinghai Lu
                   ` (18 preceding siblings ...)
  2012-03-19  5:48 ` [PATCH -v2 19/26] PCI: Use for_each_res with xen pci Yinghai Lu
@ 2012-03-19  5:48 ` Yinghai Lu
  2012-03-19  5:48 ` [PATCH -v2 21/26] PCI: Add helpers for add addon_resource Yinghai Lu
                   ` (5 subsequent siblings)
  25 siblings, 0 replies; 27+ messages in thread
From: Yinghai Lu @ 2012-03-19  5:48 UTC (permalink / raw)
  To: Jesse Barnes, x86
  Cc: Bjorn Helgaas, Andrew Morton, Linus Torvalds, Greg Kroah-Hartman,
	linux-pci, linux-kernel, Yinghai Lu

Will add addon_resources list in pci_dev, it will be used for resources
other than standard, rom, sriov, bridges.
Some could be same as std reg, but using different register.
Some could have own way to read/write to them.

Kernel using different way to hack those resources like abusing
pci bridge resource spot on non bridge pci device.

With this patch, will treat addon-resource like standard resource with
special ops.

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
---
 drivers/pci/probe.c |   18 ++++++++++++++++++
 include/linux/pci.h |   16 ++++++++++++++++
 2 files changed, 34 insertions(+), 0 deletions(-)

diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
index dfa56fb..6dbad5b 100644
--- a/drivers/pci/probe.c
+++ b/drivers/pci/probe.c
@@ -82,6 +82,12 @@ struct resource *pci_dev_resource_n(struct pci_dev *dev, int n)
 	if (n < PCI_NUM_RESOURCES)
 		return &dev->resource[n];
 
+	n -= PCI_NUM_RESOURCES;
+	list_for_each_entry(addon_res, &dev->addon_resources, list) {
+		if (n-- == 0)
+			return &addon_res->res;
+	}
+
 	return NULL;
 }
 
@@ -97,6 +103,16 @@ int pci_dev_resource_idx(struct pci_dev *dev, struct resource *res)
 	return -1;
 }
 
+static void pci_release_dev_addon_res(struct pci_dev *dev)
+{
+	struct pci_dev_addon_resource *addon_res, *tmp;
+
+	list_for_each_entry_safe(addon_res, tmp, &dev->addon_resources, list) {
+		list_del(&addon_res->list);
+		kfree(addon_res);
+	}
+}
+
 static u64 pci_size(u64 base, u64 maxbase, u64 mask)
 {
 	u64 size = mask & maxbase;	/* Find the significant bits */
@@ -1288,6 +1304,7 @@ static void pci_release_dev(struct device *dev)
 	pci_dev = to_pci_dev(dev);
 	pci_release_capabilities(pci_dev);
 	pci_release_of_node(pci_dev);
+	pci_release_dev_addon_res(pci_dev);
 	kfree(pci_dev);
 }
 
@@ -1367,6 +1384,7 @@ struct pci_dev *alloc_pci_dev(void)
 		return NULL;
 
 	INIT_LIST_HEAD(&dev->bus_list);
+	INIT_LIST_HEAD(&dev->addon_resources);
 
 	return dev;
 }
diff --git a/include/linux/pci.h b/include/linux/pci.h
index c7a2806..2c8b1a4 100644
--- a/include/linux/pci.h
+++ b/include/linux/pci.h
@@ -299,6 +299,7 @@ struct pci_dev {
 	 */
 	unsigned int	irq;
 	struct resource resource[DEVICE_COUNT_RESOURCE]; /* I/O and memory regions + expansion ROMs */
+	struct list_head addon_resources; /* addon I/O and memory resource */
 
 	/* These fields are used by common fixups */
 	unsigned int	transparent:1;	/* Transparent PCI bridge */
@@ -347,6 +348,21 @@ struct pci_dev {
 #endif
 };
 
+struct resource_ops {
+	int (*read)(struct pci_dev *dev, struct resource *res, int addr);
+	int (*write)(struct pci_dev *dev, struct resource *res, int addr);
+};
+
+struct pci_dev_addon_resource {
+	struct list_head list;
+	int reg_addr;
+	int size;
+	struct resource res;
+	struct resource_ops *ops;
+};
+#define	to_pci_dev_addon_resource(n)					\
+	container_of(n, struct pci_dev_addon_resource, res)
+
 struct resource *pci_dev_resource_n(struct pci_dev *dev, int n);
 int pci_dev_resource_idx(struct pci_dev *dev, struct resource *res);
 
-- 
1.7.7


^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH -v2 21/26] PCI: Add helpers for add addon_resource
  2012-03-19  5:48 [PATCH -v2 00/26] PCI, x86: Add for_each_res and addon resource support Yinghai Lu
                   ` (19 preceding siblings ...)
  2012-03-19  5:48 ` [PATCH -v2 20/26] PCI: Add addon_resource support for pci_dev Yinghai Lu
@ 2012-03-19  5:48 ` Yinghai Lu
  2012-03-19  5:48 ` [PATCH -v2 22/26] PCI: Update pci_resource_bar() to support addon_resource Yinghai Lu
                   ` (4 subsequent siblings)
  25 siblings, 0 replies; 27+ messages in thread
From: Yinghai Lu @ 2012-03-19  5:48 UTC (permalink / raw)
  To: Jesse Barnes, x86
  Cc: Bjorn Helgaas, Andrew Morton, Linus Torvalds, Greg Kroah-Hartman,
	linux-pci, linux-kernel, Yinghai Lu

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
---
 drivers/pci/probe.c |   68 +++++++++++++++++++++++++++++++++++++++++++++++++++
 include/linux/pci.h |    5 +++
 2 files changed, 73 insertions(+), 0 deletions(-)

diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
index 6dbad5b..9d544c9 100644
--- a/drivers/pci/probe.c
+++ b/drivers/pci/probe.c
@@ -103,6 +103,74 @@ int pci_dev_resource_idx(struct pci_dev *dev, struct resource *res)
 	return -1;
 }
 
+struct pci_dev_addon_resource *__add_pci_dev_addon_resource(
+		 struct pci_dev *dev, int addr, char *name)
+{
+	struct pci_dev_addon_resource *addon_res;
+
+	addon_res = kzalloc(sizeof(*addon_res), GFP_KERNEL);
+
+	if (!addon_res)
+		return NULL;
+
+	addon_res->reg_addr = addr;
+
+	if (name)
+		addon_res->res.name = name;
+	else
+		addon_res->res.name = pci_name(dev);
+
+	list_add_tail(&addon_res->list, &dev->addon_resources);
+
+	return addon_res;
+}
+
+struct pci_dev_addon_resource *add_pci_dev_addon_fixed_resource(
+		 struct pci_dev *dev, int start, int size, int flags,
+		 int addr, char *name)
+{
+	struct pci_dev_addon_resource *addon_res;
+	struct resource *res;
+
+	addon_res = __add_pci_dev_addon_resource(dev, addr, name);
+	if (addon_res)
+		return NULL;
+
+	res = &addon_res->res;
+	res->start = start;
+	res->end = start + size - 1;
+	res->flags = flags | IORESOURCE_PCI_FIXED;
+
+	dev_printk(KERN_DEBUG, &dev->dev,
+		   "addon fixed resource %s %pR added\n", res->name, res);
+
+	return addon_res;
+}
+
+struct pci_dev_addon_resource *add_pci_dev_addon_resource(struct pci_dev *dev,
+		 int addr, int size, struct resource_ops *ops, char *name)
+{
+	struct pci_dev_addon_resource *addon_res;
+	struct resource *res;
+
+	addon_res = __add_pci_dev_addon_resource(dev, addr, name);
+	if (!addon_res)
+		return NULL;
+
+	res = &addon_res->res;
+	if (ops) {
+		addon_res->ops = ops;
+		addon_res->size = size;
+		ops->read(dev, res, addr);
+	} else
+		__pci_read_base(dev, pci_bar_unknown, res, addr);
+
+	dev_printk(KERN_DEBUG, &dev->dev,
+		   "addon resource %s %pR added\n", res->name, res);
+
+	return addon_res;
+}
+
 static void pci_release_dev_addon_res(struct pci_dev *dev)
 {
 	struct pci_dev_addon_resource *addon_res, *tmp;
diff --git a/include/linux/pci.h b/include/linux/pci.h
index 2c8b1a4..faaffe7 100644
--- a/include/linux/pci.h
+++ b/include/linux/pci.h
@@ -365,6 +365,11 @@ struct pci_dev_addon_resource {
 
 struct resource *pci_dev_resource_n(struct pci_dev *dev, int n);
 int pci_dev_resource_idx(struct pci_dev *dev, struct resource *res);
+struct pci_dev_addon_resource *add_pci_dev_addon_fixed_resource(
+		 struct pci_dev *dev, int start, int size, int flags,
+		 int addr, char *name);
+struct pci_dev_addon_resource *add_pci_dev_addon_resource(struct pci_dev *dev,
+		 int addr, int size, struct resource_ops *ops, char *name);
 
 #define resno_is_for_bridge(n)						\
 	((n) >= PCI_BRIDGE_RESOURCES && (n) <= PCI_BRIDGE_RESOURCE_END)
-- 
1.7.7


^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH -v2 22/26] PCI: Update pci_resource_bar() to support addon_resource
  2012-03-19  5:48 [PATCH -v2 00/26] PCI, x86: Add for_each_res and addon resource support Yinghai Lu
                   ` (20 preceding siblings ...)
  2012-03-19  5:48 ` [PATCH -v2 21/26] PCI: Add helpers for add addon_resource Yinghai Lu
@ 2012-03-19  5:48 ` Yinghai Lu
  2012-03-19  5:48 ` [PATCH -v2 23/26] PCI: Make assign/update resource to support addon_res Yinghai Lu
                   ` (3 subsequent siblings)
  25 siblings, 0 replies; 27+ messages in thread
From: Yinghai Lu @ 2012-03-19  5:48 UTC (permalink / raw)
  To: Jesse Barnes, x86
  Cc: Bjorn Helgaas, Andrew Morton, Linus Torvalds, Greg Kroah-Hartman,
	linux-pci, linux-kernel, Yinghai Lu

need to loop addon resource list to retrieve reg_addr in it.

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
---
 drivers/pci/pci.c |    7 +++++++
 1 files changed, 7 insertions(+), 0 deletions(-)

diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
index 5439033..8b9acf6 100644
--- a/drivers/pci/pci.c
+++ b/drivers/pci/pci.c
@@ -3549,6 +3549,13 @@ int pci_resource_bar(struct pci_dev *dev, int resno, enum pci_bar_type *type)
 		reg = pci_iov_resource_bar(dev, resno, type);
 		if (reg)
 			return reg;
+	} else if (resno >= PCI_NUM_RESOURCES) {
+		struct resource *res = pci_dev_resource_n(dev, resno);
+
+		if (res) {
+			*type = pci_bar_unknown;
+			return to_pci_dev_addon_resource(res)->reg_addr;
+		}
 	}
 
 	dev_err(&dev->dev, "BAR %d: invalid resource\n", resno);
-- 
1.7.7


^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH -v2 23/26] PCI: Make assign/update resource to support addon_res
  2012-03-19  5:48 [PATCH -v2 00/26] PCI, x86: Add for_each_res and addon resource support Yinghai Lu
                   ` (21 preceding siblings ...)
  2012-03-19  5:48 ` [PATCH -v2 22/26] PCI: Update pci_resource_bar() to support addon_resource Yinghai Lu
@ 2012-03-19  5:48 ` Yinghai Lu
  2012-03-19  5:48 ` [PATCH -v2 24/26] PCI: Make piix4 quirk to use addon_resource support Yinghai Lu
                   ` (2 subsequent siblings)
  25 siblings, 0 replies; 27+ messages in thread
From: Yinghai Lu @ 2012-03-19  5:48 UTC (permalink / raw)
  To: Jesse Barnes, x86
  Cc: Bjorn Helgaas, Andrew Morton, Linus Torvalds, Greg Kroah-Hartman,
	linux-pci, linux-kernel, Yinghai Lu

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
---
 drivers/pci/setup-res.c |   24 ++++++++++++++++++------
 1 files changed, 18 insertions(+), 6 deletions(-)

diff --git a/drivers/pci/setup-res.c b/drivers/pci/setup-res.c
index 161a015..4c6c924 100644
--- a/drivers/pci/setup-res.c
+++ b/drivers/pci/setup-res.c
@@ -33,7 +33,7 @@ void pci_update_resource(struct pci_dev *dev, int resno)
 	u32 new, check, mask;
 	int reg;
 	enum pci_bar_type type;
-	struct resource *res = dev->resource + resno;
+	struct resource *res = pci_dev_resource_n(dev, resno);
 
 	/*
 	 * Ignore resources for unimplemented BARs and unused resource slots
@@ -50,6 +50,21 @@ void pci_update_resource(struct pci_dev *dev, int resno)
 	if (res->flags & IORESOURCE_PCI_FIXED)
 		return;
 
+	if (resno >= PCI_NUM_RESOURCES) {
+		struct pci_dev_addon_resource *addon_res;
+
+		addon_res = to_pci_dev_addon_resource(res);
+		reg = addon_res->reg_addr;
+		if (addon_res->ops) {
+			addon_res->ops->write(dev, res, reg);
+			return;
+		}
+	} else
+		reg = pci_resource_bar(dev, resno, &type);
+
+	if (!reg)
+		return;
+
 	pcibios_resource_to_bus(dev, &region, res);
 
 	new = region.start | (res->flags & PCI_REGION_FLAG_MASK);
@@ -58,9 +73,6 @@ void pci_update_resource(struct pci_dev *dev, int resno)
 	else
 		mask = (u32)PCI_BASE_ADDRESS_MEM_MASK;
 
-	reg = pci_resource_bar(dev, resno, &type);
-	if (!reg)
-		return;
 	if (type != pci_bar_unknown) {
 		if (!(res->flags & IORESOURCE_ROM_ENABLE))
 			return;
@@ -257,7 +269,7 @@ int pci_reassign_resource(struct pci_dev *dev, int resno, resource_size_t addsiz
 	if (!ret) {
 		res->flags &= ~IORESOURCE_STARTALIGN;
 		dev_info(&dev->dev, "BAR %d: reassigned %pR\n", resno, res);
-		if (resno < PCI_BRIDGE_RESOURCES)
+		if (!resno_is_for_bridge(resno))
 			pci_update_resource(dev, resno);
 	}
 	return ret;
@@ -292,7 +304,7 @@ int pci_assign_resource(struct pci_dev *dev, int resno)
 	if (!ret) {
 		res->flags &= ~IORESOURCE_STARTALIGN;
 		dev_info(&dev->dev, "BAR %d: assigned %pR\n", resno, res);
-		if (resno < PCI_BRIDGE_RESOURCES)
+		if (!resno_is_for_bridge(resno))
 			pci_update_resource(dev, resno);
 	}
 	return ret;
-- 
1.7.7


^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH -v2 24/26] PCI: Make piix4 quirk to use addon_resource support
  2012-03-19  5:48 [PATCH -v2 00/26] PCI, x86: Add for_each_res and addon resource support Yinghai Lu
                   ` (22 preceding siblings ...)
  2012-03-19  5:48 ` [PATCH -v2 23/26] PCI: Make assign/update resource to support addon_res Yinghai Lu
@ 2012-03-19  5:48 ` Yinghai Lu
  2012-03-19  5:48 ` [PATCH -v2 25/26] PCI: Make quirk_io_region " Yinghai Lu
  2012-03-19  5:48 ` [PATCH -v2 26/26] PCI: Use addon_fixed_resource with ati fixed resource Yinghai Lu
  25 siblings, 0 replies; 27+ messages in thread
From: Yinghai Lu @ 2012-03-19  5:48 UTC (permalink / raw)
  To: Jesse Barnes, x86
  Cc: Bjorn Helgaas, Andrew Morton, Linus Torvalds, Greg Kroah-Hartman,
	linux-pci, linux-kernel, Yinghai Lu

after they are put in add-on resources, they will be safely claimed later.

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
---
 drivers/pci/quirks.c |   93 +++++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 77 insertions(+), 16 deletions(-)

diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
index 7ef4183..cbe7dd9 100644
--- a/drivers/pci/quirks.c
+++ b/drivers/pci/quirks.c
@@ -383,14 +383,14 @@ static void __devinit quirk_ali7101_acpi(struct pci_dev *dev)
 }
 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_AL,	PCI_DEVICE_ID_AL_M7101,		quirk_ali7101_acpi);
 
-static void piix4_io_quirk(struct pci_dev *dev, const char *name, unsigned int port, unsigned int enable)
+static int piix4_read_io(struct pci_dev *dev, struct resource *res, int port)
 {
 	u32 devres;
 	u32 mask, size, base;
+	struct pci_bus_region bus_region;
 
 	pci_read_config_dword(dev, port, &devres);
-	if ((devres & enable) != enable)
-		return;
+
 	mask = (devres >> 16) & 15;
 	base = devres & 0xffff;
 	size = 16;
@@ -400,23 +400,53 @@ static void piix4_io_quirk(struct pci_dev *dev, const char *name, unsigned int p
 			break;
 		size = bit;
 	}
-	/*
-	 * For now we only print it out. Eventually we'll want to
-	 * reserve it (at least if it's in the 0x1000+ range), but
-	 * let's get enough confirmation reports first. 
-	 */
 	base &= -size;
-	dev_info(&dev->dev, "%s PIO at %04x-%04x\n", name, base, base + size - 1);
+
+	bus_region.start = base;
+	bus_region.end = base + size - 1;
+	res->flags |= IORESOURCE_IO;
+	pcibios_bus_to_resource(dev, res, &bus_region);
+	dev_info(&dev->dev, "PIO at %pR\n", res);
+
+	return 0;
 }
+static int piix4_write_io(struct pci_dev *dev, struct resource *res, int port)
+{
+	u32 devres;
+	struct pci_bus_region bus_region;
+
+	pcibios_resource_to_bus(dev, &bus_region, res);
 
-static void piix4_mem_quirk(struct pci_dev *dev, const char *name, unsigned int port, unsigned int enable)
+	pci_read_config_dword(dev, port, &devres);
+	devres &= 0xffff0000;
+	devres |= bus_region.start & 0xffff;
+	pci_write_config_dword(dev, port, devres);
+
+	return 0;
+}
+static struct resource_ops piix4_io_ops = {
+	.read = piix4_read_io,
+	.write = piix4_write_io,
+};
+static void piix4_io_quirk(struct pci_dev *dev, char *name, unsigned int port,
+				unsigned int enable)
 {
 	u32 devres;
-	u32 mask, size, base;
 
 	pci_read_config_dword(dev, port, &devres);
 	if ((devres & enable) != enable)
 		return;
+
+	add_pci_dev_addon_resource(dev, port, 0, &piix4_io_ops, name);
+}
+
+static int piix4_read_mem(struct pci_dev *dev, struct resource *res, int port)
+{
+	u32 devres;
+	u32 mask, size, base;
+	struct pci_bus_region bus_region;
+
+	pci_read_config_dword(dev, port, &devres);
 	base = devres & 0xffff0000;
 	mask = (devres & 0x3f) << 16;
 	size = 128 << 16;
@@ -426,12 +456,43 @@ static void piix4_mem_quirk(struct pci_dev *dev, const char *name, unsigned int
 			break;
 		size = bit;
 	}
-	/*
-	 * For now we only print it out. Eventually we'll want to
-	 * reserve it, but let's get enough confirmation reports first. 
-	 */
 	base &= -size;
-	dev_info(&dev->dev, "%s MMIO at %04x-%04x\n", name, base, base + size - 1);
+	bus_region.start = base;
+	bus_region.end = base + size - 1;
+	res->flags |= IORESOURCE_MEM;
+	pcibios_bus_to_resource(dev, res, &bus_region);
+	dev_info(&dev->dev, "MMIO at %pR\n", res);
+
+	return 0;
+}
+static int piix4_write_mem(struct pci_dev *dev, struct resource *res, int port)
+{
+	u32 devres;
+	struct pci_bus_region bus_region;
+
+	pcibios_resource_to_bus(dev, &bus_region, res);
+
+	pci_read_config_dword(dev, port, &devres);
+	devres &= 0x0000ffff;
+	devres |= bus_region.start & 0xffff0000;
+	pci_write_config_dword(dev, port, devres);
+
+	return 0;
+}
+static struct resource_ops piix4_mem_ops = {
+	.read = piix4_read_mem,
+	.write = piix4_write_mem,
+};
+static void piix4_mem_quirk(struct pci_dev *dev, char *name, unsigned int port,
+				unsigned int enable)
+{
+	u32 devres;
+
+	pci_read_config_dword(dev, port, &devres);
+	if ((devres & enable) != enable)
+		return;
+
+	add_pci_dev_addon_resource(dev, port, 0, &piix4_mem_ops, name);
 }
 
 /*
-- 
1.7.7


^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH -v2 25/26] PCI: Make quirk_io_region to use addon_resource support
  2012-03-19  5:48 [PATCH -v2 00/26] PCI, x86: Add for_each_res and addon resource support Yinghai Lu
                   ` (23 preceding siblings ...)
  2012-03-19  5:48 ` [PATCH -v2 24/26] PCI: Make piix4 quirk to use addon_resource support Yinghai Lu
@ 2012-03-19  5:48 ` Yinghai Lu
  2012-03-19  5:48 ` [PATCH -v2 26/26] PCI: Use addon_fixed_resource with ati fixed resource Yinghai Lu
  25 siblings, 0 replies; 27+ messages in thread
From: Yinghai Lu @ 2012-03-19  5:48 UTC (permalink / raw)
  To: Jesse Barnes, x86
  Cc: Bjorn Helgaas, Andrew Morton, Linus Torvalds, Greg Kroah-Hartman,
	linux-pci, linux-kernel, Yinghai Lu

after they are put in add-on resources, they will be safely claimed later.

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
---
 drivers/pci/quirks.c |  155 ++++++++++++++++++++++---------------------------
 1 files changed, 70 insertions(+), 85 deletions(-)

diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
index cbe7dd9..4561610 100644
--- a/drivers/pci/quirks.c
+++ b/drivers/pci/quirks.c
@@ -324,29 +324,61 @@ static void __devinit quirk_cs5536_vsa(struct pci_dev *dev)
 }
 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_CS5536_ISA, quirk_cs5536_vsa);
 
-static void __devinit quirk_io_region(struct pci_dev *dev, unsigned region,
-	unsigned size, int nr, const char *name)
+static int quirk_read_io(struct pci_dev *dev, struct resource *res, int port)
 {
-	region &= ~(size-1);
-	if (region) {
-		struct pci_bus_region bus_region;
-		struct resource *res = dev->resource + nr;
+	struct pci_bus_region bus_region;
+	u16 region;
+	unsigned size = to_pci_dev_addon_resource(res)->size;
 
-		res->name = pci_name(dev);
-		res->start = region;
-		res->end = region + size - 1;
-		res->flags = IORESOURCE_IO;
+	pci_read_config_word(dev, port, &region);
+	region &= ~(size - 1);
 
-		/* Convert from PCI bus to resource space.  */
-		bus_region.start = res->start;
-		bus_region.end = res->end;
-		pcibios_bus_to_resource(dev, res, &bus_region);
+	/* Convert from PCI bus to resource space.  */
+	bus_region.start = region;
+	bus_region.end = region + size - 1;
 
-		if (pci_claim_resource(dev, nr) == 0)
-			dev_info(&dev->dev, "quirk: %pR claimed by %s\n",
-				 res, name);
-	}
-}	
+	pcibios_bus_to_resource(dev, res, &bus_region);
+
+	res->flags |= IORESOURCE_IO;
+	dev_info(&dev->dev, "PIO at %pR\n", res);
+
+	return 0;
+}
+static int quirk_write_io(struct pci_dev *dev, struct resource *res, int port)
+{
+	struct pci_bus_region bus_region;
+	u16 region;
+	unsigned size = to_pci_dev_addon_resource(res)->size;
+
+	pci_read_config_word(dev, port, &region);
+	region &= size - 1;
+
+	/* Convert to PCI bus space.  */
+	pcibios_resource_to_bus(dev, &bus_region, res);
+	region |= bus_region.start & (~(size - 1));
+
+	pci_write_config_word(dev, port, region);
+
+	return 0;
+}
+static struct resource_ops quirk_io_ops = {
+	.read = quirk_read_io,
+	.write = quirk_write_io,
+};
+
+static void __devinit quirk_io_region(struct pci_dev *dev, int port,
+					unsigned size, char *name)
+{
+	u16 region;
+
+	pci_read_config_word(dev, port, &region);
+	region &= size - 1;
+
+	if (!region)
+		return;
+
+	add_pci_dev_addon_resource(dev, port, size, &quirk_io_ops, name);
+}
 
 /*
  *	ATI Northbridge setups MCE the processor if you even
@@ -374,12 +406,8 @@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI,	PCI_DEVICE_ID_ATI_RS100,   quirk_ati_
  */
 static void __devinit quirk_ali7101_acpi(struct pci_dev *dev)
 {
-	u16 region;
-
-	pci_read_config_word(dev, 0xE0, &region);
-	quirk_io_region(dev, region, 64, PCI_BRIDGE_RESOURCES, "ali7101 ACPI");
-	pci_read_config_word(dev, 0xE2, &region);
-	quirk_io_region(dev, region, 32, PCI_BRIDGE_RESOURCES+1, "ali7101 SMB");
+	quirk_io_region(dev, 0xE0, 64, "ali7101 ACPI");
+	quirk_io_region(dev, 0xE2, 32, "ali7101 SMB");
 }
 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_AL,	PCI_DEVICE_ID_AL_M7101,		quirk_ali7101_acpi);
 
@@ -503,12 +531,10 @@ static void piix4_mem_quirk(struct pci_dev *dev, char *name, unsigned int port,
  */
 static void __devinit quirk_piix4_acpi(struct pci_dev *dev)
 {
-	u32 region, res_a;
+	u32 res_a;
 
-	pci_read_config_dword(dev, 0x40, &region);
-	quirk_io_region(dev, region, 64, PCI_BRIDGE_RESOURCES, "PIIX4 ACPI");
-	pci_read_config_dword(dev, 0x90, &region);
-	quirk_io_region(dev, region, 16, PCI_BRIDGE_RESOURCES+1, "PIIX4 SMB");
+	quirk_io_region(dev, 0x40, 64, "PIIX4 ACPI");
+	quirk_io_region(dev, 0x90, 16, "PIIX4 SMB");
 
 	/* Device resource A has enables for some of the other ones */
 	pci_read_config_dword(dev, 0x5c, &res_a);
@@ -552,7 +578,6 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL,	PCI_DEVICE_ID_INTEL_82443MX_3,	qui
  */
 static void __devinit quirk_ich4_lpc_acpi(struct pci_dev *dev)
 {
-	u32 region;
 	u8 enable;
 
 	/*
@@ -564,22 +589,12 @@ static void __devinit quirk_ich4_lpc_acpi(struct pci_dev *dev)
 	*/
 
 	pci_read_config_byte(dev, ICH_ACPI_CNTL, &enable);
-	if (enable & ICH4_ACPI_EN) {
-		pci_read_config_dword(dev, ICH_PMBASE, &region);
-		region &= PCI_BASE_ADDRESS_IO_MASK;
-		if (region >= PCIBIOS_MIN_IO)
-			quirk_io_region(dev, region, 128, PCI_BRIDGE_RESOURCES,
-					"ICH4 ACPI/GPIO/TCO");
-	}
+	if (enable & ICH4_ACPI_EN)
+		quirk_io_region(dev, ICH_PMBASE, 128, "ICH4 ACPI/GPIO/TCO");
 
 	pci_read_config_byte(dev, ICH4_GPIO_CNTL, &enable);
-	if (enable & ICH4_GPIO_EN) {
-		pci_read_config_dword(dev, ICH4_GPIOBASE, &region);
-		region &= PCI_BASE_ADDRESS_IO_MASK;
-		if (region >= PCIBIOS_MIN_IO)
-			quirk_io_region(dev, region, 64,
-					PCI_BRIDGE_RESOURCES + 1, "ICH4 GPIO");
-	}
+	if (enable & ICH4_GPIO_EN)
+		quirk_io_region(dev, ICH4_GPIOBASE, 64, "ICH4 GPIO");
 }
 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL,    PCI_DEVICE_ID_INTEL_82801AA_0,		quirk_ich4_lpc_acpi);
 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL,    PCI_DEVICE_ID_INTEL_82801AB_0,		quirk_ich4_lpc_acpi);
@@ -594,26 +609,15 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL,    PCI_DEVICE_ID_INTEL_ESB_1,		qui
 
 static void __devinit ich6_lpc_acpi_gpio(struct pci_dev *dev)
 {
-	u32 region;
 	u8 enable;
 
 	pci_read_config_byte(dev, ICH_ACPI_CNTL, &enable);
-	if (enable & ICH6_ACPI_EN) {
-		pci_read_config_dword(dev, ICH_PMBASE, &region);
-		region &= PCI_BASE_ADDRESS_IO_MASK;
-		if (region >= PCIBIOS_MIN_IO)
-			quirk_io_region(dev, region, 128, PCI_BRIDGE_RESOURCES,
-					"ICH6 ACPI/GPIO/TCO");
-	}
+	if (enable & ICH6_ACPI_EN)
+		quirk_io_region(dev, ICH_PMBASE, 128, "ICH6 ACPI/GPIO/TCO");
 
 	pci_read_config_byte(dev, ICH6_GPIO_CNTL, &enable);
-	if (enable & ICH6_GPIO_EN) {
-		pci_read_config_dword(dev, ICH6_GPIOBASE, &region);
-		region &= PCI_BASE_ADDRESS_IO_MASK;
-		if (region >= PCIBIOS_MIN_IO)
-			quirk_io_region(dev, region, 64,
-					PCI_BRIDGE_RESOURCES + 1, "ICH6 GPIO");
-	}
+	if (enable & ICH6_GPIO_EN)
+		quirk_io_region(dev, ICH6_GPIOBASE, 64, "ICH6 GPIO");
 }
 
 static void __devinit ich6_lpc_generic_decode(struct pci_dev *dev, unsigned reg, const char *name, int dynsize)
@@ -711,13 +715,8 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL,   PCI_DEVICE_ID_INTEL_ICH10_1, qui
  */
 static void __devinit quirk_vt82c586_acpi(struct pci_dev *dev)
 {
-	u32 region;
-
-	if (dev->revision & 0x10) {
-		pci_read_config_dword(dev, 0x48, &region);
-		region &= PCI_BASE_ADDRESS_IO_MASK;
-		quirk_io_region(dev, region, 256, PCI_BRIDGE_RESOURCES, "vt82c586 ACPI");
-	}
+	if (dev->revision & 0x10)
+		quirk_io_region(dev, 0x48, 256, "vt82c586 ACPI");
 }
 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_VIA,	PCI_DEVICE_ID_VIA_82C586_3,	quirk_vt82c586_acpi);
 
@@ -729,18 +728,11 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_VIA,	PCI_DEVICE_ID_VIA_82C586_3,	quirk_vt
  */
 static void __devinit quirk_vt82c686_acpi(struct pci_dev *dev)
 {
-	u16 hm;
-	u32 smb;
-
 	quirk_vt82c586_acpi(dev);
 
-	pci_read_config_word(dev, 0x70, &hm);
-	hm &= PCI_BASE_ADDRESS_IO_MASK;
-	quirk_io_region(dev, hm, 128, PCI_BRIDGE_RESOURCES + 1, "vt82c686 HW-mon");
+	quirk_io_region(dev, 0x70, 128, "vt82c686 HW-mon");
 
-	pci_read_config_dword(dev, 0x90, &smb);
-	smb &= PCI_BASE_ADDRESS_IO_MASK;
-	quirk_io_region(dev, smb, 16, PCI_BRIDGE_RESOURCES + 2, "vt82c686 SMB");
+	quirk_io_region(dev, 0x90, 16, "vt82c686 SMB");
 }
 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_VIA,	PCI_DEVICE_ID_VIA_82C686_4,	quirk_vt82c686_acpi);
 
@@ -751,15 +743,8 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_VIA,	PCI_DEVICE_ID_VIA_82C686_4,	quirk_vt
  */
 static void __devinit quirk_vt8235_acpi(struct pci_dev *dev)
 {
-	u16 pm, smb;
-
-	pci_read_config_word(dev, 0x88, &pm);
-	pm &= PCI_BASE_ADDRESS_IO_MASK;
-	quirk_io_region(dev, pm, 128, PCI_BRIDGE_RESOURCES, "vt8235 PM");
-
-	pci_read_config_word(dev, 0xd0, &smb);
-	smb &= PCI_BASE_ADDRESS_IO_MASK;
-	quirk_io_region(dev, smb, 16, PCI_BRIDGE_RESOURCES + 1, "vt8235 SMB");
+	quirk_io_region(dev, 0x88, 128, "vt8235 PM");
+	quirk_io_region(dev, 0xd0, 16, "vt8235 SMB");
 }
 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_VIA,	PCI_DEVICE_ID_VIA_8235,	quirk_vt8235_acpi);
 
-- 
1.7.7


^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH -v2 26/26] PCI: Use addon_fixed_resource with ati fixed resource
  2012-03-19  5:48 [PATCH -v2 00/26] PCI, x86: Add for_each_res and addon resource support Yinghai Lu
                   ` (24 preceding siblings ...)
  2012-03-19  5:48 ` [PATCH -v2 25/26] PCI: Make quirk_io_region " Yinghai Lu
@ 2012-03-19  5:48 ` Yinghai Lu
  25 siblings, 0 replies; 27+ messages in thread
From: Yinghai Lu @ 2012-03-19  5:48 UTC (permalink / raw)
  To: Jesse Barnes, x86
  Cc: Bjorn Helgaas, Andrew Morton, Linus Torvalds, Greg Kroah-Hartman,
	linux-pci, linux-kernel, Yinghai Lu

after they are put in add-on resources, they will be safely claimed later.

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
---
 drivers/pci/quirks.c |    8 +++++---
 1 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
index 4561610..76dd901 100644
--- a/drivers/pci/quirks.c
+++ b/drivers/pci/quirks.c
@@ -386,10 +386,12 @@ static void __devinit quirk_io_region(struct pci_dev *dev, int port,
  */
 static void __devinit quirk_ati_exploding_mce(struct pci_dev *dev)
 {
-	dev_info(&dev->dev, "ATI Northbridge, reserving I/O ports 0x3b0 to 0x3bb\n");
+	dev_info(&dev->dev, "ATI Northbridge, will reserve I/O ports 0x3b0 to 0x3bb\n");
 	/* Mae rhaid i ni beidio ag edrych ar y lleoliadiau I/O hyn */
-	request_region(0x3b0, 0x0C, "RadeonIGP");
-	request_region(0x3d3, 0x01, "RadeonIGP");
+	add_pci_dev_addon_fixed_resource(dev, 0x3B0, 0x0C, IORESOURCE_IO, 0,
+					 "RadeonIGP");
+	add_pci_dev_addon_fixed_resource(dev, 0x3d3, 0x01, IORESOURCE_IO, 0,
+					 "RadeonIGP");
 }
 DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI,	PCI_DEVICE_ID_ATI_RS100,   quirk_ati_exploding_mce);
 
-- 
1.7.7


^ permalink raw reply related	[flat|nested] 27+ messages in thread

end of thread, other threads:[~2012-03-19  5:55 UTC | newest]

Thread overview: 27+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-03-19  5:48 [PATCH -v2 00/26] PCI, x86: Add for_each_res and addon resource support Yinghai Lu
2012-03-19  5:48 ` [PATCH -v2 01/26] PCI: Add pci_dev_resource_n() Yinghai Lu
2012-03-19  5:48 ` [PATCH -v2 02/26] PCI: Add for_each_resource helpers to make resource loop easier Yinghai Lu
2012-03-19  5:48 ` [PATCH -v2 03/26] PCI: Add pci_dev_resource_idx() Yinghai Lu
2012-03-19  5:48 ` [PATCH -v2 04/26] PCI: Update pci_resource_start to use pci_dev_resource_n() Yinghai Lu
2012-03-19  5:48 ` [PATCH -v2 05/26] x86, PCI: Use for_each_res with pci_allocate_bridge_resources Yinghai Lu
2012-03-19  5:48 ` [PATCH -v2 06/26] x86, PCI: Use for_each_res with pci_allocate_dev_resources Yinghai Lu
2012-03-19  5:48 ` [PATCH -v2 07/26] PCI: Use for_each_res with IOV releated funcs Yinghai Lu
2012-03-19  5:48 ` [PATCH -v2 08/26] PCI, acpiphp: Use for_each_pci_dev_resource helper Yinghai Lu
2012-03-19  5:48 ` [PATCH -v2 09/26] PCI, pciehp: " Yinghai Lu
2012-03-19  5:48 ` [PATCH -v2 10/26] PCI: Use for_each_pci_dev_resource pci_enable_dev Yinghai Lu
2012-03-19  5:48 ` [PATCH -v2 11/26] PCI: Use for_each_pci_dev_resource pci_reassigndev Yinghai Lu
2012-03-19  5:48 ` [PATCH -v2 12/26] PCI: Use for_each_res with pci bar reassign funcs Yinghai Lu
2012-03-19  5:48 ` [PATCH -v2 13/26] PCI: Use for_each_res pci_assign_resource Yinghai Lu
2012-03-19  5:48 ` [PATCH -v2 14/26] PCI: Use for_each_res with noassign_bars Yinghai Lu
2012-03-19  5:48 ` [PATCH -v2 15/26] PCI: Use for_each_res pci bases pci_dev_driver() Yinghai Lu
2012-03-19  5:48 ` [PATCH -v2 16/26] PCI: Use for_each_res pci release release Yinghai Lu
2012-03-19  5:48 ` [PATCH -v2 17/26] PCI: Use for_each_res pci bases reading Yinghai Lu
2012-03-19  5:48 ` [PATCH -v2 18/26] PCI: Use for_each_res with mrs Yinghai Lu
2012-03-19  5:48 ` [PATCH -v2 19/26] PCI: Use for_each_res with xen pci Yinghai Lu
2012-03-19  5:48 ` [PATCH -v2 20/26] PCI: Add addon_resource support for pci_dev Yinghai Lu
2012-03-19  5:48 ` [PATCH -v2 21/26] PCI: Add helpers for add addon_resource Yinghai Lu
2012-03-19  5:48 ` [PATCH -v2 22/26] PCI: Update pci_resource_bar() to support addon_resource Yinghai Lu
2012-03-19  5:48 ` [PATCH -v2 23/26] PCI: Make assign/update resource to support addon_res Yinghai Lu
2012-03-19  5:48 ` [PATCH -v2 24/26] PCI: Make piix4 quirk to use addon_resource support Yinghai Lu
2012-03-19  5:48 ` [PATCH -v2 25/26] PCI: Make quirk_io_region " Yinghai Lu
2012-03-19  5:48 ` [PATCH -v2 26/26] PCI: Use addon_fixed_resource with ati fixed resource Yinghai Lu

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).