Skip to contentSkip to conversation

Custom IORESOURCE Class

PATCH In review Matthew Gilbert 4 participants 5 messages Aug 8, 2005 – Aug 9, 2005 Driver core

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 Custom IORESOURCE Class

Below is a patch that adds an additional resource class to the platform resource types. This is to support additional resources that need to be passed to drivers without overloading the existing specific types. In my case, I need to send clock information to the driver to enable power management.

drivers/base/platform.c +2 -2
diff -uprN -X dontdiff linux-2.6.12.3.orig/drivers/base/platform.c linux-2.6.12.3/drivers/base/platform.c
@@ -37,7 +37,7 @@ platform_get_resource(struct platform_de
 		struct resource *r = &dev->resource[i];
 
 		if ((r->flags & (IORESOURCE_IO|IORESOURCE_MEM|
-				 IORESOURCE_IRQ|IORESOURCE_DMA))
+				 IORESOURCE_IRQ|IORESOURCE_DMA|IORESOURCE_OTHER))
 		    == type)
 			if (num-- == 0)
 				return r;
@@ -73,7 +73,7 @@ platform_get_resource_byname(struct plat
 		struct resource *r = &dev->resource[i];
 
 		if ((r->flags & (IORESOURCE_IO|IORESOURCE_MEM|
-				 IORESOURCE_IRQ|IORESOURCE_DMA)) == type)
+				 IORESOURCE_IRQ|IORESOURCE_DMA|IORESOURCE_OTHER)) == type)
 			if (!strcmp(r->name, name))
 				return r;
 	}
include/linux/ioport.h +7 -6
diff -uprN -X dontdiff linux-2.6.12.3.orig/include/linux/ioport.h linux-2.6.12.3/include/linux/ioport.h
@@ -35,13 +35,14 @@ struct resource_list {
 #define IORESOURCE_MEM		0x00000200
 #define IORESOURCE_IRQ		0x00000400
 #define IORESOURCE_DMA		0x00000800
+#define IORESOURCE_OTHER	0x00001000
 
-#define IORESOURCE_PREFETCH	0x00001000	/* No side effects */
-#define IORESOURCE_READONLY	0x00002000
-#define IORESOURCE_CACHEABLE	0x00004000
-#define IORESOURCE_RANGELENGTH	0x00008000
-#define IORESOURCE_SHADOWABLE	0x00010000
-#define IORESOURCE_BUS_HAS_VGA	0x00080000
+#define IORESOURCE_PREFETCH	0x00010000	/* No side effects */
+#define IORESOURCE_READONLY	0x00020000
+#define IORESOURCE_CACHEABLE	0x00040000
+#define IORESOURCE_RANGELENGTH	0x00080000
+#define IORESOURCE_SHADOWABLE	0x00100000
+#define IORESOURCE_BUS_HAS_VGA	0x00800000
 
 #define IORESOURCE_DISABLED	0x10000000
 #define IORESOURCE_UNSET	0x20000000
#1 lore raw
Quoted 6 lines · Matthew Gilbert

Below is a patch that adds an additional resource class to the platform resource types. This is to support additional resources that need to be passed to drivers without overloading the existing specific types. In my case, I need to send clock information to the driver to enable power management.

Hm, you do realize that Pat's no longer the driver core maintainer? :)

Anyway, Russell and Adam, any objections to this patch?

thanks,

greg k-h

Quoted 47 lines

diff -uprN -X dontdiff linux-2.6.12.3.orig/drivers/base/platform.c linux-2.6.12.3/drivers/base/platform.c

drivers/base/platform.c +2 -2
@@ -37,7 +37,7 @@ platform_get_resource(struct platform_de
 		struct resource *r = &dev->resource[i];
 
 		if ((r->flags & (IORESOURCE_IO|IORESOURCE_MEM|
-				 IORESOURCE_IRQ|IORESOURCE_DMA))
+				 IORESOURCE_IRQ|IORESOURCE_DMA|IORESOURCE_OTHER))
 		    == type)
 			if (num-- == 0)
 				return r;
@@ -73,7 +73,7 @@ platform_get_resource_byname(struct plat
 		struct resource *r = &dev->resource[i];
 
 		if ((r->flags & (IORESOURCE_IO|IORESOURCE_MEM|
-				 IORESOURCE_IRQ|IORESOURCE_DMA)) == type)
+				 IORESOURCE_IRQ|IORESOURCE_DMA|IORESOURCE_OTHER)) == type)
 			if (!strcmp(r->name, name))
 				return r;
 	}

diff -uprN -X dontdiff linux-2.6.12.3.orig/include/linux/ioport.h linux-2.6.12.3/include/linux/ioport.h

