* [PATCH] dtc: add setting of physical boot cpu @ 2006-05-18 3:56 Michael Neuling 2006-05-18 13:23 ` Jimi Xenidis 0 siblings, 1 reply; 5+ messages in thread From: Michael Neuling @ 2006-05-18 3:56 UTC (permalink / raw) To: linuxppc-dev, Jon Loeliger dtc always sets the physical boot CPU to 0xfeedbeef. Add a -b option to set this. --- I've tested the blob output but not asm output. --- dtc.c | 12 +++++++++--- dtc.h | 6 ++++-- flattree.c | 16 ++++++++++------ 3 files changed, 23 insertions(+), 11 deletions(-) Index: dtc/dtc.c =================================================================== --- dtc.orig/dtc.c +++ dtc/dtc.c @@ -95,6 +95,8 @@ static void usage(void) fprintf(stderr, "\t\tBlob version to produce, defaults to 3 (relevant for dtb\n\t\tand asm output only)\n"); fprintf(stderr, "\t-R <number>\n"); fprintf(stderr, "\t\tMake space for <number> reserve map entries (relevant for \n\t\tdtb and asm output only)\n"); + fprintf(stderr, "\t-b <number>\n"); + fprintf(stderr, "\t\tSet the physical boot cpu\n"); fprintf(stderr, "\t-f\n"); fprintf(stderr, "\t\tForce - try to produce output even if the input tree has errors\n"); exit(2); @@ -113,8 +115,9 @@ int main(int argc, char *argv[]) FILE *outf = NULL; int outversion = 3; int reservenum = 1; + int boot_cpuid_phys = 0xfeedbeef; - while ((opt = getopt(argc, argv, "I:O:o:V:R:f")) != EOF) { + while ((opt = getopt(argc, argv, "I:O:o:V:R:fb:")) != EOF) { switch (opt) { case 'I': inform = optarg; @@ -134,6 +137,9 @@ int main(int argc, char *argv[]) case 'f': force = 1; break; + case 'b': + boot_cpuid_phys = strtol(optarg, NULL, 0); + break; default: usage(); } @@ -185,9 +191,9 @@ int main(int argc, char *argv[]) if (streq(outform, "dts")) { dt_to_source(outf, bi); } else if (streq(outform, "dtb")) { - dt_to_blob(outf, bi, outversion); + dt_to_blob(outf, bi, outversion, boot_cpuid_phys); } else if (streq(outform, "asm")) { - dt_to_asm(outf, bi, outversion); + dt_to_asm(outf, bi, outversion, boot_cpuid_phys); } else if (streq(outform, "null")) { /* do nothing */ } else { Index: dtc/dtc.h =================================================================== --- dtc.orig/dtc.h +++ dtc/dtc.h @@ -207,8 +207,10 @@ struct boot_info *build_boot_info(struct /* Flattened trees */ -void dt_to_blob(FILE *f, struct boot_info *bi, int version); -void dt_to_asm(FILE *f, struct boot_info *bi, int version); +void dt_to_blob(FILE *f, struct boot_info *bi, int version, + int boot_cpuid_phys); +void dt_to_asm(FILE *f, struct boot_info *bi, int version, + int boot_cpuid_phys); struct boot_info *dt_from_blob(FILE *f); Index: dtc/flattree.c =================================================================== --- dtc.orig/flattree.c +++ dtc/flattree.c @@ -301,7 +301,8 @@ static struct data flatten_reserve_list( } static void make_bph(struct boot_param_header *bph, struct version_info *vi, - int reservesize, int dtsize, int strsize) + int reservesize, int dtsize, int strsize, + int boot_cpuid_phys) { int reserve_off; @@ -324,12 +325,13 @@ static void make_bph(struct boot_param_h + dtsize + strsize); if (vi->flags & FTF_BOOTCPUID) - bph->boot_cpuid_phys = 0xfeedbeef; + bph->boot_cpuid_phys = cpu_to_be32(boot_cpuid_phys); if (vi->flags & FTF_STRTABSIZE) bph->size_dt_strings = cpu_to_be32(strsize); } -void dt_to_blob(FILE *f, struct boot_info *bi, int version) +void dt_to_blob(FILE *f, struct boot_info *bi, int version, + int boot_cpuid_phys) { struct version_info *vi = NULL; int i; @@ -355,7 +357,8 @@ void dt_to_blob(FILE *f, struct boot_inf reservebuf = flatten_reserve_list(bi->reservelist, vi); /* Make header */ - make_bph(&bph, vi, reservebuf.len, dtbuf.len, strbuf.len); + make_bph(&bph, vi, reservebuf.len, dtbuf.len, strbuf.len, + boot_cpuid_phys); fwrite(&bph, vi->hdr_size, 1, f); @@ -395,7 +398,7 @@ static void dump_stringtable_asm(FILE *f } } -void dt_to_asm(FILE *f, struct boot_info *bi, int version) +void dt_to_asm(FILE *f, struct boot_info *bi, int version, int boot_cpuid_phys) { struct version_info *vi = NULL; int i; @@ -434,7 +437,8 @@ void dt_to_asm(FILE *f, struct boot_info vi->last_comp_version); if (vi->flags & FTF_BOOTCPUID) - fprintf(f, "\t.long\t0xdeadbeef\t/*boot_cpuid_phys*/\n"); + fprintf(f, "\t.long\t%i\t/*boot_cpuid_phys*/\n", + boot_cpuid_phys); if (vi->flags & FTF_STRTABSIZE) fprintf(f, "\t.long\t_%s_strings_end - _%s_strings_start\t/* size_dt_strings */\n", ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] dtc: add setting of physical boot cpu 2006-05-18 3:56 [PATCH] dtc: add setting of physical boot cpu Michael Neuling @ 2006-05-18 13:23 ` Jimi Xenidis 2006-05-18 16:59 ` Michael Neuling 0 siblings, 1 reply; 5+ messages in thread From: Jimi Xenidis @ 2006-05-18 13:23 UTC (permalink / raw) To: Michael Neuling; +Cc: linuxppc-dev Hey Michael, a few questions: How does this interact with "linux,boot-cpu"? If -b is defined then the absence of "linux,boot-cpu" should no longer cause a warning. Perhaps if -b is missing the header value is set from "linux,boot- cpu" property? Should we extend the "linux,boot-cpu" to actually contain a thread-id or are we deprecating this prop? -JX On May 17, 2006, at 11:56 PM, Michael Neuling wrote: > dtc always sets the physical boot CPU to 0xfeedbeef. Add a -b > option to > set this. > > --- > I've tested the blob output but not asm output. > > --- > dtc.c | 12 +++++++++--- > dtc.h | 6 ++++-- > flattree.c | 16 ++++++++++------ > 3 files changed, 23 insertions(+), 11 deletions(-) > > Index: dtc/dtc.c > =================================================================== > --- dtc.orig/dtc.c > +++ dtc/dtc.c > @@ -95,6 +95,8 @@ static void usage(void) > fprintf(stderr, "\t\tBlob version to produce, defaults to 3 > (relevant for dtb\n\t\tand asm output only)\n"); > fprintf(stderr, "\t-R <number>\n"); > fprintf(stderr, "\t\tMake space for <number> reserve map entries > (relevant for \n\t\tdtb and asm output only)\n"); > + fprintf(stderr, "\t-b <number>\n"); > + fprintf(stderr, "\t\tSet the physical boot cpu\n"); > fprintf(stderr, "\t-f\n"); > fprintf(stderr, "\t\tForce - try to produce output even if the > input tree has errors\n"); > exit(2); > @@ -113,8 +115,9 @@ int main(int argc, char *argv[]) > FILE *outf = NULL; > int outversion = 3; > int reservenum = 1; > + int boot_cpuid_phys = 0xfeedbeef; > > - while ((opt = getopt(argc, argv, "I:O:o:V:R:f")) != EOF) { > + while ((opt = getopt(argc, argv, "I:O:o:V:R:fb:")) != EOF) { > switch (opt) { > case 'I': > inform = optarg; > @@ -134,6 +137,9 @@ int main(int argc, char *argv[]) > case 'f': > force = 1; > break; > + case 'b': > + boot_cpuid_phys = strtol(optarg, NULL, 0); > + break; > default: > usage(); > } > @@ -185,9 +191,9 @@ int main(int argc, char *argv[]) > if (streq(outform, "dts")) { > dt_to_source(outf, bi); > } else if (streq(outform, "dtb")) { > - dt_to_blob(outf, bi, outversion); > + dt_to_blob(outf, bi, outversion, boot_cpuid_phys); > } else if (streq(outform, "asm")) { > - dt_to_asm(outf, bi, outversion); > + dt_to_asm(outf, bi, outversion, boot_cpuid_phys); > } else if (streq(outform, "null")) { > /* do nothing */ > } else { > Index: dtc/dtc.h > =================================================================== > --- dtc.orig/dtc.h > +++ dtc/dtc.h > @@ -207,8 +207,10 @@ struct boot_info *build_boot_info(struct > > /* Flattened trees */ > > -void dt_to_blob(FILE *f, struct boot_info *bi, int version); > -void dt_to_asm(FILE *f, struct boot_info *bi, int version); > +void dt_to_blob(FILE *f, struct boot_info *bi, int version, > + int boot_cpuid_phys); > +void dt_to_asm(FILE *f, struct boot_info *bi, int version, > + int boot_cpuid_phys); > > struct boot_info *dt_from_blob(FILE *f); > > Index: dtc/flattree.c > =================================================================== > --- dtc.orig/flattree.c > +++ dtc/flattree.c > @@ -301,7 +301,8 @@ static struct data flatten_reserve_list( > } > static void make_bph(struct boot_param_header *bph, > struct version_info *vi, > - int reservesize, int dtsize, int strsize) > + int reservesize, int dtsize, int strsize, > + int boot_cpuid_phys) > { > int reserve_off; > > @@ -324,12 +325,13 @@ static void make_bph(struct boot_param_h > + dtsize + strsize); > > if (vi->flags & FTF_BOOTCPUID) > - bph->boot_cpuid_phys = 0xfeedbeef; > + bph->boot_cpuid_phys = cpu_to_be32(boot_cpuid_phys); > if (vi->flags & FTF_STRTABSIZE) > bph->size_dt_strings = cpu_to_be32(strsize); > } > > -void dt_to_blob(FILE *f, struct boot_info *bi, int version) > +void dt_to_blob(FILE *f, struct boot_info *bi, int version, > + int boot_cpuid_phys) > { > struct version_info *vi = NULL; > int i; > @@ -355,7 +357,8 @@ void dt_to_blob(FILE *f, struct boot_inf > reservebuf = flatten_reserve_list(bi->reservelist, vi); > > /* Make header */ > - make_bph(&bph, vi, reservebuf.len, dtbuf.len, strbuf.len); > + make_bph(&bph, vi, reservebuf.len, dtbuf.len, strbuf.len, > + boot_cpuid_phys); > > fwrite(&bph, vi->hdr_size, 1, f); > > @@ -395,7 +398,7 @@ static void dump_stringtable_asm(FILE *f > } > } > > -void dt_to_asm(FILE *f, struct boot_info *bi, int version) > +void dt_to_asm(FILE *f, struct boot_info *bi, int version, int > boot_cpuid_phys) > { > struct version_info *vi = NULL; > int i; > @@ -434,7 +437,8 @@ void dt_to_asm(FILE *f, struct boot_info > vi->last_comp_version); > > if (vi->flags & FTF_BOOTCPUID) > - fprintf(f, "\t.long\t0xdeadbeef\t/*boot_cpuid_phys*/\n"); > + fprintf(f, "\t.long\t%i\t/*boot_cpuid_phys*/\n", > + boot_cpuid_phys); > > if (vi->flags & FTF_STRTABSIZE) > fprintf(f, "\t.long\t_%s_strings_end - _%s_strings_start\t/* > size_dt_strings */\n", > _______________________________________________ > Linuxppc-dev mailing list > Linuxppc-dev@ozlabs.org > https://ozlabs.org/mailman/listinfo/linuxppc-dev ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] dtc: add setting of physical boot cpu 2006-05-18 13:23 ` Jimi Xenidis @ 2006-05-18 16:59 ` Michael Neuling 2006-05-30 22:31 ` Michael Neuling 0 siblings, 1 reply; 5+ messages in thread From: Michael Neuling @ 2006-05-18 16:59 UTC (permalink / raw) To: Jimi Xenidis; +Cc: linuxppc-dev > How does this interact with "linux,boot-cpu"? Currently, the -b option only changes the value in blob header. linux,boot-cpu is still taken from whatever the input dts/dtb/fs specifies. > If -b is defined then the absence of "linux,boot-cpu" should no > longer cause a warning. For version 2 of the blob, this property should be in the header. Perhaps we should warn if linux,boot-cpu is _missing_ when using < version 2 and warn if it's _there_ for >= version 2. I should add an error if someone specifies -b with version < 2. > Perhaps if -b is missing the header value is set from "linux,boot- > cpu" property? I believe they're suppose to be mutually exclusive, so probably not a good idea. > Should we extend the "linux,boot-cpu" to actually contain a thread-id > or are we deprecating this prop? Yeah, the linux,boot-cpu is deprecated in version >= 2. The dtc docs say that the boot_cpuid_phys field should match the "reg" property in the CPU node. Their should be a "reg" property for each thread, which I think solves your problem. On a different note, dtc reading blobs on little endian machines is broken. Just look at reserve mem entries in the output. I think the main issue is with flat_read_chunk using memcpy. Mikey ^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH] dtc: add setting of physical boot cpu 2006-05-18 16:59 ` Michael Neuling @ 2006-05-30 22:31 ` Michael Neuling 2006-06-07 14:49 ` Jon Loeliger 0 siblings, 1 reply; 5+ messages in thread From: Michael Neuling @ 2006-05-30 22:31 UTC (permalink / raw) To: linuxppc-dev, Jon Loeliger dtc always sets the physical boot CPU to 0xfeedbeef. Add a -b option to set this. Also add warnings when using the wrong property with the wrong blob version. Signed-off-by: Michael Neuling <mikey@neuling.org> --- Retransmission with updated warnings after discussion with Jimi. dtc.c | 14 ++++++++++---- dtc.h | 8 +++++--- flattree.c | 16 ++++++++++------ livetree.c | 17 ++++++++++++----- 4 files changed, 37 insertions(+), 18 deletions(-) Index: dtc/dtc.c =================================================================== --- dtc.orig/dtc.c +++ dtc/dtc.c @@ -95,6 +95,8 @@ static void usage(void) fprintf(stderr, "\t\tBlob version to produce, defaults to 3 (relevant for dtb\n\t\tand asm output only)\n"); fprintf(stderr, "\t-R <number>\n"); fprintf(stderr, "\t\tMake space for <number> reserve map entries (relevant for \n\t\tdtb and asm output only)\n"); + fprintf(stderr, "\t-b <number>\n"); + fprintf(stderr, "\t\tSet the physical boot cpu\n"); fprintf(stderr, "\t-f\n"); fprintf(stderr, "\t\tForce - try to produce output even if the input tree has errors\n"); exit(2); @@ -113,8 +115,9 @@ int main(int argc, char *argv[]) FILE *outf = NULL; int outversion = 3; int reservenum = 1; + int boot_cpuid_phys = 0xfeedbeef; - while ((opt = getopt(argc, argv, "I:O:o:V:R:f")) != EOF) { + while ((opt = getopt(argc, argv, "I:O:o:V:R:fb:")) != EOF) { switch (opt) { case 'I': inform = optarg; @@ -134,6 +137,9 @@ int main(int argc, char *argv[]) case 'f': force = 1; break; + case 'b': + boot_cpuid_phys = strtol(optarg, NULL, 0); + break; default: usage(); } @@ -167,7 +173,7 @@ int main(int argc, char *argv[]) if (! bi || ! bi->dt) die("Couldn't read input tree\n"); - if (! check_device_tree(bi->dt)) { + if (! check_device_tree(bi->dt, outversion, boot_cpuid_phys)) { fprintf(stderr, "Input tree has errors\n"); if (! force) exit(1); @@ -185,9 +191,9 @@ int main(int argc, char *argv[]) if (streq(outform, "dts")) { dt_to_source(outf, bi); } else if (streq(outform, "dtb")) { - dt_to_blob(outf, bi, outversion); + dt_to_blob(outf, bi, outversion, boot_cpuid_phys); } else if (streq(outform, "asm")) { - dt_to_asm(outf, bi, outversion); + dt_to_asm(outf, bi, outversion, boot_cpuid_phys); } else if (streq(outform, "null")) { /* do nothing */ } else { Index: dtc/dtc.h =================================================================== --- dtc.orig/dtc.h +++ dtc/dtc.h @@ -178,7 +178,7 @@ struct node *chain_node(struct node *fir void add_property(struct node *node, struct property *prop); void add_child(struct node *parent, struct node *child); -int check_device_tree(struct node *dt); +int check_device_tree(struct node *dt, int outversion, int boot_cpuid_phys); /* Boot info (tree plus memreserve information */ @@ -207,8 +207,10 @@ struct boot_info *build_boot_info(struct /* Flattened trees */ -void dt_to_blob(FILE *f, struct boot_info *bi, int version); -void dt_to_asm(FILE *f, struct boot_info *bi, int version); +void dt_to_blob(FILE *f, struct boot_info *bi, int version, + int boot_cpuid_phys); +void dt_to_asm(FILE *f, struct boot_info *bi, int version, + int boot_cpuid_phys); struct boot_info *dt_from_blob(FILE *f); Index: dtc/flattree.c =================================================================== --- dtc.orig/flattree.c +++ dtc/flattree.c @@ -301,7 +301,8 @@ static struct data flatten_reserve_list( } static void make_bph(struct boot_param_header *bph, struct version_info *vi, - int reservesize, int dtsize, int strsize) + int reservesize, int dtsize, int strsize, + int boot_cpuid_phys) { int reserve_off; @@ -324,12 +325,13 @@ static void make_bph(struct boot_param_h + dtsize + strsize); if (vi->flags & FTF_BOOTCPUID) - bph->boot_cpuid_phys = 0xfeedbeef; + bph->boot_cpuid_phys = cpu_to_be32(boot_cpuid_phys); if (vi->flags & FTF_STRTABSIZE) bph->size_dt_strings = cpu_to_be32(strsize); } -void dt_to_blob(FILE *f, struct boot_info *bi, int version) +void dt_to_blob(FILE *f, struct boot_info *bi, int version, + int boot_cpuid_phys) { struct version_info *vi = NULL; int i; @@ -355,7 +357,8 @@ void dt_to_blob(FILE *f, struct boot_inf reservebuf = flatten_reserve_list(bi->reservelist, vi); /* Make header */ - make_bph(&bph, vi, reservebuf.len, dtbuf.len, strbuf.len); + make_bph(&bph, vi, reservebuf.len, dtbuf.len, strbuf.len, + boot_cpuid_phys); fwrite(&bph, vi->hdr_size, 1, f); @@ -395,7 +398,7 @@ static void dump_stringtable_asm(FILE *f } } -void dt_to_asm(FILE *f, struct boot_info *bi, int version) +void dt_to_asm(FILE *f, struct boot_info *bi, int version, int boot_cpuid_phys) { struct version_info *vi = NULL; int i; @@ -434,7 +437,8 @@ void dt_to_asm(FILE *f, struct boot_info vi->last_comp_version); if (vi->flags & FTF_BOOTCPUID) - fprintf(f, "\t.long\t0xdeadbeef\t/*boot_cpuid_phys*/\n"); + fprintf(f, "\t.long\t%i\t/*boot_cpuid_phys*/\n", + boot_cpuid_phys); if (vi->flags & FTF_STRTABSIZE) fprintf(f, "\t.long\t_%s_strings_end - _%s_strings_start\t/* size_dt_strings */\n", Index: dtc/livetree.c =================================================================== --- dtc.orig/livetree.c +++ dtc/livetree.c @@ -456,7 +456,7 @@ static int check_root(struct node *root) return ok; } -static int check_cpus(struct node *root) +static int check_cpus(struct node *root, int outversion, int boot_cpuid_phys) { struct node *cpus, *cpu; struct property *prop; @@ -518,8 +518,15 @@ static int check_cpus(struct node *root) } } - if (! bootcpu) - WARNMSG("No cpu has \"linux,boot-cpu\" property\n"); + if (outversion < 2) { + if (! bootcpu) + WARNMSG("No cpu has \"linux,boot-cpu\" property\n"); + } else { + if (bootcpu) + WARNMSG("\"linux,boot-cpu\" property is deprecated in blob version 2 or higher\n"); + if (boot_cpuid_phys == 0xfeedbeef) + WARNMSG("physical boot CPU not set. Use -b option to set\n"); + } return ok; } @@ -697,7 +704,7 @@ static void fixup_phandles(struct node * fixup_phandles(root, child); } -int check_device_tree(struct node *dt) +int check_device_tree(struct node *dt, int outversion, int boot_cpuid_phys) { int ok = 1; @@ -713,7 +720,7 @@ int check_device_tree(struct node *dt) return 0; ok = ok && check_root(dt); - ok = ok && check_cpus(dt); + ok = ok && check_cpus(dt, outversion, boot_cpuid_phys); ok = ok && check_memory(dt); ok = ok && check_chosen(dt); if (! ok) ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] dtc: add setting of physical boot cpu 2006-05-30 22:31 ` Michael Neuling @ 2006-06-07 14:49 ` Jon Loeliger 0 siblings, 0 replies; 5+ messages in thread From: Jon Loeliger @ 2006-06-07 14:49 UTC (permalink / raw) To: Michael Neuling; +Cc: linuxppc-dev So, like, the other day Michael Neuling mumbled: > dtc always sets the physical boot CPU to 0xfeedbeef. Add a -b option to > set this. Also add warnings when using the wrong property with the > wrong blob version. > > Signed-off-by: Michael Neuling <mikey@neuling.org> Applied and pushed out to: http://www.jdl.com/git_repos Sorry for the hang time. Thanks, jdl ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2006-06-07 15:20 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2006-05-18 3:56 [PATCH] dtc: add setting of physical boot cpu Michael Neuling 2006-05-18 13:23 ` Jimi Xenidis 2006-05-18 16:59 ` Michael Neuling 2006-05-30 22:31 ` Michael Neuling 2006-06-07 14:49 ` Jon Loeliger
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).