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