<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>