Commit f5fb51c4 authored by Carl-Daniel Hailfinger's avatar Carl-Daniel Hailfinger
Browse files

Adept layout handling to new programmer infrastructure and fix off-by-one error


Flashrom has the ability to use layout files with romentries, but
this feature was not adapted to the programmer infrastructure and had
undefined behaviour for flasher!=internal. The romentry handling had an
off-by-one error which caused all copies to end up one byte short. Fix
these issues.

Corresponding to flashrom svn r694.
Signed-off-by: default avatarCarl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net>
Acked-by: default avatarStefan Reinauer <stepan@coresystems.de>
parent 664e7ad9
......@@ -422,7 +422,7 @@ char *strcat_realloc(char *dest, const char *src);
int show_id(uint8_t *bios, int size, int force);
int read_romlayout(char *name);
int find_romentry(char *name);
int handle_romentries(uint8_t *buffer, uint8_t *content);
int handle_romentries(uint8_t *buffer, struct flashchip *flash);
/* cbtable.c */
int coreboot_init(void);
......
......@@ -930,8 +930,7 @@ int main(int argc, char *argv[])
// This should be moved into each flash part's code to do it
// cleanly. This does the job.
/* FIXME: Adapt to the external flasher infrastructure. */
handle_romentries(buf, (uint8_t *) flash->virtual_memory);
handle_romentries(buf, flash);
// ////////////////////////////////////////////////////////////
......
......@@ -196,11 +196,11 @@ int find_romentry(char *name)
return -1;
}
int handle_romentries(uint8_t *buffer, uint8_t *content)
int handle_romentries(uint8_t *buffer, struct flashchip *flash)
{
int i;
// This function does not safe flash write cycles.
// This function does not save flash write cycles.
//
// Also it does not cope with overlapping rom layout
// sections.
......@@ -220,10 +220,9 @@ int handle_romentries(uint8_t *buffer, uint8_t *content)
if (rom_entries[i].included)
continue;
/* FIXME: Adapt to the external flasher infrastructure. */
memcpy(buffer + rom_entries[i].start,
content + rom_entries[i].start,
rom_entries[i].end - rom_entries[i].start);
flash->read(flash, buffer + rom_entries[i].start,
rom_entries[i].start,
rom_entries[i].end - rom_entries[i].start + 1);
}
return 0;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment