<p>Iru Cai has uploaded this change for <strong>review</strong>.</p><p><a href="https://review.coreboot.org/20474">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">util/kbc1126: refactor kbc1126_ec_insert<br><br>Add support for setting addresses of blobs only, and using address in<br>memory when ROM is mapped, so that we can now use cbfstool to add<br>these blobs and use this tool to set the addresses only.<br><br>Change-Id: I053c55253eee00558071d15923e3eb17b1e8410c<br>---<br>M util/kbc1126/kbc1126_ec_insert.c<br>1 file changed, 62 insertions(+), 28 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://review.coreboot.org:29418/coreboot refs/changes/74/20474/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">diff --git a/util/kbc1126/kbc1126_ec_insert.c b/util/kbc1126/kbc1126_ec_insert.c<br>index 6c19c0e..6e85f39 100644<br>--- a/util/kbc1126/kbc1126_ec_insert.c<br>+++ b/util/kbc1126/kbc1126_ec_insert.c<br>@@ -18,7 +18,14 @@<br> <br> static void usage(const char *s)<br> {<br>- printf("%s <rom file> <fw1> <fw2> <fw1 offset> <fw2 offset>\n", s);<br>+ printf("insert firmware blobs:\n\t"<br>+ "%s <rom file> <fw1> <fw2> <fw1 offset> <fw2 offset>\n\n", s);<br>+ printf("set addresses of firmware blobs only:\n\t"<br>+ "%s <rom file> <fw1 offset> <fw2 offset>\n\n", s);<br>+ printf("offset can be (example is put it to 0x7ffa00 when ROM is 8MB):\n"<br>+ "- file offset: 0x7ffa00\n"<br>+ "- distance to the end of file: -0x600\n"<br>+ "- the address when ROM is mapped to the end of memory: 0xfffffa00\n");<br> exit(1);<br> }<br> <br>@@ -30,20 +37,47 @@<br> }<br> }<br> <br>+static long negoffset(long a, long romsz)<br>+{<br>+ if (a>0) {<br>+ if (a & 0x80000000) /* the address in memory, and sizeof(long) is 8 */<br>+ return a - 0x100000000;<br>+ else /* the file offset */<br>+ return a - romsz;<br>+ } else {<br>+ return a;<br>+ }<br>+}<br>+<br> int main(int argc, char *argv[])<br> {<br>- if (argc < 6)<br>+ FILE *fp, *fw1, *fw2;<br>+ long offset1, offset2;<br>+<br>+ if (argc != 4 && argc != 6)<br> usage(argv[0]);<br> <br>- FILE *fp = fopen(argv[1], "rb+");<br>- FILE *fw1 = fopen(argv[2], "rb");<br>- FILE *fw2 = fopen(argv[3], "rb");<br>- long offset1 = strtol(argv[4], NULL, 0);<br>- long offset2 = strtol(argv[5], NULL, 0);<br>-<br>- if (fp == NULL || fw1 == NULL || fw2 == NULL) {<br>- puts("Error opening file!");<br>+ fp = fopen(argv[1], "rb+");<br>+ if (fp == NULL) {<br>+ puts("Error opening firmware image!");<br> exit(1);<br>+ }<br>+<br>+ if (argc == 6) {<br>+ fw1 = fopen(argv[2], "rb");<br>+ fw2 = fopen(argv[3], "rb");<br>+ offset1 = strtoul(argv[4], NULL, 0);<br>+ offset2 = strtoul(argv[5], NULL, 0);<br>+<br>+ if (fw1 == NULL || fw2 == NULL) {<br>+ puts("Error opening file!");<br>+ exit(1);<br>+ }<br>+ } else {<br>+ fw1 = NULL;<br>+ fw2 = NULL;<br>+ offset1 = strtoul(argv[2], NULL, 0);<br>+ offset2 = strtoul(argv[3], NULL, 0);<br> }<br> <br> if ((offset1 & 0xff) || (offset2 & 0xff)) {<br>@@ -61,11 +95,8 @@<br> exit(1);<br> }<br> <br>- if (offset1 > 0)<br>- offset1 = offset1 - romsz;<br>-<br>- if (offset2 > 0)<br>- offset2 = offset2 - romsz;<br>+ offset1 = negoffset(offset1, romsz);<br>+ offset2 = negoffset(offset2, romsz);<br> <br> /* write two offsets to $s-0x100 */<br> char offs[8];<br>@@ -88,21 +119,24 @@<br> printf("writing to 0x%lx\n", ftell(fp));<br> fwrite(offs, 1, 8, fp);<br> <br>- /* write fw1 and fw2 */<br>- char c;<br>- FseekEnd(fp, offset1);<br>- printf("writing to 0x%lx\n", ftell(fp));<br>- while (fread(&c, 1, 1, fw1) == 1) {<br>- fwrite(&c, 1, 1, fp);<br>- }<br>- FseekEnd(fp, offset2);<br>- printf("writing to 0x%lx\n", ftell(fp));<br>- while (fread(&c, 1, 1, fw2) == 1) {<br>- fwrite(&c, 1, 1, fp);<br>+ if (argc == 6) {<br>+ /* write fw1 and fw2 */<br>+ char c;<br>+ FseekEnd(fp, offset1);<br>+ printf("writing to 0x%lx\n", ftell(fp));<br>+ while (fread(&c, 1, 1, fw1) == 1) {<br>+ fwrite(&c, 1, 1, fp);<br>+ }<br>+ FseekEnd(fp, offset2);<br>+ printf("writing to 0x%lx\n", ftell(fp));<br>+ while (fread(&c, 1, 1, fw2) == 1) {<br>+ fwrite(&c, 1, 1, fp);<br>+ }<br>+<br>+ fclose(fw1);<br>+ fclose(fw2);<br> }<br> <br> fclose(fp);<br>- fclose(fw1);<br>- fclose(fw2);<br> return 0;<br> }<br></pre><p>To view, visit <a href="https://review.coreboot.org/20474">change 20474</a>. To unsubscribe, visit <a href="https://review.coreboot.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://review.coreboot.org/20474"/><meta itemprop="name" content="View Change"/></div></div>
<div style="display:none"> Gerrit-Project: coreboot </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>
<div style="display:none"> Gerrit-Change-Id: I053c55253eee00558071d15923e3eb17b1e8410c </div>
<div style="display:none"> Gerrit-Change-Number: 20474 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Iru Cai <mytbk920423@gmail.com> </div>