For Banana Pi R2 we need to place the U-Boot partition at precisely 0x50000.

Signed-off-by: David Woodhouse <dw...@infradead.org>
---

This is part of the Banana Pi R2 support in 
https://github.com/openwrt/openwrt/pull/3101 but I'll send it under
separate cover for review too.

 tools/firmware-utils/src/ptgen.c | 30 +++++++++++++++++++++++++++---
 1 file changed, 27 insertions(+), 3 deletions(-)

diff --git a/tools/firmware-utils/src/ptgen.c b/tools/firmware-utils/src/ptgen.c
index 83067c104d..9d6ff13640 100644
--- a/tools/firmware-utils/src/ptgen.c
+++ b/tools/firmware-utils/src/ptgen.c
@@ -106,6 +106,7 @@ struct pte {
 };
 
 struct partinfo {
+       unsigned long start;
        unsigned long size;
        int type;
 };
@@ -290,8 +291,16 @@ static int gen_ptable(uint32_t signature, int nr)
                pte[i].type = parts[i].type;
 
                start = sect + sectors;
-               if (kb_align != 0)
+               if (parts[i].start != 0) {
+                       if (parts[i].start * 2 < start) {
+                               fprintf(stderr, "Invalid start %ld for 
partition %d!\n",
+                                       parts[i].start, i);
+                               return ret;
+                       }
+                       start = parts[i].start * 2;
+               } else if (kb_align != 0) {
                        start = round_to_kb(start);
+               }
                pte[i].start = cpu_to_le32(start);
 
                sect = start + parts[i].size * 2;
@@ -369,8 +378,16 @@ static int gen_gptable(uint32_t signature, guid_t guid, 
unsigned nr)
                        return ret;
                }
                start = sect + sectors;
-               if (kb_align != 0)
+               if (parts[i].start != 0) {
+                       if (parts[i].start * 2 < start) {
+                               fprintf(stderr, "Invalid start %ld for 
partition %d!\n",
+                                       parts[i].start, i);
+                               return ret;
+                       }
+                       start = parts[i].start * 2;
+               } else if (kb_align != 0) {
                        start = round_to_kb(start);
+               }
                gpte[i].start = cpu_to_le64(start);
 
                sect = start + parts[i].size * 2;
@@ -481,13 +498,14 @@ fail:
 
 static void usage(char *prog)
 {
-       fprintf(stderr, "Usage: %s [-v] [-n] [-g] -h <heads> -s <sectors> -o 
<outputfile> [-a 0..4] [-l <align kB>] [-G <guid>] [[-t <type>] -p <size>...] 
\n", prog);
+       fprintf(stderr, "Usage: %s [-v] [-n] [-g] -h <heads> -s <sectors> -o 
<outputfile> [-a 0..4] [-l <align kB>] [-G <guid>] [[-t <type>] -p 
<size>[@<start>]...] \n", prog);
        exit(EXIT_FAILURE);
 }
 
 int main (int argc, char **argv)
 {
        unsigned char type = 0x83;
+       char *p;
        int ch;
        int part = 0;
        uint32_t signature = 0x5452574F; /* 'OWRT' */
@@ -519,7 +537,13 @@ int main (int argc, char **argv)
                                fputs("Too many partitions\n", stderr);
                                exit(EXIT_FAILURE);
                        }
+                       p = strchr(optarg, '@');
+                       if (p) {
+                               *(p++) = 0;
+                               parts[part].start = to_kbytes(p);
+                       }
                        parts[part].size = to_kbytes(optarg);
+                       fprintf(stderr, "part %ld %ld\n", parts[part].start, 
parts[part].size);
                        parts[part++].type = type;
                        break;
                case 't':

Attachment: smime.p7s
Description: S/MIME cryptographic signature

_______________________________________________
openwrt-devel mailing list
openwrt-devel@lists.openwrt.org
https://lists.openwrt.org/mailman/listinfo/openwrt-devel

Reply via email to