[U-Boot] MMC: proposal to support multiple physical partitions

Steve Rae srae at broadcom.com
Thu Apr 24 19:50:40 CEST 2014


In addition to using the MMC "user area" (the device's physical partition), I am also using the "first MMC boot partition" and the "second MMC boot partition"...
As a result, I am currently using the following code snippet in a number of places:

err = -1;
if (mmc->part_num != part_num) {
        if (mmc_switch_part(dev_num, part_num)) {
                printf("%s: MMC partition switch to %d failed\n",
                       __func__, part_num);
                err = 0;
        }
}

if (err != 0) {
        err = mmc->block_dev.block_read(dev_num, start, blkcnt, buffer);
}

if (mmc->part_num != part_num) {
        if (mmc_switch_part(dev_num, mmc->part_num)) {
                printf("%s: MMC partition switching back from %d failed\n",
                       __func__, part_num);
        }
}

I have two different proposals:
1) overload the "int dev_num" argument with encoded  "dev_num" and "part_num" fields

-          the dev_num  in the [15:0] bits,

-          the part_num in the [30:16] bits,

-          a flag to indicate this encoding in [31] bit.

-          and modify mmc_bread() to handle this encoded argument, and implement the above code...
2) create a wrapper function to perform the above code, with an added argument "int part_num", possibly named:

-          mmc_block_dev_block_read() -- so that it is similar to the original calling convention [mmc->block_dev.block_read], or

-          mmc_pbread() [PartitionBlockRead] -- so that it is similar to the mmc_bread() [which is the implementation of the callback function]



Also, would implement this solution for mmc->block_dev.block_write() and mmc->block_dev.block_erase() too.

Either proposals would affect:

include/mmc.h

drivers/mmc/mmc.c

drivers/mmc/mmc_write.c



Would either of these proposals be acceptable to upstream?

Thanks in advance, Steve


More information about the U-Boot mailing list