ARM: 6217/4: mach-realview: expose PB1176 ROM using physmap and map_rom
authorLinus Walleij <linus.walleij@linaro.org>
Tue, 6 Sep 2011 06:50:20 +0000 (07:50 +0100)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Mon, 17 Oct 2011 08:13:41 +0000 (09:13 +0100)
This exposes the PB1176 ROM if you compile in the MTD physmap
mapping and also the map_rom chiptype.

Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
arch/arm/mach-realview/include/mach/board-pb1176.h
arch/arm/mach-realview/realview_pb1176.c

index 002ab5d8c11c31705ce2f419b16a0fa9b23ccfa8..2a15fef94730c1a6e4b964596620f63ce31090fe 100644 (file)
@@ -70,6 +70,7 @@
 
 #define REALVIEW_DC1176_GIC_CPU_BASE           0x10120000 /* GIC CPU interface, on devchip */
 #define REALVIEW_DC1176_GIC_DIST_BASE          0x10121000 /* GIC distributor, on devchip */
+#define REALVIEW_DC1176_ROM_BASE               0x10200000 /* 16KiB NRAM preudo-ROM, on devchip */
 #define REALVIEW_PB1176_GIC_CPU_BASE           0x10040000 /* GIC CPU interface, on FPGA */
 #define REALVIEW_PB1176_GIC_DIST_BASE          0x10041000 /* GIC distributor, on FPGA */
 #define REALVIEW_PB1176_L220_BASE              0x10110000 /* L220 registers */
index de6b9fa893721764bc9ed3d85ad2d8c0c413dab1..865d440fcf5846cbc6ceb065ba42a307574b4e51 100644 (file)
@@ -26,6 +26,8 @@
 #include <linux/amba/pl061.h>
 #include <linux/amba/mmci.h>
 #include <linux/amba/pl022.h>
+#include <linux/mtd/physmap.h>
+#include <linux/mtd/partitions.h>
 #include <linux/io.h>
 
 #include <mach/hardware.h>
@@ -204,22 +206,48 @@ static struct amba_device *amba_devs[] __initdata = {
  * RealView PB1176 platform devices
  */
 static struct resource realview_pb1176_flash_resources[] = {
-       [0] = {
+       {
                .start          = REALVIEW_PB1176_FLASH_BASE,
                .end            = REALVIEW_PB1176_FLASH_BASE + REALVIEW_PB1176_FLASH_SIZE - 1,
                .flags          = IORESOURCE_MEM,
        },
-       [1] = {
+#ifdef CONFIG_REALVIEW_PB1176_SECURE_FLASH
+       {
                .start          = REALVIEW_PB1176_SEC_FLASH_BASE,
                .end            = REALVIEW_PB1176_SEC_FLASH_BASE + REALVIEW_PB1176_SEC_FLASH_SIZE - 1,
                .flags          = IORESOURCE_MEM,
        },
-};
-#ifdef CONFIG_REALVIEW_PB1176_SECURE_FLASH
-#define PB1176_FLASH_BLOCKS    2
-#else
-#define PB1176_FLASH_BLOCKS    1
 #endif
+};
+
+static struct physmap_flash_data pb1176_rom_pdata = {
+       .probe_type     = "map_rom",
+       .width          = 4,
+       .nr_parts       = 0,
+};
+
+static struct resource pb1176_rom_resources[] = {
+       /*
+        * This exposes the PB1176 DevChip ROM as an MTD ROM mapping.
+        * The reference manual states that this is actually a pseudo-ROM
+        * programmed in NVRAM.
+        */
+       {
+               .start          = REALVIEW_DC1176_ROM_BASE,
+               .end            = REALVIEW_DC1176_ROM_BASE + SZ_16K - 1,
+               .flags          = IORESOURCE_MEM,
+       }
+};
+
+static struct platform_device pb1176_rom_device = {
+       .name           = "physmap-flash",
+       .id             = -1,
+       .num_resources  = ARRAY_SIZE(pb1176_rom_resources),
+       .resource       = pb1176_rom_resources,
+       .dev = {
+               .platform_data = &pb1176_rom_pdata,
+       },
+};
 
 static struct resource realview_pb1176_smsc911x_resources[] = {
        [0] = {
@@ -337,7 +365,8 @@ static void __init realview_pb1176_init(void)
 #endif
 
        realview_flash_register(realview_pb1176_flash_resources,
-                               PB1176_FLASH_BLOCKS);
+                               ARRAY_SIZE(realview_pb1176_flash_resources));
+       platform_device_register(&pb1176_rom_device);
        realview_eth_register(NULL, realview_pb1176_smsc911x_resources);
        platform_device_register(&realview_i2c_device);
        realview_usb_register(realview_pb1176_isp1761_resources);