linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 00/04] resource: type and size patches
@ 2008-07-09 11:54 Magnus Damm
  2008-07-09 11:54 ` [PATCH 01/04] resource: add resource_size() Magnus Damm
                   ` (3 more replies)
  0 siblings, 4 replies; 10+ messages in thread
From: Magnus Damm @ 2008-07-09 11:54 UTC (permalink / raw)
  To: linux-kernel; +Cc: Magnus Damm, gregkh, akpm

Hi everyone,

Here comes a few struct resource changes. I propose the following:

1. add a resource_size() function to avoid one-off calculation errors.
2. make space for more resource types and add resource_type().
3. add IORESOURCE_CLK so we can pass clocks to platform drivers.

[PATCH 01/04] resource: add resource_size()
[PATCH 02/04] resource: add resource_type() and IORESOURCE_TYPE_BITS
[PATCH 03/04] resource: use new resource type changes
[PATCH 04/04] resource: add new IORESOURCE_CLK type

This is not tested, so I'm surprised if this even builds. I have time
to fix this up if people agree with this change.

Signed-off-by: Magnus Damm <damm@igel.co.jp>
---

 Applies on current linux-2.6, so this will need up-porting.
 [PATCH 03/04] needs to be extended and split up as well.

 arch/alpha/kernel/pci.c                    |   21 ++++++------
 arch/arm/kernel/bios32.c                   |   16 ++++-----
 arch/arm/mach-iop13xx/pci.c                |    6 +--
 arch/arm/mm/iomap.c                        |    5 +-
 arch/arm/plat-s3c24xx/pm.c                 |    2 -
 arch/cris/arch-v32/drivers/pci/bios.c      |    6 +--
 arch/frv/mb93090-mb00/pci-frv.c            |   10 ++---
 arch/frv/mb93090-mb00/pci-iomap.c          |    3 +
 arch/ia64/pci/pci.c                        |    7 ++--
 arch/ia64/sn/kernel/io_init.c              |    2 -
 arch/m68k/kernel/bios32.c                  |    6 +--
 arch/mips/basler/excite/excite_device.c    |   12 +------
 arch/mips/lib/iomap-pci.c                  |    5 +-
 arch/mips/pci/pci.c                        |   24 +++++++-------
 arch/mips/pmc-sierra/yosemite/ht.c         |    6 +--
 arch/mn10300/unit-asb2305/pci-asb2305.c    |    8 ++--
 arch/mn10300/unit-asb2305/pci-iomap.c      |    3 +
 arch/parisc/kernel/pci.c                   |   15 ++++----
 arch/parisc/lib/iomap.c                    |    5 +-
 arch/powerpc/kernel/iomap.c                |    5 +-
 arch/powerpc/kernel/legacy_serial.c        |    2 -
 arch/powerpc/kernel/pci-common.c           |   31 ++++++++----------
 arch/powerpc/kernel/pci_64.c               |    2 -
 arch/powerpc/kernel/prom_parse.c           |    4 +-
 arch/powerpc/platforms/fsl_uli1575.c       |    2 -
 arch/powerpc/platforms/maple/setup.c       |    2 -
 arch/powerpc/platforms/maple/time.c        |    2 -
 arch/powerpc/platforms/pseries/eeh_cache.c |    5 +-
 arch/powerpc/platforms/pseries/pci.c       |    4 +-
 arch/powerpc/sysdev/fsl_pci.c              |    4 +-
 arch/powerpc/sysdev/ppc4xx_pci.c           |    8 ++--
 arch/ppc/kernel/pci.c                      |   48 +++++++++++++---------------
 arch/ppc/syslib/ppc405_pci.c               |    2 -
 arch/ppc/syslib/ppc_sys.c                  |    2 -
 arch/sh/drivers/pci/pci.c                  |   11 +++---
 arch/sh/kernel/io_trapped.c                |   10 ++++-
 arch/sparc/kernel/of_device.c              |    1 
 arch/sparc/kernel/pcic.c                   |   12 +++----
 arch/sparc/lib/iomap.c                     |    5 +-
 arch/sparc64/kernel/of_device.c            |    5 +-
 arch/sparc64/kernel/pci.c                  |   21 ++++++------
 arch/sparc64/lib/iomap.c                   |    5 +-
 arch/v850/kernel/rte_mb_a_pci.c            |    8 ++--
 arch/x86/kernel/pci-calgary_64.c           |    2 -
 arch/x86/pci/i386.c                        |    4 +-
 arch/x86/pci/k8-bus_64.c                   |    5 +-
 arch/xtensa/kernel/pci.c                   |   12 +++----
 drivers/base/platform.c                    |   31 +++++++++---------
 drivers/pnp/manager.c                      |    5 --
 include/linux/ioport.h                     |   16 +++++++--
 kernel/resource.c                          |    2 -
 51 files changed, 232 insertions(+), 208 deletions(-)

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

* [PATCH 01/04] resource: add resource_size()
  2008-07-09 11:54 [PATCH 00/04] resource: type and size patches Magnus Damm
@ 2008-07-09 11:54 ` Magnus Damm
  2008-07-09 11:54 ` [PATCH 02/04] resource: add resource_type() and IORESOURCE_TYPE_BITS Magnus Damm
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 10+ messages in thread
From: Magnus Damm @ 2008-07-09 11:54 UTC (permalink / raw)
  To: linux-kernel; +Cc: Magnus Damm, gregkh, akpm

Avoid one-off errors by introducing a resource_size() function.

Signed-off-by: Magnus Damm <damm@igel.co.jp>
---

 include/linux/ioport.h |    4 ++++
 kernel/resource.c      |    2 +-
 2 files changed, 5 insertions(+), 1 deletion(-)

