From nobody Thu Dec 18 17:53:31 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 15478239827311004.734644494907; Fri, 18 Jan 2019 07:06:22 -0800 (PST) Received: from localhost ([127.0.0.1]:41114 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gkViu-0000Gk-J8 for importer@patchew.org; Fri, 18 Jan 2019 10:06:20 -0500 Received: from eggs.gnu.org ([209.51.188.92]:42825) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gkVbC-0002YQ-Oo for qemu-devel@nongnu.org; Fri, 18 Jan 2019 09:58:23 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gkVb2-00076e-DZ for qemu-devel@nongnu.org; Fri, 18 Jan 2019 09:58:19 -0500 Received: from mail-wr1-x434.google.com ([2a00:1450:4864:20::434]:38008) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1gkVb2-00076F-71 for qemu-devel@nongnu.org; Fri, 18 Jan 2019 09:58:12 -0500 Received: by mail-wr1-x434.google.com with SMTP id v13so15436166wrw.5 for ; Fri, 18 Jan 2019 06:58:12 -0800 (PST) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id e27sm92094561wra.67.2019.01.18.06.58.09 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 18 Jan 2019 06:58:10 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=KReoh+u5g8Oa8ZifxcK1bluqHDtLDuUJyX4xs86Px+8=; b=IrHYOMie17nAC3ezW3fWHtM79k5lq2zXFBwVzMSmpSpnOZpPhIPKKJfkPUeWNbUzvc pGUcvo2MMVM9IVg+uop/yU8cjfV9qHwZoDEDOs8cSblzbs3FNOa9VgssWzDdKvIUTrCi RWmYsTd8tNSyWoVNy4m5FFuNGdlTlkhLDtEzY= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=KReoh+u5g8Oa8ZifxcK1bluqHDtLDuUJyX4xs86Px+8=; b=g3TjG+1Sb1Ku91gbC0IfABZ+TUmNBEsbmc0SqE6dTiyqIr5d3T098BJJAy3YqNuQhb JRu7BNUXhqaS850xKdIGTmg/6kh/QoX0kwgy689mAJlg+sByN7DAfyVCOZBIA/10m5qU +0GCN7AKPcVIiQlEJx13WD0zXupilwshvp2pcgJM13h1Yr4vtk92SuLEd+RjVyHN48IU tYmSdrXgMHEIJm8kZRo/0ZJQHsCzLk3WfSkS29BvLvbYuRxpdei/18u7kpBm7k41fUnd hnkaN1osj3dWQcKiOToLkRCVJrihR6qnbn5UYBVGSbKnN8lvkD0UhZyK/JqpdwDCDCtV g7Pg== X-Gm-Message-State: AJcUukcJJrVa/L/6Rpkq+5Vjwu7Tm/+Jtb73ixfHGfOwnvKZ2Nv06bwd BAyr2beWYPQq/nT3rApThhUJ+YAFp9jp6A== X-Google-Smtp-Source: ALg8bN59pMK0uWNmbZl3vHWe9B2dRRAwWh0AGqpXxMoABNsDzyBlD5FV7V+WR8AEGB0fPA+mfQZE5g== X-Received: by 2002:a5d:47d1:: with SMTP id l17mr16598337wrs.319.1547823490979; Fri, 18 Jan 2019 06:58:10 -0800 (PST) From: Peter Maydell To: qemu-devel@nongnu.org Date: Fri, 18 Jan 2019 14:57:19 +0000 Message-Id: <20190118145805.6852-4-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190118145805.6852-1-peter.maydell@linaro.org> References: <20190118145805.6852-1-peter.maydell@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::434 Subject: [Qemu-devel] [PULL 03/49] target/arm: Allow Aarch32 exception return to switch from Mon->Hyp X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" From: Alexander Graf In U-boot, we switch from S-SVC -> Mon -> Hyp mode when we want to enter Hyp mode. The change into Hyp mode is done by doing an exception return from Mon. This doesn't work with current QEMU. The problem is that in bad_mode_switch() we refuse to allow the change of mode. Note that bad_mode_switch() is used to do validation for two situations: (1) changes to mode by instructions writing to CPSR.M (ie not exception take/return) -- this corresponds to the Armv8 Arm ARM pseudocode Arch32.WriteModeByInstr (2) changes to mode by exception return Attempting to enter or leave Hyp mode via case (1) is forbidden in v8 and UNPREDICTABLE in v7, and QEMU is correct to disallow it there. However, we're already doing that check at the top of the bad_mode_switch() function, so if that passes then we should allow the case (2) exception return mode changes to switch into Hyp mode. We want to test whether we're trying to return to the nonexistent "secure Hyp" mode, so we need to look at arm_is_secure_below_el3() rather than arm_is_secure(), since the latter is always true if we're in Mon (EL3). Signed-off-by: Alexander Graf Reviewed-by: Peter Maydell Message-id: 20190109152430.32359-1-agraf@suse.de [PMM: rewrote commit message] Signed-off-by: Peter Maydell --- target/arm/helper.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/target/arm/helper.c b/target/arm/helper.c index f00c141ef96..9bf8fbd8f9b 100644 --- a/target/arm/helper.c +++ b/target/arm/helper.c @@ -6297,7 +6297,7 @@ static int bad_mode_switch(CPUARMState *env, int mode= , CPSRWriteType write_type) return 0; case ARM_CPU_MODE_HYP: return !arm_feature(env, ARM_FEATURE_EL2) - || arm_current_el(env) < 2 || arm_is_secure(env); + || arm_current_el(env) < 2 || arm_is_secure_below_el3(env); case ARM_CPU_MODE_MON: return arm_current_el(env) < 3; default: --=20 2.20.1