From patchwork Thu Sep 6 05:40:04 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chander Kashyap X-Patchwork-Id: 182015 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from theia.denx.de (theia.denx.de [85.214.87.163]) by ozlabs.org (Postfix) with ESMTP id B6E192C007E for ; Thu, 6 Sep 2012 15:40:30 +1000 (EST) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id D9A33281DB; Thu, 6 Sep 2012 07:40:27 +0200 (CEST) X-Virus-Scanned: Debian amavisd-new at theia.denx.de Received: from theia.denx.de ([127.0.0.1]) by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id ViOg8fRL2pDm; Thu, 6 Sep 2012 07:40:27 +0200 (CEST) Received: from theia.denx.de (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 54ADA281DD; Thu, 6 Sep 2012 07:40:24 +0200 (CEST) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 4406C281DD for ; Thu, 6 Sep 2012 07:40:22 +0200 (CEST) X-Virus-Scanned: Debian amavisd-new at theia.denx.de Received: from theia.denx.de ([127.0.0.1]) by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 3oKJ2Vm5tDo2 for ; Thu, 6 Sep 2012 07:40:21 +0200 (CEST) X-policyd-weight: NOT_IN_SBL_XBL_SPAMHAUS=-1.5 NOT_IN_SPAMCOP=-1.5 NOT_IN_BL_NJABL=-1.5 (only DNSBL check requested) Received: from mail-pz0-f44.google.com (mail-pz0-f44.google.com [209.85.210.44]) by theia.denx.de (Postfix) with ESMTPS id 46707281DB for ; Thu, 6 Sep 2012 07:40:19 +0200 (CEST) Received: by dadf8 with SMTP id f8so832010dad.3 for ; Wed, 05 Sep 2012 22:40:18 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=from:to:cc:subject:date:message-id:x-mailer:x-gm-message-state; bh=jwwY7ZV3/wxp5MIiu4LcKDIf5QjSwvfGLJr2rK/RAgo=; b=B006hvuelz8uogJ2LOyqfvRN/C2rtO4dEN1SVVy6VRTgiDc7bv20U2BYzFnmirTfdi HB4Pdj34RjpFAWmgvMuta8xZpbickMc8QGMFaz4QCkG2wFHIpNKmVf+wcFsLg8WUbPZI WLx8IaHkTNrFJKyOSjNuRpTfX4wywp2gPmtDQE69Q1fd2TVE7qRXPgjOYEKlEu9a++QU NiRH951FbU8yYhmt1CNxV2j8wim2mnir2PAQw23d9D1sJFRI+QFv6gfjydONPH/9b2Rc tRYG+v9O3nPxzLW4gMyCHpUL5F2MUcSYaICVDrCiW+iYYfx34roaEzX89UxDCo6AbQxN w7NA== Received: by 10.68.225.233 with SMTP id rn9mr3112354pbc.135.1346910018286; Wed, 05 Sep 2012 22:40:18 -0700 (PDT) Received: from localhost.localdomain ([115.113.119.130]) by mx.google.com with ESMTPS id rr10sm766022pbc.71.2012.09.05.22.40.15 (version=SSLv3 cipher=OTHER); Wed, 05 Sep 2012 22:40:17 -0700 (PDT) From: Chander Kashyap To: u-boot@lists.denx.de Date: Thu, 6 Sep 2012 11:10:04 +0530 Message-Id: <1346910005-19356-1-git-send-email-chander.kashyap@linaro.org> X-Mailer: git-send-email 1.7.9.5 X-Gm-Message-State: ALoCoQlnOvFdoJhO+D/R7gQdIl+TefmvQJOm4w7RwFd6o8yTkv/G6MeGgWaQ+P94ouxqTzW1X7H3 Cc: patches@linaro.org Subject: [U-Boot] [PATCH v3] PXE: FDT: Add support for fdt in PXE X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.11 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: u-boot-bounces@lists.denx.de Errors-To: u-boot-bounces@lists.denx.de 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 --- Changes in v2: - Removed the duplicate code. changes in v3: - Added documentation for "fdt" lable in doc/README.pxe common/cmd_pxe.c | 23 +++++++++++++++++++++++ doc/README.pxe | 10 ++++++++-- 2 files changed, 31 insertions(+), 2 deletions(-) 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; diff --git a/doc/README.pxe b/doc/README.pxe index 2bbf53d..835ca5a 100644 --- a/doc/README.pxe +++ b/doc/README.pxe @@ -93,8 +93,9 @@ 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 - locations in RAM at which 'pxe boot' will store the fdt blob + it retrieves from tftp, if "fdt" lable is defined in pxe file. If this is + set, it will be passed to bootm when booting a kernel. pxe file format =============== @@ -156,6 +157,11 @@ initrd - 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 - if this label is chosen, use tftp to retrieve the fdt blob + at . it will be stored at the address indicated in + the fdt_addr environment variable, and that address will + be passed to bootm. + localboot - Run the command defined by "localcmd" in the environment. is ignored and is only here to match the syntax of PXELINUX config files.