Chander, Looks good now.
Acked-by: Jason Hobbs <jason.ho...@calxeda.com> Thanks, Jason On Fri, Sep 07, 2012 at 01:36:31AM -0400, Chander Kashyap wrote: > Now DT support is becoming common for all new SoC's. Hence it is better > to have option for getting specific FDT from the remote server. > > This patch adds support for new label i.e. 'fdt'. This will allow to > retrieve 'fdt blob' from the remote server. This patch take care for > the following scenarios. > > The usage of fdt is optional. > The 'fdt blob' can be retrieved from tftp or can be available locally > or can be absent. > > If 'fdt_addr_r' environment variable is set and 'fdt' label is defined > retrieve 'fdt blob' from tftp. 'fdt_addr_r' is then passed along bootm > command. > > If 'fdt_addr' is set and 'fdt blob' is not retrieved from the tftp pass > 'fdt_addr' to bootm command. In this case 'fdt blob' will be available > at 'fdt_addr'. > > If 'fdt_addr' is not set and 'fdt blob' is not retrieve from tftp pass > NULL to boot command. In this case 'fdt blob' is not required and absent. > > Signed-off-by: Chander Kashyap <chander.kash...@linaro.org> > --- > Changes in v2: > - Removed the duplicate code. > changes in v3: > - Added documentation for "fdt" lable in doc/README.pxe > changes in v4: > - Added New environment variable 'fdt_addr_r' for 'fdt blob' > - Add more descriptive documentation for the 'fdt' retrieval. > > common/cmd_pxe.c | 39 ++++++++++++++++++++++++++++++++++++--- > doc/README.pxe | 14 ++++++++++++-- > 2 files changed, 48 insertions(+), 5 deletions(-) > > diff --git a/common/cmd_pxe.c b/common/cmd_pxe.c > index 6b31dea..ee75db9 100644 > --- a/common/cmd_pxe.c > +++ b/common/cmd_pxe.c > @@ -450,6 +450,7 @@ struct pxe_label { > char *kernel; > char *append; > char *initrd; > + char *fdt; > int attempted; > int localboot; > struct list_head list; > @@ -517,6 +518,9 @@ static void label_destroy(struct pxe_label *label) > if (label->initrd) > free(label->initrd); > > + if (label->fdt) > + free(label->fdt); > + > free(label); > } > > @@ -541,6 +545,9 @@ static void label_print(void *data) > > if (label->initrd) > printf("\t\tinitrd: %s\n", label->initrd); > + > + if (label->fdt) > + printf("\tfdt: %s\n", label->fdt); > } > > /* > @@ -628,10 +635,29 @@ static void label_boot(struct pxe_label *label) > bootm_argv[1] = getenv("kernel_addr_r"); > > /* > - * fdt usage is optional. If there is an fdt_addr specified, we will > - * pass it along to bootm, and adjust argc appropriately. > + * fdt usage is optional: > + * It handles the following scenarios. All scenarios are exclusive > + * > + * Scenario 1: If fdt_addr_r specified and "fdt" label is defined in > + * pxe file, retrieve fdt blob from server. Pass fdt_addr_r to bootm, > + * and adjust argc appropriately. > + * > + * Scenario 2: If there is an fdt_addr specified, pass it along to > + * bootm, and adjust argc appropriately. > + * > + * Scenario 3: fdt blob is not available. > */ > - bootm_argv[3] = getenv("fdt_addr"); > + bootm_argv[3] = getenv("fdt_addr_r"); > + > + /* if fdt label is defined then get fdt from server */ > + if (bootm_argv[3] && label->fdt) { > + if (get_relfile_envaddr(label->fdt, "fdt_addr_r") < 0) { > + printf("Skipping %s for failure retrieving fdt\n", > + label->name); > + return; > + } > + } else > + bootm_argv[3] = getenv("fdt_addr"); > > if (bootm_argv[3]) > bootm_argc = 4; > @@ -658,6 +684,7 @@ enum token_type { > T_DEFAULT, > T_PROMPT, > T_INCLUDE, > + T_FDT, > T_INVALID > }; > > @@ -685,6 +712,7 @@ static const struct token keywords[] = { > {"append", T_APPEND}, > {"initrd", T_INITRD}, > {"include", T_INCLUDE}, > + {"fdt", T_FDT}, > {NULL, T_INVALID} > }; > > @@ -1074,6 +1102,11 @@ static int parse_label(char **c, struct pxe_menu *cfg) > err = parse_sliteral(c, &label->initrd); > break; > > + case T_FDT: > + if (!label->fdt) > + err = parse_sliteral(c, &label->fdt); > + break; > + > case T_LOCALBOOT: > err = parse_integer(c, &label->localboot); > break; > diff --git a/doc/README.pxe b/doc/README.pxe > index 2bbf53d..f00f280 100644 > --- a/doc/README.pxe > +++ b/doc/README.pxe > @@ -93,8 +93,13 @@ pxe boot > be passed to the bootm command to boot the kernel. These environment > variables are required to be set. > > - fdt_addr - the location of a fdt blob. If this is set, it will be passed > - to bootm when booting a kernel. > + fdt_addr_r - location in RAM at which 'pxe boot' will store the fdt > blob it > + retrieves from tftp. The retrieval is possible if 'fdt' label is > defined in > + pxe file and 'fdt_addr_r' is set. If retrieval is possible, 'fdt_addr_r' > + will be passed to bootm command to boot the kernel. > + > + fdt_addr - the location of a fdt blob. 'fdt_addr' will be passed to > bootm > + command if it is set and 'fdt_addr_r' is not passed to bootm command. > > pxe file format > =============== > @@ -156,6 +161,11 @@ initrd <path> - if this label is chosen, use tftp > to retrieve the initrd > the initrd_addr_r environment variable, and that address > will be passed to bootm. > > +fdt <path> - if this label is chosen, use tftp to retrieve the fdt blob > + at <path>. it will be stored at the address indicated in > + the fdt_addr_r environment variable, and that address will > + be passed to bootm. > + > localboot <flag> - Run the command defined by "localcmd" in the > environment. > <flag> is ignored and is only here to match the syntax of > PXELINUX config files. > -- > 1.7.9.5 > _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot