From patchwork Tue Jul 5 03:12:35 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shannon Zhao X-Patchwork-Id: 71377 Delivered-To: patch@linaro.org Received: by 10.140.28.4 with SMTP id 4csp91358qgy; Mon, 4 Jul 2016 20:17:23 -0700 (PDT) X-Received: by 10.107.16.142 with SMTP id 14mr10680593ioq.142.1467688639846; Mon, 04 Jul 2016 20:17:19 -0700 (PDT) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org. [192.237.175.120]) by mx.google.com with ESMTPS id w198si3002527itb.71.2016.07.04.20.17.19 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 04 Jul 2016 20:17:19 -0700 (PDT) Received-SPF: neutral (google.com: 192.237.175.120 is neither permitted nor denied by best guess record for domain of xen-devel-bounces@lists.xen.org) client-ip=192.237.175.120; Authentication-Results: mx.google.com; spf=neutral (google.com: 192.237.175.120 is neither permitted nor denied by best guess record for domain of xen-devel-bounces@lists.xen.org) smtp.mailfrom=xen-devel-bounces@lists.xen.org Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1bKGp6-0000Ai-F2; Tue, 05 Jul 2016 03:14:56 +0000 Received: from mail6.bemta3.messagelabs.com ([195.245.230.39]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1bKGp4-000088-Ls for xen-devel@lists.xen.org; Tue, 05 Jul 2016 03:14:54 +0000 Received: from [85.158.137.68] by server-7.bemta-3.messagelabs.com id 81/4B-28354-D262B775; Tue, 05 Jul 2016 03:14:53 +0000 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFtrGIsWRWlGSWpSXmKPExsVSPpHPSVdXrTr cYF+HkMWSj4tZHBg9ju7+zRTAGMWamZeUX5HAmnHrwmTWglWWFUeXPGBsYLyq28XIxSEkcIZR onfaVSYIZzejxPalu5i7GDk52AR0JT5unMIOYosIyEqs7poDZjMLfGCUODVbAsQWFnCROHphP lCcg4NFQEWi/3YpSJhXwEPi1fRFLCC2hICGxMreCWA2p4CnxNebELYQUE3/gfWsEPWCEidnPm GBGC8hcfDFC2aIXkWJtvUn2SBsSYmDK26wgNwpIXCKUeLv5MtsIHslBEwlPt3ln8AoOAvJqFl IRi1gZFrFqFGcWlSWWqRraKKXVJSZnlGSm5iZo2toYKyXm1pcnJiempOYVKyXnJ+7iREYngxA sINxxXbPQ4ySHExKoryv/lWFC/El5adUZiQWZ8QXleakFh9ilOHgUJLgXatSHS4kWJSanlqRl pkDjBSYtAQHj5II7zOQNG9xQWJucWY6ROoUo6KUOO8CkIQASCKjNA+uDRadlxhlpYR5GYEOEe IpSC3KzSxBlX/FKM7BqCTM+wJkCk9mXgnc9FdAi5mAFrPGloMsLklESEk1MGbURX9b+dNpX9i 162JXnYX0u2Zxf57fKbXDxPyI3PLta35LuGR8+v9ifvjaWZ/nZz+e26/qoTvzg9x7n9BdOfq2 bXNesTOoR654+JLTaurD/jnvdkqoHXt8PuXc14eF+85NXbdrRu9lfh8u/zfmgdO/7RWsjq3Wa 3u2biP7zGlKDfFBvzL+uBYpsRRnJBpqMRcVJwIAJu/UYMkCAAA= X-Env-Sender: zhaoshenglong@huawei.com X-Msg-Ref: server-13.tower-31.messagelabs.com!1467688488!48219402!1 X-Originating-IP: [119.145.14.66] X-SpamReason: No, hits=0.0 required=7.0 tests=sa_preprocessor: VHJ1c3RlZCBJUDogMTE5LjE0NS4xNC42NiA9PiA4NTI3\n X-StarScan-Received: X-StarScan-Version: 8.46; banners=-,-,- X-VirusChecked: Checked Received: (qmail 63085 invoked from network); 5 Jul 2016 03:14:52 -0000 Received: from unknown (HELO szxga03-in.huawei.com) (119.145.14.66) by server-13.tower-31.messagelabs.com with RC4-SHA encrypted SMTP; 5 Jul 2016 03:14:52 -0000 Received: from 172.24.1.136 (EHLO SZXEML429-HUB.china.huawei.com) ([172.24.1.136]) by szxrg03-dlp.huawei.com (MOS 4.4.3-GA FastPath queued) with ESMTP id CEI04834; Tue, 05 Jul 2016 11:14:05 +0800 (CST) Received: from HGHY1Z002260041.china.huawei.com (10.177.16.142) by SZXEML429-HUB.china.huawei.com (10.82.67.184) with Microsoft SMTP Server id 14.3.235.1; Tue, 5 Jul 2016 11:13:57 +0800 From: Shannon Zhao To: Date: Tue, 5 Jul 2016 11:12:35 +0800 Message-ID: <1467688367-17320-6-git-send-email-zhaoshenglong@huawei.com> X-Mailer: git-send-email 1.9.0.msysgit.0 In-Reply-To: <1467688367-17320-1-git-send-email-zhaoshenglong@huawei.com> References: <1467688367-17320-1-git-send-email-zhaoshenglong@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.177.16.142] X-CFilter-Loop: Reflected X-Mirapoint-Virus-RAPID-Raw: score=unknown(0), refid=str=0001.0A090205.577B25FD.016D, ss=1, re=0.000, recu=0.000, reip=0.000, cl=1, cld=1, fgs=0, ip=0.0.0.0, so=2013-05-26 15:14:31, dmn=2013-03-21 17:37:32 X-Mirapoint-Loop-Id: 96a82a4972e93319feef64ed875102e1 Cc: hangaohuai@huawei.com, sstabellini@kernel.org, wei.liu2@citrix.com, ian.jackson@eu.citrix.com, peter.huangpeng@huawei.com, julien.grall@arm.com, shannon.zhao@linaro.org, boris.ostrovsky@oracle.com Subject: [Xen-devel] [PATCH v3 05/17] libxl/arm: Generate static ACPI DSDT table X-BeenThere: xen-devel@lists.xen.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" From: Shannon Zhao It uses static DSDT table like the way x86 uses. Currently the DSDT table only contains processor device objects and it generates the maximal objects which so far is 128. Signed-off-by: Shannon Zhao --- tools/libacpi/Makefile | 15 ++++++++++++- tools/libacpi/mk_dsdt.c | 51 ++++++++++++++++++++++++++++++++----------- tools/libxl/Makefile | 5 ++++- tools/libxl/libxl_arm_acpi.c | 5 +++++ xen/include/public/arch-arm.h | 3 +++ 5 files changed, 64 insertions(+), 15 deletions(-) diff --git a/tools/libacpi/Makefile b/tools/libacpi/Makefile index 4068d9a..0401810 100644 --- a/tools/libacpi/Makefile +++ b/tools/libacpi/Makefile @@ -22,6 +22,7 @@ MK_DSDT = $(ACPI_BUILD_DIR)/mk_dsdt # Sources to be generated C_SRC = $(ACPI_BUILD_DIR)/dsdt_anycpu.c $(ACPI_BUILD_DIR)/dsdt_15cpu.c C_SRC += $(ACPI_BUILD_DIR)/dsdt_anycpu_qemu_xen.c $(ACPI_BUILD_DIR)/dsdt_pvh.c +C_SRC += $(ACPI_BUILD_DIR)/dsdt_anycpu_arm.c H_SRC = $(ACPI_BUILD_DIR)/ssdt_s3.h $(ACPI_BUILD_DIR)/ssdt_s4.h $(ACPI_BUILD_DIR)/ssdt_pm.h $(ACPI_BUILD_DIR)/ssdt_tpm.h vpath iasl $(PATH) @@ -35,7 +36,7 @@ $(H_SRC): $(ACPI_BUILD_DIR)/%.h: %.asl iasl cd $(CURDIR) $(MK_DSDT): mk_dsdt.c - $(HOSTCC) $(HOSTCFLAGS) $(CFLAGS_xeninclude) -o $@ mk_dsdt.c + $(HOSTCC) $(HOSTCFLAGS) $(CFLAGS_xeninclude) -D__XEN_TOOLS__ -o $@ mk_dsdt.c $(ACPI_BUILD_DIR)/dsdt_anycpu_qemu_xen.asl: dsdt.asl dsdt_acpi_info.asl $(MK_DSDT) awk 'NR > 1 {print s} {s=$$0}' $< > $@ @@ -69,6 +70,18 @@ $(ACPI_BUILD_DIR)/dsdt_pvh.c: iasl $(ACPI_BUILD_DIR)/dsdt_pvh.asl rm -f $*.aml $*.hex cd $(CURDIR) +$(ACPI_BUILD_DIR)/dsdt_anycpu_arm.asl: $(MK_DSDT) + printf "DefinitionBlock (\"DSDT.aml\", \"DSDT\", 3, \"XenARM\", \"Xen DSDT\", 1)\n{" > $@ + $(MK_DSDT) --debug=$(debug) --arch arm >> $@ + +$(ACPI_BUILD_DIR)/dsdt_anycpu_arm.c: iasl $(ACPI_BUILD_DIR)/dsdt_anycpu_arm.asl + cd $(ACPI_BUILD_DIR) + iasl -vs -p $* -tc $(ACPI_BUILD_DIR)/$*.asl + sed -e 's/AmlCode/$*/g' $*.hex >$@ + echo "int $*_len=sizeof($*);" >>$@ + rm -f $*.aml $*.hex + cd $(CURDIR) + iasl: @echo @echo "ACPI ASL compiler (iasl) is needed" diff --git a/tools/libacpi/mk_dsdt.c b/tools/libacpi/mk_dsdt.c index 1322510..1d3ed0f 100644 --- a/tools/libacpi/mk_dsdt.c +++ b/tools/libacpi/mk_dsdt.c @@ -6,6 +6,7 @@ #include #include #include +#include static unsigned int indent_level; static bool debug = false; @@ -87,6 +88,7 @@ static struct option options[] = { { "dm-version", 1, 0, 'q' }, { "debug", 1, 0, 'd' }, { "no-dm", 0, 0, 'n' }, + { "arch", 1, 0, 'a' }, { 0, 0, 0, 0 } }; @@ -94,7 +96,7 @@ int main(int argc, char **argv) { unsigned int slot, dev, intx, link, cpu, max_cpus = HVM_MAX_VCPUS; dm_version dm_version = QEMU_XEN_TRADITIONAL; - bool no_dm = 0; + bool no_dm = 0, arch_is_arm = false; for ( ; ; ) { @@ -133,6 +135,10 @@ int main(int argc, char **argv) case 'n': no_dm = 1; break; + case 'a': + if (strcmp(optarg, "arm") == 0) + arch_is_arm = true; + break; case 'd': if (*optarg == 'y') debug = true; @@ -142,6 +148,9 @@ int main(int argc, char **argv) } } + if (arch_is_arm) + max_cpus = GUEST_MAX_VCPUS; + /**** DSDT DefinitionBlock start ****/ /* (we append to existing DSDT definition block) */ indent_level++; @@ -149,19 +158,21 @@ int main(int argc, char **argv) /**** Processor start ****/ push_block("Scope", "\\_SB"); - /* MADT checksum */ - stmt("OperationRegion", "MSUM, SystemMemory, \\_SB.MSUA, 1"); - push_block("Field", "MSUM, ByteAcc, NoLock, Preserve"); - indent(); printf("MSU, 8\n"); - pop_block(); + if (!arch_is_arm) { + /* MADT checksum */ + stmt("OperationRegion", "MSUM, SystemMemory, \\_SB.MSUA, 1"); + push_block("Field", "MSUM, ByteAcc, NoLock, Preserve"); + indent(); printf("MSU, 8\n"); + pop_block(); - /* Processor object helpers. */ - push_block("Method", "PMAT, 2"); - push_block("If", "LLess(Arg0, NCPU)"); - stmt("Return", "ToBuffer(Arg1)"); - pop_block(); - stmt("Return", "Buffer() {0, 8, 0xff, 0xff, 0, 0, 0, 0}"); - pop_block(); + /* Processor object helpers. */ + push_block("Method", "PMAT, 2"); + push_block("If", "LLess(Arg0, NCPU)"); + stmt("Return", "ToBuffer(Arg1)"); + pop_block(); + stmt("Return", "Buffer() {0, 8, 0xff, 0xff, 0, 0, 0, 0}"); + pop_block(); + } /* Define processor objects and control methods. */ for ( cpu = 0; cpu < max_cpus; cpu++) @@ -170,6 +181,12 @@ int main(int argc, char **argv) stmt("Name", "_HID, \"ACPI0007\""); + if (arch_is_arm) { + stmt("Name", "_UID, %d", cpu); + pop_block(); + continue; + } + /* Name this processor's MADT LAPIC descriptor. */ stmt("OperationRegion", "MATR, SystemMemory, Add(\\_SB.MAPA, %d), 8", cpu*8); @@ -208,6 +225,14 @@ int main(int argc, char **argv) pop_block(); } + if (arch_is_arm) { + pop_block(); + /**** Processor end ****/ + pop_block(); + /**** DSDT DefinitionBlock end ****/ + return 0; + } + /* Operation Region 'PRST': bitmask of online CPUs. */ stmt("OperationRegion", "PRST, SystemIO, 0xaf00, 32"); push_block("Field", "PRST, ByteAcc, NoLock, Preserve"); diff --git a/tools/libxl/Makefile b/tools/libxl/Makefile index 88ab4d2..a398c8e 100644 --- a/tools/libxl/Makefile +++ b/tools/libxl/Makefile @@ -91,7 +91,10 @@ acpi: LIBXL_OBJS-$(CONFIG_X86) += libxl_cpuid.o libxl_x86.o libxl_psr.o libxl_x86_acpi.o LIBXL_OBJS-$(CONFIG_ARM) += libxl_nocpuid.o libxl_arm.o libxl_libfdt_compat.o -LIBXL_OBJS-$(CONFIG_ARM) += libxl_arm_acpi.o +LIBXL_OBJS-$(CONFIG_ARM) += libxl_arm_acpi.o dsdt_anycpu_arm.o + +dsdt_anycpu_arm.c: + $(MAKE) -C $(ACPI_PATH) ACPI_BUILD_DIR=$(shell pwd) libxl_arm_acpi.o: libxl_arm_acpi.c $(CC) -c $(CFLAGS) -I../../xen/include/ -o $@ libxl_arm_acpi.c diff --git a/tools/libxl/libxl_arm_acpi.c b/tools/libxl/libxl_arm_acpi.c index 8c273f9..d1c066d 100644 --- a/tools/libxl/libxl_arm_acpi.c +++ b/tools/libxl/libxl_arm_acpi.c @@ -28,6 +28,11 @@ typedef uint64_t u64; #include #include +_hidden +extern const unsigned char dsdt_anycpu_arm[]; +_hidden +extern const int dsdt_anycpu_arm_len; + int libxl__prepare_acpi(libxl__gc *gc, libxl_domain_build_info *info, libxl__domain_build_state *state, struct xc_dom_image *dom) diff --git a/xen/include/public/arch-arm.h b/xen/include/public/arch-arm.h index 870bc3b..4a49254 100644 --- a/xen/include/public/arch-arm.h +++ b/xen/include/public/arch-arm.h @@ -431,6 +431,9 @@ typedef uint64_t xen_callback_t; #define GUEST_RAM_BANK_BASES { GUEST_RAM0_BASE, GUEST_RAM1_BASE } #define GUEST_RAM_BANK_SIZES { GUEST_RAM0_SIZE, GUEST_RAM1_SIZE } +/* Current supported guest VCPUs */ +#define GUEST_MAX_VCPUS 128 + /* Interrupts */ #define GUEST_TIMER_VIRT_PPI 27 #define GUEST_TIMER_PHYS_S_PPI 29