Namjae, ----- Original Message ----- > From: "Namjae Jeon" <linkinjeon@xxxxxxxxx> > To: cjb@xxxxxxxxxx, linux-mmc@xxxxxxxxxxxxxxx > Cc: linux-kernel@xxxxxxxxxxxxxxx, awarkentin@xxxxxxxxxx, "adrian hunter" <adrian.hunter@xxxxxxxxx>, "linus walleij" > <linus.walleij@xxxxxxxxxx>, "james p freyensee" <james_p_freyensee@xxxxxxxxxxxxxxx>, sebras@xxxxxxxxx, "Ulf Hansson" > <Ulf.Hansson@xxxxxxxxxxxxxx>, "stefan xk nilsson" <stefan.xk.nilsson@xxxxxxxxxxxxxx>, "per forlin" > <per.forlin@xxxxxxxxxxxxxx>, "johan rudholm" <johan.rudholm@xxxxxxxxxxxxxx>, "Namjae Jeon" <linkinjeon@xxxxxxxxx> > Sent: Thursday, September 29, 2011 11:17:11 AM > Subject: [PATCH v3] mmc : general purpose partition support. > > It allows gerneral purpose partitions in MMC Device. > And I try to simpliy make mmc_blk_alloc_parts using mmc_part > structure suggested by Andrei Warkentin. > After patching, we can see general purpose partitions like this. > > cat /proc/partitions > 179 0 847872 mmcblk0 > 179 192 4096 mmcblk0gp3 > 179 160 4096 mmcblk0gp2 > 179 128 4096 mmcblk0gp1 > 179 96 1052672 mmcblk0gp0 > 179 64 1024 mmcblk0boot1 > 179 32 1024 mmcblk0boot0 > > Signed-off-by: Namjae Jeon <linkinjeon@xxxxxxxxx> > + for (idx = 0; idx < MMC_NUM_BOOT_PARTITION; idx++) { > + if (card->boot_part[idx].size) { > + ret = mmc_blk_alloc_part(card, md, > + card->boot_part[idx].cookie, > + card->boot_part[idx].size >> 9, > + card->boot_part[idx].force_ro, > + card->boot_part[idx].name); > + if (ret) > + return ret; > + } > + } > + > + for (idx = 0; idx < MMC_NUM_GP_PARTITION; idx++) { > + if (card->gp_part[idx].size) { > + ret = mmc_blk_alloc_part(card, md, > + card->gp_part[idx].cookie, > + card->gp_part[idx].size >> 9, > + card->gp_part[idx].force_ro, > + card->gp_part[idx].name); > + if (ret) > + return ret; You were on a better track before. Why does the block drivre need to know about the partition types? You should parse one array. > - card->ext_csd.boot_size = ext_csd[EXT_CSD_BOOT_MULT] << 17; > + if (ext_csd[EXT_CSD_BOOT_MULT]) { > + part_cfg = EXT_CSD_PART_CONFIG_ACC_BOOT0; > + for (idx = 0; idx < MMC_NUM_BOOT_PARTITION; idx++) { > + card->boot_part[idx].size = > + ext_csd[EXT_CSD_BOOT_MULT] << 17; > + card->boot_part[idx].cookie = part_cfg++; > + sprintf(card->boot_part[idx].name, "boot%d", > + idx); > + card->boot_part[idx].force_ro = true; > + } > + } > } > My earlier comment still stands - make your code look something like - if (ext_csd[EXT_CSD_BOOT_MULT]) { part_cfg = EXT_CSD_PART_CONFIG_ACC_BOOT0; for (idx = 0; idx < MMC_NUM_BOOT_PARTITION; idx++) { mmc_part_add(card, size, part_cfg++, "boot%d", part_cfg++, "boot%d", idx, true) } > + struct mmc_part boot_part[MMC_NUM_BOOT_PARTITION]; /* mmc boot > partitions */ > + struct mmc_part gp_part[MMC_NUM_GP_PARTITION]; /* mmc general > purpose partitions */ struct mmc_part parts[MMC_NUM_BOOT_PARTITION + MMC_NUM_GP_PARTITION]; unsigned nr_parts; A -- To unsubscribe from this list: send the line "unsubscribe linux-mmc" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html