diff options
Diffstat (limited to 'arch/frv/mb93090-mb00')
-rw-r--r-- | arch/frv/mb93090-mb00/Makefile | 2 | ||||
-rw-r--r-- | arch/frv/mb93090-mb00/flash.c | 90 | ||||
-rw-r--r-- | arch/frv/mb93090-mb00/pci-frv.c | 10 |
3 files changed, 96 insertions, 6 deletions
diff --git a/arch/frv/mb93090-mb00/Makefile b/arch/frv/mb93090-mb00/Makefile index 76595e870733..b73b542f8f48 100644 --- a/arch/frv/mb93090-mb00/Makefile +++ b/arch/frv/mb93090-mb00/Makefile @@ -11,3 +11,5 @@ else obj-y += pci-dma-nommu.o endif endif + +obj-$(CONFIG_MTD) += flash.o diff --git a/arch/frv/mb93090-mb00/flash.c b/arch/frv/mb93090-mb00/flash.c new file mode 100644 index 000000000000..c0e3707c2299 --- /dev/null +++ b/arch/frv/mb93090-mb00/flash.c @@ -0,0 +1,90 @@ +/* Flash mappings for the MB93090-MB00 motherboard + * + * Copyright (C) 2009 Red Hat, Inc. All Rights Reserved. + * Written by David Howells (dhowells@redhat.com) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public Licence + * as published by the Free Software Foundation; either version + * 2 of the Licence, or (at your option) any later version. + */ + +#include <linux/init.h> +#include <linux/platform_device.h> +#include <linux/mtd/partitions.h> +#include <linux/mtd/physmap.h> + +#define MB93090_BOOTROM_ADDR 0xFF000000 /* Boot ROM */ +#define MB93090_BOOTROM_SIZE (2 * 1024 * 1024) +#define MB93090_USERROM_ADDR 0xFF200000 /* User ROM */ +#define MB93090_USERROM_SIZE (2 * 1024 * 1024) + +/* + * default MTD partition table for both main flash devices, expected to be + * overridden by RedBoot + */ +static struct mtd_partition mb93090_partitions[] = { + { + .name = "Filesystem", + .size = MTDPART_SIZ_FULL, + .offset = 0, + } +}; + +/* + * Definition of the MB93090 Boot ROM (on the CPU card) + */ +static struct physmap_flash_data mb93090_bootrom_data = { + .width = 2, + .nr_parts = 2, + .parts = mb93090_partitions, +}; + +static struct resource mb93090_bootrom_resource = { + .start = MB93090_BOOTROM_ADDR, + .end = MB93090_BOOTROM_ADDR + MB93090_BOOTROM_SIZE - 1, + .flags = IORESOURCE_MEM, +}; + +static struct platform_device mb93090_bootrom = { + .name = "physmap-flash", + .id = 0, + .dev.platform_data = &mb93090_bootrom_data, + .num_resources = 1, + .resource = &mb93090_bootrom_resource, +}; + +/* + * Definition of the MB93090 User ROM definition (on the motherboard) + */ +static struct physmap_flash_data mb93090_userrom_data = { + .width = 2, + .nr_parts = 2, + .parts = mb93090_partitions, +}; + +static struct resource mb93090_userrom_resource = { + .start = MB93090_USERROM_ADDR, + .end = MB93090_USERROM_ADDR + MB93090_USERROM_SIZE - 1, + .flags = IORESOURCE_MEM, +}; + +static struct platform_device mb93090_userrom = { + .name = "physmap-flash", + .id = 1, + .dev.platform_data = &mb93090_userrom_data, + .num_resources = 1, + .resource = &mb93090_userrom_resource, +}; + +/* + * register the MB93090 flashes + */ +static int __init mb93090_mtd_init(void) +{ + platform_device_register(&mb93090_bootrom); + platform_device_register(&mb93090_userrom); + return 0; +} + +module_init(mb93090_mtd_init); diff --git a/arch/frv/mb93090-mb00/pci-frv.c b/arch/frv/mb93090-mb00/pci-frv.c index 43d67534c712..566bdeb499d1 100644 --- a/arch/frv/mb93090-mb00/pci-frv.c +++ b/arch/frv/mb93090-mb00/pci-frv.c @@ -86,7 +86,7 @@ static void __init pcibios_allocate_bus_resources(struct list_head *bus_list) struct pci_bus *bus; struct pci_dev *dev; int idx; - struct resource *r, *pr; + struct resource *r; /* Depth-First Search on bus tree */ for (ln=bus_list->next; ln != bus_list; ln=ln->next) { @@ -96,8 +96,7 @@ static void __init pcibios_allocate_bus_resources(struct list_head *bus_list) r = &dev->resource[idx]; if (!r->start) continue; - pr = pci_find_parent_resource(dev, r); - if (!pr || request_resource(pr, r) < 0) + if (pci_claim_resource(dev, idx) < 0) printk(KERN_ERR "PCI: Cannot allocate resource region %d of bridge %s\n", idx, pci_name(dev)); } } @@ -110,7 +109,7 @@ static void __init pcibios_allocate_resources(int pass) struct pci_dev *dev = NULL; int idx, disabled; u16 command; - struct resource *r, *pr; + struct resource *r; for_each_pci_dev(dev) { pci_read_config_word(dev, PCI_COMMAND, &command); @@ -127,8 +126,7 @@ static void __init pcibios_allocate_resources(int pass) if (pass == disabled) { DBG("PCI: Resource %08lx-%08lx (f=%lx, d=%d, p=%d)\n", r->start, r->end, r->flags, disabled, pass); - pr = pci_find_parent_resource(dev, r); - if (!pr || request_resource(pr, r) < 0) { + if (pci_claim_resource(dev, idx) < 0) { printk(KERN_ERR "PCI: Cannot allocate resource region %d of device %s\n", idx, pci_name(dev)); /* We'll assign a new address later */ r->end -= r->start; |