mtd/drivers/mtd/maps scx200_docflash.c,1.10,1.11
gleixner at infradead.org
gleixner at infradead.org
Thu Mar 17 15:01:19 EST 2005
Update of /home/cvs/mtd/drivers/mtd/maps
In directory phoenix.infradead.org:/tmp/cvs-serv26335
Modified Files:
scx200_docflash.c
Log Message:
Merge from mainstream.
[PATCH] Determine SCx200 CB address at run-time
The current SCx200 drivers use a fixed base address of 0x9000 for the
Configuration Block, but some systems (at least the Soekris net4801) uses a
base address of 0x6000. This patch first tries the fixed address then - if
no configuration block could be found - tries the address written to the
Configuration Block Address Scratchpad register by the BIOS.
Signed-off-by: Henrik Brix Andersen <brix at gentoo.org>
Index: scx200_docflash.c
===================================================================
RCS file: /home/cvs/mtd/drivers/mtd/maps/scx200_docflash.c,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- scx200_docflash.c 28 Nov 2004 09:40:40 -0000 1.10
+++ scx200_docflash.c 17 Mar 2005 20:01:16 -0000 1.11
@@ -26,23 +26,20 @@
MODULE_DESCRIPTION("NatSemi SCx200 DOCCS Flash Driver");
MODULE_LICENSE("GPL");
-/* Set this to one if you want to partition the flash */
-#define PARTITION 1
+static int probe = 0; /* Don't autoprobe */
+static unsigned size = 0x1000000; /* 16 MiB the whole ISA address space */
+static unsigned width = 8; /* Default to 8 bits wide */
+static char *flashtype = "cfi_probe";
-MODULE_PARM(probe, "i");
+module_param(probe, int, 0);
MODULE_PARM_DESC(probe, "Probe for a BIOS mapping");
-MODULE_PARM(size, "i");
+module_param(size, int, 0);
MODULE_PARM_DESC(size, "Size of the flash mapping");
-MODULE_PARM(width, "i");
+module_param(width, int, 0);
MODULE_PARM_DESC(width, "Data width of the flash mapping (8/16)");
-MODULE_PARM(flashtype, "s");
+module_param(flashtype, charp, 0);
MODULE_PARM_DESC(flashtype, "Type of MTD probe to do");
-static int probe = 0; /* Don't autoprobe */
-static unsigned size = 0x1000000; /* 16 MiB the whole ISA address space */
-static unsigned width = 8; /* Default to 8 bits wide */
-static char *flashtype = "cfi_probe";
-
static struct resource docmem = {
.flags = IORESOURCE_MEM,
.name = "NatSemi SCx200 DOCCS Flash",
@@ -50,7 +47,7 @@
static struct mtd_info *mymtd;
-#if PARTITION
+#ifdef CONFIG_MTD_PARTITIONS
static struct mtd_partition partition_info[] = {
{
.name = "DOCCS Boot kernel",
@@ -95,17 +92,16 @@
PCI_DEVICE_ID_NS_SCx200_BRIDGE,
NULL)) == NULL)
return -ENODEV;
-
- if (!scx200_cb_probe(SCx200_CB_BASE)) {
- printk(KERN_WARNING NAME ": no configuration block found\n");
+
+ /* check that we have found the configuration block */
+ if (!scx200_cb_present())
return -ENODEV;
- }
if (probe) {
/* Try to use the present flash mapping if any */
pci_read_config_dword(bridge, SCx200_DOCCS_BASE, &base);
pci_read_config_dword(bridge, SCx200_DOCCS_CTRL, &ctrl);
- pmr = inl(SCx200_CB_BASE + SCx200_PMR);
+ pmr = inl(scx200_cb_base + SCx200_PMR);
if (base == 0
|| (ctrl & 0x07000000) != 0x07000000
@@ -158,14 +154,14 @@
pci_write_config_dword(bridge, SCx200_DOCCS_BASE, docmem.start);
pci_write_config_dword(bridge, SCx200_DOCCS_CTRL, ctrl);
- pmr = inl(SCx200_CB_BASE + SCx200_PMR);
+ pmr = inl(scx200_cb_base + SCx200_PMR);
if (width == 8) {
pmr &= ~(1<<6);
} else {
pmr |= (1<<6);
}
- outl(pmr, SCx200_CB_BASE + SCx200_PMR);
+ outl(pmr, scx200_cb_base + SCx200_PMR);
}
printk(KERN_INFO NAME ": DOCCS mapped at 0x%lx-0x%lx, width %d\n",
@@ -200,7 +196,7 @@
mymtd->owner = THIS_MODULE;
-#if PARTITION
+#ifdef CONFIG_MTD_PARTITIONS
partition_info[3].offset = mymtd->size-partition_info[3].size;
partition_info[2].size = partition_info[3].offset-partition_info[2].offset;
add_mtd_partitions(mymtd, partition_info, NUM_PARTITIONS);
@@ -213,7 +209,7 @@
static void __exit cleanup_scx200_docflash(void)
{
if (mymtd) {
-#if PARTITION
+#ifdef CONFIG_MTD_PARTITIONS
del_mtd_partitions(mymtd);
#else
del_mtd_device(mymtd);
More information about the linux-mtd-cvs
mailing list