include/linux/ioport.h +7 -6
@@ -35,13 +35,14 @@ struct resource_list {
 #define IORESOURCE_MEM		0x00000200
 #define IORESOURCE_IRQ		0x00000400
 #define IORESOURCE_DMA		0x00000800
+#define IORESOURCE_OTHER	0x00001000
 
-#define IORESOURCE_PREFETCH	0x00001000	/* No side effects */
-#define IORESOURCE_READONLY	0x00002000
-#define IORESOURCE_CACHEABLE	0x00004000
-#define IORESOURCE_RANGELENGTH	0x00008000
-#define IORESOURCE_SHADOWABLE	0x00010000
-#define IORESOURCE_BUS_HAS_VGA	0x00080000
+#define IORESOURCE_PREFETCH	0x00010000	/* No side effects */
+#define IORESOURCE_READONLY	0x00020000
+#define IORESOURCE_CACHEABLE	0x00040000
+#define IORESOURCE_RANGELENGTH	0x00080000
+#define IORESOURCE_SHADOWABLE	0x00100000
+#define IORESOURCE_BUS_HAS_VGA	0x00800000
 
 #define IORESOURCE_DISABLED	0x10000000
 #define IORESOURCE_UNSET	0x20000000
#2 lore raw
Quoted 11 lines · Greg KH
Quoted 6 lines · Matthew Gilbert

Below is a patch that adds an additional resource class to the platform resource types. This is to support additional resources that need to be passed to drivers without overloading the existing specific types. In my case, I need to send clock information to the driver to enable power management.

Hm, you do realize that Pat's no longer the driver core maintainer? :)

Anyway, Russell and Adam, any objections to this patch?

I'm not sure if I agree with this patch. "struct resource" is used primarily for I/O resource assignment. Although I agree we may need to add new IORESOURCE types, I'm not sure if clock data belongs here. I don't think "start" and "end" would be useful for most platform data. Could you provide more information about this specific issue and resource type? Maybe we could create a new sysfs attribute?

Thanks,
Adam

#3 lore raw
Quoted 29 lines · Adam Belay
Quoted 4 lines · Greg KH
Quoted 2 lines · Matthew Gilbert

Below is a patch that adds an additional resource class to the

platform

Quoted 2 lines
Quoted 2 lines

resource types. This is to support additional resources that need to

be passed

Quoted 2 lines
Quoted 2 lines

to drivers without overloading the existing specific types. In my

case, I need

Quoted 7 lines
Quoted 4 lines

to send clock information to the driver to enable power management.

Hm, you do realize that Pat's no longer the driver core maintainer?

:)

Quoted 3 lines

Anyway, Russell and Adam, any objections to this patch?

Quoted 10 lines

I'm not sure if I agree with this patch. "struct resource" is used primarily for
I/O resource assignment. Although I agree we may need to add new IORESOURCE types,
I'm not sure if clock data belongs here. I don't think "start" and "end" would be
useful for most platform data. Could you provide more information about this
specific issue and resource type? Maybe we could create a new sysfs attribute?

I would also like to understand more about what the need is here. We have clock data and such but use platform_data for it.

- kumar

#4 lore raw
Quoted 43 lines · Kumar Gala
Quoted 29 lines · Adam Belay
Quoted 4 lines · Greg KH
Quoted 2 lines · Matthew Gilbert

Below is a patch that adds an additional resource class to the

platform

Quoted 2 lines
Quoted 2 lines

resource types. This is to support additional resources that need to

be passed

Quoted 2 lines
Quoted 2 lines

to drivers without overloading the existing specific types. In my

case, I need

Quoted 7 lines
Quoted 4 lines

to send clock information to the driver to enable power management.

Hm, you do realize that Pat's no longer the driver core maintainer?

:)

Quoted 3 lines

Anyway, Russell and Adam, any objections to this patch?

Quoted 11 lines

I'm not sure if I agree with this patch. "struct resource" is used primarily for
I/O resource assignment. Although I agree we may need to add new IORESOURCE types,
I'm not sure if clock data belongs here. I don't think "start" and "end" would be
useful for most platform data. Could you provide more information about
this
specific issue and resource type? Maybe we could create a new sysfs attribute?

Quoted 2 lines

I would also like to understand more about what the need is here. We have clock data and such but use platform_data for it.

I am using IORESOURCE_MEM to pass in the base addresses of the necessary clock registers. I also need to pass a fractional divider clk id. The resource table seemed appropriate because the base addresses and the divider id are closely related. Its also a great framework for enabling varying resource lists. Currently I don't use this, but in the future I may. Its possible in a future board revision there may not be a fractional divider available. The resource framework makes querying for the clk id very straight forward as opposed to magic values in a struct I pass through platform_data.

It can easily be moved to platform_data (or split between the two) if that is more appropriate. Thanks for the feedback. _matt