2011/9/30 Andrei Warkentin <awarkentin@xxxxxxxxxx>: > 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; > Your review will always inspire me. I will post again. plz review after.. Thanks. > A > ��.n��������+%������w��{.n�����{��i��)��jg��������ݢj����G�������j:+v���w�m������w�������h�����٥