From patchwork Wed Jan 21 18:49:50 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Greg Bellows X-Patchwork-Id: 43478 Return-Path: X-Original-To: linaro@patches.linaro.org Delivered-To: linaro@patches.linaro.org Received: from mail-la0-f72.google.com (mail-la0-f72.google.com [209.85.215.72]) by ip-10-151-82-157.ec2.internal (Postfix) with ESMTPS id 7D62F240D5 for ; Wed, 21 Jan 2015 18:51:32 +0000 (UTC) Received: by mail-la0-f72.google.com with SMTP id gq15sf1463608lab.3 for ; Wed, 21 Jan 2015 10:51:31 -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=LODAUk0ZucuZW3f8WST19GsgYAV+V5z8dfi08K4l/LM=; b=PWMZW6s55blUqoXfHj33wLc05oTRqo+U+SeshKLLnMmuPWpSAKB2uA8YSkASE2LfIu cGAHRH7gkyb0iNbHYiwG6tRxVMMQWDLrEulSuklElwi2+y5+8wQVsFLbLHHGn1bQfDh+ H5xLQ4tCWlOL4m4C7uyLdH1pAHzIZYcotzvm8+tMNYuH2lghtOJ54zSP/aR8ws9iZcxH dtHL963EonTbTpqO92MmvGZUjzdFIjM/+xFlKem6N7bpexb39f9C4lNgAbEcI9uOTxEd 12HQ1yvvOnApCLSZNc1zdBkckTtIFfvI6S9ZvJsFGwQlw4l4Gjt4koJeLGbwqEDyXDD3 x71A== X-Gm-Message-State: ALoCoQnEuxTO6fOfnEGTy3cXEFI9Px5tI50+Et9jdouTlHg5LUnBedA/5w8KuiYmYmjpgdJzV32F X-Received: by 10.152.2.40 with SMTP id 8mr499292lar.7.1421866291385; Wed, 21 Jan 2015 10:51:31 -0800 (PST) MIME-Version: 1.0 X-BeenThere: patchwork-forward@linaro.org Received: by 10.152.203.231 with SMTP id kt7ls78688lac.52.gmail; Wed, 21 Jan 2015 10:51:31 -0800 (PST) X-Received: by 10.152.182.235 with SMTP id eh11mr28646945lac.9.1421866291242; Wed, 21 Jan 2015 10:51:31 -0800 (PST) Received: from mail-la0-f51.google.com (mail-la0-f51.google.com. [209.85.215.51]) by mx.google.com with ESMTPS id ap1si20041543lac.117.2015.01.21.10.51.31 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Wed, 21 Jan 2015 10:51:31 -0800 (PST) Received-SPF: pass (google.com: domain of patch+caf_=patchwork-forward=linaro.org@linaro.org designates 209.85.215.51 as permitted sender) client-ip=209.85.215.51; Received: by mail-la0-f51.google.com with SMTP id ge10so20857850lab.10 for ; Wed, 21 Jan 2015 10:51:31 -0800 (PST) X-Received: by 10.112.52.229 with SMTP id w5mr45958946lbo.52.1421866291008; Wed, 21 Jan 2015 10:51:31 -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.9.200 with SMTP id c8csp8298lbb; Wed, 21 Jan 2015 10:51:30 -0800 (PST) X-Received: by 10.236.36.79 with SMTP id v55mr25067691yha.26.1421866288769; Wed, 21 Jan 2015 10:51:28 -0800 (PST) Received: from lists.gnu.org (lists.gnu.org. [2001:4830:134:3::11]) by mx.google.com with ESMTPS id u7si5697441qab.16.2015.01.21.10.51.28 for (version=TLSv1 cipher=RC4-SHA bits=128/128); Wed, 21 Jan 2015 10:51:28 -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]:49750 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YE0ND-0007OB-9R for patch@linaro.org; Wed, 21 Jan 2015 13:51:27 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:50401) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YE0Ly-0006BT-Pr for qemu-devel@nongnu.org; Wed, 21 Jan 2015 13:50:12 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YE0Lu-0001F2-2u for qemu-devel@nongnu.org; Wed, 21 Jan 2015 13:50:10 -0500 Received: from mail-pa0-f54.google.com ([209.85.220.54]:34063) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YE0Lt-0001E5-Tw for qemu-devel@nongnu.org; Wed, 21 Jan 2015 13:50:06 -0500 Received: by mail-pa0-f54.google.com with SMTP id eu11so20235961pac.13 for ; Wed, 21 Jan 2015 10:50:05 -0800 (PST) X-Received: by 10.68.234.134 with SMTP id ue6mr64350417pbc.47.1421866205265; Wed, 21 Jan 2015 10:50:05 -0800 (PST) Received: from gbellows-linaro.qualcomm.com (rrcs-67-52-129-61.west.biz.rr.com. [67.52.129.61]) by mx.google.com with ESMTPSA id zk9sm7047429pac.1.2015.01.21.10.50.03 (version=TLSv1.1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Wed, 21 Jan 2015 10:50:04 -0800 (PST) From: Greg Bellows To: qemu-devel@nongnu.org, peter.maydell@linaro.org, christoffer.dall@linaro.org Date: Wed, 21 Jan 2015 12:49:50 -0600 Message-Id: <1421866193-24941-2-git-send-email-greg.bellows@linaro.org> X-Mailer: git-send-email 1.8.3.2 In-Reply-To: <1421866193-24941-1-git-send-email-greg.bellows@linaro.org> References: <1421866193-24941-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.220.54 Cc: Greg Bellows Subject: [Qemu-devel] [PATCH v2 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.215.51 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 --- 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 | 6 +++++- target-arm/cpu64.c | 29 +++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/target-arm/cpu.c b/target-arm/cpu.c index 285947f..29ed691 100644 --- a/target-arm/cpu.c +++ b/target-arm/cpu.c @@ -514,13 +514,17 @@ 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_strdup(cpu_model); + cpuname = strtok(cpuname, ","); + typename = g_strdup_printf("%s-" TYPE_ARM_CPU, cpuname); oc = object_class_by_name(typename); + g_free(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..5a59280 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,32 @@ 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); + + 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)