[U-Boot] [PATCH v5 2/5] mtd: add an mtd method for get_len_incl_bad()

Ben Gardiner bengardiner at nanometrics.ca
Tue Aug 31 15:50:59 CEST 2010


On Mon, Aug 30, 2010 at 4:57 PM, Scott Wood <scottwood at freescale.com> wrote:
> On Mon, 30 Aug 2010 13:38:57 -0400
> Ben Gardiner <bengardiner at nanometrics.ca> wrote:
>> +void mtd_get_len_incl_bad(struct mtd_info *mtd, uint64_t offset,
>> +                       const uint64_t length, uint64_t *len_incl_bad,
>> +                       int *truncated)
>> +{
>> +     *truncated = 0;
>> +     *len_incl_bad = 0;
>> +
>> +     if (!mtd->block_isbad) {
>> +             *len_incl_bad = length;
>> +             return;
>> +     }
>> +
>> +     uint64_t len_excl_bad = 0;
>> +     uint64_t block_len;
>> +
>> +     while (len_excl_bad < length) {
>> +             block_len = mtd->erasesize - (offset & (mtd->erasesize - 1));
>> +
>> +             if (!mtd->block_isbad(mtd, offset & ~(mtd->erasesize - 1)))
>> +                     len_excl_bad += block_len;
>> +
>> +             *len_incl_bad += block_len;
>> +             offset       += block_len;
>> +
>> +             if (offset >= mtd->size) {
>> +                     *truncated = 1;
>> +                     break;
>> +             }
>> +     }
>
> If this function is called with offset == mtd->size, you should return
> length zero and truncated, without calling block_isbad().

Good point. Will do.

Best Regards,
Ben Gardiner

---
Nanometrics Inc.
http://www.nanometrics.ca


More information about the U-Boot mailing list