From patchwork Thu Feb 12 06:49:07 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Greg Bellows X-Patchwork-Id: 44590 Return-Path: X-Original-To: linaro@patches.linaro.org Delivered-To: linaro@patches.linaro.org Received: from mail-lb0-f198.google.com (mail-lb0-f198.google.com [209.85.217.198]) by ip-10-151-82-157.ec2.internal (Postfix) with ESMTPS id F31482151D for ; Thu, 12 Feb 2015 06:50:26 +0000 (UTC) Received: by mail-lb0-f198.google.com with SMTP id p9sf4675049lbv.1 for ; Wed, 11 Feb 2015 22:50:25 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:delivered-to:from:to:date :message-id:in-reply-to:references:cc:subject:precedence:list-id :list-unsubscribe:list-archive:list-post:list-help:list-subscribe :errors-to:sender:x-original-sender :x-original-authentication-results:mailing-list; bh=ZyQOaLMoxILJXWGLPUu+zoAgr+Itw08KwW6rOaUp14M=; b=ZtTErDAKuCFUP5IO3CDEb0cKJ9tD1pBWShWeXV9K/w1yydxhSjLBz8IF1aF7x+qeep mDgEndPVMYHtHOjam/5Z83hds0BgRICHpx8qoSfr1t+R6KAggPWOAKZC/n3obgFtWuU3 TXKklMbiwtR6cOWmO49tB/0sto8BWSNc3Uz5eFbMciAQhFmX94C/aYMy6NheJ0RP67eP 6U0N0bi0M03b7Z6wemK3CTqENph5DXBFsDRF+zXqnyPrdD7mZ81wUAUqDBYdTt0rLJ52 KkrDVwiqaP6ErVbUKGL2lw5vf6danYQn3T+tSUoD808CUyd/PLw/SmUbHohqEXgoNfOs 5HyA== X-Gm-Message-State: ALoCoQmSNVkxeoyPBAOXQEynfc8M7rM9+CXY4iBb8WPAdZY/50bgEiFShSJYhtIHa0eWt4MC1azq X-Received: by 10.180.12.146 with SMTP id y18mr214189wib.6.1423723825782; Wed, 11 Feb 2015 22:50:25 -0800 (PST) MIME-Version: 1.0 X-BeenThere: patchwork-forward@linaro.org Received: by 10.152.23.165 with SMTP id n5ls143046laf.66.gmail; Wed, 11 Feb 2015 22:50:25 -0800 (PST) X-Received: by 10.112.255.104 with SMTP id ap8mr1779865lbd.105.1423723825372; Wed, 11 Feb 2015 22:50:25 -0800 (PST) Received: from mail-lb0-f173.google.com (mail-lb0-f173.google.com. [209.85.217.173]) by mx.google.com with ESMTPS id wz2si2273743lbb.65.2015.02.11.22.50.25 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 11 Feb 2015 22:50:25 -0800 (PST) Received-SPF: pass (google.com: domain of patch+caf_=patchwork-forward=linaro.org@linaro.org designates 209.85.217.173 as permitted sender) client-ip=209.85.217.173; Received: by mail-lb0-f173.google.com with SMTP id n10so7774345lbv.4 for ; Wed, 11 Feb 2015 22:50:25 -0800 (PST) X-Received: by 10.112.85.68 with SMTP id f4mr1929853lbz.106.1423723825066; Wed, 11 Feb 2015 22:50:25 -0800 (PST) X-Forwarded-To: patchwork-forward@linaro.org X-Forwarded-For: patch@linaro.org patchwork-forward@linaro.org Delivered-To: patch@linaro.org Received: by 10.112.35.133 with SMTP id h5csp259572lbj; Wed, 11 Feb 2015 22:50:24 -0800 (PST) X-Received: by 10.229.230.2 with SMTP id jk2mr6983568qcb.1.1423723823726; Wed, 11 Feb 2015 22:50:23 -0800 (PST) Received: from lists.gnu.org (lists.gnu.org. [2001:4830:134:3::11]) by mx.google.com with ESMTPS id v20si4009049qge.78.2015.02.11.22.50.23 for (version=TLSv1 cipher=RC4-SHA bits=128/128); Wed, 11 Feb 2015 22:50:23 -0800 (PST) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) client-ip=2001:4830:134:3::11; Received: from localhost ([::1]:48722 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YLnbS-0006nq-VK for patch@linaro.org; Thu, 12 Feb 2015 01:50:22 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:41050) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YLnab-0005g5-9I for qemu-devel@nongnu.org; Thu, 12 Feb 2015 01:49:30 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YLnaW-0000OT-8u for qemu-devel@nongnu.org; Thu, 12 Feb 2015 01:49:29 -0500 Received: from mail-ie0-f176.google.com ([209.85.223.176]:42533) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YLnaW-0000OP-4I for qemu-devel@nongnu.org; Thu, 12 Feb 2015 01:49:24 -0500 Received: by iery20 with SMTP id y20so9773059ier.9 for ; Wed, 11 Feb 2015 22:49:23 -0800 (PST) X-Received: by 10.50.171.201 with SMTP id aw9mr2166086igc.2.1423723763667; Wed, 11 Feb 2015 22:49:23 -0800 (PST) Received: from localhost.localdomain ([113.28.134.59]) by mx.google.com with ESMTPSA id b6sm713096igb.15.2015.02.11.22.49.21 (version=TLSv1.1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Wed, 11 Feb 2015 22:49:23 -0800 (PST) From: Greg Bellows To: qemu-devel@nongnu.org, peter.maydell@linaro.org, christoffer.dall@linaro.org, alex.bennee@linaro.org Date: Thu, 12 Feb 2015 14:49:07 +0800 Message-Id: <1423723750-2544-2-git-send-email-greg.bellows@linaro.org> X-Mailer: git-send-email 1.8.3.2 In-Reply-To: <1423723750-2544-1-git-send-email-greg.bellows@linaro.org> References: <1423723750-2544-1-git-send-email-greg.bellows@linaro.org> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 209.85.223.176 Cc: edgar.iglesias@gmail.com, Greg Bellows , a.spyridakis@virtualopensystems.com Subject: [Qemu-devel] [PATCH v7 1/4] target-arm: Add CPU property to disable AArch64 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: , List-Help: , List-Subscribe: , Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: qemu-devel-bounces+patch=linaro.org@nongnu.org X-Removed-Original-Auth: Dkim didn't pass. X-Original-Sender: greg.bellows@linaro.org X-Original-Authentication-Results: mx.google.com; spf=pass (google.com: domain of patch+caf_=patchwork-forward=linaro.org@linaro.org designates 209.85.217.173 as permitted sender) smtp.mail=patch+caf_=patchwork-forward=linaro.org@linaro.org Mailing-list: list patchwork-forward@linaro.org; contact patchwork-forward+owners@linaro.org X-Google-Group-Id: 836684582541 Adds registration and get/set functions for enabling/disabling the AArch64 execution state on AArch64 CPUs. By default AArch64 execution state is enabled on AArch64 CPUs, setting the property to off, will disable the execution state. The below QEMU invocation would have AArch64 execution state disabled. $ ./qemu-system-aarch64 -machine virt -cpu cortex-a57,aarch64=off Also adds stripping of features from CPU model string in acquiring the ARM CPU by name. Signed-off-by: Greg Bellows Reviewed-by: Peter Maydell --- v4 -> v5 - Fix error message. v3 -> v4 - Switch from using strtok to g_strsplit - Add disablement of aarch64 option if KVM is not enabled. v1 -> v2 - Scrap the custom CPU feature parsing in favor of using the default CPU parsing. - Add registration of CPU AArch64 property to disable/enable the AArch64 feature. --- target-arm/cpu.c | 5 ++++- target-arm/cpu64.c | 39 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+), 1 deletion(-) diff --git a/target-arm/cpu.c b/target-arm/cpu.c index d38af74..986f04c 100644 --- a/target-arm/cpu.c +++ b/target-arm/cpu.c @@ -544,13 +544,16 @@ static ObjectClass *arm_cpu_class_by_name(const char *cpu_model) { ObjectClass *oc; char *typename; + char **cpuname; if (!cpu_model) { return NULL; } - typename = g_strdup_printf("%s-" TYPE_ARM_CPU, cpu_model); + cpuname = g_strsplit(cpu_model, ",", 1); + typename = g_strdup_printf("%s-" TYPE_ARM_CPU, cpuname[0]); oc = object_class_by_name(typename); + g_strfreev(cpuname); g_free(typename); if (!oc || !object_class_dynamic_cast(oc, TYPE_ARM_CPU) || object_class_is_abstract(oc)) { diff --git a/target-arm/cpu64.c b/target-arm/cpu64.c index bb778b3..823c739 100644 --- a/target-arm/cpu64.c +++ b/target-arm/cpu64.c @@ -32,6 +32,11 @@ static inline void set_feature(CPUARMState *env, int feature) env->features |= 1ULL << feature; } +static inline void unset_feature(CPUARMState *env, int feature) +{ + env->features &= ~(1ULL << feature); +} + #ifndef CONFIG_USER_ONLY static uint64_t a57_l2ctlr_read(CPUARMState *env, const ARMCPRegInfo *ri) { @@ -170,8 +175,42 @@ static const ARMCPUInfo aarch64_cpus[] = { { .name = NULL } }; +static bool aarch64_cpu_get_aarch64(Object *obj, Error **errp) +{ + ARMCPU *cpu = ARM_CPU(obj); + + return arm_feature(&cpu->env, ARM_FEATURE_AARCH64); +} + +static void aarch64_cpu_set_aarch64(Object *obj, bool value, Error **errp) +{ + ARMCPU *cpu = ARM_CPU(obj); + + /* At this time, this property is only allowed if KVM is enabled. This + * restriction allows us to avoid fixing up functionality that assumes a + * uniform execution state like do_interrupt. + */ + if (!kvm_enabled()) { + error_setg(errp, "'aarch64' feature cannot be disabled " + "unless KVM is enabled"); + return; + } + + if (value == false) { + unset_feature(&cpu->env, ARM_FEATURE_AARCH64); + } else { + set_feature(&cpu->env, ARM_FEATURE_AARCH64); + } +} + static void aarch64_cpu_initfn(Object *obj) { + object_property_add_bool(obj, "aarch64", aarch64_cpu_get_aarch64, + aarch64_cpu_set_aarch64, NULL); + object_property_set_description(obj, "aarch64", + "Set on/off to enable/disable aarch64 " + "execution state ", + NULL); } static void aarch64_cpu_finalizefn(Object *obj)