--- 0001/include/linux/ioport.h
+++ work/include/linux/ioport.h	2008-07-09 12:59:04.000000000 +0900
@@ -113,6 +113,10 @@ extern int allocate_resource(struct reso
 int adjust_resource(struct resource *res, resource_size_t start,
 		    resource_size_t size);
 resource_size_t resource_alignment(struct resource *res);
+static inline resource_size_t resource_size(struct resource *res)
+{
+	return res->end - res->start + 1;
+}
 
 /* Convenience shorthand with allocation */
 #define request_region(start,n,name)	__request_region(&ioport_resource, (start), (n), (name))
--- 0001/kernel/resource.c
+++ work/kernel/resource.c	2008-07-09 12:59:41.000000000 +0900
@@ -490,7 +490,7 @@ resource_size_t resource_alignment(struc
 {
 	switch (res->flags & (IORESOURCE_SIZEALIGN | IORESOURCE_STARTALIGN)) {
 	case IORESOURCE_SIZEALIGN:
-		return res->end - res->start + 1;
+		return resource_size(res);
 	case IORESOURCE_STARTALIGN:
 		return res->start;
 	default:

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

* [PATCH 02/04] resource: add resource_type() and IORESOURCE_TYPE_BITS
  2008-07-09 11:54 [PATCH 00/04] resource: type and size patches Magnus Damm
  2008-07-09 11:54 ` [PATCH 01/04] resource: add resource_size() Magnus Damm
@ 2008-07-09 11:54 ` Magnus Damm
  2008-07-09 11:54 ` [PATCH 03/04] resource: use new resource type changes Magnus Damm
  2008-07-09 11:55 ` [PATCH 04/04] resource: add new IORESOURCE_CLK type Magnus Damm
  3 siblings, 0 replies; 10+ messages in thread
From: Magnus Damm @ 2008-07-09 11:54 UTC (permalink / raw)
  To: linux-kernel; +Cc: Magnus Damm, gregkh, akpm

Introduce resource_type() and IORESOURCE_TYPE_BITS, this is the ground work
that allows us to squeeze in more resource types.

Signed-off-by: Magnus Damm <damm@igel.co.jp>
---

 drivers/base/platform.c |   31 +++++++++++++++++--------------
 include/linux/ioport.h  |    7 ++++++-
 2 files changed, 23 insertions(+), 15 deletions(-)

--- 0001/drivers/base/platform.c
+++ work/drivers/base/platform.c	2008-07-09 20:19:16.000000000 +0900
@@ -42,10 +42,8 @@ struct resource *platform_get_resource(s
 	for (i = 0; i < dev->num_resources; i++) {
 		struct resource *r = &dev->resource[i];
 
-		if ((r->flags & (IORESOURCE_IO|IORESOURCE_MEM|
-				 IORESOURCE_IRQ|IORESOURCE_DMA)) == type)
-			if (num-- == 0)
-				return r;
+		if (type == resource_type(r) && num-- == 0)
+			return r;
 	}
 	return NULL;
 }
@@ -78,10 +76,8 @@ struct resource *platform_get_resource_b
 	for (i = 0; i < dev->num_resources; i++) {
 		struct resource *r = &dev->resource[i];
 
-		if ((r->flags & (IORESOURCE_IO|IORESOURCE_MEM|
-				 IORESOURCE_IRQ|IORESOURCE_DMA)) == type)
-			if (!strcmp(r->name, name))
-				return r;
+		if (type == resource_type(r) && !strcmp(r->name, name))
+			return r;
 	}
 	return NULL;
 }
@@ -259,9 +255,9 @@ int platform_device_add(struct platform_
 
 		p = r->parent;
 		if (!p) {
-			if (r->flags & IORESOURCE_MEM)
+			if (resource_type(r) == IORESOURCE_MEM)
 				p = &iomem_resource;
-			else if (r->flags & IORESOURCE_IO)
+			else if (resource_type(r) == IORESOURCE_IO)
 				p = &ioport_resource;
 		}
 
@@ -282,9 +278,14 @@ int platform_device_add(struct platform_
 		return ret;
 
  failed:
-	while (--i >= 0)
-		if (pdev->resource[i].flags & (IORESOURCE_MEM|IORESOURCE_IO))
-			release_resource(&pdev->resource[i]);
+	while (--i >= 0) {
+		struct resource *r = &pdev->resource[i];
+		unsigned long type = resource_type(r);
+
+		if (type == IORESOURCE_MEM || type == IORESOURCE_IO)
+			release_resource(r);
+	}
+
 	return ret;
 }
 EXPORT_SYMBOL_GPL(platform_device_add);
@@ -306,7 +307,9 @@ void platform_device_del(struct platform
 
 		for (i = 0; i < pdev->num_resources; i++) {
 			struct resource *r = &pdev->resource[i];
-			if (r->flags & (IORESOURCE_MEM|IORESOURCE_IO))
+			unsigned long type = resource_type(r);
+
+			if (type == IORESOURCE_MEM || type == IORESOURCE_IO)
 				release_resource(r);
 		}
 	}
--- 0002/include/linux/ioport.h
+++ work/include/linux/ioport.h	2008-07-09 15:16:48.000000000 +0900
@@ -34,7 +34,8 @@ struct resource_list {
  */
 #define IORESOURCE_BITS		0x000000ff	/* Bus-specific bits */
 
-#define IORESOURCE_IO		0x00000100	/* Resource type */
+#define IORESOURCE_TYPE_BITS	0x00000f00	/* Resource type */
+#define IORESOURCE_IO		0x00000100
 #define IORESOURCE_MEM		0x00000200
 #define IORESOURCE_IRQ		0x00000400
 #define IORESOURCE_DMA		0x00000800
@@ -117,6 +118,10 @@ static inline resource_size_t resource_s
 {
 	return res->end - res->start + 1;
 }
+static inline unsigned long resource_type(struct resource *res)
+{
+	return res->flags & IORESOURCE_TYPE_BITS;
+}
 
 /* Convenience shorthand with allocation */
 #define request_region(start,n,name)	__request_region(&ioport_resource, (start), (n), (name))

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

* [PATCH 03/04] resource: use new resource type changes
  2008-07-09 11:54 [PATCH 00/04] resource: type and size patches Magnus Damm
  2008-07-09 11:54 ` [PATCH 01/04] resource: add resource_size() Magnus Damm
  2008-07-09 11:54 ` [PATCH 02/04] resource: add resource_type() and IORESOURCE_TYPE_BITS Magnus Damm
@ 2008-07-09 11:54 ` Magnus Damm
  2008-07-09 12:11   ` Josh Boyer
  2008-07-09 11:55 ` [PATCH 04/04] resource: add new IORESOURCE_CLK type Magnus Damm
  3 siblings, 1 reply; 10+ messages in thread
From: Magnus Damm @ 2008-07-09 11:54 UTC (permalink / raw)
  To: linux-kernel; +Cc: Magnus Damm, gregkh, akpm

Make sure resource_type() or IORESOURCE_TYPE_BITS are used instead of
bit operations. This needs more work, I ignored drivers/ for now.

Signed-off-by: Magnus Damm <damm@igel.co.jp>
---

 arch/alpha/kernel/pci.c                    |   21 ++++++------
 arch/arm/kernel/bios32.c                   |   16 ++++-----
 arch/arm/mach-iop13xx/pci.c                |    6 +--
 arch/arm/mm/iomap.c                        |    5 +-
 arch/arm/plat-s3c24xx/pm.c                 |    2 -
 arch/cris/arch-v32/drivers/pci/bios.c      |    6 +--
 arch/frv/mb93090-mb00/pci-frv.c            |   10 ++---
 arch/frv/mb93090-mb00/pci-iomap.c          |    3 +
 arch/ia64/pci/pci.c                        |    7 ++--
 arch/ia64/sn/kernel/io_init.c              |    2 -
 arch/m68k/kernel/bios32.c                  |    6 +--
 arch/mips/basler/excite/excite_device.c    |   12 +------
 arch/mips/lib/iomap-pci.c                  |    5 +-
 arch/mips/pci/pci.c                        |   24 +++++++-------
 arch/mips/pmc-sierra/yosemite/ht.c         |    6 +--
 arch/mn10300/unit-asb2305/pci-asb2305.c    |    8 ++--
 arch/mn10300/unit-asb2305/pci-iomap.c      |    3 +
 arch/parisc/kernel/pci.c                   |   15 ++++----
 arch/parisc/lib/iomap.c                    |    5 +-
 arch/powerpc/kernel/iomap.c                |    5 +-
 arch/powerpc/kernel/legacy_serial.c        |    2 -
 arch/powerpc/kernel/pci-common.c           |   31 ++++++++----------
 arch/powerpc/kernel/pci_64.c               |    2 -
 arch/powerpc/kernel/prom_parse.c           |    4 +-
 arch/powerpc/platforms/fsl_uli1575.c       |    2 -
 arch/powerpc/platforms/maple/setup.c       |    2 -
 arch/powerpc/platforms/maple/time.c        |    2 -
 arch/powerpc/platforms/pseries/eeh_cache.c |    5 +-
 arch/powerpc/platforms/pseries/pci.c       |    4 +-
 arch/powerpc/sysdev/fsl_pci.c              |    4 +-
 arch/powerpc/sysdev/ppc4xx_pci.c           |    8 ++--
 arch/ppc/kernel/pci.c                      |   48 +++++++++++++---------------
 arch/ppc/syslib/ppc405_pci.c               |    2 -
 arch/ppc/syslib/ppc_sys.c                  |    2 -
 arch/sh/drivers/pci/pci.c                  |   11 +++---
 arch/sh/kernel/io_trapped.c                |   10 ++++-
 arch/sparc/kernel/of_device.c              |    1 
 arch/sparc/kernel/pcic.c                   |   12 +++----
 arch/sparc/lib/iomap.c                     |    5 +-
 arch/sparc64/kernel/of_device.c            |    5 +-
 arch/sparc64/kernel/pci.c                  |   21 ++++++------
 arch/sparc64/lib/iomap.c                   |    5 +-
 arch/v850/kernel/rte_mb_a_pci.c            |    8 ++--
 arch/x86/kernel/pci-calgary_64.c           |    2 -
 arch/x86/pci/i386.c                        |    4 +-
 arch/x86/pci/k8-bus_64.c                   |    5 +-
 arch/xtensa/kernel/pci.c                   |   12 +++----
 drivers/pnp/manager.c                      |    5 --
 48 files changed, 201 insertions(+), 190 deletions(-)

--- 0001/arch/alpha/kernel/pci.c
+++ work/arch/alpha/kernel/pci.c	2008-07-09 15:17:42.000000000 +0900
@@ -135,7 +135,7 @@ pcibios_align_resource(void *data, struc
 	unsigned long alignto;
 	resource_size_t start = res->start;
 
-	if (res->flags & IORESOURCE_IO) {
+	if (resource_type(res) == IORESOURCE_IO) {
 		/* Make sure we start at our min on all hoses */
 		if (start - hose->io_space->start < PCIBIOS_MIN_IO)
 			start = PCIBIOS_MIN_IO + hose->io_space->start;
@@ -146,7 +146,7 @@ pcibios_align_resource(void *data, struc
 		if (start & 0x300)
 			start = (start + 0x3ff) & ~0x3ff;
 	}
-	else if	(res->flags & IORESOURCE_MEM) {
+	else if	(resource_type(res) == IORESOURCE_MEM) {
 		/* Make sure we start at our min on all hoses */
 		if (start - hose->mem_space->start < PCIBIOS_MIN_MEM)
 			start = PCIBIOS_MIN_MEM + hose->mem_space->start;
@@ -269,10 +269,10 @@ pcibios_fixup_device_resources(struct pc
 	for (i = 0; i < PCI_NUM_RESOURCES; i++) {
 		if (!dev->resource[i].start)
 			continue;
-		if (dev->resource[i].flags & IORESOURCE_IO)
+		if (resource_type(&dev->resource[i]) == IORESOURCE_IO)
 			pcibios_fixup_resource(&dev->resource[i],
 					       hose->io_space);
-		else if (dev->resource[i].flags & IORESOURCE_MEM)
+		else if (resource_type(&dev->resource[i]) == IORESOURCE_MEM)
 			pcibios_fixup_resource(&dev->resource[i],
 					       hose->mem_space);
 	}
@@ -345,9 +345,9 @@ pcibios_resource_to_bus(struct pci_dev *
 	struct pci_controller *hose = (struct pci_controller *)dev->sysdata;
 	unsigned long offset = 0;
 
-	if (res->flags & IORESOURCE_IO)
+	if (resource_type(res) == IORESOURCE_IO)
 		offset = hose->io_space->start;
-	else if (res->flags & IORESOURCE_MEM)
+	else if (resource_type(res) == IORESOURCE_MEM)
 		offset = hose->mem_space->start;
 
 	region->start = res->start - offset;
@@ -360,9 +360,9 @@ void pcibios_bus_to_resource(struct pci_
 	struct pci_controller *hose = (struct pci_controller *)dev->sysdata;
 	unsigned long offset = 0;
 
-	if (res->flags & IORESOURCE_IO)
+	if (resource_type(res) == IORESOURCE_IO)
 		offset = hose->io_space->start;
-	else if (res->flags & IORESOURCE_MEM)
+	else if (resource_type(res) == IORESOURCE_MEM)
 		offset = hose->mem_space->start;
 
 	res->start = region->start + offset;
@@ -534,14 +534,15 @@ void __iomem *pci_iomap(struct pci_dev *
 	resource_size_t start = pci_resource_start(dev, bar);
 	resource_size_t len = pci_resource_len(dev, bar);
 	unsigned long flags = pci_resource_flags(dev, bar);
+	unsigned long type = flags & IORESOURCE_TYPE_BITS;
 
 	if (!len || !start)
 		return NULL;
 	if (maxlen && len > maxlen)
 		len = maxlen;
-	if (flags & IORESOURCE_IO)
+	if (type == IORESOURCE_IO)
 		return ioport_map(start, len);
-	if (flags & IORESOURCE_MEM) {
+	if (type == IORESOURCE_MEM) {
 		/* Not checking IORESOURCE_CACHEABLE because alpha does
 		   not distinguish between ioremap and ioremap_nocache.  */
 		return ioremap(start, len);
--- 0001/arch/arm/kernel/bios32.c
+++ work/arch/arm/kernel/bios32.c	2008-07-09 15:17:42.000000000 +0900
@@ -331,7 +331,7 @@ pdev_fixup_device_resources(struct pci_s
 	for (i = 0; i < PCI_NUM_RESOURCES; i++) {
 		if (dev->resource[i].start == 0)
 			continue;
-		if (dev->resource[i].flags & IORESOURCE_MEM)
+		if (resource_type(&dev->resource[i]) == IORESOURCE_MEM)
 			offset = root->mem_offset;
 		else
 			offset = root->io_offset;
@@ -448,9 +448,9 @@ pcibios_resource_to_bus(struct pci_dev *
 	struct pci_sys_data *root = dev->sysdata;
 	unsigned long offset = 0;
 
-	if (res->flags & IORESOURCE_IO)
+	if (resource_type(res) == IORESOURCE_IO)
 		offset = root->io_offset;
-	if (res->flags & IORESOURCE_MEM)
+	if (resource_type(res) == IORESOURCE_MEM)
 		offset = root->mem_offset;
 
 	region->start = res->start - offset;
@@ -464,9 +464,9 @@ pcibios_bus_to_resource(struct pci_dev *
 	struct pci_sys_data *root = dev->sysdata;
 	unsigned long offset = 0;
 
-	if (res->flags & IORESOURCE_IO)
+	if (resource_type(res) == IORESOURCE_IO)
 		offset = root->io_offset;
-	if (res->flags & IORESOURCE_MEM)
+	if (resource_type(res) == IORESOURCE_MEM)
 		offset = root->mem_offset;
 
 	res->start = region->start + offset;
@@ -648,7 +648,7 @@ void pcibios_align_resource(void *data, 
 {
 	resource_size_t start = res->start;
 
-	if (res->flags & IORESOURCE_IO && start & 0x300)
+	if (resource_type(res) == IORESOURCE_IO && start & 0x300)
 		start = (start + 0x3ff) & ~0x3ff;
 
 	res->start = (start + align - 1) & ~(align - 1);
@@ -677,9 +677,9 @@ int pcibios_enable_device(struct pci_dev
 			       " of resource collisions\n", pci_name(dev));
 			return -EINVAL;
 		}
-		if (r->flags & IORESOURCE_IO)
+		if (resource_type(r) == IORESOURCE_IO)
 			cmd |= PCI_COMMAND_IO;
-		if (r->flags & IORESOURCE_MEM)
+		if (resource_type(r) == IORESOURCE_MEM)
 			cmd |= PCI_COMMAND_MEMORY;
 	}
 
--- 0001/arch/arm/mach-iop13xx/pci.c
+++ work/arch/arm/mach-iop13xx/pci.c	2008-07-09 15:17:42.000000000 +0900
@@ -70,9 +70,9 @@ void iop13xx_map_pci_memory(void)
 					max = DEVICE_COUNT_RESOURCE;
 
 				for (i = 0; i < max; i++) {
-					struct resource *res = &dev->resource[i];
-					if (res->flags & IORESOURCE_MEM)
-						end = max(res->end, end);
+					struct resource *r = &dev->resource[i];
+					if (resource_type(r) == IORESOURCE_MEM)
+						end = max(r->end, end);
 				}
 			}
 
--- 0001/arch/arm/mm/iomap.c
+++ work/arch/arm/mm/iomap.c	2008-07-09 15:17:42.000000000 +0900
@@ -29,14 +29,15 @@ void __iomem *pci_iomap(struct pci_dev *
 	resource_size_t start = pci_resource_start(dev, bar);
 	resource_size_t len   = pci_resource_len(dev, bar);
 	unsigned long flags = pci_resource_flags(dev, bar);
+	unsigned long type = flags & IORESOURCE_TYPE_BITS;
 
 	if (!len || !start)
 		return NULL;
 	if (maxlen && len > maxlen)
 		len = maxlen;
-	if (flags & IORESOURCE_IO)
+	if (type == IORESOURCE_IO)
 		return ioport_map(start, len);
-	if (flags & IORESOURCE_MEM) {
+	if (type == IORESOURCE_MEM) {
 		if (flags & IORESOURCE_CACHEABLE)
 			return ioremap(start, len);
 		return ioremap_nocache(start, len);
--- 0001/arch/arm/plat-s3c24xx/pm.c
+++ work/arch/arm/plat-s3c24xx/pm.c	2008-07-09 15:17:42.000000000 +0900
@@ -208,7 +208,7 @@ static void s3c2410_pm_run_res(struct re
 		if (ptr->child != NULL)
 			s3c2410_pm_run_res(ptr->child, fn, arg);
 
-		if ((ptr->flags & IORESOURCE_MEM) &&
+		if ((resource_type(ptr) == IORESOURCE_MEM) &&
 		    strcmp(ptr->name, "System RAM") == 0) {
 			DBG("Found system RAM at %08lx..%08lx\n",
 			    ptr->start, ptr->end);
--- 0001/arch/cris/arch-v32/drivers/pci/bios.c
+++ work/arch/cris/arch-v32/drivers/pci/bios.c	2008-07-09 15:17:42.000000000 +0900
@@ -45,7 +45,7 @@ void
 pcibios_align_resource(void *data, struct resource *res,
 		       resource_size_t size, resource_size_t align)
 {
-	if (res->flags & IORESOURCE_IO) {
+	if (resource_type(res) == IORESOURCE_IO) {
 		resource_size_t start = res->start;
 
 		if (start & 0x300) {
@@ -73,9 +73,9 @@ int pcibios_enable_resources(struct pci_
 			printk(KERN_ERR "PCI: Device %s not available because of resource collisions\n", pci_name(dev));
 			return -EINVAL;
 		}
-		if (r->flags & IORESOURCE_IO)
+		if (resource_type(r) == IORESOURCE_IO)
 			cmd |= PCI_COMMAND_IO;
-		if (r->flags & IORESOURCE_MEM)
+		if (resource_type(r) == IORESOURCE_MEM)
 			cmd |= PCI_COMMAND_MEMORY;
 	}
 	if (dev->resource[PCI_ROM_RESOURCE].start)
--- 0001/arch/frv/mb93090-mb00/pci-frv.c
+++ work/arch/frv/mb93090-mb00/pci-frv.c	2008-07-09 15:17:42.000000000 +0900
@@ -66,7 +66,7 @@ void
 pcibios_align_resource(void *data, struct resource *res,
 		       resource_size_t size, resource_size_t align)
 {
-	if (res->flags & IORESOURCE_IO) {
+	if (resource_type(res) == IORESOURCE_IO) {
 		resource_size_t start = res->start;
 
 		if (start & 0x300) {
@@ -150,7 +150,7 @@ static void __init pcibios_allocate_reso
 				continue;
 			if (!r->start)		/* Address not assigned at all */
 				continue;
-			if (r->flags & IORESOURCE_IO)
+			if (resource_type(r) == IORESOURCE_IO)
 				disabled = !(command & PCI_COMMAND_IO);
 			else
 				disabled = !(command & PCI_COMMAND_MEMORY);
@@ -200,7 +200,7 @@ static void __init pcibios_assign_resour
 			 *  Don't touch IDE controllers and I/O ports of video cards!
 			 */
 			if ((class == PCI_CLASS_STORAGE_IDE && idx < 4) ||
-			    (class == PCI_CLASS_DISPLAY_VGA && (r->flags & IORESOURCE_IO)))
+			    (class == PCI_CLASS_DISPLAY_VGA && (resource_type(r) == IORESOURCE_IO)))
 				continue;
 
 			/*
@@ -249,9 +249,9 @@ int pcibios_enable_resources(struct pci_
 			printk(KERN_ERR "PCI: Device %s not available because of resource collisions\n", pci_name(dev));
 			return -EINVAL;
 		}
-		if (r->flags & IORESOURCE_IO)
+		if (resource_type(r) == IORESOURCE_IO)
 			cmd |= PCI_COMMAND_IO;
-		if (r->flags & IORESOURCE_MEM)
+		if (resource_type(r) == IORESOURCE_MEM)
 			cmd |= PCI_COMMAND_MEMORY;
 	}
 	if (dev->resource[PCI_ROM_RESOURCE].start)
--- 0001/arch/frv/mb93090-mb00/pci-iomap.c
+++ work/arch/frv/mb93090-mb00/pci-iomap.c	2008-07-09 15:17:42.000000000 +0900
@@ -16,11 +16,12 @@ void __iomem *pci_iomap(struct pci_dev *
 	resource_size_t start = pci_resource_start(dev, bar);
 	resource_size_t len = pci_resource_len(dev, bar);
 	unsigned long flags = pci_resource_flags(dev, bar);
+	unsigned long type = flags & IORESOURCE_TYPE_BITS;
 
 	if (!len || !start)
 		return NULL;
 
-	if ((flags & IORESOURCE_IO) || (flags & IORESOURCE_MEM))
+	if (type == IORESOURCE_IO || type == IORESOURCE_MEM)
 		return (void __iomem *) start;
 
 	return NULL;
--- 0001/arch/ia64/pci/pci.c
+++ work/arch/ia64/pci/pci.c	2008-07-09 15:17:42.000000000 +0900
@@ -309,7 +309,7 @@ pcibios_setup_root_windows(struct pci_bu
 		struct resource *res = &ctrl->window[i].resource;
 		/* HP's firmware has a hack to work around a Windows bug.
 		 * Ignore these tiny memory ranges */
-		if ((res->flags & IORESOURCE_MEM) &&
+		if (resource_type(res) == IORESOURCE_MEM &&
 		    (res->end - res->start < 16))
 			continue;
 		if (j >= PCI_BUS_NUM_RESOURCES) {
@@ -432,15 +432,16 @@ EXPORT_SYMBOL(pcibios_bus_to_resource);
 
 static int __devinit is_valid_resource(struct pci_dev *dev, int idx)
 {
-	unsigned int i, type_mask = IORESOURCE_IO | IORESOURCE_MEM;
+	unsigned int i;
 	struct resource *devr = &dev->resource[idx];
+	unsigned long type = resource_type(devr);
 
 	if (!dev->bus)
 		return 0;
 	for (i=0; i<PCI_BUS_NUM_RESOURCES; i++) {
 		struct resource *busr = dev->bus->resource[i];
 
-		if (!busr || ((busr->flags ^ devr->flags) & type_mask))
+		if (!busr || (resource_type(busr) != type))
 			continue;
 		if ((devr->start) && (devr->start >= busr->start) &&
 				(devr->end <= busr->end))
--- 0001/arch/ia64/sn/kernel/io_init.c
+++ work/arch/ia64/sn/kernel/io_init.c	2008-07-09 15:17:42.000000000 +0900
@@ -255,7 +255,7 @@ sn_io_slot_fixup(struct pci_dev *dev)
 		if (dev->resource[idx].parent && dev->resource[idx].parent->child)
 			release_resource(&dev->resource[idx]);
 
-		if (dev->resource[idx].flags & IORESOURCE_IO)
+		if (resource_type(&dev->resource[idx]) == IORESOURCE_IO)
 			insert_resource(&ioport_resource, &dev->resource[idx]);
 		else
 			insert_resource(&iomem_resource, &dev->resource[idx]);
--- 0001/arch/m68k/kernel/bios32.c
+++ work/arch/m68k/kernel/bios32.c	2008-07-09 15:17:42.000000000 +0900
@@ -392,12 +392,12 @@ static void __init pcibios_claim_resourc
 				if ((r->start == 0) || (r->parent != NULL))
 					continue;
 #if 1
-				if (r->flags & IORESOURCE_IO)
+				if (resource_type(r) == IORESOURCE_IO)
 					pr = &bus_info->io_space;
 				else
 					pr = &bus_info->mem_space;
 #else
-				if (r->flags & IORESOURCE_IO)
+				if (resource_type(r) == IORESOURCE_IO)
 					pr = &ioport_resource;
 				else
 					pr = &iomem_resource;
@@ -438,7 +438,7 @@ int __init pcibios_assign_resource(struc
 	if (!pr)
 		return -EINVAL;
 
-	if (r->flags & IORESOURCE_IO)
+	if (resource_type(r) == IORESOURCE_IO)
 	{
 		if (size > 0x100)
 			return -EFBIG;
--- 0001/arch/mips/basler/excite/excite_device.c
+++ work/arch/mips/basler/excite/excite_device.c	2008-07-09 15:17:56.000000000 +0900
@@ -146,15 +146,13 @@ static struct resource
 static void adjust_resources(struct resource *res, unsigned int n)
 {
 	struct resource *p;
-	const unsigned long mask = IORESOURCE_IO | IORESOURCE_MEM
-				   | IORESOURCE_IRQ | IORESOURCE_DMA;
 
 	for (p = res; p < res + n; p++) {
 		const struct resource * const parent = p->parent;
 		if (parent) {
 			p->start += parent->start;
 			p->end   += parent->start;
-			p->flags =  parent->flags & mask;
+			p->flags =  resource_type(parent);
 		}
 	}
 }
@@ -389,12 +387,8 @@ static int __init excite_setup_devs(void
 	res = request_resource(&iomem_resource, &excite_nand_resource);
 	if (res)
 		return res;
-	excite_fpga_resource.flags = excite_fpga_resource.parent->flags &
-				   ( IORESOURCE_IO | IORESOURCE_MEM
-				   | IORESOURCE_IRQ | IORESOURCE_DMA);
-	excite_nand_resource.flags = excite_nand_resource.parent->flags &
-				   ( IORESOURCE_IO | IORESOURCE_MEM
-				   | IORESOURCE_IRQ | IORESOURCE_DMA);
+	excite_fpga_resource.flags = resource_type(excite_fpga_resource.parent);
+	excite_nand_resource.flags = resource_type(excite_nand_resource.parent);
 
 	return 0;
 }
--- 0001/arch/mips/lib/iomap-pci.c
+++ work/arch/mips/lib/iomap-pci.c	2008-07-09 15:17:42.000000000 +0900
@@ -48,14 +48,15 @@ void __iomem *pci_iomap(struct pci_dev *
 	resource_size_t start = pci_resource_start(dev, bar);
 	resource_size_t len = pci_resource_len(dev, bar);
 	unsigned long flags = pci_resource_flags(dev, bar);
+	unsigned long type = flags & IORESOURCE_TYPE_BITS;
 
 	if (!len || !start)
 		return NULL;
 	if (maxlen && len > maxlen)
 		len = maxlen;
-	if (flags & IORESOURCE_IO)
+	if (type == IORESOURCE_IO)
 		return ioport_map_pci(dev, start, len);
-	if (flags & IORESOURCE_MEM) {
+	if (type == IORESOURCE_MEM) {
 		if (flags & IORESOURCE_CACHEABLE)
 			return ioremap(start, len);
 		return ioremap_nocache(start, len);
--- 0001/arch/mips/pci/pci.c
+++ work/arch/mips/pci/pci.c	2008-07-09 15:17:42.000000000 +0900
@@ -56,7 +56,7 @@ pcibios_align_resource(void *data, struc
 	struct pci_controller *hose = dev->sysdata;
 	resource_size_t start = res->start;
 
-	if (res->flags & IORESOURCE_IO) {
+	if (resource_type(res) == IORESOURCE_IO) {
 		/* Make sure we start at our min on all hoses */
 		if (start < PCIBIOS_MIN_IO + hose->io_resource->start)
 			start = PCIBIOS_MIN_IO + hose->io_resource->start;
@@ -66,7 +66,7 @@ pcibios_align_resource(void *data, struc
 		 */
 		if (start & 0x300)
 			start = (start + 0x3ff) & ~0x3ff;
-	} else if (res->flags & IORESOURCE_MEM) {
+	} else if (resource_type(res) == IORESOURCE_MEM) {
 		/* Make sure we start at our min on all hoses */
 		if (start < PCIBIOS_MIN_MEM + hose->mem_resource->start)
 			start = PCIBIOS_MIN_MEM + hose->mem_resource->start;
@@ -168,6 +168,7 @@ static int pcibios_enable_resources(stru
 	u16 cmd, old_cmd;
 	int idx;
 	struct resource *r;
+	unsigned long type;
 
 	pci_read_config_word(dev, PCI_COMMAND, &cmd);
 	old_cmd = cmd;
@@ -177,7 +178,8 @@ static int pcibios_enable_resources(stru
 			continue;
 
 		r = &dev->resource[idx];
-		if (!(r->flags & (IORESOURCE_IO | IORESOURCE_MEM)))
+		type = resource_type(r);
+		if (type != IORESOURCE_IO && type != IORESOURCE_MEM)))
 			continue;
 		if ((idx == PCI_ROM_RESOURCE) &&
 				(!(r->flags & IORESOURCE_ROM_ENABLE)))
@@ -188,9 +190,9 @@ static int pcibios_enable_resources(stru
 			       pci_name(dev));
 			return -EINVAL;
 		}
-		if (r->flags & IORESOURCE_IO)
+		if (type == IORESOURCE_IO)
 			cmd |= PCI_COMMAND_IO;
-		if (r->flags & IORESOURCE_MEM)
+		if (type == IORESOURCE_MEM)
 			cmd |= PCI_COMMAND_MEMORY;
 	}
 	if (cmd != old_cmd) {
@@ -250,9 +252,9 @@ static void pcibios_fixup_device_resourc
 			continue;
 		if (dev->resource[i].flags & IORESOURCE_PCI_FIXED)
 			continue;
-		if (dev->resource[i].flags & IORESOURCE_IO)
+		if (resource_type(&dev->resource[i]) == IORESOURCE_IO)
 			offset = hose->io_offset;
-		else if (dev->resource[i].flags & IORESOURCE_MEM)
+		else if (resource_type(&dev->resource[i]) == IORESOURCE_MEM)
 			offset = hose->mem_offset;
 
 		dev->resource[i].start += offset;
@@ -297,9 +299,9 @@ void pcibios_resource_to_bus(struct pci_
 	struct pci_controller *hose = (struct pci_controller *)dev->sysdata;
 	unsigned long offset = 0;
 
-	if (res->flags & IORESOURCE_IO)
+	if (resource_type(res) == IORESOURCE_IO)
 		offset = hose->io_offset;
-	else if (res->flags & IORESOURCE_MEM)
+	else if (resource_type(res) == IORESOURCE_MEM)
 		offset = hose->mem_offset;
 
 	region->start = res->start - offset;
@@ -313,9 +315,9 @@ pcibios_bus_to_resource(struct pci_dev *
 	struct pci_controller *hose = (struct pci_controller *)dev->sysdata;
 	unsigned long offset = 0;
 
-	if (res->flags & IORESOURCE_IO)
+	if (resource_type(res) == IORESOURCE_IO)
 		offset = hose->io_offset;
-	else if (res->flags & IORESOURCE_MEM)
+	else if (resource_type(res) == IORESOURCE_MEM)
 		offset = hose->mem_offset;
 
 	res->start = region->start + offset;
--- 0001/arch/mips/pmc-sierra/yosemite/ht.c
+++ work/arch/mips/pmc-sierra/yosemite/ht.c	2008-07-09 15:17:42.000000000 +0900
@@ -304,9 +304,9 @@ int pcibios_enable_resources(struct pci_
                                "resource collisions\n", pci_name(dev));
                         return -EINVAL;
                 }
-                if (r->flags & IORESOURCE_IO)
+                if (resource_type(r) == IORESOURCE_IO)
                         cmd |= PCI_COMMAND_IO;
-                if (r->flags & IORESOURCE_MEM)
+                if (resource_type(r) ==  IORESOURCE_MEM)
                         cmd |= PCI_COMMAND_MEMORY;
         }
         if (cmd != old_cmd) {
@@ -386,7 +386,7 @@ void pcibios_align_resource(void *data, 
 {
         struct pci_dev *dev = data;
 
-        if (res->flags & IORESOURCE_IO) {
+        if (resource_type(res) == IORESOURCE_IO) {
                 resource_size_t start = res->start;
 
                 /* We need to avoid collisions with `mirrored' VGA ports
--- 0001/arch/mn10300/unit-asb2305/pci-asb2305.c
+++ work/arch/mn10300/unit-asb2305/pci-asb2305.c	2008-07-09 15:17:42.000000000 +0900
@@ -47,7 +47,7 @@ void pcibios_align_resource(void *data, 
 	       );
 #endif
 
-	if (res->flags & IORESOURCE_IO) {
+	if (resource_type(res) == IORESOURCE_IO) {
 		unsigned long start = res->start;
 
 		if (start & 0x300) {
@@ -142,7 +142,7 @@ static void __init pcibios_allocate_reso
 				continue;
 			if (!r->start)		/* Address not assigned */
 				continue;
-			if (r->flags & IORESOURCE_IO)
+			if (resource_type(r) == IORESOURCE_IO)
 				disabled = !(command & PCI_COMMAND_IO);
 			else
 				disabled = !(command & PCI_COMMAND_MEMORY);
@@ -242,9 +242,9 @@ int pcibios_enable_resources(struct pci_
 			return -EINVAL;
 		}
 
-		if (r->flags & IORESOURCE_IO)
+		if (resource_type(r) == IORESOURCE_IO)
 			cmd |= PCI_COMMAND_IO;
-		if (r->flags & IORESOURCE_MEM)
+		if (resource_type(r) == IORESOURCE_MEM)
 			cmd |= PCI_COMMAND_MEMORY;
 	}
 
--- 0001/arch/mn10300/unit-asb2305/pci-iomap.c
+++ work/arch/mn10300/unit-asb2305/pci-iomap.c	2008-07-09 15:17:42.000000000 +0900
@@ -19,11 +19,12 @@ void __iomem *pci_iomap(struct pci_dev *
 	resource_size_t start = pci_resource_start(dev, bar);
 	resource_size_t len = pci_resource_len(dev, bar);
 	unsigned long flags = pci_resource_flags(dev, bar);
+	unsigned long type = flags & IORESOURCE_TYPE_BITS;
 
 	if (!len || !start)
 		return NULL;
 
-	if ((flags & IORESOURCE_IO) || (flags & IORESOURCE_MEM))
+	if (type == IORESOURCE_IO || type == IORESOURCE_MEM)
 		return (void __iomem *) start;
 
 	return NULL;
--- 0001/arch/parisc/kernel/pci.c
+++ work/arch/parisc/kernel/pci.c	2008-07-09 15:17:42.000000000 +0900
@@ -202,7 +202,7 @@ void __devinit pcibios_resource_to_bus(s
 	struct pci_hba_data *hba = HBA_DATA(dev->bus->bridge->platform_data);
 #endif
 
-	if (res->flags & IORESOURCE_IO) {
+	if (resource_type(res) == IORESOURCE_IO) {
 		/*
 		** I/O space may see busnumbers here. Something
 		** in the form of 0xbbxxxx where bb is the bus num
@@ -212,15 +212,15 @@ void __devinit pcibios_resource_to_bus(s
 		*/
 		region->start = PCI_PORT_ADDR(res->start);
 		region->end   = PCI_PORT_ADDR(res->end);
-	} else if (res->flags & IORESOURCE_MEM) {
+	} else if (resource_type(res) == IORESOURCE_MEM) {
 		/* Convert MMIO addr to PCI addr (undo global virtualization) */
 		region->start = PCI_BUS_ADDR(hba, res->start);
 		region->end   = PCI_BUS_ADDR(hba, res->end);
 	}
 
 	DBG_RES("pcibios_resource_to_bus(%02x %s [%lx,%lx])\n",
-		dev->bus->number, res->flags & IORESOURCE_IO ? "IO" : "MEM",
-		region->start, region->end);
+		dev->bus->number, resource_type(res) == IORESOURCE_IO ? "IO"
+		: "MEM", region->start, region->end);
 }
 
 void pcibios_bus_to_resource(struct pci_dev *dev, struct resource *res,
@@ -230,12 +230,12 @@ void pcibios_bus_to_resource(struct pci_
 	struct pci_hba_data *hba = HBA_DATA(dev->bus->bridge->platform_data);
 #endif
 
-	if (res->flags & IORESOURCE_MEM) {
+	if (resource_type(res) == IORESOURCE_MEM) {
 		res->start = PCI_HOST_ADDR(hba, region->start);
 		res->end = PCI_HOST_ADDR(hba, region->end);
 	}
 
-	if (res->flags & IORESOURCE_IO) {
+	if (resource_type(res) == IORESOURCE_IO) {
 		res->start = region->start;
 		res->end = region->end;
 	}
@@ -266,7 +266,8 @@ void pcibios_align_resource(void *data, 
 		(int) res->flags, size, alignment);
 
 	/* If it's not IO, then it's gotta be MEM */
-	align = (res->flags & IORESOURCE_IO) ? PCIBIOS_MIN_IO : PCIBIOS_MIN_MEM;
+	align = (resource_type(res) == IORESOURCE_IO) ? PCIBIOS_MIN_IO
+	  : PCIBIOS_MIN_MEM;
 
 	/* Align to largest of MIN or input size */
 	mask = max(alignment, align) - 1;
--- 0001/arch/parisc/lib/iomap.c
+++ work/arch/parisc/lib/iomap.c	2008-07-09 15:17:42.000000000 +0900
@@ -441,14 +441,15 @@ void __iomem *pci_iomap(struct pci_dev *
 	resource_size_t start = pci_resource_start(dev, bar);
 	resource_size_t len = pci_resource_len(dev, bar);
 	unsigned long flags = pci_resource_flags(dev, bar);
+	unsigned long type = flags & IORESOURCE_TYPE_BITS;
 
 	if (!len || !start)
 		return NULL;
 	if (maxlen && len > maxlen)
 		len = maxlen;
-	if (flags & IORESOURCE_IO)
+	if (type == IORESOURCE_IO)
 		return ioport_map(start, len);
-	if (flags & IORESOURCE_MEM) {
+	if (type == IORESOURCE_MEM) {
 		if (flags & IORESOURCE_CACHEABLE)
 			return ioremap(start, len);
 		return ioremap_nocache(start, len);
--- 0001/arch/powerpc/kernel/iomap.c
+++ work/arch/powerpc/kernel/iomap.c	2008-07-09 15:17:42.000000000 +0900
@@ -122,14 +122,15 @@ void __iomem *pci_iomap(struct pci_dev *
 	resource_size_t start = pci_resource_start(dev, bar);
 	resource_size_t len = pci_resource_len(dev, bar);
 	unsigned long flags = pci_resource_flags(dev, bar);
+	unsigned long type = flags & IORESOURCE_TYPE_BITS;
 
 	if (!len)
 		return NULL;
 	if (max && len > max)
 		len = max;
-	if (flags & IORESOURCE_IO)
+	if (type == IORESOURCE_IO)
 		return ioport_map(start, len);
-	if (flags & IORESOURCE_MEM)
+	if (type == IORESOURCE_MEM)
 		return ioremap(start, len);
 	/* What? */
 	return NULL;
--- 0001/arch/powerpc/kernel/legacy_serial.c
+++ work/arch/powerpc/kernel/legacy_serial.c	2008-07-09 15:17:42.000000000 +0900
@@ -233,7 +233,7 @@ static int __init add_legacy_pci_port(st
 		return -1;
 
 	/* We only support BAR 0 for now */
-	iotype = (flags & IORESOURCE_MEM) ? UPIO_MEM : UPIO_PORT;
+	iotype = ((flags & IORESOURCE_TYPE_BITS) == IORESOURCE_MEM) ? UPIO_MEM : UPIO_PORT;
 	addr = of_translate_address(pci_dev, addrp);
 	if (addr == OF_BAD_ADDR)
 		return -1;
--- 0001/arch/powerpc/kernel/pci-common.c
+++ work/arch/powerpc/kernel/pci-common.c	2008-07-09 15:17:42.000000000 +0900
@@ -305,10 +305,10 @@ static struct resource *__pci_mmap_make_
 
 		/* treat ROM as memory (should be already) */
 		if (i == PCI_ROM_RESOURCE)
-			flags |= IORESOURCE_MEM;
+			flags = IORESOURCE_MEM;
 
 		/* Active and same type? */
-		if ((flags & res_bit) == 0)
+		if ((flags & IORESOURCE_TYPE_BITS) != res_bit)
 			continue;
 
 		/* In the range of this resource? */
@@ -382,10 +382,9 @@ pgprot_t pci_phys_mem_access_prot(struct
 	for_each_pci_dev(pdev) {
 		for (i = 0; i <= PCI_ROM_RESOURCE; i++) {
 			struct resource *rp = &pdev->resource[i];
-			int flags = rp->flags;
 
 			/* Active and same type? */
-			if ((flags & IORESOURCE_MEM) == 0)
+			if (resource_type(rp) != IORESOURCE_MEM)
 				continue;
 			/* In the range of this resource? */
 			if (offset < (rp->start & PAGE_MASK) ||
@@ -451,7 +450,7 @@ void pci_resource_to_user(const struct p
 	if (hose == NULL)
 		return;
 
-	if (rsrc->flags & IORESOURCE_IO)
+	if (resource_type(rsrc) == IORESOURCE_IO)
 		offset = (unsigned long)hose->io_base_virt - _IO_BASE;
 
 	/* We pass a fully fixed up address to userland for MMIO instead of
@@ -472,7 +471,7 @@ void pci_resource_to_user(const struct p
 	 * BenH.
 	 */
 #if 0
-	else if (rsrc->flags & IORESOURCE_MEM)
+	else if (resource_type(rsrc) == IORESOURCE_MEM)
 		offset = hose->pci_mem_offset;
 #endif
 
@@ -680,10 +679,10 @@ void pcibios_resource_to_bus(struct pci_
 
 	if (!hose)
 		return;
-	if (res->flags & IORESOURCE_IO) {
+	if (resource_type(res) == IORESOURCE_IO) {
 		offset = (unsigned long)hose->io_base_virt - _IO_BASE;
 		mask = 0xffffffffu;
-	} else if (res->flags & IORESOURCE_MEM)
+	} else if (resource_type(res) == IORESOURCE_MEM)
 		offset = hose->pci_mem_offset;
 
 	region->start = (res->start - offset) & mask;
@@ -699,10 +698,10 @@ void pcibios_bus_to_resource(struct pci_
 
 	if (!hose)
 		return;
-	if (res->flags & IORESOURCE_IO) {
+	if (resource_type(res) == IORESOURCE_IO) {
 		offset = (unsigned long)hose->io_base_virt - _IO_BASE;
 		mask = 0xffffffffu;
-	} else if (res->flags & IORESOURCE_MEM)
+	} else if (resource_type(res) == IORESOURCE_MEM)
 		offset = hose->pci_mem_offset;
 	res->start = (region->start + offset) & mask;
 	res->end = (region->end + offset) & mask;
@@ -715,10 +714,10 @@ static void __devinit fixup_resource(str
 	struct pci_controller *hose = pci_bus_to_host(dev->bus);
 	resource_size_t offset = 0, mask = (resource_size_t)-1;
 
-	if (res->flags & IORESOURCE_IO) {
+	if (resource_type(res) == IORESOURCE_IO) {
 		offset = (unsigned long)hose->io_base_virt - _IO_BASE;
 		mask = 0xffffffffu;
-	} else if (res->flags & IORESOURCE_MEM)
+	} else if (resource_type(res) == IORESOURCE_MEM)
 		offset = hose->pci_mem_offset;
 
 	res->start = (res->start + offset) & mask;
@@ -813,7 +812,7 @@ static void __devinit __pcibios_fixup_bu
 			 * equal to the pci_mem_offset of the host bridge and
 			 * their size is smaller than 1M.
 			 */
-			if (res->flags & IORESOURCE_MEM &&
+			if (resource_type(res) == IORESOURCE_MEM &&
 			    res->start == hose->pci_mem_offset &&
 			    res->end < 0x100000) {
 				printk(KERN_INFO
@@ -895,7 +894,7 @@ void pcibios_align_resource(void *data, 
 {
 	struct pci_dev *dev = data;
 
-	if (res->flags & IORESOURCE_IO) {
+	if (resource_type(res) == IORESOURCE_IO) {
 		resource_size_t start = res->start;
 
 		if (skip_isa_ioresource_align(dev))
@@ -991,7 +990,7 @@ static void __init pcibios_allocate_bus_
 			    || res->start > res->end)
 				continue;
 			if (bus->parent == NULL)
-				pr = (res->flags & IORESOURCE_IO) ?
+				pr = (resource_type(res) == IORESOURCE_IO) ?
 					&ioport_resource : &iomem_resource;
 			else {
 				/* Don't bother with non-root busses when
@@ -1085,7 +1084,7 @@ static void __init pcibios_allocate_reso
 				continue;
 			if (!r->flags || (r->flags & IORESOURCE_UNSET))
 				continue;	/* Not assigned at all */
-			if (r->flags & IORESOURCE_IO)
+			if (resource_type(r) == IORESOURCE_IO)
 				disabled = !(command & PCI_COMMAND_IO);
 			else
 				disabled = !(command & PCI_COMMAND_MEMORY);
--- 0001/arch/powerpc/kernel/pci_64.c
+++ work/arch/powerpc/kernel/pci_64.c	2008-07-09 15:17:42.000000000 +0900
@@ -316,7 +316,7 @@ void __devinit of_scan_pci_bridge(struct
 		size = of_read_number(&ranges[6], 2);
 		if (flags == 0 || size == 0)
 			continue;
-		if (flags & IORESOURCE_IO) {
+		if ((flags & IORESOUCE_TYPE_BITS) == IORESOURCE_IO) {
 			res = bus->resource[0];
 			if (res->flags) {
 				printk(KERN_ERR "PCI: ignoring extra I/O range"
--- 0001/arch/powerpc/kernel/prom_parse.c
+++ work/arch/powerpc/kernel/prom_parse.c	2008-07-09 15:17:42.000000000 +0900
@@ -614,13 +614,13 @@ static int __of_address_to_resource(stru
 {
 	u64 taddr;
 
-	if ((flags & (IORESOURCE_IO | IORESOURCE_MEM)) == 0)
+	if (flags != IORESOURCE_IO && flags != IORESOURCE_MEM)
 		return -EINVAL;
 	taddr = of_translate_address(dev, addrp);
 	if (taddr == OF_BAD_ADDR)
 		return -EINVAL;
 	memset(r, 0, sizeof(struct resource));
-	if (flags & IORESOURCE_IO) {
+	if (flags == IORESOURCE_IO) {
 		unsigned long port;
 		port = pci_address_to_pio(taddr);
 		if (port == (unsigned long)-1)
--- 0001/arch/powerpc/platforms/fsl_uli1575.c
+++ work/arch/powerpc/platforms/fsl_uli1575.c	2008-07-09 15:17:42.000000000 +0900
@@ -220,7 +220,7 @@ static void __devinit quirk_final_uli524
 
 	for (i = 0; i < PCI_BUS_NUM_RESOURCES; i++) {
 		if ((bus->resource[i]) &&
-			(bus->resource[i]->flags & IORESOURCE_MEM)) {
+			(resource_type(bus->resource[i]) == IORESOURCE_MEM)) {
 			dummy = ioremap(bus->resource[i]->start, 0x4);
 			if (dummy) {
 				in_8(dummy);
--- 0001/arch/powerpc/platforms/maple/setup.c
+++ work/arch/powerpc/platforms/maple/setup.c	2008-07-09 15:17:42.000000000 +0900
@@ -85,7 +85,7 @@ static unsigned long maple_find_nvram_ba
 			       " address\n");
 			goto bail;
 		}
-		if (!(r.flags & IORESOURCE_IO)) {
+		if (resource_type(&r) != IORESOURCE_IO) {
 			printk(KERN_EMERG "Maple: NVRAM address isn't PIO!\n");
 			goto bail;
 		}
--- 0001/arch/powerpc/platforms/maple/time.c
+++ work/arch/powerpc/platforms/maple/time.c	2008-07-09 15:17:42.000000000 +0900
@@ -153,7 +153,7 @@ unsigned long __init maple_get_boot_time
 			       " address\n");
 			goto bail;
 		}
-		if (!(r.flags & IORESOURCE_IO)) {
+		if (resource_type(&r) != IORESOURCE_IO) {
 			printk(KERN_EMERG "Maple: RTC address isn't PIO!\n");
 			goto bail;
 		}
--- 0001/arch/powerpc/platforms/pseries/eeh_cache.c
+++ work/arch/powerpc/platforms/pseries/eeh_cache.c	2008-07-09 15:17:42.000000000 +0900
@@ -120,7 +120,7 @@ static void pci_addr_cache_print(struct 
 		struct pci_io_addr_range *piar;
 		piar = rb_entry(n, struct pci_io_addr_range, rb_node);
 		printk(KERN_DEBUG "PCI: %s addr range %d [%lx-%lx]: %s\n",
-		       (piar->flags & IORESOURCE_IO) ? "i/o" : "mem", cnt,
+		       ((piar->flags & IORESOURCE_TYPE_BITS) == IORESOURCE_IO) ? "i/o" : "mem", cnt,
 		       piar->addr_lo, piar->addr_hi, pci_name(piar->pcidev));
 		cnt++;
 		n = rb_next(n);
@@ -202,9 +202,10 @@ static void __pci_addr_cache_insert_devi
 		unsigned long start = pci_resource_start(dev,i);
 		unsigned long end = pci_resource_end(dev,i);
 		unsigned int flags = pci_resource_flags(dev,i);
+		unsigned int type = flags & IORESOURCE_TYPE_BITS;
 
 		/* We are interested only bus addresses, not dma or other stuff */
-		if (0 == (flags & (IORESOURCE_IO | IORESOURCE_MEM)))
+		if (type != IORESOURCE_IO | type != IORESOURCE_MEM)
 			continue;
 		if (start == 0 || ~start == 0 || end == 0 || ~end == 0)
 			 continue;
--- 0001/arch/powerpc/platforms/pseries/pci.c
+++ work/arch/powerpc/platforms/pseries/pci.c	2008-07-09 15:17:42.000000000 +0900
@@ -96,9 +96,9 @@ static void fixup_winbond_82c105(struct 
 
 	for (i = 0; i < DEVICE_COUNT_RESOURCE; ++i) {
 		/* zap the 2nd function of the winbond chip */
-		if (dev->resource[i].flags & IORESOURCE_IO
+		if (resource_type(&dev->resource[i]) == IORESOURCE_IO
 		    && dev->bus->number == 0 && dev->devfn == 0x81)
-			dev->resource[i].flags &= ~IORESOURCE_IO;
+			dev->resource[i].flags &= ~IORESOURCE_TYPE_BITS;
 		if (dev->resource[i].start == 0 && dev->resource[i].end) {
 			dev->resource[i].flags = 0;
 			dev->resource[i].end = 0;
--- 0001/arch/powerpc/sysdev/fsl_pci.c
+++ work/arch/powerpc/sysdev/fsl_pci.c	2008-07-09 15:17:42.000000000 +0900
@@ -45,7 +45,7 @@ void __init setup_pci_atmu(struct pci_co
 
 	/* Setup outbound MEM window */
 	for(i = 0; i < 3; i++)
-		if (hose->mem_resources[i].flags & IORESOURCE_MEM){
+		if (resource_type(&hose->mem_resources[i]) == IORESOURCE_MEM){
 			resource_size_t pci_addr_start =
 				 hose->mem_resources[i].start -
 				 hose->pci_mem_offset;
@@ -64,7 +64,7 @@ void __init setup_pci_atmu(struct pci_co
 		}
 
 	/* Setup outbound IO window */
-	if (hose->io_resource.flags & IORESOURCE_IO){
+	if (resource_type(&hose->io_resource) == IORESOURCE_IO){
 		pr_debug("PCI IO resource start 0x%016llx, size 0x%016llx, "
 			 "phy base 0x%016llx.\n",
 			(u64)hose->io_resource.start,
--- 0001/arch/powerpc/sysdev/ppc4xx_pci.c
+++ work/arch/powerpc/sysdev/ppc4xx_pci.c	2008-07-09 15:17:42.000000000 +0900
@@ -205,7 +205,7 @@ static void __init ppc4xx_configure_pci_
 		struct resource *res = &hose->mem_resources[i];
 
 		/* we only care about memory windows */
-		if (!(res->flags & IORESOURCE_MEM))
+		if (resource_type(res) != IORESOURCE_MEM)
 			continue;
 		if (j > 2) {
 			printk(KERN_WARNING "%s: Too many ranges\n",
@@ -356,7 +356,7 @@ static void __init ppc4xx_configure_pcix
 		struct resource *res = &hose->mem_resources[i];
 
 		/* we only care about memory windows */
-		if (!(res->flags & IORESOURCE_MEM))
+		if (resource_type(res) != IORESOURCE_MEM)
 			continue;
 		if (j > 1) {
 			printk(KERN_WARNING "%s: Too many ranges\n",
@@ -1322,7 +1322,7 @@ static void __init ppc4xx_configure_pcie
 		struct resource *res = &hose->mem_resources[i];
 
 		/* we only care about memory windows */
-		if (!(res->flags & IORESOURCE_MEM))
+		if (resource_type(res) != IORESOURCE_MEM)
 			continue;
 		if (j > 1) {
 			printk(KERN_WARNING "%s: Too many ranges\n",
@@ -1367,7 +1367,7 @@ static void __init ppc4xx_configure_pcie
 	}
 
 	/* Configure IO, always 64K starting at 0 */
-	if (hose->io_resource.flags & IORESOURCE_IO) {
+	if (resource_type(&hose->io_resource) == IORESOURCE_IO) {
 		lah = RES_TO_U32_HIGH(hose->io_base_phys);
 		lal = RES_TO_U32_LOW(hose->io_base_phys);
 		out_le32(mbase + PECFG_POM2LAH, 0);
--- 0001/arch/ppc/kernel/pci.c
+++ work/arch/ppc/kernel/pci.c	2008-07-09 15:17:42.000000000 +0900
@@ -104,9 +104,9 @@ pcibios_fixup_resources(struct pci_dev *
 			continue;
 		}
 		offset = 0;
-		if (res->flags & IORESOURCE_MEM) {
+		if (resource_type(res) == IORESOURCE_MEM) {
 			offset = hose->pci_mem_offset;
-		} else if (res->flags & IORESOURCE_IO) {
+		} else if (resource_type(res) == IORESOURCE_IO) {
 			offset = (unsigned long) hose->io_base_virt
 				- isa_io_base;
 		}
@@ -133,9 +133,9 @@ void pcibios_resource_to_bus(struct pci_
 	unsigned long offset = 0;
 	struct pci_controller *hose = dev->sysdata;
 
-	if (hose && res->flags & IORESOURCE_IO)
+	if (hose && resource_type(res) == IORESOURCE_IO)
 		offset = (unsigned long)hose->io_base_virt - isa_io_base;
-	else if (hose && res->flags & IORESOURCE_MEM)
+	else if (hose && resource_type(res) == IORESOURCE_MEM)
 		offset = hose->pci_mem_offset;
 	region->start = res->start - offset;
 	region->end = res->end - offset;
@@ -148,9 +148,9 @@ void pcibios_bus_to_resource(struct pci_
 	unsigned long offset = 0;
 	struct pci_controller *hose = dev->sysdata;
 
-	if (hose && res->flags & IORESOURCE_IO)
+	if (hose && resource_type(res) == IORESOURCE_IO)
 		offset = (unsigned long)hose->io_base_virt - isa_io_base;
-	else if (hose && res->flags & IORESOURCE_MEM)
+	else if (hose && resource_type(res) == IORESOURCE_MEM)
 		offset = hose->pci_mem_offset;
 	res->start = region->start + offset;
 	res->end = region->end + offset;
@@ -175,7 +175,7 @@ void pcibios_align_resource(void *data, 
 {
 	struct pci_dev *dev = data;
 
-	if (res->flags & IORESOURCE_IO) {
+	if (resource_type(res) == IORESOURCE_IO) {
 		resource_size_t start = res->start;
 
 		if (size > 0x100) {
@@ -239,7 +239,7 @@ pcibios_allocate_bus_resources(struct li
 			    || res->start > res->end)
 				continue;
 			if (bus->parent == NULL)
-				pr = (res->flags & IORESOURCE_IO)?
+				pr = (resource_type(res) == IORESOURCE_IO)?
 					&ioport_resource: &iomem_resource;
 			else {
 				pr = pci_find_parent_resource(bus->self, res);
@@ -336,7 +336,7 @@ pci_relocate_bridge_resource(struct pci_
 		struct resource *r = parent->resource[j];
 		if (!r)
 			continue;
-		if ((res->flags ^ r->flags) & (IORESOURCE_IO | IORESOURCE_MEM))
+		if (resource_type(res) != resource_type(r))
 			continue;
 		if (!((res->flags ^ r->flags) & IORESOURCE_PREFETCH)) {
 			pr = r;
@@ -436,7 +436,7 @@ update_bridge_base(struct pci_bus *bus, 
 	pci_read_config_word(dev, PCI_COMMAND, &cmd);
 	pci_write_config_word(dev, PCI_COMMAND,
 			      cmd & ~(PCI_COMMAND_IO | PCI_COMMAND_MEMORY));
-	if (res->flags & IORESOURCE_IO) {
+	if (resource_type(res) == IORESOURCE_IO) {
 		off = (unsigned long) hose->io_base_virt - isa_io_base;
 		start = res->start - off;
 		end = res->end - off;
@@ -453,16 +453,14 @@ update_bridge_base(struct pci_bus *bus, 
 		pci_write_config_byte(dev, PCI_IO_BASE, io_base_lo);
 		pci_write_config_byte(dev, PCI_IO_LIMIT, io_limit_lo);
 
-	} else if ((res->flags & (IORESOURCE_MEM | IORESOURCE_PREFETCH))
-		   == IORESOURCE_MEM) {
+	} else if (resource_type(res) == IORESOUCE_MEM && !(res->flags & IORESOURCE_PREFETCH)) {
 		off = hose->pci_mem_offset;
 		mem_base = ((res->start - off) >> 16) & PCI_MEMORY_RANGE_MASK;
 		mem_limit = ((res->end - off) >> 16) & PCI_MEMORY_RANGE_MASK;
 		pci_write_config_word(dev, PCI_MEMORY_BASE, mem_base);
 		pci_write_config_word(dev, PCI_MEMORY_LIMIT, mem_limit);
 
-	} else if ((res->flags & (IORESOURCE_MEM | IORESOURCE_PREFETCH))
-		   == (IORESOURCE_MEM | IORESOURCE_PREFETCH)) {
+	} else if (resource_type(res) == IORESOUCE_MEM && (res->flags & IORESOURCE_PREFETCH)) {
 		off = hose->pci_mem_offset;
 		mem_base = ((res->start - off) >> 16) & PCI_PREF_RANGE_MASK;
 		mem_limit = ((res->end - off) >> 16) & PCI_PREF_RANGE_MASK;
@@ -722,11 +720,11 @@ void __init pcibios_fixup_bus(struct pci
 				continue;
 			if (!res->flags)
 				continue;
-			if (io_offset && (res->flags & IORESOURCE_IO)) {
+			if (io_offset && resource_type(res) == IORESOURCE_IO) {
 				res->start += io_offset;
 				res->end += io_offset;
 			} else if (hose->pci_mem_offset
-				   && (res->flags & IORESOURCE_MEM)) {
+				   && resource_type(res) == IORESOURCE_MEM) {
 				res->start += hose->pci_mem_offset;
 				res->end += hose->pci_mem_offset;
 			}
@@ -810,7 +808,7 @@ pci_resource_to_bus(struct pci_dev *pdev
 	 */
 	struct pci_controller* hose =
 		(struct pci_controller *)pdev->sysdata;
-	if (hose && res->flags & IORESOURCE_MEM)
+	if (hose && resource_type(res) == IORESOURCE_MEM)
 		return res->start - hose->pci_mem_offset;
 	/* We may want to do something with IOs here... */
 	return res->start;
@@ -850,10 +848,10 @@ static struct resource *__pci_mmap_make_
 
 		/* treat ROM as memory (should be already) */
 		if (i == PCI_ROM_RESOURCE)
-			flags |= IORESOURCE_MEM;
+			flags = IORESOURCE_MEM;
 
 		/* Active and same type? */
-		if ((flags & res_bit) == 0)
+		if ((flags & IORESOURCE_TYPE_BITS) != res_bit)
 			continue;
 
 		/* In the range of this resource? */
@@ -930,10 +928,9 @@ pgprot_t pci_phys_mem_access_prot(struct
 	for_each_pci_dev(pdev) {
 		for (i = 0; i <= PCI_ROM_RESOURCE; i++) {
 			struct resource *rp = &pdev->resource[i];
-			int flags = rp->flags;
 
 			/* Active and same type? */
-			if ((flags & IORESOURCE_MEM) == 0)
+			if (resource_type(rp) != IORESOURCE_MEM)
 				continue;
 			/* In the range of this resource? */
 			if (offset < (rp->start & PAGE_MASK) ||
@@ -1078,7 +1075,7 @@ void pci_resource_to_user(const struct p
 	if (hose == NULL)
 		return;
 
-	if (rsrc->flags & IORESOURCE_IO)
+	if (resource_type(rsrc) == IORESOURCE_IO)
 		offset = (unsigned long)hose->io_base_virt - _IO_BASE;
 
 	/* We pass a fully fixed up address to userland for MMIO instead of
@@ -1099,7 +1096,7 @@ void pci_resource_to_user(const struct p
 	 * BenH.
 	 */
 #if 0
-	else if (rsrc->flags & IORESOURCE_MEM)
+	else if (resource_type(rsrc) == IORESOURCE_MEM)
 		offset = hose->pci_mem_offset;
 #endif
 
@@ -1124,14 +1121,15 @@ void __iomem *pci_iomap(struct pci_dev *
 	resource_size_t start = pci_resource_start(dev, bar);
 	resource_size_t len = pci_resource_len(dev, bar);
 	unsigned long flags = pci_resource_flags(dev, bar);
+	unsigned long type = flags & IORESOURCE_TYPE_BITS;
 
 	if (!len)
 		return NULL;
 	if (max && len > max)
 		len = max;
-	if (flags & IORESOURCE_IO)
+	if (type == IORESOURCE_IO)
 		return ioport_map(start, len);
-	if (flags & IORESOURCE_MEM)
+	if (type == IORESOURCE_MEM)
 		/* Not checking IORESOURCE_CACHEABLE because PPC does
 		 * not currently distinguish between ioremap and
 		 * ioremap_nocache.
--- 0001/arch/ppc/syslib/ppc405_pci.c
+++ work/arch/ppc/syslib/ppc405_pci.c	2008-07-09 15:17:42.000000000 +0900
@@ -47,7 +47,7 @@ ppc405_pcibios_fixup_resources(struct pc
 		res = dev->resource + i;
 		if (!res->start)
 			continue;
-		if ((res->flags & IORESOURCE_MEM) &&
+		if (resource_type(res) == IORESOURCE_MEM &&
 		    (((res->start >= min_host_addr)
 		      && (res->start <= max_host_addr))
 		     || ((res->end >= min_host_addr)
--- 0001/arch/ppc/syslib/ppc_sys.c
+++ work/arch/ppc/syslib/ppc_sys.c	2008-07-09 15:17:42.000000000 +0900
@@ -109,7 +109,7 @@ ppc_sys_fixup_mem_resource(struct platfo
 	int i;
 	for (i = 0; i < pdev->num_resources; i++) {
 		struct resource *r = &pdev->resource[i];
-		if (((r->flags & IORESOURCE_MEM) == IORESOURCE_MEM) && 
+		if ((resource_type(r) == IORESOURCE_MEM) && 
 			((r->flags & PPC_SYS_IORESOURCE_FIXUPPED) != PPC_SYS_IORESOURCE_FIXUPPED)) {
 			r->start += paddr;
 			r->end += paddr;
--- 0001/arch/sh/drivers/pci/pci.c
+++ work/arch/sh/drivers/pci/pci.c	2008-07-09 15:17:42.000000000 +0900
@@ -121,7 +121,7 @@ void pcibios_align_resource(void *data, 
 void pcibios_align_resource(void *data, struct resource *res,
 			    resource_size_t size, resource_size_t align)
 {
-	if (res->flags & IORESOURCE_IO) {
+	if (resource_type(res) == IORESOURCE_IO) {
 		resource_size_t start = res->start;
 
 		if (start & 0x300) {
@@ -148,9 +148,9 @@ int pcibios_enable_device(struct pci_dev
 			       "of resource collisions\n", pci_name(dev));
 			return -EINVAL;
 		}
-		if (r->flags & IORESOURCE_IO)
+		if (resource_type(r) == IORESOURCE_IO)
 			cmd |= PCI_COMMAND_IO;
-		if (r->flags & IORESOURCE_MEM)
+		if (resource_type(r) == IORESOURCE_MEM)
 			cmd |= PCI_COMMAND_MEMORY;
 	}
 	if (dev->resource[PCI_ROM_RESOURCE].start)
@@ -194,6 +194,7 @@ void __iomem *pci_iomap(struct pci_dev *
 	resource_size_t start = pci_resource_start(dev, bar);
 	resource_size_t len = pci_resource_len(dev, bar);
 	unsigned long flags = pci_resource_flags(dev, bar);
+	unsigned long type = flags & IORESOURCE_TYPE_BITS;
 
 	if (unlikely(!len || !start))
 		return NULL;
@@ -210,9 +211,9 @@ void __iomem *pci_iomap(struct pci_dev *
 	 * punted off to __ioremap().
 	 *					-- PFM.
 	 */
-	if (flags & IORESOURCE_IO)
+	if (type == IORESOURCE_IO)
 		return ioport_map(start, len);
-	if (flags & IORESOURCE_MEM)
+	if (type == IORESOURCE_MEM)
 		return ioremap(start, len);
 
 	return NULL;
--- 0001/arch/sh/kernel/io_trapped.c
+++ work/arch/sh/kernel/io_trapped.c	2008-07-09 15:17:42.000000000 +0900
@@ -70,7 +70,7 @@ int register_trapped_io(struct trapped_i
 		res = tiop->resource + k;
 		pr_info("trapped io 0x%08lx overrides %s 0x%08lx\n",
 		       (unsigned long)(tiop->virt_base + len),
-		       res->flags & IORESOURCE_IO ? "io" : "mmio",
+			resource_type(res) == IORESOURCE_IO ? "io" : "mmio",
 		       (unsigned long)res->start);
 		len += roundup((res->end - res->start) + 1, PAGE_SIZE);
 	}
@@ -78,10 +78,14 @@ int register_trapped_io(struct trapped_i
 	tiop->magic = IO_TRAPPED_MAGIC;
 	INIT_LIST_HEAD(&tiop->list);
 	spin_lock_irq(&trapped_lock);
-	if (flags & IORESOURCE_IO)
+	switch(flags & IORESOURCE_TYPE_BITS) {
+	case IORESOURCE_IO:
 		list_add(&tiop->list, &trapped_io);
-	if (flags & IORESOURCE_MEM)
+		break;
+	case IORESOURCE_MEM:
 		list_add(&tiop->list, &trapped_mem);
+		break;
+	}
 	spin_unlock_irq(&trapped_lock);
 
 	return 0;
--- 0001/arch/sparc/kernel/of_device.c
+++ work/arch/sparc/kernel/of_device.c	2008-07-09 15:17:42.000000000 +0900
@@ -202,6 +202,7 @@ static unsigned int of_bus_pci_get_flags
 	switch((w >> 24) & 0x03) {
 	case 0x01:
 		flags |= IORESOURCE_IO;
+		break;
 	case 0x02: /* 32 bits */
 	case 0x03: /* 64 bits */
 		flags |= IORESOURCE_MEM;
--- 0001/arch/sparc/kernel/pcic.c
+++ work/arch/sparc/kernel/pcic.c	2008-07-09 15:17:42.000000000 +0900
@@ -482,7 +482,7 @@ static void pcic_map_pci_device(struct l
 		address = dev->resource[j].start;
 		if (address == 0) break;	/* are sequential */
 		flags = dev->resource[j].flags;
-		if ((flags & IORESOURCE_IO) != 0) {
+		if (resource_type(&dev->resource[j]) == IORESOURCE_IO) {
 			if (address < 0x10000) {
 				/*
 				 * A device responds to I/O cycles on PCI.
@@ -508,8 +508,8 @@ static void pcic_map_pci_device(struct l
 				dev->resource[j].start =
 				    pcic->pcic_io + address;
 				dev->resource[j].end = 1;  /* XXX */
-				dev->resource[j].flags =
-				    (flags & ~IORESOURCE_IO) | IORESOURCE_MEM;
+				dev->resource[j].flags = IORESOURCE_MEM |
+				    (flags & ~IORESOURCE_TYPE_BITS);
 			} else {
 				/*
 				 * OOPS... PCI Spec allows this. Sun does
@@ -636,10 +636,10 @@ void __devinit pcibios_fixup_bus(struct 
 		 */
 		has_io = has_mem = 0;
 		for(i=0; i<6; i++) {
-			unsigned long f = dev->resource[i].flags;
-			if (f & IORESOURCE_IO) {
+			unsigned long type = resource_type(&dev->resource[i]);
+			if (type == IORESOURCE_IO) {
 				has_io = 1;
-			} else if (f & IORESOURCE_MEM)
+			} else if (type == IORESOURCE_MEM)
 				has_mem = 1;
 		}
 		pcic_read_config(dev->bus, dev->devfn, PCI_COMMAND, 2, &cmd);
--- 0001/arch/sparc/lib/iomap.c
+++ work/arch/sparc/lib/iomap.c	2008-07-09 15:17:42.000000000 +0900
@@ -24,14 +24,15 @@ void __iomem *pci_iomap(struct pci_dev *
 	resource_size_t start = pci_resource_start(dev, bar);
 	resource_size_t len = pci_resource_len(dev, bar);
 	unsigned long flags = pci_resource_flags(dev, bar);
+	unsigned long type = flags & IORESOURCE_TYPE_BITS;
 
 	if (!len || !start)
 		return NULL;
 	if (maxlen && len > maxlen)
 		len = maxlen;
-	if (flags & IORESOURCE_IO)
+	if (type == IORESOURCE_IO)
 		return ioport_map(start, len);
-	if (flags & IORESOURCE_MEM) {
+	if (type == IORESOURCE_MEM) {
 		if (flags & IORESOURCE_CACHEABLE)
 			return ioremap(start, len);
 		return ioremap_nocache(start, len);
--- 0001/arch/sparc64/kernel/of_device.c
+++ work/arch/sparc64/kernel/of_device.c	2008-07-09 15:17:42.000000000 +0900
@@ -15,7 +15,7 @@ void __iomem *of_ioremap(struct resource
 	unsigned long ret = res->start + offset;
 	struct resource *r;
 
-	if (res->flags & IORESOURCE_MEM)
+	if (resource_type(res) == IORESOURCE_MEM)
 		r = request_mem_region(ret, size, name);
 	else
 		r = request_region(ret, size, name);
@@ -28,7 +28,7 @@ EXPORT_SYMBOL(of_ioremap);
 
 void of_iounmap(struct resource *res, void __iomem *base, unsigned long size)
 {
-	if (res->flags & IORESOURCE_MEM)
+	if (resource_type(res) == IORESOURCE_MEM)
 		release_mem_region((unsigned long) base, size);
 	else
 		release_region((unsigned long) base, size);
@@ -260,6 +260,7 @@ static unsigned int of_bus_pci_get_flags
 	switch((w >> 24) & 0x03) {
 	case 0x01:
 		flags |= IORESOURCE_IO;
+		break;
 	case 0x02: /* 32 bits */
 	case 0x03: /* 64 bits */
 		flags |= IORESOURCE_MEM;
--- 0001/arch/sparc64/kernel/pci.c
+++ work/arch/sparc64/kernel/pci.c	2008-07-09 15:17:42.000000000 +0900
@@ -656,7 +656,7 @@ static void __devinit of_scan_pci_bridge
 		size = GET_64BIT(ranges, 6);
 		if (flags == 0 || size == 0)
 			continue;
-		if (flags & IORESOURCE_IO) {
+		if ((flags & IORESOUCE_TYPE_BITS) == IORESOURCE_IO) {
 			res = bus->resource[0];
 			if (res->flags) {
 				printk(KERN_ERR "PCI: ignoring extra I/O range"
@@ -844,9 +844,9 @@ struct resource *pcibios_select_root(str
 	struct pci_pbm_info *pbm = pdev->bus->sysdata;
 	struct resource *root = NULL;
 
-	if (r->flags & IORESOURCE_IO)
+	if (resource_type(r) == IORESOURCE_IO)
 		root = &pbm->io_space;
-	if (r->flags & IORESOURCE_MEM)
+	if (resource_type(r) == IORESOURCE_MEM)
 		root = &pbm->mem_space;
 
 	return root;
@@ -876,9 +876,9 @@ int pcibios_enable_device(struct pci_dev
 		if (!(mask & (1<<i)))
 			continue;
 
-		if (res->flags & IORESOURCE_IO)
+		if (resource_type(res) == IORESOURCE_IO)
 			cmd |= PCI_COMMAND_IO;
-		if (res->flags & IORESOURCE_MEM)
+		if (resource_type(res) == IORESOURCE_MEM)
 			cmd |= PCI_COMMAND_MEMORY;
 	}
 
@@ -901,7 +901,7 @@ void pcibios_resource_to_bus(struct pci_
 	zero_res.end = 0;
 	zero_res.flags = res->flags;
 
-	if (res->flags & IORESOURCE_IO)
+	if (resource_type(res) == IORESOURCE_IO)
 		root = &pbm->io_space;
 	else
 		root = &pbm->mem_space;
@@ -922,7 +922,7 @@ void pcibios_bus_to_resource(struct pci_
 	res->start = region->start;
 	res->end = region->end;
 
-	if (res->flags & IORESOURCE_IO)
+	if (resource_type(res) == IORESOURCE_IO)
 		root = &pbm->io_space;
 	else
 		root = &pbm->mem_space;
@@ -1017,6 +1017,7 @@ static int __pci_mmap_make_offset(struct
 
 	for (i = 0; i <= PCI_ROM_RESOURCE; i++) {
 		struct resource *rp = &pdev->resource[i];
+		unsigned long type = resource_type(rp);
 
 		/* Active? */
 		if (!rp->flags)
@@ -1028,9 +1029,9 @@ static int __pci_mmap_make_offset(struct
 				continue;
 		} else {
 			if ((mmap_state == pci_mmap_io &&
-			     (rp->flags & IORESOURCE_IO) == 0) ||
+			     type != IORESOURCE_IO) ||
 			    (mmap_state == pci_mmap_mem &&
-			     (rp->flags & IORESOURCE_MEM) == 0))
+			     type != IORESOURCE_MEM))
 				continue;
 		}
 
@@ -1207,7 +1208,7 @@ void pci_resource_to_user(const struct p
 	struct pci_pbm_info *pbm = pdev->dev.archdata.host_controller;
 	unsigned long offset;
 
-	if (rp->flags & IORESOURCE_IO)
+	if (resource_type(rp) == IORESOURCE_IO)
 		offset = pbm->io_space.start;
 	else
 		offset = pbm->mem_space.start;
--- 0001/arch/sparc64/lib/iomap.c
+++ work/arch/sparc64/lib/iomap.c	2008-07-09 15:17:42.000000000 +0900
@@ -24,14 +24,15 @@ void __iomem *pci_iomap(struct pci_dev *
 	resource_size_t start = pci_resource_start(dev, bar);
 	resource_size_t len = pci_resource_len(dev, bar);
 	unsigned long flags = pci_resource_flags(dev, bar);
+	unsigned long type = flags & IORESOURCE_TYPE_BITS;
 
 	if (!len || !start)
 		return NULL;
 	if (maxlen && len > maxlen)
 		len = maxlen;
-	if (flags & IORESOURCE_IO)
+	if (type == IORESOURCE_IO)
 		return ioport_map(start, len);
-	if (flags & IORESOURCE_MEM) {
+	if (type == IORESOURCE_MEM) {
 		if (flags & IORESOURCE_CACHEABLE)
 			return ioremap(start, len);
 		return ioremap_nocache(start, len);
--- 0001/arch/v850/kernel/rte_mb_a_pci.c
+++ work/arch/v850/kernel/rte_mb_a_pci.c	2008-07-09 15:17:42.000000000 +0900
@@ -232,9 +232,9 @@ int __nomods_init pcibios_enable_device 
 			       "of resource collisions\n", pci_name(dev));
 			return -EINVAL;
 		}
-		if (r->flags & IORESOURCE_IO)
+		if (resource_type(r) == IORESOURCE_IO)
 			cmd |= PCI_COMMAND_IO;
-		if (r->flags & IORESOURCE_MEM)
+		if (resource_type(r) == IORESOURCE_MEM)
 			cmd |= PCI_COMMAND_MEMORY;
 	}
 	if (cmd != old_cmd) {
@@ -307,9 +307,9 @@ pcibios_resource_to_bus(struct pci_dev *
 {
 	unsigned long offset = 0;
 
-	if (res->flags & IORESOURCE_IO) {
+	if (resource_type(res) == IORESOURCE_IO) {
 		offset = MB_A_PCI_IO_ADDR;
-	} else if (res->flags & IORESOURCE_MEM) {
+	} else if (resource_type(res) == IORESOURCE_MEM) {
 		offset = MB_A_PCI_MEM_ADDR;
 	}
 
--- 0001/arch/x86/kernel/pci-calgary_64.c
+++ work/arch/x86/kernel/pci-calgary_64.c	2008-07-09 15:17:42.000000000 +0900
@@ -1540,7 +1540,7 @@ static void __init calgary_fixup_one_tce
 		struct resource *r = &dev->resource[PCI_BRIDGE_RESOURCES + i];
 
 		/* Don't give out TCEs that map MEM resources */
-		if (!(r->flags & IORESOURCE_MEM))
+		if (resource_type(r) != IORESOURCE_MEM)
 			continue;
 
 		/* 0-based? we reserve the whole 1st MB anyway */
--- 0001/arch/x86/pci/i386.c
+++ work/arch/x86/pci/i386.c	2008-07-09 15:17:42.000000000 +0900
@@ -64,7 +64,7 @@ pcibios_align_resource(void *data, struc
 {
 	struct pci_dev *dev = data;
 
-	if (res->flags & IORESOURCE_IO) {
+	if (resource_type(res) == IORESOURCE_IO) {
 		resource_size_t start = res->start;
 
 		if (skip_isa_ioresource_align(dev))
@@ -161,7 +161,7 @@ static void __init pcibios_allocate_reso
 				continue;
 			if (!r->start)		/* Address not assigned at all */
 				continue;
-			if (r->flags & IORESOURCE_IO)
+			if (resource_type(r) == IORESOURCE_IO)
 				disabled = !(command & PCI_COMMAND_IO);
 			else
 				disabled = !(command & PCI_COMMAND_MEMORY);
--- 0001/arch/x86/pci/k8-bus_64.c
+++ work/arch/x86/pci/k8-bus_64.c	2008-07-09 15:17:42.000000000 +0900
@@ -88,7 +88,7 @@ void set_pci_bus_resources_arch_default(
 
 		res = &info->res[j];
 		b->resource[j] = res;
-		if (res->flags & IORESOURCE_IO)
+		if (resource_type(res) == IORESOURCE_IO)
 			root = &ioport_resource;
 		else
 			root = &iomem_resource;
@@ -517,7 +517,8 @@ static int __init early_fill_mp_bus_info
 			res = &info->res[j];
 			printk(KERN_DEBUG "bus: %02x index %x %s: [%llx, %llx]\n",
 			       busnum, j,
-			       (res->flags & IORESOURCE_IO)?"io port":"mmio",
+			       resource_type(res) == IORESOURCE_IO ?
+			       "io port" : "mmio",
 			       res->start, res->end);
 		}
 	}
--- 0001/arch/xtensa/kernel/pci.c
+++ work/arch/xtensa/kernel/pci.c	2008-07-09 15:17:42.000000000 +0900
@@ -75,7 +75,7 @@ pcibios_align_resource(void *data, struc
 {
 	struct pci_dev *dev = data;
 
-	if (res->flags & IORESOURCE_IO) {
+	if (resource_type(res) == IORESOURCE_IO) {
 		resource_size_t start = res->start;
 
 		if (size > 0x100) {
@@ -107,9 +107,9 @@ pcibios_enable_resources(struct pci_dev 
 				"of resource collisions\n", pci_name(dev));
 			return -EINVAL;
 		}
-		if (r->flags & IORESOURCE_IO)
+		if (resource_type(r) == IORESOURCE_IO)
 			cmd |= PCI_COMMAND_IO;
-		if (r->flags & IORESOURCE_MEM)
+		if (resource_type(r) == IORESOURCE_MEM)
 			cmd |= PCI_COMMAND_MEMORY;
 	}
 	if (dev->resource[PCI_ROM_RESOURCE].start)
@@ -215,7 +215,7 @@ void __init pcibios_fixup_bus(struct pci
 		for (i = 0; i < 4; i++) {
 			if ((res = bus->resource[i]) == NULL || !res->flags)
 				continue;
-			if (io_offset && (res->flags & IORESOURCE_IO)) {
+			if (io_offset && resource_type(res) == IORESOURCE_IO)) {
 				res->start += io_offset;
 				res->end += io_offset;
 			}
@@ -251,9 +251,9 @@ int pcibios_enable_device(struct pci_dev
 			       "of resource collisions\n", pci_name(dev));
 			return -EINVAL;
 		}
-		if (r->flags & IORESOURCE_IO)
+		if (resource_type(r) == IORESOURCE_IO)
 			cmd |= PCI_COMMAND_IO;
-		if (r->flags & IORESOURCE_MEM)
+		if (resource_type(r) == IORESOURCE_MEM)
 			cmd |= PCI_COMMAND_MEMORY;
 	}
 	if (cmd != old_cmd) {
--- 0001/drivers/pnp/manager.c
+++ work/drivers/pnp/manager.c	2008-07-09 15:17:56.000000000 +0900
@@ -237,10 +237,7 @@ static void pnp_assign_dma(struct pnp_de
 
 void pnp_init_resource(struct resource *res)
 {
-	unsigned long type;
-
-	type = res->flags & (IORESOURCE_IO  | IORESOURCE_MEM |
-			     IORESOURCE_IRQ | IORESOURCE_DMA);
+	unsigned long type = resource_type(res);
 
 	res->name = NULL;
 	res->flags = type | IORESOURCE_AUTO | IORESOURCE_UNSET;

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

* [PATCH 04/04] resource: add new IORESOURCE_CLK type
  2008-07-09 11:54 [PATCH 00/04] resource: type and size patches Magnus Damm
                   ` (2 preceding siblings ...)
  2008-07-09 11:54 ` [PATCH 03/04] resource: use new resource type changes Magnus Damm
@ 2008-07-09 11:55 ` Magnus Damm
  2008-07-11 19:18   ` Andrew Morton
  3 siblings, 1 reply; 10+ messages in thread
From: Magnus Damm @ 2008-07-09 11:55 UTC (permalink / raw)
  To: linux-kernel; +Cc: Magnus Damm, gregkh, akpm

This patch rearranges the values of the IORESOURCE_TYPE_BITS from
one bit per type to a 4-bit counter. Also, IORESOURCE_CLK is added.
Not sure if it is better to start counting from 0 instead of 1.

Signed-off-by: Magnus Damm <damm@igel.co.jp>
---

 include/linux/ioport.h |    5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

--- 0003/include/linux/ioport.h
+++ work/include/linux/ioport.h	2008-07-09 15:19:45.000000000 +0900
@@ -37,8 +37,9 @@ struct resource_list {
 #define IORESOURCE_TYPE_BITS	0x00000f00	/* Resource type */
 #define IORESOURCE_IO		0x00000100
 #define IORESOURCE_MEM		0x00000200
-#define IORESOURCE_IRQ		0x00000400
-#define IORESOURCE_DMA		0x00000800
+#define IORESOURCE_IRQ		0x00000300
+#define IORESOURCE_DMA		0x00000400
+#define IORESOURCE_CLK		0x00000500
 
 #define IORESOURCE_PREFETCH	0x00001000	/* No side effects */
 #define IORESOURCE_READONLY	0x00002000

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

* Re: [PATCH 03/04] resource: use new resource type changes
  2008-07-09 11:54 ` [PATCH 03/04] resource: use new resource type changes Magnus Damm
@ 2008-07-09 12:11   ` Josh Boyer
  2008-07-11 19:18     ` Andrew Morton
  0 siblings, 1 reply; 10+ messages in thread
From: Josh Boyer @ 2008-07-09 12:11 UTC (permalink / raw)
  To: Magnus Damm; +Cc: linux-kernel, gregkh, akpm

On Wed, 2008-07-09 at 20:54 +0900, Magnus Damm wrote:
> Make sure resource_type() or IORESOURCE_TYPE_BITS are used instead of
> bit operations. This needs more work, I ignored drivers/ for now.
> 
> Signed-off-by: Magnus Damm <damm@igel.co.jp>
> ---

<snip>

>  arch/ppc/kernel/pci.c                      |   48 +++++++++++++---------------
>  arch/ppc/syslib/ppc405_pci.c               |    2 -
>  arch/ppc/syslib/ppc_sys.c                  |    2 -

You can drop the arch/ppc bits entirely.  arch/ppc won't exist in 2.6.27

josh


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

* Re: [PATCH 03/04] resource: use new resource type changes
  2008-07-09 12:11   ` Josh Boyer
@ 2008-07-11 19:18     ` Andrew Morton
  0 siblings, 0 replies; 10+ messages in thread
From: Andrew Morton @ 2008-07-11 19:18 UTC (permalink / raw)
  To: Josh Boyer; +Cc: Magnus Damm, linux-kernel, gregkh

On Wed, 09 Jul 2008 08:11:13 -0400 Josh Boyer <jwboyer@gmail.com> wrote:

> >  arch/ppc/kernel/pci.c                      |   48 +++++++++++++---------------
> >  arch/ppc/syslib/ppc405_pci.c               |    2 -
> >  arch/ppc/syslib/ppc_sys.c                  |    2 -
> 
> You can drop the arch/ppc bits entirely.  arch/ppc won't exist in 2.6.27

yeah, I just applied the patch and ignored all the splatter.  Hopefully it
still works.

(linux-next -> thatta way, guys)

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

* Re: [PATCH 04/04] resource: add new IORESOURCE_CLK type
  2008-07-09 11:55 ` [PATCH 04/04] resource: add new IORESOURCE_CLK type Magnus Damm
@ 2008-07-11 19:18   ` Andrew Morton
  2008-07-15  8:19     ` Magnus Damm
  0 siblings, 1 reply; 10+ messages in thread
From: Andrew Morton @ 2008-07-11 19:18 UTC (permalink / raw)
  To: Magnus Damm; +Cc: linux-kernel, gregkh

On Wed, 09 Jul 2008 20:55:02 +0900 Magnus Damm <magnus.damm@gmail.com> wrote:

> This patch rearranges the values of the IORESOURCE_TYPE_BITS from
> one bit per type to a 4-bit counter. Also, IORESOURCE_CLK is added.
> Not sure if it is better to start counting from 0 instead of 1.
> 

I don't believe this is an adequate changelog.  It contains the "what" but
not the "why".

Why did we switch from one-bit to four-bits?

Why did we add IORESOURCE_CLK?

The latter was convered in [0/n] a bit, but not at all clearly/fully.


> ---
> 
>  include/linux/ioport.h |    5 +++--
>  1 file changed, 3 insertions(+), 2 deletions(-)
> 
> --- 0003/include/linux/ioport.h
> +++ work/include/linux/ioport.h	2008-07-09 15:19:45.000000000 +0900
> @@ -37,8 +37,9 @@ struct resource_list {
>  #define IORESOURCE_TYPE_BITS	0x00000f00	/* Resource type */
>  #define IORESOURCE_IO		0x00000100
>  #define IORESOURCE_MEM		0x00000200
> -#define IORESOURCE_IRQ		0x00000400
> -#define IORESOURCE_DMA		0x00000800
> +#define IORESOURCE_IRQ		0x00000300
> +#define IORESOURCE_DMA		0x00000400
> +#define IORESOURCE_CLK		0x00000500
>  
>  #define IORESOURCE_PREFETCH	0x00001000	/* No side effects */
>  #define IORESOURCE_READONLY	0x00002000

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

* Re: [PATCH 04/04] resource: add new IORESOURCE_CLK type
  2008-07-11 19:18   ` Andrew Morton
@ 2008-07-15  8:19     ` Magnus Damm
  2008-07-17 23:20       ` Andrew Morton
  0 siblings, 1 reply; 10+ messages in thread
From: Magnus Damm @ 2008-07-15  8:19 UTC (permalink / raw)
  To: Andrew Morton; +Cc: linux-kernel, gregkh

Hi Andrew,

Thanks for picking up my patches.

On Sat, Jul 12, 2008 at 4:18 AM, Andrew Morton
<akpm@linux-foundation.org> wrote:
> On Wed, 09 Jul 2008 20:55:02 +0900 Magnus Damm <magnus.damm@gmail.com> wrote:
>
>> This patch rearranges the values of the IORESOURCE_TYPE_BITS from
>> one bit per type to a 4-bit counter. Also, IORESOURCE_CLK is added.
>> Not sure if it is better to start counting from 0 instead of 1.
>>
>
> I don't believe this is an adequate changelog.  It contains the "what" but
> not the "why".

Yeah, sorry about that. I should have been more clear.

> Why did we switch from one-bit to four-bits?

The 4-bit encoding is there because I thought it was a waste of bits
to use one bit per type. =)

I wanted to add IORESOURCE_CLK and while at it I was playing around
with changing the code to use a 4-bit value for resource type. We may
already have spare bits available that are more suitable for new types
though.

> Why did we add IORESOURCE_CLK?

Currently we use struct resource with the types
IORESOURCE_MEM/IORESOURCE_IO and IORESOUCE_IRQ to pass I/O and
interrupt parameters to platform drivers. That works fine, but I'd
like to extend this so we also pass clock information. Basically a
string that tells the platform driver which clock that should be used
with clk_get() for a certain driver instance.

I'm sure there are other ways to do this, but I'd like to have a
generic way to pass a clock string to platform devices. Using a hard
coded string in the device driver won't do since we may have multiple
instances of drivers that need to use different clocks. Extending
struct resource seems to be the easiest way to do this IMO.

If people are happy with this idea then i'd be more than happy to fix
up and resend this patch.

/ magnus

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

* Re: [PATCH 04/04] resource: add new IORESOURCE_CLK type
  2008-07-15  8:19     ` Magnus Damm
@ 2008-07-17 23:20       ` Andrew Morton
  0 siblings, 0 replies; 10+ messages in thread
From: Andrew Morton @ 2008-07-17 23:20 UTC (permalink / raw)
  To: Magnus Damm; +Cc: linux-kernel, gregkh

On Tue, 15 Jul 2008 17:19:24 +0900
"Magnus Damm" <magnus.damm@gmail.com> wrote:

> Hi Andrew,
> 
> Thanks for picking up my patches.
> 
> On Sat, Jul 12, 2008 at 4:18 AM, Andrew Morton
> <akpm@linux-foundation.org> wrote:
> > On Wed, 09 Jul 2008 20:55:02 +0900 Magnus Damm <magnus.damm@gmail.com> wrote:
> >
> >> This patch rearranges the values of the IORESOURCE_TYPE_BITS from
> >> one bit per type to a 4-bit counter. Also, IORESOURCE_CLK is added.
> >> Not sure if it is better to start counting from 0 instead of 1.
> >>
> >
> > I don't believe this is an adequate changelog.  It contains the "what" but
> > not the "why".
> 
> Yeah, sorry about that. I should have been more clear.
> 
> > Why did we switch from one-bit to four-bits?
> 
> The 4-bit encoding is there because I thought it was a waste of bits
> to use one bit per type. =)
> 
> I wanted to add IORESOURCE_CLK and while at it I was playing around
> with changing the code to use a 4-bit value for resource type. We may
> already have spare bits available that are more suitable for new types
> though.
> 
> > Why did we add IORESOURCE_CLK?
> 
> Currently we use struct resource with the types
> IORESOURCE_MEM/IORESOURCE_IO and IORESOUCE_IRQ to pass I/O and
> interrupt parameters to platform drivers. That works fine, but I'd
> like to extend this so we also pass clock information. Basically a
> string that tells the platform driver which clock that should be used
> with clk_get() for a certain driver instance.
> 
> I'm sure there are other ways to do this, but I'd like to have a
> generic way to pass a clock string to platform devices. Using a hard
> coded string in the device driver won't do since we may have multiple
> instances of drivers that need to use different clocks. Extending
> struct resource seems to be the easiest way to do this IMO.

umm, has there been any comment on all of this yet?

Perhaps you should just send everything again with clearer/completer
descriptions.

> If people are happy with this idea then i'd be more than happy to fix
> up and resend this patch.

We're all asleep.  Please do whatever you think is best and we'll merge
it - that'll wake 'em up.


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

end of thread, other threads:[~2008-07-17 23:21 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2008-07-09 11:54 [PATCH 00/04] resource: type and size patches Magnus Damm
2008-07-09 11:54 ` [PATCH 01/04] resource: add resource_size() Magnus Damm
2008-07-09 11:54 ` [PATCH 02/04] resource: add resource_type() and IORESOURCE_TYPE_BITS Magnus Damm
2008-07-09 11:54 ` [PATCH 03/04] resource: use new resource type changes Magnus Damm
2008-07-09 12:11   ` Josh Boyer
2008-07-11 19:18     ` Andrew Morton
2008-07-09 11:55 ` [PATCH 04/04] resource: add new IORESOURCE_CLK type Magnus Damm
2008-07-11 19:18   ` Andrew Morton
2008-07-15  8:19     ` Magnus Damm
2008-07-17 23:20       ` Andrew Morton

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).