[U-Boot] [PATCH 5/6] Support environment anywhere within erase area
Wolfgang Denk
wd at denx.de
Sun Aug 31 20:57:32 CEST 2008
Dear Guennadi Liakhovetski,
In message <Pine.LNX.4.64.0808271747470.6718 at axis700.grange> you wrote:
> This will become more important with NAND support, in which case the minimum
> erase region is a block, which consists of several pages and can be 256KiB
> large.
Please explain.
What does "anywhere" mean? At offset 0, 1, 5, 17 or 42? Or what? And
what exactly is the "erase area" ?
And where's the difference between NAND and NOR flash? For NOR, the
minimum "erase region" is a "block", either, which also can be 256KiB
large.
> + /*
> + * Support environment anywhere within erase sectors: read out the
> + * complete area to be erased, replace the environment image, write
> + * the whole block back again.
> + */
> + if (DEVESIZE (dev_target) > CFG_ENV_SIZE) {
> + data = malloc (DEVESIZE (dev_target));
> + if (!data) {
> + fprintf (stderr,
> + "Cannot malloc %lu bytes: %s\n",
> + DEVESIZE (dev_target),
> + strerror (errno));
> + return -1;
> + }
> +
> + rc = ioctl (fd_target, MEMGETINFO, &mtdinfo_target);
> + if (rc < 0) {
> + perror ("Cannot get MTD information");
> + return -1;
> + }
> +
> + /* Erase sector size is always a power of 2 */
> + erase_offset = DEVOFFSET (dev_target) &
> + ~(mtdinfo_target.erasesize - 1);
> +
> + rc = flash_read_buf (dev_target, fd_target, data,
> + DEVESIZE (dev_target), erase_offset);
> + if (rc < 0)
> + return rc;
> +
> + /* Overwrite the old environment */
> + memcpy(DEVOFFSET (dev_target) - erase_offset + data,
> + environment.image, CFG_ENV_SIZE);
> + } else {
> + data = (char *)environment.image;
> + erase_offset = DEVOFFSET (dev_target);
> + }
You are talking about "several pages" above. Where is this refelected
in the code?
Frankly, I don't understand what you are trying to do. Please explain
your implementation.
Best regards,
Wolfgang Denk
--
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
Bugs are by far the largest and most successful class of
entity, with nearly a million known species. In this res-
pect they outnumber all the other known creatures about
four to one. -- Professor Snope's Encyclopedia of Animal
More information about the U-Boot
mailing list