make rootfs split/detection more generic - patch can be moved to generic-2.6 after...
[openwrt.git] / target / linux / atheros-2.6 / files / drivers / mtd / devices / spiflash.c
index 6e6734d..029f624 100644 (file)
@@ -396,15 +396,9 @@ static const char *part_probe_types[] = { "cmdlinepart", "RedBoot", NULL };
 
 static int spiflash_probe(struct platform_device *pdev)
 {
-       int result = -1, i, j;
-       u32 len;
+       int i, result = -1;
        int index, num_parts;
        struct mtd_info *mtd;
-       struct  mtd_partition  *mtd_parts;
-       char *buf;
-       struct mtd_partition *part;
-       struct squashfs_super_block *sb;
-       u32 config_start;
 
        spidata->spiflash_mmraddr = ioremap_nocache(SPI_FLASH_MMR, SPI_FLASH_MMR_SIZE);
        
@@ -476,73 +470,17 @@ static int spiflash_probe(struct platform_device *pdev)
                }
        }
 #endif
-
        /* parse redboot partitions */
        num_parts = parse_mtd_partitions(mtd, part_probe_types, &spidata->parsed_parts, 0);
 
-       mtd_parts = kzalloc(sizeof(struct mtd_partition) * MAX_PARTS, GFP_KERNEL);
-       buf = kmalloc(mtd->erasesize, GFP_KERNEL);
-       sb = (struct squashfs_super_block *) buf;
-       for (i = j = 0; i < num_parts; i++, j++) {
-               part = &mtd_parts[j];
-               memcpy(part, &spidata->parsed_parts[i], sizeof(struct mtd_partition));
-               
-               if (!strcmp(part->name, ROOTFS_NAME)) {
-                       /* create the root device */
-                       ROOT_DEV = MKDEV(MTD_BLOCK_MAJOR, i);
-
-                       part->size -= mtd->erasesize;
-                       config_start = part->offset + part->size;
-
-                       while ((mtd->read(mtd, part->offset, mtd->erasesize, &len, buf) == 0) &&
-                                       (len == mtd->erasesize) &&
-                                       (*((u32 *) buf) == SQUASHFS_MAGIC) &&
-                                       (sb->bytes_used > 0)) {
-                                       
-                               /* this is squashfs, allocate another partition starting from the end of filesystem data */
-                               memcpy(&mtd_parts[j + 1], part, sizeof(struct mtd_partition));
-                       
-                               len = (u32) sb->bytes_used;
-                               len += (part->offset & 0x000fffff);
-                               len +=  (mtd->erasesize - 1);
-                               len &= ~(mtd->erasesize - 1);
-                               len -= (part->offset & 0x000fffff);
-
-                               if (len + mtd->erasesize > part->size)
-                                       break;
-
-                               part = &mtd_parts[++j];
-                               
-                               part->offset += len;
-                               part->size -= len;
-
-                               part->name = kmalloc(10, GFP_KERNEL);
-                               sprintf(part->name, "rootfs%d", j - i);
-                       }
-               }
-               if (!strcmp(part->name, "RedBoot config")) {
-                       /* add anoterh partition for the board config data */
-                       memcpy(&mtd_parts[j + 1], part, sizeof(struct mtd_partition));
-                       j++;
-                       part = &mtd_parts[j];
-                       part->offset += part->size;
-                       part->size = mtd->erasesize;
-                       
-                       part->name = kmalloc(16, GFP_KERNEL);
-                       sprintf(part->name, "board_config");
-               }
-       }
-       num_parts += j - i;
-       kfree(buf);
-
 #ifdef SPIFLASH_DEBUG
-       printk (KERN_DEBUG "Found %d redboot partitions\n", num_parts);
+       printk (KERN_DEBUG "Found %d partitions\n", num_parts);
 #endif
        if (num_parts) {
-               result = add_mtd_partitions(mtd, mtd_parts, num_parts);
+               result = add_mtd_partitions(mtd, spidata->parsed_parts, num_parts);
        } else {
 #ifdef SPIFLASH_DEBUG
-               printk (KERN_DEBUG "Did not find any redboot partitions\n");
+               printk (KERN_DEBUG "Did not find any partitions\n");
 #endif
                kfree(mtd);
                kfree(spidata);
This page took 0.023482 seconds and 4 git commands to generate.