From: Sascha Hauer <s.hauer@pengutronix.de>
To: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
Cc: barebox@lists.infradead.org
Subject: Re: [PATCH 01/10 v2] device: introduce resource structure to simplify resource declaration
Date: Mon, 18 Jul 2011 22:48:15 +0200 [thread overview]
Message-ID: <20110718204815.GI20587@pengutronix.de> (raw)
In-Reply-To: <1310993678-7563-1-git-send-email-plagnioj@jcrosoft.com>
On Mon, Jul 18, 2011 at 02:54:29PM +0200, Jean-Christophe PLAGNIOL-VILLARD wrote:
> and add multi resource per device support
>
> for now we keep the old map_base and size temporary but will switch all of
> the used step by step to them resource way
>
> and mirror the first resource to the map_base and size if available
>
> Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
Let's give it a go. I applied these for next. I gave it a test on a i.MX
board and it seems to work. I already created some patches converting
several i.MX drivers to struct resource usage. Will post them tomorrow.
Sascha
> ---
> v2:
>
> update fixup
>
> Best Regards,
> J.
> include/driver.h | 4 ++
> include/linux/ioport.h | 115 ++++++++++++++++++++++++++++++++++++++++++++++++
> lib/driver.c | 19 ++++++++
> 3 files changed, 138 insertions(+), 0 deletions(-)
> create mode 100644 include/linux/ioport.h
>
> diff --git a/include/driver.h b/include/driver.h
> index 6a4d45e..ed3df16 100644
> --- a/include/driver.h
> +++ b/include/driver.h
> @@ -24,6 +24,7 @@
> #define DRIVER_H
>
> #include <linux/list.h>
> +#include <linux/ioport.h>
>
> #define MAX_DRIVER_NAME 32
> #define FORMAT_DRIVER_MANE_ID "%s%d"
> @@ -76,6 +77,9 @@ struct device_d {
> * Flash or SDRAM. */
> resource_size_t map_base;
>
> + struct resource *resource;
> + int num_resources;
> +
> void *platform_data; /*! board specific information about this device */
>
> /*! Devices of a particular class normaly need to store more
> diff --git a/include/linux/ioport.h b/include/linux/ioport.h
> new file mode 100644
> index 0000000..5143115
> --- /dev/null
> +++ b/include/linux/ioport.h
> @@ -0,0 +1,115 @@
> +/*
> + * ioport.h Definitions of routines for detecting, reserving and
> + * allocating system resources.
> + *
> + * Authors: Linus Torvalds
> + */
> +
> +#ifndef _LINUX_IOPORT_H
> +#define _LINUX_IOPORT_H
> +
> +#ifndef __ASSEMBLY__
> +#include <linux/compiler.h>
> +#include <linux/types.h>
> +/*
> + * Resources are tree-like, allowing
> + * nesting etc..
> + */
> +struct resource {
> + resource_size_t start;
> + resource_size_t size;
> + const char *name;
> + unsigned long flags;
> +};
> +
> +/*
> + * IO resources have these defined flags.
> + */
> +#define IORESOURCE_BITS 0x000000ff /* Bus-specific bits */
> +
> +#define IORESOURCE_TYPE_BITS 0x00001f00 /* Resource type */
> +#define IORESOURCE_IO 0x00000100
> +#define IORESOURCE_MEM 0x00000200
> +#define IORESOURCE_IRQ 0x00000400
> +#define IORESOURCE_DMA 0x00000800
> +#define IORESOURCE_BUS 0x00001000
> +
> +#define IORESOURCE_PREFETCH 0x00002000 /* No side effects */
> +#define IORESOURCE_READONLY 0x00004000
> +#define IORESOURCE_CACHEABLE 0x00008000
> +#define IORESOURCE_RANGELENGTH 0x00010000
> +#define IORESOURCE_SHADOWABLE 0x00020000
> +
> +#define IORESOURCE_SIZEALIGN 0x00040000 /* size indicates alignment */
> +#define IORESOURCE_STARTALIGN 0x00080000 /* start field is alignment */
> +
> +#define IORESOURCE_MEM_64 0x00100000
> +#define IORESOURCE_WINDOW 0x00200000 /* forwarded by bridge */
> +#define IORESOURCE_MUXED 0x00400000 /* Resource is software muxed */
> +
> +#define IORESOURCE_EXCLUSIVE 0x08000000 /* Userland may not map this resource */
> +#define IORESOURCE_DISABLED 0x10000000
> +#define IORESOURCE_UNSET 0x20000000
> +#define IORESOURCE_AUTO 0x40000000
> +#define IORESOURCE_BUSY 0x80000000 /* Driver has marked this resource busy */
> +
> +/* PnP IRQ specific bits (IORESOURCE_BITS) */
> +#define IORESOURCE_IRQ_HIGHEDGE (1<<0)
> +#define IORESOURCE_IRQ_LOWEDGE (1<<1)
> +#define IORESOURCE_IRQ_HIGHLEVEL (1<<2)
> +#define IORESOURCE_IRQ_LOWLEVEL (1<<3)
> +#define IORESOURCE_IRQ_SHAREABLE (1<<4)
> +#define IORESOURCE_IRQ_OPTIONAL (1<<5)
> +
> +/* PnP DMA specific bits (IORESOURCE_BITS) */
> +#define IORESOURCE_DMA_TYPE_MASK (3<<0)
> +#define IORESOURCE_DMA_8BIT (0<<0)
> +#define IORESOURCE_DMA_8AND16BIT (1<<0)
> +#define IORESOURCE_DMA_16BIT (2<<0)
> +
> +#define IORESOURCE_DMA_MASTER (1<<2)
> +#define IORESOURCE_DMA_BYTE (1<<3)
> +#define IORESOURCE_DMA_WORD (1<<4)
> +
> +#define IORESOURCE_DMA_SPEED_MASK (3<<6)
> +#define IORESOURCE_DMA_COMPATIBLE (0<<6)
> +#define IORESOURCE_DMA_TYPEA (1<<6)
> +#define IORESOURCE_DMA_TYPEB (2<<6)
> +#define IORESOURCE_DMA_TYPEF (3<<6)
> +
> +/* PnP memory I/O specific bits (IORESOURCE_BITS) */
> +#define IORESOURCE_MEM_WRITEABLE (1<<0) /* dup: IORESOURCE_READONLY */
> +#define IORESOURCE_MEM_CACHEABLE (1<<1) /* dup: IORESOURCE_CACHEABLE */
> +#define IORESOURCE_MEM_RANGELENGTH (1<<2) /* dup: IORESOURCE_RANGELENGTH */
> +#define IORESOURCE_MEM_TYPE_MASK (3<<3)
> +#define IORESOURCE_MEM_8BIT (0<<3)
> +#define IORESOURCE_MEM_16BIT (1<<3)
> +#define IORESOURCE_MEM_8AND16BIT (2<<3)
> +#define IORESOURCE_MEM_32BIT (3<<3)
> +#define IORESOURCE_MEM_SHADOWABLE (1<<5) /* dup: IORESOURCE_SHADOWABLE */
> +#define IORESOURCE_MEM_EXPANSIONROM (1<<6)
> +
> +/* PnP I/O specific bits (IORESOURCE_BITS) */
> +#define IORESOURCE_IO_16BIT_ADDR (1<<0)
> +#define IORESOURCE_IO_FIXED (1<<1)
> +
> +/* PCI ROM control bits (IORESOURCE_BITS) */
> +#define IORESOURCE_ROM_ENABLE (1<<0) /* ROM is enabled, same as PCI_ROM_ADDRESS_ENABLE */
> +#define IORESOURCE_ROM_SHADOW (1<<1) /* ROM is copy at C000:0 */
> +#define IORESOURCE_ROM_COPY (1<<2) /* ROM is alloc'd copy, resource field overlaid */
> +#define IORESOURCE_ROM_BIOS_COPY (1<<3) /* ROM is BIOS copy, resource field overlaid */
> +
> +/* PCI control bits. Shares IORESOURCE_BITS with above PCI ROM. */
> +#define IORESOURCE_PCI_FIXED (1<<4) /* Do not move resource */
> +
> +static inline resource_size_t resource_size(const struct resource *res)
> +{
> + return res->size;
> +}
> +static inline unsigned long resource_type(const struct resource *res)
> +{
> + return res->flags & IORESOURCE_TYPE_BITS;
> +}
> +
> +#endif /* __ASSEMBLY__ */
> +#endif /* _LINUX_IOPORT_H */
> diff --git a/lib/driver.c b/lib/driver.c
> index 4c10a49..7b381ab 100644
> --- a/lib/driver.c
> +++ b/lib/driver.c
> @@ -103,6 +103,25 @@ int register_device(struct device_d *new_device)
> {
> struct driver_d *drv;
>
> + /* if no map_base available use the first resource if available
> + * so we do not need to duplicate it
> + * Temporary fixup until we get rid of map_base and size
> + */
> + if (new_device->map_base) {
> + if (new_device->resource) {
> + dev_err(new_device, "map_base and resource specifed\n");
> + return -EIO;
> + }
> + dev_warn(new_device, "uses map_base. Please convert to use resources\n");
> + new_device->resource = xzalloc(sizeof(struct resource));
> + new_device->resource[0].start = new_device->map_base;
> + new_device->resource[0].size = new_device->size;
> + new_device->num_resources = 1;
> + } else if (new_device->resource) {
> + new_device->map_base = new_device->resource[0].start;
> + new_device->size = new_device->resource[0].size;
> + }
> +
> if (new_device->id < 0) {
> new_device->id = get_free_deviceid(new_device->name);
> } else {
> --
> 1.7.5.4
>
>
> _______________________________________________
> barebox mailing list
> barebox@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/barebox
>
--
Pengutronix e.K. | |
Industrial Linux Solutions | http://www.pengutronix.de/ |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
prev parent reply other threads:[~2011-07-18 20:48 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-07-18 12:54 Jean-Christophe PLAGNIOL-VILLARD
2011-07-18 12:54 ` [PATCH 02/10] at91: switch to all resource declaration to "struct resource" Jean-Christophe PLAGNIOL-VILLARD
2011-07-18 12:54 ` [PATCH 03/10] at91/serial: switch " Jean-Christophe PLAGNIOL-VILLARD
2011-07-18 12:54 ` [PATCH 04/10] macb: " Jean-Christophe PLAGNIOL-VILLARD
2011-07-18 12:54 ` [PATCH 05/10] atmel_mci: " Jean-Christophe PLAGNIOL-VILLARD
2011-07-18 12:54 ` [PATCH 06/10] atmel_nand: " Jean-Christophe PLAGNIOL-VILLARD
2011-07-18 12:54 ` [PATCH 07/10 v2] dm9200: use "struct resource" instead of platform_data Jean-Christophe PLAGNIOL-VILLARD
2011-07-18 12:54 ` [PATCH 08/10] nomadik: switch to all resource declaration to "struct resource" Jean-Christophe PLAGNIOL-VILLARD
2011-07-18 12:54 ` [PATCH 09/10] nomadik_nand: use "struct resource" instead of platform_data Jean-Christophe PLAGNIOL-VILLARD
2011-07-18 12:54 ` [PATCH 10/10] amba-pl011: switch to "struct resource" Jean-Christophe PLAGNIOL-VILLARD
2011-07-18 20:48 ` Sascha Hauer [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20110718204815.GI20587@pengutronix.de \
--to=s.hauer@pengutronix.de \
--cc=barebox@lists.infradead.org \
--cc=plagnioj@jcrosoft.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox