From patchwork Wed Aug 28 14:47:43 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Julien Grall X-Patchwork-Id: 19592 Return-Path: X-Original-To: linaro@patches.linaro.org Delivered-To: linaro@patches.linaro.org Received: from mail-vb0-f70.google.com (mail-vb0-f70.google.com [209.85.212.70]) by ip-10-151-82-157.ec2.internal (Postfix) with ESMTPS id BD82125E58 for ; Wed, 28 Aug 2013 14:48:59 +0000 (UTC) Received: by mail-vb0-f70.google.com with SMTP id h10sf6773658vbh.1 for ; Wed, 28 Aug 2013 07:48:59 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=mime-version:x-gm-message-state:delivered-to:from:to:cc:subject :date:message-id:in-reply-to:references:x-original-sender :x-original-authentication-results:precedence:mailing-list:list-id :list-post:list-help:list-archive:list-unsubscribe; bh=MtMTal+5cMCDG4BDc5qiQz8DlDxW/+GmKlv9VHDHErg=; b=pE3FbORBEPSyLdS07Hw9jXgKK0MrYVWve+AdDkutvBkdkAqzf1SniV1C9YkpRnuSze hh1akudkmNTSMJcOmp0uy7dZeLUawzVHO9qxgxVRPc5wBoyYsdIB6pGLe+4lkmDoYOn5 /lkmWvCmRkUOdB7fQJf1n2H9i2mOCgKrWxY1szQLqfrEiZcNYjFCC4NDsyWr2MZEse8v ipbpYL+BGoMBr9wYGmUs1G8ga8EHpb3hz5ka4/IxR5cpZUeQ1P0Nf6KzOSSumYGfEbko y0uPjaq0IDUzBYwY09BCnA+M9OWxAdeWOnJI4hy+3i0AkymxAIzVsM0PVDS+F933HpZg kuBA== X-Received: by 10.236.13.36 with SMTP id a24mr7384393yha.50.1377701339597; Wed, 28 Aug 2013 07:48:59 -0700 (PDT) MIME-Version: 1.0 X-BeenThere: patchwork-forward@linaro.org Received: by 10.49.131.68 with SMTP id ok4ls382747qeb.41.gmail; Wed, 28 Aug 2013 07:48:59 -0700 (PDT) X-Received: by 10.58.201.227 with SMTP id kd3mr26629469vec.14.1377701339497; Wed, 28 Aug 2013 07:48:59 -0700 (PDT) Received: from mail-vb0-f51.google.com (mail-vb0-f51.google.com [209.85.212.51]) by mx.google.com with ESMTPS id sk7si6591347vdc.155.1969.12.31.16.00.00 (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Wed, 28 Aug 2013 07:48:59 -0700 (PDT) Received-SPF: neutral (google.com: 209.85.212.51 is neither permitted nor denied by best guess record for domain of patch+caf_=patchwork-forward=linaro.org@linaro.org) client-ip=209.85.212.51; Received: by mail-vb0-f51.google.com with SMTP id x16so4042156vbf.38 for ; Wed, 28 Aug 2013 07:48:59 -0700 (PDT) X-Gm-Message-State: ALoCoQkeDJtssbi3CCVu4fDq/8uNc/QIYDmJcGWWWUlwoCZBOPFiik1owkjpWi/bc44BA4dO7ckF X-Received: by 10.52.35.171 with SMTP id i11mr21852290vdj.4.1377701339404; Wed, 28 Aug 2013 07:48:59 -0700 (PDT) X-Forwarded-To: patchwork-forward@linaro.org X-Forwarded-For: patch@linaro.org patchwork-forward@linaro.org Delivered-To: patches@linaro.org Received: by 10.220.174.196 with SMTP id u4csp359993vcz; Wed, 28 Aug 2013 07:48:58 -0700 (PDT) X-Received: by 10.194.134.97 with SMTP id pj1mr3037804wjb.58.1377701332502; Wed, 28 Aug 2013 07:48:52 -0700 (PDT) Received: from mail-wi0-f171.google.com (mail-wi0-f171.google.com [209.85.212.171]) by mx.google.com with ESMTPS id dr9si1837524wib.12.1969.12.31.16.00.00 (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Wed, 28 Aug 2013 07:48:52 -0700 (PDT) Received-SPF: neutral (google.com: 209.85.212.171 is neither permitted nor denied by best guess record for domain of julien.grall@linaro.org) client-ip=209.85.212.171; Received: by mail-wi0-f171.google.com with SMTP id ez12so2101426wid.16 for ; Wed, 28 Aug 2013 07:48:52 -0700 (PDT) X-Received: by 10.194.80.39 with SMTP id o7mr8866904wjx.39.1377701331773; Wed, 28 Aug 2013 07:48:51 -0700 (PDT) Received: from belegaer.uk.xensource.com. ([185.25.64.249]) by mx.google.com with ESMTPSA id a8sm5590498wie.6.1969.12.31.16.00.00 (version=TLSv1.2 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Wed, 28 Aug 2013 07:48:50 -0700 (PDT) From: Julien Grall To: xen-devel@lists.xen.org Cc: stefano.stabellini@eu.citrix.com, ian.campbell@citrix.com, patches@linaro.org, andre.przywara@linaro.org, Julien Grall Subject: [PATCH V1 29/29] ARM: parse separate DT properties for different commandlines Date: Wed, 28 Aug 2013 15:47:43 +0100 Message-Id: <1377701263-3319-30-git-send-email-julien.grall@linaro.org> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1377701263-3319-1-git-send-email-julien.grall@linaro.org> References: <1377701263-3319-1-git-send-email-julien.grall@linaro.org> X-Removed-Original-Auth: Dkim didn't pass. X-Original-Sender: julien.grall@linaro.org X-Original-Authentication-Results: mx.google.com; spf=neutral (google.com: 209.85.212.51 is neither permitted nor denied by best guess record for domain of patch+caf_=patchwork-forward=linaro.org@linaro.org) smtp.mail=patch+caf_=patchwork-forward=linaro.org@linaro.org Precedence: list Mailing-list: list patchwork-forward@linaro.org; contact patchwork-forward+owners@linaro.org List-ID: X-Google-Group-Id: 836684582541 List-Post: , List-Help: , List-Archive: List-Unsubscribe: , From: Andre Przywara Currently we use the chosen/bootargs property as the Xen commandline and rely on xen,dom0-bootargs for Dom0. However this brings issues with bootloaders, which usually build bootargs by bootscripts for a Linux kernel - and not for the entirely different Xen hypervisor. Introduce a new possible device tree property "xen,xen-bootargs" explicitly for the Xen hypervisor and make the selection of which to use more fine grained: - If xen,xen-bootargs is present, it will be used for Xen. - If xen,dom0-bootargs is present, it will be used for Dom0. - If xen,xen-bootargs is _not_ present, but xen,dom0-bootargs is, bootargs will be used for Xen. Like the current situation. - If no Xen specific properties are present, bootargs is for Dom0. - If xen,xen-bootargs is present, but xen,dom0-bootargs is missing, bootargs will be used for Dom0. The aim is to allow common bootscripts to boot both Xen and native Linux with the same device tree blob. If needed, one could hard-code the Xen commandline into the DTB, leaving bootargs for Dom0 to be set by the (non Xen-aware) bootloader. I will send out a appropriate u-boot patch, which writes the content of the "xen_bootargs" environment variable into the xen,xen-bootargs dtb property. Signed-off-by: Andre Przywara Signed-off-by: Julien Grall Acked-by: Ian Campbell --- Changes in v2: - Add and rebase this patch to this patch series Changes before the patch was added to this patch series: v1 .. v2: - fix whitespace issues v2 .. v3: - add documentation --- docs/misc/arm/device-tree/booting.txt | 28 +++++++++++++++++++++++++++- xen/arch/arm/domain_build.c | 15 +++++++++++---- xen/common/device_tree.c | 7 ++++++- 3 files changed, 44 insertions(+), 6 deletions(-) diff --git a/docs/misc/arm/device-tree/booting.txt b/docs/misc/arm/device-tree/booting.txt index 94cd3f1..08ed775 100644 --- a/docs/misc/arm/device-tree/booting.txt +++ b/docs/misc/arm/device-tree/booting.txt @@ -1,3 +1,6 @@ +Dom0 kernel and ramdisk modules +================================ + Xen is passed the dom0 kernel and initrd via a reference in the /chosen node of the device tree. @@ -22,4 +25,27 @@ properties: - bootargs (optional) - Command line associated with this module + Command line associated with this module. This is deprecated and should + be replaced by the bootargs variations described below. + + +Command lines +============= + +Xen also checks for properties directly under /chosen to find suitable command +lines for Xen and Dom0. The logic is the following: + + - If xen,xen-bootargs is present, it will be used for Xen. + - If xen,dom0-bootargs is present, it will be used for Dom0. + - If xen,xen-bootargs is _not_ present, but xen,dom0-bootargs is, + bootargs will be used for Xen. + - If no Xen specific properties are present, bootargs is for Dom0. + - If xen,xen-bootargs is present, but xen,dom0-bootargs is missing, + bootargs will be used for Dom0. + +Most of these cases is to make booting with Xen-unaware bootloaders easier. +For those you would hardcode the Xen commandline in the DTB under +/chosen/xen,xen-bootargs and would let the bootloader set the Dom0 command +line by writing bootargs (as for native Linux). +A Xen-aware bootloader would set xen,xen-bootargs for Xen, xen,dom0-bootargs +for Dom0 and bootargs for native Linux. diff --git a/xen/arch/arm/domain_build.c b/xen/arch/arm/domain_build.c index 1ac261e..e45e0e7 100644 --- a/xen/arch/arm/domain_build.c +++ b/xen/arch/arm/domain_build.c @@ -146,6 +146,7 @@ static int write_properties(struct domain *d, struct kernel_info *kinfo, const char *bootargs = NULL; const struct dt_property *pp; int res = 0; + int had_dom0_bootargs = 0; if ( early_info.modules.nr_mods >= MOD_KERNEL && early_info.modules.module[MOD_KERNEL].cmdline[0] ) @@ -162,15 +163,21 @@ static int write_properties(struct domain *d, struct kernel_info *kinfo, * * * remember xen,dom0-bootargs if we don't already have * bootargs (from module #1, above). - * * remove bootargs and xen,dom0-bootargs. + * * remove bootargs, xen,dom0-bootargs and xen,xen-bootargs. */ if ( dt_node_path_is_equal(np, "/chosen") ) { - if ( dt_property_name_is_equal(pp, "bootargs") ) + if ( dt_property_name_is_equal(pp, "xen,xen-bootargs") ) + continue; + if ( dt_property_name_is_equal(pp, "xen,dom0-bootargs") ) + { + had_dom0_bootargs = 1; + bootargs = pp->value; continue; - else if ( dt_property_name_is_equal(pp, "xen,dom0-bootargs") ) + } + if ( dt_property_name_is_equal(pp, "bootargs") ) { - if ( !bootargs ) + if ( !bootargs && !had_dom0_bootargs ) bootargs = pp->value; continue; } diff --git a/xen/common/device_tree.c b/xen/common/device_tree.c index 4bc1ce4..5620b23 100644 --- a/xen/common/device_tree.c +++ b/xen/common/device_tree.c @@ -261,7 +261,12 @@ const char *device_tree_bootargs(const void *fdt) if ( node < 0 ) return NULL; - prop = fdt_get_property(fdt, node, "bootargs", NULL); + prop = fdt_get_property(fdt, node, "xen,xen-bootargs", NULL); + if ( prop == NULL ) + { + if (fdt_get_property(fdt, node, "xen,dom0-bootargs", NULL)) + prop = fdt_get_property(fdt, node, "bootargs", NULL); + } if ( prop == NULL ) return NULL;