From patchwork Thu Oct 30 21:28:34 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Greg Bellows X-Patchwork-Id: 39968 Return-Path: X-Original-To: linaro@patches.linaro.org Delivered-To: linaro@patches.linaro.org Received: from mail-wi0-f197.google.com (mail-wi0-f197.google.com [209.85.212.197]) by ip-10-151-82-157.ec2.internal (Postfix) with ESMTPS id 2F9EB2405B for ; Fri, 31 Oct 2014 19:07:38 +0000 (UTC) Received: by mail-wi0-f197.google.com with SMTP id ex7sf986892wid.8 for ; Fri, 31 Oct 2014 12:07:37 -0700 (PDT) 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=W9Gk5UTdhL5oYmRYE2mukw6Big5TBCVY85hz1bZkACA=; b=DomoUDQBlwtNttlGZ0ArRSI5em0JZLGMPQeVdf+LdfGbtuMZ2S+UZKSm+Y630hBHVa TWXZsPG/+9zIbk6RQX0IMmBjEJICBwsjFXP8T6E+QKPcaAJ9+yco5NMQCMKznO7bAzbk 2FXE+OXt1/kWOTHVFJj+LznRehgGZUjjpsCCWSVmHxQSSs+PNw8rOlySPnpLFBSeFkR8 PXz07MLJ9Na7LpQJbO2t3kii/vFaXoNj7QihuCBAqcSFX/PVJE4MC+aHUBE54aKLQsxq Jcc1wLtTKKvzIl9X5eMoqxzXKDlhq7jlsQl5WsQL/6ZUrLvN1o+snEUPgAg7nK+da3fy cbuA== X-Gm-Message-State: ALoCoQlmoPihR4pZIuylGdDMq4ZVfb7BJN5AM8lqkw9lNx8ihnnRJysaBumbEwCxQkW8SpHcPXVx X-Received: by 10.180.74.196 with SMTP id w4mr422194wiv.7.1414782457327; Fri, 31 Oct 2014 12:07:37 -0700 (PDT) MIME-Version: 1.0 X-BeenThere: patchwork-forward@linaro.org Received: by 10.153.4.5 with SMTP id ca5ls400094lad.68.gmail; Fri, 31 Oct 2014 12:07:37 -0700 (PDT) X-Received: by 10.152.6.228 with SMTP id e4mr28593284laa.71.1414782457043; Fri, 31 Oct 2014 12:07:37 -0700 (PDT) Received: from mail-lb0-f171.google.com (mail-lb0-f171.google.com. [209.85.217.171]) by mx.google.com with ESMTPS id jr4si18329141lab.19.2014.10.31.12.07.37 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Fri, 31 Oct 2014 12:07:37 -0700 (PDT) Received-SPF: pass (google.com: domain of patch+caf_=patchwork-forward=linaro.org@linaro.org designates 209.85.217.171 as permitted sender) client-ip=209.85.217.171; Received: by mail-lb0-f171.google.com with SMTP id u10so4648068lbd.2 for ; Fri, 31 Oct 2014 12:07:37 -0700 (PDT) X-Received: by 10.152.6.228 with SMTP id e4mr28593273laa.71.1414782456960; Fri, 31 Oct 2014 12:07:36 -0700 (PDT) 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.84.229 with SMTP id c5csp247702lbz; Fri, 31 Oct 2014 12:07:36 -0700 (PDT) X-Received: by 10.224.172.131 with SMTP id l3mr34340096qaz.32.1414782455632; Fri, 31 Oct 2014 12:07:35 -0700 (PDT) Received: from lists.gnu.org (lists.gnu.org. [2001:4830:134:3::11]) by mx.google.com with ESMTPS id 7si2281116qap.65.2014.10.31.12.07.35 for (version=TLSv1 cipher=RC4-SHA bits=128/128); Fri, 31 Oct 2014 12:07:35 -0700 (PDT) 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]:41483 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XkHXq-0007b0-DD for patch@linaro.org; Fri, 31 Oct 2014 15:07:34 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:46790) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XkE69-0000tr-GM for qemu-devel@nongnu.org; Fri, 31 Oct 2014 11:27:55 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1XjxHN-0004bV-Fg for qemu-devel@nongnu.org; Thu, 30 Oct 2014 17:29:20 -0400 Received: from mail-pa0-f41.google.com ([209.85.220.41]:43143) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XjxHN-0004an-9P for qemu-devel@nongnu.org; Thu, 30 Oct 2014 17:29:13 -0400 Received: by mail-pa0-f41.google.com with SMTP id rd3so6288014pab.28 for ; Thu, 30 Oct 2014 14:29:12 -0700 (PDT) X-Received: by 10.66.219.38 with SMTP id pl6mr20094927pac.43.1414704552510; Thu, 30 Oct 2014 14:29:12 -0700 (PDT) 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 o5sm8017713pdr.50.2014.10.30.14.29.11 for (version=TLSv1.1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Thu, 30 Oct 2014 14:29:11 -0700 (PDT) From: Greg Bellows To: qemu-devel@nongnu.org, peter.maydell@linaro.org, serge.fdrv@gmail.com, edgar.iglesias@gmail.com, aggelerf@ethz.ch Date: Thu, 30 Oct 2014 16:28:34 -0500 Message-Id: <1414704538-17103-4-git-send-email-greg.bellows@linaro.org> X-Mailer: git-send-email 1.8.3.2 In-Reply-To: <1414704538-17103-1-git-send-email-greg.bellows@linaro.org> References: <1414704538-17103-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.41 Cc: greg.bellows@linaro.org Subject: [Qemu-devel] [PATCH v8 03/27] target-arm: add banked register accessors 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.171 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 From: Fabian Aggeler If EL3 is in AArch32 state certain cp registers are banked (secure and non-secure instance). When reading or writing to coprocessor registers the following macros can be used. - A32_BANKED macros are used for choosing the banked register based on provided input security argument. This macro is used to choose the bank during translation of MRC/MCR instructions that are dependent on something other than the current secure state. - A32_BANKED_CURRENT macros are used for choosing the banked register based on current secure state. This is NOT to be used for choosing the bank used during translation as it breaks monitor mode. If EL3 is operating in AArch64 state coprocessor registers are not banked anymore. The macros use the non-secure instance (_ns) in this case, which is architecturally mapped to the AArch64 EL register. Signed-off-by: Sergey Fedorov Signed-off-by: Fabian Aggeler Signed-off-by: Greg Bellows Reviewed-by: Peter Maydell --- v7 -> v8 - Move use_secure_reg() function to the TBFLAG patch. v5 -> v6 - Converted macro USE_SECURE_REG() into inlince function use_secure_reg() - Globally replace Aarch# with AArch# v4 -> v5 - Cleaned-up macros to try and alleviate misuse. Made A32_BANKED macros take secure arg indicator rather than relying on USE_SECURE_REG. Incorporated the A32_BANKED macros into the A32_BANKED_CURRENT. CURRENT is now the only one that automatically chooses based on current secure state. --- target-arm/cpu.h | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/target-arm/cpu.h b/target-arm/cpu.h index be5d022..5117d4d 100644 --- a/target-arm/cpu.h +++ b/target-arm/cpu.h @@ -817,6 +817,33 @@ static inline bool arm_el_is_aa64(CPUARMState *env, int el) return arm_feature(env, ARM_FEATURE_AARCH64); } +/* Macros for accessing a specified CP register bank */ +#define A32_BANKED_REG_GET(_env, _regname, _secure) \ + ((_secure) ? (_env)->cp15._regname##_s : (_env)->cp15._regname##_ns) + +#define A32_BANKED_REG_SET(_env, _regname, _secure, _val) \ + do { \ + if (_secure) { \ + (_env)->cp15._regname##_s = (_val); \ + } else { \ + (_env)->cp15._regname##_ns = (_val); \ + } \ + } while (0) + +/* Macros for automatically accessing a specific CP register bank depending on + * the current secure state of the system. These macros are not intended for + * supporting instruction translation reads/writes as these are dependent + * solely on the SCR.NS bit and not the mode. + */ +#define A32_BANKED_CURRENT_REG_GET(_env, _regname) \ + A32_BANKED_REG_GET((_env), _regname, \ + ((!arm_el_is_aa64((_env), 3) && arm_is_secure(_env)))) + +#define A32_BANKED_CURRENT_REG_SET(_env, _regname, _val) \ + A32_BANKED_REG_SET((_env), _regname, \ + ((!arm_el_is_aa64((_env), 3) && arm_is_secure(_env))), \ + (_val)) + void arm_cpu_list(FILE *f, fprintf_function cpu_fprintf); unsigned int arm_excp_target_el(CPUState *cs, unsigned int excp_idx);