[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