From patchwork Thu Dec 15 12:27:15 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andre Przywara X-Patchwork-Id: 88140 Delivered-To: patch@linaro.org Received: by 10.140.20.101 with SMTP id 92csp763806qgi; Thu, 15 Dec 2016 04:28:25 -0800 (PST) X-Received: by 10.99.230.83 with SMTP id p19mr1739648pgj.138.1481804904985; Thu, 15 Dec 2016 04:28:24 -0800 (PST) Return-Path: Received: from bombadil.infradead.org (bombadil.infradead.org. [198.137.202.9]) by mx.google.com with ESMTPS id q17si2218926pfk.223.2016.12.15.04.28.24 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 15 Dec 2016 04:28:24 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-arm-kernel-bounces+patch=linaro.org@lists.infradead.org designates 198.137.202.9 as permitted sender) client-ip=198.137.202.9; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-arm-kernel-bounces+patch=linaro.org@lists.infradead.org designates 198.137.202.9 as permitted sender) smtp.mailfrom=linux-arm-kernel-bounces+patch=linaro.org@lists.infradead.org Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.85_2 #1 (Red Hat Linux)) id 1cHV7z-0002Da-U9; Thu, 15 Dec 2016 12:27:15 +0000 Received: from foss.arm.com ([217.140.101.70]) by bombadil.infradead.org with esmtp (Exim 4.85_2 #1 (Red Hat Linux)) id 1cHV7h-0001tz-Eq for linux-arm-kernel@lists.infradead.org; Thu, 15 Dec 2016 12:26:59 +0000 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.72.51.249]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id F3BE015AB; Thu, 15 Dec 2016 04:26:35 -0800 (PST) Received: from e104803-lin.lan (unknown [10.1.207.46]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 6B1383F3D6; Thu, 15 Dec 2016 04:26:34 -0800 (PST) From: Andre Przywara To: Mark Rutland Subject: [PATCH v3 2/5] Support for building in a Xen binary Date: Thu, 15 Dec 2016 12:27:15 +0000 Message-Id: <20161215122718.21422-3-andre.przywara@arm.com> X-Mailer: git-send-email 2.9.0 In-Reply-To: <20161215122718.21422-1-andre.przywara@arm.com> References: <20161215122718.21422-1-andre.przywara@arm.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20161215_042657_607086_E45C4C12 X-CRM114-Status: GOOD ( 12.49 ) X-Spam-Score: -8.3 (--------) X-Spam-Report: SpamAssassin version 3.4.0 on bombadil.infradead.org summary: Content analysis details: (-8.3 points) pts rule name description ---- ---------------------- -------------------------------------------------- -5.0 RCVD_IN_DNSWL_HI RBL: Sender listed at http://www.dnswl.org/, high trust [217.140.101.70 listed in list.dnswl.org] -0.0 SPF_PASS SPF: sender matches SPF record -1.4 RP_MATCHES_RCVD Envelope sender domain matches handover relay domain -1.9 BAYES_00 BODY: Bayes spam probability is 0 to 1% [score: 0.0000] X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Stefano Stabellini , Konrad Rzeszutek Wilk , Catalin Marinas , Julien Grall , linux-arm-kernel@lists.infradead.org, Ian Campbell , xen-devel@lists.xenproject.org, Christoffer Dall MIME-Version: 1.0 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patch=linaro.org@lists.infradead.org From: Christoffer Dall Add support for building a Xen binary which includes a Dom0 image and the Dom0 command-line. If the user specifies --with-xen=, where Xen is an appropriate AArch64 Xen binary, the build system will generate a xen-system.axf instead of a linux-system.axf. Original patch from Ian Campbell, but I modified most of it so all bugs are probably mine. [Andre: adapt to newest boot-wrapper branch, increase load address, fixup Xen image file test] Cc: Ian Campbell Signed-off-by: Christoffer Dall Signed-off-by: Andre Przywara Tested-by: Konrad Rzeszutek Wilk Reviewed-by: Konrad Rzeszutek Wilk Reviewed-by: Julien Grall --- .gitignore | 1 + Makefile.am | 10 +++++++--- boot_common.c | 4 ++-- configure.ac | 17 +++++++++++++++++ model.lds.S | 14 ++++++++++++++ 5 files changed, 41 insertions(+), 5 deletions(-) -- 2.9.0 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel diff --git a/.gitignore b/.gitignore index 8653852..80770c0 100644 --- a/.gitignore +++ b/.gitignore @@ -14,6 +14,7 @@ configure dtc fdt.dtb Image +Xen install-sh Makefile Makefile.in diff --git a/Makefile.am b/Makefile.am index 692d2cc..f8b9ec9 100644 --- a/Makefile.am +++ b/Makefile.am @@ -85,7 +85,6 @@ TEXT_LIMIT := 0x80080000 endif LD_SCRIPT := model.lds.S -IMAGE := linux-system.axf FS_OFFSET := 0x10000000 FILESYSTEM_START:= $(shell echo $$(($(PHYS_OFFSET) + $(FS_OFFSET)))) @@ -94,6 +93,11 @@ FILESYSTEM_END := $(shell echo $$(($(FILESYSTEM_START) + $(FILESYSTEM_SIZE)))) FDT_OFFSET := 0x08000000 +if XEN +XEN := -DXEN=$(XEN_IMAGE) +XEN_OFFSET := 0x08200000 +endif + if INITRD INITRD_FLAGS := -DUSE_INITRD CHOSEN_NODE := chosen { \ @@ -121,7 +125,7 @@ all: $(IMAGE) CLEANFILES = $(IMAGE) $(OFILES) model.lds fdt.dtb -$(IMAGE): $(OFILES) model.lds fdt.dtb $(KERNEL_IMAGE) $(FILESYSTEM) +$(IMAGE): $(OFILES) model.lds fdt.dtb $(KERNEL_IMAGE) $(FILESYSTEM) $(XEN_IMAGE) $(LD) $(LDFLAGS) $(OFILES) -o $@ --script=model.lds %.o: %.S Makefile @@ -131,7 +135,7 @@ $(IMAGE): $(OFILES) model.lds fdt.dtb $(KERNEL_IMAGE) $(FILESYSTEM) $(CC) $(CPPFLAGS) $(CFLAGS) $(DEFINES) -c -o $@ $< model.lds: $(LD_SCRIPT) Makefile - $(CPP) $(CPPFLAGS) -ansi -DPHYS_OFFSET=$(PHYS_OFFSET) -DMBOX_OFFSET=$(MBOX_OFFSET) -DKERNEL_OFFSET=$(KERNEL_OFFSET) -DFDT_OFFSET=$(FDT_OFFSET) -DFS_OFFSET=$(FS_OFFSET) -DKERNEL=$(KERNEL_IMAGE) -DFILESYSTEM=$(FILESYSTEM) -DTEXT_LIMIT=$(TEXT_LIMIT) -P -C -o $@ $< + $(CPP) $(CPPFLAGS) -ansi -DPHYS_OFFSET=$(PHYS_OFFSET) -DMBOX_OFFSET=$(MBOX_OFFSET) -DKERNEL_OFFSET=$(KERNEL_OFFSET) -DFDT_OFFSET=$(FDT_OFFSET) -DFS_OFFSET=$(FS_OFFSET) $(XEN) -DXEN_OFFSET=$(XEN_OFFSET) -DKERNEL=$(KERNEL_IMAGE) -DFILESYSTEM=$(FILESYSTEM) -DTEXT_LIMIT=$(TEXT_LIMIT) -P -C -o $@ $< fdt.dtb: $(KERNEL_DTB) Makefile gen-cpu-nodes.sh ( $(DTC) -O dts -I dtb $(KERNEL_DTB) ; echo "/ { $(CHOSEN_NODE) $(PSCI_NODE) $(CPUS_NODE) };" ) | $(DTC) -O dtb -o $@ - diff --git a/boot_common.c b/boot_common.c index 4947fe3..e7b8e1d 100644 --- a/boot_common.c +++ b/boot_common.c @@ -9,7 +9,7 @@ #include #include -extern unsigned long kernel; +extern unsigned long entrypoint; extern unsigned long dtb; void init_platform(void); @@ -67,7 +67,7 @@ void __noreturn first_spin(unsigned int cpu, unsigned long *mbox, if (cpu == 0) { init_platform(); - *mbox = (unsigned long)&kernel; + *mbox = (unsigned long)&entrypoint; sevl(); spin(mbox, invalid, 1); } else { diff --git a/configure.ac b/configure.ac index e0daec4..1d7cf3d 100644 --- a/configure.ac +++ b/configure.ac @@ -40,6 +40,18 @@ AC_ARG_WITH([dtb], AS_HELP_STRING([--with-dtb], [Specify a particular DTB to use]), [KERN_DTB="$withval"]) +AC_ARG_WITH([xen], + AS_HELP_STRING([--with-xen], [Compile for Xen, and specify a particular Xen to use]), + X_IMAGE=$withval) + +AS_IF([test "x$X_IMAGE" == "x"], [], + [AS_IF([test ! -f "$X_IMAGE"], + [AC_MSG_ERROR([Could not find Xen hypervisor binary: $X_IMAGE])] + )] +) +AC_SUBST([XEN_IMAGE], [$X_IMAGE]) +AM_CONDITIONAL([XEN], [test "x$X_IMAGE" != "x"]) + # Ensure that the user has provided us with a sane kernel dir. if ! test -d $KERN_DIR; then AC_MSG_ERROR([Could not find Linux kernel dir $KERN_DIR.]) @@ -63,6 +75,10 @@ fi AC_SUBST([KERNEL_IMAGE], [$KERN_IMAGE]) AC_SUBST([KERNEL_DTB], [$KERN_DTB]) +AS_IF([test "x$X_IMAGE" != "x"], + [AC_SUBST([IMAGE], ["xen-system.axf"])], + [AC_SUBST([IMAGE], ["linux-system.axf"])] +) # Allow a user to pass --enable-psci AC_ARG_ENABLE([psci], @@ -132,4 +148,5 @@ echo " CPU IDs: ${CPU_IDS}" echo " Use GICv3? ${USE_GICV3}" echo " Boot-wrapper execution state: AArch${BOOTWRAPPER_ES}" echo " Kernel execution state: AArch${KERNEL_ES}" +echo " Xen image ${XEN_IMAGE:-NONE}" echo "" diff --git a/model.lds.S b/model.lds.S index 51c5684..511f552 100644 --- a/model.lds.S +++ b/model.lds.S @@ -16,6 +16,9 @@ OUTPUT_ARCH(aarch64) #endif TARGET(binary) +#ifdef XEN +INPUT(XEN) +#endif INPUT(KERNEL) INPUT(./fdt.dtb) @@ -36,6 +39,17 @@ SECTIONS KERNEL } +#ifdef XEN + .xen (PHYS_OFFSET + XEN_OFFSET): { + xen = .; + XEN + } + + entrypoint = xen; +#else + entrypoint = kernel; +#endif + .dtb (PHYS_OFFSET + FDT_OFFSET): { dtb = .; ./fdt.dtb