Reduce the size of a probed flash for broken HW
Franck Bui-Huu
vagabon.xyz at gmail.com
Tue Apr 25 05:19:54 EDT 2006
2006/4/24, Franck Bui-Huu <vagabon.xyz at gmail.com>:
> [discussed with Vitaly Wool on IRC]
>
> My hardware has some problem to access my onboard flashes specially
> the last 64Ko of them. So I need a way to restrict access to these areas.
>
> Several solutions comes in mind:
>
> - In the mapping driver, try to modify the mtd_info and cfi_info
> setup by the MTD probing functions to reduce the detected
> size. This solution is really hackish since it modifies internal
> structures of the MTD layer that the mapping driver is not
> supposed to be aware of. I just did this in my driver:
>
> *mtd = do_map_probe("xxx_probe", map);
> while ((*mtd)->size > 32Mo - 64Ko)
> (*mtd)->size -= (*mtd)->erasesize;
>
> and it seems to work fine...
>
> - Use a partition that exclude the last 64Ko of the flash. This
> solution was suggested by Nicolas Pitre, but I think it imposes
> some restrictions on flash concatenation for example.
>
in case someone is interested, here is the implementation of the first
and second solutions:
static struct mtd_info * __init fix_mtd_size(struct mtd_info *mtd)
{
#if 0
while (mtd->size > MAX_BANK_SIZE)
mtd->size -= mtd->erasesize;
return mtd;
#else
struct mtd_partition fixed_part;
struct mtd_info *fixed_mtd = NULL;
memset(&fixed_part, 0, sizeof (struct mtd_partition));
fixed_part.name = mtd->name;
fixed_part.size = mtd->size;
while (fixed_part.size > MAX_BANK_SIZE)
fixed_part.size -= mtd->erasesize;
fixed_part.mtdp = &fixed_mtd;
add_mtd_partitions(mtd, &fixed_part, 1);
return fixed_mtd;
#endif
}
--
Franck
More information about the linux-mtd
mailing list