diff mbox

[U-Boot,v2] PXE: FDT: Add support for fdt in PXE

Message ID 1346837177-17547-1-git-send-email-chander.kashyap@linaro.org
State Changes Requested
Headers show

Commit Message

Chander Kashyap Sept. 5, 2012, 9:26 a.m. UTC
Now DT support is becomming 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 lable i.e. fdt. If fdt_addr is specified
then load fdt blob from the remote server to fdt_address.

Signed-off-by: Chander Kashyap <chander.kashyap@linaro.org>
---
	Changes in v2: Removed the duplicate code.
 
 common/cmd_pxe.c |   23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)

Comments

Jason Hobbs Sept. 5, 2012, 2:03 p.m. UTC | #1
Chander,

You should add a description of the new label to doc/README.pxe.

Otherwise, it looks good.

Jason

On Wed, Sep 05, 2012 at 05:26:17AM -0400, Chander Kashyap wrote:
> Now DT support is becomming 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 lable i.e. fdt. If fdt_addr is specified
> then load fdt blob from the remote server to fdt_address.
> 
> Signed-off-by: Chander Kashyap <chander.kashyap@linaro.org>
> ---
> 	Changes in v2: Removed the duplicate code.
>  
>  common/cmd_pxe.c |   23 +++++++++++++++++++++++
>  1 file changed, 23 insertions(+)
> 
> diff --git a/common/cmd_pxe.c b/common/cmd_pxe.c
> index 6b31dea..0c81e08 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);
>  }
>  
>  /*
> @@ -633,6 +640,15 @@ static void label_boot(struct pxe_label *label)
>  	 */
>  	bootm_argv[3] = getenv("fdt_addr");
>  
> +	/* if fdt label is defined then get fdt from server */
> +	if (bootm_argv[3] && label->fdt) {
> +		if (get_relfile_envaddr(label->fdt, "fdt_addr") < 0) {
> +			printf("Skipping %s for failure retrieving fdt\n",
> +					label->name);
> +			return;
> +		}
> +	}
> +
>  	if (bootm_argv[3])
>  		bootm_argc = 4;
>  
> @@ -658,6 +674,7 @@ enum token_type {
>  	T_DEFAULT,
>  	T_PROMPT,
>  	T_INCLUDE,
> +	T_FDT,
>  	T_INVALID
>  };
>  
> @@ -685,6 +702,7 @@ static const struct token keywords[] = {
>  	{"append", T_APPEND},
>  	{"initrd", T_INITRD},
>  	{"include", T_INCLUDE},
> +	{"fdt", T_FDT},
>  	{NULL, T_INVALID}
>  };
>  
> @@ -1074,6 +1092,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;
> -- 
> 1.7.9.5
>
Chander Kashyap Sept. 5, 2012, 2:13 p.m. UTC | #2
Hi Jason,

On 5 September 2012 19:33, Jason Hobbs <jason.hobbs@calxeda.com> wrote:
> Chander,
>
> You should add a description of the new label to doc/README.pxe.
>
> Otherwise, it looks good.
>
> Jason
I will do the same.
diff mbox

Patch

diff --git a/common/cmd_pxe.c b/common/cmd_pxe.c
index 6b31dea..0c81e08 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);
 }
 
 /*
@@ -633,6 +640,15 @@  static void label_boot(struct pxe_label *label)
 	 */
 	bootm_argv[3] = getenv("fdt_addr");
 
+	/* if fdt label is defined then get fdt from server */
+	if (bootm_argv[3] && label->fdt) {
+		if (get_relfile_envaddr(label->fdt, "fdt_addr") < 0) {
+			printf("Skipping %s for failure retrieving fdt\n",
+					label->name);
+			return;
+		}
+	}
+
 	if (bootm_argv[3])
 		bootm_argc = 4;
 
@@ -658,6 +674,7 @@  enum token_type {
 	T_DEFAULT,
 	T_PROMPT,
 	T_INCLUDE,
+	T_FDT,
 	T_INVALID
 };
 
@@ -685,6 +702,7 @@  static const struct token keywords[] = {
 	{"append", T_APPEND},
 	{"initrd", T_INITRD},
 	{"include", T_INCLUDE},
+	{"fdt", T_FDT},
 	{NULL, T_INVALID}
 };
 
@@ -1074,6 +1092,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;