Merge tag 'iio-fixes-for-4.14a' of git://git.kernel.org/pub/scm/linux/kernel/git...
[linux-2.6-microblaze.git] / scripts / dtc / flattree.c
index ebac548..fcf7154 100644 (file)
@@ -49,7 +49,7 @@ static struct version_info {
 
 struct emitter {
        void (*cell)(void *, cell_t);
-       void (*string)(void *, char *, int);
+       void (*string)(void *, const char *, int);
        void (*align)(void *, int);
        void (*data)(void *, struct data);
        void (*beginnode)(void *, struct label *labels);
@@ -64,7 +64,7 @@ static void bin_emit_cell(void *e, cell_t val)
        *dtbuf = data_append_cell(*dtbuf, val);
 }
 
-static void bin_emit_string(void *e, char *str, int len)
+static void bin_emit_string(void *e, const char *str, int len)
 {
        struct data *dtbuf = e;
 
@@ -144,22 +144,14 @@ static void asm_emit_cell(void *e, cell_t val)
                (val >> 8) & 0xff, val & 0xff);
 }
 
-static void asm_emit_string(void *e, char *str, int len)
+static void asm_emit_string(void *e, const char *str, int len)
 {
        FILE *f = e;
-       char c = 0;
 
-       if (len != 0) {
-               /* XXX: ewww */
-               c = str[len];
-               str[len] = '\0';
-       }
-
-       fprintf(f, "\t.string\t\"%s\"\n", str);
-
-       if (len != 0) {
-               str[len] = c;
-       }
+       if (len != 0)
+               fprintf(f, "\t.string\t\"%.*s\"\n", len, str);
+       else
+               fprintf(f, "\t.string\t\"%s\"\n", str);
 }
 
 static void asm_emit_align(void *e, int a)
@@ -179,7 +171,7 @@ static void asm_emit_data(void *e, struct data d)
                emit_offset_label(f, m->ref, m->offset);
 
        while ((d.len - off) >= sizeof(uint32_t)) {
-               asm_emit_cell(e, fdt32_to_cpu(*((uint32_t *)(d.val+off))));
+               asm_emit_cell(e, fdt32_to_cpu(*((fdt32_t *)(d.val+off))));
                off += sizeof(uint32_t);
        }
 
@@ -318,17 +310,16 @@ static struct data flatten_reserve_list(struct reserve_info *reservelist,
 {
        struct reserve_info *re;
        struct data d = empty_data;
-       static struct fdt_reserve_entry null_re = {0,0};
        int    j;
 
        for (re = reservelist; re; re = re->next) {
-               d = data_append_re(d, &re->re);
+               d = data_append_re(d, re->address, re->size);
        }
        /*
         * Add additional reserved slots if the user asked for them.
         */
        for (j = 0; j < reservenum; j++) {
-               d = data_append_re(d, &null_re);
+               d = data_append_re(d, 0, 0);
        }
 
        return d;
@@ -544,11 +535,11 @@ void dt_to_asm(FILE *f, struct dt_info *dti, int version)
                        fprintf(f, "\t.globl\t%s\n", l->label);
                        fprintf(f, "%s:\n", l->label);
                }
-               ASM_EMIT_BELONG(f, "0x%08x", (unsigned int)(re->re.address >> 32));
+               ASM_EMIT_BELONG(f, "0x%08x", (unsigned int)(re->address >> 32));
                ASM_EMIT_BELONG(f, "0x%08x",
-                               (unsigned int)(re->re.address & 0xffffffff));
-               ASM_EMIT_BELONG(f, "0x%08x", (unsigned int)(re->re.size >> 32));
-               ASM_EMIT_BELONG(f, "0x%08x", (unsigned int)(re->re.size & 0xffffffff));
+                               (unsigned int)(re->address & 0xffffffff));
+               ASM_EMIT_BELONG(f, "0x%08x", (unsigned int)(re->size >> 32));
+               ASM_EMIT_BELONG(f, "0x%08x", (unsigned int)(re->size & 0xffffffff));
        }
        for (i = 0; i < reservenum; i++) {
                fprintf(f, "\t.long\t0, 0\n\t.long\t0, 0\n");
@@ -609,7 +600,7 @@ static void flat_read_chunk(struct inbuf *inb, void *p, int len)
 
 static uint32_t flat_read_word(struct inbuf *inb)
 {
-       uint32_t val;
+       fdt32_t val;
 
        assert(((inb->ptr - inb->base) % sizeof(val)) == 0);
 
@@ -718,13 +709,15 @@ static struct reserve_info *flat_read_mem_reserve(struct inbuf *inb)
         * First pass, count entries.
         */
        while (1) {
+               uint64_t address, size;
+
                flat_read_chunk(inb, &re, sizeof(re));
-               re.address  = fdt64_to_cpu(re.address);
-               re.size = fdt64_to_cpu(re.size);
-               if (re.size == 0)
+               address  = fdt64_to_cpu(re.address);
+               size = fdt64_to_cpu(re.size);
+               if (size == 0)
                        break;
 
-               new = build_reserve_entry(re.address, re.size);
+               new = build_reserve_entry(address, size);
                reservelist = add_reserve_entry(reservelist, new);
        }
 
@@ -817,6 +810,7 @@ static struct node *unflatten_tree(struct inbuf *dtbuf,
 struct dt_info *dt_from_blob(const char *fname)
 {
        FILE *f;
+       fdt32_t magic_buf, totalsize_buf;
        uint32_t magic, totalsize, version, size_dt, boot_cpuid_phys;
        uint32_t off_dt, off_str, off_mem_rsvmap;
        int rc;
@@ -833,7 +827,7 @@ struct dt_info *dt_from_blob(const char *fname)
 
        f = srcfile_relative_open(fname, NULL);
 
-       rc = fread(&magic, sizeof(magic), 1, f);
+       rc = fread(&magic_buf, sizeof(magic_buf), 1, f);
        if (ferror(f))
                die("Error reading DT blob magic number: %s\n",
                    strerror(errno));
@@ -844,11 +838,11 @@ struct dt_info *dt_from_blob(const char *fname)
                        die("Mysterious short read reading magic number\n");
        }
 
-       magic = fdt32_to_cpu(magic);
+       magic = fdt32_to_cpu(magic_buf);
        if (magic != FDT_MAGIC)
                die("Blob has incorrect magic number\n");
 
-       rc = fread(&totalsize, sizeof(totalsize), 1, f);
+       rc = fread(&totalsize_buf, sizeof(totalsize_buf), 1, f);
        if (ferror(f))
                die("Error reading DT blob size: %s\n", strerror(errno));
        if (rc < 1) {
@@ -858,7 +852,7 @@ struct dt_info *dt_from_blob(const char *fname)
                        die("Mysterious short read reading blob size\n");
        }
 
-       totalsize = fdt32_to_cpu(totalsize);
+       totalsize = fdt32_to_cpu(totalsize_buf);
        if (totalsize < FDT_V1_SIZE)
                die("DT blob size (%d) is too small\n", totalsize);