mail archive of the barebox mailing list
 help / color / mirror / Atom feed
* [To test] [PATCH 0/5] device: introduce resource structure
@ 2010-11-12 18:02 Jean-Christophe PLAGNIOL-VILLARD
  2010-11-12 18:18 ` [PATCH 1/5] device: introduce resource structure to simplify resource delaration Jean-Christophe PLAGNIOL-VILLARD
                   ` (7 more replies)
  0 siblings, 8 replies; 22+ messages in thread
From: Jean-Christophe PLAGNIOL-VILLARD @ 2010-11-12 18:02 UTC (permalink / raw)
  To: barebox

Hi,

	This patch series introduce the device resource structure
	to be allow to declare more than one resources per device

The following changes since commit b35fbfc237a1916bfddc1be8ea2dc4c0a7426147:

  at91: add Ronetix pm9g45 support (2010-11-11 20:43:21 +0800)

are available in the git repository at:
  git://git.jcrosoft.org/barebox.git mem

Jean-Christophe PLAGNIOL-VILLARD (5):
      device: introduce resource structure to simplify resource delaration
      mem: add multiple resource support
      arm/setup_memory_tags: add multiple resource support
      edb93xx: convert to multiple mem resources
      pcm037: convert to multiple mem resources

 Documentation/porting.txt                          |   11 ++-
 arch/arm/boards/a9m2410/a9m2410.c                  |   61 +++++++---
 arch/arm/boards/a9m2440/a9m2440.c                  |   48 ++++++--
 arch/arm/boards/at91sam9261ek/init.c               |   11 ++-
 arch/arm/boards/at91sam9263ek/init.c               |   11 ++-
 arch/arm/boards/chumby_falconwing/falconwing.c     |   37 +++++--
 arch/arm/boards/edb93xx/edb93xx.c                  |  120 ++++++++------------
 arch/arm/boards/eukrea_cpuimx25/eukrea_cpuimx25.c  |   37 +++++--
 arch/arm/boards/eukrea_cpuimx27/eukrea_cpuimx27.c  |   74 +++++++++---
 arch/arm/boards/eukrea_cpuimx35/eukrea_cpuimx35.c  |   37 +++++--
 arch/arm/boards/freescale-mx23-evk/mx23-evk.c      |   28 +++--
 arch/arm/boards/freescale-mx25-3-stack/3stack.c    |   53 ++++++----
 arch/arm/boards/freescale-mx35-3-stack/3stack.c    |   46 ++++++--
 arch/arm/boards/freescale-mx51-pdk/board.c         |   15 ++-
 arch/arm/boards/guf-cupid/board.c                  |   64 ++++++++--
 arch/arm/boards/guf-neso/board.c                   |   26 +++--
 arch/arm/boards/imx21ads/imx21ads.c                |   36 +++++--
 arch/arm/boards/imx27ads/imx27ads.c                |   26 +++--
 arch/arm/boards/mmccpu/init.c                      |   11 ++-
 arch/arm/boards/netx/netx.c                        |   37 +++++--
 arch/arm/boards/nhk8815/setup.c                    |   11 ++-
 arch/arm/boards/omap/board-beagle.c                |   46 ++++++--
 arch/arm/boards/omap/board-omap3evm.c              |   34 ++++--
 arch/arm/boards/omap/board-sdp343x.c               |   26 +++--
 arch/arm/boards/omap/devices-gpmc-nand.c           |   11 ++-
 arch/arm/boards/pcm037/pcm037.c                    |  110 +++++++++++--------
 arch/arm/boards/pcm038/pcm038.c                    |   52 ++++++---
 arch/arm/boards/pcm043/pcm043.c                    |   26 +++--
 arch/arm/boards/phycard-i.MX27/pca100.c            |   37 +++++--
 arch/arm/boards/pm9261/init.c                      |   22 +++-
 arch/arm/boards/pm9263/init.c                      |   11 ++-
 arch/arm/boards/scb9328/scb9328.c                  |   49 ++++++--
 arch/arm/lib/armlinux.c                            |   15 ++-
 arch/arm/mach-at91/at91sam9260_devices.c           |  114 +++++++++++++++----
 arch/arm/mach-at91/at91sam9261_devices.c           |   70 +++++++++---
 arch/arm/mach-at91/at91sam9263_devices.c           |   81 ++++++++++---
 arch/arm/mach-at91/at91sam9g45_devices.c           |   92 ++++++++++++----
 arch/arm/mach-imx/devices.c                        |    4 +-
 arch/arm/mach-imx/iim.c                            |   17 ++-
 arch/arm/mach-imx/imx25.c                          |   42 ++++++-
 arch/arm/mach-nomadik/8815.c                       |   37 +++++--
 arch/blackfin/boards/ipe337/ipe337.c               |   48 ++++++--
 arch/m68k/boards/kp_ukd_r1_num/kp_ukd_r1_num.c     |  102 ++++++++++++----
 arch/m68k/boards/phycore_mcf54xx/phyCore_MCF54xx.c |   72 ++++++++----
 arch/ppc/boards/pcm030/pcm030.c                    |   61 ++++++++---
 arch/sandbox/board/hostfile.c                      |    4 +-
 arch/sandbox/mach-sandbox/include/mach/hostfile.h  |   10 ++-
 arch/sandbox/os/common.c                           |    4 +-
 arch/x86/boards/x86_generic/generic_pc.c           |   32 ++++--
 commands/mem.c                                     |   36 ++++---
 common/startup.c                                   |   13 ++-
 drivers/ata/bios.c                                 |    4 +-
 drivers/ata/disk_drive.c                           |   13 +-
 drivers/i2c/busses/i2c-imx.c                       |   22 ++--
 drivers/i2c/busses/i2c-omap.c                      |    4 +-
 drivers/mci/imx-esdhc.c                            |    2 +-
 drivers/mci/imx.c                                  |    3 +-
 drivers/mci/mci-core.c                             |    4 +-
 drivers/mci/s3c.c                                  |  106 ++++++++++--------
 drivers/mci/stm378x.c                              |   79 ++++++++-----
 drivers/mtd/nand/atmel_nand.c                      |    2 +-
 drivers/mtd/nand/nand_imx.c                        |    2 +-
 drivers/mtd/nand/nand_omap_gpmc.c                  |   13 ++-
 drivers/mtd/nand/nand_s3c2410.c                    |    4 +-
 drivers/net/cs8900.c                               |    2 +-
 drivers/net/fec_imx.c                              |    2 +-
 drivers/net/fec_mpc5200.c                          |    2 +-
 drivers/net/macb.c                                 |    2 +-
 drivers/net/smc91111.c                             |    2 +-
 drivers/net/smc911x.c                              |    9 +-
 drivers/nor/cfi_flash.c                            |   31 +++--
 drivers/serial/amba-pl011.c                        |   32 +++---
 drivers/serial/atmel.c                             |   29 +++---
 drivers/serial/serial_imx.c                        |    2 +-
 drivers/serial/serial_mpc5xxx.c                    |   20 ++--
 drivers/serial/serial_netx.c                       |   34 +++---
 drivers/serial/serial_ns16550.c                    |   12 +-
 drivers/serial/serial_pl010.c                      |   15 ++-
 drivers/serial/serial_s3c24x0.c                    |   36 +++---
 drivers/serial/stm-serial.c                        |   44 ++++----
 drivers/spi/imx_spi.c                              |    2 +-
 drivers/usb/gadget/fsl_udc.c                       |    2 +-
 drivers/usb/host/ehci-hcd.c                        |    9 +-
 drivers/video/fb.c                                 |    4 +-
 drivers/video/imx-ipu-fb.c                         |    2 +-
 drivers/video/imx.c                                |    2 +-
 fs/devfs.c                                         |    2 +-
 fs/fs.c                                            |   14 ++-
 include/driver.h                                   |   48 ++++++--
 include/linux/ioport.h                             |  115 +++++++++++++++++++
 lib/driver.c                                       |    7 +-
 91 files changed, 1946 insertions(+), 871 deletions(-)
 create mode 100644 include/linux/ioport.h

Best Regards,
J.

_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

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

* [PATCH 1/5] device: introduce resource structure to simplify resource delaration
  2010-11-12 18:02 [To test] [PATCH 0/5] device: introduce resource structure Jean-Christophe PLAGNIOL-VILLARD
@ 2010-11-12 18:18 ` Jean-Christophe PLAGNIOL-VILLARD
  2010-11-19  8:00   ` Sascha Hauer
  2011-01-27  8:20   ` Sascha Hauer
  2010-11-12 18:18 ` [PATCH 2/5] mem: add multiple resource support Jean-Christophe PLAGNIOL-VILLARD
                   ` (6 subsequent siblings)
  7 siblings, 2 replies; 22+ messages in thread
From: Jean-Christophe PLAGNIOL-VILLARD @ 2010-11-12 18:18 UTC (permalink / raw)
  To: barebox

introdude also some helper to manager them

and add multi resource per device support

ram device: use resource structure instead of memory_platform_data

Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
---
 Documentation/porting.txt                          |   11 ++-
 arch/arm/boards/a9m2410/a9m2410.c                  |   61 ++++++++---
 arch/arm/boards/a9m2440/a9m2440.c                  |   48 ++++++--
 arch/arm/boards/at91sam9261ek/init.c               |   11 ++-
 arch/arm/boards/at91sam9263ek/init.c               |   11 ++-
 arch/arm/boards/chumby_falconwing/falconwing.c     |   37 +++++--
 arch/arm/boards/edb93xx/edb93xx.c                  |   82 +++++++++-----
 arch/arm/boards/eukrea_cpuimx25/eukrea_cpuimx25.c  |   37 +++++--
 arch/arm/boards/eukrea_cpuimx27/eukrea_cpuimx27.c  |   74 ++++++++++---
 arch/arm/boards/eukrea_cpuimx35/eukrea_cpuimx35.c  |   37 +++++--
 arch/arm/boards/freescale-mx23-evk/mx23-evk.c      |   28 ++++--
 arch/arm/boards/freescale-mx25-3-stack/3stack.c    |   53 ++++++----
 arch/arm/boards/freescale-mx35-3-stack/3stack.c    |   46 ++++++--
 arch/arm/boards/freescale-mx51-pdk/board.c         |   15 ++-
 arch/arm/boards/guf-cupid/board.c                  |   64 +++++++++---
 arch/arm/boards/guf-neso/board.c                   |   26 +++--
 arch/arm/boards/imx21ads/imx21ads.c                |   36 +++++--
 arch/arm/boards/imx27ads/imx27ads.c                |   26 +++--
 arch/arm/boards/mmccpu/init.c                      |   11 ++-
 arch/arm/boards/netx/netx.c                        |   37 +++++--
 arch/arm/boards/nhk8815/setup.c                    |   11 ++-
 arch/arm/boards/omap/board-beagle.c                |   46 ++++++--
 arch/arm/boards/omap/board-omap3evm.c              |   34 ++++--
 arch/arm/boards/omap/board-sdp343x.c               |   26 +++--
 arch/arm/boards/omap/devices-gpmc-nand.c           |   11 ++-
 arch/arm/boards/pcm037/pcm037.c                    |   89 +++++++++++-----
 arch/arm/boards/pcm038/pcm038.c                    |   52 ++++++---
 arch/arm/boards/pcm043/pcm043.c                    |   26 +++--
 arch/arm/boards/phycard-i.MX27/pca100.c            |   37 +++++--
 arch/arm/boards/pm9261/init.c                      |   22 +++-
 arch/arm/boards/pm9263/init.c                      |   11 ++-
 arch/arm/boards/scb9328/scb9328.c                  |   49 ++++++---
 arch/arm/lib/armlinux.c                            |    4 +-
 arch/arm/mach-at91/at91sam9260_devices.c           |  114 +++++++++++++++----
 arch/arm/mach-at91/at91sam9261_devices.c           |   70 +++++++++---
 arch/arm/mach-at91/at91sam9263_devices.c           |   81 +++++++++++---
 arch/arm/mach-at91/at91sam9g45_devices.c           |   92 ++++++++++++----
 arch/arm/mach-imx/devices.c                        |    4 +-
 arch/arm/mach-imx/iim.c                            |   17 ++-
 arch/arm/mach-imx/imx25.c                          |   42 ++++++--
 arch/arm/mach-nomadik/8815.c                       |   37 +++++--
 arch/blackfin/boards/ipe337/ipe337.c               |   48 ++++++--
 arch/m68k/boards/kp_ukd_r1_num/kp_ukd_r1_num.c     |  102 +++++++++++++-----
 arch/m68k/boards/phycore_mcf54xx/phyCore_MCF54xx.c |   72 +++++++++----
 arch/ppc/boards/pcm030/pcm030.c                    |   61 ++++++++---
 arch/sandbox/board/hostfile.c                      |    4 +-
 arch/sandbox/mach-sandbox/include/mach/hostfile.h  |   10 ++-
 arch/sandbox/os/common.c                           |    4 +-
 arch/x86/boards/x86_generic/generic_pc.c           |   32 ++++--
 commands/mem.c                                     |   21 ++--
 common/startup.c                                   |   13 ++-
 drivers/ata/bios.c                                 |    4 +-
 drivers/ata/disk_drive.c                           |   13 ++-
 drivers/i2c/busses/i2c-imx.c                       |   22 ++--
 drivers/i2c/busses/i2c-omap.c                      |    4 +-
 drivers/mci/imx-esdhc.c                            |    2 +-
 drivers/mci/imx.c                                  |    3 +-
 drivers/mci/mci-core.c                             |    4 +-
 drivers/mci/s3c.c                                  |  106 ++++++++++--------
 drivers/mci/stm378x.c                              |   79 ++++++++------
 drivers/mtd/nand/atmel_nand.c                      |    2 +-
 drivers/mtd/nand/nand_imx.c                        |    2 +-
 drivers/mtd/nand/nand_omap_gpmc.c                  |   13 ++-
 drivers/mtd/nand/nand_s3c2410.c                    |    4 +-
 drivers/net/cs8900.c                               |    2 +-
 drivers/net/fec_imx.c                              |    2 +-
 drivers/net/fec_mpc5200.c                          |    2 +-
 drivers/net/macb.c                                 |    2 +-
 drivers/net/smc91111.c                             |    2 +-
 drivers/net/smc911x.c                              |    9 +-
 drivers/nor/cfi_flash.c                            |   31 +++---
 drivers/serial/amba-pl011.c                        |   32 +++---
 drivers/serial/atmel.c                             |   29 +++---
 drivers/serial/serial_imx.c                        |    2 +-
 drivers/serial/serial_mpc5xxx.c                    |   20 ++--
 drivers/serial/serial_netx.c                       |   34 +++---
 drivers/serial/serial_ns16550.c                    |   12 +-
 drivers/serial/serial_pl010.c                      |   15 ++-
 drivers/serial/serial_s3c24x0.c                    |   36 +++---
 drivers/serial/stm-serial.c                        |   44 ++++----
 drivers/spi/imx_spi.c                              |    2 +-
 drivers/usb/gadget/fsl_udc.c                       |    2 +-
 drivers/usb/host/ehci-hcd.c                        |    9 +-
 drivers/video/fb.c                                 |    4 +-
 drivers/video/imx-ipu-fb.c                         |    2 +-
 drivers/video/imx.c                                |    2 +-
 fs/devfs.c                                         |    2 +-
 fs/fs.c                                            |   14 ++-
 include/driver.h                                   |   48 +++++++--
 include/linux/ioport.h                             |  115 ++++++++++++++++++++
 lib/driver.c                                       |    7 +-
 91 files changed, 1931 insertions(+), 801 deletions(-)
 create mode 100644 include/linux/ioport.h

diff --git a/Documentation/porting.txt b/Documentation/porting.txt
index ccfe598..abf9089 100644
--- a/Documentation/porting.txt
+++ b/Documentation/porting.txt
@@ -32,10 +32,17 @@ extra-y += barebox.lds
   To see anything you have to at least register a console. In scb9328.c this
   looks like this:
 
+	static struct resource scb9328_serial_resources[] = {
+		[0] = {
+			.start	= IMX_UART1_BASE,
+			.size	= 4096,
+		},
+}	;
+
 	static struct device_d scb9328_serial_device = {
 		.name     = "imx_serial",
-		.map_base = IMX_UART1_BASE,
-		.size     = 4096,
+		.num_resources	= ARRAY_SIZE(scb9328_serial_resources),
+		.resource	= scb9328_serial_resources,
 	};
 
 	static int scb9328_console_init(void)
diff --git a/arch/arm/boards/a9m2410/a9m2410.c b/arch/arm/boards/a9m2410/a9m2410.c
index 57d8fa3..c1bd307 100644
--- a/arch/arm/boards/a9m2410/a9m2410.c
+++ b/arch/arm/boards/a9m2410/a9m2410.c
@@ -35,16 +35,19 @@
 #include <mach/s3c24x0-iomap.h>
 #include <mach/s3c24x0-nand.h>
 
-static struct memory_platform_data ram_pdata = {
-	.name		= "ram0",
-	.flags		= DEVFS_RDWR,
+static struct resource sdram_dev_resources[] = {
+	[0] = {
+		.name	= "ram0",
+		.start	= CS6_BASE,
+		.flags	= DEVFS_RDWR,
+	},
 };
 
 static struct device_d sdram_dev = {
 	.id		= -1,
 	.name     	= "ram",
-	.map_base	= CS6_BASE,
-	.platform_data  = &ram_pdata,
+	.num_resources	= ARRAY_SIZE(sdram_dev_resources),
+	.resource	= sdram_dev_resources,
 };
 
 // {"NAND 1MiB 3,3V 8-bit", 0xec, 256, 1, 0x1000, 0},
@@ -52,10 +55,17 @@ static struct s3c24x0_nand_platform_data nand_info = {
 	.nand_timing = CALC_NFCONF_TIMING(A9M2410_TACLS, A9M2410_TWRPH0, A9M2410_TWRPH1)
 };
 
+static struct resource nand_dev_resources[] = {
+	[0] = {
+		.start = S3C24X0_NAND_BASE,
+	},
+};
+
 static struct device_d nand_dev = {
 	.id	  = -1,
 	.name     = "s3c24x0_nand",
-	.map_base = S3C24X0_NAND_BASE,
+	.num_resources	= ARRAY_SIZE(nand_dev_resources),
+	.resource	= nand_dev_resources,
 	.platform_data	= &nand_info,
 };
 
@@ -64,11 +74,18 @@ static struct device_d nand_dev = {
  * connected to CS line 1 and interrupt line
  * GPIO3, data width is 32 bit
  */
+static struct resource network_dev_resources[] = {
+	[0] = {
+		.start	= CS1_BASE + 0x300,
+		.size	= 16,
+	},
+};
+
 static struct device_d network_dev = {
 	.id       = -1,
         .name     = "smc91c111",
-        .map_base = CS1_BASE + 0x300,
-        .size     = 16,
+	.num_resources	= ARRAY_SIZE(network_dev_resources),
+	.resource	= network_dev_resources,
 };
 
 static int a9m2410_devices_init(void)
@@ -83,25 +100,25 @@ static int a9m2410_devices_init(void)
 
 	switch (reg &= 0x7) {
 	case 0:
-		sdram_dev.size = 32 * 1024 * 1024;
+		dev_resource_set_size(&sdram_dev, 32 * 1024 * 1024);
 		break;
 	case 1:
-		sdram_dev.size = 64 * 1024 * 1024;
+		dev_resource_set_size(&sdram_dev, 64 * 1024 * 1024);
 		break;
 	case 2:
-		sdram_dev.size = 128 * 1024 * 1024;
+		dev_resource_set_size(&sdram_dev, 128 * 1024 * 1024);
 		break;
 	case 4:
-		sdram_dev.size = 2 * 1024 * 1024;
+		dev_resource_set_size(&sdram_dev, 2 * 1024 * 1024);
 		break;
 	case 5:
-		sdram_dev.size = 4 * 1024 * 1024;
+		dev_resource_set_size(&sdram_dev, 4 * 1024 * 1024);
 		break;
 	case 6:
-		sdram_dev.size = 8 * 1024 * 1024;
+		dev_resource_set_size(&sdram_dev, 8 * 1024 * 1024);
 		break;
 	case 7:
-		sdram_dev.size = 16 * 1024 * 1024;
+		dev_resource_set_size(&sdram_dev, 16 * 1024 * 1024);
 		break;
 	}
 
@@ -165,7 +182,8 @@ static int a9m2410_devices_init(void)
 #endif
 
 	armlinux_add_dram(&sdram_dev);
-	armlinux_set_bootparams((void *)sdram_dev.map_base + 0x100);
+
+	armlinux_set_bootparams((void *)dev_resource_get_start(&sdram_dev) + 0x100);
 	armlinux_set_architecture(MACH_TYPE_A9M2410);
 
 	return 0;
@@ -180,11 +198,18 @@ void __bare_init nand_boot(void)
 }
 #endif
 
+static struct resource a9m2410_serial_resources[] = {
+	[0] = {
+		.start	= UART1_BASE,
+		.size	= UART1_SIZE,
+	},
+};
+
 static struct device_d a9m2410_serial_device = {
 	.id       = -1,
 	.name     = "s3c24x0_serial",
-	.map_base = UART1_BASE,
-	.size     = UART1_SIZE,
+	.num_resources	= ARRAY_SIZE(a9m2410_serial_resources),
+	.resource	= a9m2410_serial_resources,
 };
 
 static int a9m2410_console_init(void)
diff --git a/arch/arm/boards/a9m2440/a9m2440.c b/arch/arm/boards/a9m2440/a9m2440.c
index 764cd65..47a120d 100644
--- a/arch/arm/boards/a9m2440/a9m2440.c
+++ b/arch/arm/boards/a9m2440/a9m2440.c
@@ -38,26 +38,36 @@
 
 #include "baseboards.h"
 
-static struct memory_platform_data ram_pdata = {
-	.name		= "ram0",
-	.flags		= DEVFS_RDWR,
+static struct resource sdram_dev_resources[] = {
+	[0] = {
+		.name	= "ram0",
+		.start	= CS6_BASE,
+		.flags	= DEVFS_RDWR,
+	},
 };
 
 static struct device_d sdram_dev = {
 	.id		= -1,
 	.name		= "mem",
-	.map_base	= CS6_BASE,
-	.platform_data	= &ram_pdata,
+	.num_resources	= ARRAY_SIZE(sdram_dev_resources),
+	.resource	= sdram_dev_resources,
 };
 
 static struct s3c24x0_nand_platform_data nand_info = {
 	.nand_timing = CALC_NFCONF_TIMING(A9M2440_TACLS, A9M2440_TWRPH0, A9M2440_TWRPH1)
 };
 
+static struct resource nand_dev_resources[] = {
+	[0] = {
+		.start	= S3C24X0_NAND_BASE,
+	},
+};
+
 static struct device_d nand_dev = {
 	.id	  = -1,
 	.name     = "s3c24x0_nand",
-	.map_base = S3C24X0_NAND_BASE,
+	.num_resources	= ARRAY_SIZE(nand_dev_resources),
+	.resource	= nand_dev_resources,
 	.platform_data	= &nand_info,
 };
 
@@ -66,11 +76,18 @@ static struct device_d nand_dev = {
  * Connected to CS line 5 + A24 and interrupt line EINT9,
  * data width is 16 bit
  */
+static struct resource network_dev_resources[] = {
+	[0] = {
+		.start	= CS5_BASE + (1 << 24) + 0x300,
+		.size	= 16,
+	},
+};
+
 static struct device_d network_dev = {
 	.id	  = -1,
 	.name     = "cs8900",
-	.map_base = CS5_BASE + (1 << 24) + 0x300,
-	.size     = 16,
+	.num_resources	= ARRAY_SIZE(network_dev_resources),
+	.resource	= network_dev_resources,
 };
 
 static int a9m2440_check_for_ram(uint32_t addr)
@@ -136,7 +153,7 @@ static int a9m2440_devices_init(void)
 		break;
 	}
 
-	sdram_dev.size = s3c24x0_get_memory_size();
+	dev_resource_set_size(&sdram_dev, s3c24x0_get_memory_size());
 
 	/* ----------- configure the access to the outer space ---------- */
 	reg = readl(BWSCON);
@@ -171,7 +188,7 @@ static int a9m2440_devices_init(void)
 	dev_add_bb_dev("env_raw", "env0");
 #endif
 	armlinux_add_dram(&sdram_dev);
-	armlinux_set_bootparams((void *)sdram_dev.map_base + 0x100);
+	armlinux_set_bootparams((void *)dev_resource_get_start(&sdram_dev) + 0x100);
 	armlinux_set_architecture(MACH_TYPE_A9M2440);
 
 	return 0;
@@ -186,11 +203,18 @@ void __bare_init nand_boot(void)
 }
 #endif
 
+static struct resource a9m2440_serial_resources[] = {
+	[0] = {
+		.start	= UART1_BASE,
+		.size	= UART1_SIZE,
+	},
+};
+
 static struct device_d a9m2440_serial_device = {
 	.id	  = -1,
 	.name     = "s3c24x0_serial",
-	.map_base = UART1_BASE,
-	.size     = UART1_SIZE,
+	.num_resources	= ARRAY_SIZE(a9m2440_serial_resources),
+	.resource	= a9m2440_serial_resources,
 };
 
 static int a9m2440_console_init(void)
diff --git a/arch/arm/boards/at91sam9261ek/init.c b/arch/arm/boards/at91sam9261ek/init.c
index 576a022..31f18ec 100644
--- a/arch/arm/boards/at91sam9261ek/init.c
+++ b/arch/arm/boards/at91sam9261ek/init.c
@@ -88,6 +88,13 @@ static void ek_add_device_nand(void)
  * DM9000 ethernet device
  */
 #if defined(CONFIG_DRIVER_NET_DM9000)
+static struct resource dm9000_dev_resources[] = {
+	[0] = {
+		.start	= AT91_CHIPSELECT_2,
+		.size	= 8,
+	},
+};
+
 static struct dm9000_platform_data dm9000_data = {
 	.iobase		= AT91_CHIPSELECT_2,
 	.iodata		= AT91_CHIPSELECT_2 + 4,
@@ -98,8 +105,8 @@ static struct dm9000_platform_data dm9000_data = {
 static struct device_d dm9000_dev = {
 	.id		= 0,
 	.name		= "dm9000",
-	.map_base	= AT91_CHIPSELECT_2,
-	.size		= 8,
+	.num_resources	= ARRAY_SIZE(dm9000_dev_resources),
+	.resource	= dm9000_dev_resources,
 	.platform_data	= &dm9000_data,
 };
 
diff --git a/arch/arm/boards/at91sam9263ek/init.c b/arch/arm/boards/at91sam9263ek/init.c
index 8448866..66172c4 100644
--- a/arch/arm/boards/at91sam9263ek/init.c
+++ b/arch/arm/boards/at91sam9263ek/init.c
@@ -87,11 +87,18 @@ static void ek_add_device_nand(void)
 	at91_add_device_nand(&nand_pdata);
 }
 
+static struct resource cfi_dev_resources[] = {
+	[0] = {
+		.start	= AT91_CHIPSELECT_0,
+		.size	= 8 * 1024 * 1024,
+	},
+};
+
 static struct device_d cfi_dev = {
 	.id		= -1,
 	.name		= "cfi_flash",
-	.map_base	= AT91_CHIPSELECT_0,
-	.size		= 8 * 1024 * 1024,
+	.num_resources	= ARRAY_SIZE(cfi_dev_resources),
+	.resource	= cfi_dev_resources,
 };
 
 static struct at91_ether_platform_data macb_pdata = {
diff --git a/arch/arm/boards/chumby_falconwing/falconwing.c b/arch/arm/boards/chumby_falconwing/falconwing.c
index 952a384..8daec47 100644
--- a/arch/arm/boards/chumby_falconwing/falconwing.c
+++ b/arch/arm/boards/chumby_falconwing/falconwing.c
@@ -29,16 +29,19 @@
 #include <mach/clock.h>
 #include <mach/mci.h>
 
-static struct memory_platform_data ram_pdata = {
-	.name = "ram0",
-	.flags = DEVFS_RDWR,
+static struct resource sdram_dev_resources[] = {
+	[0] = {
+		.name	= "ram0",
+		.start	= IMX_MEMORY_BASE,
+		.size	= 64 * 1024 * 1024,
+		.flags	= DEVFS_RDWR,
+	},
 };
 
 static struct device_d sdram_dev = {
 	.name     = "mem",
-	.map_base = IMX_MEMORY_BASE,
-	.size     = 64 * 1024 * 1024,
-	.platform_data = &ram_pdata,
+	.num_resources	= ARRAY_SIZE(sdram_dev_resources),
+	.resource	= sdram_dev_resources,
 };
 
 static struct stm_mci_platform_data mci_pdata = {
@@ -46,9 +49,16 @@ static struct stm_mci_platform_data mci_pdata = {
 	.voltages = MMC_VDD_32_33 | MMC_VDD_33_34,	/* fixed to 3.3 V */
 };
 
+static struct resource mci_dev_resources[] = {
+	[0] = {
+		.start	= IMX_SSP1_BASE,
+	},
+};
+
 static struct device_d mci_dev = {
 	.name     = "stm_mci",
-	.map_base = IMX_SSP1_BASE,
+	.num_resources	= ARRAY_SIZE(mci_dev_resources),
+	.resource	= mci_dev_resources,
 	.platform_data = &mci_pdata,
 };
 
@@ -271,7 +281,7 @@ static int falconwing_devices_init(void)
 	register_device(&mci_dev);
 
 	armlinux_add_dram(&sdram_dev);
-	armlinux_set_bootparams((void*)(sdram_dev.map_base + 0x100));
+	armlinux_set_bootparams((void*)(dev_resource_get_start(&sdram_dev) + 0x100));
 	armlinux_set_architecture(MACH_TYPE_CHUMBY);
 
 	rc = register_persistant_environment();
@@ -283,10 +293,17 @@ static int falconwing_devices_init(void)
 
 device_initcall(falconwing_devices_init);
 
+static struct resource falconwing_serial_resources[] = {
+	[0] = {
+		.start	= IMX_DBGUART_BASE,
+		.size	= 8192,
+	},
+};
+
 static struct device_d falconwing_serial_device = {
 	.name     = "stm_serial",
-	.map_base = IMX_DBGUART_BASE,
-	.size     = 8192,
+	.num_resources	= ARRAY_SIZE(falconwing_serial_resources),
+	.resource	= falconwing_serial_resources,
 };
 
 static int falconwing_console_init(void)
diff --git a/arch/arm/boards/edb93xx/edb93xx.c b/arch/arm/boards/edb93xx/edb93xx.c
index 0f127b5..36cbb51 100644
--- a/arch/arm/boards/edb93xx/edb93xx.c
+++ b/arch/arm/boards/edb93xx/edb93xx.c
@@ -38,68 +38,87 @@
  * Up to 32MiB NOR type flash, connected to
  * CS line 6, data width is 16 bit
  */
+static struct resource cfi_dev_resources[] = {
+	[0] = {
+		.start	= 0x60000000,
+		.size	= EDB93XX_CFI_FLASH_SIZE,
+	},
+};
+
 static struct device_d cfi_dev = {
 	.id	  = -1,
 	.name     = "cfi_flash",
-	.map_base = 0x60000000,
-	.size     = EDB93XX_CFI_FLASH_SIZE,
+	.num_resources	= ARRAY_SIZE(cfi_dev_resources),
+	.resource	= cfi_dev_resources,
 };
 
-static struct memory_platform_data ram_dev_pdata0 = {
-	.name = "ram0",
-	.flags = DEVFS_RDWR,
+static struct resource sdram0_dev_resources[] = {
+	[0] = {
+		.name	= "ram0",
+		.start	= CONFIG_EP93XX_SDRAM_BANK0_BASE,
+		.size	= CONFIG_EP93XX_SDRAM_BANK0_SIZE,
+		.flags = DEVFS_RDWR,
+	},
 };
 
 static struct device_d sdram0_dev = {
 	.id	  = -1,
 	.name     = "mem",
-	.map_base = CONFIG_EP93XX_SDRAM_BANK0_BASE,
-	.size     = CONFIG_EP93XX_SDRAM_BANK0_SIZE,
-	.platform_data = &ram_dev_pdata0,
+	.num_resources	= ARRAY_SIZE(sdram0_dev_resources),
+	.resource	= sdram0_dev_resources,
 };
 
 #if (CONFIG_EP93XX_SDRAM_NUM_BANKS >= 2)
-static struct memory_platform_data ram_dev_pdata1 = {
-	.name = "ram1",
-	.flags = DEVFS_RDWR,
+static struct resource sdram1_dev_resources[] = {
+	[0] = {
+		.name	= "ram1",
+		.start	= CONFIG_EP93XX_SDRAM_BANK1_BASE,
+		.size	= CONFIG_EP93XX_SDRAM_BANK1_SIZE,
+		.flags	= DEVFS_RDWR,
+	},
 };
 
 static struct device_d sdram1_dev = {
 	.id	  = -1,
 	.name     = "mem",
-	.map_base = CONFIG_EP93XX_SDRAM_BANK1_BASE,
-	.size     = CONFIG_EP93XX_SDRAM_BANK1_SIZE,
-	.platform_data = &ram_dev_pdata1,
+	.num_resources	= ARRAY_SIZE(sdram1_dev_resources),
+	.resource	= sdram1_dev_resources,
 };
 #endif
 
 #if (CONFIG_EP93XX_SDRAM_NUM_BANKS >= 3)
-static struct memory_platform_data ram_dev_pdata2 = {
-	.name = "ram2",
-	.flags = DEVFS_RDWR,
+static struct resource sdram2_dev_resources[] = {
+	[0] = {
+		.name	= "ram2",
+		.start	= CONFIG_EP93XX_SDRAM_BANK2_BASE,
+		.size	= CONFIG_EP93XX_SDRAM_BANK2_SIZE,
+		.flags	= DEVFS_RDWR,
+	},
 };
 
 static struct device_d sdram2_dev = {
 	.id	  = -1,
 	.name     = "mem",
-	.map_base = CONFIG_EP93XX_SDRAM_BANK2_BASE,
-	.size     = CONFIG_EP93XX_SDRAM_BANK2_SIZE,
-	.platform_data = &ram_dev_pdata2,
+	.num_resources	= ARRAY_SIZE(sdram2_dev_resources),
+	.resource	= sdram2_dev_resources,
 };
 #endif
 
 #if (CONFIG_EP93XX_SDRAM_NUM_BANKS == 4)
-static struct memory_platform_data ram_dev_pdata3 = {
-	.name = "ram3",
-	.flags = DEVFS_RDWR,
+static struct resource sdram3_dev_resources[] = {
+	[0] = {
+		.name	= "ram3",
+		.start	= CONFIG_EP93XX_SDRAM_BANK3_BASE,
+		.size	= CONFIG_EP93XX_SDRAM_BANK3_SIZE,
+		.flags	= DEVFS_RDWR,
+	},
 };
 
 static struct device_d sdram3_dev = {
 	.id	  = -1,
 	.name     = "mem",
-	.map_base = CONFIG_EP93XX_SDRAM_BANK3_BASE,
-	.size     = CONFIG_EP93XX_SDRAM_BANK3_SIZE,
-	.platform_data = &ram_dev_pdata3,
+	.num_resources	= ARRAY_SIZE(sdram3_dev_resources),
+	.resource	= sdram3_dev_resources,
 };
 #endif
 
@@ -154,11 +173,18 @@ static int ep93xx_devices_init(void)
 
 device_initcall(ep93xx_devices_init);
 
+static struct resource edb93xx_serial_resources[] = {
+	[0] = {
+		.start	= UART1_BASE,
+		.size	= 4096,
+	},
+};
+
 static struct device_d edb93xx_serial_device = {
 	.id	  = -1,
 	.name     = "pl010_serial",
-	.map_base = UART1_BASE,
-	.size     = 4096,
+	.num_resources	= ARRAY_SIZE(edb93xx_serial_resources),
+	.resource	= edb93xx_serial_resources,
 };
 
 static int edb93xx_console_init(void)
diff --git a/arch/arm/boards/eukrea_cpuimx25/eukrea_cpuimx25.c b/arch/arm/boards/eukrea_cpuimx25/eukrea_cpuimx25.c
index 3048c3f..1c5c31d 100644
--- a/arch/arm/boards/eukrea_cpuimx25/eukrea_cpuimx25.c
+++ b/arch/arm/boards/eukrea_cpuimx25/eukrea_cpuimx25.c
@@ -89,17 +89,20 @@ static struct fec_platform_data fec_info = {
 	.phy_addr	= 1,
 };
 
-static struct memory_platform_data sdram_pdata = {
-	.name	= "ram0",
-	.flags	= DEVFS_RDWR,
+static struct resource sdram0_dev_resources[] = {
+	[0] = {
+		.name	= "ram0",
+		.start	= IMX_SDRAM_CS0,
+		.size	= 64 * 1024 * 1024,
+		.flags	= DEVFS_RDWR,
+	},
 };
 
 static struct device_d sdram0_dev = {
 	.id	  = -1,
 	.name     = "mem",
-	.map_base = IMX_SDRAM_CS0,
-	.size     = 64 * 1024 * 1024,
-	.platform_data = &sdram_pdata,
+	.num_resources	= ARRAY_SIZE(sdram0_dev_resources),
+	.resource	= sdram0_dev_resources,
 };
 
 struct imx_nand_platform_data nand_info = {
@@ -155,14 +158,28 @@ static void imx25_usb_init(void)
 	writel(tmp | 0x3, IMX_OTG_BASE + 0x5a8);
 }
 
+static struct resource usbh2_dev_resources[] = {
+	[0] = {
+		.start	= IMX_OTG_BASE + 0x400,
+		.size	= 0x200,
+	},
+};
+
 static struct device_d usbh2_dev = {
 	.id	  = -1,
 	.name     = "ehci",
-	.map_base = IMX_OTG_BASE + 0x400,
-	.size     = 0x200,
+	.num_resources	= ARRAY_SIZE(usbh2_dev_resources),
+	.resource	= usbh2_dev_resources,
 };
 #endif
 
+static struct resource usbotg_dev_resources[] = {
+	[0] = {
+		.start	= IMX_OTG_BASE,
+		.size	= 0x200,
+	},
+};
+
 static struct fsl_usb2_platform_data usb_pdata = {
 	.operating_mode	= FSL_USB2_DR_DEVICE,
 	.phy_mode	= FSL_USB2_PHY_UTMI,
@@ -170,8 +187,8 @@ static struct fsl_usb2_platform_data usb_pdata = {
 
 static struct device_d usbotg_dev = {
 	.name     = "fsl-udc",
-	.map_base = IMX_OTG_BASE,
-	.size     = 0x200,
+	.num_resources	= ARRAY_SIZE(usbotg_dev_resources),
+	.resource	= usbotg_dev_resources,
 	.platform_data = &usb_pdata,
 };
 
diff --git a/arch/arm/boards/eukrea_cpuimx27/eukrea_cpuimx27.c b/arch/arm/boards/eukrea_cpuimx27/eukrea_cpuimx27.c
index 4567cba..598fc37 100644
--- a/arch/arm/boards/eukrea_cpuimx27/eukrea_cpuimx27.c
+++ b/arch/arm/boards/eukrea_cpuimx27/eukrea_cpuimx27.c
@@ -48,38 +48,55 @@
 #include <mach/iomux-mx27.h>
 #include <mach/devices-imx27.h>
 
+static struct resource cfi_dev_resources[] = {
+	[0] = {
+		.start	= 0xC0000000,
+		.size	= 32 * 1024 * 1024,
+	},
+};
+
 static struct device_d cfi_dev = {
 	.id	  = -1,
 	.name     = "cfi_flash",
-	.map_base = 0xC0000000,
-	.size     = 32 * 1024 * 1024,
+	.num_resources	= ARRAY_SIZE(cfi_dev_resources),
+	.resource	= cfi_dev_resources,
 };
 #ifdef CONFIG_EUKREA_CPUIMX27_NOR_64MB
+static struct resource cfi_dev1_resources[] = {
+	[0] = {
+		.start	= 0xC2000000,
+		.size	= 32 * 1024 * 1024,
+	},
+};
+
 static struct device_d cfi_dev1 = {
 	.id	  = -1,
 	.name     = "cfi_flash",
-	.map_base = 0xC2000000,
-	.size     = 32 * 1024 * 1024,
+	.num_resources	= ARRAY_SIZE(cfi_dev1_resources),
+	.resource	= cfi_dev1_resources,
 };
 #endif
 
-static struct memory_platform_data ram_pdata = {
-	.name = "ram0",
-	.flags = DEVFS_RDWR,
-};
-
 #if defined CONFIG_EUKREA_CPUIMX27_SDRAM_256MB
 #define SDRAM0	256
 #elif defined CONFIG_EUKREA_CPUIMX27_SDRAM_128MB
 #define SDRAM0	128
 #endif
 
+static struct resource sdram_dev_resources[] = {
+	[0] = {
+		.name	= "ram0",
+		.start	= 0xa0000000,
+		.size	= SDRAM0 * 1024 * 1024,
+		.flags	= DEVFS_RDWR,
+	},
+};
+
 static struct device_d sdram_dev = {
 	.id	  = -1,
 	.name     = "mem",
-	.map_base = 0xa0000000,
-	.size     = SDRAM0 * 1024 * 1024,
-	.platform_data = &ram_pdata,
+	.num_resources	= ARRAY_SIZE(sdram_dev_resources),
+	.resource	= sdram_dev_resources,
 };
 
 static struct fec_platform_data fec_info = {
@@ -128,11 +145,18 @@ static struct NS16550_plat quad_uart_serial_plat = {
 #define QUART_OFFSET 0x1000000
 #endif
 
+static struct resource quad_uart_serial_resources[] = {
+	[0] = {
+		.start	= IMX_CS3_BASE + QUART_OFFSET,
+		.size	= 0xF,
+	},
+};
+
 static struct device_d quad_uart_serial_device = {
 	.id = -1,
 	.name = "serial_ns16550",
-	.map_base = IMX_CS3_BASE + QUART_OFFSET,
-	.size = 0xF,
+	.num_resources	= ARRAY_SIZE(quad_uart_serial_resources),
+	.resource	= quad_uart_serial_resources,
 	.platform_data = (void *)&quad_uart_serial_plat,
 };
 #endif
@@ -191,11 +215,18 @@ static struct imx_fb_platform_data eukrea_cpuimx27_fb_data = {
 	.dmacr	= 0x00020010,
 };
 
+static struct resource imxfb_dev_resources[] = {
+	[0] = {
+		.start	= 0x10021000,
+		.size	= 0x00001000,
+	},
+};
+
 static struct device_d imxfb_dev = {
 	.id		= -1,
 	.name		= "imxfb",
-	.map_base	= 0x10021000,
-	.size		= 0x1000,
+	.num_resources	= ARRAY_SIZE(imxfb_dev_resources),
+	.resource	= imxfb_dev_resources,
 	.platform_data	= &eukrea_cpuimx27_fb_data,
 };
 #endif
@@ -307,11 +338,18 @@ static int eukrea_cpuimx27_devices_init(void)
 device_initcall(eukrea_cpuimx27_devices_init);
 
 #ifdef CONFIG_DRIVER_SERIAL_IMX
+static struct resource eukrea_cpuimx27_serial_resources[] = {
+	[0] = {
+		.start	= IMX_UART1_BASE,
+		.size	= 4096,
+	},
+};
+
 static struct device_d eukrea_cpuimx27_serial_device = {
 	.id	  = -1,
 	.name     = "imx_serial",
-	.map_base = IMX_UART1_BASE,
-	.size     = 4096,
+	.num_resources	= ARRAY_SIZE(eukrea_cpuimx27_serial_resources),
+	.resource	= eukrea_cpuimx27_serial_resources,
 };
 #endif
 
diff --git a/arch/arm/boards/eukrea_cpuimx35/eukrea_cpuimx35.c b/arch/arm/boards/eukrea_cpuimx35/eukrea_cpuimx35.c
index 07f320b..2e1ddd3 100644
--- a/arch/arm/boards/eukrea_cpuimx35/eukrea_cpuimx35.c
+++ b/arch/arm/boards/eukrea_cpuimx35/eukrea_cpuimx35.c
@@ -61,17 +61,20 @@ static struct fec_platform_data fec_info = {
 	.phy_addr	= 0x1F,
 };
 
-static struct memory_platform_data sdram_pdata = {
-	.name	= "ram0",
-	.flags	= DEVFS_RDWR,
+static struct resource sdram_dev_resources[] = {
+	[0] = {
+		.name	= "ram0",
+		.start	= IMX_SDRAM_CS0,
+		.size	= 128 * 1024 * 1024,
+		.flags	= DEVFS_RDWR,
+	},
 };
 
 static struct device_d sdram_dev = {
 	.id		= -1,
 	.name		= "mem",
-	.map_base	= IMX_SDRAM_CS0,
-	.size		= 128 * 1024 * 1024,
-	.platform_data	= &sdram_pdata,
+	.num_resources	= ARRAY_SIZE(sdram_dev_resources),
+	.resource	= sdram_dev_resources,
 };
 
 struct imx_nand_platform_data nand_info = {
@@ -131,14 +134,28 @@ static void imx35_usb_init(void)
 	writel(tmp | 0x3, IMX_OTG_BASE + 0x5a8);
 }
 
+static struct resource usbh2_dev_resources[] = {
+	[0] = {
+		.start	= IMX_OTG_BASE + 0x400,
+		.size	= 0x200,
+	},
+};
+
 static struct device_d usbh2_dev = {
 	.id	  = -1,
 	.name     = "ehci",
-	.map_base = IMX_OTG_BASE + 0x400,
-	.size     = 0x200,
+	.num_resources	= ARRAY_SIZE(usbh2_dev_resources),
+	.resource	= usbh2_dev_resources,
 };
 #endif
 
+static struct resource usbotg_dev_resources[] = {
+	[0] = {
+		.start	= IMX_OTG_BASE,
+		.size	= 0x200,
+	},
+};
+
 static struct fsl_usb2_platform_data usb_pdata = {
 	.operating_mode	= FSL_USB2_DR_DEVICE,
 	.phy_mode	= FSL_USB2_PHY_UTMI,
@@ -146,9 +163,9 @@ static struct fsl_usb2_platform_data usb_pdata = {
 
 static struct device_d usbotg_dev = {
 	.name     = "fsl-udc",
-	.map_base = IMX_OTG_BASE,
-	.size     = 0x200,
 	.platform_data = &usb_pdata,
+	.num_resources	= ARRAY_SIZE(usbotg_dev_resources),
+	.resource	= usbotg_dev_resources,
 };
 
 #ifdef CONFIG_MMU
diff --git a/arch/arm/boards/freescale-mx23-evk/mx23-evk.c b/arch/arm/boards/freescale-mx23-evk/mx23-evk.c
index 1ce72be..64b39b2 100644
--- a/arch/arm/boards/freescale-mx23-evk/mx23-evk.c
+++ b/arch/arm/boards/freescale-mx23-evk/mx23-evk.c
@@ -25,16 +25,19 @@
 #include <generated/mach-types.h>
 #include <mach/imx-regs.h>
 
-static struct memory_platform_data ram_pdata = {
-	.name = "ram0",
-	.flags = DEVFS_RDWR,
+static struct resource sdram_dev_resources[] = {
+	[0] = {
+		.name	= "ram0",
+		.start	= IMX_MEMORY_BASE,
+		.size	= 32 * 1024 * 1024,
+		.flags	= DEVFS_RDWR,
+	},
 };
 
 static struct device_d sdram_dev = {
 	.name     = "mem",
-	.map_base = IMX_MEMORY_BASE,
-	.size     = 32 * 1024 * 1024,
-	.platform_data = &ram_pdata,
+	.num_resources	= ARRAY_SIZE(sdram_dev_resources),
+	.resource	= sdram_dev_resources,
 };
 
 static int mx23_evk_devices_init(void)
@@ -42,7 +45,7 @@ static int mx23_evk_devices_init(void)
 	register_device(&sdram_dev);
 
 	armlinux_add_dram(&sdram_dev);
-	armlinux_set_bootparams((void*)(sdram_dev.map_base + 0x100));
+	armlinux_set_bootparams((void*)(dev_resource_get_start(&sdram_dev) + 0x100));
 	armlinux_set_architecture(MACH_TYPE_MX23EVK);
 
 	return 0;
@@ -50,10 +53,17 @@ static int mx23_evk_devices_init(void)
 
 device_initcall(mx23_evk_devices_init);
 
+static struct resource mx23_evk_serial_dev_resources[] = {
+	[0] = {
+		.start	= IMX_DBGUART_BASE,
+		.size	= 8192,
+	},
+};
+
 static struct device_d mx23_evk_serial_device = {
 	.name     = "stm_serial",
-	.map_base = IMX_DBGUART_BASE,
-	.size     = 8192,
+	.num_resources	= ARRAY_SIZE(mx23_evk_serial_dev_resources),
+	.resource	= mx23_evk_serial_dev_resources,
 };
 
 static int mx23_evk_console_init(void)
diff --git a/arch/arm/boards/freescale-mx25-3-stack/3stack.c b/arch/arm/boards/freescale-mx25-3-stack/3stack.c
index 49b7f5c..cb9ce79 100644
--- a/arch/arm/boards/freescale-mx25-3-stack/3stack.c
+++ b/arch/arm/boards/freescale-mx25-3-stack/3stack.c
@@ -113,36 +113,42 @@ static struct fec_platform_data fec_info = {
 	.phy_addr	= 1,
 };
 
-static struct memory_platform_data sdram_pdata = {
-	.name	= "ram0",
-	.flags	= DEVFS_RDWR,
-};
-
-static struct device_d sdram0_dev = {
-	.id	  = -1,
-	.name     = "mem",
-	.map_base = IMX_SDRAM_CS0,
+static struct resource sdram0_dev_resources[] = {
+	[0] = {
+		.name	= "ram0",
+		.start	= IMX_SDRAM_CS0,
 #if defined CONFIG_FREESCALE_MX25_3STACK_SDRAM_64MB_DDR2
-	.size     = 64 * 1024 * 1024,
+		.size	= 64 * 1024 * 1024,
 #elif defined CONFIG_FREESCALE_MX25_3STACK_SDRAM_128MB_MDDR
-	.size     = 128 * 1024 * 1024,
+		.size	= 128 * 1024 * 1024,
 #else
 #error "Unsupported SDRAM type"
 #endif
-	.platform_data = &sdram_pdata,
+		.flags	= DEVFS_RDWR,
+	},
 };
 
-static struct memory_platform_data sram_pdata = {
-	.name	= "sram0",
-	.flags	= DEVFS_RDWR,
+static struct device_d sdram0_dev = {
+	.id	  = -1,
+	.name     = "mem",
+	.num_resources	= ARRAY_SIZE(sdram0_dev_resources),
+	.resource	= sdram0_dev_resources,
+};
+
+static struct resource sram0_dev_resources[] = {
+	[0] = {
+		.name	= "sram0",
+		.start	= 0x78000000,
+		.size	= 128 * 1024,
+		.flags	= DEVFS_RDWR,
+	},
 };
 
 static struct device_d sram0_dev = {
 	.id	  = -1,
 	.name     = "mem",
-	.map_base = 0x78000000,
-	.size     = 128 * 1024,
-	.platform_data = &sram_pdata,
+	.num_resources	= ARRAY_SIZE(sram0_dev_resources),
+	.resource	= sram0_dev_resources,
 };
 
 struct imx_nand_platform_data nand_info = {
@@ -170,11 +176,18 @@ static void imx25_usb_init(void)
 	writel(tmp | 0x3, IMX_OTG_BASE + 0x5a8);
 }
 
+static struct resource usbh2_dev_resources[] = {
+	[0] = {
+		.start	= IMX_OTG_BASE + 0x400,
+		.size	= 0x00000200,
+	},
+};
+
 static struct device_d usbh2_dev = {
 	.id	  = -1,
 	.name     = "ehci",
-	.map_base = IMX_OTG_BASE + 0x400,
-	.size     = 0x200,
+	.num_resources	= ARRAY_SIZE(usbh2_dev_resources),
+	.resource	= usbh2_dev_resources,
 };
 #endif
 
diff --git a/arch/arm/boards/freescale-mx35-3-stack/3stack.c b/arch/arm/boards/freescale-mx35-3-stack/3stack.c
index 127bfb4..5dedbe3 100644
--- a/arch/arm/boards/freescale-mx35-3-stack/3stack.c
+++ b/arch/arm/boards/freescale-mx35-3-stack/3stack.c
@@ -59,11 +59,18 @@
 #define MX35PDK_BOARD_REV_1		0
 #define MX35PDK_BOARD_REV_2		1
 
+static struct resource cfi_dev_resources[] = {
+	[0] = {
+		.start	= IMX_CS0_BASE,
+		.size	= 64 * 1024 * 1024,
+	},
+};
+
 static struct device_d cfi_dev = {
 	.id		= -1,
 	.name		= "cfi_flash",
-	.map_base	= IMX_CS0_BASE,
-	.size		= 64 * 1024 * 1024,
+	.num_resources	= ARRAY_SIZE(cfi_dev_resources),
+	.resource	= cfi_dev_resources,
 };
 
 static struct fec_platform_data fec_info = {
@@ -71,17 +78,20 @@ static struct fec_platform_data fec_info = {
 	.phy_addr	= 0x1F,
 };
 
-static struct memory_platform_data sdram_pdata = {
-	.name	= "ram0",
-	.flags	= DEVFS_RDWR,
+static struct resource sdram_dev_resources[] = {
+	[0] = {
+		.name	= "ram0",
+		.start	= IMX_SDRAM_CS0,
+		.size	= 128 * 1024 * 1024,
+		.flags	= DEVFS_RDWR,
+	},
 };
 
 static struct device_d sdram_dev = {
 	.id		= -1,
 	.name		= "mem",
-	.map_base	= IMX_SDRAM_CS0,
-	.size		= 128 * 1024 * 1024,
-	.platform_data	= &sdram_pdata,
+	.num_resources	= ARRAY_SIZE(sdram_dev_resources),
+	.resource	= sdram_dev_resources,
 };
 
 struct imx_nand_platform_data nand_info = {
@@ -89,11 +99,18 @@ struct imx_nand_platform_data nand_info = {
 	.flash_bbt	= 1,
 };
 
+static struct resource smc911x_dev_resources[] = {
+	[0] = {
+		.start	= IMX_CS5_BASE,
+		.size	= IMX_CS5_RANGE,
+	},
+};
+
 static struct device_d smc911x_dev = {
 	.id		= -1,
 	.name		= "smc911x",
-	.map_base	= IMX_CS5_BASE,
-	.size		= IMX_CS5_RANGE,
+	.num_resources	= ARRAY_SIZE(smc911x_dev_resources),
+	.resource	= smc911x_dev_resources,
 };
 
 static struct i2c_board_info i2c_devices[] = {
@@ -104,10 +121,17 @@ static struct i2c_board_info i2c_devices[] = {
 	},
 };
 
+static struct resource i2c_dev_resources[] = {
+	[0] = {
+		.start	= IMX_I2C1_BASE,
+	},
+};
+
 static struct device_d i2c_dev = {
 	.id		= -1,
 	.name		= "i2c-imx",
-	.map_base	= IMX_I2C1_BASE,
+	.num_resources	= ARRAY_SIZE(i2c_dev_resources),
+	.resource	= i2c_dev_resources,
 };
 
 /*
diff --git a/arch/arm/boards/freescale-mx51-pdk/board.c b/arch/arm/boards/freescale-mx51-pdk/board.c
index ff779ca..158b657 100644
--- a/arch/arm/boards/freescale-mx51-pdk/board.c
+++ b/arch/arm/boards/freescale-mx51-pdk/board.c
@@ -41,17 +41,20 @@
 #include <mach/iomux-mx51.h>
 #include <mach/devices-imx51.h>
 
-static struct memory_platform_data ram_pdata = {
-	.name = "ram0",
-	.flags = DEVFS_RDWR,
+static struct resource sdram_dev_resources[] = {
+	[0] = {
+		.name	= "ram0",
+		.start	= 0x90000000,
+		.size	= 512 * 1024 * 1024,
+		.flags	= DEVFS_RDWR,
+	},
 };
 
 static struct device_d sdram_dev = {
 	.id       = -1,
 	.name     = "mem",
-	.map_base = 0x90000000,
-	.size     = 512 * 1024 * 1024,
-	.platform_data = &ram_pdata,
+	.num_resources	= ARRAY_SIZE(sdram_dev_resources),
+	.resource	= sdram_dev_resources,
 };
 
 static struct fec_platform_data fec_info = {
diff --git a/arch/arm/boards/guf-cupid/board.c b/arch/arm/boards/guf-cupid/board.c
index 6d7a99b..c62b604 100644
--- a/arch/arm/boards/guf-cupid/board.c
+++ b/arch/arm/boards/guf-cupid/board.c
@@ -48,24 +48,34 @@ static struct fec_platform_data fec_info = {
 	.xcv_type = MII100,
 };
 
+static struct resource fec_dev_resources[] = {
+	[0] = {
+		.start	= IMX_FEC_BASE,
+	},
+};
+
 static struct device_d fec_dev = {
 	.id	  = -1,
 	.name     = "fec_imx",
-	.map_base = IMX_FEC_BASE,
+	.num_resources	= ARRAY_SIZE(fec_dev_resources),
+	.resource	= fec_dev_resources,
 	.platform_data	= &fec_info,
 };
 
-static struct memory_platform_data ram_pdata = {
-	.name = "ram0",
-	.flags = DEVFS_RDWR,
+static struct resource sdram0_dev_resources[] = {
+	[0] = {
+		.name	= "ram0",
+		.start	= IMX_SDRAM_CS0,
+		.size	= 128 * 1024 * 1024,
+		.flags	= DEVFS_RDWR,
+	},
 };
 
 static struct device_d sdram0_dev = {
 	.id	  = -1,
 	.name     = "mem",
-	.map_base = IMX_SDRAM_CS0,
-	.size     = 128 * 1024 * 1024,
-	.platform_data = &ram_pdata,
+	.num_resources	= ARRAY_SIZE(sdram0_dev_resources),
+	.resource	= sdram0_dev_resources,
 };
 
 struct imx_nand_platform_data nand_info = {
@@ -74,10 +84,17 @@ struct imx_nand_platform_data nand_info = {
 	.flash_bbt = 1,
 };
 
+static struct resource nand_dev_resources[] = {
+	[0] = {
+		.start	= IMX_NFC_BASE,
+	},
+};
+
 static struct device_d nand_dev = {
 	.id	  = -1,
 	.name     = "imx_nand",
-	.map_base = IMX_NFC_BASE,
+	.num_resources	= ARRAY_SIZE(nand_dev_resources),
+	.resource	= nand_dev_resources,
 	.platform_data	= &nand_info,
 };
 
@@ -122,17 +139,31 @@ static struct imx_ipu_fb_platform_data ipu_fb_data = {
 	.enable		= cupid_fb_enable,
 };
 
+static struct resource imx_ipu_fb_dev_resources[] = {
+	[0] = {
+		.start	= 0x53fc0000,
+		.size	= 0x1000,
+	},
+};
+
 static struct device_d imx_ipu_fb_dev = {
 	.id		= -1,
 	.name		= "imx-ipu-fb",
-	.map_base	= 0x53fc0000,
-	.size		= 0x1000,
+	.num_resources	= ARRAY_SIZE(imx_ipu_fb_dev_resources),
+	.resource	= imx_ipu_fb_dev_resources,
 	.platform_data	= &ipu_fb_data,
 };
 
+static struct resource esdhc_dev_resources[] = {
+	[0] = {
+		.start	= IMX_SDHC1_BASE,
+	},
+};
+
 static struct device_d esdhc_dev = {
 	.name		= "imx-esdhc",
-	.map_base	= IMX_SDHC1_BASE,
+	.num_resources	= ARRAY_SIZE(esdhc_dev_resources),
+	.resource	= esdhc_dev_resources,
 };
 
 #ifdef CONFIG_MMU
@@ -196,11 +227,18 @@ static int cupid_devices_init(void)
 
 device_initcall(cupid_devices_init);
 
+static struct resource cupid_serial_resources[] = {
+	[0] = {
+		.start	= IMX_UART1_BASE,
+		.size	= 16 * 1024,
+	},
+};
+
 static struct device_d cupid_serial_device = {
 	.id	  = -1,
 	.name     = "imx_serial",
-	.map_base = IMX_UART1_BASE,
-	.size     = 16 * 1024,
+	.num_resources	= ARRAY_SIZE(cupid_serial_resources),
+	.resource	= cupid_serial_resources,
 };
 
 static struct pad_desc cupid_pads[] = {
diff --git a/arch/arm/boards/guf-neso/board.c b/arch/arm/boards/guf-neso/board.c
index d371dd6..5fdc1de 100644
--- a/arch/arm/boards/guf-neso/board.c
+++ b/arch/arm/boards/guf-neso/board.c
@@ -54,17 +54,20 @@
 #define LCD_POWER_GPIO (GPIO_PORTF + 18)
 #define BACKLIGHT_POWER_GPIO (GPIO_PORTE + 5)
 
-static struct memory_platform_data ram_pdata = {
-	.name = "ram0",
-	.flags = DEVFS_RDWR,
+static struct resource sdram_dev_resources[] = {
+	[0] = {
+		.name 	= "ram0",
+		.start	= 0xa0000000,
+		.size	= 128 * 1024 * 1024,
+		.flags	= DEVFS_RDWR,
+	},
 };
 
 static struct device_d sdram_dev = {
 	.id	  = -1,
 	.name     = "mem",
-	.map_base = 0xa0000000,
-	.size     = 128 * 1024 * 1024,
-	.platform_data = &ram_pdata,
+	.num_resources	= ARRAY_SIZE(sdram_dev_resources),
+	.resource	= sdram_dev_resources,
 };
 
 static struct fec_platform_data fec_info = {
@@ -128,11 +131,18 @@ static struct imx_fb_platform_data neso_fb_data = {
 
 #ifdef CONFIG_USB
 
+static struct resource usbh2_dev_resources[] = {
+	[0] = {
+		.start	= IMX_OTG_BASE + 0x400,
+		.size	= 0x200,
+	},
+};
+
 static struct device_d usbh2_dev = {
 	.id	  = -1,
 	.name     = "ehci",
-	.map_base = IMX_OTG_BASE + 0x400,
-	.size     = 0x200,
+	.num_resources	= ARRAY_SIZE(usbh2_dev_resources),
+	.resource	= usbh2_dev_resources,
 };
 
 static void neso_usbh_init(void)
diff --git a/arch/arm/boards/imx21ads/imx21ads.c b/arch/arm/boards/imx21ads/imx21ads.c
index 3942581..37768b5 100644
--- a/arch/arm/boards/imx21ads/imx21ads.c
+++ b/arch/arm/boards/imx21ads/imx21ads.c
@@ -41,24 +41,35 @@
 #define MX21ADS_IO_REG    0xCC800000
 #define MX21ADS_IO_LCDON  (1 << 9)
 
+static struct resource cfi_dev_resources[] = {
+	[0] = {
+		.start	= 0xC8000000,
+		.size	= 32 * 1024 * 1024,
+	},
+};
+
 static struct device_d cfi_dev = {
 	.id	  = -1,
 	.name     = "cfi_flash",
-	.map_base = 0xC8000000,
-	.size     = 32 * 1024 * 1024,
+	.num_resources	= ARRAY_SIZE(cfi_dev_resources),
+	.resource	= cfi_dev_resources,
 };
 
-static struct memory_platform_data ram_pdata = {
-	.name = "ram0",
-	.flags = DEVFS_RDWR,
+
+static struct resource sdram_dev_resources[] = {
+	[0] = {
+		.name	= "ram0",
+		.start	= 0xc0000000,
+		.size	= 64 * 1024 * 1024,
+		.flags	= DEVFS_RDWR,
+	},
 };
 
 static struct device_d sdram_dev = {
 	.id	  = -1,
 	.name     = "mem",
-	.map_base = 0xc0000000,
-	.size     = 64 * 1024 * 1024,
-	.platform_data = &ram_pdata,
+	.num_resources	= ARRAY_SIZE(sdram_dev_resources),
+	.resource	= sdram_dev_resources,
 };
 
 struct imx_nand_platform_data nand_info = {
@@ -66,10 +77,17 @@ struct imx_nand_platform_data nand_info = {
 	.hw_ecc = 1,
 };
 
+static struct resource cs8900_dev_resources[] = {
+	[0] = {
+		.start	= IMX_CS1_BASE,
+	},
+};
+
 static struct device_d cs8900_dev = {
 	.id	  = -1,
 	.name     = "cs8900",
-	.map_base = IMX_CS1_BASE,
+	.num_resources	= ARRAY_SIZE(cs8900_dev_resources),
+	.resource	= cs8900_dev_resources,
 	// IRQ is connected to UART3_RTS
 };
 
diff --git a/arch/arm/boards/imx27ads/imx27ads.c b/arch/arm/boards/imx27ads/imx27ads.c
index 0d433c1..2b3572a 100644
--- a/arch/arm/boards/imx27ads/imx27ads.c
+++ b/arch/arm/boards/imx27ads/imx27ads.c
@@ -34,24 +34,34 @@
 #include <mach/iomux-mx27.h>
 #include <mach/devices-imx27.h>
 
+static struct resource cfi_dev_resources[] = {
+	[0] = {
+		.start	= 0xC0000000,
+		.size	= 32 * 1024 * 1024,
+	},
+};
+
 static struct device_d cfi_dev = {
 	.id	  = -1,
 	.name     = "cfi_flash",
-	.map_base = 0xC0000000,
-	.size     = 32 * 1024 * 1024,
+	.num_resources	= ARRAY_SIZE(cfi_dev_resources),
+	.resource	= cfi_dev_resources,
 };
 
-static struct memory_platform_data ram_pdata = {
-	.name = "ram0",
-	.flags = DEVFS_RDWR,
+static struct resource sdram_dev_resources[] = {
+	[0] = {
+		.name	= "ram0",
+		.start	= 0xa0000000,
+		.size	= 128 * 1024 * 1024,
+		.flags	= DEVFS_RDWR,
+	},
 };
 
 static struct device_d sdram_dev = {
 	.id	  = -1,
 	.name     = "mem",
-	.map_base = 0xa0000000,
-	.size     = 128 * 1024 * 1024,
-	.platform_data = &ram_pdata,
+	.num_resources	= ARRAY_SIZE(sdram_dev_resources),
+	.resource	= sdram_dev_resources,
 };
 
 static struct fec_platform_data fec_info = {
diff --git a/arch/arm/boards/mmccpu/init.c b/arch/arm/boards/mmccpu/init.c
index 7cba01c..8d18f7c 100644
--- a/arch/arm/boards/mmccpu/init.c
+++ b/arch/arm/boards/mmccpu/init.c
@@ -37,11 +37,18 @@
 #include <mach/gpio.h>
 #include <mach/io.h>
 
+static struct resource cfi_dev_resources[] = {
+	[0] = {
+		.start	= AT91_CHIPSELECT_0,
+		.size	= 0,	/* zero means autodetect size */
+	},
+};
+
 static struct device_d cfi_dev = {
 	.id		= -1,
 	.name		= "cfi_flash",
-	.map_base	= AT91_CHIPSELECT_0,
-	.size		= 0,	/* zero means autodetect size */
+	.num_resources	= ARRAY_SIZE(cfi_dev_resources),
+	.resource	= cfi_dev_resources,
 };
 
 static struct at91_ether_platform_data macb_pdata = {
diff --git a/arch/arm/boards/netx/netx.c b/arch/arm/boards/netx/netx.c
index c735d26..5f7e58a 100644
--- a/arch/arm/boards/netx/netx.c
+++ b/arch/arm/boards/netx/netx.c
@@ -30,24 +30,34 @@
 #include <generated/mach-types.h>
 #include <mach/netx-eth.h>
 
+static struct resource cfi_dev_resources[] = {
+	[0] = {
+		.start	= 0xC0000000,
+		.size	= 32 * 1024 * 1024,
+	},
+};
+
 static struct device_d cfi_dev = {
 	.id	  = -1,
 	.name     = "cfi_flash",
-	.map_base = 0xC0000000,
-	.size     = 32 * 1024 * 1024,
+	.num_resources	= ARRAY_SIZE(cfi_dev_resources),
+	.resource	= cfi_dev_resources,
 };
 
-static struct memory_platform_data ram_pdata = {
-	.name = "ram0",
-	.flags = DEVFS_RDWR,
+static struct resource sdram_dev_resources[] = {
+	[0] = {
+		.name	= "ram0",
+		.start	= 0x80000000,
+		.size	= 64 * 1024 * 1024,
+		.flags	= DEVFS_RDWR,
+	},
 };
 
 static struct device_d sdram_dev = {
 	.id	  = -1,
 	.name     = "mem",
-	.map_base = 0x80000000,
-	.size     = 64 * 1024 * 1024,
-	.platform_data = &ram_pdata,
+	.num_resources	= ARRAY_SIZE(sdram_dev_resources),
+	.resource	= sdram_dev_resources,
 };
 
 struct netx_eth_platform_data eth0_data = {
@@ -92,11 +102,18 @@ static int netx_devices_init(void) {
 
 device_initcall(netx_devices_init);
 
+static struct resource netx_serial_resources[] = {
+	[0] = {
+		.start	= NETX_PA_UART0,
+		.size	= 0x40,
+	},
+};
+
 static struct device_d netx_serial_device = {
 	.id	  = -1,
 	.name     = "netx_serial",
-	.map_base = NETX_PA_UART0,
-	.size     = 0x40,
+	.num_resources	= ARRAY_SIZE(netx_serial_resources),
+	.resource	= netx_serial_resources,
 };
 
 static int netx_console_init(void)
diff --git a/arch/arm/boards/nhk8815/setup.c b/arch/arm/boards/nhk8815/setup.c
index 9cb0fd0..9d5e45d 100644
--- a/arch/arm/boards/nhk8815/setup.c
+++ b/arch/arm/boards/nhk8815/setup.c
@@ -33,11 +33,18 @@
 #include <mach/nand.h>
 #include <mach/fsmc.h>
 
+static struct resource network_dev_resources[] = {
+	[0] = {
+		.start	= 0x34000300,
+		.size	= 16,
+	},
+};
+
 static struct device_d nhk8815_network_dev = {
 	.id = -1,
 	.name = "smc91c111",
-	.map_base = 0x34000300,
-	.size = 16,
+	.num_resources	= ARRAY_SIZE(network_dev_resources),
+	.resource	= network_dev_resources,
 };
 
 static int nhk8815_nand_init(void)
diff --git a/arch/arm/boards/omap/board-beagle.c b/arch/arm/boards/omap/board-beagle.c
index 6de2cce..ff2944a 100644
--- a/arch/arm/boards/omap/board-beagle.c
+++ b/arch/arm/boards/omap/board-beagle.c
@@ -240,11 +240,18 @@ static struct NS16550_plat serial_plat = {
 	.reg_write = omap_uart_write,
 };
 
+static struct resource beagle_serial_resources[] = {
+	[0] = {
+		.start	= OMAP_UART3_BASE,
+		.size	= 1024,
+	},
+};
+
 static struct device_d beagle_serial_device = {
 	.id = -1,
 	.name = "serial_ns16550",
-	.map_base = OMAP_UART3_BASE,
-	.size = 1024,
+	.num_resources	= ARRAY_SIZE(beagle_serial_resources),
+	.resource	= beagle_serial_resources,
 	.platform_data = (void *)&serial_plat,
 };
 
@@ -262,17 +269,20 @@ static int beagle_console_init(void)
 console_initcall(beagle_console_init);
 #endif /* CONFIG_DRIVER_SERIAL_NS16550 */
 
-static struct memory_platform_data sram_pdata = {
-	.name = "ram0",
-	.flags = DEVFS_RDWR,
+static struct resource sdram_dev_resources[] = {
+	[0] = {
+		.name	= "ram0",
+		.start	= 0x80000000,
+		.size	= 128 * 1024 * 1024,
+		.flags	= DEVFS_RDWR,
+	},
 };
 
 static struct device_d sdram_dev = {
 	.id = -1,
 	.name = "mem",
-	.map_base = 0x80000000,
-	.size = 128 * 1024 * 1024,
-	.platform_data = &sram_pdata,
+	.num_resources	= ARRAY_SIZE(sdram_dev_resources),
+	.resource	= sdram_dev_resources,
 };
 
 #ifdef CONFIG_USB_EHCI_OMAP
@@ -292,19 +302,33 @@ static struct ehci_platform_data ehci_pdata = {
 	.hcor_offset = 0x110,
 };
 
+static struct resource usbh_dev_resources[] = {
+	[0] = {
+		.start	= 0x48064700,
+		.size	= 4 * 1024,
+	},
+};
+
 static struct device_d usbh_dev = {
 	.id	  = -1,
 	.name     = "ehci",
-	.map_base = 0x48064700,
-	.size     = 4 * 1024,
+	.num_resources	= ARRAY_SIZE(usbh_dev_resources),
+	.resource	= usbh_dev_resources,
 	.platform_data = &ehci_pdata,
 };
 #endif /* CONFIG_USB_EHCI_OMAP */
 
+static struct resource i2c_dev_resources[] = {
+	[0] = {
+		.start	= OMAP_I2C1_BASE,
+	},
+};
+
 static struct device_d i2c_dev = {
 	.id		= -1,
 	.name		= "i2c-omap",
-	.map_base	= OMAP_I2C1_BASE,
+	.num_resources	= ARRAY_SIZE(i2c_dev_resources),
+	.resource	= i2c_dev_resources,
 };
 
 static struct i2c_board_info i2c_devices[] = {
diff --git a/arch/arm/boards/omap/board-omap3evm.c b/arch/arm/boards/omap/board-omap3evm.c
index c37f151..b8b71de 100644
--- a/arch/arm/boards/omap/board-omap3evm.c
+++ b/arch/arm/boards/omap/board-omap3evm.c
@@ -217,15 +217,22 @@ static struct NS16550_plat serial_plat = {
 	.reg_write	= omap_uart_write,
 };
 
-static struct device_d omap3evm_serial_device = {
-	.id		= -1,
-	.name		= "serial_ns16550",
+static struct resource omap3evm_serial_resources[] = {
+	[0] = {
 #if defined(CONFIG_OMAP3EVM_UART1)
-	.map_base	= OMAP_UART1_BASE,
+		.start	= OMAP_UART1_BASE,
 #elif defined(CONFIG_OMAP3EVM_UART3)
-	.map_base	= OMAP_UART3_BASE,
+		.start	= OMAP_UART3_BASE,
 #endif
-	.size		= 1024,
+		.size	= 1024,
+	},
+};
+
+static struct device_d omap3evm_serial_device = {
+	.id		= -1,
+	.name		= "serial_ns16550",
+	.num_resources	= ARRAY_SIZE(omap3evm_serial_resources),
+	.resource	= omap3evm_serial_resources,
 	.platform_data	= (void *)&serial_plat,
 };
 
@@ -241,17 +248,20 @@ static int omap3evm_init_console(void)
 console_initcall(omap3evm_init_console);
 #endif /* CONFIG_DRIVER_SERIAL_NS16550 */
 
-static struct memory_platform_data sram_pdata = {
-	.name	= "ram0",
-	.flags	= DEVFS_RDWR,
+static struct resource sdram_dev_resources[] = {
+	[0] = {
+		.name	= "ram0",
+		.start	= 0x80000000,
+		.size	= 128 * 1024 * 1024,
+		.flags	= DEVFS_RDWR,
+	},
 };
 
 static struct device_d sdram_dev = {
 	.id		= -1,
 	.name		= "mem",
-	.map_base	= 0x80000000,
-	.size		= 128 * 1024 * 1024,
-	.platform_data	= &sram_pdata,
+	.num_resources	= ARRAY_SIZE(sdram_dev_resources),
+	.resource	= sdram_dev_resources,
 };
 
 static int omap3evm_init_devices(void)
diff --git a/arch/arm/boards/omap/board-sdp343x.c b/arch/arm/boards/omap/board-sdp343x.c
index f7615b4..984b3e5 100644
--- a/arch/arm/boards/omap/board-sdp343x.c
+++ b/arch/arm/boards/omap/board-sdp343x.c
@@ -609,11 +609,18 @@ static struct NS16550_plat serial_plat = {
 	.reg_write = omap_uart_write,
 };
 
+static struct resource sdp3430_serial_resources[] = {
+	[0] = {
+		.start	= OMAP_UART3_BASE,
+		.size	= 1024,
+	},
+};
+
 static struct device_d sdp3430_serial_device = {
 	.id = -1,
 	.name = "serial_ns16550",
-	.map_base = OMAP_UART3_BASE,
-	.size = 1024,
+	.num_resources	= ARRAY_SIZE(sdp3430_serial_resources),
+	.resource	= sdp3430_serial_resources,
 	.platform_data = (void *)&serial_plat,
 };
 
@@ -641,17 +648,20 @@ static int sdp3430_flash_init(void)
 	return 0;
 }
 
-static struct memory_platform_data ram_pdata = {
-	.name = "ram0",
-	.flags = DEVFS_RDWR,
+static struct resource sdram_dev_resources[] = {
+	[0] = {
+		.name	= "ram0",
+		.start	= 0x80000000,
+		.size	= 128 * 1024 * 1024,
+		.flags	= DEVFS_RDWR,
+	},
 };
 
 struct device_d sdram_dev = {
 	.id = -1,
 	.name = "mem",
-	.map_base = 0x80000000,
-	.size = 128 * 1024 * 1024,
-	.platform_data = &ram_pdata,
+	.num_resources	= ARRAY_SIZE(sdram_dev_resources),
+	.resource	= sdram_dev_resources,
 };
 
 /*-----------------------Generic Devices Initialization ---------------------*/
diff --git a/arch/arm/boards/omap/devices-gpmc-nand.c b/arch/arm/boards/omap/devices-gpmc-nand.c
index 4369aa0..0292944 100644
--- a/arch/arm/boards/omap/devices-gpmc-nand.c
+++ b/arch/arm/boards/omap/devices-gpmc-nand.c
@@ -71,11 +71,18 @@ static struct gpmc_nand_platform_data nand_plat = {
 };
 
 /** NAND device definition */
+static struct resource gpmc_generic_nand_resources[] = {
+	[0] = {
+		.start	= OMAP_GPMC_BASE,
+		.size	= 1024 * 4,	/* GPMC size */
+	},
+};
+
 static struct device_d gpmc_generic_nand_nand_device = {
 	.id = -1,
 	.name = "gpmc_nand",
-	.map_base = OMAP_GPMC_BASE,
-	.size = 1024 * 4,	/* GPMC size */
+	.num_resources	= ARRAY_SIZE(gpmc_generic_nand_resources),
+	.resource	= gpmc_generic_nand_resources,
 	.platform_data = (void *)&nand_plat,
 };
 
diff --git a/arch/arm/boards/pcm037/pcm037.c b/arch/arm/boards/pcm037/pcm037.c
index ffecec2..38725a2 100644
--- a/arch/arm/boards/pcm037/pcm037.c
+++ b/arch/arm/boards/pcm037/pcm037.c
@@ -43,28 +43,38 @@
  * Up to 32MiB NOR type flash, connected to
  * CS line 0, data width is 16 bit
  */
+static struct resource cfi_dev_resources[] = {
+	[0] = {
+		.start	= IMX_CS0_BASE,
+		.size	= 32 * 1024 * 1024,	/* area size */
+	},
+};
+
 static struct device_d cfi_dev = {
 	.id	  = -1,
 	.name     = "cfi_flash",
-	.map_base = IMX_CS0_BASE,
-	.size     = 32 * 1024 * 1024,	/* area size */
+	.num_resources	= ARRAY_SIZE(cfi_dev_resources),
+	.resource	= cfi_dev_resources,
 };
 
 /*
  * up to 2MiB static RAM type memory, connected
  * to CS4, data width is 16 bit
  */
-static struct memory_platform_data sram_dev_pdata0 = {
-	.name = "sram0",
-	.flags = DEVFS_RDWR,
+static struct resource sram_dev_resources[] = {
+	[0] = {
+		.name	= "sram0",
+		.start	= IMX_CS4_BASE,
+		.size	= IMX_CS4_RANGE,	/* area size */
+		.flags	= DEVFS_RDWR,
+	},
 };
 
 static struct device_d sram_dev = {
 	.id	  = -1,
 	.name     = "mem",
-	.map_base = IMX_CS4_BASE,
-	.size     = IMX_CS4_RANGE,	/* area size */
-	.platform_data = &sram_dev_pdata0,
+	.num_resources	= ARRAY_SIZE(sram_dev_resources),
+	.resource	= sram_dev_resources,
 };
 
 /*
@@ -72,11 +82,18 @@ static struct device_d sram_dev = {
  * connected to CS line 1 and interrupt line
  * GPIO3, data width is 16 bit
  */
+static struct resource network_dev_resources[] = {
+	[0] = {
+		.start	= IMX_CS1_BASE,
+		.size	= IMX_CS1_RANGE,	/* area size */
+	},
+};
+
 static struct device_d network_dev = {
 	.id	  = -1,
 	.name     = "smc911x",
-	.map_base = IMX_CS1_BASE,
-	.size     = IMX_CS1_RANGE,	/* area size */
+	.num_resources	= ARRAY_SIZE(network_dev_resources),
+	.resource	= network_dev_resources,
 };
 
 #if defined CONFIG_PCM037_SDRAM_BANK0_128MB
@@ -85,17 +102,20 @@ static struct device_d network_dev = {
 #define SDRAM0	256
 #endif
 
-static struct memory_platform_data ram_dev_pdata0 = {
-	.name = "ram0",
-	.flags = DEVFS_RDWR,
+static struct resource sdram0_dev_resources[] = {
+	[0] = {
+		.name	= "ram0",
+		.start	= IMX_SDRAM_CS0,
+		.size	= SDRAM0 * 1024 * 1024,	/* fix size */
+		.flags	= DEVFS_RDWR,
+	},
 };
 
 static struct device_d sdram0_dev = {
 	.id	  = -1,
 	.name     = "mem",
-	.map_base = IMX_SDRAM_CS0,
-	.size     = SDRAM0 * 1024 * 1024,	/* fix size */
-	.platform_data = &ram_dev_pdata0,
+	.num_resources	= ARRAY_SIZE(sdram0_dev_resources),
+	.resource	= sdram0_dev_resources,
 };
 
 #ifndef CONFIG_PCM037_SDRAM_BANK1_NONE
@@ -106,17 +126,20 @@ static struct device_d sdram0_dev = {
 #define SDRAM1	256
 #endif
 
-static struct memory_platform_data ram_dev_pdata1 = {
-	.name = "ram1",
-	.flags = DEVFS_RDWR,
+static struct resource sdram1_dev_resources[] = {
+	[0] = {
+		.name	= "ram1",
+		.start	= IMX_SDRAM_CS1,
+		.size	= SDRAM1 * 1024 * 1024,	/* fix size */
+		.flags	= DEVFS_RDWR,
+	},
 };
 
 static struct device_d sdram1_dev = {
 	.id	  = -1,
 	.name     = "mem",
-	.map_base = IMX_SDRAM_CS1,
-	.size     = SDRAM1 * 1024 * 1024,	/* fix size */
-	.platform_data = &ram_dev_pdata1,
+	.num_resources	= ARRAY_SIZE(sdram1_dev_resources),
+	.resource	= sdram1_dev_resources,
 };
 #endif
 
@@ -127,18 +150,32 @@ struct imx_nand_platform_data nand_info = {
 };
 
 #ifdef CONFIG_USB
+static struct resource usbotg_dev_resources[] = {
+	[0] = {
+		.start	= IMX_OTG_BASE,
+		.size	= 0x00000200,
+	},
+};
+
 static struct device_d usbotg_dev = {
 	.id	  = -1,
 	.name     = "ehci",
-	.map_base = IMX_OTG_BASE,
-	.size     = 0x200,
+	.num_resources	= ARRAY_SIZE(usbotg_dev_resources),
+	.resource	= usbotg_dev_resources,
+};
+
+static struct resource usbh2_dev_resources[] = {
+	[0] = {
+		.start	= IMX_OTG_BASE + 0x400,
+		.size	= 0x00000200,
+	},
 };
 
 static struct device_d usbh2_dev = {
 	.id	  = -1,
 	.name     = "ehci",
-	.map_base = IMX_OTG_BASE + 0x400,
-	.size     = 0x200,
+	.num_resources	= ARRAY_SIZE(usbh2_dev_resources),
+	.resource	= usbh2_dev_resources,
 };
 
 static void pcm037_usb_init(void)
diff --git a/arch/arm/boards/pcm038/pcm038.c b/arch/arm/boards/pcm038/pcm038.c
index 1dbc6b6..1306f27 100644
--- a/arch/arm/boards/pcm038/pcm038.c
+++ b/arch/arm/boards/pcm038/pcm038.c
@@ -47,37 +47,50 @@
 
 #include "pll.h"
 
+static struct resource cfi_dev_resources[] = {
+	[0] = {
+		.start	= 0xC0000000,
+		.size	= 32 * 1024 * 1024,
+	},
+};
+
 static struct device_d cfi_dev = {
 	.id	  = -1,
 	.name     = "cfi_flash",
-	.map_base = 0xC0000000,
-	.size     = 32 * 1024 * 1024,
+	.num_resources	= ARRAY_SIZE(cfi_dev_resources),
+	.resource	= cfi_dev_resources,
 };
 
-static struct memory_platform_data ram_pdata = {
-	.name = "ram0",
-	.flags = DEVFS_RDWR,
+static struct resource sdram_dev_resources[] = {
+	[0] = {
+		.name 	= "ram0",
+		.start	= 0xa0000000,
+		.size	= 128 * 1024 * 1024,
+		.flags	= DEVFS_RDWR,
+	},
 };
 
 static struct device_d sdram_dev = {
 	.id	  = -1,
 	.name     = "mem",
-	.map_base = 0xa0000000,
-	.size     = 128 * 1024 * 1024,
-	.platform_data = &ram_pdata,
+	.num_resources	= ARRAY_SIZE(sdram_dev_resources),
+	.resource	= sdram_dev_resources,
 };
 
-static struct memory_platform_data sram_pdata = {
-	.name = "sram0",
-	.flags = DEVFS_RDWR,
+static struct resource sram_dev_resources[] = {
+	[0] = {
+		.name	= "sram0",
+		.start	= 0xc8000000,
+		.size	= 512 * 1024, /* Can be up to 2MiB */
+		.flags	= DEVFS_RDWR,
+	},
 };
 
 static struct device_d sram_dev = {
 	.id	  = -1,
 	.name     = "mem",
-	.map_base = 0xc8000000,
-	.size     = 512 * 1024, /* Can be up to 2MiB */
-	.platform_data = &sram_pdata,
+	.num_resources	= ARRAY_SIZE(sram_dev_resources),
+	.resource	= sram_dev_resources,
 };
 
 static struct fec_platform_data fec_info = {
@@ -142,11 +155,18 @@ static struct imx_fb_platform_data pcm038_fb_data = {
 };
 
 #ifdef CONFIG_USB
+static struct resource usbh2_dev_resources[] = {
+	[0] = {
+		.start	= IMX_OTG_BASE + 0x400,
+		.size	= 0x00000200,
+	},
+};
+
 static struct device_d usbh2_dev = {
 	.id	  = -1,
 	.name     = "ehci",
-	.map_base = IMX_OTG_BASE + 0x400,
-	.size     = 0x200,
+	.num_resources	= ARRAY_SIZE(usbh2_dev_resources),
+	.resource	= usbh2_dev_resources,
 };
 
 static void pcm038_usbh_init(void)
diff --git a/arch/arm/boards/pcm043/pcm043.c b/arch/arm/boards/pcm043/pcm043.c
index 2191bc8..cf92ad0 100644
--- a/arch/arm/boards/pcm043/pcm043.c
+++ b/arch/arm/boards/pcm043/pcm043.c
@@ -49,28 +49,38 @@
  * Up to 32MiB NOR type flash, connected to
  * CS line 0, data width is 16 bit
  */
+static struct resource cfi_dev_resources[] = {
+	[0] = {
+		.start	= IMX_CS0_BASE,
+		.size	= 32 * 1024 * 1024,	/* area size */
+	},
+};
+
 static struct device_d cfi_dev = {
 	.id	  = -1,
 	.name     = "cfi_flash",
-	.map_base = IMX_CS0_BASE,
-	.size     = 32 * 1024 * 1024,	/* area size */
+	.num_resources	= ARRAY_SIZE(cfi_dev_resources),
+	.resource	= cfi_dev_resources,
 };
 
 static struct fec_platform_data fec_info = {
 	.xcv_type = MII100,
 };
 
-static struct memory_platform_data ram_pdata = {
-	.name = "ram0",
-	.flags = DEVFS_RDWR,
+static struct resource sdram0_dev_resources[] = {
+	[0] = {
+		.name	= "ram0",
+		.start	= IMX_SDRAM_CS0,
+		.size	= 128 * 1024 * 1024,
+		.flags	= DEVFS_RDWR,
+	},
 };
 
 static struct device_d sdram0_dev = {
 	.id	  = -1,
 	.name     = "mem",
-	.map_base = IMX_SDRAM_CS0,
-	.size     = 128 * 1024 * 1024,
-	.platform_data = &ram_pdata,
+	.num_resources	= ARRAY_SIZE(sdram0_dev_resources),
+	.resource	= sdram0_dev_resources,
 };
 
 struct imx_nand_platform_data nand_info = {
diff --git a/arch/arm/boards/phycard-i.MX27/pca100.c b/arch/arm/boards/phycard-i.MX27/pca100.c
index 32f7e74..b6432ff 100644
--- a/arch/arm/boards/phycard-i.MX27/pca100.c
+++ b/arch/arm/boards/phycard-i.MX27/pca100.c
@@ -41,17 +41,20 @@
 #include <mach/iomux-mx27.h>
 #include <mach/devices-imx27.h>
 
-static struct memory_platform_data ram_pdata = {
-	.name = "ram0",
-	.flags = DEVFS_RDWR,
+static struct resource sdram_dev_resources[] = {
+	[0] = {
+		.name	= "ram0",
+		.start	= 0xa0000000,
+		.size	= 128 * 1024 * 1024,
+		.flags	= DEVFS_RDWR,
+	},
 };
 
 static struct device_d sdram_dev = {
 	.id	  = -1,
 	.name     = "mem",
-	.map_base = 0xa0000000,
-	.size     = 128 * 1024 * 1024,
-	.platform_data = &ram_pdata,
+	.num_resources	= ARRAY_SIZE(sdram_dev_resources),
+	.resource	= sdram_dev_resources,
 };
 
 static struct fec_platform_data fec_info = {
@@ -66,11 +69,18 @@ struct imx_nand_platform_data nand_info = {
 };
 
 #ifdef CONFIG_USB
+static struct resource usbh2_dev_resources[] = {
+	[0] = {
+		.start	= IMX_OTG_BASE + 0x400,
+		.size	= 0x00000200,
+	},
+};
+
 static struct device_d usbh2_dev = {
 	.id	  = -1,
 	.name     = "ehci",
-	.map_base = IMX_OTG_BASE + 0x400,
-	.size     = 0x200,
+	.num_resources	= ARRAY_SIZE(usbh2_dev_resources),
+	.resource	= usbh2_dev_resources,
 };
 
 static void pca100_usbh_init(void)
@@ -217,11 +227,18 @@ static int pca100_devices_init(void)
 
 device_initcall(pca100_devices_init);
 
+static struct resource pca100_serial_resources[] = {
+	[0] = {
+		.start	= IMX_UART1_BASE,
+		.size	= 4096,
+	},
+};
+
 static struct device_d pca100_serial_device = {
 	.id	  = -1,
 	.name     = "imx_serial",
-	.map_base = IMX_UART1_BASE,
-	.size     = 4096,
+	.num_resources	= ARRAY_SIZE(pca100_serial_resources),
+	.resource	= pca100_serial_resources,
 };
 
 static int pca100_console_init(void)
diff --git a/arch/arm/boards/pm9261/init.c b/arch/arm/boards/pm9261/init.c
index 6fb14f7..0c8b0ae 100644
--- a/arch/arm/boards/pm9261/init.c
+++ b/arch/arm/boards/pm9261/init.c
@@ -88,6 +88,13 @@ static void pm_add_device_nand(void)
  * DM9000 ethernet device
  */
 #if defined(CONFIG_DRIVER_NET_DM9000)
+static struct resource dm9000_dev_resources[] = {
+	[0] = {
+		.start	= AT91_CHIPSELECT_2,
+		.size	= 8,
+	},
+};
+
 static struct dm9000_platform_data dm9000_data = {
 	.iobase		= AT91_CHIPSELECT_2,
 	.iodata		= AT91_CHIPSELECT_2 + 4,
@@ -98,8 +105,8 @@ static struct dm9000_platform_data dm9000_data = {
 static struct device_d dm9000_dev = {
 	.id		= 0,
 	.name		= "dm9000",
-	.map_base	= AT91_CHIPSELECT_2,
-	.size		= 8,
+	.num_resources	= ARRAY_SIZE(dm9000_dev_resources),
+	.resource	= dm9000_dev_resources,
 	.platform_data	= &dm9000_data,
 };
 
@@ -136,11 +143,18 @@ static void __init pm_add_device_dm9000(void)
 static void __init ek_add_device_dm9000(void) {}
 #endif /* CONFIG_DRIVER_NET_DM9000 */
 
+static struct resource cfi_dev_resources[] = {
+	[0] = {
+		.start	= AT91_CHIPSELECT_0,
+		.size	= 4 * 1024 * 1024,
+	},
+};
+
 static struct device_d cfi_dev = {
 	.id		= 0,
 	.name		= "cfi_flash",
-	.map_base	= AT91_CHIPSELECT_0,
-	.size		= 4 * 1024 * 1024,
+	.num_resources	= ARRAY_SIZE(cfi_dev_resources),
+	.resource	= cfi_dev_resources,
 };
 
 static int pm9261_devices_init(void)
diff --git a/arch/arm/boards/pm9263/init.c b/arch/arm/boards/pm9263/init.c
index abe8def..ff4f6f6 100644
--- a/arch/arm/boards/pm9263/init.c
+++ b/arch/arm/boards/pm9263/init.c
@@ -86,11 +86,18 @@ static void pm_add_device_nand(void)
 	at91_add_device_nand(&nand_pdata);
 }
 
+static struct resource cfi_dev_resources[] = {
+	[0] = {
+		.start	= AT91_CHIPSELECT_0,
+		.size	= 4 * 1024 * 1024,
+	},
+};
+
 static struct device_d cfi_dev = {
 	.id	  = -1,
 	.name     = "cfi_flash",
-	.map_base = AT91_CHIPSELECT_0,
-	.size     = 4 * 1024 * 1024,
+	.num_resources	= ARRAY_SIZE(cfi_dev_resources),
+	.resource	= cfi_dev_resources,
 };
 
 static struct at91_ether_platform_data macb_pdata = {
diff --git a/arch/arm/boards/scb9328/scb9328.c b/arch/arm/boards/scb9328/scb9328.c
index 4c08c50..b58b12d 100644
--- a/arch/arm/boards/scb9328/scb9328.c
+++ b/arch/arm/boards/scb9328/scb9328.c
@@ -32,25 +32,34 @@
 #include <fcntl.h>
 #include <dm9000.h>
 
+static struct resource cfi_dev_resources[] = {
+	[0] = {
+		.start	= 0x10000000,
+		.size	= 16 * 1024 * 1024,
+	},
+};
+
 static struct device_d cfi_dev = {
 	.id	  = -1,
 	.name     = "cfi_flash",
-
-	.map_base = 0x10000000,
-	.size     = 16 * 1024 * 1024,
+	.num_resources	= ARRAY_SIZE(cfi_dev_resources),
+	.resource	= cfi_dev_resources,
 };
 
-static struct memory_platform_data sdram_pdata = {
-	.name = "ram0",
-	.flags = DEVFS_RDWR,
+static struct resource sdram_dev_resources[] = {
+	[0] = {
+		.name	= "ram0",
+		.start	= 0x08000000,
+		.size	= 16 * 1024 * 1024,
+		.flags	= DEVFS_RDWR,
+	},
 };
 
 static struct device_d sdram_dev = {
 	.id	  = -1,
 	.name     = "mem",
-	.map_base = 0x08000000,
-	.size     = 16 * 1024 * 1024,
-	.platform_data = &sdram_pdata,
+	.num_resources	= ARRAY_SIZE(sdram_dev_resources),
+	.resource	= sdram_dev_resources,
 };
 
 static struct dm9000_platform_data dm9000_data = {
@@ -60,11 +69,18 @@ static struct dm9000_platform_data dm9000_data = {
 	.srom     = 1,
 };
 
+static struct resource dm9000_dev_resources[] = {
+	[0] = {
+		.start	= 0x16000000,
+		.size	= 8,
+	},
+};
+
 static struct device_d dm9000_dev = {
 	.id	  = -1,
 	.name     = "dm9000",
-	.map_base = 0x16000000,
-	.size     = 8,
+	.num_resources	= ARRAY_SIZE(dm9000_dev_resources),
+	.resource	= dm9000_dev_resources,
 	.platform_data = &dm9000_data,
 };
 
@@ -106,11 +122,18 @@ static int scb9328_devices_init(void) {
 
 device_initcall(scb9328_devices_init);
 
+static struct resource scb9328_serial_resources[] = {
+	[0] = {
+		.start	= IMX_UART1_BASE,
+		.size	= 4096,
+	},
+};
+
 static struct device_d scb9328_serial_device = {
 	.id	  = -1,
 	.name     = "imx_serial",
-	.map_base = IMX_UART1_BASE,
-	.size     = 4096,
+	.num_resources	= ARRAY_SIZE(scb9328_serial_resources),
+	.resource	= scb9328_serial_resources,
 };
 
 static int scb9328_console_init(void)
diff --git a/arch/arm/lib/armlinux.c b/arch/arm/lib/armlinux.c
index f826da6..d1f8281 100644
--- a/arch/arm/lib/armlinux.c
+++ b/arch/arm/lib/armlinux.c
@@ -78,8 +78,8 @@ static void setup_memory_tags(void)
 		params->hdr.tag = ATAG_MEM;
 		params->hdr.size = tag_size(tag_mem32);
 
-		params->u.mem.start = mem->dev->map_base;
-		params->u.mem.size = mem->dev->size;
+		params->u.mem.start = dev_resource_get_start(mem->dev);
+		params->u.mem.size = dev_resource_get_size(mem->dev);
 
 		params = tag_next(params);
 	}
diff --git a/arch/arm/mach-at91/at91sam9260_devices.c b/arch/arm/mach-at91/at91sam9260_devices.c
index fc8f828..d8bcaf2 100644
--- a/arch/arm/mach-at91/at91sam9260_devices.c
+++ b/arch/arm/mach-at91/at91sam9260_devices.c
@@ -20,31 +20,41 @@
 
 #include "generic.h"
 
-static struct memory_platform_data sram_pdata = {
-	.name = "sram0",
-	.flags = DEVFS_RDWR,
+static struct resource sdram_dev_resources[] = {
+	[0] = {
+		.name	= "sram0",
+		.start	= AT91_CHIPSELECT_1,
+		.flags	= DEVFS_RDWR,
+	},
 };
 
 static struct device_d sdram_dev = {
 	.id	  = -1,
 	.name     = "mem",
-	.map_base = AT91_CHIPSELECT_1,
-	.platform_data = &sram_pdata,
+	.num_resources	= ARRAY_SIZE(sdram_dev_resources),
+	.resource	= sdram_dev_resources,
 };
 
 void at91_add_device_sdram(u32 size)
 {
-	sdram_dev.size = size;
+	dev_resource_set_size(&sdram_dev, size);
 	register_device(&sdram_dev);
 	armlinux_add_dram(&sdram_dev);
 }
 
 #if defined(CONFIG_DRIVER_NET_MACB)
+static struct resource eth_resources[] = {
+	[0] = {
+		.start	= AT91SAM9260_BASE_EMAC,
+		.size	= 0x1000,
+	},
+};
+
 static struct device_d macb_dev = {
 	.id	  = -1,
 	.name     = "macb",
-	.map_base = AT91SAM9260_BASE_EMAC,
-	.size     = 0x1000,
+	.resource	= eth_resources,
+	.num_resources	= ARRAY_SIZE(eth_resources),
 };
 
 void at91_add_device_eth(struct at91_ether_platform_data *data)
@@ -83,11 +93,18 @@ void at91_add_device_eth(struct at91_ether_platform_data *data) {}
 #endif
 
 #if defined(CONFIG_NAND_ATMEL)
+static struct resource nand_resources[] = {
+	[0] = {
+		.start	= AT91_CHIPSELECT_3,
+		.size	= 0x10,
+	},
+};
+
 static struct device_d nand_dev = {
 	.id	  = -1,
 	.name     = "atmel_nand",
-	.map_base = AT91_CHIPSELECT_3,
-	.size     = 0x10,
+	.resource	= nand_resources,
+	.num_resources	= ARRAY_SIZE(nand_resources),
 };
 
 void at91_add_device_nand(struct atmel_nand_data *data)
@@ -119,11 +136,18 @@ void at91_add_device_nand(struct atmel_nand_data *data)
 void at91_add_device_nand(struct atmel_nand_data *data) {}
 #endif
 
+static struct resource dbgu_resources[] = {
+	[0] = {
+		.start	= AT91_BASE_SYS + AT91_DBGU,
+		.size	= 4096,
+	},
+};
+
 static struct device_d dbgu_serial_device = {
 	.id	  = 0,
 	.name     = "atmel_serial",
-	.map_base = AT91_BASE_SYS + AT91_DBGU,
-	.size     = 4096,
+	.resource	= dbgu_resources,
+	.num_resources	= ARRAY_SIZE(dbgu_resources),
 };
 
 static inline void configure_dbgu_pins(void)
@@ -132,11 +156,18 @@ static inline void configure_dbgu_pins(void)
 	at91_set_A_periph(AT91_PIN_PB15, 1);		/* DTXD */
 }
 
+static struct resource uart0_resources[] = {
+	[0] = {
+		.start	= AT91SAM9260_BASE_US0,
+		.size	= 4096,
+	},
+};
+
 static struct device_d uart0_serial_device = {
 	.id	  = 1,
 	.name     = "atmel_serial",
-	.map_base = AT91SAM9260_BASE_US0,
-	.size     = 4096,
+	.resource	= uart0_resources,
+	.num_resources	= ARRAY_SIZE(uart0_resources),
 };
 
 static inline void configure_usart0_pins(unsigned pins)
@@ -158,11 +189,18 @@ static inline void configure_usart0_pins(unsigned pins)
 		at91_set_A_periph(AT91_PIN_PB25, 0);	/* RI0 */
 }
 
+static struct resource uart1_resources[] = {
+	[0] = {
+		.start	= AT91SAM9260_BASE_US1,
+		.size	= 4096,
+	},
+};
+
 static struct device_d uart1_serial_device = {
 	.id	  = 2,
 	.name     = "atmel_serial",
-	.map_base = AT91SAM9260_BASE_US1,
-	.size     = 4096,
+	.resource	= uart1_resources,
+	.num_resources	= ARRAY_SIZE(uart1_resources),
 };
 
 static inline void configure_usart1_pins(unsigned pins)
@@ -176,11 +214,18 @@ static inline void configure_usart1_pins(unsigned pins)
 		at91_set_A_periph(AT91_PIN_PB29, 0);	/* CTS1 */
 }
 
+static struct resource uart2_resources[] = {
+	[0] = {
+		.start	= AT91SAM9260_BASE_US2,
+		.size	= 4096,
+	},
+};
+
 static struct device_d uart2_serial_device = {
 	.id	  = 3,
 	.name     = "atmel_serial",
-	.map_base = AT91SAM9260_BASE_US2,
-	.size     = 4096,
+	.resource	= uart2_resources,
+	.num_resources	= ARRAY_SIZE(uart2_resources),
 };
 
 static inline void configure_usart2_pins(unsigned pins)
@@ -194,11 +239,18 @@ static inline void configure_usart2_pins(unsigned pins)
 		at91_set_A_periph(AT91_PIN_PA5, 0);	/* CTS2 */
 }
 
+static struct resource uart3_resources[] = {
+	[0] = {
+		.start	= AT91SAM9260_BASE_US3,
+		.size	= 4096,
+	},
+};
+
 static struct device_d uart3_serial_device = {
 	.id	  = 4,
 	.name     = "atmel_serial",
-	.map_base = AT91SAM9260_BASE_US3,
-	.size     = 4096,
+	.resource	= uart3_resources,
+	.num_resources	= ARRAY_SIZE(uart3_resources),
 };
 
 static inline void configure_usart3_pins(unsigned pins)
@@ -212,11 +264,18 @@ static inline void configure_usart3_pins(unsigned pins)
 		at91_set_B_periph(AT91_PIN_PC10, 0);	/* CTS3 */
 }
 
+static struct resource uart4_resources[] = {
+	[0] = {
+		.start	= AT91SAM9260_BASE_US4,
+		.size	= 4096,
+	},
+};
+
 static struct device_d uart4_serial_device = {
 	.id	  = 5,
 	.name     = "atmel_serial",
-	.map_base = AT91SAM9260_BASE_US4,
-	.size     = 4096,
+	.resource	= uart4_resources,
+	.num_resources	= ARRAY_SIZE(uart4_resources),
 };
 
 static inline void configure_usart4_pins(void)
@@ -225,11 +284,18 @@ static inline void configure_usart4_pins(void)
 	at91_set_B_periph(AT91_PIN_PA30, 0);		/* RXD4 */
 }
 
+static struct resource uart5_resources[] = {
+	[0] = {
+		.start	= AT91SAM9260_BASE_US5,
+		.size	= 4096,
+	},
+};
+
 static struct device_d uart5_serial_device = {
 	.id	  = 6,
 	.name     = "atmel_serial",
-	.map_base = AT91SAM9260_BASE_US5,
-	.size     = 4096,
+	.resource	= uart5_resources,
+	.num_resources	= ARRAY_SIZE(uart5_resources),
 };
 
 static inline void configure_usart5_pins(void)
diff --git a/arch/arm/mach-at91/at91sam9261_devices.c b/arch/arm/mach-at91/at91sam9261_devices.c
index 45bfb23..c239d2b 100644
--- a/arch/arm/mach-at91/at91sam9261_devices.c
+++ b/arch/arm/mach-at91/at91sam9261_devices.c
@@ -20,31 +20,41 @@
 
 #include "generic.h"
 
-static struct memory_platform_data ram_pdata = {
-	.name = "ram0",
-	.flags = DEVFS_RDWR,
+static struct resource sdram_dev_resources[] = {
+	[0] = {
+		.name	= "ram0",
+		.start	= AT91_CHIPSELECT_1,
+		.flags	= DEVFS_RDWR,
+	},
 };
 
 static struct device_d sdram_dev = {
 	.id		= 0,
 	.name		= "mem",
-	.map_base	= AT91_CHIPSELECT_1,
-	.platform_data	= &ram_pdata,
+	.num_resources	= ARRAY_SIZE(sdram_dev_resources),
+	.resource	= sdram_dev_resources,
 };
 
 void at91_add_device_sdram(u32 size)
 {
-	sdram_dev.size = size;
+	dev_resource_set_size(&sdram_dev, size);
 	register_device(&sdram_dev);
 	armlinux_add_dram(&sdram_dev);
 }
 
 #if defined(CONFIG_NAND_ATMEL)
+static struct resource nand_resources[] = {
+	[0] = {
+		.start	= AT91_CHIPSELECT_3,
+		.size	= 0x10,
+	},
+};
+
 static struct device_d nand_dev = {
 	.id		= 0,
 	.name		= "atmel_nand",
-	.map_base	= AT91_CHIPSELECT_3,
-	.size		= 0x10,
+	.resource	= nand_resources,
+	.num_resources	= ARRAY_SIZE(nand_resources),
 };
 
 void at91_add_device_nand(struct atmel_nand_data *data)
@@ -79,11 +89,18 @@ void at91_add_device_nand(struct atmel_nand_data *data)
 void at91_add_device_nand(struct atmel_nand_data *data) {}
 #endif
 
+static struct resource dbgu_resources[] = {
+	[0] = {
+		.start	= (AT91_BASE_SYS + AT91_DBGU),
+		.size	= 4096,
+	},
+};
+
 static struct device_d dbgu_serial_device = {
 	.id		= 0,
 	.name		= "atmel_serial",
-	.map_base	= (AT91_BASE_SYS + AT91_DBGU),
-	.size		= 4096,
+	.resource	= dbgu_resources,
+	.num_resources	= ARRAY_SIZE(dbgu_resources),
 };
 
 static inline void configure_dbgu_pins(void)
@@ -92,11 +109,18 @@ static inline void configure_dbgu_pins(void)
 	at91_set_A_periph(AT91_PIN_PA10, 1);		/* DTXD */
 }
 
+static struct resource uart0_resources[] = {
+	[0] = {
+		.start	= AT91SAM9261_BASE_US0,
+		.size	= 4096,
+	},
+};
+
 static struct device_d uart0_serial_device = {
 	.id		= 1,
 	.name		= "atmel_serial",
-	.map_base	= AT91SAM9261_BASE_US0,
-	.size		= 4096,
+	.resource	= uart0_resources,
+	.num_resources	= ARRAY_SIZE(uart0_resources),
 };
 
 static inline void configure_usart0_pins(unsigned pins)
@@ -110,11 +134,18 @@ static inline void configure_usart0_pins(unsigned pins)
 		at91_set_A_periph(AT91_PIN_PC11, 0);	/* CTS0 */
 }
 
+static struct resource uart1_resources[] = {
+	[0] = {
+		.start	= AT91SAM9261_BASE_US1,
+		.size	= 4096,
+	},
+};
+
 static struct device_d uart1_serial_device = {
 	.id		= 2,
 	.name		= "atmel_serial",
-	.map_base	= AT91SAM9261_BASE_US1,
-	.size		= 4096,
+	.resource	= uart1_resources,
+	.num_resources	= ARRAY_SIZE(uart1_resources),
 };
 
 static inline void configure_usart1_pins(unsigned pins)
@@ -128,11 +159,18 @@ static inline void configure_usart1_pins(unsigned pins)
 		at91_set_B_periph(AT91_PIN_PA13, 0);	/* CTS1 */
 }
 
+static struct resource uart2_resources[] = {
+	[0] = {
+		.start	= AT91SAM9261_BASE_US2,
+		.size	= 4096,
+	},
+};
+
 static struct device_d uart2_serial_device = {
 	.id		= 3,
 	.name		= "atmel_serial",
-	.map_base	= AT91SAM9261_BASE_US2,
-	.size		= 4096,
+	.resource	= uart2_resources,
+	.num_resources	= ARRAY_SIZE(uart2_resources),
 };
 
 static inline void configure_usart2_pins(unsigned pins)
diff --git a/arch/arm/mach-at91/at91sam9263_devices.c b/arch/arm/mach-at91/at91sam9263_devices.c
index 346426c..d6638f7 100644
--- a/arch/arm/mach-at91/at91sam9263_devices.c
+++ b/arch/arm/mach-at91/at91sam9263_devices.c
@@ -20,31 +20,41 @@
 
 #include "generic.h"
 
-static struct memory_platform_data ram_pdata = {
-	.name = "ram0",
-	.flags = DEVFS_RDWR,
+static struct resource sdram_dev_resources[] = {
+	[0] = {
+		.name	= "ram0",
+		.start	= AT91_CHIPSELECT_1,
+		.flags	= DEVFS_RDWR,
+	},
 };
 
 static struct device_d sdram_dev = {
 	.id	  = -1,
 	.name     = "mem",
-	.map_base = AT91_CHIPSELECT_1,
-	.platform_data = &ram_pdata,
+	.num_resources	= ARRAY_SIZE(sdram_dev_resources),
+	.resource	= sdram_dev_resources,
 };
 
 void at91_add_device_sdram(u32 size)
 {
-	sdram_dev.size = size;
+	dev_resource_set_size(&sdram_dev, size);
 	register_device(&sdram_dev);
 	armlinux_add_dram(&sdram_dev);
 }
 
 #if defined(CONFIG_DRIVER_NET_MACB)
+static struct resource eth_resources[] = {
+	[0] = {
+		.start	= AT91SAM9263_BASE_EMAC,
+		.size	= 0x1000,
+	},
+};
+
 static struct device_d macb_dev = {
 	.id	  = -1,
 	.name     = "macb",
-	.map_base = AT91SAM9263_BASE_EMAC,
-	.size     = 0x1000,
+	.resource	= eth_resources,
+	.num_resources	= ARRAY_SIZE(eth_resources),
 };
 
 void at91_add_device_eth(struct at91_ether_platform_data *data)
@@ -82,11 +92,18 @@ void at91_add_device_eth(struct at91_ether_platform_data *data) {}
 #endif
 
 #if defined(CONFIG_NAND_ATMEL)
+static struct resource nand_resources[] = {
+	[0] = {
+		.start	= AT91_CHIPSELECT_3,
+		.size	= 0x10,
+	},
+};
+
 static struct device_d nand_dev = {
 	.id	  = -1,
 	.name     = "atmel_nand",
-	.map_base = AT91_CHIPSELECT_3,
-	.size     = 0x10,
+	.resource	= nand_resources,
+	.num_resources	= ARRAY_SIZE(nand_resources),
 };
 
 void at91_add_device_nand(struct atmel_nand_data *data)
@@ -118,11 +135,18 @@ void at91_add_device_nand(struct atmel_nand_data *data)
 void at91_add_device_nand(struct atmel_nand_data *data) {}
 #endif
 
+static struct resource dbgu_resources[] = {
+	[0] = {
+		.start	= (AT91_BASE_SYS + AT91_DBGU),
+		.size	= 4096,
+	},
+};
+
 static struct device_d dbgu_serial_device = {
 	.id	  = 0,
 	.name     = "atmel_serial",
-	.map_base = (AT91_BASE_SYS + AT91_DBGU),
-	.size     = 4096,
+	.resource	= dbgu_resources,
+	.num_resources	= ARRAY_SIZE(dbgu_resources),
 };
 
 static inline void configure_dbgu_pins(void)
@@ -131,11 +155,18 @@ static inline void configure_dbgu_pins(void)
 	at91_set_A_periph(AT91_PIN_PC31, 1);		/* DTXD */
 }
 
+static struct resource uart0_resources[] = {
+	[0] = {
+		.start	= AT91SAM9263_BASE_US0,
+		.size	= 4096,
+	},
+};
+
 static struct device_d uart0_serial_device = {
 	.id	  = 1,
 	.name     = "atmel_serial",
-	.map_base = AT91SAM9263_BASE_US0,
-	.size     = 4096,
+	.resource	= uart0_resources,
+	.num_resources	= ARRAY_SIZE(uart0_resources),
 };
 
 static inline void configure_usart0_pins(unsigned pins)
@@ -149,11 +180,18 @@ static inline void configure_usart0_pins(unsigned pins)
 		at91_set_A_periph(AT91_PIN_PA29, 0);	/* CTS0 */
 }
 
+static struct resource uart1_resources[] = {
+	[0] = {
+		.start	= AT91SAM9263_BASE_US1,
+		.size	= 4096,
+	},
+};
+
 static struct device_d uart1_serial_device = {
 	.id	  = 2,
 	.name     = "atmel_serial",
-	.map_base = AT91SAM9263_BASE_US1,
-	.size     = 4096,
+	.resource	= uart1_resources,
+	.num_resources	= ARRAY_SIZE(uart1_resources),
 };
 
 static inline void configure_usart1_pins(unsigned pins)
@@ -167,11 +205,18 @@ static inline void configure_usart1_pins(unsigned pins)
 		at91_set_B_periph(AT91_PIN_PD8, 0);	/* CTS1 */
 }
 
+static struct resource uart2_resources[] = {
+	[0] = {
+		.start	= AT91SAM9263_BASE_US2,
+		.size	= 4096,
+	},
+};
+
 static struct device_d uart2_serial_device = {
 	.id	  = 3,
 	.name     = "atmel_serial",
-	.map_base = AT91SAM9263_BASE_US2,
-	.size     = 4096,
+	.resource	= uart2_resources,
+	.num_resources	= ARRAY_SIZE(uart2_resources),
 };
 
 static inline void configure_usart2_pins(unsigned pins)
diff --git a/arch/arm/mach-at91/at91sam9g45_devices.c b/arch/arm/mach-at91/at91sam9g45_devices.c
index ddb005a..dd6c762 100644
--- a/arch/arm/mach-at91/at91sam9g45_devices.c
+++ b/arch/arm/mach-at91/at91sam9g45_devices.c
@@ -20,31 +20,41 @@
 
 #include "generic.h"
 
-static struct memory_platform_data ram_pdata = {
-	.name = "ram0",
-	.flags = DEVFS_RDWR,
+static struct resource sdram_dev_resources[] = {
+	[0] = {
+		.name	= "ram0",
+		.start	= AT91_CHIPSELECT_6,
+		.flags	= DEVFS_RDWR,
+	},
 };
 
 static struct device_d sdram_dev = {
 	.id		= -1,
 	.name		= "mem",
-	.map_base	= AT91_CHIPSELECT_6,
-	.platform_data	= &ram_pdata,
+	.num_resources	= ARRAY_SIZE(sdram_dev_resources),
+	.resource	= sdram_dev_resources,
 };
 
 void at91_add_device_sdram(u32 size)
 {
-	sdram_dev.size = size;
+	dev_resource_set_size(&sdram_dev, size);
 	register_device(&sdram_dev);
 	armlinux_add_dram(&sdram_dev);
 }
 
 #if defined(CONFIG_DRIVER_NET_MACB)
+static struct resource eth_resources[] = {
+	[0] = {
+		.start	= AT91SAM9G45_BASE_EMAC,
+		.size	= 0x1000,
+	},
+};
+
 static struct device_d macb_dev = {
 	.id		= 0,
 	.name		= "macb",
-	.map_base	= AT91SAM9G45_BASE_EMAC,
-	.size		= 0x1000,
+	.resource	= eth_resources,
+	.num_resources	= ARRAY_SIZE(eth_resources),
 };
 
 void at91_add_device_eth(struct at91_ether_platform_data *data)
@@ -83,11 +93,18 @@ void at91_add_device_eth(struct at91_ether_platform_data *data) {}
 #endif
 
 #if defined(CONFIG_NAND_ATMEL)
+static struct resource nand_resources[] = {
+	[0] = {
+		.start	= AT91_CHIPSELECT_3,
+		.size	= 0x10,
+	},
+};
+
 static struct device_d nand_dev = {
 	.id		= -1,
 	.name		= "atmel_nand",
-	.map_base	= AT91_CHIPSELECT_3,
-	.size		= 0x10,
+	.resource	= nand_resources,
+	.num_resources	= ARRAY_SIZE(nand_resources),
 };
 
 void at91_add_device_nand(struct atmel_nand_data *data)
@@ -122,11 +139,18 @@ void at91_add_device_nand(struct atmel_nand_data *data)
 void at91_add_device_nand(struct atmel_nand_data *data) {}
 #endif
 
+static struct resource dbgu_resources[] = {
+	[0] = {
+		.start	= (AT91_BASE_SYS + AT91_DBGU),
+		.size	= 4096,
+	},
+};
+
 static struct device_d dbgu_serial_device = {
 	.id	  = -1,
 	.name     = "atmel_serial",
-	.map_base = (AT91_BASE_SYS + AT91_DBGU),
-	.size     = 4096,
+	.resource	= dbgu_resources,
+	.num_resources	= ARRAY_SIZE(dbgu_resources),
 };
 
 static inline void configure_dbgu_pins(void)
@@ -135,11 +159,18 @@ static inline void configure_dbgu_pins(void)
 	at91_set_A_periph(AT91_PIN_PB13, 1);		/* DTXD */
 }
 
+static struct resource uart0_resources[] = {
+	[0] = {
+		.start	= AT91SAM9G45_BASE_US0,
+		.size	= 4096,
+	},
+};
+
 static struct device_d uart0_serial_device = {
 	.id	  = -1,
 	.name     = "atmel_serial",
-	.map_base = AT91SAM9G45_BASE_US0,
-	.size     = 4096,
+	.resource	= uart0_resources,
+	.num_resources	= ARRAY_SIZE(uart0_resources),
 };
 
 static inline void configure_usart0_pins(unsigned pins)
@@ -153,11 +184,18 @@ static inline void configure_usart0_pins(unsigned pins)
 		at91_set_B_periph(AT91_PIN_PB15, 0);	/* CTS0 */
 }
 
+static struct resource uart1_resources[] = {
+	[0] = {
+		.start	= AT91SAM9G45_BASE_US1,
+		.size	= 4096,
+	},
+};
+
 static struct device_d uart1_serial_device = {
 	.id	  = -1,
 	.name     = "atmel_serial",
-	.map_base = AT91SAM9G45_BASE_US1,
-	.size     = 4096,
+	.resource	= uart1_resources,
+	.num_resources	= ARRAY_SIZE(uart1_resources),
 };
 
 static inline void configure_usart1_pins(unsigned pins)
@@ -171,11 +209,18 @@ static inline void configure_usart1_pins(unsigned pins)
 		at91_set_A_periph(AT91_PIN_PD17, 0);	/* CTS1 */
 }
 
+static struct resource uart2_resources[] = {
+	[0] = {
+		.start	= AT91SAM9G45_BASE_US2,
+		.size	= 4096,
+	},
+};
+
 static struct device_d uart2_serial_device = {
 	.id	  = -1,
 	.name     = "atmel_serial",
-	.map_base = AT91SAM9G45_BASE_US2,
-	.size     = 4096,
+	.resource	= uart2_resources,
+	.num_resources	= ARRAY_SIZE(uart2_resources),
 };
 
 static inline void configure_usart2_pins(unsigned pins)
@@ -189,11 +234,18 @@ static inline void configure_usart2_pins(unsigned pins)
 		at91_set_B_periph(AT91_PIN_PC11, 0);	/* CTS2 */
 }
 
+static struct resource uart3_resources[] = {
+	[0] = {
+		.start	= AT91SAM9G45_BASE_US3,
+		.size	= 4096,
+	},
+};
+
 static struct device_d uart3_serial_device = {
 	.id	  = -1,
 	.name     = "atmel_serial",
-	.map_base = AT91SAM9G45_ID_US3,
-	.size     = 4096,
+	.resource	= uart3_resources,
+	.num_resources	= ARRAY_SIZE(uart3_resources),
 };
 
 static inline void configure_usart3_pins(unsigned pins)
diff --git a/arch/arm/mach-imx/devices.c b/arch/arm/mach-imx/devices.c
index 11cf2a4..e89f8bb 100644
--- a/arch/arm/mach-imx/devices.c
+++ b/arch/arm/mach-imx/devices.c
@@ -9,8 +9,8 @@ static struct device_d *imx_add_device(char *name, int id, void *base, int size,
 	dev = xzalloc(sizeof(*dev));
 	strcpy(dev->name,name);
 	dev->id = id;
-	dev->map_base = (unsigned long)base;
-	dev->size = size;
+	dev_resource_set_start(dev, (unsigned long)base);
+	dev_resource_set_size(dev, (unsigned long)size);
 	dev->platform_data = pdata;
 
 	register_device(dev);
diff --git a/arch/arm/mach-imx/iim.c b/arch/arm/mach-imx/iim.c
index 0774ebb..ce3dc7a 100644
--- a/arch/arm/mach-imx/iim.c
+++ b/arch/arm/mach-imx/iim.c
@@ -89,18 +89,22 @@ static ssize_t imx_iim_read(struct cdev *cdev, void *buf, size_t count,
 
 	size = min((ulong)count, dev->size - offset);
 	if (explicit_sense) {
+		resource_size_t map_base = dev_resource_get_start(dev->parent);
+
 		for (i = 0; i < size; i++) {
 			int row_val;
 
-			row_val = do_fuse_sense(dev->parent->map_base,
-				dev->id, (offset+i)*4);
+			row_val = do_fuse_sense(map_base, dev->id,
+						(offset+i)*4);
 			if (row_val < 0)
 				return row_val;
 			((u8 *)buf)[i] = (u8)row_val;
 		}
 	} else {
+		resource_size_t map_base = dev_resource_get_start(dev);
+
 		for (i = 0; i < size; i++)
-			((u8 *)buf)[i] = ((u8 *)dev->map_base)[(offset+i)*4];
+			((u8 *)buf)[i] = ((u8 *)map_base)[(offset+i)*4];
 	}
 
 	return size;
@@ -186,9 +190,10 @@ static ssize_t imx_iim_write(struct cdev *cdev, const void *buf, size_t count,
 #ifdef CONFIG_IMX_IIM_FUSE_BLOW
 	if (blow_enable) {
 		for (i = 0; i < size; i++) {
+			resource_size_t map_base = dev_resource_get_start(dev-parent);
 			int ret;
 
-			ret = do_fuse_blow(dev->parent->map_base, dev->id,
+			ret = do_fuse_blow(map_base, dev->id,
 					(offset+i)*4, ((u8 *)buf)[i]);
 			if (ret < 0)
 				return ret;
@@ -196,8 +201,10 @@ static ssize_t imx_iim_write(struct cdev *cdev, const void *buf, size_t count,
 	} else
 #endif /* CONFIG_IMX_IIM_FUSE_BLOW */
 	{
+		resource_size_t map_base = dev_resource_get_start(dev);
+	
 		for (i = 0; i < size; i++)
-			((u8 *)dev->map_base)[(offset+i)*4] = ((u8 *)buf)[i];
+			((u8 *)map_base)[(offset+i)*4] = ((u8 *)buf)[i];
 	}
 
 	return size;
diff --git a/arch/arm/mach-imx/imx25.c b/arch/arm/mach-imx/imx25.c
index 37eafaf..2468d22 100644
--- a/arch/arm/mach-imx/imx25.c
+++ b/arch/arm/mach-imx/imx25.c
@@ -49,6 +49,12 @@ u64 imx_uid(void)
 	return uid;
 }
 
+static struct resource imx25_iim_dev_resources[] = {
+	[0] = {
+		.start	= IMX_IIM_BASE,
+	},
+};
+
 static struct imx_iim_platform_data imx25_iim_pdata = {
 	.mac_addr_base	= IIM_MAC_ADDR,
 };
@@ -56,29 +62,51 @@ static struct imx_iim_platform_data imx25_iim_pdata = {
 static struct device_d imx25_iim_dev = {
 	.id		= -1,
 	.name		= "imx_iim",
-	.map_base	= IMX_IIM_BASE,
+	.num_resources	= ARRAY_SIZE(imx25_iim_dev_resources),
+	.resource	= imx25_iim_dev_resources,
 	.platform_data	= &imx25_iim_pdata,
 };
 
+static struct resource imx25_iim_bank0_dev_resources[] = {
+	[0] = {
+		.start	= IIM_BANK0_BASE,
+		.size	= IIM_BANK_SIZE,
+	},
+};
+
 static struct device_d imx25_iim_bank0_dev = {
 	.name		= "imx_iim_bank",
 	.id		= 0,
-	.map_base	= IIM_BANK0_BASE,
-	.size		= IIM_BANK_SIZE,
+	.num_resources	= ARRAY_SIZE(imx25_iim_bank0_dev_resources),
+	.resource	= imx25_iim_bank0_dev_resources,
+};
+
+static struct resource imx25_iim_bank1_dev_resources[] = {
+	[0] = {
+		.start	= IIM_BANK1_BASE,
+		.size	= IIM_BANK_SIZE,
+	},
 };
 
 static struct device_d imx25_iim_bank1_dev = {
 	.name		= "imx_iim_bank",
 	.id		= 1,
-	.map_base	= IIM_BANK1_BASE,
-	.size		= IIM_BANK_SIZE,
+	.num_resources	= ARRAY_SIZE(imx25_iim_bank1_dev_resources),
+	.resource	= imx25_iim_bank1_dev_resources,
+};
+
+static struct resource imx25_iim_bank2_dev_resources[] = {
+	[0] = {
+		.start	= IIM_BANK2_BASE,
+		.size	= IIM_BANK_SIZE,
+	},
 };
 
 static struct device_d imx25_iim_bank2_dev = {
 	.name		= "imx_iim_bank",
 	.id		= 2,
-	.map_base	= IIM_BANK2_BASE,
-	.size		= IIM_BANK_SIZE,
+	.num_resources	= ARRAY_SIZE(imx25_iim_bank2_dev_resources),
+	.resource	= imx25_iim_bank2_dev_resources,
 };
 
 static int imx25_iim_init(void)
diff --git a/arch/arm/mach-nomadik/8815.c b/arch/arm/mach-nomadik/8815.c
index 5844c68..74bbb94 100644
--- a/arch/arm/mach-nomadik/8815.c
+++ b/arch/arm/mach-nomadik/8815.c
@@ -31,37 +31,54 @@ static struct clk st8815_clk_48 = {
        .rate = 48 * 1000 * 1000,
 };
 
-static struct memory_platform_data ram_pdata = {
-	.name = "ram0",
-	.flags = DEVFS_RDWR,
+static struct resource sdram_dev_resources[] = {
+	[0] = {
+		.name	= "ram0",
+		.start	= 0x00000000,
+		.flags	= DEVFS_RDWR,
+	},
 };
 
 static struct device_d sdram_dev = {
 	.id = -1,
 	.name = "mem",
-	.map_base = 0x00000000,
-	.platform_data = &ram_pdata,
+	.num_resources	= ARRAY_SIZE(sdram_dev_resources),
+	.resource	= sdram_dev_resources,
 };
 
 void st8815_add_device_sdram(u32 size)
 {
-	sdram_dev.size = size;
+	dev_resource_set_size(&sdram_dev, size);
 	register_device(&sdram_dev);
 	armlinux_add_dram(&sdram_dev);
 }
 
+static struct resource uart0_serial_resources[] = {
+	[0] = {
+		.start	= NOMADIK_UART0_BASE,
+		.size	= 4096,
+	},
+};
+
 static struct device_d uart0_serial_device = {
 	.id = 0,
 	.name = "uart-pl011",
-	.map_base = NOMADIK_UART0_BASE,
-	.size = 4096,
+	.num_resources	= ARRAY_SIZE(uart0_serial_resources),
+	.resource	= uart0_serial_resources,
+};
+
+static struct resource uart1_serial_resources[] = {
+	[0] = {
+		.start	= NOMADIK_UART1_BASE,
+		.size	= 4096,
+	},
 };
 
 static struct device_d uart1_serial_device = {
 	.id = 1,
 	.name = "uart-pl011",
-	.map_base = NOMADIK_UART1_BASE,
-	.size = 4096,
+	.num_resources	= ARRAY_SIZE(uart1_serial_resources),
+	.resource	= uart1_serial_resources,
 };
 
 void st8815_register_uart(unsigned id)
diff --git a/arch/blackfin/boards/ipe337/ipe337.c b/arch/blackfin/boards/ipe337/ipe337.c
index 61bcd43..c1c88fe 100644
--- a/arch/blackfin/boards/ipe337/ipe337.c
+++ b/arch/blackfin/boards/ipe337/ipe337.c
@@ -5,31 +5,48 @@
 #include <partition.h>
 #include <fs.h>
 
+static struct resource cfi_dev_resources[] = {
+	[0] = {
+		.start	= 0x20000000,
+		.size	= 32 * 1024 * 1024,
+	},
+};
+
 static struct device_d cfi_dev = {
 	.id	  = -1,
 	.name     = "cfi_flash",
-	.map_base = 0x20000000,
-	.size     = 32 * 1024 * 1024,
+	.num_resources	= ARRAY_SIZE(cfi_dev_resources),
+	.resource	= cfi_dev_resources,
 };
 
-static struct memory_platform_data ram_pdata = {
-	.name = "ram0",
-	.flags = DEVFS_RDWR,
+static struct resource sdram_dev_resources[] = {
+	[0] = {
+		.name	= "ram0",
+		.start	= 0x00000000,
+		.size	= 128 * 1024 * 1024,
+		.flags	= DEVFS_RDWR,
+	},
 };
 
 static struct device_d sdram_dev = {
 	.id	  = -1,
 	.name     = "mem",
-	.map_base = 0x0,
-	.size     = 128 * 1024 * 1024,
-	.platform_data = &ram_pdata,
+	.num_resources	= ARRAY_SIZE(sdram_dev_resources),
+	.resource	= sdram_dev_resources,
+};
+
+static struct resource smc911x_dev_resources[] = {
+	[0] = {
+		.start	= 0x24000000,
+		.size	= 4096,
+	},
 };
 
 static struct device_d smc911x_dev = {
 	.id	  = -1,
 	.name     = "smc911x",
-	.map_base = 0x24000000,
-	.size     = 4096,
+	.num_resources	= ARRAY_SIZE(smc911x_dev_resources),
+	.resource	= smc911x_dev_resources,
 };
 
 static int ipe337_devices_init(void) {
@@ -54,11 +71,18 @@ static int ipe337_devices_init(void) {
 
 device_initcall(ipe337_devices_init);
 
+static struct resource blackfin_serial_resources[] = {
+	[0] = {
+		.start	= 0x00000000,
+		.size	= 4096,
+	},
+};
+
 static struct device_d blackfin_serial_device = {
 	.id	  = -1,
 	.name     = "blackfin_serial",
-	.map_base = 0,
-	.size     = 4096,
+	.num_resources	= ARRAY_SIZE(blackfin_serial_resources),
+	.resource	= blackfin_serial_resources,
 };
 
 static int blackfin_console_init(void)
diff --git a/arch/m68k/boards/kp_ukd_r1_num/kp_ukd_r1_num.c b/arch/m68k/boards/kp_ukd_r1_num/kp_ukd_r1_num.c
index 7475ab3..6a7abdd 100644
--- a/arch/m68k/boards/kp_ukd_r1_num/kp_ukd_r1_num.c
+++ b/arch/m68k/boards/kp_ukd_r1_num/kp_ukd_r1_num.c
@@ -41,34 +41,59 @@ ulong mcfv4e_get_bus_clk(void)
  * Up to 64MiB NOR type flash, connected to
  * CS line 0, data width is 32 bit
  */
+static struct resource cfi_dev_resources[] = {
+	[0] = {
+		.start	= CFG_FLASH_ADDRESS,
+		.size	= CFG_FLASH_SIZE,
+	},
+};
+
 static struct device_d cfi_dev = {
 	.id	  = -1,
 	.name     = "cfi_flash",
-	.map_base = CFG_FLASH_ADDRESS,
-	.size     = CFG_FLASH_SIZE,
+	.num_resources	= ARRAY_SIZE(cfi_dev_resources),
+	.resource	= cfi_dev_resources,
 };
 
 /*
  * up to 2MiB static RAM type memory, connected
  * to CS4, data width is 16 bit
  */
-//static struct device_d sram_dev = {
-//	.id	  = -1,
-//	.name     = "sram",
-//FIXME	.map_base = IMX_CS4_BASE,
-//FIXME	.size     = IMX_CS4_RANGE,	/* area size */
-//};
+#if 0
+static struct resource sram_dev_resources[] = {
+	[0] = {
+		.start	= IMX_CS4_BASE,
+		.size	= IMX_CS4_RANGE,	/* area size */
+	},
+};
+
+static struct device_d sram_dev = {
+	.id	  = -1,
+	.name     = "sram",
+	/* FIXME */
+	.num_resources	= ARRAY_SIZE(sram_dev_resources),
+	.resource	= sram_dev_resources,
+};
+#endif
 
 /*
  * ?MiB NAND type flash, data width 8 bit
  */
-//static struct device_d nand_dev = {
-//	.id	  = -1,
-//	.name     = "cfi_flash_nand",
-//	.map_base = 0xfc000000,	/* FIXME */
-//	.size     = 32 * 1024 * 1024,	/* FIXME */
-//};
+#if 0
+static struct resource nand_dev_resources[] = {
+	[0] = {
+		.start	= 0xfc000000,		/* FIXME */
+		.size	= 32 * 1024 * 1024,	/* FIXME */
+	},
+};
 
+static struct device_d nand_dev = {
+	.id	  = -1,
+	.name     = "cfi_flash_nand",
+	.num_resources	= ARRAY_SIZE(nand_dev_resources),
+	.resource	= nand_dev_resources,
+};
+#endif
 
 /*
  * Build in FastEthernetControllers (FECs)
@@ -77,35 +102,53 @@ static struct fec_platform_data fec_info = {
 	.xcv_type = MII100,
 };
 
+static struct resource network_dev0_resources[] = {
+	[0] = {
+		.start	= MCF_FEC_ADDR(0),
+		.size	= MCF_FEC_SIZE(0),	/* area size */
+	},
+};
+
 static struct device_d network_dev0 = {
 	.id	  = -1,
 	.name     = "fec_mcf54xx",
-	.map_base = MCF_FEC_ADDR(0),
-	.size     = MCF_FEC_SIZE(0),	   /* area size */
+	.num_resources	= ARRAY_SIZE(network_dev0_resources),
+	.resource	= network_dev0_resources,
 	.platform_data	= &fec_info,
 };
+
+static struct resource network_dev1_resources[] = {
+	[0] = {
+		.start	= MCF_FEC_ADDR(1),
+		.size	= MCF_FEC_SIZE(1),	/* area size */
+	},
+};
+
 static struct device_d network_dev1 = {
 	.id	  = -1,
 	.name     = "fec_mcf54xx",
-	.map_base = MCF_FEC_ADDR(1),
-	.size     = MCF_FEC_SIZE(1),	   /* area size */
+	.num_resources	= ARRAY_SIZE(network_dev1_resources),
+	.resource	= network_dev1_resources,
 	.platform_data	= &fec_info,
 };
 
 /*
  * 128MiB of SDRAM, data width is 32 bit
  */
-static struct memory_platform_data ram_pdata = {
-	.name = "ram0",
-	.flags = DEVFS_RDWR,
+static struct resource sdram_dev_resources[] = {
+	[0] = {
+		.name	= "ram0",
+		.start	= CFG_SDRAM_ADDRESS,
+		.size	= CFG_SDRAM_SIZE,
+		.flags	= DEVFS_RDWR,
+	},
 };
 
 static struct device_d sdram_dev = {
 	.id	  = -1,
 	.name     = "mem",
-	.map_base = CFG_SDRAM_ADDRESS,
-	.size     = CFG_SDRAM_SIZE,
-	.platform_data = &ram_pdata,
+	.num_resources	= ARRAY_SIZE(sdram_dev_resources),
+	.resource	= sdram_dev_resources,
 };
 
 static int mcfv4e_devices_init(void)
@@ -139,11 +182,18 @@ static int mcfv4e_devices_init(void)
 
 device_initcall(mcfv4e_devices_init);
 
+static struct resource mcfv4e_serial_resources[] = {
+	[0] = {
+		.start	= 1 + CFG_EARLY_UART_PORT,
+		.size	= 16 * 1024,
+	},
+};
+
 static struct device_d mcfv4e_serial_device = {
 	.id	  = -1,
 	.name     = "mcfv4e_serial",
-	.map_base = 1+CFG_EARLY_UART_PORT,
-	.size     = 16 * 1024,
+	.num_resources	= ARRAY_SIZE(mcfv4e_serial_resources),
+	.resource	= mcfv4e_serial_resources,
 };
 
 static int mcfv4e_console_init(void)
diff --git a/arch/m68k/boards/phycore_mcf54xx/phyCore_MCF54xx.c b/arch/m68k/boards/phycore_mcf54xx/phyCore_MCF54xx.c
index 3744950..19dad3d 100644
--- a/arch/m68k/boards/phycore_mcf54xx/phyCore_MCF54xx.c
+++ b/arch/m68k/boards/phycore_mcf54xx/phyCore_MCF54xx.c
@@ -44,12 +44,19 @@ ulong mcfv4e_get_bus_clk(void)
  * Up to 64MiB NOR type flash, connected to
  * CS line 0, data width is 32 bit
  */
+static struct resource cfi_dev_resources[] = {
+	[0] = {
+		.start	= CFG_FLASH_ADDRESS,
+		.size	= CFG_FLASH_SIZE,
+	},
+};
+
 static struct device_d cfi_dev =
 {
 	.id	  = -1,
 	.name     = "cfi_flash",
-	.map_base = CFG_FLASH_ADDRESS,
-	.size     = CFG_FLASH_SIZE,
+	.num_resources	= ARRAY_SIZE(cfi_dev_resources),
+	.resource	= cfi_dev_resources,
 };
 
 /*
@@ -60,38 +67,53 @@ static struct fec_platform_data fec_info =
 	.xcv_type = MII100,
 };
 
-static struct device_d network_dev0 =
-{
+static struct resource network_dev0_resources[] = {
+	[0] = {
+		.start	= MCF_FEC_ADDR(0),
+		.size	= MCF_FEC_SIZE(0),	/* area size */
+	},
+};
+
+static struct device_d network_dev0 = {
 	.id	  = -1,
 	.name     = "fec_mcf54xx",
-	.map_base = MCF_FEC_ADDR(0),
-	.size     = MCF_FEC_SIZE(0),	   /* area size */
+	.num_resources	= ARRAY_SIZE(network_dev0_resources),
+	.resource	= network_dev0_resources,
 	.platform_data	= &fec_info,
 };
-static struct device_d network_dev1 =
-{
+
+static struct resource network_dev1_resources[] = {
+	[0] = {
+		.start	= MCF_FEC_ADDR(1),
+		.size	= MCF_FEC_SIZE(1),	/* area size */
+	},
+};
+
+static struct device_d network_dev1 = {
 	.id	  = -1,
 	.name     = "fec_mcf54xx",
-	.map_base = MCF_FEC_ADDR(1),
-	.size     = MCF_FEC_SIZE(1),	   /* area size */
+	.num_resources	= ARRAY_SIZE(network_dev1_resources),
+	.resource	= network_dev1_resources,
 	.platform_data	= &fec_info,
 };
 
 /*
  * 128MiB of SDRAM, data width is 32 bit
  */
-static struct memory_platform_data ram_pdata = {
-	.name = "ram0",
-	.flags = DEVFS_RDWR,
+static struct resource sdram_dev_resources[] = {
+	[0] = {
+		.name	= "ram0",
+		.start	= CFG_SDRAM_ADDRESS,
+		.size	= CFG_SDRAM_SIZE,
+		.flags	= DEVFS_RDWR,
+	},
 };
 
-static struct device_d sdram_dev =
-{
+static struct device_d sdram_dev = {
 	.id	  = -1,
 	.name     = "mem",
-	.map_base = CFG_SDRAM_ADDRESS,
-	.size     = CFG_SDRAM_SIZE,
-	.platform_data = &ram_pdata,
+	.num_resources	= ARRAY_SIZE(sdram_dev_resources),
+	.resource	= sdram_dev_resources,
 };
 
 static int mcfv4e_devices_init(void)
@@ -118,12 +140,18 @@ static int mcfv4e_devices_init(void)
 
 device_initcall(mcfv4e_devices_init);
 
-static struct device_d mcfv4e_serial_device =
-{
+static struct resource mcfv4e_serial_resources[] = {
+	[0] = {
+		.start	= 1 + CFG_EARLY_UART_PORT,
+		.size	= 16 * 1024,
+	},
+};
+
+static struct device_d mcfv4e_serial_device = {
 	.id	  = -1,
 	.name     = "mcfv4e_serial",
-	.map_base = 1 + CFG_EARLY_UART_PORT,
-	.size     = 16 * 1024,
+	.num_resources	= ARRAY_SIZE(mcfv4e_serial_resources),
+	.resource	= mcfv4e_serial_resources,
 };
 
 static int mcfv4e_console_init(void)
diff --git a/arch/ppc/boards/pcm030/pcm030.c b/arch/ppc/boards/pcm030/pcm030.c
index 8b43550..3eb2f88 100644
--- a/arch/ppc/boards/pcm030/pcm030.c
+++ b/arch/ppc/boards/pcm030/pcm030.c
@@ -37,34 +37,51 @@
 #include <mem_malloc.h>
 #include <reloc.h>
 
+static struct resource cfi_dev_resources[] = {
+	[0] = {
+		.start	= 0xff000000,
+		.size	= 16 * 1024 * 1024,
+	},
+};
+
 struct device_d cfi_dev = {
 	.id	  = -1,
 	.name     = "cfi_flash",
-	.map_base = 0xff000000,
-	.size     = 16 * 1024 * 1024,
+	.num_resources	= ARRAY_SIZE(cfi_dev_resources),
+	.resource	= cfi_dev_resources,
 };
 
-static struct memory_platform_data ram_pdata = {
-	.name = "ram0",
-	.flags = DEVFS_RDWR,
+static struct resource sdram_dev_resources[] = {
+	[0] = {
+		.name	= "ram0",
+		.start	= 0x00000000,
+		.size	= 64 * 1024 * 1024,
+		.flags	= DEVFS_RDWR,
+	},
 };
 
 struct device_d sdram_dev = {
 	.id	  = -1,
 	.name     = "mem",
-	.map_base = 0x0,
-	.size     = 64 * 1024 * 1024,
-	.platform_data = &ram_pdata,
+	.num_resources	= ARRAY_SIZE(sdram_dev_resources),
+	.resource	= sdram_dev_resources,
 };
 
 static struct mpc5xxx_fec_platform_data fec_info = {
 	.xcv_type = MII100,
 };
 
+static struct resource eth_dev_resources[] = {
+	[0] = {
+		.start	= MPC5XXX_FEC,
+	},
+};
+
 struct device_d eth_dev = {
 	.id		= -1,
 	.name		= "fec_mpc5xxx",
-	.map_base	= MPC5XXX_FEC,
+	.num_resources	= ARRAY_SIZE(eth_dev_resources),
+	.resource	= eth_dev_resources,
 	.platform_data	= &fec_info,
 };
 
@@ -82,18 +99,32 @@ static int devices_init (void)
 
 device_initcall(devices_init);
 
+static struct resource psc3_resources[] = {
+	[0] = {
+		.start	= MPC5XXX_PSC3,
+		.size	= 4096,
+	},
+};
+
 static struct device_d psc3 = {
 	.id	  = -1,
 	.name     = "mpc5xxx_serial",
-	.map_base = MPC5XXX_PSC3,
-	.size     = 4096,
+	.num_resources	= ARRAY_SIZE(psc3_resources),
+	.resource	= psc3_resources,
+};
+
+static struct resource psc6_resources[] = {
+	[0] = {
+		.start	= MPC5XXX_PSC6,
+		.size	= 4096,
+	},
 };
 
 static struct device_d psc6 = {
 	.id	  = -1,
 	.name     = "mpc5xxx_serial",
-	.map_base = MPC5XXX_PSC6,
-	.size     = 4096,
+	.num_resources	= ARRAY_SIZE(psc6_resources),
+	.resource	= psc6_resources,
 };
 
 static int console_init(void)
@@ -133,7 +164,7 @@ static void sdram_start (int hi_addr)
 	*(vu_long *)MPC5XXX_SDRAM_MODE = SDRAM_EMODE;
 	__asm__ volatile ("sync");
 
-	/* set mode register: reset DLL */
+	/* set mode register:map_baset DLL */
 	*(vu_long *)MPC5XXX_SDRAM_MODE = SDRAM_MODE | 0x04000000;
 	__asm__ volatile ("sync");
 #endif
@@ -142,7 +173,7 @@ static void sdram_start (int hi_addr)
 	*(vu_long *)MPC5XXX_SDRAM_CTRL = SDRAM_CONTROL | 0x80000002 | hi_addr_bit;
 	__asm__ volatile ("sync");
 
-	/* auto refresh */
+	/* auto remap_baseth */
 	*(vu_long *)MPC5XXX_SDRAM_CTRL = SDRAM_CONTROL | 0x80000004 | hi_addr_bit;
 	__asm__ volatile ("sync");
 
diff --git a/arch/sandbox/board/hostfile.c b/arch/sandbox/board/hostfile.c
index 38a52a8..30581c7 100644
--- a/arch/sandbox/board/hostfile.c
+++ b/arch/sandbox/board/hostfile.c
@@ -108,8 +108,8 @@ int barebox_register_filedev(struct hf_platform_data *hf)
 	dev->platform_data = hf;
 
 	strcpy(dev->name, "hostfile");
-	dev->size = hf->size;
-	dev->map_base = hf->map_base;
+	dev_resource_set_size(dev, hf->size);
+	dev_resource_set_start(dev, hf->start);
 
 	return register_device(dev);
 }
diff --git a/arch/sandbox/mach-sandbox/include/mach/hostfile.h b/arch/sandbox/mach-sandbox/include/mach/hostfile.h
index f7aca7c..bd89e48 100644
--- a/arch/sandbox/mach-sandbox/include/mach/hostfile.h
+++ b/arch/sandbox/mach-sandbox/include/mach/hostfile.h
@@ -1,10 +1,16 @@
 #ifndef __ASM_ARCH_HOSTFILE_H
 #define __ASM_ARCH_HOSTFILE_H
 
+#ifdef CONFIG_PHYS_ADDR_T_64BIT
+typedef uint64_t __resource_size_t;
+#else
+typedef uint32_t __resource_size_t;
+#endif
+
 struct hf_platform_data {
 	int fd;
-	size_t size;
-	unsigned long map_base;
+	__resource_size_t start;
+	__resource_size_t size;
 	char *filename;
 	char *name;
 };
diff --git a/arch/sandbox/os/common.c b/arch/sandbox/os/common.c
index 287be0d..c814751 100644
--- a/arch/sandbox/os/common.c
+++ b/arch/sandbox/os/common.c
@@ -256,10 +256,10 @@ static int add_image(char *str, char *name)
 	hf->name = strdup(name);
 
 	if (map) {
-		hf->map_base = (unsigned long)mmap(NULL, hf->size,
+		hf->start = (unsigned long)mmap(NULL, hf->size,
 				PROT_READ | (readonly ? 0 : PROT_WRITE),
 				MAP_SHARED, fd, 0);
-		if ((void *)hf->map_base == MAP_FAILED)
+		if (((void *)hf->start) == MAP_FAILED)
 			printf("warning: mmapping %s failed\n", file);
 	}
 
diff --git a/arch/x86/boards/x86_generic/generic_pc.c b/arch/x86/boards/x86_generic/generic_pc.c
index b9c31aa..9b5fc4e 100644
--- a/arch/x86/boards/x86_generic/generic_pc.c
+++ b/arch/x86/boards/x86_generic/generic_pc.c
@@ -30,17 +30,20 @@
 #include <asm/syslib.h>
 #include <ns16550.h>
 
-static struct memory_platform_data ram_pdata = {
-	.name		= "ram0",
-	.flags		= DEVFS_RDWR,
+static struct resource sdram_dev_resources[] = {
+	[0] = {
+		.name	= "ram0",
+		.start	= 0x00000000,
+		.size	= 16 * 1024 * 1024,
+		.flags	= DEVFS_RDWR,
+	},
 };
 
 static struct device_d sdram_dev = {
 	.id		= -1,
 	.name		= "mem",
-	.size		= 16 * 1024 * 1024,
-	.map_base	= 0,
-	.platform_data	= &ram_pdata,
+	.num_resources	= ARRAY_SIZE(sdram_dev_resources),
+	.resource	= sdram_dev_resources,
 };
 
 static struct device_d bios_disk_dev = {
@@ -96,12 +99,19 @@ static struct NS16550_plat serial_plat = {
 };
 
 /* we are expecting always one serial interface */
+static struct resource generic_pc_serial_resources[] = {
+	[0] = {
+		.start = 0x000003f8,
+		.size = 8,
+	},
+};
+
 static struct device_d generic_pc_serial_device = {
-       .id = -1,
-       .name = "serial_ns16550",
-       .map_base = 0x3f8,
-       .size = 8,
-       .platform_data = (void *)&serial_plat,
+	.id = -1,
+	.name = "serial_ns16550",
+	.num_resources	= ARRAY_SIZE(generic_pc_serial_resources),
+	.resource	= generic_pc_serial_resources,
+	.platform_data = (void *)&serial_plat,
 };
 
 static int pc_console_init(void)
diff --git a/commands/mem.c b/commands/mem.c
index 73bf915..05956ab 100644
--- a/commands/mem.c
+++ b/commands/mem.c
@@ -589,14 +589,14 @@ static struct file_operations memops = {
 
 static int mem_probe(struct device_d *dev)
 {
-	struct memory_platform_data *pdata = dev->platform_data;
+	struct resource *res = &dev->resource[0];
 	struct cdev *cdev;
 
 	cdev = xzalloc(sizeof (*cdev));
 	dev->priv = cdev;
 
-	cdev->name = pdata->name;
-	cdev->size = dev->size;
+	cdev->name = (char*)res->name;
+	cdev->size = res->size;
 	cdev->ops = &memops;
 	cdev->dev = dev;
 
@@ -610,17 +610,20 @@ static struct driver_d mem_drv = {
 	.probe = mem_probe,
 };
 
-static struct memory_platform_data mem_dev_pdata = {
-	.name = "mem",
-	.flags = DEVFS_RDWR,
+static struct resource mem_dev_resources[] = {
+	[0] = {
+		.name	= "mem",
+		.start	= 0x00000000,
+		.size   = ~0, /* FIXME: should be 0x100000000, ahem... */
+		.flags	= DEVFS_RDWR,
+	},
 };
 
 static struct device_d mem_dev = {
 	.id = -1,
 	.name  = "mem",
-	.map_base = 0,
-	.size   = ~0, /* FIXME: should be 0x100000000, ahem... */
-	.platform_data = &mem_dev_pdata,
+	.num_resources	= ARRAY_SIZE(mem_dev_resources),
+	.resource	= mem_dev_resources,
 };
 
 static int mem_init(void)
diff --git a/common/startup.c b/common/startup.c
index 84a59c5..b8852ef 100644
--- a/common/startup.c
+++ b/common/startup.c
@@ -81,20 +81,23 @@ void early_init (void)
 #ifdef CONFIG_DEFAULT_ENVIRONMENT
 #include <generated/barebox_default_env.h>
 
-static struct memory_platform_data default_env_platform_data = {
-	.name = "defaultenv",
+static struct resource default_env_resources[] = {
+	[0] = {
+		.name = "defaultenv",
+	},
 };
 
 static struct device_d default_env_dev = {
 	.id		= -1,
 	.name		= "mem",
-	.platform_data	= &default_env_platform_data,
+	.num_resources	= ARRAY_SIZE(default_env_resources),
+	.resource	= default_env_resources,
 };
 
 static int register_default_env(void)
 {
-	default_env_dev.map_base = (unsigned long)default_environment;
-	default_env_dev.size = sizeof(default_environment);
+	dev_resource_set_start(&default_env_dev, (resource_size_t)default_environment);
+	dev_resource_set_size(&default_env_dev, sizeof(default_environment));
 	register_device(&default_env_dev);
 	return 0;
 }
diff --git a/drivers/ata/bios.c b/drivers/ata/bios.c
index 51e2425..7601de2 100644
--- a/drivers/ata/bios.c
+++ b/drivers/ata/bios.c
@@ -257,8 +257,8 @@ static int biosdisk_probe(struct device_d *dev)
 
 		strcpy(drive_dev->name, "biosdisk");
 		drive_dev->id = drive - 0x80;
-		drive_dev->size = 1;
-		drive_dev->map_base = 0;
+		dev_resource_set_size(drive_dev, 1);
+		dev_resource_set_start(drive_dev, 0);
 		drive_dev->platform_data = p;
 
 		register_device(drive_dev);
diff --git a/drivers/ata/disk_drive.c b/drivers/ata/disk_drive.c
index a54429a..78640b2 100644
--- a/drivers/ata/disk_drive.c
+++ b/drivers/ata/disk_drive.c
@@ -275,6 +275,7 @@ static int disk_probe(struct device_d *dev)
 	int rc;
 	struct ata_interface *intf = dev->platform_data;
 	struct cdev *disk_cdev;
+	resource_size_t size = dev_resource_get_size(dev);
 
 	sector = xmalloc(SECTOR_SIZE);
 
@@ -302,14 +303,14 @@ static int disk_probe(struct device_d *dev)
 		disk_cdev->name = asprintf("disk%d", dev->id);
 
 	/* On x86, BIOS based disks are coming without a valid .size field */
-	if (dev->size == 0) {
+	if (size == 0) {
 		/*
 		 * We need always the size of the drive, else its nearly impossible
 		 * to do anything with it (at least with the generic routines)
 		 */
 		disk_cdev->size = 32;
 	} else
-		disk_cdev->size = dev->size;
+		disk_cdev->size = size;
 	disk_cdev->ops = &disk_ops;
 	disk_cdev->dev = dev;
 	devfs_create(disk_cdev);
@@ -320,12 +321,12 @@ static int disk_probe(struct device_d *dev)
 		goto on_error;
 	}
 
-	if (dev->size == 0) {
+	if (size == 0) {
 		/* guess the size of this drive if not otherwise given */
-		dev->size = disk_guess_size(dev,
+		size = disk_guess_size(dev,
 			(struct partition_entry*)&sector[446]) * SECTOR_SIZE;
-		dev_info(dev, "Drive size guessed to %u kiB\n", dev->size / 1024);
-		disk_cdev->size = dev->size;
+		dev_info(dev, "Drive size guessed to %u kiB\n", size / 1024);
+		disk_cdev->size = size;
 	}
 
 	rc = disk_register_partitions(dev, (struct partition_entry*)&sector[446]);
diff --git a/drivers/i2c/busses/i2c-imx.c b/drivers/i2c/busses/i2c-imx.c
index 266cb52..e69c827 100644
--- a/drivers/i2c/busses/i2c-imx.c
+++ b/drivers/i2c/busses/i2c-imx.c
@@ -112,7 +112,7 @@ struct imx_i2c_struct {
 #ifdef CONFIG_I2C_DEBUG
 static void i2c_imx_dump_reg(struct i2c_adapter *adapter)
 {
-	unsigned long base = adapter->dev->map_base;
+	unsigned long base = dev_resource_get_start(adapter->dev);
 	u32 reg_cr, reg_sr;
 
 	reg_cr = readb(base + IMX_I2C_I2CR);
@@ -140,7 +140,7 @@ static inline void i2c_imx_dump_reg(struct i2c_adapter *adapter)
 
 static int i2c_imx_bus_busy(struct i2c_adapter *adapter, int for_busy)
 {
-	unsigned long base = adapter->dev->map_base;
+	unsigned long base = dev_resource_get_start(adapter->dev);
 	uint64_t start;
 	unsigned int temp;
 
@@ -164,7 +164,7 @@ static int i2c_imx_bus_busy(struct i2c_adapter *adapter, int for_busy)
 
 static int i2c_imx_trx_complete(struct i2c_adapter *adapter)
 {
-	unsigned long base = adapter->dev->map_base;
+	unsigned long base = dev_resource_get_start(adapter->dev);
 	uint64_t start;
 
 	start = get_time_ns();
@@ -184,7 +184,7 @@ static int i2c_imx_trx_complete(struct i2c_adapter *adapter)
 
 static int i2c_imx_wait_iif(struct i2c_adapter *adapter)
 {
-	unsigned long base = adapter->dev->map_base;
+	unsigned long base = dev_resource_get_start(adapter->dev);
 	uint64_t start;
 
 	start = get_time_ns();
@@ -204,7 +204,7 @@ static int i2c_imx_wait_iif(struct i2c_adapter *adapter)
 
 static int i2c_imx_acked(struct i2c_adapter *adapter)
 {
-	unsigned long base = adapter->dev->map_base;
+	unsigned long base = dev_resource_get_start(adapter->dev);
 	uint64_t start;
 
 	start = get_time_ns();
@@ -225,7 +225,7 @@ static int i2c_imx_acked(struct i2c_adapter *adapter)
 static int i2c_imx_start(struct i2c_adapter *adapter)
 {
 	struct imx_i2c_struct *i2c_imx = to_imx_i2c_struct(adapter);
-	unsigned long base = adapter->dev->map_base;
+	unsigned long base = dev_resource_get_start(adapter->dev);
 	unsigned int temp = 0;
 	int result;
 
@@ -257,7 +257,7 @@ static int i2c_imx_start(struct i2c_adapter *adapter)
 static void i2c_imx_stop(struct i2c_adapter *adapter)
 {
 	struct imx_i2c_struct *i2c_imx = to_imx_i2c_struct(adapter);
-	unsigned long base = adapter->dev->map_base;
+	unsigned long base = dev_resource_get_start(adapter->dev);
 	unsigned int temp = 0;
 
 	if (!i2c_imx->stopped) {
@@ -321,7 +321,7 @@ static void i2c_imx_set_clk(struct imx_i2c_struct *i2c_imx,
 
 static int i2c_imx_write(struct i2c_adapter *adapter, struct i2c_msg *msgs)
 {
-	unsigned long base = adapter->dev->map_base;
+	unsigned long base = dev_resource_get_start(adapter->dev);
 	int i, result;
 
 	dev_dbg(adapter->dev,
@@ -358,7 +358,7 @@ static int i2c_imx_write(struct i2c_adapter *adapter, struct i2c_msg *msgs)
 static int i2c_imx_read(struct i2c_adapter *adapter, struct i2c_msg *msgs)
 {
 	struct imx_i2c_struct *i2c_imx = to_imx_i2c_struct(adapter);
-	unsigned long base = adapter->dev->map_base;
+	unsigned long base = dev_resource_get_start(adapter->dev);
 	int i, result;
 	unsigned int temp;
 
@@ -430,7 +430,7 @@ static int i2c_imx_read(struct i2c_adapter *adapter, struct i2c_msg *msgs)
 static int i2c_imx_xfer(struct i2c_adapter *adapter,
 			struct i2c_msg *msgs, int num)
 {
-	unsigned long base = adapter->dev->map_base;
+	unsigned long base = dev_resource_get_start(adapter->dev);
 	unsigned int i, temp;
 	int result;
 
@@ -472,7 +472,7 @@ static int __init i2c_imx_probe(struct device_d *pdev)
 {
 	struct imx_i2c_struct *i2c_imx;
 	struct i2c_platform_data *pdata;
-	unsigned long base = pdev->map_base;
+	unsigned long base = dev_resource_get_start(pdev);
 	int ret;
 
 	pdata = pdev->platform_data;
diff --git a/drivers/i2c/busses/i2c-omap.c b/drivers/i2c/busses/i2c-omap.c
index 8e7a8b5..2c48bba 100644
--- a/drivers/i2c/busses/i2c-omap.c
+++ b/drivers/i2c/busses/i2c-omap.c
@@ -716,7 +716,7 @@ i2c_omap_probe(struct device_d *pdev)
 {
 	struct omap_i2c_struct	*i2c_omap;
 	/* struct i2c_platform_data *pdata; */
-	/* unsigned long base = pdev->map_base; */
+	/* unsigned long base = dev_resource_get_start(pdev); */
 	int r;
 	u32 speed = 0;
 
@@ -732,7 +732,7 @@ i2c_omap_probe(struct device_d *pdev)
 		speed = 100;	/* Defualt speed */
 
 	i2c_omap->speed = speed;
-	i2c_omap->base = (void*)pdev->map_base;
+	i2c_omap->base = (void*)dev_resource_get_start(pdev);
 	printf ("I2C probe\n");
 	omap_i2c_unidle(i2c_omap);
 
diff --git a/drivers/mci/imx-esdhc.c b/drivers/mci/imx-esdhc.c
index 63cd059..38ea57f 100644
--- a/drivers/mci/imx-esdhc.c
+++ b/drivers/mci/imx-esdhc.c
@@ -457,7 +457,7 @@ static int fsl_esdhc_probe(struct device_d *dev)
 	mci = &host->mci;
 
 	host->dev = dev;
-	host->regs = (struct fsl_esdhc *)dev->map_base;
+	host->regs = (struct fsl_esdhc *)dev_resource_get_start(dev);
 
 	/* First reset the eSDHC controller */
 	ret = esdhc_reset(host->regs);
diff --git a/drivers/mci/imx.c b/drivers/mci/imx.c
index 8525692..af7090d 100644
--- a/drivers/mci/imx.c
+++ b/drivers/mci/imx.c
@@ -485,6 +485,7 @@ static int mxcmci_init(struct mci_host *mci, struct device_d *dev)
 static int mxcmci_probe(struct device_d *dev)
 {
 	struct mxcmci_host *host;
+	resource_size_t map_base = dev_resource_get_start(dev);
 
 	host = xzalloc(sizeof(*host));
 
@@ -493,7 +494,7 @@ static int mxcmci_probe(struct device_d *dev)
 	host->mci.init = mxcmci_init;
 	host->mci.host_caps = MMC_MODE_4BIT;
 
-	host->base = (struct mxcmci_regs *)dev->map_base;
+	host->base = (struct mxcmci_regs *)map_base;
 
 	host->mci.voltages = MMC_VDD_32_33 | MMC_VDD_33_34;
 
diff --git a/drivers/mci/mci-core.c b/drivers/mci/mci-core.c
index a8aa486..ae78ddc 100644
--- a/drivers/mci/mci-core.c
+++ b/drivers/mci/mci-core.c
@@ -1213,8 +1213,8 @@ static int mci_card_probe(struct device_d *mci_dev)
 	p->priv = mci_dev;
 
 	strcpy(disk_dev->name, "disk");
-	disk_dev->size = mci->capacity;
-	disk_dev->map_base = 0;
+	dev_resource_set_size(disk_dev, mci->capacity);
+	dev_resource_set_start(disk_dev, 0);
 	disk_dev->platform_data = p;
 
 	register_device(disk_dev);
diff --git a/drivers/mci/s3c.c b/drivers/mci/s3c.c
index 9810683..5c8f85b 100644
--- a/drivers/mci/s3c.c
+++ b/drivers/mci/s3c.c
@@ -211,6 +211,7 @@ static unsigned s3c_setup_clock_speed(struct device_d *hw_dev, unsigned nc)
 {
 	unsigned clock;
 	uint32_t mci_psc;
+	resource_size_t map_base = dev_resource_get_start(hw_dev);
 
 	if (nc == 0)
 		return 0;
@@ -224,7 +225,7 @@ static unsigned s3c_setup_clock_speed(struct device_d *hw_dev, unsigned nc)
 		pr_warning("SD/MMC clock might be too high!\n");
 	}
 
-	writel(mci_psc - 1, hw_dev->map_base + SDIPRE);
+	writel(mci_psc - 1, map_base + SDIPRE);
 
 	return clock / mci_psc;
 }
@@ -237,10 +238,12 @@ static unsigned s3c_setup_clock_speed(struct device_d *hw_dev, unsigned nc)
  */
 static void s3c_mci_reset(struct device_d *hw_dev)
 {
+	resource_size_t map_base = dev_resource_get_start(hw_dev);
+
 	/* reset the hardware */
-	writel(SDICON_SDRESET, hw_dev->map_base + SDICON);
+	writel(SDICON_SDRESET, map_base + SDICON);
 	/* wait until reset it finished */
-	while (readl(hw_dev->map_base + SDICON) & SDICON_SDRESET)
+	while (readl(map_base + SDICON) & SDICON_SDRESET)
 		;
 }
 
@@ -252,14 +255,15 @@ static void s3c_mci_reset(struct device_d *hw_dev)
 static int s3c_mci_initialize(struct device_d *hw_dev, struct device_d *mci_dev)
 {
 	struct s3c_mci_host *host_data = GET_HOST_DATA(hw_dev);
+	resource_size_t map_base = dev_resource_get_start(hw_dev);
 
 	s3c_mci_reset(hw_dev);
 
 	/* restore last settings */
 	host_data->clock = s3c_setup_clock_speed(hw_dev, host_data->clock);
-	writel(0x007FFFFF, hw_dev->map_base + SDITIMER);
-	writel(SDICON_MMCCLOCK, hw_dev->map_base + SDICON);
-	writel(512, hw_dev->map_base + SDIBSIZE);
+	writel(0x007FFFFF, map_base + SDITIMER);
+	writel(SDICON_MMCCLOCK, map_base + SDICON);
+	writel(512, map_base + SDIBSIZE);
 
 	return 0;
 }
@@ -335,11 +339,12 @@ static uint32_t s3c_prepare_data_setup(struct device_d *hw_dev, unsigned data_fl
 static int s3c_terminate_transfer(struct device_d *hw_dev)
 {
 	unsigned stoptries = 3;
+	resource_size_t map_base = dev_resource_get_start(hw_dev);
 
-	while (readl(hw_dev->map_base + SDIDSTA) & (SDIDSTA_TXDATAON | SDIDSTA_RXDATAON)) {
+	while (readl(map_base + SDIDSTA) & (SDIDSTA_TXDATAON | SDIDSTA_RXDATAON)) {
 		pr_debug("Transfer still in progress.\n");
 
-		writel(SDIDCON_STOP, hw_dev->map_base + SDIDCON);
+		writel(SDIDCON_STOP, map_base + SDIDCON);
 		s3c_mci_initialize(hw_dev, NULL);
 
 		if ((stoptries--) == 0) {
@@ -360,12 +365,13 @@ static int s3c_terminate_transfer(struct device_d *hw_dev)
 static int s3c_prepare_data_transfer(struct device_d *hw_dev, struct mci_data *data)
 {
 	uint32_t reg;
+	resource_size_t map_base = dev_resource_get_start(hw_dev);
 
-	writel(data->blocksize, hw_dev->map_base + SDIBSIZE);
+	writel(data->blocksize, map_base + SDIBSIZE);
 	reg = s3c_prepare_data_setup(hw_dev, data->flags);
 	reg |= data->blocks & SDIDCON_BLKNUM;
-	writel(reg, hw_dev->map_base + SDIDCON);
-	writel(0x007FFFFF, hw_dev->map_base + SDITIMER);
+	writel(reg, map_base + SDIDCON);
+	writel(0x007FFFFF, map_base + SDITIMER);
 
 	return 0;
 }
@@ -382,34 +388,35 @@ static int s3c_send_command(struct device_d *hw_dev, struct mci_cmd *cmd,
 {
 	uint32_t reg, t1;
 	int rc;
+	resource_size_t map_base = dev_resource_get_start(hw_dev);
 
-	writel(0x007FFFFF, hw_dev->map_base + SDITIMER);
+	writel(0x007FFFFF, map_base + SDITIMER);
 
 	/* setup argument */
-	writel(cmd->cmdarg, hw_dev->map_base + SDICMDARG);
+	writel(cmd->cmdarg, map_base + SDICMDARG);
 
 	/* setup command and transfer characteristic */
 	reg = s3c_prepare_command_setup(cmd->resp_type, data != NULL ? data->flags : 0);
 	reg |= cmd->cmdidx & SDICMDCON_INDEX;
 
 	/* run the command right now */
-	writel(reg | SDICMDCON_CMDSTART, hw_dev->map_base + SDICMDCON);
-	t1 = readl(hw_dev->map_base + SDICMDSTAT);
+	writel(reg | SDICMDCON_CMDSTART, map_base + SDICMDCON);
+	t1 = readl(map_base + SDICMDSTAT);
 	/* wait until command is done */
 	while (1) {
-		reg = readl(hw_dev->map_base + SDICMDSTAT);
+		reg = readl(map_base + SDICMDSTAT);
 		/* done? */
 		if (cmd->resp_type & MMC_RSP_PRESENT) {
 			if (reg & SDICMDSTAT_RSPFIN) {
 				writel(SDICMDSTAT_RSPFIN,
-					hw_dev->map_base + SDICMDSTAT);
+					map_base + SDICMDSTAT);
 				rc = 0;
 				break;
 			}
 		} else {
 			if (reg & SDICMDSTAT_CMDSENT) {
 					writel(SDICMDSTAT_CMDSENT,
-						hw_dev->map_base + SDICMDSTAT);
+						map_base + SDICMDSTAT);
 					rc = 0;
 					break;
 			}
@@ -417,17 +424,17 @@ static int s3c_send_command(struct device_d *hw_dev, struct mci_cmd *cmd,
 		/* timeout? */
 		if (reg & SDICMDSTAT_CMDTIMEOUT) {
 			writel(SDICMDSTAT_CMDTIMEOUT,
-				hw_dev->map_base + SDICMDSTAT);
+				map_base + SDICMDSTAT);
 			rc = -ETIMEDOUT;
 			break;
 		}
 	}
 
 	if ((rc == 0) && (cmd->resp_type & MMC_RSP_PRESENT)) {
-		cmd->response[0] = readl(hw_dev->map_base + SDIRSP0);
-		cmd->response[1] = readl(hw_dev->map_base + SDIRSP1);
-		cmd->response[2] = readl(hw_dev->map_base + SDIRSP2);
-		cmd->response[3] = readl(hw_dev->map_base + SDIRSP3);
+		cmd->response[0] = readl(map_base + SDIRSP0);
+		cmd->response[1] = readl(map_base + SDIRSP1);
+		cmd->response[2] = readl(map_base + SDIRSP2);
+		cmd->response[3] = readl(map_base + SDIRSP3);
 	}
 	/* do not disable the clock! */
 	return rc;
@@ -443,14 +450,15 @@ static int s3c_send_command(struct device_d *hw_dev, struct mci_cmd *cmd,
 static int s3c_prepare_engine(struct device_d *hw_dev)
 {
 	int rc;
+	resource_size_t map_base = dev_resource_get_start(hw_dev);
 
 	rc = s3c_terminate_transfer(hw_dev);
 	if (rc != 0)
 		return rc;
 
-	writel(-1, hw_dev->map_base + SDICMDSTAT);
-	writel(-1, hw_dev->map_base + SDIDSTA);
-	writel(-1, hw_dev->map_base + SDIFSTA);
+	writel(-1, map_base + SDICMDSTAT);
+	writel(-1, map_base + SDIDSTA);
+	writel(-1, map_base + SDIFSTA);
 
 	return 0;
 }
@@ -487,6 +495,7 @@ static int s3c_mci_read_block(struct device_d *hw_dev, struct mci_data *data)
 {
 	uint32_t *p;
 	unsigned cnt, data_size;
+	resource_size_t map_base = dev_resource_get_start(hw_dev);
 
 #define READ_REASON_TO_FAIL (SDIDSTA_CRCFAIL | SDIDSTA_RXCRCFAIL | SDIDSTA_DATATIMEOUT)
 
@@ -496,23 +505,23 @@ static int s3c_mci_read_block(struct device_d *hw_dev, struct mci_data *data)
 	while (data_size > 0) {
 
 		/* serious error? */
-		if (readl(hw_dev->map_base + SDIDSTA) & READ_REASON_TO_FAIL) {
+		if (readl(map_base + SDIDSTA) & READ_REASON_TO_FAIL) {
 			pr_err("Failed while reading data\n");
 			return -EIO;
 		}
 
 		/* now check the FIFO status */
-		if (readl(hw_dev->map_base + SDIFSTA) & SDIFSTA_FIFOFAIL) {
+		if (readl(map_base + SDIFSTA) & SDIFSTA_FIFOFAIL) {
 			pr_err("Data loss due to FIFO overflow when reading\n");
 			return -EIO;
 		}
 
 		/* we only want to read full words */
-		cnt = (readl(hw_dev->map_base + SDIFSTA) & SDIFSTA_COUNTMASK) >> 2;
+		cnt = (readl(map_base + SDIFSTA) & SDIFSTA_COUNTMASK) >> 2;
 
 		/* read one chunk of data from the FIFO */
 		while (cnt--) {
-			*p = readl(hw_dev->map_base + SDIDATA);
+			*p = readl(map_base + SDIDATA);
 			p++;
 			if (data_size >= 4)
 				data_size -= 4;
@@ -542,6 +551,7 @@ static int s3c_mci_write_block(struct device_d *hw_dev, struct mci_cmd *cmd,
 	const uint32_t *p = (const uint32_t*)data->src;
 	unsigned cnt, data_size;
 	uint32_t reg;
+	resource_size_t map_base = dev_resource_get_start(hw_dev);
 
 #define WRITE_REASON_TO_FAIL (SDIDSTA_CRCFAIL | SDIDSTA_DATATIMEOUT)
 
@@ -553,7 +563,7 @@ static int s3c_mci_write_block(struct device_d *hw_dev, struct mci_cmd *cmd,
 	 */
 	cnt = 16;
 	while (cnt--) {
-		writel(*p, hw_dev->map_base + SDIDATA);
+		writel(*p, map_base + SDIDATA);
 		p++;
 		if (data_size >= 4)
 			data_size -= 4;
@@ -566,7 +576,7 @@ static int s3c_mci_write_block(struct device_d *hw_dev, struct mci_cmd *cmd,
 	/* data is now in place and waits for transmitt. Start the command right now */
 	s3c_send_command(hw_dev, cmd, data);
 
-	if ((reg = readl(hw_dev->map_base + SDIFSTA)) & SDIFSTA_FIFOFAIL) {
+	if ((reg = readl(map_base + SDIFSTA)) & SDIFSTA_FIFOFAIL) {
 		pr_err("Command fails immediatly due to FIFO underrun when writing %08X\n",
 			reg);
 		return -EIO;
@@ -574,24 +584,24 @@ static int s3c_mci_write_block(struct device_d *hw_dev, struct mci_cmd *cmd,
 
 	while (data_size > 0) {
 
-		if (readl(hw_dev->map_base + SDIDSTA) & WRITE_REASON_TO_FAIL) {
+		if (readl(map_base + SDIDSTA) & WRITE_REASON_TO_FAIL) {
 			pr_err("Failed writing data\n");
 			return -EIO;
 		}
 
 		/* now check the FIFO status */
-		if ((reg = readl(hw_dev->map_base + SDIFSTA)) & SDIFSTA_FIFOFAIL) {
+		if ((reg = readl(map_base + SDIFSTA)) & SDIFSTA_FIFOFAIL) {
 			pr_err("Data loss due to FIFO underrun when writing %08X\n",
 					reg);
 			return -EIO;
 		}
 
 		/* we only want to write full words */
-		cnt = 16 - (((readl(hw_dev->map_base + SDIFSTA) & SDIFSTA_COUNTMASK) + 3) >> 2);
+		cnt = 16 - (((readl(map_base + SDIFSTA) & SDIFSTA_COUNTMASK) + 3) >> 2);
 
 		/* fill the FIFO if it has free entries */
 		while (cnt--) {
-			writel(*p, hw_dev->map_base + SDIDATA);
+			writel(*p, map_base + SDIDATA);
 			p++;
 			if (data_size >= 4)
 				data_size -= 4;
@@ -616,6 +626,7 @@ static int s3c_mci_adtc(struct device_d *hw_dev, struct mci_cmd *cmd,
 			struct mci_data *data)
 {
 	int rc;
+	resource_size_t map_base = dev_resource_get_start(hw_dev);
 
 	rc = s3c_prepare_engine(hw_dev);
 	if (rc != 0)
@@ -629,7 +640,7 @@ static int s3c_mci_adtc(struct device_d *hw_dev, struct mci_cmd *cmd,
 		s3c_send_command(hw_dev, cmd, data);
 		rc = s3c_mci_read_block(hw_dev, data);
 		if (rc == 0) {
-			while (!(readl(hw_dev->map_base + SDIDSTA) & SDIDSTA_XFERFINISH))
+			while (!(readl(map_base + SDIDSTA) & SDIDSTA_XFERFINISH))
 				;
 		} else
 			s3c_terminate_transfer(hw_dev);
@@ -638,12 +649,12 @@ static int s3c_mci_adtc(struct device_d *hw_dev, struct mci_cmd *cmd,
 	if (data->flags & MMC_DATA_WRITE) {
 		rc = s3c_mci_write_block(hw_dev, cmd, data);
 		if (rc == 0) {
-			while (!(readl(hw_dev->map_base + SDIDSTA) & SDIDSTA_XFERFINISH))
+			while (!(readl(map_base + SDIDSTA) & SDIDSTA_XFERFINISH))
 				;
 		} else
 			s3c_terminate_transfer(hw_dev);
 	}
-	writel(0, hw_dev->map_base + SDIDCON);
+	writel(0, map_base + SDIDCON);
 
 	return rc;
 }
@@ -675,10 +686,11 @@ static int mci_request(struct mci_host *mci_pdata, struct mci_cmd *cmd,
 {
 	struct device_d *hw_dev = mci_pdata->hw_dev;
 	int rc;
+	resource_size_t map_base = dev_resource_get_start(hw_dev);
 
 	/* enable clock */
-	writel(readl(hw_dev->map_base + SDICON) | SDICON_CLKEN,
-		hw_dev->map_base + SDICON);
+	writel(readl(map_base + SDICON) | SDICON_CLKEN,
+		map_base + SDICON);
 
 	if ((cmd->resp_type == 0) || (data == NULL))
 		rc = s3c_mci_std_cmds(hw_dev, cmd);
@@ -688,8 +700,8 @@ static int mci_request(struct mci_host *mci_pdata, struct mci_cmd *cmd,
 	s3c_finish_request(hw_dev);
 
 	/* disable clock */
-	writel(readl(hw_dev->map_base + SDICON) & ~SDICON_CLKEN,
-		hw_dev->map_base + SDICON);
+	writel(readl(map_base + SDICON) & ~SDICON_CLKEN,
+		map_base + SDICON);
 	return rc;
 }
 
@@ -706,6 +718,7 @@ static void mci_set_ios(struct mci_host *mci_pdata, struct device_d *mci_dev,
 	struct device_d *hw_dev = mci_pdata->hw_dev;
 	struct s3c_mci_host *host_data = GET_HOST_DATA(hw_dev);
 	struct mci_host *host = GET_MCI_PDATA(mci_dev);
+	resource_size_t map_base = dev_resource_get_start(hw_dev);
 	uint32_t reg;
 
 	switch (bus_width) {
@@ -720,7 +733,7 @@ static void mci_set_ios(struct mci_host *mci_pdata, struct device_d *mci_dev,
 		break;
 	}
 
-	reg = readl(hw_dev->map_base + SDICON);
+	reg = readl(map_base + SDICON);
 	if (clock) {
 		/* setup the IO clock frequency and enable it */
 		host->clock = host_data->clock = s3c_setup_clock_speed(hw_dev, clock);
@@ -729,7 +742,7 @@ static void mci_set_ios(struct mci_host *mci_pdata, struct device_d *mci_dev,
 		reg &= ~SDICON_CLKEN;	/* disable the clock */
 		host->clock = host_data->clock = 0;
 	}
-	writel(reg, hw_dev->map_base + SDICON);
+	writel(reg, map_base + SDICON);
 
 	pr_debug("IO settings: bus width=%d, frequency=%u Hz\n",
 		host->bus_width, host->clock);
@@ -772,6 +785,7 @@ static struct mci_host mci_pdata = {
 static int s3c_mci_probe(struct device_d *hw_dev)
 {
 	struct s3c_mci_platform_data *pd = hw_dev->platform_data;
+	resource_size_t map_base = dev_resource_get_start(hw_dev);
 
 	/* TODO replace by the global func: enable the SDI unit clock */
 	writel(readl(S3C24X0_CLOCK_POWER_BASE + 0x0c) | 0x200,
@@ -795,7 +809,7 @@ static int s3c_mci_probe(struct device_d *hw_dev)
 	 * Start the clock to let the engine and the card finishes its startup
 	 */
 	host_data.clock = s3c_setup_clock_speed(hw_dev, mci_pdata.f_min);
-	writel(SDICON_FIFORESET | SDICON_MMCCLOCK, hw_dev->map_base + SDICON);
+	writel(SDICON_FIFORESET | SDICON_MMCCLOCK, map_base + SDICON);
 
 	return mci_register(&mci_pdata);
 }
diff --git a/drivers/mci/stm378x.c b/drivers/mci/stm378x.c
index 420c2ea..f48ccaf 100644
--- a/drivers/mci/stm378x.c
+++ b/drivers/mci/stm378x.c
@@ -131,6 +131,8 @@ struct stm_mci_host {
  */
 static int get_cards_response(struct device_d *hw_dev, struct mci_cmd *cmd)
 {
+	resource_size_t map_base = dev_resource_get_start(hw_dev);
+
 	switch (cmd->resp_type) {
 	case MMC_RSP_NONE:
 		return 0;
@@ -138,14 +140,14 @@ static int get_cards_response(struct device_d *hw_dev, struct mci_cmd *cmd)
 	case MMC_RSP_R1:
 	case MMC_RSP_R1b:
 	case MMC_RSP_R3:
-		cmd->response[0] = readl(hw_dev->map_base + HW_SSP_SDRESP0);
+		cmd->response[0] = readl(map_base + HW_SSP_SDRESP0);
 		return 1;
 
 	case MMC_RSP_R2:
-		cmd->response[3] = readl(hw_dev->map_base + HW_SSP_SDRESP0);
-		cmd->response[2] = readl(hw_dev->map_base + HW_SSP_SDRESP1);
-		cmd->response[1] = readl(hw_dev->map_base + HW_SSP_SDRESP2);
-		cmd->response[0] = readl(hw_dev->map_base + HW_SSP_SDRESP3);
+		cmd->response[3] = readl(map_base + HW_SSP_SDRESP0);
+		cmd->response[2] = readl(map_base + HW_SSP_SDRESP1);
+		cmd->response[1] = readl(map_base + HW_SSP_SDRESP2);
+		cmd->response[0] = readl(map_base + HW_SSP_SDRESP3);
 		return 4;
 	}
 
@@ -160,8 +162,10 @@ static int get_cards_response(struct device_d *hw_dev, struct mci_cmd *cmd)
  */
 static void finish_request(struct device_d *hw_dev)
 {
+	resource_size_t map_base = dev_resource_get_start(hw_dev);
+
 	/* stop the engines (normaly already done) */
-	writel(SSP_CTRL0_RUN, hw_dev->map_base + HW_SSP_CTRL0 + 8);
+	writel(SSP_CTRL0_RUN, map_base + HW_SSP_CTRL0 + 8);
 }
 
 /**
@@ -199,10 +203,11 @@ static int get_cmd_error(unsigned status)
 static void stm_setup_timout(struct device_d *hw_dev, unsigned to)
 {
 	uint32_t reg;
+	resource_size_t map_base = dev_resource_get_start(hw_dev);
 
-	reg = readl(hw_dev->map_base + HW_SSP_TIMING) & ~SSP_TIMING_TIMEOUT_MASK;
+	reg = readl(map_base + HW_SSP_TIMING) & ~SSP_TIMING_TIMEOUT_MASK;
 	reg |= SSP_TIMING_TIMEOUT(to);
-	writel(reg, hw_dev->map_base + HW_SSP_TIMING);
+	writel(reg, map_base + HW_SSP_TIMING);
 }
 
 /**
@@ -219,6 +224,7 @@ static void stm_setup_timout(struct device_d *hw_dev, unsigned to)
 static int read_data(struct device_d *hw_dev, void *buffer, unsigned length)
 {
 	uint32_t *p = buffer;
+	resource_size_t map_base = dev_resource_get_start(hw_dev);
 
 	if (length & 0x3) {
 		pr_debug("Cannot read data sizes not multiple of 4 (request for %u detected)\n",
@@ -227,10 +233,10 @@ static int read_data(struct device_d *hw_dev, void *buffer, unsigned length)
 	}
 
 	while ((length != 0) &&
-		((readl(hw_dev->map_base + HW_SSP_STATUS) & SSP_STATUS_ERROR) == 0)) {
+		((readl(map_base + HW_SSP_STATUS) & SSP_STATUS_ERROR) == 0)) {
 		/* TODO sort out FIFO overflows and emit -EOI for this case */
-		if ((readl(hw_dev->map_base + HW_SSP_STATUS) & SSP_STATUS_FIFO_EMPTY) == 0) {
-			*p = readl(hw_dev->map_base + HW_SSP_DATA);
+		if ((readl(map_base + HW_SSP_STATUS) & SSP_STATUS_FIFO_EMPTY) == 0) {
+			*p = readl(map_base + HW_SSP_DATA);
 			p++;
 			length -= 4;
 		}
@@ -257,6 +263,7 @@ static int read_data(struct device_d *hw_dev, void *buffer, unsigned length)
 static int write_data(struct device_d *hw_dev, const void *buffer, unsigned length)
 {
 	const uint32_t *p = buffer;
+	resource_size_t map_base = dev_resource_get_start(hw_dev);
 
 	if (length & 0x3) {
 		pr_debug("Cannot write data sizes not multiple of 4 (request for %u detected)\n",
@@ -265,10 +272,10 @@ static int write_data(struct device_d *hw_dev, const void *buffer, unsigned leng
 	}
 
 	while ((length != 0) &&
-		((readl(hw_dev->map_base + HW_SSP_STATUS) & SSP_STATUS_ERROR) == 0)) {
+		((readl(map_base + HW_SSP_STATUS) & SSP_STATUS_ERROR) == 0)) {
 		/* TODO sort out FIFO overflows and emit -EOI for this case */
-		if ((readl(hw_dev->map_base + HW_SSP_STATUS) & SSP_STATUS_FIFO_FULL) == 0) {
-			writel(*p, hw_dev->map_base + HW_SSP_DATA);
+		if ((readl(map_base + HW_SSP_STATUS) & SSP_STATUS_FIFO_FULL) == 0) {
+			writel(*p, map_base + HW_SSP_DATA);
 			p++;
 			length -= 4;
 		}
@@ -288,6 +295,7 @@ static int write_data(struct device_d *hw_dev, const void *buffer, unsigned leng
 static int transfer_data(struct device_d *hw_dev, struct mci_data *data)
 {
 	unsigned length;
+	resource_size_t map_base = dev_resource_get_start(hw_dev);
 
 	if (data != NULL) {
 		length = data->blocks * data->blocksize;
@@ -313,7 +321,7 @@ static int transfer_data(struct device_d *hw_dev, struct mci_data *data)
 	 *
 	 * Start the transaction right now
 	 */
-	writel(SSP_CTRL0_RUN, hw_dev->map_base + HW_SSP_CTRL0 + 4);
+	writel(SSP_CTRL0_RUN, map_base + HW_SSP_CTRL0 + 4);
 
 	if (data != NULL) {
 		if (data->flags & MMC_DATA_READ)
@@ -366,31 +374,33 @@ static uint32_t prepare_transfer_setup(unsigned cmd_flags, unsigned data_flags)
  */
 static int stm_mci_std_cmds(struct device_d *hw_dev, struct mci_cmd *cmd)
 {
+	resource_size_t map_base = dev_resource_get_start(hw_dev);
+
 	/* setup command and transfer parameters */
 	writel(prepare_transfer_setup(cmd->resp_type, 0) |
-		SSP_CTRL0_ENABLE, hw_dev->map_base + HW_SSP_CTRL0);
+		SSP_CTRL0_ENABLE, map_base + HW_SSP_CTRL0);
 
 	/* prepare the command, when no response is expected add a few trailing clocks */
 	writel(SSP_CMD0_CMD(cmd->cmdidx) |
 		(cmd->resp_type & MMC_RSP_PRESENT ? 0 : SSP_CMD0_APPEND_8CYC),
-		hw_dev->map_base + HW_SSP_CMD0);
+		map_base + HW_SSP_CMD0);
 
 	/* prepare command's arguments */
-	writel(cmd->cmdarg, hw_dev->map_base + HW_SSP_CMD1);
+	writel(cmd->cmdarg, map_base + HW_SSP_CMD1);
 
 	stm_setup_timout(hw_dev, 0xffff);
 
 	/* start the transfer */
-	writel(SSP_CTRL0_RUN, hw_dev->map_base + HW_SSP_CTRL0 + 4);
+	writel(SSP_CTRL0_RUN, map_base + HW_SSP_CTRL0 + 4);
 
 	/* wait until finished */
-	while (readl(hw_dev->map_base + HW_SSP_CTRL0) & SSP_CTRL0_RUN)
+	while (readl(map_base + HW_SSP_CTRL0) & SSP_CTRL0_RUN)
 		;
 
 	if (cmd->resp_type & MMC_RSP_PRESENT)
 		get_cards_response(hw_dev, cmd);
 
-	return get_cmd_error(readl(hw_dev->map_base + HW_SSP_STATUS));
+	return get_cmd_error(readl(map_base + HW_SSP_STATUS));
 }
 
 /**
@@ -406,6 +416,7 @@ static int stm_mci_adtc(struct device_d *hw_dev, struct mci_cmd *cmd,
 	struct stm_mci_host *host_data = (struct stm_mci_host*)GET_HOST_DATA(hw_dev);
 	uint32_t xfer_cnt, log2blocksize, block_cnt;
 	int err;
+	resource_size_t map_base = dev_resource_get_start(hw_dev);
 
 	/* Note: 'data' can be NULL! */
 	if (data != NULL) {
@@ -422,17 +433,17 @@ static int stm_mci_adtc(struct device_d *hw_dev, struct mci_cmd *cmd,
 		(xfer_cnt != 0 ? SSP_CTRL0_DATA_XFER : 0) | /* command plus data */
 		SSP_CTRL0_ENABLE |
 		SSP_CTRL0_XFER_COUNT(xfer_cnt), /* byte count to be transfered */
-		hw_dev->map_base + HW_SSP_CTRL0);
+		map_base + HW_SSP_CTRL0);
 
 	/* prepare the command and the transfered data count */
 	writel(SSP_CMD0_CMD(cmd->cmdidx) |
 		SSP_CMD0_BLOCK_SIZE(log2blocksize) |
 		SSP_CMD0_BLOCK_COUNT(block_cnt) |
 		(cmd->cmdidx == MMC_CMD_STOP_TRANSMISSION ? SSP_CMD0_APPEND_8CYC : 0),
-		hw_dev->map_base + HW_SSP_CMD0);
+		map_base + HW_SSP_CMD0);
 
 	/* prepare command's arguments */
-	writel(cmd->cmdarg, hw_dev->map_base + HW_SSP_CMD1);
+	writel(cmd->cmdarg, map_base + HW_SSP_CMD1);
 
 	stm_setup_timout(hw_dev, 0xffff);
 
@@ -443,7 +454,7 @@ static int stm_mci_adtc(struct device_d *hw_dev, struct mci_cmd *cmd,
 	}
 
 	/* wait until finished */
-	while (readl(hw_dev->map_base + HW_SSP_CTRL0) & SSP_CTRL0_RUN)
+	while (readl(map_base + HW_SSP_CTRL0) & SSP_CTRL0_RUN)
 		;
 
 	get_cards_response(hw_dev, cmd);
@@ -475,6 +486,7 @@ static int stm_mci_adtc(struct device_d *hw_dev, struct mci_cmd *cmd,
 static unsigned setup_clock_speed(struct device_d *hw_dev, unsigned nc)
 {
 	unsigned ssp, div, rate, reg;
+	resource_size_t map_base = dev_resource_get_start(hw_dev);
 
 	if (nc == 0U) {
 		/* TODO stop the clock */
@@ -493,9 +505,9 @@ static unsigned setup_clock_speed(struct device_d *hw_dev, unsigned nc)
 		return 0;
 	}
 
-	reg = readl(hw_dev->map_base + HW_SSP_TIMING) & SSP_TIMING_TIMEOUT_MASK;
+	reg = readl(map_base + HW_SSP_TIMING) & SSP_TIMING_TIMEOUT_MASK;
 	reg |= SSP_TIMING_CLOCK_DIVIDE(div) | SSP_TIMING_CLOCK_RATE(rate - 1);
-	writel(reg, hw_dev->map_base + HW_SSP_TIMING);
+	writel(reg, map_base + HW_SSP_TIMING);
 
 	return ssp / div / rate;
 }
@@ -508,8 +520,10 @@ static unsigned setup_clock_speed(struct device_d *hw_dev, unsigned nc)
  */
 static void stm_mci_reset(struct device_d *hw_dev)
 {
-	writel(SSP_CTRL0_SFTRST, hw_dev->map_base + HW_SSP_CTRL0 + 8);
-	while (readl(hw_dev->map_base + HW_SSP_CTRL0) & SSP_CTRL0_SFTRST)
+	resource_size_t map_base = dev_resource_get_start(hw_dev);
+
+	writel(SSP_CTRL0_SFTRST, map_base + HW_SSP_CTRL0 + 8);
+	while (readl(map_base + HW_SSP_CTRL0) & SSP_CTRL0_SFTRST)
 		;
 }
 
@@ -522,9 +536,10 @@ static int stm_mci_initialize(struct device_d *hw_dev, struct device_d *mci_dev)
 {
 	struct mci_host *host = GET_MCI_PDATA(mci_dev);
 	struct stm_mci_host *host_data = (struct stm_mci_host*)GET_HOST_DATA(hw_dev);
+	resource_size_t map_base = dev_resource_get_start(hw_dev);
 
 	/* enable the clock to this unit to be able to reset it */
-	writel(SSP_CTRL0_CLKGATE, hw_dev->map_base + HW_SSP_CTRL0 + 8);
+	writel(SSP_CTRL0_CLKGATE, map_base + HW_SSP_CTRL0 + 8);
 
 	/* reset the unit */
 	stm_mci_reset(hw_dev);
@@ -534,10 +549,10 @@ static int stm_mci_initialize(struct device_d *hw_dev, struct device_d *mci_dev)
 	stm_setup_timout(hw_dev, 0xffff);
 	writel(SSP_CTRL0_IGNORE_CRC |
 		SSP_CTRL0_BUS_WIDTH(host_data->bus_width),
-		hw_dev->map_base + HW_SSP_CTRL0);
+		map_base + HW_SSP_CTRL0);
 	writel(SSP_CTRL1_POLARITY |
 		SSP_CTRL1_SSP_MODE(3) |
-		SSP_CTRL1_WORD_LENGTH(7), hw_dev->map_base + HW_SSP_CTRL1);
+		SSP_CTRL1_WORD_LENGTH(7), map_base + HW_SSP_CTRL1);
 
 	return 0;
 }
diff --git a/drivers/mtd/nand/atmel_nand.c b/drivers/mtd/nand/atmel_nand.c
index e8f85fc..b6b72ad 100644
--- a/drivers/mtd/nand/atmel_nand.c
+++ b/drivers/mtd/nand/atmel_nand.c
@@ -381,7 +381,7 @@ static int __init atmel_nand_probe(struct device_d *dev)
 	if (!host)
 		return -ENOMEM;
 
-	host->io_base = (void __iomem *)dev->map_base;
+	host->io_base = (void __iomem *)dev_resource_get_start(dev);
 
 	mtd = &host->mtd;
 	nand_chip = &host->nand_chip;
diff --git a/drivers/mtd/nand/nand_imx.c b/drivers/mtd/nand/nand_imx.c
index 63ba188..dbd9d01 100644
--- a/drivers/mtd/nand/nand_imx.c
+++ b/drivers/mtd/nand/nand_imx.c
@@ -855,7 +855,7 @@ static int __init imxnd_probe(struct device_d *dev)
 		return -ENOMEM;
 
 	host->data_buf = (uint8_t *)(host + 1);
-	host->base = (void __iomem *)dev->map_base;
+	host->base = (void __iomem *)dev_resource_get_start(dev);
 
 	host->main_area0 = host->base;
 	host->main_area1 = host->base + 0x200;
diff --git a/drivers/mtd/nand/nand_omap_gpmc.c b/drivers/mtd/nand/nand_omap_gpmc.c
index 7c9bc32..e65c053 100644
--- a/drivers/mtd/nand/nand_omap_gpmc.c
+++ b/drivers/mtd/nand/nand_omap_gpmc.c
@@ -11,11 +11,18 @@
  * A typical device registration is as follows:
  *
  * @code
+ * static struct resource my_nand_resources[] = {
+ * 	[0] = {
+ *		.start	= GPMC base address
+ *		.size	= GPMC address map size.
+ * 	},
+ * };
+ *
  * static struct device_d my_nand_device = {
  *	.name = "gpmc_nand",
  *	.id = some identifier you need to show.. e.g. "gpmc_nand0"
- *	.map_base = GPMC base address
- *	.size = GPMC address map size.
+ * 	.num_resources	= ARRAY_SIZE(my_nand_resources),
+ * 	.resource	= my_nand_resources,
  *	.platform_data = platform data - required - explained below
  * };
  * platform data required:
@@ -439,7 +446,7 @@ static int gpmc_nand_probe(struct device_d *pdev)
 	}
 	/* Setup register specific data */
 	oinfo->gpmc_cs = pdata->cs;
-	oinfo->gpmc_base = pdev->map_base;
+	oinfo->gpmc_base = dev_resource_get_start(pdev);
 	cs_base = oinfo->gpmc_base + GPMC_CONFIG1_0 +
 		(pdata->cs * GPMC_CONFIG_CS_SIZE);
 	oinfo->gpmc_command = (void *)(cs_base + GPMC_CS_NAND_COMMAND);
diff --git a/drivers/mtd/nand/nand_s3c2410.c b/drivers/mtd/nand/nand_s3c2410.c
index b989583..c487f9c 100644
--- a/drivers/mtd/nand/nand_s3c2410.c
+++ b/drivers/mtd/nand/nand_s3c2410.c
@@ -359,7 +359,7 @@ static int s3c24x0_nand_probe(struct device_d *dev)
 		return -ENOMEM;
 
 	host->dev = dev;
-	host->base = dev->map_base;
+	host->base = dev_resource_get_start(dev);
 
 	/* structures must be linked */
 	chip = &host->nand;
@@ -375,7 +375,7 @@ static int s3c24x0_nand_probe(struct device_d *dev)
 	chip->chip_delay = 50;
 	chip->priv = host;
 
-	chip->IO_ADDR_R = chip->IO_ADDR_W = (void*)(dev->map_base + NFDATA);
+	chip->IO_ADDR_R = chip->IO_ADDR_W = (void*)(host->base + NFDATA);
 
 	chip->cmd_ctrl = s3c24x0_nand_hwcontrol;
 	chip->dev_ready = s3c24x0_nand_devready;
diff --git a/drivers/net/cs8900.c b/drivers/net/cs8900.c
index 8120877..6701eb0 100644
--- a/drivers/net/cs8900.c
+++ b/drivers/net/cs8900.c
@@ -441,7 +441,7 @@ static int cs8900_probe(struct device_d *dev)
 	debug("cs8900_init()\n");
 
 	priv = (struct cs8900_priv *)malloc(sizeof(*priv));
-	priv->regs = (u16 *)dev->map_base;
+	priv->regs = (u16 *)dev_resource_get_start(dev);
 	if (cs8900_check_id(priv)) {
 		free(priv);
 		return -1;
diff --git a/drivers/net/fec_imx.c b/drivers/net/fec_imx.c
index 9c8de77..e6aa792 100644
--- a/drivers/net/fec_imx.c
+++ b/drivers/net/fec_imx.c
@@ -552,7 +552,7 @@ static int fec_probe(struct device_d *dev)
 	edev->get_ethaddr = fec_get_hwaddr,
 	edev->set_ethaddr = fec_set_hwaddr,
 
-	fec->regs = (void *)dev->map_base;
+	fec->regs = (void *)dev_resource_get_start(dev);
 
 	/* Reset chip. */
 	writel(FEC_ECNTRL_RESET, fec->regs + FEC_ECNTRL);
diff --git a/drivers/net/fec_mpc5200.c b/drivers/net/fec_mpc5200.c
index 8b2cb4d..bebc05e 100644
--- a/drivers/net/fec_mpc5200.c
+++ b/drivers/net/fec_mpc5200.c
@@ -673,7 +673,7 @@ int mpc5xxx_fec_probe(struct device_d *dev)
 	edev->get_ethaddr = mpc5xxx_fec_get_ethaddr,
 	edev->set_ethaddr = mpc5xxx_fec_set_ethaddr,
 
-	fec->eth = (ethernet_regs *)dev->map_base;
+	fec->eth = (ethernet_regs *)dev_resource_get_start(dev);
 	fec->tbdBase = (FEC_TBD *)FEC_BD_BASE;
 	fec->rbdBase = (FEC_RBD *)(FEC_BD_BASE + FEC_TBD_NUM * sizeof(FEC_TBD));
 
diff --git a/drivers/net/macb.c b/drivers/net/macb.c
index df3b6af..34e77d2 100644
--- a/drivers/net/macb.c
+++ b/drivers/net/macb.c
@@ -446,7 +446,7 @@ static int macb_probe(struct device_d *dev)
 	macb->rx_ring = xmalloc(CFG_MACB_RX_RING_SIZE * sizeof(struct macb_dma_desc));
 	macb->tx_ring = xmalloc(sizeof(struct macb_dma_desc));
 
-	macb->regs = (void *)dev->map_base;
+	macb->regs = (void *)dev_resource_get_start(dev);
 
 	/*
 	 * Do some basic initialization so that we at least can talk
diff --git a/drivers/net/smc91111.c b/drivers/net/smc91111.c
index 605a7d8..3f28211 100644
--- a/drivers/net/smc91111.c
+++ b/drivers/net/smc91111.c
@@ -1317,7 +1317,7 @@ static int smc91c111_probe(struct device_d *dev)
 	priv->miidev.address = 0;
 	priv->miidev.flags = 0;
 	priv->miidev.edev = edev;
-	priv->base = dev->map_base;
+	priv->base = dev_resource_get_start(dev);
 
 	smc91c111_reset(edev);
 
diff --git a/drivers/net/smc911x.c b/drivers/net/smc911x.c
index b559590..1339469 100644
--- a/drivers/net/smc911x.c
+++ b/drivers/net/smc911x.c
@@ -689,18 +689,19 @@ static int smc911x_probe(struct device_d *dev)
 	struct smc911x_priv *priv;
 	ulong val;
 	int i;
+	resource_size_t map_base = dev_resource_get_start(dev);
 
 	debug("smc911x_eth_init()\n");
 
-	val = readl(dev->map_base + BYTE_TEST);
+	val = readl(map_base + BYTE_TEST);
 	if(val != 0x87654321) {
 		printf(DRIVERNAME
 			": no smc911x found on 0x%08x (byte_test=0x%08x)\n",
-			dev->map_base, val);
+			map_base, val);
 		return -ENODEV;
 	}
 
-	val = readl(dev->map_base + ID_REV) >> 16;
+	val = readl(map_base + ID_REV) >> 16;
 	for(i = 0; chip_ids[i].id != 0; i++) {
 		if (chip_ids[i].id == val) break;
 	}
@@ -731,7 +732,7 @@ static int smc911x_probe(struct device_d *dev)
 	priv->miidev.address = 1;
 	priv->miidev.flags = 0;
 	priv->miidev.edev = edev;
-	priv->base = dev->map_base;
+	priv->base = map_base;
 
 	smc911x_reset(edev);
 	smc911x_phy_reset(edev);
diff --git a/drivers/nor/cfi_flash.c b/drivers/nor/cfi_flash.c
index fa5e5ee..78db1d8 100644
--- a/drivers/nor/cfi_flash.c
+++ b/drivers/nor/cfi_flash.c
@@ -505,11 +505,12 @@ static int __cfi_erase(struct cdev *cdev, size_t count, unsigned long offset,
         struct flash_info *finfo = (struct flash_info *)cdev->priv;
         unsigned long start, end;
         int i, ret = 0;
+	resource_size_t map_base = dev_resource_get_start(cdev->dev);
 
 	debug("%s: erase 0x%08x (size %d)\n", __func__, offset, count);
 
-        start = find_sector(finfo, cdev->dev->map_base + offset);
-        end   = find_sector(finfo, cdev->dev->map_base + offset + count - 1);
+        start = find_sector(finfo, map_base + offset);
+        end   = find_sector(finfo, map_base + offset + count - 1);
 
 	if (verbose)
 		init_progression_bar(end - start);
@@ -673,12 +674,13 @@ static int cfi_protect(struct cdev *cdev, size_t count, unsigned long offset, in
 	unsigned long start, end;
 	int i, ret = 0;
 	const char *action = (prot? "protect" : "unprotect");
+	resource_size_t map_base = dev_resource_get_start(cdev->dev);
 
 	printf("%s: %s 0x%08x (size %d)\n", __FUNCTION__,
-		action, cdev->dev->map_base + offset, count);
+		action, map_base + offset, count);
 
-	start = find_sector(finfo, cdev->dev->map_base + offset);
-	end   = find_sector(finfo, cdev->dev->map_base + offset + count - 1);
+	start = find_sector(finfo, map_base + offset);
+	end   = find_sector(finfo, map_base + offset + count - 1);
 
 	for (i = start; i <= end; i++) {
 		ret = flash_real_protect (finfo, i, prot);
@@ -694,10 +696,11 @@ static ssize_t cfi_write(struct cdev *cdev, const void *buf, size_t count, unsig
 {
         struct flash_info *finfo = (struct flash_info *)cdev->priv;
         int ret;
+	resource_size_t map_base = dev_resource_get_start(cdev->dev);
 
-	debug("cfi_write: buf=0x%08x addr=0x%08x count=0x%08x\n",buf, cdev->dev->map_base + offset, count);
+	debug("cfi_write: buf=0x%08x addr=0x%08x count=0x%08x\n",buf, map_base + offset, count);
 
-        ret = write_buff (finfo, buf, cdev->dev->map_base + offset, count);
+        ret = write_buff (finfo, buf, map_base + offset, count);
         return ret == 0 ? count : -1;
 }
 
@@ -1020,24 +1023,26 @@ static int cfi_probe (struct device_d *dev)
 {
 	unsigned long size = 0;
 	struct flash_info *info = xzalloc(sizeof(*info));
+	resource_size_t map_base = dev_resource_get_start(dev);
+	resource_size_t map_size = dev_resource_get_size(dev);
 
 	dev->priv = (void *)info;
 
-	printf("cfi_probe: %s base: 0x%08x size: 0x%08x\n", dev->name, dev->map_base, dev->size);
+	printf("cfi_probe: %s base: 0x%08x size: 0x%08x\n", dev->name, map_base, map_size);
 
 	/* Init: no FLASHes known */
 	info->flash_id = FLASH_UNKNOWN;
-	size += info->size = flash_get_size(info, dev->map_base);
-	info->base = (void __iomem *)dev->map_base;
+	size += info->size = flash_get_size(info, map_base);
+	info->base = (void __iomem *)map_base;
 
-	if (dev->size == 0) {
+	if (map_size == 0) {
 		printf("cfi_probe: size : 0x%08x\n", info->size);
-		dev->size = info->size;
+		dev_resource_set_size(dev, info->size);
 	}
 
 	if (info->flash_id == FLASH_UNKNOWN) {
 		printf ("## Unknown FLASH on Bank at 0x%08x - Size = 0x%08lx = %ld MB\n",
-			dev->map_base, info->size, info->size << 20);
+			map_base, info->size, info->size);
 		return -ENODEV;
 	}
 
diff --git a/drivers/serial/amba-pl011.c b/drivers/serial/amba-pl011.c
index bc9b0de..d44f903 100644
--- a/drivers/serial/amba-pl011.c
+++ b/drivers/serial/amba-pl011.c
@@ -53,7 +53,7 @@ to_amba_uart_port(struct console_device *uart)
 
 static int pl011_setbaudrate(struct console_device *cdev, int baudrate)
 {
-	struct device_d *dev = cdev->dev;
+	resource_size_t map_base = dev_resource_get_start(cdev->dev);
 	struct amba_uart_port *uart = to_amba_uart_port(cdev);
 	unsigned int temp;
 	unsigned int divider;
@@ -72,37 +72,37 @@ static int pl011_setbaudrate(struct console_device *cdev, int baudrate)
 	temp = (8 * remainder) / baudrate;
 	fraction = (temp >> 1) + (temp & 1);
 
-	writel(divider, dev->map_base + UART011_IBRD);
-	writel(fraction, dev->map_base + UART011_FBRD);
+	writel(divider, map_base + UART011_IBRD);
+	writel(fraction, map_base + UART011_FBRD);
 
 	return 0;
 }
 
 static void pl011_putc(struct console_device *cdev, char c)
 {
-	struct device_d *dev = cdev->dev;
+	resource_size_t map_base = dev_resource_get_start(cdev->dev);
 
 	/* Wait until there is space in the FIFO */
-	while (readl(dev->map_base + UART01x_FR) & UART01x_FR_TXFF);
+	while (readl(map_base + UART01x_FR) & UART01x_FR_TXFF);
 
 	/* Send the character */
-	writel(c, dev->map_base + UART01x_DR);
+	writel(c, map_base + UART01x_DR);
 }
 
 static int pl011_getc(struct console_device *cdev)
 {
-	struct device_d *dev = cdev->dev;
+	resource_size_t map_base = dev_resource_get_start(cdev->dev);
 	unsigned int data;
 
 	/* Wait until there is data in the FIFO */
-	while (readl(dev->map_base + UART01x_FR) & UART01x_FR_RXFE);
+	while (readl(map_base + UART01x_FR) & UART01x_FR_RXFE);
 
-	data = readl(dev->map_base + UART01x_DR);
+	data = readl(map_base + UART01x_DR);
 
 	/* Check for an error flag */
 	if (data & 0xffffff00) {
 		/* Clear the error */
-		writel(0xffffffff, dev->map_base + UART01x_ECR);
+		writel(0xffffffff, map_base + UART01x_ECR);
 		return -1;
 	}
 
@@ -111,20 +111,20 @@ static int pl011_getc(struct console_device *cdev)
 
 static int pl011_tstc(struct console_device *cdev)
 {
-	struct device_d *dev = cdev->dev;
+	resource_size_t map_base = dev_resource_get_start(cdev->dev);
 
-	return !(readl(dev->map_base + UART01x_FR) & UART01x_FR_RXFE);
+	return !(readl(map_base + UART01x_FR) & UART01x_FR_RXFE);
 }
 
 int pl011_init_port (struct console_device *cdev)
 {
-	struct device_d *dev = cdev->dev;
+	resource_size_t map_base = dev_resource_get_start(cdev->dev);
 	struct amba_uart_port *uart = to_amba_uart_port(cdev);
 
 	/*
 	 ** First, disable everything.
 	 */
-	writel(0x0, dev->map_base + UART011_CR);
+	writel(0x0, map_base + UART011_CR);
 
 	/*
 	 * Try to enable the clock producer.
@@ -141,13 +141,13 @@ int pl011_init_port (struct console_device *cdev)
 	 ** Set the UART to be 8 bits, 1 stop bit, no parity, fifo enabled.
 	 */
 	writel((UART01x_LCRH_WLEN_8 | UART01x_LCRH_FEN),
-	       dev->map_base + UART011_LCRH);
+	       map_base + UART011_LCRH);
 
 	/*
 	 ** Finally, enable the UART
 	 */
 	writel((UART01x_CR_UARTEN | UART011_CR_TXE | UART011_CR_RXE),
-	       dev->map_base + UART011_CR);
+	       map_base + UART011_CR);
 
 	return 0;
 }
diff --git a/drivers/serial/atmel.c b/drivers/serial/atmel.c
index b99ec4d..7a35c73 100644
--- a/drivers/serial/atmel.c
+++ b/drivers/serial/atmel.c
@@ -326,31 +326,31 @@ to_atmel_uart_port(struct console_device *uart)
 
 static void atmel_serial_putc(struct console_device *cdev, char c)
 {
-	struct device_d *dev = cdev->dev;
+	resource_size_t map_base = dev_resource_get_start(cdev->dev);
 
-	while (!(readl(dev->map_base + USART3_CSR) & USART3_BIT(TXRDY)));
+	while (!(readl(map_base + USART3_CSR) & USART3_BIT(TXRDY)));
 
-	writel(c, dev->map_base + USART3_THR);
+	writel(c, map_base + USART3_THR);
 }
 
 static int atmel_serial_tstc(struct console_device *cdev)
 {
-	struct device_d *dev = cdev->dev;
+	resource_size_t map_base = dev_resource_get_start(cdev->dev);
 
-	return (readl(dev->map_base + USART3_CSR) & USART3_BIT(RXRDY)) != 0;
+	return (readl(map_base + USART3_CSR) & USART3_BIT(RXRDY)) != 0;
 }
 
 static int atmel_serial_getc(struct console_device *cdev)
 {
-	struct device_d *dev = cdev->dev;
+	resource_size_t map_base = dev_resource_get_start(cdev->dev);
 
-	while (!(readl(dev->map_base + USART3_CSR) & USART3_BIT(RXRDY))) ;
-	return readl(dev->map_base + USART3_RHR);
+	while (!(readl(map_base + USART3_CSR) & USART3_BIT(RXRDY))) ;
+	return readl(map_base + USART3_RHR);
 }
 
 static int atmel_serial_setbaudrate(struct console_device *cdev, int baudrate)
 {
-	struct device_d *dev = cdev->dev;
+	resource_size_t map_base = dev_resource_get_start(cdev->dev);
 	struct atmel_uart_port *uart = to_atmel_uart_port(cdev);
 	unsigned long divisor;
 
@@ -360,7 +360,7 @@ static int atmel_serial_setbaudrate(struct console_device *cdev, int baudrate)
 	 *                16 * CD
 	 */
 	divisor = (uart->uartclk / 16 + baudrate / 2) / baudrate;
-	writel(USART3_BF(CD, divisor), dev->map_base + USART3_BRGR);
+	writel(USART3_BF(CD, divisor), map_base + USART3_BRGR);
 
 	return 0;
 }
@@ -373,22 +373,23 @@ static int atmel_serial_setbaudrate(struct console_device *cdev, int baudrate)
 static int atmel_serial_init_port(struct console_device *cdev)
 {
 	struct device_d *dev = cdev->dev;
+	resource_size_t map_base = dev_resource_get_start(dev);
 	struct atmel_uart_port *uart = to_atmel_uart_port(cdev);
 
-	uart->clk = clk_get(dev, "usart");
+	uart->clk = clk_get(cdev->dev, "usart");
 	clk_enable(uart->clk);
 	uart->uartclk = clk_get_rate(uart->clk);
 
-	writel(USART3_BIT(RSTRX) | USART3_BIT(RSTTX), dev->map_base + USART3_CR);
+	writel(USART3_BIT(RSTRX) | USART3_BIT(RSTTX), map_base + USART3_CR);
 
 	atmel_serial_setbaudrate(cdev, 115200);
 
-	writel(USART3_BIT(RXEN) | USART3_BIT(TXEN), dev->map_base + USART3_CR);
+	writel(USART3_BIT(RXEN) | USART3_BIT(TXEN), map_base + USART3_CR);
 	writel((USART3_BF(USART_MODE, USART3_USART_MODE_NORMAL)
 			   | USART3_BF(USCLKS, USART3_USCLKS_MCK)
 			   | USART3_BF(CHRL, USART3_CHRL_8)
 			   | USART3_BF(PAR, USART3_PAR_NONE)
-			   | USART3_BF(NBSTOP, USART3_NBSTOP_1)), dev->map_base + USART3_MR);
+			   | USART3_BF(NBSTOP, USART3_NBSTOP_1)), map_base + USART3_MR);
 
 	return 0;
 }
diff --git a/drivers/serial/serial_imx.c b/drivers/serial/serial_imx.c
index a7562f9..fb881fc 100644
--- a/drivers/serial/serial_imx.c
+++ b/drivers/serial/serial_imx.c
@@ -322,7 +322,7 @@ static int imx_serial_probe(struct device_d *dev)
 	priv = malloc(sizeof(*priv));
 	cdev = &priv->cdev;
 
-	priv->regs = (void __force __iomem *)dev->map_base;
+	priv->regs = (void __force __iomem *)dev_resource_get_start(dev);
 	dev->type_data = cdev;
 	cdev->dev = dev;
 	cdev->f_caps = CONSOLE_STDIN | CONSOLE_STDOUT | CONSOLE_STDERR;
diff --git a/drivers/serial/serial_mpc5xxx.c b/drivers/serial/serial_mpc5xxx.c
index 2509708..e3652ca 100644
--- a/drivers/serial/serial_mpc5xxx.c
+++ b/drivers/serial/serial_mpc5xxx.c
@@ -63,8 +63,8 @@ static int __mpc5xxx_serial_setbaudrate(struct mpc5xxx_psc *psc, int baudrate)
 
 static int mpc5xxx_serial_setbaudrate(struct console_device *cdev, int baudrate)
 {
-	struct device_d *dev = cdev->dev;
-	struct mpc5xxx_psc *psc = (struct mpc5xxx_psc *)dev->map_base;
+	resource_size_t map_base = dev_resource_get_start(cdev->dev);
+	struct mpc5xxx_psc *psc = (struct mpc5xxx_psc *)map_base;
 
 	__mpc5xxx_serial_setbaudrate(psc, baudrate);
 
@@ -107,8 +107,8 @@ static int __mpc5xxx_serial_init(struct mpc5xxx_psc *psc)
 
 static int mpc5xxx_serial_init(struct console_device *cdev)
 {
-	struct device_d *dev = cdev->dev;
-	struct mpc5xxx_psc *psc = (struct mpc5xxx_psc *)dev->map_base;
+	resource_size_t map_base = dev_resource_get_start(cdev->dev);
+	struct mpc5xxx_psc *psc = (struct mpc5xxx_psc *)map_base;
 
 	__mpc5xxx_serial_init(psc);
 
@@ -117,8 +117,8 @@ static int mpc5xxx_serial_init(struct console_device *cdev)
 
 static void mpc5xxx_serial_putc (struct console_device *cdev, const char c)
 {
-	struct device_d *dev = cdev->dev;
-	struct mpc5xxx_psc *psc = (struct mpc5xxx_psc *)dev->map_base;
+	resource_size_t map_base = dev_resource_get_start(cdev->dev);
+	struct mpc5xxx_psc *psc = (struct mpc5xxx_psc *)map_base;
 
 	/* Wait for last character to go. */
 	while (!(psc->psc_status & PSC_SR_TXEMP))
@@ -129,8 +129,8 @@ static void mpc5xxx_serial_putc (struct console_device *cdev, const char c)
 
 static int mpc5xxx_serial_getc (struct console_device *cdev)
 {
-	struct device_d *dev = cdev->dev;
-	struct mpc5xxx_psc *psc = (struct mpc5xxx_psc *)dev->map_base;
+	resource_size_t map_base = dev_resource_get_start(cdev->dev);
+	struct mpc5xxx_psc *psc = (struct mpc5xxx_psc *)map_base;
 
 	/* Wait for a character to arrive. */
 	while (!(psc->psc_status & PSC_SR_RXRDY))
@@ -141,8 +141,8 @@ static int mpc5xxx_serial_getc (struct console_device *cdev)
 
 static int mpc5xxx_serial_tstc (struct console_device *cdev)
 {
-	struct device_d *dev = cdev->dev;
-	struct mpc5xxx_psc *psc = (struct mpc5xxx_psc *)dev->map_base;
+	resource_size_t map_base = dev_resource_get_start(cdev->dev);
+	struct mpc5xxx_psc *psc = (struct mpc5xxx_psc *)map_base;
 
 	return (psc->psc_status & PSC_SR_RXRDY);
 }
diff --git a/drivers/serial/serial_netx.c b/drivers/serial/serial_netx.c
index 7c09519..9358e3b 100644
--- a/drivers/serial/serial_netx.c
+++ b/drivers/serial/serial_netx.c
@@ -75,15 +75,15 @@ enum uart_regs {
 
 static int netx_serial_init_port(struct console_device *cdev)
 {
-	struct device_d *dev = cdev->dev;
+	resource_size_t map_base = dev_resource_get_start(cdev->dev);
 	unsigned int divisor;
 
 	/* disable uart */
-	IO_WRITE( dev->map_base + UART_CR, 0);
+	IO_WRITE( map_base + UART_CR, 0);
 
-	IO_WRITE( dev->map_base + UART_LINE_CR, LINE_CR_8BIT | LINE_CR_FEN);
+	IO_WRITE( map_base + UART_LINE_CR, LINE_CR_8BIT | LINE_CR_FEN);
 
-	IO_WRITE( dev->map_base + UART_DRV_ENABLE, DRV_ENABLE_TX | DRV_ENABLE_RTS );
+	IO_WRITE( map_base + UART_DRV_ENABLE, DRV_ENABLE_TX | DRV_ENABLE_RTS );
 
 	/* set baud rate */
 	divisor = 115200 * 4096;
@@ -91,12 +91,12 @@ static int netx_serial_init_port(struct console_device *cdev)
 	divisor *= 256;
 	divisor /= 100000;
 
-	IO_WRITE( dev->map_base + UART_BAUDDIV_MSB, (divisor >> 8) & 0xff );
-	IO_WRITE( dev->map_base + UART_BAUDDIV_LSB, divisor & 0xff );
-	IO_WRITE( dev->map_base + UART_BRM_CR, BRM_CR_BAUD_RATE_MODE);
+	IO_WRITE( map_base + UART_BAUDDIV_MSB, (divisor >> 8) & 0xff );
+	IO_WRITE( map_base + UART_BAUDDIV_LSB, divisor & 0xff );
+	IO_WRITE( map_base + UART_BRM_CR, BRM_CR_BAUD_RATE_MODE);
 
 	/* Finally, enable the UART */
-	IO_WRITE( dev->map_base + UART_CR, CR_UARTEN);
+	IO_WRITE( map_base + UART_CR, CR_UARTEN);
 
 	return 0;
 }
@@ -108,32 +108,32 @@ static int netx_serial_setbaudrate(struct console_device *cdev, int baudrate)
 
 static void netx_serial_putc(struct console_device *cdev, char c)
 {
-	struct device_d *dev = cdev->dev;
+	resource_size_t map_base = dev_resource_get_start(cdev->dev);
 
-	while( IO_READ(dev->map_base + UART_FR) & FR_TXFF );
+	while( IO_READ(map_base + UART_FR) & FR_TXFF );
 
-	IO_WRITE(dev->map_base + UART_DR, c);
+	IO_WRITE(map_base + UART_DR, c);
 }
 
 static int netx_serial_getc(struct console_device *cdev)
 {
-	struct device_d *dev = cdev->dev;
+	resource_size_t map_base = dev_resource_get_start(cdev->dev);
 	int c;
 
-	while( IO_READ(dev->map_base + UART_FR) & FR_RXFE );
+	while( IO_READ(map_base + UART_FR) & FR_RXFE );
 
-	c = IO_READ(dev->map_base + UART_DR);
+	c = IO_READ(map_base + UART_DR);
 
-	IO_READ(dev->map_base + UART_SR);
+	IO_READ(map_base + UART_SR);
 
 	return c;
 }
 
 static int netx_serial_tstc(struct console_device *cdev)
 {
-	struct device_d *dev = cdev->dev;
+	resource_size_t map_base = dev_resource_get_start(cdev->dev);
 
-	return (IO_READ(dev->map_base + UART_FR) & FR_RXFE) ? 0 : 1;
+	return (IO_READ(map_base + UART_FR) & FR_RXFE) ? 0 : 1;
 }
 
 static int netx_serial_probe(struct device_d *dev)
diff --git a/drivers/serial/serial_ns16550.c b/drivers/serial/serial_ns16550.c
index 290619f..21f862e 100644
--- a/drivers/serial/serial_ns16550.c
+++ b/drivers/serial/serial_ns16550.c
@@ -66,7 +66,7 @@ static unsigned int ns16550_calc_divisor(struct console_device *cdev,
 	/* FIXME: Legacy Code copied from U-Boot V1 implementation
 	 */
 #ifdef CONFIG_ARCH_OMAP1510
-	unsigned long base = cdev->dev->map_base;
+	resource_size_t base = dev_resource_get_start(cdev->dev);
 	/* If can't cleanly clock 115200 set div to 1 */
 	if ((clk == 12000000) && (baudrate == 115200)) {
 		/* enable 6.5 * divisor */
@@ -95,7 +95,7 @@ static void ns16550_serial_init_port(struct console_device *cdev)
 {
 	struct NS16550_plat *plat = (struct NS16550_plat *)
 	    cdev->dev->platform_data;
-	unsigned long base = cdev->dev->map_base;
+	resource_size_t base = dev_resource_get_start(cdev->dev);
 	unsigned int baud_divisor;
 
 	/* Setup the serial port with the defaults first */
@@ -129,7 +129,7 @@ static void ns16550_putc(struct console_device *cdev, char c)
 {
 	struct NS16550_plat *plat = (struct NS16550_plat *)
 	    cdev->dev->platform_data;
-	unsigned long base = cdev->dev->map_base;
+	resource_size_t base = dev_resource_get_start(cdev->dev);
 	/* Loop Doing Nothing */
 	while ((plat->reg_read(base, lsr) & LSR_THRE) == 0) ;
 	plat->reg_write(c, base, thr);
@@ -146,7 +146,7 @@ static int ns16550_getc(struct console_device *cdev)
 {
 	struct NS16550_plat *plat = (struct NS16550_plat *)
 	    cdev->dev->platform_data;
-	unsigned long base = cdev->dev->map_base;
+	resource_size_t base = dev_resource_get_start(cdev->dev);
 	/* Loop Doing Nothing */
 	while ((plat->reg_read(base, lsr) & LSR_DR) == 0) ;
 	return plat->reg_read(base, rbr);
@@ -163,7 +163,7 @@ static int ns16550_tstc(struct console_device *cdev)
 {
 	struct NS16550_plat *plat = (struct NS16550_plat *)
 	    cdev->dev->platform_data;
-	unsigned long base = cdev->dev->map_base;
+	resource_size_t base = dev_resource_get_start(cdev->dev);
 	return ((plat->reg_read(base, lsr) & LSR_DR) != 0);
 }
 
@@ -179,7 +179,7 @@ static int ns16550_setbaudrate(struct console_device *cdev, int baud_rate)
 {
 	struct NS16550_plat *plat = (struct NS16550_plat *)
 	    cdev->dev->platform_data;
-	unsigned long base = cdev->dev->map_base;
+	resource_size_t base = dev_resource_get_start(cdev->dev);
 	unsigned int baud_divisor = ns16550_calc_divisor(cdev, baud_rate);
 	plat->reg_write(0x00, base, ier);
 	plat->reg_write(LCR_BKSE, base, lcr);
diff --git a/drivers/serial/serial_pl010.c b/drivers/serial/serial_pl010.c
index 1a6366f..746eaf3 100644
--- a/drivers/serial/serial_pl010.c
+++ b/drivers/serial/serial_pl010.c
@@ -37,7 +37,8 @@
 
 static int pl010_setbaudrate(struct console_device *cdev, int baudrate)
 {
-	struct pl010_struct *pl010 = (struct pl010_struct *)cdev->dev->map_base;
+	resource_size_t map_base = dev_resource_get_start(cdev->dev);
+	struct pl010_struct *pl010 = (struct pl010_struct *)map_base;
 	unsigned int divisor;
 
 	switch (baudrate) {
@@ -76,7 +77,8 @@ static int pl010_setbaudrate(struct console_device *cdev, int baudrate)
 
 static int pl010_init_port(struct console_device *cdev)
 {
-	struct pl010_struct *pl010 = (struct pl010_struct *)cdev->dev->map_base;
+	resource_size_t map_base = dev_resource_get_start(cdev->dev);
+	struct pl010_struct *pl010 = (struct pl010_struct *)map_base;
 
 	/*
 	 * First, disable everything.
@@ -99,7 +101,8 @@ static int pl010_init_port(struct console_device *cdev)
 
 static void pl010_putc(struct console_device *cdev, char c)
 {
-	struct pl010_struct *pl010 = (struct pl010_struct *)cdev->dev->map_base;
+	resource_size_t map_base = dev_resource_get_start(cdev->dev);
+	struct pl010_struct *pl010 = (struct pl010_struct *)map_base;
 
 	/* Wait until there is space in the FIFO */
 	while (readl(&pl010->flag) & UART_PL010_FR_TXFF)
@@ -111,7 +114,8 @@ static void pl010_putc(struct console_device *cdev, char c)
 
 static int pl010_getc(struct console_device *cdev)
 {
-	struct pl010_struct *pl010 = (struct pl010_struct *)cdev->dev->map_base;
+	resource_size_t map_base = dev_resource_get_start(cdev->dev);
+	struct pl010_struct *pl010 = (struct pl010_struct *)map_base;
 	unsigned int data;
 
 	/* Wait until there is data in the FIFO */
@@ -132,7 +136,8 @@ static int pl010_getc(struct console_device *cdev)
 
 static int pl010_tstc(struct console_device *cdev)
 {
-	struct pl010_struct *pl010 = (struct pl010_struct *)cdev->dev->map_base;
+	resource_size_t map_base = dev_resource_get_start(cdev->dev);
+	struct pl010_struct *pl010 = (struct pl010_struct *)map_base;
 
 	return !(readl(&pl010->flag) & UART_PL010_FR_RXFE);
 }
diff --git a/drivers/serial/serial_s3c24x0.c b/drivers/serial/serial_s3c24x0.c
index fedddd3..f0e96ba 100644
--- a/drivers/serial/serial_s3c24x0.c
+++ b/drivers/serial/serial_s3c24x0.c
@@ -43,34 +43,34 @@
 
 static int s3c24x0_serial_setbaudrate(struct console_device *cdev, int baudrate)
 {
-	struct device_d *dev = cdev->dev;
+	resource_size_t map_base = dev_resource_get_start(cdev->dev);
 	unsigned val;
 
 	/* value is calculated so : PCLK / (16 * baudrate) -1 */
 	val = s3c24xx_get_pclk() / (16 * baudrate) - 1;
-	writew(val, dev->map_base + UBRDIV);
+	writew(val, map_base + UBRDIV);
 
 	return 0;
 }
 
 static int s3c24x0_serial_init_port(struct console_device *cdev)
 {
-	struct device_d *dev = cdev->dev;
+	resource_size_t map_base = dev_resource_get_start(cdev->dev);
 
 	/* FIFO enable, Tx/Rx FIFO clear */
-	writeb(0x07, dev->map_base + UFCON);
-	writeb(0x00, dev->map_base + UMCON);
+	writeb(0x07, map_base + UFCON);
+	writeb(0x00, map_base + UMCON);
 
 	/* Normal,No parity,1 stop,8 bit */
-	writeb(0x03, dev->map_base + ULCON);
+	writeb(0x03, map_base + ULCON);
 	/*
 	 * tx=level,rx=edge,disable timeout int.,enable rx error int.,
 	 * normal,interrupt or polling
 	 */
-	writew(0x0245, dev->map_base + UCON);
+	writew(0x0245, map_base + UCON);
 
 #ifdef CONFIG_DRIVER_SERIAL_S3C24X0_AUTOSYNC
-	writeb(0x01, dev->map_base + UMCON); /* RTS up */
+	writeb(0x01, map_base + UMCON); /* RTS up */
 #endif
 
 	return 0;
@@ -78,21 +78,21 @@ static int s3c24x0_serial_init_port(struct console_device *cdev)
 
 static void s3c24x0_serial_putc(struct console_device *cdev, char c)
 {
-	struct device_d *dev = cdev->dev;
+	resource_size_t map_base = dev_resource_get_start(cdev->dev);
 
 	/* Wait for Tx FIFO not full */
-	while (!(readb(dev->map_base + UTRSTAT) & 0x2))
+	while (!(readb(map_base + UTRSTAT) & 0x2))
 		;
 
-	writeb(c, dev->map_base + UTXH);
+	writeb(c, map_base + UTXH);
 }
 
 static int s3c24x0_serial_tstc(struct console_device *cdev)
 {
-	struct device_d *dev = cdev->dev;
+	resource_size_t map_base = dev_resource_get_start(cdev->dev);
 
 	/* If receive fifo is empty, return false */
-	if (readb(dev->map_base + UTRSTAT) & 0x1)
+	if (readb(map_base + UTRSTAT) & 0x1)
 		return 1;
 
 	return 0;
@@ -100,20 +100,20 @@ static int s3c24x0_serial_tstc(struct console_device *cdev)
 
 static int s3c24x0_serial_getc(struct console_device *cdev)
 {
-	struct device_d *dev = cdev->dev;
+	resource_size_t map_base = dev_resource_get_start(cdev->dev);
 
 	/* wait for a character */
-	while (!(readb(dev->map_base + UTRSTAT) & 0x1))
+	while (!(readb(map_base + UTRSTAT) & 0x1))
 		;
 
-	return readb(dev->map_base + URXH);
+	return readb(map_base + URXH);
 }
 
 static void s3c24x0_serial_flush(struct console_device *cdev)
 {
-	struct device_d *dev = cdev->dev;
+	resource_size_t map_base = dev_resource_get_start(cdev->dev);
 
-	while (!readb(dev->map_base + UTRSTAT) & 0x4)
+	while (!readb(map_base + UTRSTAT) & 0x4)
 		;
 }
 
diff --git a/drivers/serial/stm-serial.c b/drivers/serial/stm-serial.c
index 90563f5..e6ffb77 100644
--- a/drivers/serial/stm-serial.c
+++ b/drivers/serial/stm-serial.c
@@ -60,64 +60,64 @@ struct stm_serial_local {
 
 static void stm_serial_putc(struct console_device *cdev, char c)
 {
-	struct device_d *dev = cdev->dev;
+	resource_size_t map_base = dev_resource_get_start(cdev->dev);
 
 	/* Wait for room in TX FIFO */
-	while (readl(dev->map_base + UARTDBGFR) & TXFF)
+	while (readl(map_base + UARTDBGFR) & TXFF)
 		;
 
-	writel(c, dev->map_base + UARTDBGDR);
+	writel(c, map_base + UARTDBGDR);
 }
 
 static int stm_serial_tstc(struct console_device *cdev)
 {
-	struct device_d *dev = cdev->dev;
+	resource_size_t map_base = dev_resource_get_start(cdev->dev);
 
 	/* Check if RX FIFO is not empty */
-	return !(readl(dev->map_base + UARTDBGFR) & RXFE);
+	return !(readl(map_base + UARTDBGFR) & RXFE);
 }
 
 static int stm_serial_getc(struct console_device *cdev)
 {
-	struct device_d *dev = cdev->dev;
+	resource_size_t map_base = dev_resource_get_start(cdev->dev);
 
 	/* Wait while TX FIFO is empty */
-	while (readl(dev->map_base + UARTDBGFR) & RXFE)
+	while (readl(map_base + UARTDBGFR) & RXFE)
 		;
 
-	return readl(dev->map_base + UARTDBGDR) & 0xff;
+	return readl(map_base + UARTDBGDR) & 0xff;
 }
 
 static void stm_serial_flush(struct console_device *cdev)
 {
-	struct device_d *dev = cdev->dev;
+	resource_size_t map_base = dev_resource_get_start(cdev->dev);
 
 	/* Wait for TX FIFO empty */
-	while (readl(dev->map_base + UARTDBGFR) & TXFF)
+	while (readl(map_base + UARTDBGFR) & TXFF)
 		;
 }
 
 static int stm_serial_setbaudrate(struct console_device *cdev, int new_baudrate)
 {
-	struct device_d *dev = cdev->dev;
+	resource_size_t map_base = dev_resource_get_start(cdev->dev);
 	struct stm_serial_local *local = container_of(cdev, struct stm_serial_local, cdev);
 	uint32_t cr, lcr_h, quot;
 
 	/* Disable everything */
-	cr = readl(dev->map_base + UARTDBGCR);
-	writel(0, dev->map_base + UARTDBGCR);
+	cr = readl(map_base + UARTDBGCR);
+	writel(0, map_base + UARTDBGCR);
 
 	/* Calculate and set baudrate */
 	quot = (imx_get_xclk() * 4000) / new_baudrate;
-	writel(quot & 0x3f, dev->map_base + UARTDBGFBRD);
-	writel(quot >> 6, dev->map_base + UARTDBGIBRD);
+	writel(quot & 0x3f, map_base + UARTDBGFBRD);
+	writel(quot >> 6, map_base + UARTDBGIBRD);
 
 	/* Set 8n1 mode, enable FIFOs */
 	lcr_h = WLEN8 | FEN;
-	writel(lcr_h, dev->map_base + UARTDBGLCR_H);
+	writel(lcr_h, map_base + UARTDBGLCR_H);
 
 	/* Re-enable debug UART */
-	writel(cr, dev->map_base + UARTDBGCR);
+	writel(cr, map_base + UARTDBGCR);
 
 	local->baudrate = new_baudrate;
 
@@ -133,7 +133,7 @@ static int stm_clocksource_clock_change(struct notifier_block *nb, unsigned long
 
 static int stm_serial_init_port(struct console_device *cdev)
 {
-	struct device_d *dev = cdev->dev;
+	resource_size_t map_base = dev_resource_get_start(cdev->dev);
 	/*
 	 * If the board specific file registers this console we should force
 	 * the usage of the debug UART pins, to be able to let the user see
@@ -143,10 +143,10 @@ static int stm_serial_init_port(struct console_device *cdev)
 	imx_gpio_mode(PWM0_DUART_RX);
 
 	/* Disable UART */
-	writel(0, dev->map_base + UARTDBGCR);
+	writel(0, map_base + UARTDBGCR);
 
 	/* Mask interrupts */
-	writel(0, dev->map_base + UARTDBGIMSC);
+	writel(0, map_base + UARTDBGIMSC);
 
 	return 0;
 }
@@ -164,6 +164,8 @@ static struct stm_serial_local stm_device = {
 
 static int stm_serial_probe(struct device_d *dev)
 {
+	resource_size_t map_base = dev_resource_get_start(dev);
+
 	stm_device.cdev.dev = dev;
 	dev->type_data = &stm_device.cdev;
 
@@ -171,7 +173,7 @@ static int stm_serial_probe(struct device_d *dev)
 	stm_serial_setbaudrate(&stm_device.cdev, CONFIG_BAUDRATE);
 
 	/* Enable UART */
-	writel(TXE | RXE | UARTEN, dev->map_base + UARTDBGCR);
+	writel(TXE | RXE | UARTEN, map_base + UARTDBGCR);
 
 	console_register(&stm_device.cdev);
 	stm_device.notify.notifier_call = stm_clocksource_clock_change;
diff --git a/drivers/spi/imx_spi.c b/drivers/spi/imx_spi.c
index 2ad1bfa..b37516e 100644
--- a/drivers/spi/imx_spi.c
+++ b/drivers/spi/imx_spi.c
@@ -382,7 +382,7 @@ static int imx_spi_probe(struct device_d *dev)
 	imx->chipselect = spi_imx_devtype_data[version].chipselect;
 	imx->xchg_single = spi_imx_devtype_data[version].xchg_single;
 	imx->init = spi_imx_devtype_data[version].init;
-	imx->regs = (void __iomem *)dev->map_base;
+	imx->regs = (void __iomem *)dev_resource_get_start(dev);
 
 	imx->init(imx);
 
diff --git a/drivers/usb/gadget/fsl_udc.c b/drivers/usb/gadget/fsl_udc.c
index 48fd0b5..6ea5818 100644
--- a/drivers/usb/gadget/fsl_udc.c
+++ b/drivers/usb/gadget/fsl_udc.c
@@ -2241,7 +2241,7 @@ static int fsl_udc_probe(struct device_d *dev)
 	udc_controller = xzalloc(sizeof(*udc_controller));
 	udc_controller->stopped = 1;
 
-	dr_regs = (void *)dev->map_base;
+	dr_regs = (void *)dev_resource_get_start(dev);
 
 	/* Read Device Controller Capability Parameters register */
 	dccparams = readl(&dr_regs->dccparams);
diff --git a/drivers/usb/host/ehci-hcd.c b/drivers/usb/host/ehci-hcd.c
index 802c548..630d2c7 100644
--- a/drivers/usb/host/ehci-hcd.c
+++ b/drivers/usb/host/ehci-hcd.c
@@ -895,6 +895,7 @@ static int ehci_probe(struct device_d *dev)
 	struct ehci_priv *ehci;
 	uint32_t reg;
 	struct ehci_platform_data *pdata = dev->platform_data;
+	resource_size_t map_base = dev_resource_get_start(dev);
 
 	ehci = xmalloc(sizeof(struct ehci_priv));
 	host = &ehci->host;
@@ -902,16 +903,16 @@ static int ehci_probe(struct device_d *dev)
 
 	if (pdata) {
 		ehci->flags = pdata->flags;
-		ehci->hccr = (void *)(dev->map_base + pdata->hccr_offset);
-		ehci->hcor = (void *)(dev->map_base + pdata->hcor_offset);
+		ehci->hccr = (void *)(map_base + pdata->hccr_offset);
+		ehci->hcor = (void *)(map_base + pdata->hcor_offset);
 	}
 	else {
 		/* default to EHCI_HAS_TT to not change behaviour of boards
 		 * with platform_data
 		 */
 		ehci->flags = EHCI_HAS_TT;
-		ehci->hccr = (void *)(dev->map_base + 0x100);
-		ehci->hcor = (void *)(dev->map_base + 0x140);
+		ehci->hccr = (void *)(map_base + 0x100);
+		ehci->hcor = (void *)(map_base + 0x140);
 	}
 
 	host->init = ehci_init;
diff --git a/drivers/video/fb.c b/drivers/video/fb.c
index f9a425e..ce01ca6 100644
--- a/drivers/video/fb.c
+++ b/drivers/video/fb.c
@@ -75,8 +75,8 @@ int register_framebuffer(struct fb_info *info)
 	info->cdev.size = info->xres * info->yres * (info->bits_per_pixel >> 3);
 	info->cdev.dev = &info->dev;
 	info->cdev.priv = info;
-	info->cdev.dev->map_base = (unsigned long)info->screen_base;
-	info->cdev.dev->size = info->cdev.size;
+	dev_resource_set_start(info->cdev.dev, (resource_size_t)info->screen_base);
+	dev_resource_set_size(info->cdev.dev, info->cdev.size);
 
 	dev = &info->dev;
 	dev->priv = info;
diff --git a/drivers/video/imx-ipu-fb.c b/drivers/video/imx-ipu-fb.c
index c38082d..aec2f4c 100644
--- a/drivers/video/imx-ipu-fb.c
+++ b/drivers/video/imx-ipu-fb.c
@@ -858,7 +858,7 @@ static int imxfb_probe(struct device_d *dev)
 	fbi = xzalloc(sizeof(*fbi));
 	info = &fbi->info;
 
-	fbi->regs = (void *)dev->map_base;
+	fbi->regs = (void *)dev_resource_get_start(dev);
 	fbi->dev = dev;
 	info->priv = fbi;
 	info->fbops = &imxfb_ops;
diff --git a/drivers/video/imx.c b/drivers/video/imx.c
index ac51858..5b1fd9d 100644
--- a/drivers/video/imx.c
+++ b/drivers/video/imx.c
@@ -547,7 +547,7 @@ static int imxfb_probe(struct device_d *dev)
 	info = &fbi->info;
 
 	fbi->mode = pdata->mode;
-	fbi->regs = (void *)dev->map_base;
+	fbi->regs = (void *)dev_resource_get_start(dev);
 	fbi->pcr = pdata->mode->pcr;
 	fbi->pwmr = pdata->pwmr;
 	fbi->lscr1 = pdata->lscr1;
diff --git a/fs/devfs.c b/fs/devfs.c
index 7019c8d..8b8e96e 100644
--- a/fs/devfs.c
+++ b/fs/devfs.c
@@ -216,7 +216,7 @@ static int devfs_ioctl(struct device_d *_dev, FILE *f, int request, void *buf)
 
 static int devfs_truncate(struct device_d *dev, FILE *f, ulong size)
 {
-	if (size > f->dev->size)
+	if (size > dev_resource_get_size(f->dev))
 		return -ENOSPC;
 	return 0;
 }
diff --git a/fs/fs.c b/fs/fs.c
index 3b5f284..74d654b 100644
--- a/fs/fs.c
+++ b/fs/fs.c
@@ -1012,14 +1012,16 @@ ssize_t mem_read(struct cdev *cdev, void *buf, size_t count, ulong offset, ulong
 {
 	ulong size;
 	struct device_d *dev;
+	resource_size_t map_base;
 
 	if (!cdev->dev)
 		return -1;
 	dev = cdev->dev;
+	map_base = dev_resource_get_start(cdev->dev);
 
-	size = min((ulong)count, dev->size - offset);
-	debug("mem_read: dev->map_base: %p size: %d offset: %d\n",dev->map_base, size, offset);
-	memcpy_sz(buf, (void *)(dev->map_base + offset), size, flags & O_RWSIZE_MASK);
+	size = min((ulong)count, dev_resource_get_size(dev) - offset);
+	debug("mem_read: map_base: %p size: %d offset: %d\n", map_base, size, offset);
+	memcpy_sz(buf, (void *)(map_base + offset), size, flags & O_RWSIZE_MASK);
 	return size;
 }
 EXPORT_SYMBOL(mem_read);
@@ -1028,13 +1030,15 @@ ssize_t mem_write(struct cdev *cdev, const void *buf, size_t count, ulong offset
 {
 	ulong size;
 	struct device_d *dev;
+	resource_size_t map_base;
 
 	if (!cdev->dev)
 		return -1;
 	dev = cdev->dev;
+	map_base = dev_resource_get_start(cdev->dev);
 
-	size = min((ulong)count, dev->size - offset);
-	memcpy_sz((void *)(dev->map_base + offset), buf, size, flags & O_RWSIZE_MASK);
+	size = min((ulong)count, map_base - offset);
+	memcpy_sz((void *)(map_base + offset), buf, size, flags & O_RWSIZE_MASK);
 	return size;
 }
 EXPORT_SYMBOL(mem_write);
diff --git a/include/driver.h b/include/driver.h
index b9edca0..c7dce1e 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"
@@ -70,11 +71,8 @@ struct device_d {
 	 * something like eth0 or nor0. */
 	int id;
 
-	resource_size_t size;
-
-	/*! For devices which are directly mapped into memory, i.e. NOR
-	 * Flash or SDRAM. */
-	resource_size_t map_base;
+	struct resource *resource;
+	int num_resources;
 
 	void *platform_data; /*! board specific information about this device */
 
@@ -184,6 +182,41 @@ static inline const char *dev_name(const struct device_d *dev)
 	return dev_id(dev);
 }
 
+/* ressource helper */
+static inline resource_size_t dev_resource_get_start(struct device_d *dev)
+{
+	if (!dev || !dev->resource)
+		return 0;
+
+	return dev->resource[0].start;
+}
+
+static inline void dev_resource_set_start(struct device_d *dev,
+					  resource_size_t start)
+{
+	if (!dev || !dev->resource)
+		return;
+
+	dev->resource[0].start = start;
+}
+
+static inline resource_size_t dev_resource_get_size(struct device_d *dev)
+{
+	if (!dev || !dev->resource)
+		return 0;
+
+	return dev->resource[0].size;
+}
+
+static inline void dev_resource_set_size(struct device_d *dev,
+					 resource_size_t size)
+{
+	if (!dev || !dev->resource)
+		return;
+
+	dev->resource[0].size = size;
+}
+
 /* linear list over all available devices
  */
 extern struct list_head device_list;
@@ -326,10 +359,5 @@ int devfs_add_partition(const char *devname, unsigned long offset, size_t size,
 		int flags, const char *name);
 int devfs_del_partition(const char *name);
 
-struct memory_platform_data {
-	char *name;
-	unsigned int flags;
-};
-
 #endif /* DRIVER_H */
 
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 ff92e44..a383e9b 100644
--- a/lib/driver.c
+++ b/lib/driver.c
@@ -225,7 +225,7 @@ int generic_memmap_ro(struct cdev *cdev, void **map, int flags)
 
 	if (flags & PROT_WRITE)
 		return -EACCES;
-	*map = (void *)cdev->dev->map_base;
+	*map = (void *)dev_resource_get_start(cdev->dev);
 	return 0;
 }
 
@@ -234,7 +234,7 @@ int generic_memmap_rw(struct cdev *cdev, void **map, int flags)
 	if (!cdev->dev)
 		return -EINVAL;
 
-	*map = (void *)cdev->dev->map_base;
+	*map = (void *)dev_resource_get_start(cdev->dev);
 	return 0;
 }
 
@@ -322,7 +322,8 @@ static int do_devinfo(struct command *cmdtp, int argc, char *argv[])
 		}
 
 		printf("base  : 0x%08x\nsize  : 0x%08x\ndriver: %s\n\n",
-			dev->map_base, dev->size,
+			dev_resource_get_start(dev),
+			dev_resource_get_size(dev),
 			dev->driver ? 
 				dev->driver->name : "none");
 
-- 
1.7.1


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

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

* [PATCH 2/5] mem: add multiple resource support
  2010-11-12 18:02 [To test] [PATCH 0/5] device: introduce resource structure Jean-Christophe PLAGNIOL-VILLARD
  2010-11-12 18:18 ` [PATCH 1/5] device: introduce resource structure to simplify resource delaration Jean-Christophe PLAGNIOL-VILLARD
@ 2010-11-12 18:18 ` Jean-Christophe PLAGNIOL-VILLARD
  2010-11-12 18:18 ` [PATCH 3/5] arm/setup_memory_tags: " Jean-Christophe PLAGNIOL-VILLARD
                   ` (5 subsequent siblings)
  7 siblings, 0 replies; 22+ messages in thread
From: Jean-Christophe PLAGNIOL-VILLARD @ 2010-11-12 18:18 UTC (permalink / raw)
  To: barebox

Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
---
 commands/mem.c |   21 +++++++++++++--------
 1 files changed, 13 insertions(+), 8 deletions(-)

diff --git a/commands/mem.c b/commands/mem.c
index 05956ab..d35c8c0 100644
--- a/commands/mem.c
+++ b/commands/mem.c
@@ -589,18 +589,23 @@ static struct file_operations memops = {
 
 static int mem_probe(struct device_d *dev)
 {
-	struct resource *res = &dev->resource[0];
+	int i;
+	struct resource *res;
 	struct cdev *cdev;
 
-	cdev = xzalloc(sizeof (*cdev));
-	dev->priv = cdev;
+	for (i = 0; i < dev->num_resources; i++) {
+		res = &dev->resource[i];
 
-	cdev->name = (char*)res->name;
-	cdev->size = res->size;
-	cdev->ops = &memops;
-	cdev->dev = dev;
+		cdev = xzalloc(sizeof (*cdev));
+		dev->priv = cdev;
 
-	devfs_create(cdev);
+		cdev->name = (char*)res->name;
+		cdev->size = res->size;
+		cdev->ops = &memops;
+		cdev->dev = dev;
+
+		devfs_create(cdev);
+	}
 
 	return 0;
 }
-- 
1.7.1


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

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

* [PATCH 3/5] arm/setup_memory_tags: add multiple resource support
  2010-11-12 18:02 [To test] [PATCH 0/5] device: introduce resource structure Jean-Christophe PLAGNIOL-VILLARD
  2010-11-12 18:18 ` [PATCH 1/5] device: introduce resource structure to simplify resource delaration Jean-Christophe PLAGNIOL-VILLARD
  2010-11-12 18:18 ` [PATCH 2/5] mem: add multiple resource support Jean-Christophe PLAGNIOL-VILLARD
@ 2010-11-12 18:18 ` Jean-Christophe PLAGNIOL-VILLARD
  2010-11-12 18:18 ` [PATCH 4/5] edb93xx: convert to multiple mem resources Jean-Christophe PLAGNIOL-VILLARD
                   ` (4 subsequent siblings)
  7 siblings, 0 replies; 22+ messages in thread
From: Jean-Christophe PLAGNIOL-VILLARD @ 2010-11-12 18:18 UTC (permalink / raw)
  To: barebox

Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
---
 arch/arm/lib/armlinux.c |   15 ++++++++++-----
 1 files changed, 10 insertions(+), 5 deletions(-)

diff --git a/arch/arm/lib/armlinux.c b/arch/arm/lib/armlinux.c
index d1f8281..b74c5e8 100644
--- a/arch/arm/lib/armlinux.c
+++ b/arch/arm/lib/armlinux.c
@@ -73,15 +73,20 @@ static LIST_HEAD(memory_list);
 static void setup_memory_tags(void)
 {
 	struct arm_memory *mem;
+	struct resource *res;
+	int i;
 
 	list_for_each_entry(mem, &memory_list, list) {
-		params->hdr.tag = ATAG_MEM;
-		params->hdr.size = tag_size(tag_mem32);
+		for (i = 0; i < mem->dev->num_resources; i++) {
+			res = &mem->dev->resource[i];
+			params->hdr.tag = ATAG_MEM;
+			params->hdr.size = tag_size(tag_mem32);
 
-		params->u.mem.start = dev_resource_get_start(mem->dev);
-		params->u.mem.size = dev_resource_get_size(mem->dev);
+			params->u.mem.start = res->start;
+			params->u.mem.size = res->size;
 
-		params = tag_next(params);
+			params = tag_next(params);
+		}
 	}
 }
 
-- 
1.7.1


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

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

* [PATCH 4/5] edb93xx: convert to multiple mem resources
  2010-11-12 18:02 [To test] [PATCH 0/5] device: introduce resource structure Jean-Christophe PLAGNIOL-VILLARD
                   ` (2 preceding siblings ...)
  2010-11-12 18:18 ` [PATCH 3/5] arm/setup_memory_tags: " Jean-Christophe PLAGNIOL-VILLARD
@ 2010-11-12 18:18 ` Jean-Christophe PLAGNIOL-VILLARD
  2010-11-12 18:18 ` [PATCH 5/5] pcm037: " Jean-Christophe PLAGNIOL-VILLARD
                   ` (3 subsequent siblings)
  7 siblings, 0 replies; 22+ messages in thread
From: Jean-Christophe PLAGNIOL-VILLARD @ 2010-11-12 18:18 UTC (permalink / raw)
  To: barebox

Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
---
 arch/arm/boards/edb93xx/edb93xx.c |   68 +++++-------------------------------
 1 files changed, 10 insertions(+), 58 deletions(-)

diff --git a/arch/arm/boards/edb93xx/edb93xx.c b/arch/arm/boards/edb93xx/edb93xx.c
index 36cbb51..01ff2b5 100644
--- a/arch/arm/boards/edb93xx/edb93xx.c
+++ b/arch/arm/boards/edb93xx/edb93xx.c
@@ -52,75 +52,45 @@ static struct device_d cfi_dev = {
 	.resource	= cfi_dev_resources,
 };
 
-static struct resource sdram0_dev_resources[] = {
+static struct resource sdram_dev_resources[] = {
 	[0] = {
 		.name	= "ram0",
 		.start	= CONFIG_EP93XX_SDRAM_BANK0_BASE,
 		.size	= CONFIG_EP93XX_SDRAM_BANK0_SIZE,
 		.flags = DEVFS_RDWR,
 	},
-};
-
-static struct device_d sdram0_dev = {
-	.id	  = -1,
-	.name     = "mem",
-	.num_resources	= ARRAY_SIZE(sdram0_dev_resources),
-	.resource	= sdram0_dev_resources,
-};
-
 #if (CONFIG_EP93XX_SDRAM_NUM_BANKS >= 2)
-static struct resource sdram1_dev_resources[] = {
-	[0] = {
+	[1] = {
 		.name	= "ram1",
 		.start	= CONFIG_EP93XX_SDRAM_BANK1_BASE,
 		.size	= CONFIG_EP93XX_SDRAM_BANK1_SIZE,
 		.flags	= DEVFS_RDWR,
 	},
-};
-
-static struct device_d sdram1_dev = {
-	.id	  = -1,
-	.name     = "mem",
-	.num_resources	= ARRAY_SIZE(sdram1_dev_resources),
-	.resource	= sdram1_dev_resources,
-};
 #endif
-
 #if (CONFIG_EP93XX_SDRAM_NUM_BANKS >= 3)
-static struct resource sdram2_dev_resources[] = {
-	[0] = {
+	[2] = {
 		.name	= "ram2",
 		.start	= CONFIG_EP93XX_SDRAM_BANK2_BASE,
 		.size	= CONFIG_EP93XX_SDRAM_BANK2_SIZE,
 		.flags	= DEVFS_RDWR,
 	},
-};
-
-static struct device_d sdram2_dev = {
-	.id	  = -1,
-	.name     = "mem",
-	.num_resources	= ARRAY_SIZE(sdram2_dev_resources),
-	.resource	= sdram2_dev_resources,
-};
 #endif
-
 #if (CONFIG_EP93XX_SDRAM_NUM_BANKS == 4)
-static struct resource sdram3_dev_resources[] = {
-	[0] = {
+	[3] = {
 		.name	= "ram3",
 		.start	= CONFIG_EP93XX_SDRAM_BANK3_BASE,
 		.size	= CONFIG_EP93XX_SDRAM_BANK3_SIZE,
 		.flags	= DEVFS_RDWR,
 	},
+#endif
 };
 
-static struct device_d sdram3_dev = {
+static struct device_d sdram_dev = {
 	.id	  = -1,
 	.name     = "mem",
-	.num_resources	= ARRAY_SIZE(sdram3_dev_resources),
-	.resource	= sdram3_dev_resources,
+	.num_resources	= ARRAY_SIZE(sdram_dev_resources),
+	.resource	= sdram_dev_resources,
 };
-#endif
 
 static struct device_d eth_dev = {
 	.id	  = -1,
@@ -140,27 +110,9 @@ static int ep93xx_devices_init(void)
 
 	protect_file("/dev/env0", 1);
 
-	register_device(&sdram0_dev);
-#if (CONFIG_EP93XX_SDRAM_NUM_BANKS >= 2)
-	register_device(&sdram1_dev);
-#endif
-#if (CONFIG_EP93XX_SDRAM_NUM_BANKS >= 3)
-	register_device(&sdram2_dev);
-#endif
-#if (CONFIG_EP93XX_SDRAM_NUM_BANKS == 4)
-	register_device(&sdram3_dev);
-#endif
+	register_device(&sdram_dev);
 
-	armlinux_add_dram(&sdram0_dev);
-#if (CONFIG_EP93XX_SDRAM_NUM_BANKS >= 2)
-	armlinux_add_dram(&sdram1_dev);
-#endif
-#if (CONFIG_EP93XX_SDRAM_NUM_BANKS >= 3)
-	armlinux_add_dram(&sdram2_dev);
-#endif
-#if (CONFIG_EP93XX_SDRAM_NUM_BANKS == 4)
-	armlinux_add_dram(&sdram3_dev);
-#endif
+	armlinux_add_dram(&sdram_dev);
 
 	register_device(&eth_dev);
 
-- 
1.7.1


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

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

* [PATCH 5/5] pcm037: convert to multiple mem resources
  2010-11-12 18:02 [To test] [PATCH 0/5] device: introduce resource structure Jean-Christophe PLAGNIOL-VILLARD
                   ` (3 preceding siblings ...)
  2010-11-12 18:18 ` [PATCH 4/5] edb93xx: convert to multiple mem resources Jean-Christophe PLAGNIOL-VILLARD
@ 2010-11-12 18:18 ` Jean-Christophe PLAGNIOL-VILLARD
  2010-11-17 13:59 ` [PATCH 1/2] mem: multiple resource support allow exclude a resource Jean-Christophe PLAGNIOL-VILLARD
                   ` (2 subsequent siblings)
  7 siblings, 0 replies; 22+ messages in thread
From: Jean-Christophe PLAGNIOL-VILLARD @ 2010-11-12 18:18 UTC (permalink / raw)
  To: barebox

Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
---
 arch/arm/boards/pcm037/pcm037.c |   45 ++++++++++++--------------------------
 1 files changed, 14 insertions(+), 31 deletions(-)

diff --git a/arch/arm/boards/pcm037/pcm037.c b/arch/arm/boards/pcm037/pcm037.c
index 38725a2..a1783af 100644
--- a/arch/arm/boards/pcm037/pcm037.c
+++ b/arch/arm/boards/pcm037/pcm037.c
@@ -102,46 +102,35 @@ static struct device_d network_dev = {
 #define SDRAM0	256
 #endif
 
-static struct resource sdram0_dev_resources[] = {
-	[0] = {
-		.name	= "ram0",
-		.start	= IMX_SDRAM_CS0,
-		.size	= SDRAM0 * 1024 * 1024,	/* fix size */
-		.flags	= DEVFS_RDWR,
-	},
-};
-
-static struct device_d sdram0_dev = {
-	.id	  = -1,
-	.name     = "mem",
-	.num_resources	= ARRAY_SIZE(sdram0_dev_resources),
-	.resource	= sdram0_dev_resources,
-};
-
-#ifndef CONFIG_PCM037_SDRAM_BANK1_NONE
-
 #if defined CONFIG_PCM037_SDRAM_BANK1_128MB
 #define SDRAM1	128
 #elif defined CONFIG_PCM037_SDRAM_BANK1_256MB
 #define SDRAM1	256
 #endif
 
-static struct resource sdram1_dev_resources[] = {
+static struct resource sdram_dev_resources[] = {
 	[0] = {
+		.name	= "ram0",
+		.start	= IMX_SDRAM_CS0,
+		.size	= SDRAM0 * 1024 * 1024,	/* fix size */
+		.flags	= DEVFS_RDWR,
+	},
+#ifndef CONFIG_PCM037_SDRAM_BANK1_NONE
+	[1] = {
 		.name	= "ram1",
 		.start	= IMX_SDRAM_CS1,
 		.size	= SDRAM1 * 1024 * 1024,	/* fix size */
 		.flags	= DEVFS_RDWR,
 	},
+#endif
 };
 
-static struct device_d sdram1_dev = {
+static struct device_d sdram_dev = {
 	.id	  = -1,
 	.name     = "mem",
-	.num_resources	= ARRAY_SIZE(sdram1_dev_resources),
-	.resource	= sdram1_dev_resources,
+	.num_resources	= ARRAY_SIZE(sdram_dev_resources),
+	.resource	= sdram_dev_resources,
 };
-#endif
 
 struct imx_nand_platform_data nand_info = {
 	.width = 1,
@@ -328,20 +317,14 @@ static int imx31_devices_init(void)
 	imx31_add_nand(&nand_info);
 	register_device(&network_dev);
 
-	register_device(&sdram0_dev);
-#ifndef CONFIG_PCM037_SDRAM_BANK1_NONE
-	register_device(&sdram1_dev);
-#endif
+	register_device(&sdram_dev);
 #ifdef CONFIG_USB
 	pcm037_usb_init();
 	register_device(&usbotg_dev);
 	register_device(&usbh2_dev);
 #endif
 
-	armlinux_add_dram(&sdram0_dev);
-#ifndef CONFIG_PCM037_SDRAM_BANK1_NONE
-	armlinux_add_dram(&sdram1_dev);
-#endif
+	armlinux_add_dram(&sdram_dev);
 	armlinux_set_bootparams((void *)0x80000100);
 	armlinux_set_architecture(MACH_TYPE_PCM037);
 
-- 
1.7.1


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

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

* [PATCH 1/2] mem: multiple resource support allow exclude a resource
  2010-11-12 18:02 [To test] [PATCH 0/5] device: introduce resource structure Jean-Christophe PLAGNIOL-VILLARD
                   ` (4 preceding siblings ...)
  2010-11-12 18:18 ` [PATCH 5/5] pcm037: " Jean-Christophe PLAGNIOL-VILLARD
@ 2010-11-17 13:59 ` Jean-Christophe PLAGNIOL-VILLARD
  2010-11-19  8:24   ` Sascha Hauer
  2010-11-17 13:59 ` [PATCH 2/2] mem: convert to DEVFS_MEM_BAREBOX_ONLY for freescale-mx25-3-stack/pcm037/pvm038 Jean-Christophe PLAGNIOL-VILLARD
  2010-11-17 14:02 ` [To test] [PATCH 0/5] device: introduce resource structure Jean-Christophe PLAGNIOL-VILLARD
  7 siblings, 1 reply; 22+ messages in thread
From: Jean-Christophe PLAGNIOL-VILLARD @ 2010-11-17 13:59 UTC (permalink / raw)
  To: barebox

introduce DEVFS_MEM_BAREBOX_ONLY for this purpose

Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
---
 arch/arm/lib/armlinux.c |    4 ++++
 include/driver.h        |    1 +
 2 files changed, 5 insertions(+), 0 deletions(-)

diff --git a/arch/arm/lib/armlinux.c b/arch/arm/lib/armlinux.c
index b74c5e8..55d1401 100644
--- a/arch/arm/lib/armlinux.c
+++ b/arch/arm/lib/armlinux.c
@@ -79,6 +79,10 @@ static void setup_memory_tags(void)
 	list_for_each_entry(mem, &memory_list, list) {
 		for (i = 0; i < mem->dev->num_resources; i++) {
 			res = &mem->dev->resource[i];
+
+			if (res->flags & DEVFS_MEM_BAREBOX_ONLY)
+				break;
+
 			params->hdr.tag = ATAG_MEM;
 			params->hdr.size = tag_size(tag_mem32);
 
diff --git a/include/driver.h b/include/driver.h
index c7dce1e..e98455c 100644
--- a/include/driver.h
+++ b/include/driver.h
@@ -354,6 +354,7 @@ ssize_t cdev_write(struct cdev *cdev, const void *buf, size_t count, ulong offse
 #define DEVFS_PARTITION_READONLY	(1 << 1)
 #define DEVFS_IS_PARTITION		(1 << 2)
 #define DEVFS_RDWR			(1 << 3)
+#define DEVFS_MEM_BAREBOX_ONLY		(1 << 4)
 
 int devfs_add_partition(const char *devname, unsigned long offset, size_t size,
 		int flags, const char *name);
-- 
1.7.1


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

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

* [PATCH 2/2] mem: convert to DEVFS_MEM_BAREBOX_ONLY for freescale-mx25-3-stack/pcm037/pvm038
  2010-11-12 18:02 [To test] [PATCH 0/5] device: introduce resource structure Jean-Christophe PLAGNIOL-VILLARD
                   ` (5 preceding siblings ...)
  2010-11-17 13:59 ` [PATCH 1/2] mem: multiple resource support allow exclude a resource Jean-Christophe PLAGNIOL-VILLARD
@ 2010-11-17 13:59 ` Jean-Christophe PLAGNIOL-VILLARD
  2010-11-17 14:09   ` Baruch Siach
  2010-11-17 14:02 ` [To test] [PATCH 0/5] device: introduce resource structure Jean-Christophe PLAGNIOL-VILLARD
  7 siblings, 1 reply; 22+ messages in thread
From: Jean-Christophe PLAGNIOL-VILLARD @ 2010-11-17 13:59 UTC (permalink / raw)
  To: barebox

Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
---
 arch/arm/boards/freescale-mx25-3-stack/3stack.c |   35 ++++++++---------------
 arch/arm/boards/pcm037/pcm037.c                 |   33 +++++++--------------
 arch/arm/boards/pcm038/pcm038.c                 |   23 ++++-----------
 3 files changed, 29 insertions(+), 62 deletions(-)

diff --git a/arch/arm/boards/freescale-mx25-3-stack/3stack.c b/arch/arm/boards/freescale-mx25-3-stack/3stack.c
index cb9ce79..434bd7f 100644
--- a/arch/arm/boards/freescale-mx25-3-stack/3stack.c
+++ b/arch/arm/boards/freescale-mx25-3-stack/3stack.c
@@ -113,8 +113,14 @@ static struct fec_platform_data fec_info = {
 	.phy_addr	= 1,
 };
 
-static struct resource sdram0_dev_resources[] = {
+static struct resource sdram_dev_resources[] = {
 	[0] = {
+		.name	= "sram0",
+		.start	= 0x78000000,
+		.size	= 128 * 1024,
+		.flags	= DEVFS_RDWR | DEVFS_MEM_BAREBOX_ONLY,
+	},
+	[1] = {
 		.name	= "ram0",
 		.start	= IMX_SDRAM_CS0,
 #if defined CONFIG_FREESCALE_MX25_3STACK_SDRAM_64MB_DDR2
@@ -128,27 +134,11 @@ static struct resource sdram0_dev_resources[] = {
 	},
 };
 
-static struct device_d sdram0_dev = {
-	.id	  = -1,
-	.name     = "mem",
-	.num_resources	= ARRAY_SIZE(sdram0_dev_resources),
-	.resource	= sdram0_dev_resources,
-};
-
-static struct resource sram0_dev_resources[] = {
-	[0] = {
-		.name	= "sram0",
-		.start	= 0x78000000,
-		.size	= 128 * 1024,
-		.flags	= DEVFS_RDWR,
-	},
-};
-
-static struct device_d sram0_dev = {
+static struct device_d sdram_dev = {
 	.id	  = -1,
 	.name     = "mem",
-	.num_resources	= ARRAY_SIZE(sram0_dev_resources),
-	.resource	= sram0_dev_resources,
+	.num_resources	= ARRAY_SIZE(sdram_dev_resources),
+	.resource	= sdram_dev_resources,
 };
 
 struct imx_nand_platform_data nand_info = {
@@ -266,13 +256,12 @@ static int imx25_devices_init(void)
 	devfs_add_partition("nand0", 0x40000, 0x20000, PARTITION_FIXED, "env_raw");
 	dev_add_bb_dev("env_raw", "env0");
 
-	register_device(&sdram0_dev);
-	register_device(&sram0_dev);
+	register_device(&sdram_dev);
 
 	i2c_register_board_info(0, i2c_devices, ARRAY_SIZE(i2c_devices));
 	imx25_add_i2c0(NULL);
 
-	armlinux_add_dram(&sdram0_dev);
+	armlinux_add_dram(&sdram_dev);
 	armlinux_set_bootparams((void *)0x80000100);
 	armlinux_set_architecture(MACH_TYPE_MX25_3DS);
 	armlinux_set_serial(imx_uid());
diff --git a/arch/arm/boards/pcm037/pcm037.c b/arch/arm/boards/pcm037/pcm037.c
index a1783af..1045950 100644
--- a/arch/arm/boards/pcm037/pcm037.c
+++ b/arch/arm/boards/pcm037/pcm037.c
@@ -58,26 +58,6 @@ static struct device_d cfi_dev = {
 };
 
 /*
- * up to 2MiB static RAM type memory, connected
- * to CS4, data width is 16 bit
- */
-static struct resource sram_dev_resources[] = {
-	[0] = {
-		.name	= "sram0",
-		.start	= IMX_CS4_BASE,
-		.size	= IMX_CS4_RANGE,	/* area size */
-		.flags	= DEVFS_RDWR,
-	},
-};
-
-static struct device_d sram_dev = {
-	.id	  = -1,
-	.name     = "mem",
-	.num_resources	= ARRAY_SIZE(sram_dev_resources),
-	.resource	= sram_dev_resources,
-};
-
-/*
  * SMSC 9217 network controller
  * connected to CS line 1 and interrupt line
  * GPIO3, data width is 16 bit
@@ -109,14 +89,24 @@ static struct device_d network_dev = {
 #endif
 
 static struct resource sdram_dev_resources[] = {
+/*
+ * up to 2MiB static RAM type memory, connected
+ * to CS4, data width is 16 bit
+ */
 	[0] = {
+		.name	= "sram0",
+		.start	= IMX_CS4_BASE,
+		.size	= IMX_CS4_RANGE,	/* area size */
+		.flags	= DEVFS_RDWR | DEVFS_MEM_BAREBOX_ONLY,
+	},
+	[1] = {
 		.name	= "ram0",
 		.start	= IMX_SDRAM_CS0,
 		.size	= SDRAM0 * 1024 * 1024,	/* fix size */
 		.flags	= DEVFS_RDWR,
 	},
 #ifndef CONFIG_PCM037_SDRAM_BANK1_NONE
-	[1] = {
+	[2] = {
 		.name	= "ram1",
 		.start	= IMX_SDRAM_CS1,
 		.size	= SDRAM1 * 1024 * 1024,	/* fix size */
@@ -313,7 +303,6 @@ static int imx31_devices_init(void)
 
 	protect_file("/dev/env0", 1);
 
-	register_device(&sram_dev);
 	imx31_add_nand(&nand_info);
 	register_device(&network_dev);
 
diff --git a/arch/arm/boards/pcm038/pcm038.c b/arch/arm/boards/pcm038/pcm038.c
index 1306f27..401b161 100644
--- a/arch/arm/boards/pcm038/pcm038.c
+++ b/arch/arm/boards/pcm038/pcm038.c
@@ -63,6 +63,12 @@ static struct device_d cfi_dev = {
 
 static struct resource sdram_dev_resources[] = {
 	[0] = {
+		.name	= "sram0",
+		.start	= 0xc8000000,
+		.size	= 512 * 1024, /* Can be up to 2MiB */
+		.flags	= DEVFS_RDWR | DEVFS_MEM_BAREBOX_ONLY,
+	},
+	[1] = {
 		.name 	= "ram0",
 		.start	= 0xa0000000,
 		.size	= 128 * 1024 * 1024,
@@ -77,22 +83,6 @@ static struct device_d sdram_dev = {
 	.resource	= sdram_dev_resources,
 };
 
-static struct resource sram_dev_resources[] = {
-	[0] = {
-		.name	= "sram0",
-		.start	= 0xc8000000,
-		.size	= 512 * 1024, /* Can be up to 2MiB */
-		.flags	= DEVFS_RDWR,
-	},
-};
-
-static struct device_d sram_dev = {
-	.id	  = -1,
-	.name     = "mem",
-	.num_resources	= ARRAY_SIZE(sram_dev_resources),
-	.resource	= sram_dev_resources,
-};
-
 static struct fec_platform_data fec_info = {
 	.xcv_type = MII100,
 	.phy_addr = 1,
@@ -320,7 +310,6 @@ static int pcm038_devices_init(void)
 	register_device(&cfi_dev);
 	imx27_add_nand(&nand_info);
 	register_device(&sdram_dev);
-	register_device(&sram_dev);
 	imx27_add_fb(&pcm038_fb_data);
 
 #ifdef CONFIG_USB
-- 
1.7.1


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

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

* Re: [To test] [PATCH 0/5] device: introduce resource structure
  2010-11-12 18:02 [To test] [PATCH 0/5] device: introduce resource structure Jean-Christophe PLAGNIOL-VILLARD
                   ` (6 preceding siblings ...)
  2010-11-17 13:59 ` [PATCH 2/2] mem: convert to DEVFS_MEM_BAREBOX_ONLY for freescale-mx25-3-stack/pcm037/pvm038 Jean-Christophe PLAGNIOL-VILLARD
@ 2010-11-17 14:02 ` Jean-Christophe PLAGNIOL-VILLARD
  7 siblings, 0 replies; 22+ messages in thread
From: Jean-Christophe PLAGNIOL-VILLARD @ 2010-11-17 14:02 UTC (permalink / raw)
  To: barebox

Hi,

	update version + two patches against current next

The following changes since commit f90e136aa22ab13a3a8a321ae00e013d489a9f81:

  Merge branch 'master' into next (2010-11-17 10:23:56 +0100)

are available in the git repository at:

  git://git.jcrosoft.org/barebox.git mem

Jean-Christophe PLAGNIOL-VILLARD (7):
      device: introduce resource structure to simplify resource delaration
      mem: add multiple resource support
      arm/setup_memory_tags: add multiple resource support
      edb93xx: convert to multiple mem resources
      pcm037: convert to multiple mem resources
      mem: multiple resource support allow exclude a resource
      mem: convert to DEVFS_MEM_BAREBOX_ONLY for freescale-mx25-3-stack/pcm037/pvm038

 Documentation/porting.txt                         |   11 ++-
 arch/arm/boards/a9m2410/a9m2410.c                 |   61 +++++++---
 arch/arm/boards/a9m2440/a9m2440.c                 |   48 ++++++--
 arch/arm/boards/at91sam9261ek/init.c              |   11 ++-
 arch/arm/boards/at91sam9263ek/init.c              |   11 ++-
 arch/arm/boards/chumby_falconwing/falconwing.c    |   37 +++++--
 arch/arm/boards/edb93xx/edb93xx.c                 |  120 ++++++++------------
 arch/arm/boards/eukrea_cpuimx25/eukrea_cpuimx25.c |   37 +++++--
 arch/arm/boards/eukrea_cpuimx27/eukrea_cpuimx27.c |   74 ++++++++++---
 arch/arm/boards/eukrea_cpuimx35/eukrea_cpuimx35.c |   37 +++++--
 arch/arm/boards/freescale-mx23-evk/mx23-evk.c     |   28 +++--
 arch/arm/boards/freescale-mx25-3-stack/3stack.c   |   54 +++++-----
 arch/arm/boards/freescale-mx35-3-stack/3stack.c   |   46 ++++++--
 arch/arm/boards/freescale-mx51-pdk/board.c        |   15 ++-
 arch/arm/boards/guf-cupid/board.c                 |   64 +++++++++--
 arch/arm/boards/guf-neso/board.c                  |   26 +++--
 arch/arm/boards/imx21ads/imx21ads.c               |   36 +++++--
 arch/arm/boards/imx27ads/imx27ads.c               |   26 +++--
 arch/arm/boards/mini2440/mini2440.c               |   58 +++++++---
 arch/arm/boards/mmccpu/init.c                     |   11 ++-
 arch/arm/boards/netx/netx.c                       |   37 +++++--
 arch/arm/boards/nhk8815/setup.c                   |   11 ++-
 arch/arm/boards/omap/board-beagle.c               |   46 ++++++--
 arch/arm/boards/omap/board-omap3evm.c             |   34 ++++--
 arch/arm/boards/omap/board-sdp343x.c              |   26 +++--
 arch/arm/boards/omap/devices-gpmc-nand.c          |   11 ++-
 arch/arm/boards/pcm037/pcm037.c                   |  123 +++++++++++----------
 arch/arm/boards/pcm038/pcm038.c                   |   57 ++++++----
 arch/arm/boards/pcm043/pcm043.c                   |   26 +++--
 arch/arm/boards/phycard-i.MX27/pca100.c           |   37 +++++--
 arch/arm/boards/pm9261/init.c                     |   22 +++-
 arch/arm/boards/pm9263/init.c                     |   11 ++-
 arch/arm/boards/scb9328/scb9328.c                 |   49 ++++++--
 arch/arm/lib/armlinux.c                           |   19 +++-
 arch/arm/mach-at91/at91sam9260_devices.c          |  114 +++++++++++++++----
 arch/arm/mach-at91/at91sam9261_devices.c          |   70 +++++++++---
 arch/arm/mach-at91/at91sam9263_devices.c          |   81 +++++++++++---
 arch/arm/mach-at91/at91sam9g45_devices.c          |   92 ++++++++++++----
 arch/arm/mach-imx/devices.c                       |    4 +-
 arch/arm/mach-imx/iim.c                           |   17 ++-
 arch/arm/mach-imx/imx25.c                         |   42 ++++++-
 arch/arm/mach-nomadik/8815.c                      |   37 +++++--
 arch/blackfin/boards/ipe337/ipe337.c              |   48 ++++++--
 arch/ppc/boards/pcm030/pcm030.c                   |   61 ++++++++---
 arch/sandbox/board/hostfile.c                     |    4 +-
 arch/sandbox/mach-sandbox/include/mach/hostfile.h |   10 ++-
 arch/sandbox/os/common.c                          |    4 +-
 arch/x86/boards/x86_generic/generic_pc.c          |   47 ++++++---
 commands/mem.c                                    |   36 ++++---
 common/startup.c                                  |   13 ++-
 drivers/ata/bios.c                                |    4 +-
 drivers/ata/disk_drive.c                          |   13 +-
 drivers/i2c/busses/i2c-imx.c                      |   22 ++--
 drivers/i2c/busses/i2c-omap.c                     |    4 +-
 drivers/mci/imx-esdhc.c                           |    2 +-
 drivers/mci/imx.c                                 |    3 +-
 drivers/mci/mci-core.c                            |    4 +-
 drivers/mci/s3c.c                                 |  106 ++++++++++--------
 drivers/mci/stm378x.c                             |   79 ++++++++------
 drivers/mtd/nand/atmel_nand.c                     |    2 +-
 drivers/mtd/nand/nand_imx.c                       |    2 +-
 drivers/mtd/nand/nand_omap_gpmc.c                 |   13 ++-
 drivers/mtd/nand/nand_s3c2410.c                   |    4 +-
 drivers/net/cs8900.c                              |    2 +-
 drivers/net/fec_imx.c                             |    2 +-
 drivers/net/fec_mpc5200.c                         |    2 +-
 drivers/net/macb.c                                |    2 +-
 drivers/net/smc91111.c                            |    2 +-
 drivers/net/smc911x.c                             |    9 +-
 drivers/nor/cfi_flash.c                           |   31 +++--
 drivers/serial/amba-pl011.c                       |   32 +++---
 drivers/serial/atmel.c                            |   29 +++---
 drivers/serial/serial_imx.c                       |    2 +-
 drivers/serial/serial_mpc5xxx.c                   |   20 ++--
 drivers/serial/serial_netx.c                      |   34 +++---
 drivers/serial/serial_ns16550.c                   |   12 +-
 drivers/serial/serial_pl010.c                     |   15 ++-
 drivers/serial/serial_s3c24x0.c                   |   36 +++---
 drivers/serial/stm-serial.c                       |   44 ++++----
 drivers/spi/imx_spi.c                             |    2 +-
 drivers/usb/gadget/fsl_udc.c                      |    2 +-
 drivers/usb/host/ehci-hcd.c                       |    9 +-
 drivers/video/fb.c                                |    4 +-
 drivers/video/imx-ipu-fb.c                        |    2 +-
 drivers/video/imx.c                               |    2 +-
 fs/devfs.c                                        |    2 +-
 fs/fs.c                                           |   14 ++-
 include/driver.h                                  |   49 +++++++--
 include/linux/ioport.h                            |  115 +++++++++++++++++++
 lib/driver.c                                      |    7 +-
 90 files changed, 1873 insertions(+), 867 deletions(-)
 create mode 100644 include/linux/ioport.h

Best Regards,
J.

_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

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

* Re: [PATCH 2/2] mem: convert to DEVFS_MEM_BAREBOX_ONLY for freescale-mx25-3-stack/pcm037/pvm038
  2010-11-17 13:59 ` [PATCH 2/2] mem: convert to DEVFS_MEM_BAREBOX_ONLY for freescale-mx25-3-stack/pcm037/pvm038 Jean-Christophe PLAGNIOL-VILLARD
@ 2010-11-17 14:09   ` Baruch Siach
  0 siblings, 0 replies; 22+ messages in thread
From: Baruch Siach @ 2010-11-17 14:09 UTC (permalink / raw)
  To: Jean-Christophe PLAGNIOL-VILLARD; +Cc: barebox

Hi Jean-Christophe,

On Wed, Nov 17, 2010 at 02:59:25PM +0100, Jean-Christophe PLAGNIOL-VILLARD wrote:
> Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
> ---
>  arch/arm/boards/freescale-mx25-3-stack/3stack.c |   35 ++++++++---------------
>  arch/arm/boards/pcm037/pcm037.c                 |   33 +++++++--------------
>  arch/arm/boards/pcm038/pcm038.c                 |   23 ++++-----------
>  3 files changed, 29 insertions(+), 62 deletions(-)
> 
> diff --git a/arch/arm/boards/freescale-mx25-3-stack/3stack.c b/arch/arm/boards/freescale-mx25-3-stack/3stack.c
> index cb9ce79..434bd7f 100644
> --- a/arch/arm/boards/freescale-mx25-3-stack/3stack.c
> +++ b/arch/arm/boards/freescale-mx25-3-stack/3stack.c
> @@ -113,8 +113,14 @@ static struct fec_platform_data fec_info = {
>  	.phy_addr	= 1,
>  };
>  
> -static struct resource sdram0_dev_resources[] = {
> +static struct resource sdram_dev_resources[] = {

I guess mem_dev_resources or ram_dev_resources are better names for this 
struct now, since the "sram0" is not SDRAM.

>  	[0] = {
> +		.name	= "sram0",
> +		.start	= 0x78000000,
> +		.size	= 128 * 1024,
> +		.flags	= DEVFS_RDWR | DEVFS_MEM_BAREBOX_ONLY,
> +	},
> +	[1] = {
>  		.name	= "ram0",
>  		.start	= IMX_SDRAM_CS0,
>  #if defined CONFIG_FREESCALE_MX25_3STACK_SDRAM_64MB_DDR2

[snip]

baruch

-- 
                                                     ~. .~   Tk Open Systems
=}------------------------------------------------ooO--U--Ooo------------{=
   - baruch@tkos.co.il - tel: +972.2.679.5364, http://www.tkos.co.il -

_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

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

* Re: [PATCH 1/5] device: introduce resource structure to simplify resource delaration
  2010-11-12 18:18 ` [PATCH 1/5] device: introduce resource structure to simplify resource delaration Jean-Christophe PLAGNIOL-VILLARD
@ 2010-11-19  8:00   ` Sascha Hauer
  2010-11-19 11:30     ` Jean-Christophe PLAGNIOL-VILLARD
  2011-01-27  8:20   ` Sascha Hauer
  1 sibling, 1 reply; 22+ messages in thread
From: Sascha Hauer @ 2010-11-19  8:00 UTC (permalink / raw)
  To: Jean-Christophe PLAGNIOL-VILLARD; +Cc: barebox

Hi J,

On Fri, Nov 12, 2010 at 07:18:54PM +0100, Jean-Christophe PLAGNIOL-VILLARD wrote:
> introdude also some helper to manager them
> 
> and add multi resource per device support
> 
> ram device: use resource structure instead of memory_platform_data
> 
> Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>


You shouldn't use a resource_size_t type to access registers. This will
lead to problems when we start to support 64bit resource sizes. Instead
we should introduce a

#define resource_size_to_iomem(size) (void __force __iomem *)(size)

macro which does the conversion to a void __iomem * type. In a more
advanced version this could also spit a warning when the resource start
is bigger than a pointer type. As an additional plus we'll get rid of
some sparse warnings where map_base is used for readl/writel.


> diff --git a/arch/arm/mach-imx/devices.c b/arch/arm/mach-imx/devices.c
> index 11cf2a4..e89f8bb 100644
> --- a/arch/arm/mach-imx/devices.c
> +++ b/arch/arm/mach-imx/devices.c
> @@ -9,8 +9,8 @@ static struct device_d *imx_add_device(char *name, int id, void *base, int size,
>  	dev = xzalloc(sizeof(*dev));
>  	strcpy(dev->name,name);
>  	dev->id = id;
> -	dev->map_base = (unsigned long)base;
> -	dev->size = size;
> +	dev_resource_set_start(dev, (unsigned long)base);
> +	dev_resource_set_size(dev, (unsigned long)size);
>  	dev->platform_data = pdata;

Should be a cast to resource_size_t.

> diff --git a/include/driver.h b/include/driver.h
> index b9edca0..c7dce1e 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"
> @@ -70,11 +71,8 @@ struct device_d {
>  	 * something like eth0 or nor0. */
>  	int id;
>  
> -	resource_size_t size;
> -
> -	/*! For devices which are directly mapped into memory, i.e. NOR
> -	 * Flash or SDRAM. */
> -	resource_size_t map_base;
> +	struct resource *resource;
> +	int num_resources;
>  
>  	void *platform_data; /*! board specific information about this device */
>  
> @@ -184,6 +182,41 @@ static inline const char *dev_name(const struct device_d *dev)
>  	return dev_id(dev);
>  }
>  
> +/* ressource helper */

s/ressource/resource/

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

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

* Re: [PATCH 1/2] mem: multiple resource support allow exclude a resource
  2010-11-17 13:59 ` [PATCH 1/2] mem: multiple resource support allow exclude a resource Jean-Christophe PLAGNIOL-VILLARD
@ 2010-11-19  8:24   ` Sascha Hauer
  2010-11-19 11:31     ` Jean-Christophe PLAGNIOL-VILLARD
  0 siblings, 1 reply; 22+ messages in thread
From: Sascha Hauer @ 2010-11-19  8:24 UTC (permalink / raw)
  To: Jean-Christophe PLAGNIOL-VILLARD; +Cc: barebox

On Wed, Nov 17, 2010 at 02:59:24PM +0100, Jean-Christophe PLAGNIOL-VILLARD wrote:
> introduce DEVFS_MEM_BAREBOX_ONLY for this purpose
> 
> Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
> ---
>  arch/arm/lib/armlinux.c |    4 ++++
>  include/driver.h        |    1 +
>  2 files changed, 5 insertions(+), 0 deletions(-)
> 
> diff --git a/arch/arm/lib/armlinux.c b/arch/arm/lib/armlinux.c
> index b74c5e8..55d1401 100644
> --- a/arch/arm/lib/armlinux.c
> +++ b/arch/arm/lib/armlinux.c
> @@ -79,6 +79,10 @@ static void setup_memory_tags(void)
>  	list_for_each_entry(mem, &memory_list, list) {
>  		for (i = 0; i < mem->dev->num_resources; i++) {
>  			res = &mem->dev->resource[i];
> +
> +			if (res->flags & DEVFS_MEM_BAREBOX_ONLY)
> +				break;

Shouldn't this be a 'continue'?

> +
>  			params->hdr.tag = ATAG_MEM;
>  			params->hdr.size = tag_size(tag_mem32);
>  
> diff --git a/include/driver.h b/include/driver.h
> index c7dce1e..e98455c 100644
> --- a/include/driver.h
> +++ b/include/driver.h
> @@ -354,6 +354,7 @@ ssize_t cdev_write(struct cdev *cdev, const void *buf, size_t count, ulong offse
>  #define DEVFS_PARTITION_READONLY	(1 << 1)
>  #define DEVFS_IS_PARTITION		(1 << 2)
>  #define DEVFS_RDWR			(1 << 3)
> +#define DEVFS_MEM_BAREBOX_ONLY		(1 << 4)

I realize this when looking at this patch: You should abuse the flags
field in a resource pass custom bits. The only flags in a resource should
be the ones defined in include/linux/ioport.h.
With DEVFS_RDWR you are lucky, there is a IORESOURCE_MEM_WRITEABLE flag
which can be used for this purpose. There is no correspondent flag for
DEVFS_MEM_BAREBOX_ONLY though.

Overall I'm not very happy with the multiple-resources-to-mem-driver
approach. If you are concerned with the overhead of multiple statically
allocated devices we could introduce a add_memory_device(char *name, void *start,
size_t size, unsigned long flags) function which dynamically allocates a
device.

I'm also not convinced that these few multiple statically allocated
devices introduce an overhead at all, I mean most boards only have
SDRAM (one device) and maybe an SRAM (second device).

Sascha

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

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

* Re: [PATCH 1/5] device: introduce resource structure to simplify resource delaration
  2010-11-19  8:00   ` Sascha Hauer
@ 2010-11-19 11:30     ` Jean-Christophe PLAGNIOL-VILLARD
  2010-11-20 13:40       ` Sascha Hauer
  0 siblings, 1 reply; 22+ messages in thread
From: Jean-Christophe PLAGNIOL-VILLARD @ 2010-11-19 11:30 UTC (permalink / raw)
  To: Sascha Hauer; +Cc: barebox

On 09:00 Fri 19 Nov     , Sascha Hauer wrote:
> Hi J,
> 
> On Fri, Nov 12, 2010 at 07:18:54PM +0100, Jean-Christophe PLAGNIOL-VILLARD wrote:
> > introdude also some helper to manager them
> > 
> > and add multi resource per device support
> > 
> > ram device: use resource structure instead of memory_platform_data
> > 
> > Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
> 
> 
> You shouldn't use a resource_size_t type to access registers. This will
> lead to problems when we start to support 64bit resource sizes
no as resource_size_t is 64 bit aware
>. Instead we should introduce a
> 
> #define resource_size_to_iomem(size) (void __force __iomem *)(size)
> 
> macro which does the conversion to a void __iomem * type. In a more
> advanced version this could also spit a warning when the resource start
> is bigger than a pointer type. As an additional plus we'll get rid of
> some sparse warnings where map_base is used for readl/writel.
we do not do in the kernel and do see the advantage here for the ressource
in mind it's in the drivers we need to do it
if necessary
> 
> 
> > diff --git a/arch/arm/mach-imx/devices.c b/arch/arm/mach-imx/devices.c
> > index 11cf2a4..e89f8bb 100644
> > --- a/arch/arm/mach-imx/devices.c
> > +++ b/arch/arm/mach-imx/devices.c
> > @@ -9,8 +9,8 @@ static struct device_d *imx_add_device(char *name, int id, void *base, int size,
> >  	dev = xzalloc(sizeof(*dev));
> >  	strcpy(dev->name,name);
> >  	dev->id = id;
> > -	dev->map_base = (unsigned long)base;
> > -	dev->size = size;
> > +	dev_resource_set_start(dev, (unsigned long)base);
> > +	dev_resource_set_size(dev, (unsigned long)size);
> >  	dev->platform_data = pdata;
> 
> Should be a cast to resource_size_t.
yeah

Best Regards,
J.

_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

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

* Re: [PATCH 1/2] mem: multiple resource support allow exclude a resource
  2010-11-19  8:24   ` Sascha Hauer
@ 2010-11-19 11:31     ` Jean-Christophe PLAGNIOL-VILLARD
  0 siblings, 0 replies; 22+ messages in thread
From: Jean-Christophe PLAGNIOL-VILLARD @ 2010-11-19 11:31 UTC (permalink / raw)
  To: Sascha Hauer; +Cc: barebox

On 09:24 Fri 19 Nov     , Sascha Hauer wrote:
> On Wed, Nov 17, 2010 at 02:59:24PM +0100, Jean-Christophe PLAGNIOL-VILLARD wrote:
> > introduce DEVFS_MEM_BAREBOX_ONLY for this purpose
> > 
> > Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
> > ---
> >  arch/arm/lib/armlinux.c |    4 ++++
> >  include/driver.h        |    1 +
> >  2 files changed, 5 insertions(+), 0 deletions(-)
> > 
> > diff --git a/arch/arm/lib/armlinux.c b/arch/arm/lib/armlinux.c
> > index b74c5e8..55d1401 100644
> > --- a/arch/arm/lib/armlinux.c
> > +++ b/arch/arm/lib/armlinux.c
> > @@ -79,6 +79,10 @@ static void setup_memory_tags(void)
> >  	list_for_each_entry(mem, &memory_list, list) {
> >  		for (i = 0; i < mem->dev->num_resources; i++) {
> >  			res = &mem->dev->resource[i];
> > +
> > +			if (res->flags & DEVFS_MEM_BAREBOX_ONLY)
> > +				break;
> 
> Shouldn't this be a 'continue'?
yeap
> 
> > +
> >  			params->hdr.tag = ATAG_MEM;
> >  			params->hdr.size = tag_size(tag_mem32);
> >  
> > diff --git a/include/driver.h b/include/driver.h
> > index c7dce1e..e98455c 100644
> > --- a/include/driver.h
> > +++ b/include/driver.h
> > @@ -354,6 +354,7 @@ ssize_t cdev_write(struct cdev *cdev, const void *buf, size_t count, ulong offse
> >  #define DEVFS_PARTITION_READONLY	(1 << 1)
> >  #define DEVFS_IS_PARTITION		(1 << 2)
> >  #define DEVFS_RDWR			(1 << 3)
> > +#define DEVFS_MEM_BAREBOX_ONLY		(1 << 4)
> 
> I realize this when looking at this patch: You should abuse the flags
> field in a resource pass custom bits. The only flags in a resource should
> be the ones defined in include/linux/ioport.h.
> With DEVFS_RDWR you are lucky, there is a IORESOURCE_MEM_WRITEABLE flag
> which can be used for this purpose. There is no correspondent flag for
> DEVFS_MEM_BAREBOX_ONLY though.
ok I'll update
> 
> Overall I'm not very happy with the multiple-resources-to-mem-driver
> approach. If you are concerned with the overhead of multiple statically
> allocated devices we could introduce a add_memory_device(char *name, void *start,
> size_t size, unsigned long flags) function which dynamically allocates a
> device.
> 
> I'm also not convinced that these few multiple statically allocated
> devices introduce an overhead at all, I mean most boards only have
> SDRAM (one device) and maybe an SRAM (second device).
no preference just want to avoid multiple device but if u prefer I let it as
is

Best Regards,
J.

_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

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

* Re: [PATCH 1/5] device: introduce resource structure to simplify resource delaration
  2010-11-19 11:30     ` Jean-Christophe PLAGNIOL-VILLARD
@ 2010-11-20 13:40       ` Sascha Hauer
  2010-11-20 13:58         ` Jean-Christophe PLAGNIOL-VILLARD
  0 siblings, 1 reply; 22+ messages in thread
From: Sascha Hauer @ 2010-11-20 13:40 UTC (permalink / raw)
  To: Jean-Christophe PLAGNIOL-VILLARD; +Cc: barebox

On Fri, Nov 19, 2010 at 12:30:09PM +0100, Jean-Christophe PLAGNIOL-VILLARD wrote:
> On 09:00 Fri 19 Nov     , Sascha Hauer wrote:
> > Hi J,
> > 
> > On Fri, Nov 12, 2010 at 07:18:54PM +0100, Jean-Christophe PLAGNIOL-VILLARD wrote:
> > > introdude also some helper to manager them
> > > 
> > > and add multi resource per device support
> > > 
> > > ram device: use resource structure instead of memory_platform_data
> > > 
> > > Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
> > 
> > 
> > You shouldn't use a resource_size_t type to access registers. This will
> > lead to problems when we start to support 64bit resource sizes
> no as resource_size_t is 64 bit aware

And exactly this is the problem. void * is usually only 32bit on arm.
This will lead to compiler warnings and sparse isn't happy about
unsigned long in readl/writel anyway.

> >. Instead we should introduce a
> > 
> > #define resource_size_to_iomem(size) (void __force __iomem *)(size)
> > 
> > macro which does the conversion to a void __iomem * type. In a more
> > advanced version this could also spit a warning when the resource start
> > is bigger than a pointer type. As an additional plus we'll get rid of
> > some sparse warnings where map_base is used for readl/writel.
> we do not do in the kernel and do see the advantage here for the ressource
> in mind it's in the drivers we need to do it
> if necessary

resource_size_t is never passed to readl/writel in the kernel.

Sascha


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

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

* Re: [PATCH 1/5] device: introduce resource structure to simplify resource delaration
  2010-11-20 13:40       ` Sascha Hauer
@ 2010-11-20 13:58         ` Jean-Christophe PLAGNIOL-VILLARD
  2010-11-21  4:28           ` Jean-Christophe PLAGNIOL-VILLARD
  0 siblings, 1 reply; 22+ messages in thread
From: Jean-Christophe PLAGNIOL-VILLARD @ 2010-11-20 13:58 UTC (permalink / raw)
  To: Sascha Hauer; +Cc: barebox

On 14:40 Sat 20 Nov     , Sascha Hauer wrote:
> On Fri, Nov 19, 2010 at 12:30:09PM +0100, Jean-Christophe PLAGNIOL-VILLARD wrote:
> > On 09:00 Fri 19 Nov     , Sascha Hauer wrote:
> > > Hi J,
> > > 
> > > On Fri, Nov 12, 2010 at 07:18:54PM +0100, Jean-Christophe PLAGNIOL-VILLARD wrote:
> > > > introdude also some helper to manager them
> > > > 
> > > > and add multi resource per device support
> > > > 
> > > > ram device: use resource structure instead of memory_platform_data
> > > > 
> > > > Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
> > > 
> > > 
> > > You shouldn't use a resource_size_t type to access registers. This will
> > > lead to problems when we start to support 64bit resource sizes
> > no as resource_size_t is 64 bit aware
> 
> And exactly this is the problem. void * is usually only 32bit on arm.
> This will lead to compiler warnings and sparse isn't happy about
> unsigned long in readl/writel anyway.
IIRC on arm resource_size_t is never 64bit at least on the current ARMvx

> 
> > >. Instead we should introduce a
> > > 
> > > #define resource_size_to_iomem(size) (void __force __iomem *)(size)
> > > 
> > > macro which does the conversion to a void __iomem * type. In a more
> > > advanced version this could also spit a warning when the resource start
> > > is bigger than a pointer type. As an additional plus we'll get rid of
> > > some sparse warnings where map_base is used for readl/writel.
> > we do not do in the kernel and do see the advantage here for the ressource
> > in mind it's in the drivers we need to do it
> > if necessary
> 
> resource_size_t is never passed to readl/writel in the kernel.
yeah but the resources are cast in the drivers

Best Regards,
J.

_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

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

* Re: [PATCH 1/5] device: introduce resource structure to simplify resource delaration
  2010-11-20 13:58         ` Jean-Christophe PLAGNIOL-VILLARD
@ 2010-11-21  4:28           ` Jean-Christophe PLAGNIOL-VILLARD
  2010-11-21  6:46             ` Jean-Christophe PLAGNIOL-VILLARD
  2010-11-23  7:36             ` Sascha Hauer
  0 siblings, 2 replies; 22+ messages in thread
From: Jean-Christophe PLAGNIOL-VILLARD @ 2010-11-21  4:28 UTC (permalink / raw)
  To: Sascha Hauer; +Cc: barebox

On 14:58 Sat 20 Nov     , Jean-Christophe PLAGNIOL-VILLARD wrote:
> On 14:40 Sat 20 Nov     , Sascha Hauer wrote:
> > On Fri, Nov 19, 2010 at 12:30:09PM +0100, Jean-Christophe PLAGNIOL-VILLARD wrote:
> > > On 09:00 Fri 19 Nov     , Sascha Hauer wrote:
> > > > Hi J,
> > > > 
> > > > On Fri, Nov 12, 2010 at 07:18:54PM +0100, Jean-Christophe PLAGNIOL-VILLARD wrote:
> > > > > introdude also some helper to manager them
> > > > > 
> > > > > and add multi resource per device support
> > > > > 
> > > > > ram device: use resource structure instead of memory_platform_data
> > > > > 
> > > > > Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
> > > > 
> > > > 
> > > > You shouldn't use a resource_size_t type to access registers. This will
> > > > lead to problems when we start to support 64bit resource sizes
> > > no as resource_size_t is 64 bit aware
> > 
> > And exactly this is the problem. void * is usually only 32bit on arm.
> > This will lead to compiler warnings and sparse isn't happy about
> > unsigned long in readl/writel anyway.
> IIRC on arm resource_size_t is never 64bit at least on the current ARMvx
> 
> > 
> > > >. Instead we should introduce a
> > > > 
> > > > #define resource_size_to_iomem(size) (void __force __iomem *)(size)
> > > > 
> > > > macro which does the conversion to a void __iomem * type. In a more
> > > > advanced version this could also spit a warning when the resource start
> > > > is bigger than a pointer type. As an additional plus we'll get rid of
> > > > some sparse warnings where map_base is used for readl/writel.
> > > we do not do in the kernel and do see the advantage here for the ressource
> > > in mind it's in the drivers we need to do it
> > > if necessary
> > 
> > resource_size_t is never passed to readl/writel in the kernel.
> yeah but the resources are cast in the drivers
I check on x86 and void is 4 byte on 32bit and 8bytes on 64bit

Best Regards,
J.

_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

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

* Re: [PATCH 1/5] device: introduce resource structure to simplify resource delaration
  2010-11-21  4:28           ` Jean-Christophe PLAGNIOL-VILLARD
@ 2010-11-21  6:46             ` Jean-Christophe PLAGNIOL-VILLARD
  2010-11-23  7:36             ` Sascha Hauer
  1 sibling, 0 replies; 22+ messages in thread
From: Jean-Christophe PLAGNIOL-VILLARD @ 2010-11-21  6:46 UTC (permalink / raw)
  To: Sascha Hauer; +Cc: barebox

On 05:28 Sun 21 Nov     , Jean-Christophe PLAGNIOL-VILLARD wrote:
> On 14:58 Sat 20 Nov     , Jean-Christophe PLAGNIOL-VILLARD wrote:
> > On 14:40 Sat 20 Nov     , Sascha Hauer wrote:
> > > On Fri, Nov 19, 2010 at 12:30:09PM +0100, Jean-Christophe PLAGNIOL-VILLARD wrote:
> > > > On 09:00 Fri 19 Nov     , Sascha Hauer wrote:
> > > > > Hi J,
> > > > > 
> > > > > On Fri, Nov 12, 2010 at 07:18:54PM +0100, Jean-Christophe PLAGNIOL-VILLARD wrote:
> > > > > > introdude also some helper to manager them
> > > > > > 
> > > > > > and add multi resource per device support
> > > > > > 
> > > > > > ram device: use resource structure instead of memory_platform_data
> > > > > > 
> > > > > > Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
> > > > > 
> > > > > 
> > > > > You shouldn't use a resource_size_t type to access registers. This will
> > > > > lead to problems when we start to support 64bit resource sizes
> > > > no as resource_size_t is 64 bit aware
> > > 
> > > And exactly this is the problem. void * is usually only 32bit on arm.
> > > This will lead to compiler warnings and sparse isn't happy about
> > > unsigned long in readl/writel anyway.
> > IIRC on arm resource_size_t is never 64bit at least on the current ARMvx
> > 
> > > 
> > > > >. Instead we should introduce a
> > > > > 
> > > > > #define resource_size_to_iomem(size) (void __force __iomem *)(size)
> > > > > 
> > > > > macro which does the conversion to a void __iomem * type. In a more
> > > > > advanced version this could also spit a warning when the resource start
> > > > > is bigger than a pointer type. As an additional plus we'll get rid of
> > > > > some sparse warnings where map_base is used for readl/writel.
> > > > we do not do in the kernel and do see the advantage here for the ressource
> > > > in mind it's in the drivers we need to do it
> > > > if necessary
> > > 
> > > resource_size_t is never passed to readl/writel in the kernel.
> > yeah but the resources are cast in the drivers
> I check on x86 and void is 4 byte on 32bit and 8bytes on 64bit
I check on x86 and void* is 4 byte on 32bit and 8bytes on 64bit

Best Regards,
J.

_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

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

* Re: [PATCH 1/5] device: introduce resource structure to simplify resource delaration
  2010-11-21  4:28           ` Jean-Christophe PLAGNIOL-VILLARD
  2010-11-21  6:46             ` Jean-Christophe PLAGNIOL-VILLARD
@ 2010-11-23  7:36             ` Sascha Hauer
  2010-11-23  8:25               ` Jean-Christophe PLAGNIOL-VILLARD
  1 sibling, 1 reply; 22+ messages in thread
From: Sascha Hauer @ 2010-11-23  7:36 UTC (permalink / raw)
  To: Jean-Christophe PLAGNIOL-VILLARD; +Cc: barebox

On Sun, Nov 21, 2010 at 05:28:54AM +0100, Jean-Christophe PLAGNIOL-VILLARD wrote:
> On 14:58 Sat 20 Nov     , Jean-Christophe PLAGNIOL-VILLARD wrote:
> > On 14:40 Sat 20 Nov     , Sascha Hauer wrote:
> > > On Fri, Nov 19, 2010 at 12:30:09PM +0100, Jean-Christophe PLAGNIOL-VILLARD wrote:
> > > > On 09:00 Fri 19 Nov     , Sascha Hauer wrote:
> > > > > Hi J,
> > > > > 
> > > > > On Fri, Nov 12, 2010 at 07:18:54PM +0100, Jean-Christophe PLAGNIOL-VILLARD wrote:
> > > > > > introdude also some helper to manager them
> > > > > > 
> > > > > > and add multi resource per device support
> > > > > > 
> > > > > > ram device: use resource structure instead of memory_platform_data
> > > > > > 
> > > > > > Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
> > > > > 
> > > > > 
> > > > > You shouldn't use a resource_size_t type to access registers. This will
> > > > > lead to problems when we start to support 64bit resource sizes
> > > > no as resource_size_t is 64 bit aware
> > > 
> > > And exactly this is the problem. void * is usually only 32bit on arm.
> > > This will lead to compiler warnings and sparse isn't happy about
> > > unsigned long in readl/writel anyway.
> > IIRC on arm resource_size_t is never 64bit at least on the current ARMvx

Think of MMC/SD cards > 4G.

Sascha


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

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

* Re: [PATCH 1/5] device: introduce resource structure to simplify resource delaration
  2010-11-23  7:36             ` Sascha Hauer
@ 2010-11-23  8:25               ` Jean-Christophe PLAGNIOL-VILLARD
  2010-11-23 11:34                 ` Sascha Hauer
  0 siblings, 1 reply; 22+ messages in thread
From: Jean-Christophe PLAGNIOL-VILLARD @ 2010-11-23  8:25 UTC (permalink / raw)
  To: Sascha Hauer; +Cc: barebox

On 08:36 Tue 23 Nov     , Sascha Hauer wrote:
> On Sun, Nov 21, 2010 at 05:28:54AM +0100, Jean-Christophe PLAGNIOL-VILLARD wrote:
> > On 14:58 Sat 20 Nov     , Jean-Christophe PLAGNIOL-VILLARD wrote:
> > > On 14:40 Sat 20 Nov     , Sascha Hauer wrote:
> > > > On Fri, Nov 19, 2010 at 12:30:09PM +0100, Jean-Christophe PLAGNIOL-VILLARD wrote:
> > > > > On 09:00 Fri 19 Nov     , Sascha Hauer wrote:
> > > > > > Hi J,
> > > > > > 
> > > > > > On Fri, Nov 12, 2010 at 07:18:54PM +0100, Jean-Christophe PLAGNIOL-VILLARD wrote:
> > > > > > > introdude also some helper to manager them
> > > > > > > 
> > > > > > > and add multi resource per device support
> > > > > > > 
> > > > > > > ram device: use resource structure instead of memory_platform_data
> > > > > > > 
> > > > > > > Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
> > > > > > 
> > > > > > 
> > > > > > You shouldn't use a resource_size_t type to access registers. This will
> > > > > > lead to problems when we start to support 64bit resource sizes
> > > > > no as resource_size_t is 64 bit aware
> > > > 
> > > > And exactly this is the problem. void * is usually only 32bit on arm.
> > > > This will lead to compiler warnings and sparse isn't happy about
> > > > unsigned long in readl/writel anyway.
> > > IIRC on arm resource_size_t is never 64bit at least on the current ARMvx
> 
> Think of MMC/SD cards > 4G.
ok but I do not see the import on the ressource for the drivers?

as it's runtime probed

Best Regards,
J.

_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

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

* Re: [PATCH 1/5] device: introduce resource structure to simplify resource delaration
  2010-11-23  8:25               ` Jean-Christophe PLAGNIOL-VILLARD
@ 2010-11-23 11:34                 ` Sascha Hauer
  0 siblings, 0 replies; 22+ messages in thread
From: Sascha Hauer @ 2010-11-23 11:34 UTC (permalink / raw)
  To: Jean-Christophe PLAGNIOL-VILLARD; +Cc: barebox

On Tue, Nov 23, 2010 at 09:25:28AM +0100, Jean-Christophe PLAGNIOL-VILLARD wrote:
> On 08:36 Tue 23 Nov     , Sascha Hauer wrote:
> > On Sun, Nov 21, 2010 at 05:28:54AM +0100, Jean-Christophe PLAGNIOL-VILLARD wrote:
> > > On 14:58 Sat 20 Nov     , Jean-Christophe PLAGNIOL-VILLARD wrote:
> > > > On 14:40 Sat 20 Nov     , Sascha Hauer wrote:
> > > > > On Fri, Nov 19, 2010 at 12:30:09PM +0100, Jean-Christophe PLAGNIOL-VILLARD wrote:
> > > > > > On 09:00 Fri 19 Nov     , Sascha Hauer wrote:
> > > > > > > Hi J,
> > > > > > > 
> > > > > > > On Fri, Nov 12, 2010 at 07:18:54PM +0100, Jean-Christophe PLAGNIOL-VILLARD wrote:
> > > > > > > > introdude also some helper to manager them
> > > > > > > > 
> > > > > > > > and add multi resource per device support
> > > > > > > > 
> > > > > > > > ram device: use resource structure instead of memory_platform_data
> > > > > > > > 
> > > > > > > > Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
> > > > > > > 
> > > > > > > 
> > > > > > > You shouldn't use a resource_size_t type to access registers. This will
> > > > > > > lead to problems when we start to support 64bit resource sizes
> > > > > > no as resource_size_t is 64 bit aware
> > > > > 
> > > > > And exactly this is the problem. void * is usually only 32bit on arm.
> > > > > This will lead to compiler warnings and sparse isn't happy about
> > > > > unsigned long in readl/writel anyway.
> > > > IIRC on arm resource_size_t is never 64bit at least on the current ARMvx
> > 
> > Think of MMC/SD cards > 4G.
> ok but I do not see the import on the ressource for the drivers?

Look at this excerpt from your patch:

@@ -675,10 +686,11 @@ static int mci_request(struct mci_host *mci_pdata,
struct mci_cmd *cmd,
 {
        struct device_d *hw_dev = mci_pdata->hw_dev;
        int rc;
+       resource_size_t map_base = dev_resource_get_start(hw_dev);

        /* enable clock */
-       writel(readl(hw_dev->map_base + SDICON) | SDICON_CLKEN,
-               hw_dev->map_base + SDICON);
+       writel(readl(map_base + SDICON) | SDICON_CLKEN,
+               map_base + SDICON);

        if ((cmd->resp_type == 0) || (data == NULL))
                rc = s3c_mci_std_cmds(hw_dev, cmd);

You pass map_base which is of type resource_size_t to writel. Sparse
will barf when the address is not a void __iomem *. Also,
resource_size_t may be 64bit which is then implicitely casted to void *.

This is why it should look like this:

@@ -675,10 +686,11 @@ static int mci_request(struct mci_host *mci_pdata,
struct mci_cmd *cmd,
 {
        struct device_d *hw_dev = mci_pdata->hw_dev;
        int rc;
+       void __iomem *map_base = TO_IOMEM(dev_resource_get_start(hw_dev));

        /* enable clock */
-       writel(readl(hw_dev->map_base + SDICON) | SDICON_CLKEN,
-               hw_dev->map_base + SDICON);
+       writel(readl(map_base + SDICON) | SDICON_CLKEN,
+               map_base + SDICON);

        if ((cmd->resp_type == 0) || (data == NULL))
                rc = s3c_mci_std_cmds(hw_dev, cmd);

Sascha

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

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

* Re: [PATCH 1/5] device: introduce resource structure to simplify resource delaration
  2010-11-12 18:18 ` [PATCH 1/5] device: introduce resource structure to simplify resource delaration Jean-Christophe PLAGNIOL-VILLARD
  2010-11-19  8:00   ` Sascha Hauer
@ 2011-01-27  8:20   ` Sascha Hauer
  1 sibling, 0 replies; 22+ messages in thread
From: Sascha Hauer @ 2011-01-27  8:20 UTC (permalink / raw)
  To: Jean-Christophe PLAGNIOL-VILLARD; +Cc: barebox

Hi J,

On Fri, Nov 12, 2010 at 07:18:54PM +0100, Jean-Christophe PLAGNIOL-VILLARD wrote:
> introdude also some helper to manager them
> 
> and add multi resource per device support
> 
> ram device: use resource structure instead of memory_platform_data

I would like to split this up a bit more.

First patch could be adding include/linux/ioport.h. Then you can add
users for the resources, like for example some drivers you care of, just
enough to see how resources can be used. When we agree on this we can
convert the bulk of the drivers step by step. Getting rid of
dev->map_base would be the last step, but shouldn't be done in such a
huge patch.

Sascha

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

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

end of thread, other threads:[~2011-01-27  8:20 UTC | newest]

Thread overview: 22+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-11-12 18:02 [To test] [PATCH 0/5] device: introduce resource structure Jean-Christophe PLAGNIOL-VILLARD
2010-11-12 18:18 ` [PATCH 1/5] device: introduce resource structure to simplify resource delaration Jean-Christophe PLAGNIOL-VILLARD
2010-11-19  8:00   ` Sascha Hauer
2010-11-19 11:30     ` Jean-Christophe PLAGNIOL-VILLARD
2010-11-20 13:40       ` Sascha Hauer
2010-11-20 13:58         ` Jean-Christophe PLAGNIOL-VILLARD
2010-11-21  4:28           ` Jean-Christophe PLAGNIOL-VILLARD
2010-11-21  6:46             ` Jean-Christophe PLAGNIOL-VILLARD
2010-11-23  7:36             ` Sascha Hauer
2010-11-23  8:25               ` Jean-Christophe PLAGNIOL-VILLARD
2010-11-23 11:34                 ` Sascha Hauer
2011-01-27  8:20   ` Sascha Hauer
2010-11-12 18:18 ` [PATCH 2/5] mem: add multiple resource support Jean-Christophe PLAGNIOL-VILLARD
2010-11-12 18:18 ` [PATCH 3/5] arm/setup_memory_tags: " Jean-Christophe PLAGNIOL-VILLARD
2010-11-12 18:18 ` [PATCH 4/5] edb93xx: convert to multiple mem resources Jean-Christophe PLAGNIOL-VILLARD
2010-11-12 18:18 ` [PATCH 5/5] pcm037: " Jean-Christophe PLAGNIOL-VILLARD
2010-11-17 13:59 ` [PATCH 1/2] mem: multiple resource support allow exclude a resource Jean-Christophe PLAGNIOL-VILLARD
2010-11-19  8:24   ` Sascha Hauer
2010-11-19 11:31     ` Jean-Christophe PLAGNIOL-VILLARD
2010-11-17 13:59 ` [PATCH 2/2] mem: convert to DEVFS_MEM_BAREBOX_ONLY for freescale-mx25-3-stack/pcm037/pvm038 Jean-Christophe PLAGNIOL-VILLARD
2010-11-17 14:09   ` Baruch Siach
2010-11-17 14:02 ` [To test] [PATCH 0/5] device: introduce resource structure Jean-Christophe PLAGNIOL-VILLARD

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox