From patchwork Thu Sep 24 09:21:22 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bin Meng X-Patchwork-Id: 522206 X-Patchwork-Delegate: trini@ti.com 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 94F5C1401AD for ; Thu, 24 Sep 2015 19:19:58 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b=SjP1pMyZ; dkim-atps=neutral Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id AE8794B8CE; Thu, 24 Sep 2015 11:19:54 +0200 (CEST) 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 8OSFSGq-BB_P; Thu, 24 Sep 2015 11:19:54 +0200 (CEST) Received: from theia.denx.de (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id CFADF4B94C; Thu, 24 Sep 2015 11:19:44 +0200 (CEST) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 9A5064B882 for ; Thu, 24 Sep 2015 11:19:05 +0200 (CEST) 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 F4olu2_Hzkoi for ; Thu, 24 Sep 2015 11:19:05 +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-pa0-f51.google.com (mail-pa0-f51.google.com [209.85.220.51]) by theia.denx.de (Postfix) with ESMTPS id 338774B86F for ; Thu, 24 Sep 2015 11:19:01 +0200 (CEST) Received: by pacfv12 with SMTP id fv12so69057210pac.2 for ; Thu, 24 Sep 2015 02:18:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=b+2KznymaVidJWWj4fWfSUp8bjbnVKRCgHfFr5Ce/rk=; b=SjP1pMyZZ9gPnyKcPU6oJIDlKID9PZ5CVBKg8Cyw88DgTf0eRpJ5PiAietXkixXs0u 2a/7si35dIOydoq7AWCGWe0lTnqGHeu22euEKW6WEL9kM1vbfAZrmpbyc5DYIn6/ac20 uYlsLnP9zv1RGjK+bzzJg9IJBU1yLevPQcViH+oHUTEnYWv4phgbbQVYccrhsCdInlRK zSKOHDX12F3C2Pcgd0INT6746g/GXItm+lLDfyvp/GMXgYfplSCJMpUhYNtFlN25bgLZ WgYnnsUme4PluAdYJVEHr5jVpcxBWuyTHEjwZXDQJm1WZb6hJKRjeoqp6Tswb/t429r6 RGJg== X-Received: by 10.68.192.70 with SMTP id he6mr43316848pbc.157.1443086339629; Thu, 24 Sep 2015 02:18:59 -0700 (PDT) Received: from ala-d2121-lx1.wrs.com (unknown-157-139.windriver.com. [147.11.157.139]) by smtp.gmail.com with ESMTPSA id o3sm12512034pap.37.2015.09.24.02.18.58 (version=TLS1_1 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Thu, 24 Sep 2015 02:18:59 -0700 (PDT) From: Bin Meng To: Simon Glass , U-Boot Mailing List , Tom Rini Date: Thu, 24 Sep 2015 02:21:22 -0700 Message-Id: <1443086484-26942-7-git-send-email-bmeng.cn@gmail.com> X-Mailer: git-send-email 1.7.9.5 In-Reply-To: <1443086484-26942-1-git-send-email-bmeng.cn@gmail.com> References: <1443086484-26942-1-git-send-email-bmeng.cn@gmail.com> Cc: Miao Yan Subject: [U-Boot] [PATCH 6/8] cmd: bootvx: Always get VxWorks bootline from env X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.15 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" So far VxWorks bootline can be contructed from various environment variables, but when these variables do not exist we get these from corresponding config macros. This is not helpful as it requires rebuilding U-Boot, and to make sure these config macros take effect we should not have these environment variables. This is a little bit complex and confusing. Now we change the logic to always contruct the bootline from environments (the only single source), by adding two new variables "bootdev" and "othbootargs", and adding some comments about network related settings mentioning they are optional. The doc about the bootline handling is also updated. Signed-off-by: Bin Meng Reviewed-by: Tom Rini --- README | 12 +----- common/cmd_elf.c | 118 +++++++++++++++++++++++++++++++----------------------- include/vxworks.h | 22 ---------- 3 files changed, 70 insertions(+), 82 deletions(-) diff --git a/README b/README index a13705a..7ed85d2 100644 --- a/README +++ b/README @@ -794,18 +794,10 @@ The following options need to be configured: - vxWorks boot parameters: bootvx constructs a valid bootline using the following - environments variables: bootfile, ipaddr, serverip, hostname. + environments variables: bootdev, bootfile, ipaddr, netmask, + serverip, gatewayip, hostname, othbootargs. It loads the vxWorks image pointed bootfile. - CONFIG_SYS_VXWORKS_BOOT_DEVICE - The vxworks device name - CONFIG_SYS_VXWORKS_MAC_PTR - Ethernet 6 byte MA -address - CONFIG_SYS_VXWORKS_SERVERNAME - Name of the server - CONFIG_SYS_VXWORKS_BOOT_ADDR - Address of boot parameters - - CONFIG_SYS_VXWORKS_ADD_PARAMS - - Add it at the end of the bootline. E.g "u=username pw=secret" - Note: If a "bootargs" environment is defined, it will overwride the defaults discussed just above. diff --git a/common/cmd_elf.c b/common/cmd_elf.c index 5a34bde..f46b9ba 100644 --- a/common/cmd_elf.c +++ b/common/cmd_elf.c @@ -256,67 +256,87 @@ int do_bootvx(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) /* * Use bootaddr to find the location in memory that VxWorks - * will look for the bootline string. The default value for - * PowerPC is LOCAL_MEM_LOCAL_ADRS + BOOT_LINE_OFFSET which - * defaults to 0x4200. + * will look for the bootline string. The default value is + * (LOCAL_MEM_LOCAL_ADRS + BOOT_LINE_OFFSET) as defined by + * VxWorks BSP. For example, on PowerPC it defaults to 0x4200. */ tmp = getenv("bootaddr"); - if (!tmp) - bootaddr = CONFIG_SYS_VXWORKS_BOOT_ADDR; - else + if (!tmp) { + printf("## VxWorks bootline address not specified\n"); + } else { bootaddr = simple_strtoul(tmp, NULL, 16); - /* - * Check to see if the bootline is defined in the 'bootargs' - * parameter. If it is not defined, we may be able to - * construct the info. - */ - bootline = getenv("bootargs"); - if (bootline) { - memcpy((void *)bootaddr, bootline, - max(strlen(bootline), (size_t)255)); - flush_cache(bootaddr, max(strlen(bootline), (size_t)255)); - } else { - sprintf(build_buf, CONFIG_SYS_VXWORKS_BOOT_DEVICE); - tmp = getenv("bootfile"); - if (tmp) - sprintf(&build_buf[strlen(build_buf)], - "%s:%s ", CONFIG_SYS_VXWORKS_SERVERNAME, tmp); - else - sprintf(&build_buf[strlen(build_buf)], - "%s:file ", CONFIG_SYS_VXWORKS_SERVERNAME); + /* + * Check to see if the bootline is defined in the 'bootargs' + * parameter. If it is not defined, we may be able to + * construct the info. + */ + bootline = getenv("bootargs"); + if (bootline) { + memcpy((void *)bootaddr, bootline, + max(strlen(bootline), (size_t)255)); + flush_cache(bootaddr, max(strlen(bootline), + (size_t)255)); + } else { + tmp = getenv("bootdev"); + if (tmp) + sprintf(build_buf, tmp); + else + printf("## VxWorks boot device not specified\n"); - tmp = getenv("ipaddr"); - if (tmp) { - sprintf(&build_buf[strlen(build_buf)], "e=%s", tmp); - tmp = getenv("netmask"); + tmp = getenv("bootfile"); if (tmp) sprintf(&build_buf[strlen(build_buf)], - ":%04x ", getenv_ip("netmask").s_addr); + "host:%s ", tmp); else - sprintf(&build_buf[strlen(build_buf)], " "); - } + sprintf(&build_buf[strlen(build_buf)], + "host:vxWorks "); + + /* + * The following parameters are only needed if 'bootdev' + * is an ethernet device, otherwise they are optional. + */ + tmp = getenv("ipaddr"); + if (tmp) { + sprintf(&build_buf[strlen(build_buf)], "e=%s", + tmp); + tmp = getenv("netmask"); + if (tmp) + sprintf(&build_buf[strlen(build_buf)], + ":%04x ", + getenv_ip("netmask").s_addr); + else + sprintf(&build_buf[strlen(build_buf)], + " "); + } + + tmp = getenv("serverip"); + if (tmp) + sprintf(&build_buf[strlen(build_buf)], "h=%s ", + tmp); - tmp = getenv("serverip"); - if (tmp) - sprintf(&build_buf[strlen(build_buf)], "h=%s ", tmp); + tmp = getenv("gatewayip"); + if (tmp) + sprintf(&build_buf[strlen(build_buf)], "g=%s ", + tmp); - tmp = getenv("gatewayip"); - if (tmp) - sprintf(&build_buf[strlen(build_buf)], "g=%s ", tmp); + tmp = getenv("hostname"); + if (tmp) + sprintf(&build_buf[strlen(build_buf)], "tn=%s ", + tmp); - tmp = getenv("hostname"); - if (tmp) - sprintf(&build_buf[strlen(build_buf)], "tn=%s ", tmp); + tmp = getenv("othbootargs"); + if (tmp) + sprintf(&build_buf[strlen(build_buf)], tmp); -#ifdef CONFIG_SYS_VXWORKS_ADD_PARAMS - sprintf(&build_buf[strlen(build_buf)], - CONFIG_SYS_VXWORKS_ADD_PARAMS); -#endif + memcpy((void *)bootaddr, build_buf, + max(strlen(build_buf), (size_t)255)); + flush_cache(bootaddr, max(strlen(build_buf), + (size_t)255)); + } - memcpy((void *)bootaddr, build_buf, - max(strlen(build_buf), (size_t)255)); - flush_cache(bootaddr, max(strlen(build_buf), (size_t)255)); + printf("## Using bootline (@ 0x%lx): %s\n", bootaddr, + (char *)bootaddr); } /* @@ -329,8 +349,6 @@ int do_bootvx(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) else puts("## Not an ELF image, assuming binary\n"); - printf("## Using bootline (@ 0x%lx): %s\n", bootaddr, - (char *)bootaddr); printf("## Starting vxWorks at 0x%08lx ...\n", addr); dcache_disable(); diff --git a/include/vxworks.h b/include/vxworks.h index 122043c..297a70f 100644 --- a/include/vxworks.h +++ b/include/vxworks.h @@ -13,26 +13,4 @@ void boot_prep_vxworks(bootm_headers_t *images); void boot_jump_vxworks(bootm_headers_t *images); void do_bootvx_fdt(bootm_headers_t *images); -/* - * Use bootaddr to find the location in memory that VxWorks - * will look for the bootline string. The default value for - * PowerPC is LOCAL_MEM_LOCAL_ADRS + BOOT_LINE_OFFSET which - * defaults to 0x4200 - */ -#ifndef CONFIG_SYS_VXWORKS_BOOT_ADDR -#define CONFIG_SYS_VXWORKS_BOOT_ADDR 0x4200 -#endif - -#ifndef CONFIG_SYS_VXWORKS_BOOT_DEVICE -#if defined(CONFIG_4xx) -#define CONFIG_SYS_VXWORKS_BOOT_DEVICE "emac(0,0)" -#else -#define CONFIG_SYS_VXWORKS_BOOT_DEVICE "eth(0,0)" -#endif -#endif - -#ifndef CONFIG_SYS_VXWORKS_SERVERNAME -#define CONFIG_SYS_VXWORKS_SERVERNAME "srv" -#endif - #endif