x86: ifdtool: Support checking region overlap before U-Boot
PATCH 1/3 x86: ifdtool: Support checking region overlap before U-Boot
We have the capability to check regions written after U-Boot that do not overlap. Since regions can also be written before U-Boot, add such check for these too.
---
tools/ifdtool.c | 66 ++++++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 46 insertions(+), 20 deletions(-)
tools/ifdtool.c +46 -20
@@ -707,10 +707,12 @@ int inject_region(char *image, int size, int region_type, char *region_fname)* 8MB ROM the start address is 0xfff80000. * @write_fname: Filename to add to the image * @offset_uboot_top: Offset of the top of U-Boot +* @offset_uboot_start: Offset of the start of U-Boot * @return number of bytes written if OK, -ve on error */ static int write_data (char *image,int size,unsigned int addr, -const char *write_fname,int offset_uboot_top) +const char *write_fname,int offset_uboot_top, +int offset_uboot_start) {int write_fd, write_size;int offset;
@@ -720,13 +722,25 @@ static int write_data(char *image, int size, unsigned int addr,return write_fd; offset = (uint32_t )(addr + size); -if (offset_uboot_top && offset_uboot_top >= offset) { -fprintf (stderr,"U-Boot image overlaps with region '%s'\n" , - write_fname); -fprintf (stderr, -"U-Boot finishes at offset %x, file starts at %x\n" , - offset_uboot_top, offset); -return -EXDEV ; +if (offset_uboot_top) { +if (offset_uboot_start < offset && + offset_uboot_top >= offset) { +fprintf (stderr,"U-Boot image overlaps with region '%s'\n" , + write_fname); +fprintf (stderr, +"U-Boot finishes at offset %x, file starts at %x\n" , + offset_uboot_top, offset); +return -EXDEV ; + } +if (offset_uboot_start > offset && + offset_uboot_start <= offset + write_size) { +fprintf (stderr,"U-Boot image overlaps with region '%s'\n" , + write_fname); +fprintf (stderr, +"U-Boot starts at offset %x, file finishes@%x\n" , + offset_uboot_start, offset + write_size); +return -EXDEV ; + } }debug ("Writing %s to offset %#x\n" , write_fname, offset);
@@ -927,27 +941,36 @@ static int write_ucode(char *image, int size, struct input_file *fdt,*/ static int write_uboot (char *image,int size,struct input_file *uboot,struct input_file *fdt,unsigned int ucode_ptr, -int collate_ucode) +int collate_ucode,int *offset_uboot_top, +int *offset_uboot_start) { -const void *blob;int uboot_size, fdt_size; +int uboot_top; - uboot_size =write_data (image, size, uboot->addr, uboot->fname,0 ); + uboot_size =write_data (image, size, uboot->addr, uboot->fname,0 ,0 );if (uboot_size <0 )return uboot_size; fdt->addr = uboot->addr + uboot_size;debug ("U-Boot size %#x, FDT at %#x\n" , uboot_size, fdt->addr); - fdt_size =write_data (image, size, fdt->addr, fdt->fname,0 ); + fdt_size =write_data (image, size, fdt->addr, fdt->fname,0 ,0 );if (fdt_size <0 )return fdt_size; - blob = (void *)image + (uint32_t )(fdt->addr + size); + + uboot_top = (uint32_t )(fdt->addr + size) + fdt_size;if (ucode_ptr) { -return write_ucode (image, size, fdt, fdt_size, ucode_ptr, - collate_ucode); + uboot_top =write_ucode (image, size, fdt, fdt_size, ucode_ptr, + collate_ucode); +if (uboot_top <0 ) +return uboot_top; } -return ((char *)blob + fdt_size) - image; +if (offset_uboot_top && offset_uboot_start) { + *offset_uboot_top = uboot_top; + *offset_uboot_start = (uint32_t )(uboot->addr + size); + } + +return 0 ; }static void print_version (void )
@@ -1268,13 +1291,14 @@ int main(int argc, char *argv[]) }if (mode_write_descriptor) - ret =write_data (image, size, -size, desc_fname,0 ); + ret =write_data (image, size, -size, desc_fname,0 ,0 );if (mode_inject) ret =inject_region (image, size, region_type, inject_fname);if (mode_write) {int offset_uboot_top =0 ; +int offset_uboot_start =0 ;for (wr_idx =0 ; wr_idx < wr_num; wr_idx++) { ifile = &input_file[wr_idx];
@@ -1282,11 +1306,13 @@ int main(int argc, char *argv[])continue ; }else if (ifile->type == IF_uboot) { ret =write_uboot (image, size, ifile, fdt, - ucode_ptr, collate_ucode); - offset_uboot_top = ret; + ucode_ptr, collate_ucode, + &offset_uboot_top, + &offset_uboot_start); }else { ret =write_data (image, size, ifile->addr, - ifile->fname, offset_uboot_top); + ifile->fname, offset_uboot_top, + offset_uboot_start); }if (ret <0 )break ;
Signature · 1 line
1.8.2.1
PATCH 2/3 x86: doc: Change to use CONFIG_VGA_BIOS_ADDR
CONFIG_X86_OPTION_ROM_ADDR has been renamed to CONFIG_VGA_BIOS_ADDR. Update the doc to refer to the new name.
---
doc/README.x86 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
doc/README.x86 +1 -1
@@ -189,7 +189,7 @@ Offset Description Controlling config 001000 me.bin Set by the descriptor 500000 <spare> 700000 u-boot-dtb.bin CONFIG_SYS_TEXT_BASE -790000 vga.bin CONFIG_X86_OPTION_ROM_ADDR +790000 vga.bin CONFIG_VGA_BIOS_ADDR 7c0000 fsp.bin CONFIG_FSP_ADDR 7f8000 <spare> (depends on size of fsp.bin) 7fe000 Environment CONFIG_ENV_OFFSET
Signature · 1 line
1.8.2.1
PATCH 2/3 x86: doc: Change to use CONFIG_VGA_BIOS_ADDR
Quoted 8 lines · Bin Meng
CONFIG_X86_OPTION_ROM_ADDRhas been renamed toCONFIG_VGA_BIOS_ADDR. Update the doc to refer to the new name.Signed-off-by Bin Meng <[email protected]>---
doc/README.x86 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
Tested on Minnowmax:
PATCH 2/3 x86: doc: Change to use CONFIG_VGA_BIOS_ADDR
Quoted 7 lines · Simon Glass
Quoted 6 lines · Bin Meng
CONFIG_X86_OPTION_ROM_ADDRhas been renamed toCONFIG_VGA_BIOS_ADDR. Update the doc to refer to the new name.Signed-off-by Bin Meng <[email protected]>---
Quoted 6 lines
Quoted 2 lines
doc/README.x86 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)Acked-by Simon Glass <[email protected]>Tested on Minnowmax:
Tested-by Simon Glass <[email protected]>
Applied to u-boot-x86, thanks!
PATCH 3/3 x86: bayleybay: Change default vga bios rom address
In reply to Bin MengWith multiple microcode blobs included, the generated u-boot-dtb.bin leaves merely several hundred bytes before the vga bios. Change the vga bios rom address to make a bigger room for u-boot-dtb.bin.
---
configs/bayleybay_defconfig | 1 + 1 file changed, 1 insertion(+)
configs/bayleybay_defconfig +1 -0
@@ -5,6 +5,7 @@ CONFIG_TARGET_BAYLEYBAY=y CONFIG_HAVE_INTEL_ME=y CONFIG_SMP=y CONFIG_HAVE_VGA_BIOS=y +CONFIG_VGA_BIOS_ADDR=0xfffa0000 CONFIG_GENERATE_PIRQ_TABLE=y CONFIG_GENERATE_MP_TABLE=y CONFIG_CMD_CPU=y
Signature · 1 line
1.8.2.1
PATCH 3/3 x86: bayleybay: Change default vga bios rom address
Quoted 9 lines · Bin Meng
With multiple microcode blobs included, the generated u-boot-dtb.bin leaves merely several hundred bytes before the vga bios. Change the vga bios rom address to make a bigger room for u-boot-dtb.bin.
Signed-off-by Bin Meng <[email protected]>---
configs/bayleybay_defconfig | 1 + 1 file changed, 1 insertion(+)
Tested on Minnowmax:
PATCH 3/3 x86: bayleybay: Change default vga bios rom address
Quoted 8 lines · Simon Glass
Quoted 7 lines · Bin Meng
With multiple microcode blobs included, the generated u-boot-dtb.bin leaves merely several hundred bytes before the vga bios. Change the vga bios rom address to make a bigger room for u-boot-dtb.bin.
Signed-off-by Bin Meng <[email protected]>---
Quoted 6 lines
Quoted 2 lines
configs/bayleybay_defconfig | 1 + 1 file changed, 1 insertion(+)Acked-by Simon Glass <[email protected]>Tested on Minnowmax:
Tested-by Simon Glass <[email protected]>
Applied to u-boot-x86, thanks!
PATCH 1/3 x86: ifdtool: Support checking region overlap before U-Boot
In reply to Bin MengBin wrote...
Quoted 6 lines
We have the capability to check regions written after U-Boot that do not overlap. Since regions can also be written before U-Boot, add such check for these too.
Signed-off-by Bin Meng <[email protected]>---
This fixes the issue I raised this morning with building the .rom file for Galileo with the latest master, so:
Regards,
Andy.
A message that is not in the archive (sent off-list or not yet received): [email protected]
PATCH 1/3 x86: ifdtool: Support checking region overlap before U-Boot
Quoted 6 lines · Andy Pont
Bin wrote...
Quoted 4 lines
We have the capability to check regions written after U-Boot that do not overlap. Since regions can also be written before U-Boot, add such check for these too.
Quoted 7 lines
Quoted 2 lines
Signed-off-by Bin Meng <[email protected]>---
This fixes the issue I raised this morning with building the .rom file for Galileo with the latest master, so:
Tested-by Andy Pont <[email protected]>
Tested on Minnowmax:
PATCH 1/3 x86: ifdtool: Support checking region overlap before U-Boot
Quoted 10 lines · Simon Glass
Quoted 9 lines · Andy Pont
Bin wrote...
Quoted 6 lines
We have the capability to check regions written after U-Boot that do not overlap. Since regions can also be written before U-Boot, add such check for these too.
Signed-off-by Bin Meng <[email protected]>---
Quoted 8 lines
Quoted 4 lines
This fixes the issue I raised this morning with building the .rom file for Galileo with the latest master, so:
Tested-by Andy Pont <[email protected]>Acked-by Simon Glass <[email protected]>Tested on Minnowmax:
Tested-by Simon Glass <[email protected]>
Applied to u-boot-x86, thanks!