Hi Steve,

On Apr 24, 2014, at 8:50 PM, Steve Rae wrote:

> 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]
>  


I'd rather go with the wrapper function. Perhaps it's not even needed. The 
function called is part of the block_dev (block_read/write etc).

Overwrite those with functions that implemented the switching first, and then 
call the original block* 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

Anything that cleans things up is acceptable.

Regards

-- Pantelis

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to