From patchwork Tue Mar 5 16:50:30 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Peter Maydell X-Patchwork-Id: 159676 Delivered-To: patch@linaro.org Received: by 2002:a02:5cc1:0:0:0:0:0 with SMTP id w62csp5186262jad; Tue, 5 Mar 2019 08:53:57 -0800 (PST) X-Google-Smtp-Source: APXvYqxXVo1ZeLmo2OfAWQA0urG/0oc0iFc9a3hkbEbTiXmVmdWjNFg8bKicYYnC7ZvgBuKzEvbM X-Received: by 2002:a0d:ebcd:: with SMTP id u196mr1770429ywe.293.1551804837259; Tue, 05 Mar 2019 08:53:57 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1551804837; cv=none; d=google.com; s=arc-20160816; b=QqK1/ODoJrcJ0FmVsOFbdCdXc6kZA9zYXvuA/Z5ZQ8udOO2XH9/NPY7Rubo0ANFVhx TJfvGljoJZ6QQzGJtLdmLjEhIU+/bh0dqjWUiflqERA5BpS5EmIpO/K5Ug1OgSsrOlzN y5A1Q5aSdRsoi1jhOCHIxK2aG7vUEb6BoFqITPxm1rktf4ypphw2eiKXD8ysCyRJwCoJ nvwBLCKn52zxHeWLcOyh6RSEFMIKEBaTphLdX4DhbpdPLwBhEKAk8Jas4Oh381jzCUiu ut/Mdn8A4i68VQ1DvZ7SSEbcdNsrqK5DXh+42nvUDOATWVgBsziopqxD3iKxd17raRYo 8pvQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:subject :content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:to:from:dkim-signature; bh=j0I7Nv5Z/7AbfENJrvrxgUHkMJI29mc0zYtJPLLee8s=; b=nhD9e8Sg624E1iOS004lvKEjo3mdHg+Zei/DmYrhRUT5c5ympcTngYrMb9z9ZWvxUc IcIYMPgd2vzzm58xgT013RRQyCc7TeJ6mahEDhvECrorBZIZJavJnSo9iUv1ljcR2XnX W64nswbnn56gEzS0sFd05fMT1h94mAQDbc8PV6pens5CXmVrB0Rhs8hkGkXgi64lCmOR cWZngYndlsO8OFfPdMHxclQNTfjeX4eHpgPP2JYozzgsOqSmt6qHsFvyFNkDjdwPWhta bmItZqUYBDJ9yJkRv/LMHXNIEbPciTYmvq8Db40sSgHokHo9xk+ILjbIzoATnSy6p5FF xY8A== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=r9bygbv0; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id c65si5808505yba.477.2019.03.05.08.53.56 for (version=TLS1 cipher=AES128-SHA bits=128/128); Tue, 05 Mar 2019 08:53:57 -0800 (PST) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; Authentication-Results: mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=r9bygbv0; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([127.0.0.1]:45738 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h1DKG-0002gB-Bl for patch@linaro.org; Tue, 05 Mar 2019 11:53:56 -0500 Received: from eggs.gnu.org ([209.51.188.92]:54463) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h1DHN-0001Tp-TH for qemu-devel@nongnu.org; Tue, 05 Mar 2019 11:50:58 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1h1DHN-0000d3-2Y for qemu-devel@nongnu.org; Tue, 05 Mar 2019 11:50:57 -0500 Received: from mail-wr1-x431.google.com ([2a00:1450:4864:20::431]:37847) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1h1DHM-0000c2-RI for qemu-devel@nongnu.org; Tue, 05 Mar 2019 11:50:57 -0500 Received: by mail-wr1-x431.google.com with SMTP id w6so10241406wrs.4 for ; Tue, 05 Mar 2019 08:50:56 -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=j0I7Nv5Z/7AbfENJrvrxgUHkMJI29mc0zYtJPLLee8s=; b=r9bygbv05rl3QFctN26KDHUBMNjTolQwmtx960qS5OgJX0gXlHmCe3Lju4oBOEra3s 4oJ0ag4M/cvJT8fIAeVaaQ4lf7lwf0YG2fai1WbfK53WF3gi6CgAwVQjlovMErSZK5t4 XeW5t4N0XWiyrEwEocIYPX2Hk6efkqeWgJqDFMQFYE501qNW+Kzb2PmXx278601lq4ot ivZgxXBeL8HLqh5KmFh4U4F0YljyeWlOxtSV3Ft++dSo/8H6cGbmseVWa0yAZVGBrEcI KlecwJT4khT7tQ12LEjRrIR107D3QUQkVUhl3bBWXOuB3rezx8I2LSri6nCPxHkkSOgg xT7A== 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=j0I7Nv5Z/7AbfENJrvrxgUHkMJI29mc0zYtJPLLee8s=; b=JngjU/Gsr83LXMt1qDCNa4NgQhDfsZbewoLOK/gvBdmm0SMbgkTu04y21uG6ba9Gjz +HfrsOvT5TYPhbW+C5h7ubJWy8X+4P1kKvc4gVdjUdzjGzWwKis1t05vSffLjeorOiub D7xpl5yTHrI2Fkocx/in5iNWQkUObEGF+u+0fKxO2zfklhN58hG9yop/ekBKRQOqrHyw cAMXMqjZT2c2nVwQV3ysMTs27Gh3dWJ0X7hKCM9evlcf47uAHsIznqI7WHn3f1e99flj wdxdwHbfxHd4aQVFrob1MLOQs1PNK1/IWYgfu2wZTB1gOGj12eyssPWWdNfuZzd1XeFA 8keA== X-Gm-Message-State: APjAAAVQ8+3GtH/mytX5AcoZSChOASzKhRNLy9QgbQFtvzZ6c4xIanoR HpjoRgkE4Oz1QGj92Ff+ppTevveIxgs= X-Received: by 2002:adf:e58f:: with SMTP id l15mr16604000wrm.309.1551804655421; Tue, 05 Mar 2019 08:50:55 -0800 (PST) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id 2sm10071495wrg.89.2019.03.05.08.50.54 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 05 Mar 2019 08:50:54 -0800 (PST) From: Peter Maydell To: qemu-devel@nongnu.org Date: Tue, 5 Mar 2019 16:50:30 +0000 Message-Id: <20190305165051.26860-2-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190305165051.26860-1-peter.maydell@linaro.org> References: <20190305165051.26860-1-peter.maydell@linaro.org> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::431 Subject: [Qemu-devel] [PULL 01/22] target/arm: Fix PC test for LDM (exception return) 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+patch=linaro.org@nongnu.org Sender: "Qemu-devel" From: Richard Henderson Found by inspection: Rn is the base register against which the load began; I is the register within the mask being processed. The exception return should of course be processed from the loaded PC. Signed-off-by: Richard Henderson Reviewed-by: Philippe Mathieu-Daudé Message-id: 20190301202921.21209-1-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/translate.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) -- 2.20.1 diff --git a/target/arm/translate.c b/target/arm/translate.c index 8f7f5b95aab..ad879e3480c 100644 --- a/target/arm/translate.c +++ b/target/arm/translate.c @@ -10612,7 +10612,7 @@ static void disas_arm_insn(DisasContext *s, unsigned int insn) } else if (i == rn) { loaded_var = tmp; loaded_base = 1; - } else if (rn == 15 && exc_return) { + } else if (i == 15 && exc_return) { store_pc_exc_ret(s, tmp); } else { store_reg_from_load(s, i, tmp); From patchwork Tue Mar 5 16:50:31 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Maydell X-Patchwork-Id: 159675 Delivered-To: patch@linaro.org Received: by 2002:a02:5cc1:0:0:0:0:0 with SMTP id w62csp5183937jad; Tue, 5 Mar 2019 08:51:32 -0800 (PST) X-Google-Smtp-Source: APXvYqyy3pKOpHb/VHZG419z/AAxgvLv4eBb+3oAuh4fMWjfhFjClN0SfXhf8z82kD652zcbW8FW X-Received: by 2002:a81:48cf:: with SMTP id v198mr1721739ywa.61.1551804692241; Tue, 05 Mar 2019 08:51:32 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1551804692; cv=none; d=google.com; s=arc-20160816; b=xoxZkHRJvJy0GFNIwOOegzKQpXLS0wxw/6Cn+nCPYDapJGI2vHyzLs4f6f9a7q5QGs ok0WMk26PMEFWc1C5kAL/ct7iUl1TAVhJ3JcVMI236lVpgPkzDKQ3QAxRU1+0Vm8NJpt pyYbzX5hFhhcvdiIgqP5tegg9LLdEeynWDD15d84w4KoqcLLQXiXka6vXfydx+JVe5nf /ltIRFwCS+L14gNtMmG+FiAFVq5GGZ0fCv9RJViSlHCDBjRxQcQA6zpR0n2SE03mLZzG MimTNlMvVwyr4BLNEHP+GVLIsRP1wkze+vwnHh0qcaKSAGK7jm3INFWLWh4jeLapj9lO IVqA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:subject :content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:to:from:dkim-signature; bh=R0bJ16NhzI6cadc49jsaVQWgfkenQWAzMf4NJfNfRpY=; b=KdhOkoRzDZVpsclrwVNFeA3E/y8aJ2Ls3NSmYrQhFVqTAerXvnJk4ZBshmxZJa2/Ch nx2+wwy8+3iQy6r8YuzzjoxFIOIkQjz7TcmOKrAEKqBJRuQuLoXW1QvnUKtZ8QOgZeHr gYqNE/+nhwYLLJS/S73E0xnGGV1+OW28X26/nVCynfVslWOl4cpM5op2U1QCPoU7OETv YhAF4mHPyclXvPgk6i6vGNLaqaagKlkDtURnjHun4X5krsB4hyRdD7LE89xvYVQF5kqx b9AW0UlX67QIzk0N4qk06eKvmEuzV88uTiGA2R6aSe0fQDdy/kNZu610HTMi22VV069b bsuw== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=fR5qzyid; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id j72si5103856ywa.81.2019.03.05.08.51.32 for (version=TLS1 cipher=AES128-SHA bits=128/128); Tue, 05 Mar 2019 08:51:32 -0800 (PST) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; Authentication-Results: mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=fR5qzyid; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([127.0.0.1]:45734 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h1DHv-0001XW-Mg for patch@linaro.org; Tue, 05 Mar 2019 11:51:31 -0500 Received: from eggs.gnu.org ([209.51.188.92]:54485) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h1DHO-0001VG-Te for qemu-devel@nongnu.org; Tue, 05 Mar 2019 11:50:59 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1h1DHO-0000fS-1Y for qemu-devel@nongnu.org; Tue, 05 Mar 2019 11:50:58 -0500 Received: from mail-wm1-x330.google.com ([2a00:1450:4864:20::330]:35634) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1h1DHN-0000d8-Pl for qemu-devel@nongnu.org; Tue, 05 Mar 2019 11:50:57 -0500 Received: by mail-wm1-x330.google.com with SMTP id y15so3281726wma.0 for ; Tue, 05 Mar 2019 08:50:57 -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=R0bJ16NhzI6cadc49jsaVQWgfkenQWAzMf4NJfNfRpY=; b=fR5qzyidtUmswLZ5w9tqEGbA1ZiH56iU2ygLgKvHEFAJgbnnUbgR9WjWVCw8ZIeTQ1 0CQesPJXqbpHzPzCTL8U0oygFt645TZenfGqMfSp92FEcYFSogUzPu0MogvKfE8GxR41 RCbdXoKxqbeM4pDMF4VdkW60JtxJNiW++IF64rBBTGR8bEreoZpszbNEPbAknPJRp8/H IcZQivtN1unI+U5BzSi0oDee/6BG6Lc0fTuNFAVtiIeMjSx+5TSbv7lpAAJ6X+SW8YK4 REMnc0qHhYe/yc0no8fW00kbS6IC13ePialv6Ta8VyUxVSe5lK7NwEBof7Q2LmSbYtm4 xwYA== 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=R0bJ16NhzI6cadc49jsaVQWgfkenQWAzMf4NJfNfRpY=; b=rWqHGDxIG0CvrWYx9eg3I+jnVbsYcUlN9WWXnCg78i2PLNnufMAqfPrzQDSGCRcSLH XJjUSAwE9Hfpd2bCc7+IfPPUku1y/pSobHRQNuxJ5grSY6//mkVtvmUtAoxiqentquIb wbFLIzu9lS7+SiLZXQXcCBtxTWCfM+t2t/09b0p25cWj3mkKdjLuHbHnXVXDMI5ae2Nj z2dZn1lxEEjJrEZTTjd0JQHFLvwHrJ8EMVa5s1VuTTCrGkS48scLxuM8VzUbIDPQPSBH rGTOGMXiCFz1F/EBkZ0jS1CM/QCatU2w16z9SA1zeTb3lJeDsbQtSnYLJY5rUkI7GOKg SXEw== X-Gm-Message-State: APjAAAW0xWhx2MeMwpaIVhIYjv+crew9qHGOD5RMJa5bCEpGp1H/Cv1s DRHd4rYnViGS6CFcOzCsPq0/9vOPQQ8= X-Received: by 2002:a1c:a98b:: with SMTP id s133mr3157202wme.129.1551804656501; Tue, 05 Mar 2019 08:50:56 -0800 (PST) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id 2sm10071495wrg.89.2019.03.05.08.50.55 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 05 Mar 2019 08:50:55 -0800 (PST) From: Peter Maydell To: qemu-devel@nongnu.org Date: Tue, 5 Mar 2019 16:50:31 +0000 Message-Id: <20190305165051.26860-3-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190305165051.26860-1-peter.maydell@linaro.org> References: <20190305165051.26860-1-peter.maydell@linaro.org> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::330 Subject: [Qemu-devel] [PULL 02/22] target/arm: Split out arm_sctlr 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+patch=linaro.org@nongnu.org Sender: "Qemu-devel" From: Richard Henderson Minimize the number of places that will need updating when the virtual host extensions are added. Signed-off-by: Richard Henderson Message-id: 20190301200501.16533-2-richard.henderson@linaro.org Reviewed-by: Peter Maydell Signed-off-by: Peter Maydell --- target/arm/cpu.h | 26 ++++++++++++++++---------- target/arm/helper.c | 8 ++------ 2 files changed, 18 insertions(+), 16 deletions(-) -- 2.20.1 diff --git a/target/arm/cpu.h b/target/arm/cpu.h index 36cd365efaf..67b06bfad09 100644 --- a/target/arm/cpu.h +++ b/target/arm/cpu.h @@ -3042,11 +3042,20 @@ static inline bool arm_sctlr_b(CPUARMState *env) (env->cp15.sctlr_el[1] & SCTLR_B) != 0; } +static inline uint64_t arm_sctlr(CPUARMState *env, int el) +{ + if (el == 0) { + /* FIXME: ARMv8.1-VHE S2 translation regime. */ + return env->cp15.sctlr_el[1]; + } else { + return env->cp15.sctlr_el[el]; + } +} + + /* Return true if the processor is in big-endian mode. */ static inline bool arm_cpu_data_is_big_endian(CPUARMState *env) { - int cur_el; - /* In 32bit endianness is determined by looking at CPSR's E bit */ if (!is_a64(env)) { return @@ -3065,15 +3074,12 @@ static inline bool arm_cpu_data_is_big_endian(CPUARMState *env) arm_sctlr_b(env) || #endif ((env->uncached_cpsr & CPSR_E) ? 1 : 0); + } else { + int cur_el = arm_current_el(env); + uint64_t sctlr = arm_sctlr(env, cur_el); + + return (sctlr & (cur_el ? SCTLR_EE : SCTLR_E0E)) != 0; } - - cur_el = arm_current_el(env); - - if (cur_el == 0) { - return (env->cp15.sctlr_el[1] & SCTLR_E0E) != 0; - } - - return (env->cp15.sctlr_el[cur_el] & SCTLR_EE) != 0; } #include "exec/cpu-all.h" diff --git a/target/arm/helper.c b/target/arm/helper.c index 1fa282a7fc1..49ff79a146b 100644 --- a/target/arm/helper.c +++ b/target/arm/helper.c @@ -12854,12 +12854,8 @@ void cpu_get_tb_cpu_state(CPUARMState *env, target_ulong *pc, flags = FIELD_DP32(flags, TBFLAG_A64, ZCR_LEN, zcr_len); } - if (current_el == 0) { - /* FIXME: ARMv8.1-VHE S2 translation regime. */ - sctlr = env->cp15.sctlr_el[1]; - } else { - sctlr = env->cp15.sctlr_el[current_el]; - } + sctlr = arm_sctlr(env, current_el); + if (cpu_isar_feature(aa64_pauth, cpu)) { /* * In order to save space in flags, we record only whether From patchwork Tue Mar 5 16:50:32 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Maydell X-Patchwork-Id: 159677 Delivered-To: patch@linaro.org Received: by 2002:a02:5cc1:0:0:0:0:0 with SMTP id w62csp5186391jad; Tue, 5 Mar 2019 08:54:06 -0800 (PST) X-Google-Smtp-Source: APXvYqx+EZHte+jdLZK+0U64WJocILIVkRjH/sFs2a7iG4dX4Dm4PVfEOz7UmlDe9p3Nkik3fA+B X-Received: by 2002:a25:bf82:: with SMTP id l2mr2990953ybk.15.1551804846300; Tue, 05 Mar 2019 08:54:06 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1551804846; cv=none; d=google.com; s=arc-20160816; b=RGdkGuOtpjrTxyD0ffgFinO0o8inOyIAsSlJIXxvpwrdjoVC2WgcLp8PcRraYK67wZ emDbH/sdJ9jl3/HJuL2TM9pEv/e0WNatrY2Ha7PlOObyEHEEPeEI9SdsPW7Wsw2REEiG PjR4Z1wfmDxhDjZPIMK9i0tyomlz6RJGnB5L/SWSgcWR8MeDiQ+N8xJBxxxUhzU3Ay5c uELygJBgGaLfgsr5fUy2PdrDgyRU8IhgvEBJaKdRx0AKgKujAD0mxdavfB/rM5kE3hgq VjxAa9Sg0ztifBRo1nE1QzoOfvDRRmtqDNSYCM2UnE0Qnka8mV+nC4MeqdKfTx77d34s 471A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:subject :content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:to:from:dkim-signature; bh=1uIXKoONtnkjCTDZZuAUO2wCgsqHmmOWbYwfgzZEbss=; b=XEnV/U9n0p2cJvYt081W5aRkx5oXsUzAWdk1VoWGzwBof9ewW7QRD7nsFvupjAPAXF wjkJdzLIi7fGF4klKq7EglT36YFw+O8WquTv/XojBp1I7XN3hqWl1MVhkjPGHihDgwqV PNdiyjueCoFNPu3p7H37rkN3TKt/oJb6JoLMF9YvQkxANroGdG5vrtHOipEW4FsRGRk9 Iiw9a5KL9gAOCtxKGf73Ew4uWgh1L9fhu1mI50uPE/UpLY9z3d+jVTIs5tsk+6nHwyoX T0nnRuW8PTTjqSGEKcN7qNosGgMkS8y1LkaLEFj7pPY0m9rCWnD6BUCXRridAUmcz5yF HAhA== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=rI6e9KXR; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id f3si5130755ybn.283.2019.03.05.08.54.06 for (version=TLS1 cipher=AES128-SHA bits=128/128); Tue, 05 Mar 2019 08:54:06 -0800 (PST) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; Authentication-Results: mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=rI6e9KXR; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([127.0.0.1]:45744 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h1DKP-0002ou-Q8 for patch@linaro.org; Tue, 05 Mar 2019 11:54:05 -0500 Received: from eggs.gnu.org ([209.51.188.92]:54498) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h1DHQ-0001WZ-Fi for qemu-devel@nongnu.org; Tue, 05 Mar 2019 11:51:01 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1h1DHP-0000iT-FU for qemu-devel@nongnu.org; Tue, 05 Mar 2019 11:51:00 -0500 Received: from mail-wr1-x433.google.com ([2a00:1450:4864:20::433]:44122) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1h1DHP-0000gO-6v for qemu-devel@nongnu.org; Tue, 05 Mar 2019 11:50:59 -0500 Received: by mail-wr1-x433.google.com with SMTP id w2so10237116wrt.11 for ; Tue, 05 Mar 2019 08:50:59 -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=1uIXKoONtnkjCTDZZuAUO2wCgsqHmmOWbYwfgzZEbss=; b=rI6e9KXRVQqc3l9NbxyAPX3LRq8MF07XkiZRvtbhn7SYI7d2AfuSFYzvE7hpUY1u2H ZRqhU9eiIsrl7qxchaugqKP5GJqkzL01Vxdic0zPZ5khlrPKz7tGqyFuFK/66KXIl5LQ j/HSZ6/3hlzy44QzFXp1AgBQSugEgpDHaGe8FMXUg3J4aNa9SW6/e9zzPqvGmodZn3gq PpGS5v0KM5tWwe62snJDy+lOyZbmkcg7oUHremq130X3vnePgHnq2nmm7uwes6sAnKyr 9X8bNAMa9PvCHEduTj5b5BhGAZdC8VmwYp6osDiL5p51E7/+6MxnRYgr/Aekaj9+fNbe m+Qw== 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=1uIXKoONtnkjCTDZZuAUO2wCgsqHmmOWbYwfgzZEbss=; b=eTw8svz80QDZWnH8gZr5/VDWFON6oQe50jJCTRsq//o3KzLe3An8iv2UGxd6h69GVg gSwftLfWHOWxdtFgJeaqgTY7qwUWtyTbiKZGgxn4TUXkMmYcyo3ou+QCpfmECrSR3w7H i0ABvbghQMavCWdXZyaZKOHiP7/N6RasAXz1yeFsQ8RRfqi/gezbjaj/8WfYKp53zSvc 4pTi6G9CphlUtJ2BVGyeRHmbNwb9NlbD1plk5YYYafgzFZGep3hRz28fwKy37nNSjChc fHEQ+vzvI03Ly22U+TUeA7eon/CZ+ON2eqa4ZNbT4kFZeiS8tprjCsf3VqxFFRPsre7d Jn9w== X-Gm-Message-State: APjAAAVUlqTHCtV1fM5xIarA2yT8MpplN7FfxT56NOMuCXf0wDZtPr72 nVIubWC0o/rkGd0wQSF1zcFECtKqXSE= X-Received: by 2002:adf:fc12:: with SMTP id i18mr16736622wrr.201.1551804657903; Tue, 05 Mar 2019 08:50:57 -0800 (PST) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id 2sm10071495wrg.89.2019.03.05.08.50.56 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 05 Mar 2019 08:50:56 -0800 (PST) From: Peter Maydell To: qemu-devel@nongnu.org Date: Tue, 5 Mar 2019 16:50:32 +0000 Message-Id: <20190305165051.26860-4-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190305165051.26860-1-peter.maydell@linaro.org> References: <20190305165051.26860-1-peter.maydell@linaro.org> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::433 Subject: [Qemu-devel] [PULL 03/22] target/arm: Implement ARMv8.0-SB 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+patch=linaro.org@nongnu.org Sender: "Qemu-devel" From: Richard Henderson Signed-off-by: Richard Henderson Message-id: 20190301200501.16533-3-richard.henderson@linaro.org Reviewed-by: Peter Maydell Signed-off-by: Peter Maydell --- target/arm/cpu.h | 10 ++++++++++ linux-user/elfload.c | 1 + target/arm/cpu.c | 1 + target/arm/cpu64.c | 2 ++ target/arm/translate-a64.c | 14 ++++++++++++++ target/arm/translate.c | 22 ++++++++++++++++++++++ 6 files changed, 50 insertions(+) -- 2.20.1 diff --git a/target/arm/cpu.h b/target/arm/cpu.h index 67b06bfad09..361e51143c7 100644 --- a/target/arm/cpu.h +++ b/target/arm/cpu.h @@ -3307,6 +3307,11 @@ static inline bool isar_feature_aa32_fhm(const ARMISARegisters *id) return FIELD_EX32(id->id_isar6, ID_ISAR6, FHM) != 0; } +static inline bool isar_feature_aa32_sb(const ARMISARegisters *id) +{ + return FIELD_EX32(id->id_isar6, ID_ISAR6, SB) != 0; +} + static inline bool isar_feature_aa32_fp16_arith(const ARMISARegisters *id) { /* @@ -3445,6 +3450,11 @@ static inline bool isar_feature_aa64_pauth(const ARMISARegisters *id) FIELD_DP64(0, ID_AA64ISAR1, GPI, 0xf))) != 0; } +static inline bool isar_feature_aa64_sb(const ARMISARegisters *id) +{ + return FIELD_EX64(id->id_aa64isar1, ID_AA64ISAR1, SB) != 0; +} + static inline bool isar_feature_aa64_fp16(const ARMISARegisters *id) { /* We always set the AdvSIMD and FP fields identically wrt FP16. */ diff --git a/linux-user/elfload.c b/linux-user/elfload.c index b9f7cbbdc17..6cfebe1446d 100644 --- a/linux-user/elfload.c +++ b/linux-user/elfload.c @@ -604,6 +604,7 @@ static uint32_t get_elf_hwcap(void) GET_FEATURE_ID(aa64_pauth, ARM_HWCAP_A64_PACA | ARM_HWCAP_A64_PACG); GET_FEATURE_ID(aa64_fhm, ARM_HWCAP_A64_ASIMDFHM); GET_FEATURE_ID(aa64_jscvt, ARM_HWCAP_A64_JSCVT); + GET_FEATURE_ID(aa64_sb, ARM_HWCAP_A64_SB); #undef GET_FEATURE_ID diff --git a/target/arm/cpu.c b/target/arm/cpu.c index 54b61f917be..ef069c268df 100644 --- a/target/arm/cpu.c +++ b/target/arm/cpu.c @@ -2021,6 +2021,7 @@ static void arm_max_initfn(Object *obj) t = FIELD_DP32(t, ID_ISAR6, JSCVT, 1); t = FIELD_DP32(t, ID_ISAR6, DP, 1); t = FIELD_DP32(t, ID_ISAR6, FHM, 1); + t = FIELD_DP32(t, ID_ISAR6, SB, 1); cpu->isar.id_isar6 = t; t = cpu->id_mmfr4; diff --git a/target/arm/cpu64.c b/target/arm/cpu64.c index 1b0c427277b..6788c0f6ff7 100644 --- a/target/arm/cpu64.c +++ b/target/arm/cpu64.c @@ -318,6 +318,7 @@ static void aarch64_max_initfn(Object *obj) t = FIELD_DP64(t, ID_AA64ISAR1, API, 0); t = FIELD_DP64(t, ID_AA64ISAR1, GPA, 1); t = FIELD_DP64(t, ID_AA64ISAR1, GPI, 0); + t = FIELD_DP64(t, ID_AA64ISAR1, SB, 1); cpu->isar.id_aa64isar1 = t; t = cpu->isar.id_aa64pfr0; @@ -349,6 +350,7 @@ static void aarch64_max_initfn(Object *obj) u = FIELD_DP32(u, ID_ISAR6, JSCVT, 1); u = FIELD_DP32(u, ID_ISAR6, DP, 1); u = FIELD_DP32(u, ID_ISAR6, FHM, 1); + u = FIELD_DP32(u, ID_ISAR6, SB, 1); cpu->isar.id_isar6 = u; /* diff --git a/target/arm/translate-a64.c b/target/arm/translate-a64.c index d3c8eaf0893..4aa5a307e41 100644 --- a/target/arm/translate-a64.c +++ b/target/arm/translate-a64.c @@ -1637,7 +1637,21 @@ static void handle_sync(DisasContext *s, uint32_t insn, reset_btype(s); gen_goto_tb(s, 0, s->pc); return; + + case 7: /* SB */ + if (crm != 0 || !dc_isar_feature(aa64_sb, s)) { + goto do_unallocated; + } + /* + * TODO: There is no speculation barrier opcode for TCG; + * MB and end the TB instead. + */ + tcg_gen_mb(TCG_MO_ALL | TCG_BAR_SC); + gen_goto_tb(s, 0, s->pc); + return; + default: + do_unallocated: unallocated_encoding(s); return; } diff --git a/target/arm/translate.c b/target/arm/translate.c index ad879e3480c..9f71206f857 100644 --- a/target/arm/translate.c +++ b/target/arm/translate.c @@ -9282,6 +9282,17 @@ static void disas_arm_insn(DisasContext *s, unsigned int insn) */ gen_goto_tb(s, 0, s->pc & ~1); return; + case 7: /* sb */ + if ((insn & 0xf) || !dc_isar_feature(aa32_sb, s)) { + goto illegal_op; + } + /* + * TODO: There is no speculation barrier opcode + * for TCG; MB and end the TB instead. + */ + tcg_gen_mb(TCG_MO_ALL | TCG_BAR_SC); + gen_goto_tb(s, 0, s->pc & ~1); + return; default: goto illegal_op; } @@ -11900,6 +11911,17 @@ static void disas_thumb2_insn(DisasContext *s, uint32_t insn) */ gen_goto_tb(s, 0, s->pc & ~1); break; + case 7: /* sb */ + if ((insn & 0xf) || !dc_isar_feature(aa32_sb, s)) { + goto illegal_op; + } + /* + * TODO: There is no speculation barrier opcode + * for TCG; MB and end the TB instead. + */ + tcg_gen_mb(TCG_MO_ALL | TCG_BAR_SC); + gen_goto_tb(s, 0, s->pc & ~1); + break; default: goto illegal_op; } From patchwork Tue Mar 5 16:50:33 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Maydell X-Patchwork-Id: 159683 Delivered-To: patch@linaro.org Received: by 2002:a02:5cc1:0:0:0:0:0 with SMTP id w62csp5189164jad; Tue, 5 Mar 2019 08:57:21 -0800 (PST) X-Google-Smtp-Source: APXvYqwbrX5Co/CybGWqNRbPT2ZJum/6zFbI8xqVkMWOX51/iEADcJdN9CRL5nXWArq6VjzNaMaC X-Received: by 2002:a81:4c04:: with SMTP id z4mr1791873ywa.38.1551805040951; Tue, 05 Mar 2019 08:57:20 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1551805040; cv=none; d=google.com; s=arc-20160816; b=dlLojyQ2PaAUuue1DsUZ+Uir0S/XnPV6rIydowamwYKbs9foxEKLJuZ8GZNWPbGRFr Gu9GjEEIHdnWY16EtGENsR6Z2s+N5oz45EAxkKiHnuJx2nc2YrWkwSQQqQVli2d4iy4U CVox7PlEEWi7UAs4Aiyzc9A+wC/SGl1mVuJaA09pZLSerK04VNBenkSVIx9avlYNElOs 17Ry1/2oOrSFL2EAQu25onMkEsyJDUboucTPQTi+1JA6YvQgM0HOXREBPgA6Av8+TbZL DsCGcJRel72xyoGv6GWPHwBGjtExEW5AxyOJ5Xt+zdgOLdDh85Aq9qwXriYVZohaGE6m 0XxA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:subject :content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:to:from:dkim-signature; bh=MhK0rVzLjKODPV7m/7aRrkaiKGeVb3/JwMjqVR8x4p8=; b=t6vyzaLVSOKBYKi1croHy3BGe725sA0JcV7zNxdw+I5d7a03tFqojpStUBOLvFSlZw FUwRKj+0DbwChAMon3Y3Dekwx3V2xHxkpYJY/Y3WB2T0LHJN5Jnank9xZ/MKWZbZWu1N xeJtcnlfCmRd/lkvNBcB07BljpdoL18GCckIQ1rJr0NKJpOtrZTrAn/MnYSa+zIwCOoM euO2uW/sGgr2v26dIBWhyr/p99d09GnILPJidQj4oiTG+pxVlGR8kDH91RPvshabze4n /DGNS1yHH78fLbVER4cHKBIAptYmqhUl+FqDNQAfQiT8dn+VCnpWbh68xW6qlej0HXDs IHKg== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=OQSIggrH; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id 21si4974404ywd.413.2019.03.05.08.57.20 for (version=TLS1 cipher=AES128-SHA bits=128/128); Tue, 05 Mar 2019 08:57:20 -0800 (PST) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; Authentication-Results: mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=OQSIggrH; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([127.0.0.1]:45811 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h1DNY-0006X5-E7 for patch@linaro.org; Tue, 05 Mar 2019 11:57:20 -0500 Received: from eggs.gnu.org ([209.51.188.92]:54566) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h1DHX-0001a5-0k for qemu-devel@nongnu.org; Tue, 05 Mar 2019 11:51:08 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1h1DHQ-0000ko-Sd for qemu-devel@nongnu.org; Tue, 05 Mar 2019 11:51:06 -0500 Received: from mail-wr1-x42d.google.com ([2a00:1450:4864:20::42d]:33897) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1h1DHQ-0000jO-I8 for qemu-devel@nongnu.org; Tue, 05 Mar 2019 11:51:00 -0500 Received: by mail-wr1-x42d.google.com with SMTP id f14so10258692wrg.1 for ; Tue, 05 Mar 2019 08:51:00 -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=MhK0rVzLjKODPV7m/7aRrkaiKGeVb3/JwMjqVR8x4p8=; b=OQSIggrHvgX85cXqPv3WIH78a4yo+SWPKOh2qHJE6rfLXOXfryiO4Qf/NQ9Q9NE45/ A+VYriR5BZ/Y+0EmUWSw4Eax+MFtyKgznSF44NIrKr5WxScTWLBtrhUub+Gv7sQLc6gi 9O9koKJ9EXWwshv3AH+mezbm5XCkDxCtX9ciRqJFxkn/GUB5NO37Zg3KXq7zjnqlWz8s IhMFUrC5i436IIpAwIBZid5VDrZv5FyOJ6LLiW5PtoTdB2haY72ExXo8vtoK0ADIL2Vy Jg6k2aVJhFyvldweFd4HPdaB8RxF2DMwUpBQ9GHDNdK5EFrHiktxkV5ghfzJxbFMKbGR Qqmw== 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=MhK0rVzLjKODPV7m/7aRrkaiKGeVb3/JwMjqVR8x4p8=; b=hWmhN/aRTQVcLwERpg3nBXZReUQdP6+msXieC8lUK0KgbMy7qRH+ePnMYxAOQLk1Fd 78V3afDKyCXGd2FxlBcDBlTEvB1aM5djxzZsJLVkcKKoSAjdlD4aXkOgBFhrwq5oFo6J vUMUhjw/Fwl1ySyY1+jKRUOpCDRiYM+mMu5C2IMW0F6+idbWgucJ1UVC9L+qhjE7XvQI J0fbyviV87Cp7KBh9fgRp2/WGvrk11dxbcBRijtCX+CaAfJyphaePrqIctaQOBfGYrqm RuAFy/m4a+sMXPvy0hWFTYLhJuwEfMl/2M25ULy1zXIBLfhP1dqM4NU7x+vTnKJYBNcv ukBw== X-Gm-Message-State: APjAAAWqygc+fISNExRpHHnymX0nmdXOx0gBY1ptgo7axuoSMBSUogcH wAnYUMYZhrbAwBBIj/8QspkJvOXk4zo= X-Received: by 2002:a5d:4d12:: with SMTP id z18mr17503137wrt.115.1551804659147; Tue, 05 Mar 2019 08:50:59 -0800 (PST) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id 2sm10071495wrg.89.2019.03.05.08.50.57 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 05 Mar 2019 08:50:58 -0800 (PST) From: Peter Maydell To: qemu-devel@nongnu.org Date: Tue, 5 Mar 2019 16:50:33 +0000 Message-Id: <20190305165051.26860-5-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190305165051.26860-1-peter.maydell@linaro.org> References: <20190305165051.26860-1-peter.maydell@linaro.org> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::42d Subject: [Qemu-devel] [PULL 04/22] target/arm: Implement ARMv8.0-PredInv 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+patch=linaro.org@nongnu.org Sender: "Qemu-devel" From: Richard Henderson Signed-off-by: Richard Henderson Message-id: 20190301200501.16533-4-richard.henderson@linaro.org Reviewed-by: Peter Maydell Signed-off-by: Peter Maydell --- target/arm/cpu.h | 13 ++++++++++- target/arm/cpu.c | 1 + target/arm/cpu64.c | 2 ++ target/arm/helper.c | 55 +++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 70 insertions(+), 1 deletion(-) -- 2.20.1 diff --git a/target/arm/cpu.h b/target/arm/cpu.h index 361e51143c7..c822f94236c 100644 --- a/target/arm/cpu.h +++ b/target/arm/cpu.h @@ -1060,7 +1060,8 @@ void pmu_init(ARMCPU *cpu); #define SCTLR_R (1U << 9) /* up to v6; RAZ in v7 */ #define SCTLR_UMA (1U << 9) /* v8 onward, AArch64 only */ #define SCTLR_F (1U << 10) /* up to v6 */ -#define SCTLR_SW (1U << 10) /* v7, RES0 in v8 */ +#define SCTLR_SW (1U << 10) /* v7 */ +#define SCTLR_EnRCTX (1U << 10) /* in v8.0-PredInv */ #define SCTLR_Z (1U << 11) /* in v7, RES1 in v8 */ #define SCTLR_EOS (1U << 11) /* v8.5-ExS */ #define SCTLR_I (1U << 12) @@ -3312,6 +3313,11 @@ static inline bool isar_feature_aa32_sb(const ARMISARegisters *id) return FIELD_EX32(id->id_isar6, ID_ISAR6, SB) != 0; } +static inline bool isar_feature_aa32_predinv(const ARMISARegisters *id) +{ + return FIELD_EX32(id->id_isar6, ID_ISAR6, SPECRES) != 0; +} + static inline bool isar_feature_aa32_fp16_arith(const ARMISARegisters *id) { /* @@ -3455,6 +3461,11 @@ static inline bool isar_feature_aa64_sb(const ARMISARegisters *id) return FIELD_EX64(id->id_aa64isar1, ID_AA64ISAR1, SB) != 0; } +static inline bool isar_feature_aa64_predinv(const ARMISARegisters *id) +{ + return FIELD_EX64(id->id_aa64isar1, ID_AA64ISAR1, SPECRES) != 0; +} + static inline bool isar_feature_aa64_fp16(const ARMISARegisters *id) { /* We always set the AdvSIMD and FP fields identically wrt FP16. */ diff --git a/target/arm/cpu.c b/target/arm/cpu.c index ef069c268df..96f0ff0ec72 100644 --- a/target/arm/cpu.c +++ b/target/arm/cpu.c @@ -2022,6 +2022,7 @@ static void arm_max_initfn(Object *obj) t = FIELD_DP32(t, ID_ISAR6, DP, 1); t = FIELD_DP32(t, ID_ISAR6, FHM, 1); t = FIELD_DP32(t, ID_ISAR6, SB, 1); + t = FIELD_DP32(t, ID_ISAR6, SPECRES, 1); cpu->isar.id_isar6 = t; t = cpu->id_mmfr4; diff --git a/target/arm/cpu64.c b/target/arm/cpu64.c index 6788c0f6ff7..87337b63855 100644 --- a/target/arm/cpu64.c +++ b/target/arm/cpu64.c @@ -319,6 +319,7 @@ static void aarch64_max_initfn(Object *obj) t = FIELD_DP64(t, ID_AA64ISAR1, GPA, 1); t = FIELD_DP64(t, ID_AA64ISAR1, GPI, 0); t = FIELD_DP64(t, ID_AA64ISAR1, SB, 1); + t = FIELD_DP64(t, ID_AA64ISAR1, SPECRES, 1); cpu->isar.id_aa64isar1 = t; t = cpu->isar.id_aa64pfr0; @@ -351,6 +352,7 @@ static void aarch64_max_initfn(Object *obj) u = FIELD_DP32(u, ID_ISAR6, DP, 1); u = FIELD_DP32(u, ID_ISAR6, FHM, 1); u = FIELD_DP32(u, ID_ISAR6, SB, 1); + u = FIELD_DP32(u, ID_ISAR6, SPECRES, 1); cpu->isar.id_isar6 = u; /* diff --git a/target/arm/helper.c b/target/arm/helper.c index 49ff79a146b..2607d39ad1c 100644 --- a/target/arm/helper.c +++ b/target/arm/helper.c @@ -5719,6 +5719,50 @@ static const ARMCPRegInfo pauth_reginfo[] = { }; #endif +static CPAccessResult access_predinv(CPUARMState *env, const ARMCPRegInfo *ri, + bool isread) +{ + int el = arm_current_el(env); + + if (el == 0) { + uint64_t sctlr = arm_sctlr(env, el); + if (!(sctlr & SCTLR_EnRCTX)) { + return CP_ACCESS_TRAP; + } + } else if (el == 1) { + uint64_t hcr = arm_hcr_el2_eff(env); + if (hcr & HCR_NV) { + return CP_ACCESS_TRAP_EL2; + } + } + return CP_ACCESS_OK; +} + +static const ARMCPRegInfo predinv_reginfo[] = { + { .name = "CFP_RCTX", .state = ARM_CP_STATE_AA64, + .opc0 = 1, .opc1 = 3, .crn = 7, .crm = 3, .opc2 = 4, + .type = ARM_CP_NOP, .access = PL0_W, .accessfn = access_predinv }, + { .name = "DVP_RCTX", .state = ARM_CP_STATE_AA64, + .opc0 = 1, .opc1 = 3, .crn = 7, .crm = 3, .opc2 = 5, + .type = ARM_CP_NOP, .access = PL0_W, .accessfn = access_predinv }, + { .name = "CPP_RCTX", .state = ARM_CP_STATE_AA64, + .opc0 = 1, .opc1 = 3, .crn = 7, .crm = 3, .opc2 = 7, + .type = ARM_CP_NOP, .access = PL0_W, .accessfn = access_predinv }, + /* + * Note the AArch32 opcodes have a different OPC1. + */ + { .name = "CFPRCTX", .state = ARM_CP_STATE_AA32, + .cp = 15, .opc1 = 0, .crn = 7, .crm = 3, .opc2 = 4, + .type = ARM_CP_NOP, .access = PL0_W, .accessfn = access_predinv }, + { .name = "DVPRCTX", .state = ARM_CP_STATE_AA32, + .cp = 15, .opc1 = 0, .crn = 7, .crm = 3, .opc2 = 5, + .type = ARM_CP_NOP, .access = PL0_W, .accessfn = access_predinv }, + { .name = "CPPRCTX", .state = ARM_CP_STATE_AA32, + .cp = 15, .opc1 = 0, .crn = 7, .crm = 3, .opc2 = 7, + .type = ARM_CP_NOP, .access = PL0_W, .accessfn = access_predinv }, + REGINFO_SENTINEL +}; + void register_cp_regs_for_features(ARMCPU *cpu) { /* Register all the coprocessor registers based on feature bits */ @@ -6618,6 +6662,17 @@ void register_cp_regs_for_features(ARMCPU *cpu) define_arm_cp_regs(cpu, pauth_reginfo); } #endif + + /* + * While all v8.0 cpus support aarch64, QEMU does have configurations + * that do not set ID_AA64ISAR1, e.g. user-only qemu-arm -cpu max, + * which will set ID_ISAR6. + */ + if (arm_feature(&cpu->env, ARM_FEATURE_AARCH64) + ? cpu_isar_feature(aa64_predinv, cpu) + : cpu_isar_feature(aa32_predinv, cpu)) { + define_arm_cp_regs(cpu, predinv_reginfo); + } } void arm_cpu_register_gdb_regs_for_features(ARMCPU *cpu) From patchwork Tue Mar 5 16:50:34 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Maydell X-Patchwork-Id: 159679 Delivered-To: patch@linaro.org Received: by 2002:a02:5cc1:0:0:0:0:0 with SMTP id w62csp5186736jad; Tue, 5 Mar 2019 08:54:31 -0800 (PST) X-Google-Smtp-Source: APXvYqyDURmi6NSsWuZ0/B+OLpTO863KZi15njdHfRiNTFOVGATrMRIfj5MrexXOHFDHPFDgK58V X-Received: by 2002:a25:4ac5:: with SMTP id x188mr2871231yba.351.1551804871211; Tue, 05 Mar 2019 08:54:31 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1551804871; cv=none; d=google.com; s=arc-20160816; b=GhaQv11y32oam4r5lTiGoP+U8RvJ8USCl6mH+dSf0jU/j9FX56XccEDWFbtldt8FVX 0M8liWrgHKgpKkGdWc+t74KVD735zeB3dYxSfyF2+qc8IInNEvToJqLZfE2HMRKoC3jx 4uTAp+JLhQ5jJYCJns4o+BDQyuZSgtX4+A7/IZu9UMXN6yEXhQB+qiPIgYUHGvfjGj20 WvAyyMuFfu2cWiWqe5YJ6WrYXSvTsqiGyi8gVk8HjQy43PCrsRobXILBYbeCy+9B+SNR zmGcffvxzSD8IoqVLrNCkLKA4GxdRTxEwt2KFX1nsLEtQ67qrp1Nj0oWHCLAOJ2qPkWB fuCA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:subject :content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:to:from:dkim-signature; bh=sILGEvJbUY9LBA3iBxsJ8/AaEFFvkIepHtI5FM+vLtw=; b=UEsif064Y9+GbL3WfiTQWbqlFoe3fm4uwXZ+1AawMTa86ORR7upJ+ba6NO9xCyrYNJ JXUb/xy2s/p3FG+/HwlldEQfXjRtbynrcwtg1lh+SyMqTQ8iIRaSyCaobnGUxm+IlIGe L3TceVEQAw7RYq3wsDaUlFAr5Kwha6p9JwDUPm90JaVZNQrRy9Ng8SuWTu1atMUa3ROU CJsgSWLRx+picdnEuVIu4CW9RwXccfvE11WNUtGJerIHjjE5KI+a/AdlXaxPciT0B+JE qymf0d09gEeYqKsf2cSDUxvvMv8AM8Be6U6HFYtqkCftNW2YtnkfGDX5LEINmw6Wlyb3 ZZ9w== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=YUIzQ+2D; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id t4si5287428ywt.258.2019.03.05.08.54.31 for (version=TLS1 cipher=AES128-SHA bits=128/128); Tue, 05 Mar 2019 08:54:31 -0800 (PST) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; Authentication-Results: mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=YUIzQ+2D; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([127.0.0.1]:45759 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h1DKo-000418-LH for patch@linaro.org; Tue, 05 Mar 2019 11:54:30 -0500 Received: from eggs.gnu.org ([209.51.188.92]:54520) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h1DHT-0001ZL-B2 for qemu-devel@nongnu.org; Tue, 05 Mar 2019 11:51:07 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1h1DHS-0000lz-2Z for qemu-devel@nongnu.org; Tue, 05 Mar 2019 11:51:03 -0500 Received: from mail-wr1-x436.google.com ([2a00:1450:4864:20::436]:33753) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1h1DHR-0000kz-NY for qemu-devel@nongnu.org; Tue, 05 Mar 2019 11:51:02 -0500 Received: by mail-wr1-x436.google.com with SMTP id i12so10243793wrw.0 for ; Tue, 05 Mar 2019 08:51:01 -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=sILGEvJbUY9LBA3iBxsJ8/AaEFFvkIepHtI5FM+vLtw=; b=YUIzQ+2DZOUS5V7O3wuQ3pbAh2Zqdodg1d+Qu7jW/7e3DyfyGS7vA28gckh/MoDmtl BAg8RQfS2eYGvyNlKmNldlJudskyBEttUNmHIY9+BYMx6I5oS3ozJm1ew1cbDARsDi/c rBcejWMR/cKymwBewSvaJDYEv4esbBV/BiX8upZEGCmqQad6sebAn5MXRohBGI/sWbCz 6Y3xVPtn6bgcHQ9+1Utn4G4UJMOFRsLK8aPzNIbEwemVBoEOIUzri43jLq/+V82YhGjZ O0QUZnwQyNc+dvXgEOmcUjlobzhAg+6pLigDTWn1VYr35hw0uUMxlk0Vpf44ZXrOq+Af AMGw== 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=sILGEvJbUY9LBA3iBxsJ8/AaEFFvkIepHtI5FM+vLtw=; b=C32z0h0Eb/YcQSCTNA068EJLh0lt/VzMUk631zVFaj/22nLy5usZ7jYxEyPi2qXCha RHMqfF960D6yfjBJ8lnP6kK9QJ3dWmQiyOaPrIerkXNQIB8NMyg6lxmRUvWsAsFLLycG +6MRKGgeJf8fzgYG+CmiSJhIT74sjHrWk5ImhyWqomTQMHUGmDfEFjMKMveYCYa7LOdA AhBjOhvqSdErrFQJFdqGvMAilh/NIIXfJ0KypxfJU4+kSJEQXNdSXnL2eBFWDk7z7oZu PQA0+7C0cS7KLyNnNDzcHUK4EL0vZbJzaNOMZZEqisq0eOC32/Bc+mkAvvdKwx5BPyuA Yk8w== X-Gm-Message-State: APjAAAXxsPBYo71oBeRtCGV8IxoUfeLq98F1guruQx/SloawXQy+aAPh QtTCj0u8w/tRhCR5P2wkyPlzcWgabpc= X-Received: by 2002:a5d:428b:: with SMTP id k11mr17916444wrq.17.1551804660243; Tue, 05 Mar 2019 08:51:00 -0800 (PST) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id 2sm10071495wrg.89.2019.03.05.08.50.59 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 05 Mar 2019 08:50:59 -0800 (PST) From: Peter Maydell To: qemu-devel@nongnu.org Date: Tue, 5 Mar 2019 16:50:34 +0000 Message-Id: <20190305165051.26860-6-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190305165051.26860-1-peter.maydell@linaro.org> References: <20190305165051.26860-1-peter.maydell@linaro.org> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::436 Subject: [Qemu-devel] [PULL 05/22] target/arm: Split helper_msr_i_pstate into 3 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+patch=linaro.org@nongnu.org Sender: "Qemu-devel" From: Richard Henderson The EL0+UMA check is unique to DAIF. While SPSel had avoided the check by nature of already checking EL >= 1, the other post v8.0 extensions to MSR (imm) allow EL0 and do not require UMA. Avoid the unconditional write to pc and use raise_exception_ra to unwind. Signed-off-by: Richard Henderson Message-id: 20190301200501.16533-5-richard.henderson@linaro.org Reviewed-by: Peter Maydell Signed-off-by: Peter Maydell --- target/arm/helper-a64.h | 3 +++ target/arm/helper.h | 1 - target/arm/internals.h | 15 ++++++++++++++ target/arm/helper-a64.c | 30 +++++++++++++++++++++++++++ target/arm/op_helper.c | 42 -------------------------------------- target/arm/translate-a64.c | 41 ++++++++++++++++++++++--------------- 6 files changed, 73 insertions(+), 59 deletions(-) -- 2.20.1 diff --git a/target/arm/helper-a64.h b/target/arm/helper-a64.h index aff8d6c9f39..a915c1247fe 100644 --- a/target/arm/helper-a64.h +++ b/target/arm/helper-a64.h @@ -19,6 +19,9 @@ DEF_HELPER_FLAGS_2(udiv64, TCG_CALL_NO_RWG_SE, i64, i64, i64) DEF_HELPER_FLAGS_2(sdiv64, TCG_CALL_NO_RWG_SE, s64, s64, s64) DEF_HELPER_FLAGS_1(rbit64, TCG_CALL_NO_RWG_SE, i64, i64) +DEF_HELPER_2(msr_i_spsel, void, env, i32) +DEF_HELPER_2(msr_i_daifset, void, env, i32) +DEF_HELPER_2(msr_i_daifclear, void, env, i32) DEF_HELPER_3(vfp_cmph_a64, i64, f16, f16, ptr) DEF_HELPER_3(vfp_cmpeh_a64, i64, f16, f16, ptr) DEF_HELPER_3(vfp_cmps_a64, i64, f32, f32, ptr) diff --git a/target/arm/helper.h b/target/arm/helper.h index d363904278a..6f0f3869262 100644 --- a/target/arm/helper.h +++ b/target/arm/helper.h @@ -77,7 +77,6 @@ DEF_HELPER_2(get_cp_reg, i32, env, ptr) DEF_HELPER_3(set_cp_reg64, void, env, ptr, i64) DEF_HELPER_2(get_cp_reg64, i64, env, ptr) -DEF_HELPER_3(msr_i_pstate, void, env, i32, i32) DEF_HELPER_1(clear_pstate_ss, void, env) DEF_HELPER_2(get_r13_banked, i32, env, i32) diff --git a/target/arm/internals.h b/target/arm/internals.h index a4bd1becb75..587a1ddf580 100644 --- a/target/arm/internals.h +++ b/target/arm/internals.h @@ -968,4 +968,19 @@ ARMVAParameters aa64_va_parameters_both(CPUARMState *env, uint64_t va, ARMVAParameters aa64_va_parameters(CPUARMState *env, uint64_t va, ARMMMUIdx mmu_idx, bool data); +static inline int exception_target_el(CPUARMState *env) +{ + int target_el = MAX(1, arm_current_el(env)); + + /* + * No such thing as secure EL1 if EL3 is aarch32, + * so update the target EL to EL3 in this case. + */ + if (arm_is_secure(env) && !arm_el_is_aa64(env, 3) && target_el == 1) { + target_el = 3; + } + + return target_el; +} + #endif diff --git a/target/arm/helper-a64.c b/target/arm/helper-a64.c index 70850e564d3..796ef34b55e 100644 --- a/target/arm/helper-a64.c +++ b/target/arm/helper-a64.c @@ -61,6 +61,36 @@ uint64_t HELPER(rbit64)(uint64_t x) return revbit64(x); } +void HELPER(msr_i_spsel)(CPUARMState *env, uint32_t imm) +{ + update_spsel(env, imm); +} + +static void daif_check(CPUARMState *env, uint32_t op, + uint32_t imm, uintptr_t ra) +{ + /* DAIF update to PSTATE. This is OK from EL0 only if UMA is set. */ + if (arm_current_el(env) == 0 && !(env->cp15.sctlr_el[1] & SCTLR_UMA)) { + raise_exception_ra(env, EXCP_UDEF, + syn_aa64_sysregtrap(0, extract32(op, 0, 3), + extract32(op, 3, 3), 4, + imm, 0x1f, 0), + exception_target_el(env), ra); + } +} + +void HELPER(msr_i_daifset)(CPUARMState *env, uint32_t imm) +{ + daif_check(env, 0x1e, imm, GETPC()); + env->daif |= (imm << 6) & PSTATE_DAIF; +} + +void HELPER(msr_i_daifclear)(CPUARMState *env, uint32_t imm) +{ + daif_check(env, 0x1f, imm, GETPC()); + env->daif &= ~((imm << 6) & PSTATE_DAIF); +} + /* Convert a softfloat float_relation_ (as returned by * the float*_compare functions) to the correct ARM * NZCV flag state. diff --git a/target/arm/op_helper.c b/target/arm/op_helper.c index c998eadfaa8..c5721a866d3 100644 --- a/target/arm/op_helper.c +++ b/target/arm/op_helper.c @@ -68,20 +68,6 @@ void raise_exception_ra(CPUARMState *env, uint32_t excp, uint32_t syndrome, cpu_loop_exit_restore(cs, ra); } -static int exception_target_el(CPUARMState *env) -{ - int target_el = MAX(1, arm_current_el(env)); - - /* No such thing as secure EL1 if EL3 is aarch32, so update the target EL - * to EL3 in this case. - */ - if (arm_is_secure(env) && !arm_el_is_aa64(env, 3) && target_el == 1) { - target_el = 3; - } - - return target_el; -} - uint32_t HELPER(neon_tbl)(uint32_t ireg, uint32_t def, void *vn, uint32_t maxindex) { @@ -875,34 +861,6 @@ uint64_t HELPER(get_cp_reg64)(CPUARMState *env, void *rip) return res; } -void HELPER(msr_i_pstate)(CPUARMState *env, uint32_t op, uint32_t imm) -{ - /* MSR_i to update PSTATE. This is OK from EL0 only if UMA is set. - * Note that SPSel is never OK from EL0; we rely on handle_msr_i() - * to catch that case at translate time. - */ - if (arm_current_el(env) == 0 && !(env->cp15.sctlr_el[1] & SCTLR_UMA)) { - uint32_t syndrome = syn_aa64_sysregtrap(0, extract32(op, 0, 3), - extract32(op, 3, 3), 4, - imm, 0x1f, 0); - raise_exception(env, EXCP_UDEF, syndrome, exception_target_el(env)); - } - - switch (op) { - case 0x05: /* SPSel */ - update_spsel(env, imm); - break; - case 0x1e: /* DAIFSet */ - env->daif |= (imm << 6) & PSTATE_DAIF; - break; - case 0x1f: /* DAIFClear */ - env->daif &= ~((imm << 6) & PSTATE_DAIF); - break; - default: - g_assert_not_reached(); - } -} - void HELPER(clear_pstate_ss)(CPUARMState *env) { env->pstate &= ~PSTATE_SS; diff --git a/target/arm/translate-a64.c b/target/arm/translate-a64.c index 4aa5a307e41..1e49d333655 100644 --- a/target/arm/translate-a64.c +++ b/target/arm/translate-a64.c @@ -1661,29 +1661,38 @@ static void handle_sync(DisasContext *s, uint32_t insn, static void handle_msr_i(DisasContext *s, uint32_t insn, unsigned int op1, unsigned int op2, unsigned int crm) { + TCGv_i32 t1; int op = op1 << 3 | op2; + + /* End the TB by default, chaining is ok. */ + s->base.is_jmp = DISAS_TOO_MANY; + switch (op) { case 0x05: /* SPSel */ if (s->current_el == 0) { - unallocated_encoding(s); - return; + goto do_unallocated; } - /* fall through */ - case 0x1e: /* DAIFSet */ - case 0x1f: /* DAIFClear */ - { - TCGv_i32 tcg_imm = tcg_const_i32(crm); - TCGv_i32 tcg_op = tcg_const_i32(op); - gen_a64_set_pc_im(s->pc - 4); - gen_helper_msr_i_pstate(cpu_env, tcg_op, tcg_imm); - tcg_temp_free_i32(tcg_imm); - tcg_temp_free_i32(tcg_op); - /* For DAIFClear, exit the cpu loop to re-evaluate pending IRQs. */ - gen_a64_set_pc_im(s->pc); - s->base.is_jmp = (op == 0x1f ? DISAS_EXIT : DISAS_JUMP); + t1 = tcg_const_i32(crm & PSTATE_SP); + gen_helper_msr_i_spsel(cpu_env, t1); + tcg_temp_free_i32(t1); break; - } + + case 0x1e: /* DAIFSet */ + t1 = tcg_const_i32(crm); + gen_helper_msr_i_daifset(cpu_env, t1); + tcg_temp_free_i32(t1); + break; + + case 0x1f: /* DAIFClear */ + t1 = tcg_const_i32(crm); + gen_helper_msr_i_daifclear(cpu_env, t1); + tcg_temp_free_i32(t1); + /* For DAIFClear, exit the cpu loop to re-evaluate pending IRQs. */ + s->base.is_jmp = DISAS_UPDATE; + break; + default: + do_unallocated: unallocated_encoding(s); return; } From patchwork Tue Mar 5 16:50:35 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Maydell X-Patchwork-Id: 159680 Delivered-To: patch@linaro.org Received: by 2002:a02:5cc1:0:0:0:0:0 with SMTP id w62csp5188647jad; Tue, 5 Mar 2019 08:56:48 -0800 (PST) X-Google-Smtp-Source: APXvYqwruTw6rjHXefKGRQ8otDLSToC8cD5rXqYt4wurt7eceOqzN3iASOt5xoj+GQpAcQtddnfd X-Received: by 2002:a25:16d7:: with SMTP id 206mr2956352ybw.335.1551805007977; Tue, 05 Mar 2019 08:56:47 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1551805007; cv=none; d=google.com; s=arc-20160816; b=ko9awZd7Qe9k+/tvoQDHOH4M/ldKiYvUb6L93lf8DgT6N1szrygPqkOQMZOsd7iIvS KdbvCQW4llq3lAdWgCagbCC3HFiiVJBVq1LaaRw9mmfRf4fAYW34rlWXKQY3IREk698y 0GF43VwWx2SglGoyvsvhFT6UdXu92dk8/2OYQwV6J6+hEvc7rAEQolGjs/lXy37UCvxy KpSlR9T39lFyY+0SbOY8KEi7P868zPxx2TcSwrM0enG+ygQ0Qz6O25qzUE3u8CuqNtlR warbqjt4vu+VvwdB8qK4G9MOoI+7gbb1Qf4bRtDnyNm6jEXw2ho+8ekLFNHzeQ1AWmd4 mYdg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:subject :content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:to:from:dkim-signature; bh=EDyr2piT8eh6n8gl9h9qI3HhLKCnFnXduVRUaxbET4o=; b=gAyPSh+79E/BNR/ZiAAMwfw8w4jE9Sqd9Ae62xJXmGJpPYJStpxZZCT/32D9EaNzhm Wiy1kZTLijaK301JqLQnQ07rI9WA6eeOI1rl3No6y15ojmGaW/LO9jVhxetHM8agBm+L XizCdK1mrAJvfUwxhbm/QSm2IBxx2PkINOyuSv8IIWkUQBJL73KLKFdn8mkaga4Iw/XM uZdpPrbQSvEyC6piycJ0M308g8P7XWLZkzWIlFq8nO6kcn3iGVR2J4UnX34Q7/+p6MlL fnlFaVTWFCQfVpY7bmOzMRBfVIfqWQfudxIETa9rMJ0vwJWejUvBHNHKPPCcU6WoC+3I Zogw== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=vwqvhsCz; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id y67si5280603yby.395.2019.03.05.08.56.47 for (version=TLS1 cipher=AES128-SHA bits=128/128); Tue, 05 Mar 2019 08:56:47 -0800 (PST) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; Authentication-Results: mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=vwqvhsCz; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([127.0.0.1]:45794 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h1DN1-0005AT-DE for patch@linaro.org; Tue, 05 Mar 2019 11:56:47 -0500 Received: from eggs.gnu.org ([209.51.188.92]:54531) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h1DHU-0001Zy-3Y for qemu-devel@nongnu.org; Tue, 05 Mar 2019 11:51:06 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1h1DHT-0000nK-2Q for qemu-devel@nongnu.org; Tue, 05 Mar 2019 11:51:04 -0500 Received: from mail-wr1-x434.google.com ([2a00:1450:4864:20::434]:45683) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1h1DHS-0000lw-Qg for qemu-devel@nongnu.org; Tue, 05 Mar 2019 11:51:03 -0500 Received: by mail-wr1-x434.google.com with SMTP id w17so10240582wrn.12 for ; Tue, 05 Mar 2019 08:51:02 -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=EDyr2piT8eh6n8gl9h9qI3HhLKCnFnXduVRUaxbET4o=; b=vwqvhsCzXC/Raz7V+okJlpN/TvG748azhlmnMaFCQd69W2lhsc3Amu9hR/C2+lwbiQ qX4B4Ha72b/sh8X0bbpKKoElv/8P9mOXmiq8LLbhiy64HqqzJjB443CgrV1UuX7kXFR9 c2/F1I6dCwAYv6kJRsAO/L8wPxXeVrJZSZaRzaIvyEoDhn9hogj9QeV+l4Jxsg3U36GO h2XjY48LWZJxqecPFXHWkDfXMUA5uLacfbof3yxl3PiQel0+WGGfOk98mOazNBG5WHyZ UmlEIA2aBiGTwJmCcvs5nWzgJ9fSSjNL0aP+rjW3flS2BFLpE+1JDlS58OZYNrHi0bcl 0uBw== 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=EDyr2piT8eh6n8gl9h9qI3HhLKCnFnXduVRUaxbET4o=; b=Jnemlo8281UVPiPmfTvzLNAz9ilLZY+JaxG6WaelWj7NPFn5myJ2Cu7S9ZbHvSN6hz CGXTkQLlBuK6OPvx0q36SuaqtwG6ptnxjvJ2hfNKJnDRAKhZbcdXQkQC+m5puYKDMn3G Z5pd5lTUBqwlhSMSdxAdRNzt6GkWhcS2mjO3GGV0LgbvJvddeEAUGa45+iKA8ox/1/9f 6vfDlkU0w0HPFPvTdqogOYbxLr7c5jCqZjNyp3/pCYqhN/DGYJXplPuDYuPVyCcxA/1O NJBPplpApOnbNWOIGb1BAb+v/2Lqwnas6WAqCJjEwcACIUt5ftCc6C4+9wYxc2U+0PsO JaVg== X-Gm-Message-State: APjAAAVKwDEk2EMziG9HA36R2z5Djrj2YVSa8fhzbxaHXTk/2XEDovH8 jKaoAklnsRxSdkSUg4q2UXWHioFn13E= X-Received: by 2002:adf:824b:: with SMTP id 69mr17706761wrb.24.1551804661400; Tue, 05 Mar 2019 08:51:01 -0800 (PST) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id 2sm10071495wrg.89.2019.03.05.08.51.00 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 05 Mar 2019 08:51:00 -0800 (PST) From: Peter Maydell To: qemu-devel@nongnu.org Date: Tue, 5 Mar 2019 16:50:35 +0000 Message-Id: <20190305165051.26860-7-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190305165051.26860-1-peter.maydell@linaro.org> References: <20190305165051.26860-1-peter.maydell@linaro.org> MIME-Version: 1.0 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 06/22] target/arm: Add set/clear_pstate_bits, share gen_ss_advance 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+patch=linaro.org@nongnu.org Sender: "Qemu-devel" From: Richard Henderson We do not need an out-of-line helper for manipulating bits in pstate. While changing things, share the implementation of gen_ss_advance. Signed-off-by: Richard Henderson Message-id: 20190301200501.16533-6-richard.henderson@linaro.org Reviewed-by: Peter Maydell Signed-off-by: Peter Maydell --- target/arm/helper.h | 2 -- target/arm/translate.h | 34 ++++++++++++++++++++++++++++++++++ target/arm/op_helper.c | 5 ----- target/arm/translate-a64.c | 11 ----------- target/arm/translate.c | 11 ----------- 5 files changed, 34 insertions(+), 29 deletions(-) -- 2.20.1 diff --git a/target/arm/helper.h b/target/arm/helper.h index 6f0f3869262..583adba9b04 100644 --- a/target/arm/helper.h +++ b/target/arm/helper.h @@ -77,8 +77,6 @@ DEF_HELPER_2(get_cp_reg, i32, env, ptr) DEF_HELPER_3(set_cp_reg64, void, env, ptr, i64) DEF_HELPER_2(get_cp_reg64, i64, env, ptr) -DEF_HELPER_1(clear_pstate_ss, void, env) - DEF_HELPER_2(get_r13_banked, i32, env, i32) DEF_HELPER_3(set_r13_banked, void, env, i32, i32) diff --git a/target/arm/translate.h b/target/arm/translate.h index f25fe756859..912cc2a4a52 100644 --- a/target/arm/translate.h +++ b/target/arm/translate.h @@ -202,6 +202,40 @@ static inline TCGv_i32 get_ahp_flag(void) return ret; } +/* Set bits within PSTATE. */ +static inline void set_pstate_bits(uint32_t bits) +{ + TCGv_i32 p = tcg_temp_new_i32(); + + tcg_debug_assert(!(bits & CACHED_PSTATE_BITS)); + + tcg_gen_ld_i32(p, cpu_env, offsetof(CPUARMState, pstate)); + tcg_gen_ori_i32(p, p, bits); + tcg_gen_st_i32(p, cpu_env, offsetof(CPUARMState, pstate)); + tcg_temp_free_i32(p); +} + +/* Clear bits within PSTATE. */ +static inline void clear_pstate_bits(uint32_t bits) +{ + TCGv_i32 p = tcg_temp_new_i32(); + + tcg_debug_assert(!(bits & CACHED_PSTATE_BITS)); + + tcg_gen_ld_i32(p, cpu_env, offsetof(CPUARMState, pstate)); + tcg_gen_andi_i32(p, p, ~bits); + tcg_gen_st_i32(p, cpu_env, offsetof(CPUARMState, pstate)); + tcg_temp_free_i32(p); +} + +/* If the singlestep state is Active-not-pending, advance to Active-pending. */ +static inline void gen_ss_advance(DisasContext *s) +{ + if (s->ss_active) { + s->pstate_ss = 0; + clear_pstate_bits(PSTATE_SS); + } +} /* Vector operations shared between ARM and AArch64. */ extern const GVecGen3 bsl_op; diff --git a/target/arm/op_helper.c b/target/arm/op_helper.c index c5721a866d3..8698b4dc83e 100644 --- a/target/arm/op_helper.c +++ b/target/arm/op_helper.c @@ -861,11 +861,6 @@ uint64_t HELPER(get_cp_reg64)(CPUARMState *env, void *rip) return res; } -void HELPER(clear_pstate_ss)(CPUARMState *env) -{ - env->pstate &= ~PSTATE_SS; -} - void HELPER(pre_hvc)(CPUARMState *env) { ARMCPU *cpu = arm_env_get_cpu(env); diff --git a/target/arm/translate-a64.c b/target/arm/translate-a64.c index 1e49d333655..eaeb43577df 100644 --- a/target/arm/translate-a64.c +++ b/target/arm/translate-a64.c @@ -421,17 +421,6 @@ static void gen_exception_bkpt_insn(DisasContext *s, int offset, s->base.is_jmp = DISAS_NORETURN; } -static void gen_ss_advance(DisasContext *s) -{ - /* If the singlestep state is Active-not-pending, advance to - * Active-pending. - */ - if (s->ss_active) { - s->pstate_ss = 0; - gen_helper_clear_pstate_ss(cpu_env); - } -} - static void gen_step_complete_exception(DisasContext *s) { /* We just completed step of an insn. Move from Active-not-pending diff --git a/target/arm/translate.c b/target/arm/translate.c index 9f71206f857..d408e4d7ef4 100644 --- a/target/arm/translate.c +++ b/target/arm/translate.c @@ -298,17 +298,6 @@ static void gen_exception(int excp, uint32_t syndrome, uint32_t target_el) tcg_temp_free_i32(tcg_excp); } -static void gen_ss_advance(DisasContext *s) -{ - /* If the singlestep state is Active-not-pending, advance to - * Active-pending. - */ - if (s->ss_active) { - s->pstate_ss = 0; - gen_helper_clear_pstate_ss(cpu_env); - } -} - static void gen_step_complete_exception(DisasContext *s) { /* We just completed step of an insn. Move from Active-not-pending From patchwork Tue Mar 5 16:50:36 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Maydell X-Patchwork-Id: 159688 Delivered-To: patch@linaro.org Received: by 2002:a02:5cc1:0:0:0:0:0 with SMTP id w62csp5194815jad; Tue, 5 Mar 2019 09:02:38 -0800 (PST) X-Google-Smtp-Source: APXvYqw9wIheWMtG83iAQNPykySE13aey/YyoQQ7weFyat64I0PlSKm0d+R60MIuaXkaXgE8Q7Of X-Received: by 2002:a25:418d:: with SMTP id o135mr2999476yba.365.1551805358177; Tue, 05 Mar 2019 09:02:38 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1551805358; cv=none; d=google.com; s=arc-20160816; b=WBN+9ZZ1n1L9OhDpSIr9IPcO/2hEUeLnrkDmWkFOBjAGM8Utex2JWUSpfXpS/VtduH ++1UTUVe4Ym6aMsBs68Ch1P4pH4CgsuW3oteVxBCBAiL26waQf9w+xqq+gx/nh8b0zvu B94NS7TkSNMLFz8OxeNGaOUFR8JeOTzs42Rjz+AeDubGxODiI4I8OU5UROH3lOxQdXPz DPS8kONjKfj+9crqLYJv6pFg5Yj43HSucmjgCKodWJaBpOR/Wsoo0zSUlsk/hpLt0Nrl OCqMYoXVIFxOdeYdelWiW4iI6TqC0p97Is4WlZvxFxwD43uHn8dwIJua9VcXADcb/W9k avrQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:subject :content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:to:from:dkim-signature; bh=6okvE7uC7mBDYDrWvZ0cqfGHbi6R3ezFCBMDjGZAc2A=; b=DtPJC7XWbIc/pF5U0bmoP5t5jKd/WLgO0+RxKI0b+S6Q49Mtq0TidcRSZdcz5MyzaD c2m8Htck2c8fYrtJBhdTEapLu/zSWmsb1yJajyPSMNmbY3b4WL+DipijkevaqZi0K5dq KKaDF6YT10hEXwyf8dIANPbxfV6cvORQoJZxHftfUzG/emlc1bt5O26ZjT7GAAAmoAZ9 HSfSQDxL2pfaBliC8zrU/2ILiz/dj8cvjn8rhlGV+whqHHMj0gke0bA+JPP1vVun8/0o 24YJK23M+D2B11eAbFKQD54mWC5NVMyrpvn4imuySS0+grnTYALfueIWuPeqWzQfZrL0 0w+A== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=WBU4qNCg; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id 8si5367683ybf.253.2019.03.05.09.02.38 for (version=TLS1 cipher=AES128-SHA bits=128/128); Tue, 05 Mar 2019 09:02:38 -0800 (PST) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; Authentication-Results: mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=WBU4qNCg; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([127.0.0.1]:45894 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h1DSf-0001v5-KV for patch@linaro.org; Tue, 05 Mar 2019 12:02:37 -0500 Received: from eggs.gnu.org ([209.51.188.92]:54602) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h1DHZ-0001dC-VN for qemu-devel@nongnu.org; Tue, 05 Mar 2019 11:51:12 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1h1DHT-0000op-Vd for qemu-devel@nongnu.org; Tue, 05 Mar 2019 11:51:09 -0500 Received: from mail-wr1-x436.google.com ([2a00:1450:4864:20::436]:41450) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1h1DHT-0000nW-O2 for qemu-devel@nongnu.org; Tue, 05 Mar 2019 11:51:03 -0500 Received: by mail-wr1-x436.google.com with SMTP id n2so10244447wrw.8 for ; Tue, 05 Mar 2019 08:51:03 -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=6okvE7uC7mBDYDrWvZ0cqfGHbi6R3ezFCBMDjGZAc2A=; b=WBU4qNCgjrwmgFTvMSMCESN/6rDZc7V3eivFs+o7uCGeCLJ8mCnek3hOfxhpS245Ks y3oQDaqBitgdVrdTqyYZe+JGI1D6sNDQUSSTf/t4zfh+ryJOfFZpP2O30t7vqnFNoCZo Mrb+kBfjkB0NmAATCL56O/ktHg8MplhTps+VNi/JBRp+XOJ07IlLm9nAuGjeRpXlJ6nG vFAl7rfgwy5gDbI+2cufWxbhz48bBcMPprW5jdIOFp3ck6xToyiVTUur6weYPMzd2aNA Ti9NMXMF2dEcadhGWzcw+v3XF/wmrr22LUlZlMgZpi97+lZb/e0h0NNjMGvZ3RfngpK5 XOJQ== 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=6okvE7uC7mBDYDrWvZ0cqfGHbi6R3ezFCBMDjGZAc2A=; b=hZtz+YxWQZ5oc79e/XRyophH1HdVmJiHaAAWUlUx94S2DjgP1OPRD2iMqmO9CzoZto HN4yPvScQs8UN88141fHE/hFY0hP+bn+A7XMABbMy7zjLyXTw8awEMFK73oG32FtsOAR u+3Linyf17AML3wOhLzTQwA1P8dl0fxwWqjTZgOhNkAT1Hvy/+78gjVHdxbAwLxIbC3d 3mBXqAQfAOdvcFXcngW0UouMrkENB9GhQfC55kNwm9qv7kKXaZmpBXuOzgwKJ9moQ7uV QpG5DnR0L6mnT3DgVZS3NRcwuNdDWicuD1TisWUACH/YefR34wuoN1HAnYx5pbTHOrkm KwlA== X-Gm-Message-State: APjAAAV6j+Fwel02934MApk+8eLjR6vaL/wg9qH/0uNWEpEA1nqsGrIr TcHRcjSXrLHCw+urETSc60in7e2f1lo= X-Received: by 2002:adf:d0c9:: with SMTP id z9mr16805099wrh.132.1551804662472; Tue, 05 Mar 2019 08:51:02 -0800 (PST) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id 2sm10071495wrg.89.2019.03.05.08.51.01 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 05 Mar 2019 08:51:01 -0800 (PST) From: Peter Maydell To: qemu-devel@nongnu.org Date: Tue, 5 Mar 2019 16:50:36 +0000 Message-Id: <20190305165051.26860-8-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190305165051.26860-1-peter.maydell@linaro.org> References: <20190305165051.26860-1-peter.maydell@linaro.org> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::436 Subject: [Qemu-devel] [PULL 07/22] target/arm: Rearrange disas_data_proc_reg 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+patch=linaro.org@nongnu.org Sender: "Qemu-devel" From: Richard Henderson This decoding more closely matches the ARMv8.4 Table C4-6, Encoding table for Data Processing - Register Group. In particular, op2 == 0 is now more than just Add/sub (with carry). Signed-off-by: Richard Henderson Message-id: 20190301200501.16533-7-richard.henderson@linaro.org Reviewed-by: Peter Maydell Signed-off-by: Peter Maydell --- target/arm/translate-a64.c | 98 ++++++++++++++++++++++---------------- 1 file changed, 57 insertions(+), 41 deletions(-) -- 2.20.1 diff --git a/target/arm/translate-a64.c b/target/arm/translate-a64.c index eaeb43577df..12d2649c204 100644 --- a/target/arm/translate-a64.c +++ b/target/arm/translate-a64.c @@ -4494,11 +4494,10 @@ static void disas_data_proc_3src(DisasContext *s, uint32_t insn) } /* Add/subtract (with carry) - * 31 30 29 28 27 26 25 24 23 22 21 20 16 15 10 9 5 4 0 - * +--+--+--+------------------------+------+---------+------+-----+ - * |sf|op| S| 1 1 0 1 0 0 0 0 | rm | opcode2 | Rn | Rd | - * +--+--+--+------------------------+------+---------+------+-----+ - * [000000] + * 31 30 29 28 27 26 25 24 23 22 21 20 16 15 10 9 5 4 0 + * +--+--+--+------------------------+------+-------------+------+-----+ + * |sf|op| S| 1 1 0 1 0 0 0 0 | rm | 0 0 0 0 0 0 | Rn | Rd | + * +--+--+--+------------------------+------+-------------+------+-----+ */ static void disas_adc_sbc(DisasContext *s, uint32_t insn) @@ -4506,11 +4505,6 @@ static void disas_adc_sbc(DisasContext *s, uint32_t insn) unsigned int sf, op, setflags, rm, rn, rd; TCGv_i64 tcg_y, tcg_rn, tcg_rd; - if (extract32(insn, 10, 6) != 0) { - unallocated_encoding(s); - return; - } - sf = extract32(insn, 31, 1); op = extract32(insn, 30, 1); setflags = extract32(insn, 29, 1); @@ -5164,47 +5158,69 @@ static void disas_data_proc_2src(DisasContext *s, uint32_t insn) } } -/* Data processing - register */ +/* + * Data processing - register + * 31 30 29 28 25 21 20 16 10 0 + * +--+---+--+---+-------+-----+-------+-------+---------+ + * | |op0| |op1| 1 0 1 | op2 | | op3 | | + * +--+---+--+---+-------+-----+-------+-------+---------+ + */ static void disas_data_proc_reg(DisasContext *s, uint32_t insn) { - switch (extract32(insn, 24, 5)) { - case 0x0a: /* Logical (shifted register) */ - disas_logic_reg(s, insn); - break; - case 0x0b: /* Add/subtract */ - if (insn & (1 << 21)) { /* (extended register) */ - disas_add_sub_ext_reg(s, insn); + int op0 = extract32(insn, 30, 1); + int op1 = extract32(insn, 28, 1); + int op2 = extract32(insn, 21, 4); + int op3 = extract32(insn, 10, 6); + + if (!op1) { + if (op2 & 8) { + if (op2 & 1) { + /* Add/sub (extended register) */ + disas_add_sub_ext_reg(s, insn); + } else { + /* Add/sub (shifted register) */ + disas_add_sub_reg(s, insn); + } } else { - disas_add_sub_reg(s, insn); + /* Logical (shifted register) */ + disas_logic_reg(s, insn); } - break; - case 0x1b: /* Data-processing (3 source) */ - disas_data_proc_3src(s, insn); - break; - case 0x1a: - switch (extract32(insn, 21, 3)) { - case 0x0: /* Add/subtract (with carry) */ + return; + } + + switch (op2) { + case 0x0: + switch (op3) { + case 0x00: /* Add/subtract (with carry) */ disas_adc_sbc(s, insn); break; - case 0x2: /* Conditional compare */ - disas_cc(s, insn); /* both imm and reg forms */ - break; - case 0x4: /* Conditional select */ - disas_cond_select(s, insn); - break; - case 0x6: /* Data-processing */ - if (insn & (1 << 30)) { /* (1 source) */ - disas_data_proc_1src(s, insn); - } else { /* (2 source) */ - disas_data_proc_2src(s, insn); - } - break; + default: - unallocated_encoding(s); - break; + goto do_unallocated; } break; + + case 0x2: /* Conditional compare */ + disas_cc(s, insn); /* both imm and reg forms */ + break; + + case 0x4: /* Conditional select */ + disas_cond_select(s, insn); + break; + + case 0x6: /* Data-processing */ + if (op0) { /* (1 source) */ + disas_data_proc_1src(s, insn); + } else { /* (2 source) */ + disas_data_proc_2src(s, insn); + } + break; + case 0x8 ... 0xf: /* (3 source) */ + disas_data_proc_3src(s, insn); + break; + default: + do_unallocated: unallocated_encoding(s); break; } From patchwork Tue Mar 5 16:50:37 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Maydell X-Patchwork-Id: 159681 Delivered-To: patch@linaro.org Received: by 2002:a02:5cc1:0:0:0:0:0 with SMTP id w62csp5188794jad; Tue, 5 Mar 2019 08:56:57 -0800 (PST) X-Google-Smtp-Source: APXvYqwe4/i4lSfkEMuNA6ANsKnDvSEtkoCuO8+8yTKgC8k4nTVOuOpQ8TP+jSirhyQEiMtDFmYK X-Received: by 2002:a25:e08e:: with SMTP id x136mr3041394ybg.326.1551805017881; Tue, 05 Mar 2019 08:56:57 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1551805017; cv=none; d=google.com; s=arc-20160816; b=rmGfISuNF4lQCcIxa02ibXXFs2oeMeh4nD2VqiopMZCDLCaHJOHwr/Gy3RMLFfiul7 6IuX+P+Ts3po8XvSF586oIdPnTRvu65g5Oc6Zm6Mkympeg1pcLWtvUJkcHV8NpLaE3fl +3e75y14H9FGpmkDdKLxgASzNqD105I5PTAoX7B+8SfS9bQQnObVinF/TOfos5JaRBj+ 9Qywa6M3PWwtMcQQP+NPSpw0re6SPzvTe8ql8tvml6SErbhhuWlTYProBdlveBZiDUd4 RC3XG4Hf03xyOSHA2BQT+p3KtPy93tqS5cbeWIr+XgHcJiyGXcCq21IbTqcpnMimiYad VOIA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:subject :content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:to:from:dkim-signature; bh=pst1NFAs0J0OzpJurEJPfYEB9/dNd7bzOWfgCBqK4d4=; b=lG2ZxyrDdB07cN0FRj2TGrIY+srdwYa8SuYaZoMhbll8n8OTxVCQYKXclXwbhDgoin Ys0dhlIb/0gG7b26gaKW1Ngljp5VyUtj3JTcppdsDGLF76Kq3LambvihlqWytBQqQpdb ggwguN+sejuUTAHnUxupfQMPqyAcrYguVTfyE6l0M9zb99duaz1gju2FeXsoQW5sYFuh RWpuXaAF1OG87yIvW1ytLaKQYTSVMtZkIeTcDLp+gu1hVFE+t13gvlW34vFKveoPOkh9 E4uRTVbPn8AaSG8aJvn/RDVswX9CRA+7wddRXskRoBKoGu/KJ78lSltJRYo5BIbAE/6t WU/w== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=dP3rtVtb; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id n81si5522332ywb.129.2019.03.05.08.56.57 for (version=TLS1 cipher=AES128-SHA bits=128/128); Tue, 05 Mar 2019 08:56:57 -0800 (PST) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; Authentication-Results: mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=dP3rtVtb; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([127.0.0.1]:45801 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h1DNB-0005Mz-Ak for patch@linaro.org; Tue, 05 Mar 2019 11:56:57 -0500 Received: from eggs.gnu.org ([209.51.188.92]:54558) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h1DHW-0001a1-BF for qemu-devel@nongnu.org; Tue, 05 Mar 2019 11:51:07 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1h1DHV-0000qY-60 for qemu-devel@nongnu.org; Tue, 05 Mar 2019 11:51:06 -0500 Received: from mail-wm1-x335.google.com ([2a00:1450:4864:20::335]:55433) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1h1DHU-0000pG-UA for qemu-devel@nongnu.org; Tue, 05 Mar 2019 11:51:05 -0500 Received: by mail-wm1-x335.google.com with SMTP id q187so3269226wme.5 for ; Tue, 05 Mar 2019 08:51:04 -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=pst1NFAs0J0OzpJurEJPfYEB9/dNd7bzOWfgCBqK4d4=; b=dP3rtVtbjmKVv0HNnWIrNUSYoTC7PJAqAITb4p2+b5gB2cVLTnSJRz1FEbJ7OQZjS0 uY+wDjZe0++OlyrsELRSOWJVvQzkpqqiq1RHHlNi5AbeO5oJ3Vz1SKHKa7+RBppzpQZo NZAIYdbjHOEQ6uNUKf/Uvf0/bhlxEWhSiBfANg7Lm4/wx/TVwtAMDX1iw5iGjb38YSBG 52QKT3q1rR8Xso20o2EmnqC6UAdDJhyW/Fs8NMPXrj3IxTOsBXoLdbZhYLOIDlMp561o 683w4sNDWQGEsz2e3z1ZZhWmN/c0LTKf7JjVyyfpWBrdv2QBF/xAHFPt2Ui6kHC2Bwu5 ttnA== 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=pst1NFAs0J0OzpJurEJPfYEB9/dNd7bzOWfgCBqK4d4=; b=pAksNN+LAJ6wz8qXoEX4lQZxk8xFjbfxvSo7Jb2It/Tenne5m6RJhq6JAErq6zGPmx bM0KO+7Yai6wO0uvfoHnedFXedQ9nwn5rXhFiEgy8Zu0ffdrZgKV3eWRjTB0uC2kpJQf DPK4v3WHNXFq9yaMuj5UTdiiWTHuLAPDPLNHS52pCqzSOOTmaNA98v+b6wA+6TIc2Prk je1H8n5JkFIfGcCcNcU1sgYSJU6D5rErtmPdg+/Z0cnDxqsbZqIB9HZg2sMh4pvj0/m+ YR/9S5C9d0IOUzL+1N3RQK8doDFeMqzfKntkZcPN78ywxbELDyRdFjpq6Xu76FSTnRjG P+kQ== X-Gm-Message-State: APjAAAW1SVecO7gZQBbxkPdT4R9qpp4EnR+CHLJYFFCz0+tiAna+4Fx/ oxEsCa0tNYJpzdSrt6KZ7wwbSrEfdPQ= X-Received: by 2002:a1c:dc0a:: with SMTP id t10mr3360873wmg.101.1551804663530; Tue, 05 Mar 2019 08:51:03 -0800 (PST) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id 2sm10071495wrg.89.2019.03.05.08.51.02 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 05 Mar 2019 08:51:02 -0800 (PST) From: Peter Maydell To: qemu-devel@nongnu.org Date: Tue, 5 Mar 2019 16:50:37 +0000 Message-Id: <20190305165051.26860-9-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190305165051.26860-1-peter.maydell@linaro.org> References: <20190305165051.26860-1-peter.maydell@linaro.org> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::335 Subject: [Qemu-devel] [PULL 08/22] target/arm: Implement ARMv8.4-CondM 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+patch=linaro.org@nongnu.org Sender: "Qemu-devel" From: Richard Henderson Tested-by: Laurent Desnogues Signed-off-by: Richard Henderson Message-id: 20190301200501.16533-8-richard.henderson@linaro.org Reviewed-by: Peter Maydell [PMM: fixed up block comment style] Signed-off-by: Peter Maydell --- target/arm/cpu.h | 5 ++ linux-user/elfload.c | 1 + target/arm/cpu64.c | 1 + target/arm/translate-a64.c | 99 +++++++++++++++++++++++++++++++++++++- 4 files changed, 105 insertions(+), 1 deletion(-) -- 2.20.1 diff --git a/target/arm/cpu.h b/target/arm/cpu.h index c822f94236c..fc2909ea6dc 100644 --- a/target/arm/cpu.h +++ b/target/arm/cpu.h @@ -3431,6 +3431,11 @@ static inline bool isar_feature_aa64_fhm(const ARMISARegisters *id) return FIELD_EX64(id->id_aa64isar0, ID_AA64ISAR0, FHM) != 0; } +static inline bool isar_feature_aa64_condm_4(const ARMISARegisters *id) +{ + return FIELD_EX64(id->id_aa64isar0, ID_AA64ISAR0, TS) != 0; +} + static inline bool isar_feature_aa64_jscvt(const ARMISARegisters *id) { return FIELD_EX64(id->id_aa64isar1, ID_AA64ISAR1, JSCVT) != 0; diff --git a/linux-user/elfload.c b/linux-user/elfload.c index 6cfebe1446d..6e8762b40de 100644 --- a/linux-user/elfload.c +++ b/linux-user/elfload.c @@ -605,6 +605,7 @@ static uint32_t get_elf_hwcap(void) GET_FEATURE_ID(aa64_fhm, ARM_HWCAP_A64_ASIMDFHM); GET_FEATURE_ID(aa64_jscvt, ARM_HWCAP_A64_JSCVT); GET_FEATURE_ID(aa64_sb, ARM_HWCAP_A64_SB); + GET_FEATURE_ID(aa64_condm_4, ARM_HWCAP_A64_FLAGM); #undef GET_FEATURE_ID diff --git a/target/arm/cpu64.c b/target/arm/cpu64.c index 87337b63855..fcf79321e2f 100644 --- a/target/arm/cpu64.c +++ b/target/arm/cpu64.c @@ -309,6 +309,7 @@ static void aarch64_max_initfn(Object *obj) t = FIELD_DP64(t, ID_AA64ISAR0, SM4, 1); t = FIELD_DP64(t, ID_AA64ISAR0, DP, 1); t = FIELD_DP64(t, ID_AA64ISAR0, FHM, 1); + t = FIELD_DP64(t, ID_AA64ISAR0, TS, 1); cpu->isar.id_aa64isar0 = t; t = cpu->isar.id_aa64isar1; diff --git a/target/arm/translate-a64.c b/target/arm/translate-a64.c index 12d2649c204..3cc9a99a9cb 100644 --- a/target/arm/translate-a64.c +++ b/target/arm/translate-a64.c @@ -1657,6 +1657,14 @@ static void handle_msr_i(DisasContext *s, uint32_t insn, s->base.is_jmp = DISAS_TOO_MANY; switch (op) { + case 0x00: /* CFINV */ + if (crm != 0 || !dc_isar_feature(aa64_condm_4, s)) { + goto do_unallocated; + } + tcg_gen_xori_i32(cpu_CF, cpu_CF, 1); + s->base.is_jmp = DISAS_NEXT; + break; + case 0x05: /* SPSel */ if (s->current_el == 0) { goto do_unallocated; @@ -1710,7 +1718,6 @@ static void gen_get_nzcv(TCGv_i64 tcg_rt) } static void gen_set_nzcv(TCGv_i64 tcg_rt) - { TCGv_i32 nzcv = tcg_temp_new_i32(); @@ -4529,6 +4536,84 @@ static void disas_adc_sbc(DisasContext *s, uint32_t insn) } } +/* + * Rotate right into flags + * 31 30 29 21 15 10 5 4 0 + * +--+--+--+-----------------+--------+-----------+------+--+------+ + * |sf|op| S| 1 1 0 1 0 0 0 0 | imm6 | 0 0 0 0 1 | Rn |o2| mask | + * +--+--+--+-----------------+--------+-----------+------+--+------+ + */ +static void disas_rotate_right_into_flags(DisasContext *s, uint32_t insn) +{ + int mask = extract32(insn, 0, 4); + int o2 = extract32(insn, 4, 1); + int rn = extract32(insn, 5, 5); + int imm6 = extract32(insn, 15, 6); + int sf_op_s = extract32(insn, 29, 3); + TCGv_i64 tcg_rn; + TCGv_i32 nzcv; + + if (sf_op_s != 5 || o2 != 0 || !dc_isar_feature(aa64_condm_4, s)) { + unallocated_encoding(s); + return; + } + + tcg_rn = read_cpu_reg(s, rn, 1); + tcg_gen_rotri_i64(tcg_rn, tcg_rn, imm6); + + nzcv = tcg_temp_new_i32(); + tcg_gen_extrl_i64_i32(nzcv, tcg_rn); + + if (mask & 8) { /* N */ + tcg_gen_shli_i32(cpu_NF, nzcv, 31 - 3); + } + if (mask & 4) { /* Z */ + tcg_gen_not_i32(cpu_ZF, nzcv); + tcg_gen_andi_i32(cpu_ZF, cpu_ZF, 4); + } + if (mask & 2) { /* C */ + tcg_gen_extract_i32(cpu_CF, nzcv, 1, 1); + } + if (mask & 1) { /* V */ + tcg_gen_shli_i32(cpu_VF, nzcv, 31 - 0); + } + + tcg_temp_free_i32(nzcv); +} + +/* + * Evaluate into flags + * 31 30 29 21 15 14 10 5 4 0 + * +--+--+--+-----------------+---------+----+---------+------+--+------+ + * |sf|op| S| 1 1 0 1 0 0 0 0 | opcode2 | sz | 0 0 1 0 | Rn |o3| mask | + * +--+--+--+-----------------+---------+----+---------+------+--+------+ + */ +static void disas_evaluate_into_flags(DisasContext *s, uint32_t insn) +{ + int o3_mask = extract32(insn, 0, 5); + int rn = extract32(insn, 5, 5); + int o2 = extract32(insn, 15, 6); + int sz = extract32(insn, 14, 1); + int sf_op_s = extract32(insn, 29, 3); + TCGv_i32 tmp; + int shift; + + if (sf_op_s != 1 || o2 != 0 || o3_mask != 0xd || + !dc_isar_feature(aa64_condm_4, s)) { + unallocated_encoding(s); + return; + } + shift = sz ? 16 : 24; /* SETF16 or SETF8 */ + + tmp = tcg_temp_new_i32(); + tcg_gen_extrl_i64_i32(tmp, cpu_reg(s, rn)); + tcg_gen_shli_i32(cpu_NF, tmp, shift); + tcg_gen_shli_i32(cpu_VF, tmp, shift - 1); + tcg_gen_mov_i32(cpu_ZF, cpu_NF); + tcg_gen_xor_i32(cpu_VF, cpu_VF, cpu_NF); + tcg_temp_free_i32(tmp); +} + /* Conditional compare (immediate / register) * 31 30 29 28 27 26 25 24 23 22 21 20 16 15 12 11 10 9 5 4 3 0 * +--+--+--+------------------------+--------+------+----+--+------+--+-----+ @@ -5195,6 +5280,18 @@ static void disas_data_proc_reg(DisasContext *s, uint32_t insn) disas_adc_sbc(s, insn); break; + case 0x01: /* Rotate right into flags */ + case 0x21: + disas_rotate_right_into_flags(s, insn); + break; + + case 0x02: /* Evaluate into flags */ + case 0x12: + case 0x22: + case 0x32: + disas_evaluate_into_flags(s, insn); + break; + default: goto do_unallocated; } From patchwork Tue Mar 5 16:50:38 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Maydell X-Patchwork-Id: 159682 Delivered-To: patch@linaro.org Received: by 2002:a02:5cc1:0:0:0:0:0 with SMTP id w62csp5189076jad; Tue, 5 Mar 2019 08:57:15 -0800 (PST) X-Google-Smtp-Source: APXvYqwTKto7abLyaY+M+SQLuvnGHRsFYgQzfWE3s5Gt+kpIViyH0QYMpeAzZ7kbQ/cvO8pVoJoX X-Received: by 2002:a25:20c2:: with SMTP id g185mr2885665ybg.91.1551805035340; Tue, 05 Mar 2019 08:57:15 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1551805035; cv=none; d=google.com; s=arc-20160816; b=xS7saTJQwsSEuhfVKj41uimnvcZfEyZRIgWP/aQF0ZC98jC5VD4o0CCm6bdzWK13S0 7sNWMGs8arBBsfwJTj7Gyv7EhT8Gq36S8oXkZKNN1u+x14B+d+/vAYsz5uzEHGM1X9zN 7wBaQehcoexsVTSY794mKUiX9Kgc4ZqmguUCC4+F1lQriD02SVXqYKW0S3DJi/W8Gvrg RHFJ46Nhq9WC/TkzJnhSCIQw0dcXY11QfG0cbn+X0yMUTVCIqaBCBIIWbYJWiqJhgsbn 5qZezFsbTaOmtPRUKu8jk5x9ja0alNiUfLIFOgGKqBZ26nVL7iEfhyopc2T/gL9my1cZ edlQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:subject :content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:to:from:dkim-signature; bh=tCUFi8KL/iSAnR6rUeS/eCrgxPaDmrB63r4RMOCGA/M=; b=luwFT3E3ALUPyrdhSJggsrlnNnF1YktMNAXGWYEwaFrDuAnG8tJuPTucAhp6vHgfeU pUZsVlzj+DlxWCPqHg31KEpmwJQmJ01VzyYqGTj++59fTAwYZeziJEjOOiVUW0JtuOVY 71U+oE1qlNQMEk6LRvYQY1CZcjnhIeAbbG4flBhxPyJyv2DcMTNbai5GmsiE9Orzop/n /nRZNyPv0vgFsbFG0I30RlpD6NBFTy2a7USXEzrbmr0kznfexhVd68HvfJbnCsXNeT2k QY8VVqh9iOSWXemkAHoKznDaTAUAV9StabBFIy+ipPzOTBq+RrHDd5Dwqkc+tmcY09KA QxkA== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=GsLDi6LW; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id c15si2525558ybq.282.2019.03.05.08.57.15 for (version=TLS1 cipher=AES128-SHA bits=128/128); Tue, 05 Mar 2019 08:57:15 -0800 (PST) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; Authentication-Results: mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=GsLDi6LW; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([127.0.0.1]:45805 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h1DNS-0006SQ-Op for patch@linaro.org; Tue, 05 Mar 2019 11:57:14 -0500 Received: from eggs.gnu.org ([209.51.188.92]:54571) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h1DHX-0001aH-4k for qemu-devel@nongnu.org; Tue, 05 Mar 2019 11:51:08 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1h1DHW-0000rN-69 for qemu-devel@nongnu.org; Tue, 05 Mar 2019 11:51:07 -0500 Received: from mail-wr1-x42b.google.com ([2a00:1450:4864:20::42b]:37843) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1h1DHV-0000qe-VB for qemu-devel@nongnu.org; Tue, 05 Mar 2019 11:51:06 -0500 Received: by mail-wr1-x42b.google.com with SMTP id w6so10241974wrs.4 for ; Tue, 05 Mar 2019 08:51:05 -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=tCUFi8KL/iSAnR6rUeS/eCrgxPaDmrB63r4RMOCGA/M=; b=GsLDi6LWcKZVYS+6ApCAlwRW0oCoOT9non+76TMWLOXTGhXAkcKkQTY/rsTh7W0+j7 +b8tEwefnSkXQNTx7y/IiqJarcY+HDUvcYvGEUYzp+KLnOmI+QefeqzxWSHNpgzfkejA LN4n77r78srvgMqRw1sSkfqNIh3ecBDInfEVYkWaIFMigjETCVfvTpggeAXNTPz8n9eF UxU60SXAzZWVTN2cXhxPqJ7tO341s7PKniAYoT9FMBxINzrSacRfoLwU1wP0T17M93DJ VG4dmrfscPn9NlNx5S5mkIXQkSOM7B4l8xNLJHGmornj8eQu9Oey7o/zlb6jWfSCpahN PaHw== 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=tCUFi8KL/iSAnR6rUeS/eCrgxPaDmrB63r4RMOCGA/M=; b=J1HiSoFoHpzg6TxGWY4NuZYN+KWOWwHGNZ5UfVM0TVWifL90aYAdDa93pFAmnNaVF3 2JFLzu4EGjLYI20Y1is54CjS2iQtWfJvp8iUSboz1vORuolFQa5LTnILR+cePSLscpNV Xps9AoSzLuiex6u9nFKYWzSh5h4y3rFna3DC3zJesQbFs7K7Uk/rCQyXXc1rDBHnYO9f YRQMHeqXbiB9VEV0p6HykA/PkT2SilqnhbjVSyj1kF38sLoIg9SHnj+2ExrpqpnCgDOB gxfdgy4gWK4G5s59zAiNMdqJuqD29k3LCYf4IKXSO0oqDeSRS4JsgO0ByBrKQu6bDVxM z82w== X-Gm-Message-State: APjAAAVowUOKmiAmcbaI1rZhmEoMEpPyraAIhm/zE3RrRbG4gVpFBy97 pEk1giSel34GTB4fFRHt1l/u+rVVnRY= X-Received: by 2002:a5d:55c5:: with SMTP id i5mr18600294wrw.245.1551804664556; Tue, 05 Mar 2019 08:51:04 -0800 (PST) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id 2sm10071495wrg.89.2019.03.05.08.51.03 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 05 Mar 2019 08:51:03 -0800 (PST) From: Peter Maydell To: qemu-devel@nongnu.org Date: Tue, 5 Mar 2019 16:50:38 +0000 Message-Id: <20190305165051.26860-10-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190305165051.26860-1-peter.maydell@linaro.org> References: <20190305165051.26860-1-peter.maydell@linaro.org> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::42b Subject: [Qemu-devel] [PULL 09/22] target/arm: Implement ARMv8.5-CondM 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+patch=linaro.org@nongnu.org Sender: "Qemu-devel" From: Richard Henderson Tested-by: Laurent Desnogues Signed-off-by: Richard Henderson Message-id: 20190301200501.16533-9-richard.henderson@linaro.org Reviewed-by: Peter Maydell Signed-off-by: Peter Maydell --- target/arm/cpu.h | 5 ++++ target/arm/cpu64.c | 2 +- target/arm/translate-a64.c | 58 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 64 insertions(+), 1 deletion(-) -- 2.20.1 diff --git a/target/arm/cpu.h b/target/arm/cpu.h index fc2909ea6dc..a7aaec63d74 100644 --- a/target/arm/cpu.h +++ b/target/arm/cpu.h @@ -3436,6 +3436,11 @@ static inline bool isar_feature_aa64_condm_4(const ARMISARegisters *id) return FIELD_EX64(id->id_aa64isar0, ID_AA64ISAR0, TS) != 0; } +static inline bool isar_feature_aa64_condm_5(const ARMISARegisters *id) +{ + return FIELD_EX64(id->id_aa64isar0, ID_AA64ISAR0, TS) >= 2; +} + static inline bool isar_feature_aa64_jscvt(const ARMISARegisters *id) { return FIELD_EX64(id->id_aa64isar1, ID_AA64ISAR1, JSCVT) != 0; diff --git a/target/arm/cpu64.c b/target/arm/cpu64.c index fcf79321e2f..9fe0844a828 100644 --- a/target/arm/cpu64.c +++ b/target/arm/cpu64.c @@ -309,7 +309,7 @@ static void aarch64_max_initfn(Object *obj) t = FIELD_DP64(t, ID_AA64ISAR0, SM4, 1); t = FIELD_DP64(t, ID_AA64ISAR0, DP, 1); t = FIELD_DP64(t, ID_AA64ISAR0, FHM, 1); - t = FIELD_DP64(t, ID_AA64ISAR0, TS, 1); + t = FIELD_DP64(t, ID_AA64ISAR0, TS, 2); /* v8.5-CondM */ cpu->isar.id_aa64isar0 = t; t = cpu->isar.id_aa64isar1; diff --git a/target/arm/translate-a64.c b/target/arm/translate-a64.c index 3cc9a99a9cb..0cfd07d3abd 100644 --- a/target/arm/translate-a64.c +++ b/target/arm/translate-a64.c @@ -1646,6 +1646,48 @@ static void handle_sync(DisasContext *s, uint32_t insn, } } +static void gen_xaflag(void) +{ + TCGv_i32 z = tcg_temp_new_i32(); + + tcg_gen_setcondi_i32(TCG_COND_EQ, z, cpu_ZF, 0); + + /* + * (!C & !Z) << 31 + * (!(C | Z)) << 31 + * ~((C | Z) << 31) + * ~-(C | Z) + * (C | Z) - 1 + */ + tcg_gen_or_i32(cpu_NF, cpu_CF, z); + tcg_gen_subi_i32(cpu_NF, cpu_NF, 1); + + /* !(Z & C) */ + tcg_gen_and_i32(cpu_ZF, z, cpu_CF); + tcg_gen_xori_i32(cpu_ZF, cpu_ZF, 1); + + /* (!C & Z) << 31 -> -(Z & ~C) */ + tcg_gen_andc_i32(cpu_VF, z, cpu_CF); + tcg_gen_neg_i32(cpu_VF, cpu_VF); + + /* C | Z */ + tcg_gen_or_i32(cpu_CF, cpu_CF, z); + + tcg_temp_free_i32(z); +} + +static void gen_axflag(void) +{ + tcg_gen_sari_i32(cpu_VF, cpu_VF, 31); /* V ? -1 : 0 */ + tcg_gen_andc_i32(cpu_CF, cpu_CF, cpu_VF); /* C & !V */ + + /* !(Z | V) -> !(!ZF | V) -> ZF & !V -> ZF & ~VF */ + tcg_gen_andc_i32(cpu_ZF, cpu_ZF, cpu_VF); + + tcg_gen_movi_i32(cpu_NF, 0); + tcg_gen_movi_i32(cpu_VF, 0); +} + /* MSR (immediate) - move immediate to processor state field */ static void handle_msr_i(DisasContext *s, uint32_t insn, unsigned int op1, unsigned int op2, unsigned int crm) @@ -1665,6 +1707,22 @@ static void handle_msr_i(DisasContext *s, uint32_t insn, s->base.is_jmp = DISAS_NEXT; break; + case 0x01: /* XAFlag */ + if (crm != 0 || !dc_isar_feature(aa64_condm_5, s)) { + goto do_unallocated; + } + gen_xaflag(); + s->base.is_jmp = DISAS_NEXT; + break; + + case 0x02: /* AXFlag */ + if (crm != 0 || !dc_isar_feature(aa64_condm_5, s)) { + goto do_unallocated; + } + gen_axflag(); + s->base.is_jmp = DISAS_NEXT; + break; + case 0x05: /* SPSel */ if (s->current_el == 0) { goto do_unallocated; From patchwork Tue Mar 5 16:50:39 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Maydell X-Patchwork-Id: 159678 Delivered-To: patch@linaro.org Received: by 2002:a02:5cc1:0:0:0:0:0 with SMTP id w62csp5186706jad; Tue, 5 Mar 2019 08:54:30 -0800 (PST) X-Google-Smtp-Source: APXvYqxe4ce/S/b+ck4J2duGyaNghaMFLX5XCjJXqG8bku6j+3kuXztb+VrNNHzqs3CxDFLzFZwD X-Received: by 2002:a81:a60e:: with SMTP id d14mr1762829ywh.7.1551804869945; Tue, 05 Mar 2019 08:54:29 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1551804869; cv=none; d=google.com; s=arc-20160816; b=0h4oANiNr3RybJiOnh/3NdiMB3nXp5zkOCIYWjQTUZKjQ7q5NJbC3JBAJHUTyyxMRj 1i6V6pfGtlQbvidJ7y+QTDFmngwzec2xvWKpeAPD6NQS3enD/AkW7qOUjo65tJOja/Bd uPwMp7fnWaNkgxBhTwhPyOCr6Ik30qyQqXBUcr5wm6uneY36zjMm29DC3pM0RfxhgfeZ LWE/P9eIzB4Z4/QHXWURSIIbyd+q0gGAIvL3eDDNjVCCLvtc/d61uelREASUs0rGdqLX v3aBm9ur8eqAFrXYrCnKtTuX1aT0kfI8lzUGxCKGPQUZIpSyIKce0IVBvvl3rC1IEHRP 55uQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:subject :content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:to:from:dkim-signature; bh=v4325gmRL4QffFle00Tby6w8CnK7f4KEu9qGRCsu9L8=; b=Yq1twNjARmCo7ZKkA6ZwBgzHZOMmFnmtjQcdTSYrMYFEKcNR497awrLC3yTQHjwAQS fQI8Tq7I7tgBlWHnxFe5CkEPtD3/qJKQXrip9UP/K1ftaXQt4zpFa5ZipQida4wfyotG BPlwRG7xudgLO7Css+lTh8tLvN2LWSpS09jsJKvu1NUmXLqfZ8KJf61w1dQ91jtXwkpF jKDpWmRmNyshEblX8PkjJIxeghx5WzvgTKkKSIkYP6R406Xuw9jgyiW4eIupRwEl/vbY zE0Ryypbub/WE8Wj2XbAW/Bvt8Eqmqiy3o5uyRjihRM64lZ4C06X01PgpPBDsXWHaruc Kyyg== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=LS0Gr78m; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id b32si5413381ybi.1.2019.03.05.08.54.29 for (version=TLS1 cipher=AES128-SHA bits=128/128); Tue, 05 Mar 2019 08:54:29 -0800 (PST) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; Authentication-Results: mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=LS0Gr78m; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([127.0.0.1]:45754 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h1DKn-00040B-EX for patch@linaro.org; Tue, 05 Mar 2019 11:54:29 -0500 Received: from eggs.gnu.org ([209.51.188.92]:54586) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h1DHY-0001bZ-5K for qemu-devel@nongnu.org; Tue, 05 Mar 2019 11:51:09 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1h1DHX-0000sQ-3l for qemu-devel@nongnu.org; Tue, 05 Mar 2019 11:51:08 -0500 Received: from mail-wr1-x42f.google.com ([2a00:1450:4864:20::42f]:45679) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1h1DHW-0000rR-SF for qemu-devel@nongnu.org; Tue, 05 Mar 2019 11:51:07 -0500 Received: by mail-wr1-x42f.google.com with SMTP id w17so10240829wrn.12 for ; Tue, 05 Mar 2019 08:51:06 -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=v4325gmRL4QffFle00Tby6w8CnK7f4KEu9qGRCsu9L8=; b=LS0Gr78mKUhtonYGsOow9I1mBa2UlB7NngHwRa+HEbu26Y6lf8IBeOPSgaZwm8S1Ub 2SR1sXsR+9DcWYJcaLUmRcPk7iXnWPQzwMUdK04KCrKnyqGwEsaxeY5jmNCtXfvkAIIE j+LR8cksEpwn2qnGV9ZtZTBQqRBOvXYlPE7ftb2KZ1m8ibExbeIPxQs/NE3+1zxHRLBr DqX8uqT4LhfZCKMTehIYFwFUMSB0Xv8/raNso459fjiAEABIwX8EN4O6+3ZWIf7GIseT O7waGtc3KHbixDz0Oa4bryzZHxvsceW9JLNTqhOB0RaarhqQqORyVxpv+4wwNdgfNBF6 wPkQ== 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=v4325gmRL4QffFle00Tby6w8CnK7f4KEu9qGRCsu9L8=; b=i424tyekmcGozSBGq5fRDwAKO0i3pBNA27P90ndtcIPZ8ONdly5Aor/BnKk3B2KsqY qpuODqRT4wsl4/Kzlo7XYsDbj5KIyeKDs//cdox4gvwAiw8EtBCplXXMjuctFrl0rHFa 3RKOofYY/dLA+BnSClltKzawS3MyHIUPNA/6xwuLHQP9a5CzpZsqGV5e1qt3M0L/WinD adGvQw0A356QPgi6hM3KL8QuY3oylyMs5PHN/lQlvVP/ZIyfUgw+J/+5mutSxsPnnDdp URUHOAo6wAh3y1GoYznCBN6+7a0/5VsTnCfk9RbI9YLnNvsDbd+TUgbd0O4Ug0eAcmpE rhaw== X-Gm-Message-State: APjAAAUUPzEWdp2KiY+tyTqjXeE2yK0jZtH+ni8lQc8/PTMIEzYcA+i+ rm6h/LzZtlF9rvZJ9kYIrMceSHLKUJY= X-Received: by 2002:adf:fc12:: with SMTP id i18mr16737008wrr.201.1551804665612; Tue, 05 Mar 2019 08:51:05 -0800 (PST) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id 2sm10071495wrg.89.2019.03.05.08.51.04 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 05 Mar 2019 08:51:04 -0800 (PST) From: Peter Maydell To: qemu-devel@nongnu.org Date: Tue, 5 Mar 2019 16:50:39 +0000 Message-Id: <20190305165051.26860-11-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190305165051.26860-1-peter.maydell@linaro.org> References: <20190305165051.26860-1-peter.maydell@linaro.org> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::42f Subject: [Qemu-devel] [PULL 10/22] target/arm: Restructure handle_fp_1src_{single, double} 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+patch=linaro.org@nongnu.org Sender: "Qemu-devel" From: Richard Henderson This will allow sharing code that adjusts rmode beyond the existing users. Tested-by: Laurent Desnogues Signed-off-by: Richard Henderson Message-id: 20190301200501.16533-10-richard.henderson@linaro.org Reviewed-by: Peter Maydell Signed-off-by: Peter Maydell --- target/arm/translate-a64.c | 90 +++++++++++++++++++++----------------- 1 file changed, 49 insertions(+), 41 deletions(-) -- 2.20.1 diff --git a/target/arm/translate-a64.c b/target/arm/translate-a64.c index 0cfd07d3abd..90336318194 100644 --- a/target/arm/translate-a64.c +++ b/target/arm/translate-a64.c @@ -5688,55 +5688,59 @@ static void handle_fp_1src_half(DisasContext *s, int opcode, int rd, int rn) /* Floating-point data-processing (1 source) - single precision */ static void handle_fp_1src_single(DisasContext *s, int opcode, int rd, int rn) { + void (*gen_fpst)(TCGv_i32, TCGv_i32, TCGv_ptr); + TCGv_i32 tcg_op, tcg_res; TCGv_ptr fpst; - TCGv_i32 tcg_op; - TCGv_i32 tcg_res; + int rmode = -1; - fpst = get_fpstatus_ptr(false); tcg_op = read_fp_sreg(s, rn); tcg_res = tcg_temp_new_i32(); switch (opcode) { case 0x0: /* FMOV */ tcg_gen_mov_i32(tcg_res, tcg_op); - break; + goto done; case 0x1: /* FABS */ gen_helper_vfp_abss(tcg_res, tcg_op); - break; + goto done; case 0x2: /* FNEG */ gen_helper_vfp_negs(tcg_res, tcg_op); - break; + goto done; case 0x3: /* FSQRT */ gen_helper_vfp_sqrts(tcg_res, tcg_op, cpu_env); - break; + goto done; case 0x8: /* FRINTN */ case 0x9: /* FRINTP */ case 0xa: /* FRINTM */ case 0xb: /* FRINTZ */ case 0xc: /* FRINTA */ - { - TCGv_i32 tcg_rmode = tcg_const_i32(arm_rmode_to_sf(opcode & 7)); - - gen_helper_set_rmode(tcg_rmode, tcg_rmode, fpst); - gen_helper_rints(tcg_res, tcg_op, fpst); - - gen_helper_set_rmode(tcg_rmode, tcg_rmode, fpst); - tcg_temp_free_i32(tcg_rmode); + rmode = arm_rmode_to_sf(opcode & 7); + gen_fpst = gen_helper_rints; break; - } case 0xe: /* FRINTX */ - gen_helper_rints_exact(tcg_res, tcg_op, fpst); + gen_fpst = gen_helper_rints_exact; break; case 0xf: /* FRINTI */ - gen_helper_rints(tcg_res, tcg_op, fpst); + gen_fpst = gen_helper_rints; break; default: - abort(); + g_assert_not_reached(); } - write_fp_sreg(s, rd, tcg_res); - + fpst = get_fpstatus_ptr(false); + if (rmode >= 0) { + TCGv_i32 tcg_rmode = tcg_const_i32(rmode); + gen_helper_set_rmode(tcg_rmode, tcg_rmode, fpst); + gen_fpst(tcg_res, tcg_op, fpst); + gen_helper_set_rmode(tcg_rmode, tcg_rmode, fpst); + tcg_temp_free_i32(tcg_rmode); + } else { + gen_fpst(tcg_res, tcg_op, fpst); + } tcg_temp_free_ptr(fpst); + + done: + write_fp_sreg(s, rd, tcg_res); tcg_temp_free_i32(tcg_op); tcg_temp_free_i32(tcg_res); } @@ -5744,9 +5748,10 @@ static void handle_fp_1src_single(DisasContext *s, int opcode, int rd, int rn) /* Floating-point data-processing (1 source) - double precision */ static void handle_fp_1src_double(DisasContext *s, int opcode, int rd, int rn) { + void (*gen_fpst)(TCGv_i64, TCGv_i64, TCGv_ptr); + TCGv_i64 tcg_op, tcg_res; TCGv_ptr fpst; - TCGv_i64 tcg_op; - TCGv_i64 tcg_res; + int rmode = -1; switch (opcode) { case 0x0: /* FMOV */ @@ -5754,48 +5759,51 @@ static void handle_fp_1src_double(DisasContext *s, int opcode, int rd, int rn) return; } - fpst = get_fpstatus_ptr(false); tcg_op = read_fp_dreg(s, rn); tcg_res = tcg_temp_new_i64(); switch (opcode) { case 0x1: /* FABS */ gen_helper_vfp_absd(tcg_res, tcg_op); - break; + goto done; case 0x2: /* FNEG */ gen_helper_vfp_negd(tcg_res, tcg_op); - break; + goto done; case 0x3: /* FSQRT */ gen_helper_vfp_sqrtd(tcg_res, tcg_op, cpu_env); - break; + goto done; case 0x8: /* FRINTN */ case 0x9: /* FRINTP */ case 0xa: /* FRINTM */ case 0xb: /* FRINTZ */ case 0xc: /* FRINTA */ - { - TCGv_i32 tcg_rmode = tcg_const_i32(arm_rmode_to_sf(opcode & 7)); - - gen_helper_set_rmode(tcg_rmode, tcg_rmode, fpst); - gen_helper_rintd(tcg_res, tcg_op, fpst); - - gen_helper_set_rmode(tcg_rmode, tcg_rmode, fpst); - tcg_temp_free_i32(tcg_rmode); + rmode = arm_rmode_to_sf(opcode & 7); + gen_fpst = gen_helper_rintd; break; - } case 0xe: /* FRINTX */ - gen_helper_rintd_exact(tcg_res, tcg_op, fpst); + gen_fpst = gen_helper_rintd_exact; break; case 0xf: /* FRINTI */ - gen_helper_rintd(tcg_res, tcg_op, fpst); + gen_fpst = gen_helper_rintd; break; default: - abort(); + g_assert_not_reached(); } - write_fp_dreg(s, rd, tcg_res); - + fpst = get_fpstatus_ptr(false); + if (rmode >= 0) { + TCGv_i32 tcg_rmode = tcg_const_i32(rmode); + gen_helper_set_rmode(tcg_rmode, tcg_rmode, fpst); + gen_fpst(tcg_res, tcg_op, fpst); + gen_helper_set_rmode(tcg_rmode, tcg_rmode, fpst); + tcg_temp_free_i32(tcg_rmode); + } else { + gen_fpst(tcg_res, tcg_op, fpst); + } tcg_temp_free_ptr(fpst); + + done: + write_fp_dreg(s, rd, tcg_res); tcg_temp_free_i64(tcg_op); tcg_temp_free_i64(tcg_res); } From patchwork Tue Mar 5 16:50:40 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Maydell X-Patchwork-Id: 159686 Delivered-To: patch@linaro.org Received: by 2002:a02:5cc1:0:0:0:0:0 with SMTP id w62csp5194739jad; Tue, 5 Mar 2019 09:02:35 -0800 (PST) X-Google-Smtp-Source: APXvYqzGL+HgoFnqNiD/AXGqKIzLmWqnSjGjDtTtWwVgP+FHVufIEQzJ1Iv96wNJDLMLxuX2Q1wA X-Received: by 2002:a25:3252:: with SMTP id y79mr2919915yby.460.1551805355071; Tue, 05 Mar 2019 09:02:35 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1551805355; cv=none; d=google.com; s=arc-20160816; b=kpAm4ISrVKNVnXe2GpQ0wB4jPjV2e/K0q1IS7if9fnyHYUsN2I5Bpz64Jv1YYE20wR mlsETaPoyYOe6pANVPNZ2qcN/CjhOn2XkSYGsE++Jbs+64g/GCM0zjUcS97F+ZsnCwT4 9Y1wrJMhOWG6zGmLVlPd1w+wDu14jtiOqLHv6iJmsDNHltzoLeCqf44Gd50iDUc0AF1R x7AOPIZe66mBHoE3yM3sCH0lBJ8wAfS/J1urvurFODiYyLs5l+5bfwViPd31XqS/gRs6 QcMljtwJZxkR9H9/NDdvTPYnwb9AZ33ocQ81fs5LdZNVxcnlpU6yRTz4CudDkZFkApRO yGRg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:subject :content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:to:from:dkim-signature; bh=oTi2GRav40kiFFa+yNqXruqEovrW99Ogwzs8rbQUGUw=; b=bZ55BeaTCWHJS8RQ194fnxuex710oFCBy4BUrc+AXXtWuarAM6sNg662EmiSnW244h anYO+YBhGD5KjzdlREcSYrFh4pj1/5bM6KJLEfIG1rvo6/JLHOmW78Nzegg9wO27TW/a /CZBTSCP7qBf4M2YaShy8z3R7anTSEP+aX+BRUjW75GG80eBabYpK3xpYjlBUuiLzx8h eCYEtbCH2SdopNUllEB3ce7kmTzQm4hlqcxTE+GQXQ4gpDf8AbFqrcUpxkScgeS5ww2X amiFzd+Texfsu8ZXOc4RUq/+IhUwyRC/sAYH94jHaCdNNy7hyZe6hsi6Qlgcy84BGfzf U3ag== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=mZTj+2zV; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id d2si5304063ybf.376.2019.03.05.09.02.34 for (version=TLS1 cipher=AES128-SHA bits=128/128); Tue, 05 Mar 2019 09:02:35 -0800 (PST) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; Authentication-Results: mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=mZTj+2zV; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([127.0.0.1]:45892 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h1DSc-0001t6-Hj for patch@linaro.org; Tue, 05 Mar 2019 12:02:34 -0500 Received: from eggs.gnu.org ([209.51.188.92]:54600) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h1DHZ-0001dB-Uc for qemu-devel@nongnu.org; Tue, 05 Mar 2019 11:51:12 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1h1DHY-0000uG-JB for qemu-devel@nongnu.org; Tue, 05 Mar 2019 11:51:09 -0500 Received: from mail-wr1-x42c.google.com ([2a00:1450:4864:20::42c]:38661) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1h1DHY-0000sz-8i for qemu-devel@nongnu.org; Tue, 05 Mar 2019 11:51:08 -0500 Received: by mail-wr1-x42c.google.com with SMTP id g12so10246685wrm.5 for ; Tue, 05 Mar 2019 08:51:08 -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=oTi2GRav40kiFFa+yNqXruqEovrW99Ogwzs8rbQUGUw=; b=mZTj+2zVWs8ik07/w7MRkAgqjGcwCEZDI+bkrqhf83NVgugj/k3UYkNKFauiMMUKqn 6aVPLZzNNC9skuHDAxWCGxd9yXOuLZVnB0f8V/VwXg4TODfA6vfbqdFYlas6om5t46oZ 0qHh4vffx599Pn+WByUr+RlVbaPqD1kSmFgbuyw+QKt6bOVhpmwVwLYdizNFRYQSUKR7 MjXvq+5F5VUHxzz9kCWMsMUKlpIbJl0UcnR4nvFHR7QmwuOVKYfg2h9RzleSkm43jCsS H/TuZOrjmNS22Fd1KgDQq64obQsVGKHLdJnTOtcOnD7z32LG+u2i727nC7B2L8sZpWHQ xaNg== 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=oTi2GRav40kiFFa+yNqXruqEovrW99Ogwzs8rbQUGUw=; b=Q2tDWngjDBOeWow74TfJt9E9+NbGf/f1TR/oG9z2v8g3JIFcYmxbheJ9H9IwymYLHd zeJUR8yX3giIlhU1zUyfBjW8lRHP7GmOmdYeBcm651S7NvWxcRnafosaEHWPuCq3l5ad KyX72Y+zQ073bOJtarJU96xgMxxbyCtCI3UlRabHp0rUgYMbU3Mue5SsaTLzxh0RrE9/ OAg2DANs8lkT4/+qaZKqo18HYqlKCnlNCrURbtaBA9cWUGPDatu8hFPpQhNhAM+fK2Pn umr7bBTL2+uFKcXbPZaoMc9yq9KuA96N+/4jbjjjDKeZRKi2M/boB/uWHzPxHwd1Qsz8 URiw== X-Gm-Message-State: APjAAAVXMQVuO2eY8q+8rUdsI9MnevSX9H1EROwJTZ7Yl1wyE3bYeqQs 3CPhfz55unBtjpMt3HY5lMXAIZlAngE= X-Received: by 2002:a5d:4d12:: with SMTP id z18mr17503530wrt.115.1551804666757; Tue, 05 Mar 2019 08:51:06 -0800 (PST) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id 2sm10071495wrg.89.2019.03.05.08.51.05 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 05 Mar 2019 08:51:06 -0800 (PST) From: Peter Maydell To: qemu-devel@nongnu.org Date: Tue, 5 Mar 2019 16:50:40 +0000 Message-Id: <20190305165051.26860-12-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190305165051.26860-1-peter.maydell@linaro.org> References: <20190305165051.26860-1-peter.maydell@linaro.org> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::42c Subject: [Qemu-devel] [PULL 11/22] target/arm: Implement ARMv8.5-FRINT 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+patch=linaro.org@nongnu.org Sender: "Qemu-devel" From: Richard Henderson Tested-by: Laurent Desnogues Signed-off-by: Richard Henderson Message-id: 20190301200501.16533-11-richard.henderson@linaro.org Reviewed-by: Peter Maydell Signed-off-by: Peter Maydell --- target/arm/cpu.h | 5 ++ target/arm/helper.h | 5 ++ target/arm/cpu64.c | 1 + target/arm/translate-a64.c | 71 ++++++++++++++++++++++++++-- target/arm/vfp_helper.c | 96 ++++++++++++++++++++++++++++++++++++++ 5 files changed, 173 insertions(+), 5 deletions(-) -- 2.20.1 diff --git a/target/arm/cpu.h b/target/arm/cpu.h index a7aaec63d74..5f23c621325 100644 --- a/target/arm/cpu.h +++ b/target/arm/cpu.h @@ -3476,6 +3476,11 @@ static inline bool isar_feature_aa64_predinv(const ARMISARegisters *id) return FIELD_EX64(id->id_aa64isar1, ID_AA64ISAR1, SPECRES) != 0; } +static inline bool isar_feature_aa64_frint(const ARMISARegisters *id) +{ + return FIELD_EX64(id->id_aa64isar1, ID_AA64ISAR1, FRINTTS) != 0; +} + static inline bool isar_feature_aa64_fp16(const ARMISARegisters *id) { /* We always set the AdvSIMD and FP fields identically wrt FP16. */ diff --git a/target/arm/helper.h b/target/arm/helper.h index 583adba9b04..a09566f795c 100644 --- a/target/arm/helper.h +++ b/target/arm/helper.h @@ -683,6 +683,11 @@ DEF_HELPER_FLAGS_5(gvec_fmlal_idx_a32, TCG_CALL_NO_RWG, DEF_HELPER_FLAGS_5(gvec_fmlal_idx_a64, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr, i32) +DEF_HELPER_FLAGS_2(frint32_s, TCG_CALL_NO_RWG, f32, f32, ptr) +DEF_HELPER_FLAGS_2(frint64_s, TCG_CALL_NO_RWG, f32, f32, ptr) +DEF_HELPER_FLAGS_2(frint32_d, TCG_CALL_NO_RWG, f64, f64, ptr) +DEF_HELPER_FLAGS_2(frint64_d, TCG_CALL_NO_RWG, f64, f64, ptr) + #ifdef TARGET_AARCH64 #include "helper-a64.h" #include "helper-sve.h" diff --git a/target/arm/cpu64.c b/target/arm/cpu64.c index 9fe0844a828..228906f2678 100644 --- a/target/arm/cpu64.c +++ b/target/arm/cpu64.c @@ -321,6 +321,7 @@ static void aarch64_max_initfn(Object *obj) t = FIELD_DP64(t, ID_AA64ISAR1, GPI, 0); t = FIELD_DP64(t, ID_AA64ISAR1, SB, 1); t = FIELD_DP64(t, ID_AA64ISAR1, SPECRES, 1); + t = FIELD_DP64(t, ID_AA64ISAR1, FRINTTS, 1); cpu->isar.id_aa64isar1 = t; t = cpu->isar.id_aa64pfr0; diff --git a/target/arm/translate-a64.c b/target/arm/translate-a64.c index 90336318194..19590463433 100644 --- a/target/arm/translate-a64.c +++ b/target/arm/translate-a64.c @@ -5723,6 +5723,20 @@ static void handle_fp_1src_single(DisasContext *s, int opcode, int rd, int rn) case 0xf: /* FRINTI */ gen_fpst = gen_helper_rints; break; + case 0x10: /* FRINT32Z */ + rmode = float_round_to_zero; + gen_fpst = gen_helper_frint32_s; + break; + case 0x11: /* FRINT32X */ + gen_fpst = gen_helper_frint32_s; + break; + case 0x12: /* FRINT64Z */ + rmode = float_round_to_zero; + gen_fpst = gen_helper_frint64_s; + break; + case 0x13: /* FRINT64X */ + gen_fpst = gen_helper_frint64_s; + break; default: g_assert_not_reached(); } @@ -5786,6 +5800,20 @@ static void handle_fp_1src_double(DisasContext *s, int opcode, int rd, int rn) case 0xf: /* FRINTI */ gen_fpst = gen_helper_rintd; break; + case 0x10: /* FRINT32Z */ + rmode = float_round_to_zero; + gen_fpst = gen_helper_frint32_d; + break; + case 0x11: /* FRINT32X */ + gen_fpst = gen_helper_frint32_d; + break; + case 0x12: /* FRINT64Z */ + rmode = float_round_to_zero; + gen_fpst = gen_helper_frint64_d; + break; + case 0x13: /* FRINT64X */ + gen_fpst = gen_helper_frint64_d; + break; default: g_assert_not_reached(); } @@ -5922,6 +5950,13 @@ static void disas_fp_1src(DisasContext *s, uint32_t insn) handle_fp_fcvt(s, opcode, rd, rn, dtype, type); break; } + + case 0x10 ... 0x13: /* FRINT{32,64}{X,Z} */ + if (type > 1 || !dc_isar_feature(aa64_frint, s)) { + unallocated_encoding(s); + return; + } + /* fall through */ case 0x0 ... 0x3: case 0x8 ... 0xc: case 0xe ... 0xf: @@ -5931,14 +5966,12 @@ static void disas_fp_1src(DisasContext *s, uint32_t insn) if (!fp_access_check(s)) { return; } - handle_fp_1src_single(s, opcode, rd, rn); break; case 1: if (!fp_access_check(s)) { return; } - handle_fp_1src_double(s, opcode, rd, rn); break; case 3: @@ -5950,13 +5983,13 @@ static void disas_fp_1src(DisasContext *s, uint32_t insn) if (!fp_access_check(s)) { return; } - handle_fp_1src_half(s, opcode, rd, rn); break; default: unallocated_encoding(s); } break; + default: unallocated_encoding(s); break; @@ -9484,6 +9517,14 @@ static void handle_2misc_64(DisasContext *s, int opcode, bool u, case 0x59: /* FRINTX */ gen_helper_rintd_exact(tcg_rd, tcg_rn, tcg_fpstatus); break; + case 0x1e: /* FRINT32Z */ + case 0x5e: /* FRINT32X */ + gen_helper_frint32_d(tcg_rd, tcg_rn, tcg_fpstatus); + break; + case 0x1f: /* FRINT64Z */ + case 0x5f: /* FRINT64X */ + gen_helper_frint64_d(tcg_rd, tcg_rn, tcg_fpstatus); + break; default: g_assert_not_reached(); } @@ -12134,8 +12175,7 @@ static void disas_simd_two_reg_misc(DisasContext *s, uint32_t insn) } break; case 0xc ... 0xf: - case 0x16 ... 0x1d: - case 0x1f: + case 0x16 ... 0x1f: { /* Floating point: U, size[1] and opcode indicate operation; * size[0] indicates single or double precision. @@ -12278,6 +12318,19 @@ static void disas_simd_two_reg_misc(DisasContext *s, uint32_t insn) } need_fpstatus = true; break; + case 0x1e: /* FRINT32Z */ + case 0x1f: /* FRINT64Z */ + need_rmode = true; + rmode = FPROUNDING_ZERO; + /* fall through */ + case 0x5e: /* FRINT32X */ + case 0x5f: /* FRINT64X */ + need_fpstatus = true; + if ((size == 3 && !is_q) || !dc_isar_feature(aa64_frint, s)) { + unallocated_encoding(s); + return; + } + break; default: unallocated_encoding(s); return; @@ -12443,6 +12496,14 @@ static void disas_simd_two_reg_misc(DisasContext *s, uint32_t insn) case 0x7c: /* URSQRTE */ gen_helper_rsqrte_u32(tcg_res, tcg_op, tcg_fpstatus); break; + case 0x1e: /* FRINT32Z */ + case 0x5e: /* FRINT32X */ + gen_helper_frint32_s(tcg_res, tcg_op, tcg_fpstatus); + break; + case 0x1f: /* FRINT64Z */ + case 0x5f: /* FRINT64X */ + gen_helper_frint64_s(tcg_res, tcg_op, tcg_fpstatus); + break; default: g_assert_not_reached(); } diff --git a/target/arm/vfp_helper.c b/target/arm/vfp_helper.c index cc7f9f5cb19..2468fc16294 100644 --- a/target/arm/vfp_helper.c +++ b/target/arm/vfp_helper.c @@ -1174,3 +1174,99 @@ uint32_t HELPER(vjcvt)(float64 value, CPUARMState *env) return result; } + +/* Round a float32 to an integer that fits in int32_t or int64_t. */ +static float32 frint_s(float32 f, float_status *fpst, int intsize) +{ + int old_flags = get_float_exception_flags(fpst); + uint32_t exp = extract32(f, 23, 8); + + if (unlikely(exp == 0xff)) { + /* NaN or Inf. */ + goto overflow; + } + + /* Round and re-extract the exponent. */ + f = float32_round_to_int(f, fpst); + exp = extract32(f, 23, 8); + + /* Validate the range of the result. */ + if (exp < 126 + intsize) { + /* abs(F) <= INT{N}_MAX */ + return f; + } + if (exp == 126 + intsize) { + uint32_t sign = extract32(f, 31, 1); + uint32_t frac = extract32(f, 0, 23); + if (sign && frac == 0) { + /* F == INT{N}_MIN */ + return f; + } + } + + overflow: + /* + * Raise Invalid and return INT{N}_MIN as a float. Revert any + * inexact exception float32_round_to_int may have raised. + */ + set_float_exception_flags(old_flags | float_flag_invalid, fpst); + return (0x100u + 126u + intsize) << 23; +} + +float32 HELPER(frint32_s)(float32 f, void *fpst) +{ + return frint_s(f, fpst, 32); +} + +float32 HELPER(frint64_s)(float32 f, void *fpst) +{ + return frint_s(f, fpst, 64); +} + +/* Round a float64 to an integer that fits in int32_t or int64_t. */ +static float64 frint_d(float64 f, float_status *fpst, int intsize) +{ + int old_flags = get_float_exception_flags(fpst); + uint32_t exp = extract64(f, 52, 11); + + if (unlikely(exp == 0x7ff)) { + /* NaN or Inf. */ + goto overflow; + } + + /* Round and re-extract the exponent. */ + f = float64_round_to_int(f, fpst); + exp = extract64(f, 52, 11); + + /* Validate the range of the result. */ + if (exp < 1022 + intsize) { + /* abs(F) <= INT{N}_MAX */ + return f; + } + if (exp == 1022 + intsize) { + uint64_t sign = extract64(f, 63, 1); + uint64_t frac = extract64(f, 0, 52); + if (sign && frac == 0) { + /* F == INT{N}_MIN */ + return f; + } + } + + overflow: + /* + * Raise Invalid and return INT{N}_MIN as a float. Revert any + * inexact exception float64_round_to_int may have raised. + */ + set_float_exception_flags(old_flags | float_flag_invalid, fpst); + return (uint64_t)(0x800 + 1022 + intsize) << 52; +} + +float64 HELPER(frint32_d)(float64 f, void *fpst) +{ + return frint_d(f, fpst, 32); +} + +float64 HELPER(frint64_d)(float64 f, void *fpst) +{ + return frint_d(f, fpst, 64); +} From patchwork Tue Mar 5 16:50:41 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Maydell X-Patchwork-Id: 159685 Delivered-To: patch@linaro.org Received: by 2002:a02:5cc1:0:0:0:0:0 with SMTP id w62csp5191123jad; Tue, 5 Mar 2019 08:59:35 -0800 (PST) X-Google-Smtp-Source: APXvYqxp3l0YH8q6xj9f3jZHehi3Qe+5mTszie5OoNEs9DrHvTsE/0+GAkJiAtdX+Xm2S//gsvGN X-Received: by 2002:a81:99c9:: with SMTP id q192mr1814618ywg.84.1551805175372; Tue, 05 Mar 2019 08:59:35 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1551805175; cv=none; d=google.com; s=arc-20160816; b=HjYbr0unSjd8I43CGArQN6yueeoDiuP/Sf5+eJcbWgG8PfPGIqCY8CZktlSRKxZnFN hjjx9bdTpC6+M8uQVBDkqrB5Pvee8KJy4Y2eU3q7mNi6pci+XDreMj11tWoBmzXhAvFv 9weuoLUYYj5ziuQF/R5gAOFd/MrMdrcue3DyReZGlT0mm3YiSI/3MC86pOHZ6sec87ca VmpzMV896qCoMIKyr1kRtELcEsH84aEQL1PDHbY9nS0ggdqaleKfEJsqlDnYdOKK1a0D 1NMkEQoNDQHDKGRfNlscJv69E+YDHF94XRDxkxCAYmckdIoPPSsJ5US0KxsAhf+8tVIQ K+pQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:subject :content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:to:from:dkim-signature; bh=RnVPpx2OVfkt5GWLUoe2wdUBcVdMnKZgxxYPUzvzK5w=; b=Ahd8TDR2+LSHPFBQGA+m0SERdV2NUJFKcmnctkRD+Awqo6eEcXizikOtpIs5Yz1BJO 3zN4CbXi4JHFp8nP9Vtq0P7rNfwIm0DiI/pJS00+ZRROiGEreAFCr0UKf7ZG3MgqSZFT JwYyxezQE5XaDQLhoaU+x4wbbFCGOhEdinPkN8gsIjVdKupCME9ri4ss0BmTOige7C4Z Upi1bgQBN9U4TYzANulEsc7P4nIZzEnq3sd370vfMq8dvLj6wBj1wAKqXiDI/tyJPxQt 2TlyGDQ0gUsi7mpZSdOMR2Jw2dVxo/CVsAZn4W2/cTM3vnLQor0psg2Fyvu0Xs6cqJSG fC8A== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=qCv9+Qev; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id u82si5190134ybb.128.2019.03.05.08.59.35 for (version=TLS1 cipher=AES128-SHA bits=128/128); Tue, 05 Mar 2019 08:59:35 -0800 (PST) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; Authentication-Results: mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=qCv9+Qev; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([127.0.0.1]:45827 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h1DPi-0007jG-JV for patch@linaro.org; Tue, 05 Mar 2019 11:59:34 -0500 Received: from eggs.gnu.org ([209.51.188.92]:54619) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h1DHa-0001dE-T6 for qemu-devel@nongnu.org; Tue, 05 Mar 2019 11:51:12 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1h1DHZ-0000v6-Hj for qemu-devel@nongnu.org; Tue, 05 Mar 2019 11:51:10 -0500 Received: from mail-wr1-x42c.google.com ([2a00:1450:4864:20::42c]:41441) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1h1DHZ-0000uR-Aj for qemu-devel@nongnu.org; Tue, 05 Mar 2019 11:51:09 -0500 Received: by mail-wr1-x42c.google.com with SMTP id n2so10244776wrw.8 for ; Tue, 05 Mar 2019 08:51:09 -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=RnVPpx2OVfkt5GWLUoe2wdUBcVdMnKZgxxYPUzvzK5w=; b=qCv9+Qev6IUwNipwCyPdOjI1mSajJuNoK3X5AoVfA5FOEvq1t2/ayVmO+qqarMVZlz HvR+kEg0R0ztN0LJknuc4TpiI3L7IILmzEXeJQScSkZ4sJgGH1hzf+Y4iDtg1zp+It6f oxePSTgagQor54cfw1NEsrMXsXdJ7D8r3G52mxioqgjFrMJHauvp1mDvISyyZx60zrWD Kw5VgUsIVVKwhKrkHbuQv1lXMLF5JkMgtPCp16DhBj4WapDbiBV+eV5PqqP+MtbFwmNQ fyqQkX9G5xdlQGSS7TqH+5KP057vCweGlpdvr2EJNAJt0dbvsaHthWdNNExjvPN9yDmc n8yw== 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=RnVPpx2OVfkt5GWLUoe2wdUBcVdMnKZgxxYPUzvzK5w=; b=btGCb0cnBZxOW8W1SHrdI/DVzcS6+aQzIwWI42q2uFmLcEi6BMwfTqP/9V/yJZk1mz lpC+fomFKPMwyEvTBept5JA+SitrPC9OGOPvrgefDRyWJmCw8f2lPzJxaG1LtjlPLF63 H05X3qe3ABKL+xd+4BxypnDDcyB//AtOoFLIAQvFWWfzVTgAKWRfOK3WpHxCZcQHwLKj 8Amc0aG7/NPmdvcZ7+pLZSR8Gf691OnGZQ6Wvx/tpieZTB11awQ7Tsxl7aH+b87d+Sa5 17ng04RD1XHipT+fTt/CWP++JZF046p9RJSpBMHb0jlceGbjpjJKAAoHxsMLJO82NTUg d2VQ== X-Gm-Message-State: APjAAAUDqZeeslJvDO9AYm6Gv1UB7nxsTXnkRt+DIPU/ZN20nxiSV5/p +WoMnomH8aDBnJg3ra+HrehR/tdQWTY= X-Received: by 2002:adf:e982:: with SMTP id h2mr18055484wrm.241.1551804668081; Tue, 05 Mar 2019 08:51:08 -0800 (PST) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id 2sm10071495wrg.89.2019.03.05.08.51.06 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 05 Mar 2019 08:51:07 -0800 (PST) From: Peter Maydell To: qemu-devel@nongnu.org Date: Tue, 5 Mar 2019 16:50:41 +0000 Message-Id: <20190305165051.26860-13-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190305165051.26860-1-peter.maydell@linaro.org> References: <20190305165051.26860-1-peter.maydell@linaro.org> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::42c Subject: [Qemu-devel] [PULL 12/22] hw/arm/boot: introduce fdt_add_memory_node helper 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+patch=linaro.org@nongnu.org Sender: "Qemu-devel" From: Shameer Kolothum We introduce an helper to create a memory node. Signed-off-by: Eric Auger Signed-off-by: Shameer Kolothum Reviewed-by: Igor Mammedov Reviewed-by: Richard Henderson Message-id: 20190304101339.25970-2-eric.auger@redhat.com Signed-off-by: Peter Maydell --- hw/arm/boot.c | 54 ++++++++++++++++++++++++++++++++------------------- 1 file changed, 34 insertions(+), 20 deletions(-) -- 2.20.1 diff --git a/hw/arm/boot.c b/hw/arm/boot.c index d90af2f17d2..a830655e1af 100644 --- a/hw/arm/boot.c +++ b/hw/arm/boot.c @@ -423,6 +423,32 @@ static void set_kernel_args_old(const struct arm_boot_info *info, } } +static int fdt_add_memory_node(void *fdt, uint32_t acells, hwaddr mem_base, + uint32_t scells, hwaddr mem_len, + int numa_node_id) +{ + char *nodename; + int ret; + + nodename = g_strdup_printf("/memory@%" PRIx64, mem_base); + qemu_fdt_add_subnode(fdt, nodename); + qemu_fdt_setprop_string(fdt, nodename, "device_type", "memory"); + ret = qemu_fdt_setprop_sized_cells(fdt, nodename, "reg", acells, mem_base, + scells, mem_len); + if (ret < 0) { + goto out; + } + + /* only set the NUMA ID if it is specified */ + if (numa_node_id >= 0) { + ret = qemu_fdt_setprop_cell(fdt, nodename, + "numa-node-id", numa_node_id); + } +out: + g_free(nodename); + return ret; +} + static void fdt_add_psci_node(void *fdt) { uint32_t cpu_suspend_fn; @@ -502,7 +528,6 @@ int arm_load_dtb(hwaddr addr, const struct arm_boot_info *binfo, void *fdt = NULL; int size, rc, n = 0; uint32_t acells, scells; - char *nodename; unsigned int i; hwaddr mem_base, mem_len; char **node_path; @@ -576,35 +601,24 @@ int arm_load_dtb(hwaddr addr, const struct arm_boot_info *binfo, mem_base = binfo->loader_start; for (i = 0; i < nb_numa_nodes; i++) { mem_len = numa_info[i].node_mem; - nodename = g_strdup_printf("/memory@%" PRIx64, mem_base); - qemu_fdt_add_subnode(fdt, nodename); - qemu_fdt_setprop_string(fdt, nodename, "device_type", "memory"); - rc = qemu_fdt_setprop_sized_cells(fdt, nodename, "reg", - acells, mem_base, - scells, mem_len); + rc = fdt_add_memory_node(fdt, acells, mem_base, + scells, mem_len, i); if (rc < 0) { - fprintf(stderr, "couldn't set %s/reg for node %d\n", nodename, - i); + fprintf(stderr, "couldn't add /memory@%"PRIx64" node\n", + mem_base); goto fail; } - qemu_fdt_setprop_cell(fdt, nodename, "numa-node-id", i); mem_base += mem_len; - g_free(nodename); } } else { - nodename = g_strdup_printf("/memory@%" PRIx64, binfo->loader_start); - qemu_fdt_add_subnode(fdt, nodename); - qemu_fdt_setprop_string(fdt, nodename, "device_type", "memory"); - - rc = qemu_fdt_setprop_sized_cells(fdt, nodename, "reg", - acells, binfo->loader_start, - scells, binfo->ram_size); + rc = fdt_add_memory_node(fdt, acells, binfo->loader_start, + scells, binfo->ram_size, -1); if (rc < 0) { - fprintf(stderr, "couldn't set %s reg\n", nodename); + fprintf(stderr, "couldn't add /memory@%"PRIx64" node\n", + binfo->loader_start); goto fail; } - g_free(nodename); } rc = fdt_path_offset(fdt, "/chosen"); From patchwork Tue Mar 5 16:50:42 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Maydell X-Patchwork-Id: 159689 Delivered-To: patch@linaro.org Received: by 2002:a02:5cc1:0:0:0:0:0 with SMTP id w62csp5195405jad; Tue, 5 Mar 2019 09:03:07 -0800 (PST) X-Google-Smtp-Source: APXvYqz0o6tEW0cZCScN+IEc69H8zTuD2bl9z0TsAW4WZNTuQyLDjhp0UF7o9o0IaGMP03iakFTi X-Received: by 2002:a25:838d:: with SMTP id t13mr3033568ybk.227.1551805387499; Tue, 05 Mar 2019 09:03:07 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1551805387; cv=none; d=google.com; s=arc-20160816; b=ITv2wXxDSExAOXZSg2ToFzLnkmNdNod1kEi1ZSaDm+cMoNTVaQD1p/w9x4+8vBaur4 RbCgbhE+UQiWB9QKqfVrvwDldq3aJEmGkvH0xc8R0GHA/Wvh176doOqJMSrawuLqiIVJ E7zhWb7G9me7/UhNl5j993ctKGZucSWExdBwEmONvVyRyx+sHwuAs3O/XA/Kl8ZyeW8E 9xjFAABFVkuO+IJeyD+jxHQdHLpsVIleynb9I2d16C8DT3f+o41eE62xMZ3gIbvwQcg3 57ctQa+isuBxMMIEFl+JuqGrDs9Q/A3fyeY2i8JMJahcmnnzAm6DE429l5OwlU1WTYXE IU3A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:subject :content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:to:from:dkim-signature; bh=dEsL2TadOfzi2urpg/PHwOtzpKuEWVEwxv/gJ1fTYko=; b=o5Ulw6vWZSsGmU2e0E5ZCRhbiMN5P2UekyZKYoUlmihSDkB2pmZ2LuACGYzk0gW8/t 60Mt7Ik4zCHaLLMYJv9LG+HjlI1tANNfHKibk19s5C3ECQcup/5f0NAWSEQ6WRWN0eJw TpHr5VC3oOLY1Kq/g4v9SKC7yysGVdSQ2TTePPFE7KTnkuxYQ5bw3KmOP5zcL8gFH3zk fH1WLzixLzUMITyGZTJeUTAPgVcJxcMMX2juVdevyivdsqJDKv4x1NKP4l2Qplnqixjv SAUE0JeOn5OHF/k0MvafIFJGquVlLZsQN2BoaDJ4hI4TXJAwrf27rcY+brkRGxkoZs7K mBOw== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=ZMrH2+bt; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id n83si5634154ywc.151.2019.03.05.09.03.07 for (version=TLS1 cipher=AES128-SHA bits=128/128); Tue, 05 Mar 2019 09:03:07 -0800 (PST) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; Authentication-Results: mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=ZMrH2+bt; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([127.0.0.1]:45910 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h1DT8-000390-KO for patch@linaro.org; Tue, 05 Mar 2019 12:03:06 -0500 Received: from eggs.gnu.org ([209.51.188.92]:54634) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h1DHb-0001dF-VS for qemu-devel@nongnu.org; Tue, 05 Mar 2019 11:51:13 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1h1DHa-0000wW-Sh for qemu-devel@nongnu.org; Tue, 05 Mar 2019 11:51:11 -0500 Received: from mail-wr1-x42a.google.com ([2a00:1450:4864:20::42a]:40766) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1h1DHa-0000va-HW for qemu-devel@nongnu.org; Tue, 05 Mar 2019 11:51:10 -0500 Received: by mail-wr1-x42a.google.com with SMTP id q1so10263477wrp.7 for ; Tue, 05 Mar 2019 08:51: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=dEsL2TadOfzi2urpg/PHwOtzpKuEWVEwxv/gJ1fTYko=; b=ZMrH2+btB3IFDJF81QlnLXGF2axzUEp8deuJXpudtaRy0sAdd64kguyTPp2AKJ8GB1 fGBRIDpfBCpDf08X60sPt7sCFi5Sw/7RN7CViYB3oB9y5MX6SFDp0nqlGPvXDSZRXF4M 8paO8Tp1Kla7DHe6GO8mMlSi/5x1UaRXSVh02YzL4E6ZCt9/+8CcK1c/c6bcNW03Rwhp lbQUSZkyBin19XGBAGAyQCb7KObK6/yayRGCV/S9+zUNg71/vtPkTRFeQesbNSMul6Y4 KS+7bH6b+lpqmXbOhHt6Ye87M29IuQG1Bif1NOzVV/x33rRDf55uws8zidU+q2VH9Bp0 EpDA== 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=dEsL2TadOfzi2urpg/PHwOtzpKuEWVEwxv/gJ1fTYko=; b=aLZ/CRVlmEzhS3Wufq5TEUMq6NSxDDyJYeTIhFaokfjdManT4I3d8Cw4Uyjl65vlHr iluJHRXKIJFXdhr6JPBl9G4XD6pFeRvPs3wZO+J6gCcMM3Nv/eWAUx50nEO7/JT2y6Y/ crDneQ7a8X1Y/BStvxkmY3U9ibkrPXh1QbTK/QbUiavmeIPkHg8DjuVBZATICQyadGrZ 7CxCpBiaqmQ3NjGq5NGmT0eZmnPuSNK17XSTzSb6Xi8R92V0r0hlUDH5ZRWWwQUMcyQG g8Es18PH0UfR8btWaygloC1evt1H5XFoduzz04pOlYt/AI8NoUbeBkoj5C4Seig1TsDc rh2A== X-Gm-Message-State: APjAAAVe0L/vBskbFAmQRjDXTlq+1L1ppAtcQ7mDrc4dDG7ekwUXiIY5 pqFfKiuq0+mEnXyhmw8RM+zwx0816ec= X-Received: by 2002:a05:6000:1110:: with SMTP id z16mr17277621wrw.28.1551804669208; Tue, 05 Mar 2019 08:51:09 -0800 (PST) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id 2sm10071495wrg.89.2019.03.05.08.51.08 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 05 Mar 2019 08:51:08 -0800 (PST) From: Peter Maydell To: qemu-devel@nongnu.org Date: Tue, 5 Mar 2019 16:50:42 +0000 Message-Id: <20190305165051.26860-14-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190305165051.26860-1-peter.maydell@linaro.org> References: <20190305165051.26860-1-peter.maydell@linaro.org> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::42a Subject: [Qemu-devel] [PULL 13/22] hw/arm/virt: Rename highmem IO regions 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+patch=linaro.org@nongnu.org Sender: "Qemu-devel" From: Eric Auger In preparation for a split of the memory map into a static part and a dynamic part floating after the RAM, let's rename the regions located after the RAM Signed-off-by: Eric Auger Reviewed-by: Peter Maydell Reviewed-by: Igor Mammedov Message-id: 20190304101339.25970-3-eric.auger@redhat.com Signed-off-by: Peter Maydell --- include/hw/arm/virt.h | 8 ++++---- hw/arm/virt-acpi-build.c | 10 ++++++---- hw/arm/virt.c | 33 ++++++++++++++++++--------------- 3 files changed, 28 insertions(+), 23 deletions(-) -- 2.20.1 diff --git a/include/hw/arm/virt.h b/include/hw/arm/virt.h index 4cc57a7ef62..a27086d524c 100644 --- a/include/hw/arm/virt.h +++ b/include/hw/arm/virt.h @@ -64,7 +64,7 @@ enum { VIRT_GIC_VCPU, VIRT_GIC_ITS, VIRT_GIC_REDIST, - VIRT_GIC_REDIST2, + VIRT_HIGH_GIC_REDIST2, VIRT_SMMU, VIRT_UART, VIRT_MMIO, @@ -74,9 +74,9 @@ enum { VIRT_PCIE_MMIO, VIRT_PCIE_PIO, VIRT_PCIE_ECAM, - VIRT_PCIE_ECAM_HIGH, + VIRT_HIGH_PCIE_ECAM, VIRT_PLATFORM_BUS, - VIRT_PCIE_MMIO_HIGH, + VIRT_HIGH_PCIE_MMIO, VIRT_GPIO, VIRT_SECURE_UART, VIRT_SECURE_MEM, @@ -128,7 +128,7 @@ typedef struct { int psci_conduit; } VirtMachineState; -#define VIRT_ECAM_ID(high) (high ? VIRT_PCIE_ECAM_HIGH : VIRT_PCIE_ECAM) +#define VIRT_ECAM_ID(high) (high ? VIRT_HIGH_PCIE_ECAM : VIRT_PCIE_ECAM) #define TYPE_VIRT_MACHINE MACHINE_TYPE_NAME("virt") #define VIRT_MACHINE(obj) \ diff --git a/hw/arm/virt-acpi-build.c b/hw/arm/virt-acpi-build.c index 04b62c714d9..d7e2e4885b8 100644 --- a/hw/arm/virt-acpi-build.c +++ b/hw/arm/virt-acpi-build.c @@ -229,8 +229,8 @@ static void acpi_dsdt_add_pci(Aml *scope, const MemMapEntry *memmap, size_pio)); if (use_highmem) { - hwaddr base_mmio_high = memmap[VIRT_PCIE_MMIO_HIGH].base; - hwaddr size_mmio_high = memmap[VIRT_PCIE_MMIO_HIGH].size; + hwaddr base_mmio_high = memmap[VIRT_HIGH_PCIE_MMIO].base; + hwaddr size_mmio_high = memmap[VIRT_HIGH_PCIE_MMIO].size; aml_append(rbuf, aml_qword_memory(AML_POS_DECODE, AML_MIN_FIXED, AML_MAX_FIXED, @@ -663,8 +663,10 @@ build_madt(GArray *table_data, BIOSLinker *linker, VirtMachineState *vms) gicr = acpi_data_push(table_data, sizeof(*gicr)); gicr->type = ACPI_APIC_GENERIC_REDISTRIBUTOR; gicr->length = sizeof(*gicr); - gicr->base_address = cpu_to_le64(memmap[VIRT_GIC_REDIST2].base); - gicr->range_length = cpu_to_le32(memmap[VIRT_GIC_REDIST2].size); + gicr->base_address = + cpu_to_le64(memmap[VIRT_HIGH_GIC_REDIST2].base); + gicr->range_length = + cpu_to_le32(memmap[VIRT_HIGH_GIC_REDIST2].size); } if (its_class_name() && !vmc->no_its) { diff --git a/hw/arm/virt.c b/hw/arm/virt.c index 99c2b6e60d7..892bae4f3a7 100644 --- a/hw/arm/virt.c +++ b/hw/arm/virt.c @@ -150,10 +150,10 @@ static const MemMapEntry a15memmap[] = { [VIRT_PCIE_ECAM] = { 0x3f000000, 0x01000000 }, [VIRT_MEM] = { 0x40000000, RAMLIMIT_BYTES }, /* Additional 64 MB redist region (can contain up to 512 redistributors) */ - [VIRT_GIC_REDIST2] = { 0x4000000000ULL, 0x4000000 }, - [VIRT_PCIE_ECAM_HIGH] = { 0x4010000000ULL, 0x10000000 }, + [VIRT_HIGH_GIC_REDIST2] = { 0x4000000000ULL, 0x4000000 }, + [VIRT_HIGH_PCIE_ECAM] = { 0x4010000000ULL, 0x10000000 }, /* Second PCIe window, 512GB wide at the 512GB boundary */ - [VIRT_PCIE_MMIO_HIGH] = { 0x8000000000ULL, 0x8000000000ULL }, + [VIRT_HIGH_PCIE_MMIO] = { 0x8000000000ULL, 0x8000000000ULL }, }; static const int a15irqmap[] = { @@ -431,12 +431,12 @@ static void fdt_add_gic_node(VirtMachineState *vms) 2, vms->memmap[VIRT_GIC_REDIST].size); } else { qemu_fdt_setprop_sized_cells(vms->fdt, nodename, "reg", - 2, vms->memmap[VIRT_GIC_DIST].base, - 2, vms->memmap[VIRT_GIC_DIST].size, - 2, vms->memmap[VIRT_GIC_REDIST].base, - 2, vms->memmap[VIRT_GIC_REDIST].size, - 2, vms->memmap[VIRT_GIC_REDIST2].base, - 2, vms->memmap[VIRT_GIC_REDIST2].size); + 2, vms->memmap[VIRT_GIC_DIST].base, + 2, vms->memmap[VIRT_GIC_DIST].size, + 2, vms->memmap[VIRT_GIC_REDIST].base, + 2, vms->memmap[VIRT_GIC_REDIST].size, + 2, vms->memmap[VIRT_HIGH_GIC_REDIST2].base, + 2, vms->memmap[VIRT_HIGH_GIC_REDIST2].size); } if (vms->virt) { @@ -584,7 +584,7 @@ static void create_gic(VirtMachineState *vms, qemu_irq *pic) if (nb_redist_regions == 2) { uint32_t redist1_capacity = - vms->memmap[VIRT_GIC_REDIST2].size / GICV3_REDIST_SIZE; + vms->memmap[VIRT_HIGH_GIC_REDIST2].size / GICV3_REDIST_SIZE; qdev_prop_set_uint32(gicdev, "redist-region-count[1]", MIN(smp_cpus - redist0_count, redist1_capacity)); @@ -601,7 +601,8 @@ static void create_gic(VirtMachineState *vms, qemu_irq *pic) if (type == 3) { sysbus_mmio_map(gicbusdev, 1, vms->memmap[VIRT_GIC_REDIST].base); if (nb_redist_regions == 2) { - sysbus_mmio_map(gicbusdev, 2, vms->memmap[VIRT_GIC_REDIST2].base); + sysbus_mmio_map(gicbusdev, 2, + vms->memmap[VIRT_HIGH_GIC_REDIST2].base); } } else { sysbus_mmio_map(gicbusdev, 1, vms->memmap[VIRT_GIC_CPU].base); @@ -1088,8 +1089,8 @@ static void create_pcie(VirtMachineState *vms, qemu_irq *pic) { hwaddr base_mmio = vms->memmap[VIRT_PCIE_MMIO].base; hwaddr size_mmio = vms->memmap[VIRT_PCIE_MMIO].size; - hwaddr base_mmio_high = vms->memmap[VIRT_PCIE_MMIO_HIGH].base; - hwaddr size_mmio_high = vms->memmap[VIRT_PCIE_MMIO_HIGH].size; + hwaddr base_mmio_high = vms->memmap[VIRT_HIGH_PCIE_MMIO].base; + hwaddr size_mmio_high = vms->memmap[VIRT_HIGH_PCIE_MMIO].size; hwaddr base_pio = vms->memmap[VIRT_PCIE_PIO].base; hwaddr size_pio = vms->memmap[VIRT_PCIE_PIO].size; hwaddr base_ecam, size_ecam; @@ -1417,8 +1418,10 @@ static void machvirt_init(MachineState *machine) * many redistributors we can fit into the memory map. */ if (vms->gic_version == 3) { - virt_max_cpus = vms->memmap[VIRT_GIC_REDIST].size / GICV3_REDIST_SIZE; - virt_max_cpus += vms->memmap[VIRT_GIC_REDIST2].size / GICV3_REDIST_SIZE; + virt_max_cpus = + vms->memmap[VIRT_GIC_REDIST].size / GICV3_REDIST_SIZE; + virt_max_cpus += + vms->memmap[VIRT_HIGH_GIC_REDIST2].size / GICV3_REDIST_SIZE; } else { virt_max_cpus = GIC_NCPU; } From patchwork Tue Mar 5 16:50:43 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Maydell X-Patchwork-Id: 159693 Delivered-To: patch@linaro.org Received: by 2002:a02:5cc1:0:0:0:0:0 with SMTP id w62csp5202213jad; Tue, 5 Mar 2019 09:08:43 -0800 (PST) X-Google-Smtp-Source: APXvYqw3Ly9DKc2xtH+v/eSndVSaZB+pruyIoxgWrvvh38OBCPz7dG0wRKu3TX+l5qUMY/b0kD2y X-Received: by 2002:a5b:704:: with SMTP id g4mr3007059ybq.272.1551805723689; Tue, 05 Mar 2019 09:08:43 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1551805723; cv=none; d=google.com; s=arc-20160816; b=TPi5mCGyWKcqBJGJW5bebRGRTZeRPv6/ksb64pTnjBI+VNfHSkvUewhpo8xPINJFnF 3h/j3Z/8AS1meFM2sIRNP0mxR+Ai2nOzsvimS04+xBoOTQPfesArIPDSws8Ssj/Jn0N2 70d8cvqf6C6aIMwMMmk7U4aCFNc5Ea8Klhw1ZycatKbFUckmSoq8yDUPalLHGe44SrNV 1scHeWSW3EnkPVhZ7HIfi3i2X5aa9O4wE4+W/iy/OLaGDMZ3bMKz313D9IkkAz0lvtHv AtZ9YpkUGkJcL+5/BzVVF3c/yz3Fc/mQuU0fuQJrwqnpLMcGodBlLW7IsUuOc4vpncQ+ YECQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:subject :content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:to:from:dkim-signature; bh=Ltk70KUUJO5NHKp1nZhYlY5OByUUnYGe7vFLDaegESg=; b=LX7S7B4OUB41OSqwQpxxDruxtVyRdmqVlz7oCoo9r59oT2lQQs+O42YzRirMgWM54R /5mML7x6fhVoTz36zRVmOU9wynYqPlbekAENsgX75/oXw1skdleQtgYLCF8C1yU6gT4a IwbilFMwMCAbjvUYdiC5UOJ93gJfMyibqdrttCtVRAd4UaCQQNbJdxkjKCBYWHtWA4AQ YFEFDBEIxSr0vIFGUpVoTGuneIOCBNKvhIMMWZVn3eptLxmdoiSq8kN31LdLJak+5euo DuzKQY8k5LAVOPu/wucLj5n4rbgmBxgK/XBDNVvjFr4KveCZ+H4ei6OWvq7yF0rZotJV cAZw== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=MewqAdI6; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id d186si5783456ywb.18.2019.03.05.09.08.43 for (version=TLS1 cipher=AES128-SHA bits=128/128); Tue, 05 Mar 2019 09:08:43 -0800 (PST) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; Authentication-Results: mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=MewqAdI6; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([127.0.0.1]:45991 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h1DYZ-0006tI-3z for patch@linaro.org; Tue, 05 Mar 2019 12:08:43 -0500 Received: from eggs.gnu.org ([209.51.188.92]:54645) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h1DHc-0001eO-VB for qemu-devel@nongnu.org; Tue, 05 Mar 2019 11:51:14 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1h1DHb-0000xN-RE for qemu-devel@nongnu.org; Tue, 05 Mar 2019 11:51:12 -0500 Received: from mail-wr1-x432.google.com ([2a00:1450:4864:20::432]:38667) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1h1DHb-0000wj-JT for qemu-devel@nongnu.org; Tue, 05 Mar 2019 11:51:11 -0500 Received: by mail-wr1-x432.google.com with SMTP id g12so10246954wrm.5 for ; Tue, 05 Mar 2019 08:51:11 -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=Ltk70KUUJO5NHKp1nZhYlY5OByUUnYGe7vFLDaegESg=; b=MewqAdI6sjhGbc+Blk56uaM0YNIRVyTtboHTemRG8hCq+V0YwhlaoxUiviAscm0uDL Lu80J1lccbspLllevY7UP6pkHVjatcLbO2QeL3odZrWnqq6gU3DOwPjxPD52DGoPFuzx BbFgTBDRh+fevvax3xqAebCfEaCnM+/yr0BujaQGiddzAEV9vKofWp6c7ESFuPIXYVHw nRQQw1emjO0mZCYXPY7QfWYem/HUsy6qt8b0p4fYdBrpHoddTNjngNlDrIfjc9vIaFlO CejsFBW24hFKoQy9GnJt57l51YxlRtZ4KJ+Oe+wx2JScJAcbs2v5yBe1bGRYx85NOSxI o/yw== 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=Ltk70KUUJO5NHKp1nZhYlY5OByUUnYGe7vFLDaegESg=; b=LwplTUPhrR9fIeOXxZdPIB0eTKp7BGlMzWYyIQLVDgna5HmLYxC9UzXVPnh/pCU5iW wY8nw8eKyW9IB2JjTguuXes0F009maPk2P1oguKlWlGS6YyVcyxUta8YvJvljG3NlaEz 1fFXCu5Q/wuRGzpxnO6fIBMTj7d/2WznWsovXmlaL4iQ+awMpErE5yggJ/NEF7Cra/qO U7iNzSv6AifJFjYoOS8zHwhjLQoHqWN5DSwG8MRb5QRv4gvBFPhOriM9nfKaWqYeDvwL KaFgpzurjF8K094fNobbjLn+XOEuvHibIXjAtG28flrXigaENJVW41ltAh52nkxepXTp p+rw== X-Gm-Message-State: APjAAAXUji5ASqKPu/90pA1cPjLamQRX6yIbr8YFdsGhQpO2nADreMUf TqtMcgcmxHbQPbZMAWvro+h7Oy8/VQY= X-Received: by 2002:a5d:5042:: with SMTP id h2mr17004445wrt.12.1551804670254; Tue, 05 Mar 2019 08:51:10 -0800 (PST) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id 2sm10071495wrg.89.2019.03.05.08.51.09 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 05 Mar 2019 08:51:09 -0800 (PST) From: Peter Maydell To: qemu-devel@nongnu.org Date: Tue, 5 Mar 2019 16:50:43 +0000 Message-Id: <20190305165051.26860-15-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190305165051.26860-1-peter.maydell@linaro.org> References: <20190305165051.26860-1-peter.maydell@linaro.org> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::432 Subject: [Qemu-devel] [PULL 14/22] hw/arm/virt: Split the memory map description 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+patch=linaro.org@nongnu.org Sender: "Qemu-devel" From: Eric Auger In the prospect to introduce an extended memory map supporting more RAM, let's split the memory map array into two parts: - the former a15memmap, renamed base_memmap, contains regions below and including the RAM. MemMapEntries initialized in this array have a static size and base address. - extended_memmap, only initialized with entries located after the RAM. MemMapEntries initialized in this array only get their size initialized. Their base address is dynamically computed depending on the the top of the RAM, with same alignment as their size. Eventually base_memmap entries are copied into the extended_memmap array. Using two separate arrays however clarifies which entries are statically allocated and those which are dynamically allocated. This new split will allow to grow the RAM size without changing the description of the high IO entries. We introduce a new virt_set_memmap() helper function which "freezes" the memory map. We call it in machvirt_init as memory attributes of the machine are not yet set when virt_instance_init() gets called. The memory map is unchanged (the top of the initial RAM still is 256GiB). Then come the high IO regions with same layout as before. Signed-off-by: Eric Auger Reviewed-by: Igor Mammedov Message-id: 20190304101339.25970-4-eric.auger@redhat.com Signed-off-by: Peter Maydell --- include/hw/arm/virt.h | 13 +++++++---- hw/arm/virt.c | 50 +++++++++++++++++++++++++++++++++++++------ 2 files changed, 53 insertions(+), 10 deletions(-) -- 2.20.1 diff --git a/include/hw/arm/virt.h b/include/hw/arm/virt.h index a27086d524c..f3f7fae4acd 100644 --- a/include/hw/arm/virt.h +++ b/include/hw/arm/virt.h @@ -64,7 +64,6 @@ enum { VIRT_GIC_VCPU, VIRT_GIC_ITS, VIRT_GIC_REDIST, - VIRT_HIGH_GIC_REDIST2, VIRT_SMMU, VIRT_UART, VIRT_MMIO, @@ -74,12 +73,18 @@ enum { VIRT_PCIE_MMIO, VIRT_PCIE_PIO, VIRT_PCIE_ECAM, - VIRT_HIGH_PCIE_ECAM, VIRT_PLATFORM_BUS, - VIRT_HIGH_PCIE_MMIO, VIRT_GPIO, VIRT_SECURE_UART, VIRT_SECURE_MEM, + VIRT_LOWMEMMAP_LAST, +}; + +/* indices of IO regions located after the RAM */ +enum { + VIRT_HIGH_GIC_REDIST2 = VIRT_LOWMEMMAP_LAST, + VIRT_HIGH_PCIE_ECAM, + VIRT_HIGH_PCIE_MMIO, }; typedef enum VirtIOMMUType { @@ -116,7 +121,7 @@ typedef struct { int32_t gic_version; VirtIOMMUType iommu; struct arm_boot_info bootinfo; - const MemMapEntry *memmap; + MemMapEntry *memmap; const int *irqmap; int smp_cpus; void *fdt; diff --git a/hw/arm/virt.c b/hw/arm/virt.c index 892bae4f3a7..9596c7c7f13 100644 --- a/hw/arm/virt.c +++ b/hw/arm/virt.c @@ -29,6 +29,7 @@ */ #include "qemu/osdep.h" +#include "qemu/units.h" #include "qapi/error.h" #include "hw/sysbus.h" #include "hw/arm/arm.h" @@ -121,7 +122,7 @@ * Note that devices should generally be placed at multiples of 0x10000, * to accommodate guests using 64K pages. */ -static const MemMapEntry a15memmap[] = { +static const MemMapEntry base_memmap[] = { /* Space up to 0x8000000 is reserved for a boot ROM */ [VIRT_FLASH] = { 0, 0x08000000 }, [VIRT_CPUPERIPHS] = { 0x08000000, 0x00020000 }, @@ -149,11 +150,24 @@ static const MemMapEntry a15memmap[] = { [VIRT_PCIE_PIO] = { 0x3eff0000, 0x00010000 }, [VIRT_PCIE_ECAM] = { 0x3f000000, 0x01000000 }, [VIRT_MEM] = { 0x40000000, RAMLIMIT_BYTES }, +}; + +/* + * Highmem IO Regions: This memory map is floating, located after the RAM. + * Each MemMapEntry base (GPA) will be dynamically computed, depending on the + * top of the RAM, so that its base get the same alignment as the size, + * ie. a 512GiB entry will be aligned on a 512GiB boundary. If there is + * less than 256GiB of RAM, the floating area starts at the 256GiB mark. + * Note the extended_memmap is sized so that it eventually also includes the + * base_memmap entries (VIRT_HIGH_GIC_REDIST2 index is greater than the last + * index of base_memmap). + */ +static MemMapEntry extended_memmap[] = { /* Additional 64 MB redist region (can contain up to 512 redistributors) */ - [VIRT_HIGH_GIC_REDIST2] = { 0x4000000000ULL, 0x4000000 }, - [VIRT_HIGH_PCIE_ECAM] = { 0x4010000000ULL, 0x10000000 }, - /* Second PCIe window, 512GB wide at the 512GB boundary */ - [VIRT_HIGH_PCIE_MMIO] = { 0x8000000000ULL, 0x8000000000ULL }, + [VIRT_HIGH_GIC_REDIST2] = { 0x0, 64 * MiB }, + [VIRT_HIGH_PCIE_ECAM] = { 0x0, 256 * MiB }, + /* Second PCIe window */ + [VIRT_HIGH_PCIE_MMIO] = { 0x0, 512 * GiB }, }; static const int a15irqmap[] = { @@ -1354,6 +1368,29 @@ static uint64_t virt_cpu_mp_affinity(VirtMachineState *vms, int idx) return arm_cpu_mp_affinity(idx, clustersz); } +static void virt_set_memmap(VirtMachineState *vms) +{ + hwaddr base; + int i; + + vms->memmap = extended_memmap; + + for (i = 0; i < ARRAY_SIZE(base_memmap); i++) { + vms->memmap[i] = base_memmap[i]; + } + + base = 256 * GiB; /* Top of the legacy initial RAM region */ + + for (i = VIRT_LOWMEMMAP_LAST; i < ARRAY_SIZE(extended_memmap); i++) { + hwaddr size = extended_memmap[i].size; + + base = ROUND_UP(base, size); + vms->memmap[i].base = base; + vms->memmap[i].size = size; + base += size; + } +} + static void machvirt_init(MachineState *machine) { VirtMachineState *vms = VIRT_MACHINE(machine); @@ -1368,6 +1405,8 @@ static void machvirt_init(MachineState *machine) bool firmware_loaded = bios_name || drive_get(IF_PFLASH, 0, 0); bool aarch64 = true; + virt_set_memmap(vms); + /* We can probe only here because during property set * KVM is not available yet */ @@ -1845,7 +1884,6 @@ static void virt_instance_init(Object *obj) "Valid values are none and smmuv3", NULL); - vms->memmap = a15memmap; vms->irqmap = a15irqmap; } From patchwork Tue Mar 5 16:50:44 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Maydell X-Patchwork-Id: 159690 Delivered-To: patch@linaro.org Received: by 2002:a02:5cc1:0:0:0:0:0 with SMTP id w62csp5198760jad; Tue, 5 Mar 2019 09:05:45 -0800 (PST) X-Google-Smtp-Source: APXvYqxjEDkuN0lcZVIjT+ZPjcerz2U3KZQl5D4WWTUurV9Y7BSFUVkxscdrLwrZYLa3i2ppBMp0 X-Received: by 2002:a25:ed5:: with SMTP id 204mr2897083ybo.171.1551805545702; Tue, 05 Mar 2019 09:05:45 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1551805545; cv=none; d=google.com; s=arc-20160816; b=ksYKFPldUkRt+oYlq/vzcTmYN2Es4UqgzBRg8xnrXCIaaRbcTLzl7NAKHJeFtBzgrf q6R8bhWtFJfxNHO+baGgP83AaRGMOsGwNjc66ZGcW9Pgbi6f7j7AHWAqtHbTLXVTr3/a DQUN++OQ+xCjIynbj2Ac5WKFCLe0FsDfgV3Sp+Vr3iQ6NqQkYiZsWRU3jJDYGdebUwGA s80mJxyUZTVSYWez5MgknzRloAjd2Y2XMRQwqX6CsLJcz7F69456GE+vREO9PCht5Mss 97eu6nwtw0ZNAk1k/Cf2+2BLmsJ9X6kJhExS5rRZTYPDnCiOhMduFCJktkWHfr21ewNV KWRA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:subject :content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:to:from:dkim-signature; bh=dVQd8TzX7QktWbyZTi8tAwCyN/rm2Ob7DVUS8CvABV0=; b=qw2QbEzx3AK4Q+yRLek4mBX0fGN5Jc4MNKqC0Ipq6kMdYIxZXPcRw2ZkkfncJxBD1l W6UfIADdoJCT8sQYSpdfbHR3HBuMNJugvUR2FJZX7xPIVnh6awr4SAsnS4PWI75MMQoH 8Fr/KL1m9uFVsJnVZ8iCEldf2Hvz9SCTbdzpKrb7BgaIaGPpjU3aDiwCaRRVB4YIuztm 6ihUb6gKfuFShlgiW+NZuliDP2WeLGBEjb08DG0lEDhelJe8bNqGEga140J/WWoURbxk H0f2PHXgrV/hDnSOEoLhsgLzM/osNgdZRcvTKGWbaCw0hMfotjL1/fluCE77pwv/N2tR Xhww== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=Sowll9ac; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id h62si5212582ywa.312.2019.03.05.09.05.45 for (version=TLS1 cipher=AES128-SHA bits=128/128); Tue, 05 Mar 2019 09:05:45 -0800 (PST) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; Authentication-Results: mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=Sowll9ac; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([127.0.0.1]:45918 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h1DVh-0004It-5T for patch@linaro.org; Tue, 05 Mar 2019 12:05:45 -0500 Received: from eggs.gnu.org ([209.51.188.92]:54665) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h1DHd-0001fI-Vw for qemu-devel@nongnu.org; Tue, 05 Mar 2019 11:51:14 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1h1DHc-0000yK-RL for qemu-devel@nongnu.org; Tue, 05 Mar 2019 11:51:13 -0500 Received: from mail-wm1-x343.google.com ([2a00:1450:4864:20::343]:38098) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1h1DHc-0000xg-Jz for qemu-devel@nongnu.org; Tue, 05 Mar 2019 11:51:12 -0500 Received: by mail-wm1-x343.google.com with SMTP id a188so3230617wmf.3 for ; Tue, 05 Mar 2019 08:51:12 -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=dVQd8TzX7QktWbyZTi8tAwCyN/rm2Ob7DVUS8CvABV0=; b=Sowll9acxGdHiOOpyzwEAavT6byQz+5SIfvOPEMb4O+Dh4JyyaSYqui06+me5Xmx1G HOoP/3n/AP7I9jMdYMrG2sU0NjhvD0o8w4JJ56WVgGTR2kMz8g5blYewEqyoUeyvcSnn 8nwUUnyW160EoDfM7uxEUelEiRTVbrM6OyubcgkI6EoCf/1WdbnRtbjZmdJHIEnqYZj6 2l06wXO5hXgMf0N4CJ2Jc+XsN/sZicp3ScepUGVIon3uoDcTBQ51uK9Vu4oraLX5aOO5 x2Xk34JnbatzUeYG8btisNm8gkkmavq2xvyE3RPwc8y12uevOW5TG8GXsk05ZLo0NkYE cypw== 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=dVQd8TzX7QktWbyZTi8tAwCyN/rm2Ob7DVUS8CvABV0=; b=W0Lu1NrmMbmOraeHqSHgYFjfCGe6LcfkGwz2tzU1qHFmvKzvriGtsOcBf+tSEK6FF7 g751oPSemv9ydof+AOGJmAUg6mf7r3TM9ZFIdQiRUH0XfZxJmmMrHEkUPnLliTBeATyz y315SNug8fX0mWoDlyomIpswYXyT00D+QocLV7mRBUFURBpDjo6DuHoKL2NBlyWaEkLn IoWv3RFLC7syNPqWoaPXzirca04RE3pepLLfV9Q8Hd7c+Pw9leGhJx0xFDRyAoDdLblZ rN36mUOf/9Lt4WA1QohvmuGq3PbVgxbRTLedd2DG6HBQySpK7EoQoPJBKCy4ntCe5HYg OBGg== X-Gm-Message-State: APjAAAVqF5Vjt0X0gpa2voZTlY93QbwetaUIQXsasCEg0IrDJqSOh+4o qBUp4zrRU1jMnDpVmoUWsRAtbCCOqkg= X-Received: by 2002:a1c:1b8a:: with SMTP id b132mr3317505wmb.138.1551804671285; Tue, 05 Mar 2019 08:51:11 -0800 (PST) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id 2sm10071495wrg.89.2019.03.05.08.51.10 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 05 Mar 2019 08:51:10 -0800 (PST) From: Peter Maydell To: qemu-devel@nongnu.org Date: Tue, 5 Mar 2019 16:50:44 +0000 Message-Id: <20190305165051.26860-16-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190305165051.26860-1-peter.maydell@linaro.org> References: <20190305165051.26860-1-peter.maydell@linaro.org> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::343 Subject: [Qemu-devel] [PULL 15/22] hw/boards: Add a MachineState parameter to kvm_type callback 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+patch=linaro.org@nongnu.org Sender: "Qemu-devel" From: Eric Auger On ARM, the kvm_type will be resolved by querying the KVMState. Let's add the MachineState handle to the callback so that we can retrieve the KVMState handle. in kvm_init, when the callback is called, the kvm_state variable is not yet set. Signed-off-by: Eric Auger Acked-by: David Gibson Reviewed-by: Peter Maydell Reviewed-by: Igor Mammedov Message-id: 20190304101339.25970-5-eric.auger@redhat.com [ppc parts] Reviewed-by: Peter Maydell Reviewed-by: Igor Mammedov Signed-off-by: Peter Maydell --- include/hw/boards.h | 5 ++++- accel/kvm/kvm-all.c | 2 +- hw/ppc/mac_newworld.c | 3 +-- hw/ppc/mac_oldworld.c | 2 +- hw/ppc/spapr.c | 2 +- 5 files changed, 8 insertions(+), 6 deletions(-) -- 2.20.1 diff --git a/include/hw/boards.h b/include/hw/boards.h index 21212f08590..9690c71a6d7 100644 --- a/include/hw/boards.h +++ b/include/hw/boards.h @@ -156,6 +156,9 @@ typedef struct { * should instead use "unimplemented-device" for all memory ranges where * the guest will attempt to probe for a device that QEMU doesn't * implement and a stub device is required. + * @kvm_type: + * Return the type of KVM corresponding to the kvm-type string option or + * computed based on other criteria such as the host kernel capabilities. */ struct MachineClass { /*< private >*/ @@ -171,7 +174,7 @@ struct MachineClass { void (*init)(MachineState *state); void (*reset)(void); void (*hot_add_cpu)(const int64_t id, Error **errp); - int (*kvm_type)(const char *arg); + int (*kvm_type)(MachineState *machine, const char *arg); BlockInterfaceType block_default_type; int units_per_default_bus; diff --git a/accel/kvm/kvm-all.c b/accel/kvm/kvm-all.c index fd92b6f3754..241db496c3d 100644 --- a/accel/kvm/kvm-all.c +++ b/accel/kvm/kvm-all.c @@ -1593,7 +1593,7 @@ static int kvm_init(MachineState *ms) kvm_type = qemu_opt_get(qemu_get_machine_opts(), "kvm-type"); if (mc->kvm_type) { - type = mc->kvm_type(kvm_type); + type = mc->kvm_type(ms, kvm_type); } else if (kvm_type) { ret = -EINVAL; fprintf(stderr, "Invalid argument kvm-type=%s\n", kvm_type); diff --git a/hw/ppc/mac_newworld.c b/hw/ppc/mac_newworld.c index 98461052ac0..97e88171450 100644 --- a/hw/ppc/mac_newworld.c +++ b/hw/ppc/mac_newworld.c @@ -564,8 +564,7 @@ static char *core99_fw_dev_path(FWPathProvider *p, BusState *bus, return NULL; } - -static int core99_kvm_type(const char *arg) +static int core99_kvm_type(MachineState *machine, const char *arg) { /* Always force PR KVM */ return 2; diff --git a/hw/ppc/mac_oldworld.c b/hw/ppc/mac_oldworld.c index 284431ddd68..cc1e463466d 100644 --- a/hw/ppc/mac_oldworld.c +++ b/hw/ppc/mac_oldworld.c @@ -420,7 +420,7 @@ static char *heathrow_fw_dev_path(FWPathProvider *p, BusState *bus, return NULL; } -static int heathrow_kvm_type(const char *arg) +static int heathrow_kvm_type(MachineState *machine, const char *arg) { /* Always force PR KVM */ return 2; diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c index b6a571b6f18..d7850ada7df 100644 --- a/hw/ppc/spapr.c +++ b/hw/ppc/spapr.c @@ -3023,7 +3023,7 @@ static void spapr_machine_init(MachineState *machine) } } -static int spapr_kvm_type(const char *vm_type) +static int spapr_kvm_type(MachineState *machine, const char *vm_type) { if (!vm_type) { return 0; From patchwork Tue Mar 5 16:50:45 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Maydell X-Patchwork-Id: 159694 Delivered-To: patch@linaro.org Received: by 2002:a02:5cc1:0:0:0:0:0 with SMTP id w62csp5205301jad; Tue, 5 Mar 2019 09:11:24 -0800 (PST) X-Google-Smtp-Source: APXvYqy4iCP3WCIxcgCHgsGJQ68MkPjfWBM/E5gkb3HRBT2ohX9RxeakfyyqrYWlrR6Bl4BmmC6G X-Received: by 2002:a0d:d3c3:: with SMTP id v186mr1861636ywd.15.1551805884650; Tue, 05 Mar 2019 09:11:24 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1551805884; cv=none; d=google.com; s=arc-20160816; b=zdCot/M+qerze/7n1Q94gTe2qCetyicaLrVC7kSaywqY/9Y0HlNSrmwUIO5PQfKl1I BlpeKZZiFHuWnZLDoRrIFc+B3gmARHXt89BaK9d3aRZV2NGQFupUSocpGXk5pJxCuqdo LnMXkc/cYUvqvLXE4z6YNyNk6g24r3UfMS7b3MKs6aDN04xYfYO+klt6FKVTKeFBaiQs YLmmRGpNGoSFAo7oGRcuzYX5RyxRa3DCWjfaoqlHQHYTQKHNoBPmJIeydfpZeXVDaF2v p1JoJq2klo88dKKOH+FVlS63JMX7q+QU7P9tOeBrWExqhSo4iQpNP/hyQ7ltCqCN0eoJ fF/w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:subject :content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:to:from:dkim-signature; bh=FtOTJlSq9S5t1Hgp/jxHYFpg4nKgp8+kYiOMVJluGxE=; b=KrP5/8Um1ACW9hX0DQsuYh+h40KLvzRTD+I4GlhQyeRSuH4EXq3LMupeLmYP1d/YEX UJuWxapIvYSAJOX4gSR1HMI/fjIn3Wt2q1pZLpAK843H1btUuDWUU1162CObUdixiZve MKMRZwQqVIjykVWJPa7fTDhYtxbkcrNs5HnuggAjwAwz5NoUZRw+9X7mS+AqouTGei3Z zz0YDc+tP1oyag6uOHiXe7DQ4phG+3hnkfRIBLHV8d52OuYXqetAKO804RtAnv/POZzz PSLHnNVlYq5EpGy10NlO6iyvy9/s6dDYh3CGyN5aOQYdYVzj9VtA91/fPKchWNvHgDB/ YGhg== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=a7S0iPEt; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id 134si5354542ywt.200.2019.03.05.09.11.24 for (version=TLS1 cipher=AES128-SHA bits=128/128); Tue, 05 Mar 2019 09:11:24 -0800 (PST) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; Authentication-Results: mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=a7S0iPEt; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([127.0.0.1]:46053 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h1DbA-0000w9-44 for patch@linaro.org; Tue, 05 Mar 2019 12:11:24 -0500 Received: from eggs.gnu.org ([209.51.188.92]:54679) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h1DHe-0001fw-Li for qemu-devel@nongnu.org; Tue, 05 Mar 2019 11:51:20 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1h1DHd-0000zT-Rc for qemu-devel@nongnu.org; Tue, 05 Mar 2019 11:51:14 -0500 Received: from mail-wm1-x32d.google.com ([2a00:1450:4864:20::32d]:52359) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1h1DHd-0000yU-Jq for qemu-devel@nongnu.org; Tue, 05 Mar 2019 11:51:13 -0500 Received: by mail-wm1-x32d.google.com with SMTP id f65so3252558wma.2 for ; Tue, 05 Mar 2019 08:51:13 -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=FtOTJlSq9S5t1Hgp/jxHYFpg4nKgp8+kYiOMVJluGxE=; b=a7S0iPEt5MKmw2zVQCjISHc/VmIDMzv/UJVyxyfiN1+BcvETxL2bAq7rIEo42eUMPB dvDsBxBD2R6NxC42VJsrNDPzD/I+AazSe5qgHJV3peoRT6I2UjJjTaEN3mIgvni9Byk7 ZaYxYrNJY9Dps1I4SXsubmCx57URhiYDeBSJhEwUdGpCsKG76ejzrOLvfDLFYXYomj9k TCSzzsuHNVL9FusTAZO3OzN/hlS7Rzw4vALcxM616YmWRnnGc438/E2Rj0sx7LSnuj7G QB2JpW5sPNb0to0JLWWNw6nhdchx11c34RPjCGCEF2phgW6XdwRMZRjbN/pOKW3qQC/1 l23w== 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=FtOTJlSq9S5t1Hgp/jxHYFpg4nKgp8+kYiOMVJluGxE=; b=qexBS9J8AKuWcsblp4jelYm/p1uvu+7F8NahwHhXWp+OmTBj+3DoqlgYr4lkK/2iqf 1ufnmUJbFp7jSPVwSGtMLtRsMnR1OuFs53zV2dn3v0y5Q9JVZ4B9YWNaQ8cFu5qdqhx3 p46AZ5f50RwPPF8vCF2RXT7o4OsxPcO6dQqeSv44AfB3SVMMyALYCJlpNd4erAwIfXi7 /2o8fhNTz5+0LmDogWZs6x3qAbmj5KfjLv7d+wjwG/+gJR1XIA5fR94Whl9CEq4dkAYs h+V4944mi1GGX+i27sAiD/sT51GVvVFvAH963m8S+8om3gpMbbO3n/xJ3Cl+5aAnS2hj Il6g== X-Gm-Message-State: APjAAAVIeg9JdbEnqfxoIlZ4AG9Xc3yiP3FwHqQHczWhXw/3QREIjyl+ hwuu1vP0RU2f8q8Cj81uiCISEJZs+1w= X-Received: by 2002:a1c:64c1:: with SMTP id y184mr3380474wmb.0.1551804672315; Tue, 05 Mar 2019 08:51:12 -0800 (PST) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id 2sm10071495wrg.89.2019.03.05.08.51.11 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 05 Mar 2019 08:51:11 -0800 (PST) From: Peter Maydell To: qemu-devel@nongnu.org Date: Tue, 5 Mar 2019 16:50:45 +0000 Message-Id: <20190305165051.26860-17-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190305165051.26860-1-peter.maydell@linaro.org> References: <20190305165051.26860-1-peter.maydell@linaro.org> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::32d Subject: [Qemu-devel] [PULL 16/22] kvm: add kvm_arm_get_max_vm_ipa_size 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+patch=linaro.org@nongnu.org Sender: "Qemu-devel" From: Eric Auger Add the kvm_arm_get_max_vm_ipa_size() helper that returns the number of bits in the IPA address space supported by KVM. This capability needs to be known to create the VM with a specific IPA max size (kvm_type passed along KVM_CREATE_VM ioctl. Signed-off-by: Eric Auger Reviewed-by: Igor Mammedov Message-id: 20190304101339.25970-6-eric.auger@redhat.com Signed-off-by: Peter Maydell --- target/arm/kvm_arm.h | 13 +++++++++++++ target/arm/kvm.c | 10 ++++++++++ 2 files changed, 23 insertions(+) -- 2.20.1 diff --git a/target/arm/kvm_arm.h b/target/arm/kvm_arm.h index 6393455b1d0..2a07333c615 100644 --- a/target/arm/kvm_arm.h +++ b/target/arm/kvm_arm.h @@ -207,6 +207,14 @@ bool kvm_arm_get_host_cpu_features(ARMHostCPUFeatures *ahcf); */ void kvm_arm_set_cpu_features_from_host(ARMCPU *cpu); +/** + * kvm_arm_get_max_vm_ipa_size - Returns the number of bits in the + * IPA address space supported by KVM + * + * @ms: Machine state handle + */ +int kvm_arm_get_max_vm_ipa_size(MachineState *ms); + /** * kvm_arm_sync_mpstate_to_kvm * @cpu: ARMCPU @@ -239,6 +247,11 @@ static inline void kvm_arm_set_cpu_features_from_host(ARMCPU *cpu) cpu->host_cpu_probe_failed = true; } +static inline int kvm_arm_get_max_vm_ipa_size(MachineState *ms) +{ + return -ENOENT; +} + static inline int kvm_arm_vgic_probe(void) { return 0; diff --git a/target/arm/kvm.c b/target/arm/kvm.c index e00ccf9c987..79a79f01905 100644 --- a/target/arm/kvm.c +++ b/target/arm/kvm.c @@ -18,6 +18,7 @@ #include "qemu/error-report.h" #include "sysemu/sysemu.h" #include "sysemu/kvm.h" +#include "sysemu/kvm_int.h" #include "kvm_arm.h" #include "cpu.h" #include "trace.h" @@ -162,6 +163,15 @@ void kvm_arm_set_cpu_features_from_host(ARMCPU *cpu) env->features = arm_host_cpu_features.features; } +int kvm_arm_get_max_vm_ipa_size(MachineState *ms) +{ + KVMState *s = KVM_STATE(ms->accelerator); + int ret; + + ret = kvm_check_extension(s, KVM_CAP_ARM_VM_IPA_SIZE); + return ret > 0 ? ret : 40; +} + int kvm_arch_init(MachineState *ms, KVMState *s) { /* For ARM interrupt delivery is always asynchronous, From patchwork Tue Mar 5 16:50:46 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Maydell X-Patchwork-Id: 159684 Delivered-To: patch@linaro.org Received: by 2002:a02:5cc1:0:0:0:0:0 with SMTP id w62csp5190102jad; Tue, 5 Mar 2019 08:58:26 -0800 (PST) X-Google-Smtp-Source: APXvYqxC7/1RmHWnCLZ1zzhKDQjplKi517AFod5qNQlIvozjCKLvvJjvsyTym9EzH52Z7CWR6iHk X-Received: by 2002:a0d:e8c1:: with SMTP id r184mr1824779ywe.368.1551805106581; Tue, 05 Mar 2019 08:58:26 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1551805106; cv=none; d=google.com; s=arc-20160816; b=I4ob70GKpwry2rNZiussEL3Qq0gY8GNC05fX3VzafHikaNQvsdMSuq9ykVUGwihCda qZs7pk/6ClGKjcB8yp8VuAMA+txb3vRoWHSUguzG3z+eft+bjJ9Upf05ET7mtO80BOm7 NdB901xDzYksBaT5j6LCIYzuyuszGAq1IunphmZjtjv3VxdQZzdAHo09isJjd1HQa3Lb wB6Wdw1tqZQ24/oZ35SU3oLkthfq0C9gsV3JiuuMP7RYQrdBxl9ZceZLCDYyTuEcAa1i jBq+8N4lWaCgqx+2mFXblHcX24ccWQjwi5vmv0jKNyBNYJilc3s4s4glPMwzknuIUqBv dLXA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:subject :content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:to:from:dkim-signature; bh=rRmkZleKI++MqHShCtVmRFNz1qokS1bAI2Uo/wNIcOI=; b=FSNJsvxbecTOuYtyPUaaCMVkAUd7VRnc8LV9n7w+nC32NkxCoMtkMbkh+7/9zaSzLk rnO0MqYwG/L7Avn3x2WlfJSqDAkH4hzC8VVcbk6wxANwuih4wBmL5o3ogdSYFfFUj/l7 EzwrEsH5ffHVKfL8ORZozj5D5Q+NknBhB0wiASWr+nSUKrwAuMuP9NnkYO747m3Nb03P H+2RL/6wn1B8D26fajCumFKCEx0bm+4JLXRcWDMWvv74S+jiuGGMTlCmIhtSHTStRrVy 0Yg5o2zLTC33G0d+IzoYjjn61TV9IdUJ4k8sC8AY8I/qPmswA32HAB8cXnz1r7Ag+UnL XrZA== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=pPReLF1c; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id p82si1654609ybb.349.2019.03.05.08.58.26 for (version=TLS1 cipher=AES128-SHA bits=128/128); Tue, 05 Mar 2019 08:58:26 -0800 (PST) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; Authentication-Results: mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=pPReLF1c; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([127.0.0.1]:45821 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h1DOc-0007ZE-3b for patch@linaro.org; Tue, 05 Mar 2019 11:58:26 -0500 Received: from eggs.gnu.org ([209.51.188.92]:54693) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h1DHf-0001gv-J1 for qemu-devel@nongnu.org; Tue, 05 Mar 2019 11:51:17 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1h1DHe-00011v-QM for qemu-devel@nongnu.org; Tue, 05 Mar 2019 11:51:15 -0500 Received: from mail-wr1-x436.google.com ([2a00:1450:4864:20::436]:36419) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1h1DHe-0000zo-Ig for qemu-devel@nongnu.org; Tue, 05 Mar 2019 11:51:14 -0500 Received: by mail-wr1-x436.google.com with SMTP id o17so10263426wrw.3 for ; Tue, 05 Mar 2019 08:51:14 -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=rRmkZleKI++MqHShCtVmRFNz1qokS1bAI2Uo/wNIcOI=; b=pPReLF1cX3rPvmewBNBNJjYY5kF4UHtK/nwvDidaanwflaCdGRsT18wMw/pCYGtXIz NLtpMM/ahSjUrQDMo94iEArGoYgn3Jq2nOGVx5kXnkn4ThMyRvt4Z12CIFGF56Qs45My H/5ne+JTTjxwZFJe93plYiqn9UqLpQn3+h5iaJlLuU2X6vKWi2d3TbQ+5nViMSvH2gae MniEUyv7xexWPKRLEsptTFN4r8bmC+wy74aOgNkfV+i7QPndR0dgzlH90eMYD5eDMHc9 23FJfYRgKNHtIwjdPl/doT393drz+6fGrpd2E8jMUv98sgC9frRPr74cT2iJ4l7wRaEs 2BxA== 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=rRmkZleKI++MqHShCtVmRFNz1qokS1bAI2Uo/wNIcOI=; b=jsbh5Xn8C2T7sJbIvVsXP/EIPzZeM2/phBEb1on5ar39WIifGwGZFcg6zM1fJFcdll wBo5DpEDRKg3bpfLVuASp5GlmbqqSnBcYNPXKjtZfE7UfBGNzLnUxWzmTPCKyZNs5ADc uQP1rJxDYto1FZqoDLEWYk3Wf6en1Osu6IdGKW2OblBYuHBG+cVyMLaZ2SyUUE/Rga6A uCG9YM3ewFGimNeSpwix+xIomVkPVUeEaDG0iHeiITYbIfM8y/fA8uifPBhpFyOeQr6H MEWWmHtwKVhEZ9P1ZPNRavJe5xY54kOcrB7rtsv86SJWso3nCzFx2wWht8FszY0Fbfx+ +4Bg== X-Gm-Message-State: APjAAAVQRZV7DqRFoHrizeMehuRjwMQs7qCxxTtfsEWp9CjU0KZ+RURV Uw4XOklVdxXWX6f5Y0KrhEbiXSSl4ak= X-Received: by 2002:adf:f691:: with SMTP id v17mr17600194wrp.66.1551804673401; Tue, 05 Mar 2019 08:51:13 -0800 (PST) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id 2sm10071495wrg.89.2019.03.05.08.51.12 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 05 Mar 2019 08:51:12 -0800 (PST) From: Peter Maydell To: qemu-devel@nongnu.org Date: Tue, 5 Mar 2019 16:50:46 +0000 Message-Id: <20190305165051.26860-18-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190305165051.26860-1-peter.maydell@linaro.org> References: <20190305165051.26860-1-peter.maydell@linaro.org> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::436 Subject: [Qemu-devel] [PULL 17/22] vl: Set machine ram_size, maxram_size and ram_slots earlier 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+patch=linaro.org@nongnu.org Sender: "Qemu-devel" From: Eric Auger The machine RAM attributes will need to be analyzed during the configure_accelerator() process. especially kvm_type() arm64 machine callback will use them to know how many IPA/GPA bits are needed to model the whole RAM range. So let's assign those machine state fields before calling configure_accelerator. Signed-off-by: Eric Auger Reviewed-by: Peter Maydell Reviewed-by: Igor Mammedov Message-id: 20190304101339.25970-7-eric.auger@redhat.com Signed-off-by: Peter Maydell --- vl.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) -- 2.20.1 diff --git a/vl.c b/vl.c index 502857a1769..fd0d51320d8 100644 --- a/vl.c +++ b/vl.c @@ -4239,6 +4239,9 @@ int main(int argc, char **argv, char **envp) machine_opts = qemu_get_machine_opts(); qemu_opt_foreach(machine_opts, machine_set_property, current_machine, &error_fatal); + current_machine->ram_size = ram_size; + current_machine->maxram_size = maxram_size; + current_machine->ram_slots = ram_slots; configure_accelerator(current_machine, argv[0]); @@ -4434,9 +4437,6 @@ int main(int argc, char **argv, char **envp) replay_checkpoint(CHECKPOINT_INIT); qdev_machine_init(); - current_machine->ram_size = ram_size; - current_machine->maxram_size = maxram_size; - current_machine->ram_slots = ram_slots; current_machine->boot_order = boot_order; /* parse features once if machine provides default cpu_type */ From patchwork Tue Mar 5 16:50:47 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Maydell X-Patchwork-Id: 159687 Delivered-To: patch@linaro.org Received: by 2002:a02:5cc1:0:0:0:0:0 with SMTP id w62csp5194773jad; Tue, 5 Mar 2019 09:02:36 -0800 (PST) X-Google-Smtp-Source: APXvYqyXtN3V4x81WjrB+7d3y6lIQKsBLzcLxi6uFEkLkpHwPrcjI3hGIPXCP9z7eM3TbdG1zKyo X-Received: by 2002:a81:7c54:: with SMTP id x81mr1795571ywc.12.1551805356796; Tue, 05 Mar 2019 09:02:36 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1551805356; cv=none; d=google.com; s=arc-20160816; b=K1pbJ1G57KvZVHfmVhLfCn3d1OhqFZxSiqMC/Akj34lvlkQyuqc/RIdtheU87rWk4Z ZokZ93IBTD5pz4omAGomvqWkuZG6jcwfXXB1DAPyC8YWWE3kBP+sJjM2AhkuPkXOWzRX rR1EVSYc0ojtj14upZIVf1jf9w01QIvD4vdpPtrAGex3K2ewKusZ7NUIKk70xFfGmgC/ YsSgeKTcBaSxARBhpcZKMQX2EoYjF0PhGfASeat9JibozySPG547kuLw2WQCKWNIICUR TUyRjqzHIdL7iO+immr7Qd+QagunkT33okf5Yn/rjEYyhgltNYjSJn70bPiER5qHfeZ3 wIOA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:subject :content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:to:from:dkim-signature; bh=BXvcIOjMOV2lLoMS08bHfexYpAtDhIbDmyRWy8KxZ/8=; b=gOzd6duDEYdLqpfJjpGMEC3Skiw/yy+wSdeZ7+NZhl24VMVRC8C3hgUPO3sSlwQANh 5B8fNwAbuBbIfJEsDUO7UOlMpF/anhCLfQ12tfsu37Y1I3YD81juQiT7O5nHKdeh0thW mIubSZLrfc6zJ15Jy0gFPx3i4Wz1gw3sYHk3wqOLEWf0o0j74tPoTPBrYVkm13+c0qU3 TYGvwxaNbqlL4yLOodLk7ZC5yzUzBxy7tznEdxNU+a1z+s5r9vBMyzM/Jve79m3WhkNM 0n0ieXeLjo66p/kaf9pmQkq9cHHZ6WeIta5/yJbYH6gEA46IEtf1/puOrG4Gdqbk2/B2 EJBg== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=FP58uoQL; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id x62si5774950ywa.54.2019.03.05.09.02.36 for (version=TLS1 cipher=AES128-SHA bits=128/128); Tue, 05 Mar 2019 09:02:36 -0800 (PST) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; Authentication-Results: mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=FP58uoQL; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([127.0.0.1]:45896 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h1DSe-0001vW-72 for patch@linaro.org; Tue, 05 Mar 2019 12:02:36 -0500 Received: from eggs.gnu.org ([209.51.188.92]:54727) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h1DHh-0001gz-5g for qemu-devel@nongnu.org; Tue, 05 Mar 2019 11:51:18 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1h1DHg-00013L-1n for qemu-devel@nongnu.org; Tue, 05 Mar 2019 11:51:17 -0500 Received: from mail-wr1-x436.google.com ([2a00:1450:4864:20::436]:44127) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1h1DHf-00012D-NL for qemu-devel@nongnu.org; Tue, 05 Mar 2019 11:51:15 -0500 Received: by mail-wr1-x436.google.com with SMTP id w2so10238180wrt.11 for ; Tue, 05 Mar 2019 08:51:15 -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=BXvcIOjMOV2lLoMS08bHfexYpAtDhIbDmyRWy8KxZ/8=; b=FP58uoQLPciBTcuMxfjrEDxKHyntgHr8Pq3jS7VlX2iRS+WV4spPUMioQE0mv/35fy CICK2FBvJ2Ac9or+LE53S7e8CcNHUeau9LFboj5hnx0ABFH8TPxqgqqeSOKpWovdgFOV YxytE8JhFuCiXfasZ+MAjqT8V8h2qH2OqfsxT/VdDLPsTQ14T7u4hS0Ric4inxS9UV7K 3gssmZhjB5n+wcJDyq5d9p9GV2GJ01DtV90wzOyDhE1R72rFIgBj+9os6yFcHkU2D3RR JLxbDDa5o3LBcW8wDWqG5tIGEKKMmK2hBho8VtkBbn0ZhqkZx+8vaUwMgSnqIhnAkRaL /GJA== 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=BXvcIOjMOV2lLoMS08bHfexYpAtDhIbDmyRWy8KxZ/8=; b=Dx0278fLF40rots3NehnfUacEqjWVfl07344pHDGZ/axDkxs80KHjc0lN3pKsSANRe uPfnas59ILpuG8ktn9Yk5lfc55mIP+F77gNS0+xAsE4QSKmRnoblSiO0QEBrn+cCXUja oi7X/WvA2A4x+1jVAgQHvQ8HNM6iYhlyXkCPy+vlSN9bFdpSLpc7ejBa4VlP6pVeOV7h iLnUKnWe100ha8FvE4T60usU3VAPllAktzQvpsdiD8Z8daBX0VJyyU5svOR8+PHJaoyR +uBkMoy4bVgdxhDsc3cRjFveDGKYCyGduyQ3Fw5mHhN5F+o6SQvvi7FtyIMYm6g8duEt TclQ== X-Gm-Message-State: APjAAAUwas+UeIlHiwecoPNzVL+7xIBgk+/oE4JjI0Gjxj34Fav6+IN9 zt8GvSAAi5Zt87OLCDYz7mYrPiEz+EM= X-Received: by 2002:adf:e982:: with SMTP id h2mr18055824wrm.241.1551804674469; Tue, 05 Mar 2019 08:51:14 -0800 (PST) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id 2sm10071495wrg.89.2019.03.05.08.51.13 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 05 Mar 2019 08:51:13 -0800 (PST) From: Peter Maydell To: qemu-devel@nongnu.org Date: Tue, 5 Mar 2019 16:50:47 +0000 Message-Id: <20190305165051.26860-19-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190305165051.26860-1-peter.maydell@linaro.org> References: <20190305165051.26860-1-peter.maydell@linaro.org> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::436 Subject: [Qemu-devel] [PULL 18/22] hw/arm/virt: Dynamic memory map depending on RAM requirements 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+patch=linaro.org@nongnu.org Sender: "Qemu-devel" From: Eric Auger Up to now the memory map has been static and the high IO region base has always been 256GiB. This patch modifies the virt_set_memmap() function, which freezes the memory map, so that the high IO range base becomes floating, located after the initial RAM and the device memory. The function computes - the base of the device memory, - the size of the device memory, - the high IO region base - the highest GPA used in the memory map. Entries of the high IO region are assigned a base address. The device memory is initialized. The highest GPA used in the memory map will be used at VM creation to choose the requested IPA size. Setting all the existing highmem IO regions beyond the RAM allows to have a single contiguous RAM region (initial RAM and possible hotpluggable device memory). That way we do not need to do invasive changes in the EDK2 FW to support a dynamic RAM base. Still the user cannot request an initial RAM size greater than 255GB. Signed-off-by: Eric Auger Reviewed-by: Igor Mammedov Message-id: 20190304101339.25970-8-eric.auger@redhat.com Signed-off-by: Peter Maydell --- include/hw/arm/virt.h | 1 + hw/arm/virt.c | 52 ++++++++++++++++++++++++++++++++++++++----- 2 files changed, 47 insertions(+), 6 deletions(-) -- 2.20.1 diff --git a/include/hw/arm/virt.h b/include/hw/arm/virt.h index f3f7fae4acd..507517c603b 100644 --- a/include/hw/arm/virt.h +++ b/include/hw/arm/virt.h @@ -131,6 +131,7 @@ typedef struct { uint32_t msi_phandle; uint32_t iommu_phandle; int psci_conduit; + hwaddr highest_gpa; } VirtMachineState; #define VIRT_ECAM_ID(high) (high ? VIRT_HIGH_PCIE_ECAM : VIRT_PCIE_ECAM) diff --git a/hw/arm/virt.c b/hw/arm/virt.c index 9596c7c7f13..2e788a0361e 100644 --- a/hw/arm/virt.c +++ b/hw/arm/virt.c @@ -59,6 +59,7 @@ #include "qapi/visitor.h" #include "standard-headers/linux/input.h" #include "hw/arm/smmuv3.h" +#include "hw/acpi/acpi.h" #define DEFINE_VIRT_MACHINE_LATEST(major, minor, latest) \ static void virt_##major##_##minor##_class_init(ObjectClass *oc, \ @@ -107,8 +108,8 @@ * of a terabyte of RAM will be doing it on a host with more than a * terabyte of physical address space.) */ -#define RAMLIMIT_GB 255 -#define RAMLIMIT_BYTES (RAMLIMIT_GB * 1024ULL * 1024 * 1024) +#define LEGACY_RAMLIMIT_GB 255 +#define LEGACY_RAMLIMIT_BYTES (LEGACY_RAMLIMIT_GB * GiB) /* Addresses and sizes of our components. * 0..128MB is space for a flash device so we can run bootrom code such as UEFI. @@ -149,7 +150,8 @@ static const MemMapEntry base_memmap[] = { [VIRT_PCIE_MMIO] = { 0x10000000, 0x2eff0000 }, [VIRT_PCIE_PIO] = { 0x3eff0000, 0x00010000 }, [VIRT_PCIE_ECAM] = { 0x3f000000, 0x01000000 }, - [VIRT_MEM] = { 0x40000000, RAMLIMIT_BYTES }, + /* Actual RAM size depends on initial RAM and device memory settings */ + [VIRT_MEM] = { GiB, LEGACY_RAMLIMIT_BYTES }, }; /* @@ -1370,7 +1372,8 @@ static uint64_t virt_cpu_mp_affinity(VirtMachineState *vms, int idx) static void virt_set_memmap(VirtMachineState *vms) { - hwaddr base; + MachineState *ms = MACHINE(vms); + hwaddr base, device_memory_base, device_memory_size; int i; vms->memmap = extended_memmap; @@ -1379,7 +1382,32 @@ static void virt_set_memmap(VirtMachineState *vms) vms->memmap[i] = base_memmap[i]; } - base = 256 * GiB; /* Top of the legacy initial RAM region */ + if (ms->ram_slots > ACPI_MAX_RAM_SLOTS) { + error_report("unsupported number of memory slots: %"PRIu64, + ms->ram_slots); + exit(EXIT_FAILURE); + } + + /* + * We compute the base of the high IO region depending on the + * amount of initial and device memory. The device memory start/size + * is aligned on 1GiB. We never put the high IO region below 256GiB + * so that if maxram_size is < 255GiB we keep the legacy memory map. + * The device region size assumes 1GiB page max alignment per slot. + */ + device_memory_base = + ROUND_UP(vms->memmap[VIRT_MEM].base + ms->ram_size, GiB); + device_memory_size = ms->maxram_size - ms->ram_size + ms->ram_slots * GiB; + + /* Base address of the high IO region */ + base = device_memory_base + ROUND_UP(device_memory_size, GiB); + if (base < device_memory_base) { + error_report("maxmem/slots too huge"); + exit(EXIT_FAILURE); + } + if (base < vms->memmap[VIRT_MEM].base + LEGACY_RAMLIMIT_BYTES) { + base = vms->memmap[VIRT_MEM].base + LEGACY_RAMLIMIT_BYTES; + } for (i = VIRT_LOWMEMMAP_LAST; i < ARRAY_SIZE(extended_memmap); i++) { hwaddr size = extended_memmap[i].size; @@ -1389,6 +1417,13 @@ static void virt_set_memmap(VirtMachineState *vms) vms->memmap[i].size = size; base += size; } + vms->highest_gpa = base - 1; + if (device_memory_size > 0) { + ms->device_memory = g_malloc0(sizeof(*ms->device_memory)); + ms->device_memory->base = device_memory_base; + memory_region_init(&ms->device_memory->mr, OBJECT(vms), + "device-memory", device_memory_size); + } } static void machvirt_init(MachineState *machine) @@ -1475,7 +1510,8 @@ static void machvirt_init(MachineState *machine) vms->smp_cpus = smp_cpus; if (machine->ram_size > vms->memmap[VIRT_MEM].size) { - error_report("mach-virt: cannot model more than %dGB RAM", RAMLIMIT_GB); + error_report("mach-virt: cannot model more than %dGB RAM", + LEGACY_RAMLIMIT_GB); exit(1); } @@ -1569,6 +1605,10 @@ static void machvirt_init(MachineState *machine) memory_region_allocate_system_memory(ram, NULL, "mach-virt.ram", machine->ram_size); memory_region_add_subregion(sysmem, vms->memmap[VIRT_MEM].base, ram); + if (machine->device_memory) { + memory_region_add_subregion(sysmem, machine->device_memory->base, + &machine->device_memory->mr); + } create_flash(vms, sysmem, secure_sysmem ? secure_sysmem : sysmem); From patchwork Tue Mar 5 16:50:48 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Maydell X-Patchwork-Id: 159692 Delivered-To: patch@linaro.org Received: by 2002:a02:5cc1:0:0:0:0:0 with SMTP id w62csp5199385jad; Tue, 5 Mar 2019 09:06:14 -0800 (PST) X-Google-Smtp-Source: APXvYqwnyRYYsfIbdkkWxHj8l3nAM27iRXMBdrVEiZIS2fxLLQKsFKJwlI1W6ZVzbfQfc7QQ6Vjq X-Received: by 2002:ac8:2995:: with SMTP id 21mr2183149qts.297.1551805574159; Tue, 05 Mar 2019 09:06:14 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1551805574; cv=none; d=google.com; s=arc-20160816; b=HYKxMIys1BuoVJ1gzOQJwnpzFW0suWr6vMAhC4ERf11KuS/xsv4dAP6fCZWjmRtzBR kyhBjGUFdxdQ0ClpbAaDuyUhLIpMHFaqS097sEM+kQm618F1W4blRMiLygdT6QYcdrGa phE6fPcBlDwFs4hLuJMYLZ8v6T3pV5UC3cCm+dbXVEDvtH01nAwkfpnUt9U0V7n2+PnS xNo12i3CgZfFBscXE+U1WcBhZChF+RciuPoHBBP35Kkh7f/l9BNjQQawbpxJy36S0DEc UPkl9MlUGAFx7RtioFOE4b26OYgpdfLObnxzHLelFosCohfxVPXlBLCGf49nHLpH4CBc xxkQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:subject :content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:to:from:dkim-signature; bh=EOGiDxex+R/Z4NUtbpgj5pPr6Td3m3QTjRVX/jrIni4=; b=ctJV0KNq1dUSUvfRljOCYO4v/dcipdJA5lu/YzEy9PL/sBYa9vaaIXrSmgWEff4hKB fXHb8foHwNt1YfUi7FTPORXARdtIaKUT7rtI7O1qjJ0UC4WTzmOSWcJIaPpnTciz8Pp5 JM5b6bnVHFWjFnycfbS/XV4va4vh15IwAy/S9+D+HmRTdLyNVMJ87SNGg3TmhTBwfkm/ ZIhERePI3rKgrosdrM4PcPQJOuxM0wMgjMtToWyM/k+lHDDitT947FxfoHYWO+odf2gf rSoS1evDmlH9q0UIx4j+8igehzDFuEBlK4RehqDPbuM37OO2iu8zI7VNZyUGX+wuopFX g8iQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=TTgh+EL9; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id r58si676546qte.87.2019.03.05.09.06.14 for (version=TLS1 cipher=AES128-SHA bits=128/128); Tue, 05 Mar 2019 09:06:14 -0800 (PST) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; Authentication-Results: mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=TTgh+EL9; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([127.0.0.1]:45958 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h1DW9-0005g9-Hf for patch@linaro.org; Tue, 05 Mar 2019 12:06:13 -0500 Received: from eggs.gnu.org ([209.51.188.92]:54741) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h1DHh-0001h1-OR for qemu-devel@nongnu.org; Tue, 05 Mar 2019 11:51:18 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1h1DHg-00014x-UT for qemu-devel@nongnu.org; Tue, 05 Mar 2019 11:51:17 -0500 Received: from mail-wr1-x433.google.com ([2a00:1450:4864:20::433]:38669) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1h1DHg-00013Z-Ma for qemu-devel@nongnu.org; Tue, 05 Mar 2019 11:51:16 -0500 Received: by mail-wr1-x433.google.com with SMTP id g12so10247353wrm.5 for ; Tue, 05 Mar 2019 08:51:16 -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=EOGiDxex+R/Z4NUtbpgj5pPr6Td3m3QTjRVX/jrIni4=; b=TTgh+EL9wZRIIDLUndtgNudEUDtXstDqZ62J/YSO7npDsrZORwrh5EWpjf1jbv8c6M 4n69f47BItgmLYGdZFUOKEpJtDsGxc9kLzIhwVqcJBX+mB1RDFanzdEKdPhYyRhOg4v3 PbMTqv+UNTil4X6HB6CeYDWv8zwCHcQeOPO9YgOlpwO+1WoplruzbkodyxCltO/LOSq1 Z2HYOeSDPKGBAEJqsCzgwG6kgA6NwTMRG1LW8wrKWNIlAk8qGySREoy5aO33T2VSwQ5N GQa+/8uC8gRz2iWtYVsul/OqcSRvkxFDe1//ztPlaLe5VQ9tyyQ+rf0W4+BjS4Qky+m8 mpvQ== 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=EOGiDxex+R/Z4NUtbpgj5pPr6Td3m3QTjRVX/jrIni4=; b=kNUDEgynSBN3hpbJuKwzbeu4w/FuViwKQ+c89XF2R46ZMHii3tAJUuoMg6myRRuApV t2bgB2/FHkRoQuj0HUjX3UenjzEwRYnIXc2CB2gRHr0kgAbXM3hAC5fRcI7LxyA4EVY8 YAlooZ1ljjA9W8ZT/Ubhl5k0KfS54nusbRbmubyy8IgjEti+eHp8yVh0wJ7HK5Lq1xDg jbEXRpw3nhg+2vfbfv14FyX/MLk1X/qbPbDYb0bby1liBD96cWWx3tuIzgY0bPRrXIX9 lAzI2x2wQebSY77CIIrnG+GlEd7SVNj+wbmTc8pZt8A9ry8rGt9WamwzX4AKF8xeQ4wK LMWg== X-Gm-Message-State: APjAAAWfy1fJGqh0rb9yhuovj7sI7pHESE8EuYWHFFEHVkzKq4qsD0zC 2ZD+Pl+GDe1do3blvAYJYtQna/Hi414= X-Received: by 2002:adf:e98c:: with SMTP id h12mr17862537wrm.302.1551804675480; Tue, 05 Mar 2019 08:51:15 -0800 (PST) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id 2sm10071495wrg.89.2019.03.05.08.51.14 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 05 Mar 2019 08:51:14 -0800 (PST) From: Peter Maydell To: qemu-devel@nongnu.org Date: Tue, 5 Mar 2019 16:50:48 +0000 Message-Id: <20190305165051.26860-20-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190305165051.26860-1-peter.maydell@linaro.org> References: <20190305165051.26860-1-peter.maydell@linaro.org> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::433 Subject: [Qemu-devel] [PULL 19/22] hw/arm/virt: Implement kvm_type function for 4.0 machine 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+patch=linaro.org@nongnu.org Sender: "Qemu-devel" From: Eric Auger This patch implements the machine class kvm_type() callback. It returns the number of bits requested to implement the whole GPA range including the RAM and IO regions located beyond. The returned value is passed though the KVM_CREATE_VM ioctl and this allows KVM to set the stage2 tables dynamically. To compute the highest GPA used in the memory map, kvm_type() must freeze the memory map by calling virt_set_memmap(). Signed-off-by: Eric Auger Reviewed-by: Igor Mammedov Message-id: 20190304101339.25970-9-eric.auger@redhat.com Signed-off-by: Peter Maydell --- hw/arm/virt.c | 39 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) -- 2.20.1 diff --git a/hw/arm/virt.c b/hw/arm/virt.c index 2e788a0361e..3ac6b152f55 100644 --- a/hw/arm/virt.c +++ b/hw/arm/virt.c @@ -1440,7 +1440,13 @@ static void machvirt_init(MachineState *machine) bool firmware_loaded = bios_name || drive_get(IF_PFLASH, 0, 0); bool aarch64 = true; - virt_set_memmap(vms); + /* + * In accelerated mode, the memory map is computed earlier in kvm_type() + * to create a VM with the right number of IPA bits. + */ + if (!vms->memmap) { + virt_set_memmap(vms); + } /* We can probe only here because during property set * KVM is not available yet @@ -1829,6 +1835,36 @@ static HotplugHandler *virt_machine_get_hotplug_handler(MachineState *machine, return NULL; } +/* + * for arm64 kvm_type [7-0] encodes the requested number of bits + * in the IPA address space + */ +static int virt_kvm_type(MachineState *ms, const char *type_str) +{ + VirtMachineState *vms = VIRT_MACHINE(ms); + int max_vm_pa_size = kvm_arm_get_max_vm_ipa_size(ms); + int requested_pa_size; + + /* we freeze the memory map to compute the highest gpa */ + virt_set_memmap(vms); + + requested_pa_size = 64 - clz64(vms->highest_gpa); + + if (requested_pa_size > max_vm_pa_size) { + error_report("-m and ,maxmem option values " + "require an IPA range (%d bits) larger than " + "the one supported by the host (%d bits)", + requested_pa_size, max_vm_pa_size); + exit(1); + } + /* + * By default we return 0 which corresponds to an implicit legacy + * 40b IPA setting. Otherwise we return the actual requested PA + * logsize + */ + return requested_pa_size > 40 ? requested_pa_size : 0; +} + static void virt_machine_class_init(ObjectClass *oc, void *data) { MachineClass *mc = MACHINE_CLASS(oc); @@ -1853,6 +1889,7 @@ static void virt_machine_class_init(ObjectClass *oc, void *data) mc->cpu_index_to_instance_props = virt_cpu_index_to_props; mc->default_cpu_type = ARM_CPU_TYPE_NAME("cortex-a15"); mc->get_default_cpu_node_id = virt_get_default_cpu_node_id; + mc->kvm_type = virt_kvm_type; assert(!mc->get_hotplug_handler); mc->get_hotplug_handler = virt_machine_get_hotplug_handler; hc->plug = virt_machine_device_plug_cb; From patchwork Tue Mar 5 16:50:49 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Maydell X-Patchwork-Id: 159695 Delivered-To: patch@linaro.org Received: by 2002:a02:5cc1:0:0:0:0:0 with SMTP id w62csp5205392jad; Tue, 5 Mar 2019 09:11:28 -0800 (PST) X-Google-Smtp-Source: APXvYqymV4PD6kwt9V+gDbWWYmJLTAbC9rMQuASPcp59Oq8cJd30NMGOS9UrWWEVR/5ZOQiPNh01 X-Received: by 2002:a81:3e16:: with SMTP id l22mr1869846ywa.52.1551805888533; Tue, 05 Mar 2019 09:11:28 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1551805888; cv=none; d=google.com; s=arc-20160816; b=Wq1fJcE1VC1mkWGmLcMnZZlMg2ZGHkLlFKViXuU7PZ8Td68G5x8QJTx7xkMHlb6zAv 5UIvlWwELfaENjhI+FDh2o5lEIIwnIumh47zYCIb2KWPxWSz0bnyKKsx7X0QYAnuITkC afy2b8ODM+xY7VEtViiX6tCVlseleMSlp987wEaRfVxRs2mmHTnGVrduS2szoEhhhRwB ETpCDeuDzROR1K4y3Uj+VeI6TOryZ6fKdqeSUPFaczifxSDksggk79a5/u2aRdJgE26G sVi6E0UApDfJJcEvPSR5Qobyd3B92zhqA31rcC/WjrfO1CvA1j9wCbU5gXTaHHCtoO26 MRqg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:subject :content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:to:from:dkim-signature; bh=NN+6qqsjp4m/0T8dHkNjHqkh9rKKEl1CqKYB6Fqs8bA=; b=Fk79hRSlgHQlp4CAsfZaol6dH6t5QAVUd2w/7sucvQDGKVn8vsGMMtykNaI/BrPB8Y 19i42ZyR+RyegnnDA3eX2on5hqCBLNTt+13AEM5L0KyQwFqX/eSI2vYjdny/2XZ7sTxh J6YwixBrvFTFKksgCw4y2LEYH0hFihCdRJEcptOPfMH3OvHuwyNphatVxGmWGAdO1+y4 2mKNF2KI1uxlC7Jwfo2OBncAGBy8zCFpJke7XFq0HwquPWuunyBIk8GQoRGppsvYTpCM Yc8TTZGentQKC9KqtAWd0r60fFsv+TkeFFhGuwgrIE1MZLdAlLqGuuDOI9M7LHDOttwF rziA== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=NzBnkRMq; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id m7si5268846ybp.450.2019.03.05.09.11.28 for (version=TLS1 cipher=AES128-SHA bits=128/128); Tue, 05 Mar 2019 09:11:28 -0800 (PST) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; Authentication-Results: mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=NzBnkRMq; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([127.0.0.1]:46084 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h1DbD-00013I-VM for patch@linaro.org; Tue, 05 Mar 2019 12:11:28 -0500 Received: from eggs.gnu.org ([209.51.188.92]:54759) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h1DHi-0001i3-Px for qemu-devel@nongnu.org; Tue, 05 Mar 2019 11:51:19 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1h1DHi-00016F-1w for qemu-devel@nongnu.org; Tue, 05 Mar 2019 11:51:18 -0500 Received: from mail-wr1-x42c.google.com ([2a00:1450:4864:20::42c]:33898) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1h1DHh-00015G-Q5 for qemu-devel@nongnu.org; Tue, 05 Mar 2019 11:51:17 -0500 Received: by mail-wr1-x42c.google.com with SMTP id f14so10259923wrg.1 for ; Tue, 05 Mar 2019 08:51:17 -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=NN+6qqsjp4m/0T8dHkNjHqkh9rKKEl1CqKYB6Fqs8bA=; b=NzBnkRMqPOLweqUP8R6EIDNWLzXoEwvx44n5Ap2+1kTMVrySP7jSuh0HkpyPFJw65b CPSHVzvRLzvlLgmCLaK0Baws3RaMXKgT33Qzmp8ao8eCFoCK+SEArRe5QGfFKFYtB42R joexxTu0L76hkpuAXYhpWGrVLn+WmeplmckL1yng1UY6VDO3aQJHKeBQ1BFGH/9GF920 SOa7mFKx0mOO8NwHMKFPZzey2Do48AZ2tkzuthwYHak9X78noCq3Vr9w7qM9TJe1QtYw aU9yYVWW+myB0Oyq/DSTVyzqK3BX+WeSOhTX9pVB1kTZ0NQrigWvGvhMNhRZxfww8yjw eK6Q== 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=NN+6qqsjp4m/0T8dHkNjHqkh9rKKEl1CqKYB6Fqs8bA=; b=ceXs8GPfZwdJlntkG8uAlu3/0Yz3G6CFZVNEROOQjNQ2D7KDdmvuD75eFK2DZDNnB5 Z0Y1i9lUlyGr4RWFFSdfMZInyN7EXX7jMZdGj24ggMdkbzYcZyV1Elz9Tm1sKZEcxOSN VUEHtCI4PXV1QOW3C9e36kyqWgUA0NqJ0ZcFH8fEhf96yyTQjXE5yvBZ2/JMWLB3ZOKZ FL05DFd7HILw0dJCRqAUjFjhOqKH5QtVJL5WS3KnVhe3Rqot+lszzQGUSQC38SUn3Fdc 6vWJNIOwrygZXoxJw+aWLR9D7UMrzrybCUwPZMMsojk7SSgzhhnRLMnSNZPTl3icnbGF hpUw== X-Gm-Message-State: APjAAAW79BmBE9k2nfvw2Sh5VOLTZ93BirbWpR1uacADPPq7nnDZRk1N 3eXOhoj37vbOmWaKeUCJ6W2xkvmUa00= X-Received: by 2002:a05:6000:14d:: with SMTP id r13mr18191232wrx.231.1551804676601; Tue, 05 Mar 2019 08:51:16 -0800 (PST) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id 2sm10071495wrg.89.2019.03.05.08.51.15 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 05 Mar 2019 08:51:15 -0800 (PST) From: Peter Maydell To: qemu-devel@nongnu.org Date: Tue, 5 Mar 2019 16:50:49 +0000 Message-Id: <20190305165051.26860-21-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190305165051.26860-1-peter.maydell@linaro.org> References: <20190305165051.26860-1-peter.maydell@linaro.org> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::42c Subject: [Qemu-devel] [PULL 20/22] hw/arm/virt: Check the VCPU PA range in TCG mode 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+patch=linaro.org@nongnu.org Sender: "Qemu-devel" From: Eric Auger We are about to allow the memory map to grow beyond 1TB and potentially overshoot the VCPU AA64MMFR0.PARANGE. In aarch64 mode and when highmem is set, let's check the VCPU PA range is sufficient to address the highest GPA of the memory map. Signed-off-by: Eric Auger Reviewed-by: Igor Mammedov Message-id: 20190304101339.25970-10-eric.auger@redhat.com Signed-off-by: Peter Maydell --- hw/arm/virt.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) -- 2.20.1 diff --git a/hw/arm/virt.c b/hw/arm/virt.c index 3ac6b152f55..d725daefdf8 100644 --- a/hw/arm/virt.c +++ b/hw/arm/virt.c @@ -60,6 +60,7 @@ #include "standard-headers/linux/input.h" #include "hw/arm/smmuv3.h" #include "hw/acpi/acpi.h" +#include "target/arm/internals.h" #define DEFINE_VIRT_MACHINE_LATEST(major, minor, latest) \ static void virt_##major##_##minor##_class_init(ObjectClass *oc, \ @@ -1608,6 +1609,22 @@ static void machvirt_init(MachineState *machine) fdt_add_timer_nodes(vms); fdt_add_cpu_nodes(vms); + if (!kvm_enabled()) { + ARMCPU *cpu = ARM_CPU(first_cpu); + bool aarch64 = object_property_get_bool(OBJECT(cpu), "aarch64", NULL); + + if (aarch64 && vms->highmem) { + int requested_pa_size, pamax = arm_pamax(cpu); + + requested_pa_size = 64 - clz64(vms->highest_gpa); + if (pamax < requested_pa_size) { + error_report("VCPU supports less PA bits (%d) than requested " + "by the memory map (%d)", pamax, requested_pa_size); + exit(1); + } + } + } + memory_region_allocate_system_memory(ram, NULL, "mach-virt.ram", machine->ram_size); memory_region_add_subregion(sysmem, vms->memmap[VIRT_MEM].base, ram); From patchwork Tue Mar 5 16:50:50 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Maydell X-Patchwork-Id: 159696 Delivered-To: patch@linaro.org Received: by 2002:a02:5cc1:0:0:0:0:0 with SMTP id w62csp5205827jad; Tue, 5 Mar 2019 09:11:49 -0800 (PST) X-Google-Smtp-Source: APXvYqxXyWctzBSCY7mXxOWhIAzQIXo0ZFoibuWeVJX9w5gzVo2mN8JObMfiX2z86Mtjw7BYWzNS X-Received: by 2002:a0d:f787:: with SMTP id h129mr1798719ywf.423.1551805909646; Tue, 05 Mar 2019 09:11:49 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1551805909; cv=none; d=google.com; s=arc-20160816; b=TD9pX16iAYXP8Yz6qw6BZcgsmD6/u+EL6IxQDI7UquA1GF/Y7H/pbIqmnfEfX5cOxV mCPvDpDrSrwp06y+pzkAF0kKOYZeURAsIe9gAnxiVrpOfkeBPmmAutyqaFtoyHdE0bxN 4GKExWETDwtyB7d2i1N+laVfKgwT5fGMW5Ihuglw41KOW+Is/TLRL/MeWMM8LvCyRh2i X7IpF/donSeE9yT+UzhASeyOY8Y9sKTQY9GNV+xPg2rheIOeV6Wa1caBIgc+RFJyEJkc iqW5u99uzcbe5nRmktfZSOc3k4jh3HCU4zyHYxGZAtdixLuuvJ9ySSPobrmDwH8noaqO nxvQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:subject :content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:to:from:dkim-signature; bh=fgrlSrnCDWbUi+fwU0OUKVRl93viFKwQS+TNszyVvoM=; b=fEQMAnNkVYe3hj+POFDN88KIXMRAKN4YBxFRuYcGTeMAb74m6Qc41hhvRXA9wwxYgH 6ne9SHlYBZBGQjO6DWDUCuz04ltZdtGE48D4KRJsoVeSgJCBQsp4BaxglwM783aPuPWl WHTqV+iDTwmUVNJ4aPYiQuXoHLpaKICUMF1jYun1JtnYRCkbIDdVLzvk6PxlPkcZheXW i+8DW+R0GphxabuLK8kQhCRokFMIlI5nOi6s+LPXreh8ODaJNcdc8dMBv3aYilrTMXJK osh42m1T8W6eOknOUch8UtWq4K3PIDMDyiyb+4JnenCve/YZ6NxnV5UnPBXNn/9WLYIC Uw6Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=z8WhhIV3; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id 8si5386479ybf.253.2019.03.05.09.11.49 for (version=TLS1 cipher=AES128-SHA bits=128/128); Tue, 05 Mar 2019 09:11:49 -0800 (PST) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; Authentication-Results: mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=z8WhhIV3; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([127.0.0.1]:46103 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h1DbZ-0002EK-1s for patch@linaro.org; Tue, 05 Mar 2019 12:11:49 -0500 Received: from eggs.gnu.org ([209.51.188.92]:54776) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h1DHj-0001jI-W6 for qemu-devel@nongnu.org; Tue, 05 Mar 2019 11:51:20 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1h1DHj-00018R-6J for qemu-devel@nongnu.org; Tue, 05 Mar 2019 11:51:19 -0500 Received: from mail-wr1-x436.google.com ([2a00:1450:4864:20::436]:46817) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1h1DHi-00017P-VV for qemu-devel@nongnu.org; Tue, 05 Mar 2019 11:51:19 -0500 Received: by mail-wr1-x436.google.com with SMTP id i16so10228799wrs.13 for ; Tue, 05 Mar 2019 08:51:18 -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=fgrlSrnCDWbUi+fwU0OUKVRl93viFKwQS+TNszyVvoM=; b=z8WhhIV3iDHU57ajzgJ83PKj9GuXS/DxRL3jDU87gWYU1GIDtMYox4PaUNjjV3BAzo PIreWqfWliHvpBwBKuEN1Ql+r8aLNnaUB/L5ykug+T6D/rgh2VRQQ93sbBgbPMjWHrFY i+ruNcBTqWDFDreRry5fpCbb4T9oAY+4frs6IfInnPCisS1WdaAmqcYPxj7JzCROkaRV DDabC0YTFJP9S4Ci44nSUL2q9ngHZmkvAaefJb8ssNp077H8AMsYa3m14pVn6ucUxKZP FXaxj1PxDC0HrEK2J6/0GHwXZqnUUy1qFJR2gsvSUvIP0zhutECCv1jCQopppT8SFjn5 zoTA== 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=fgrlSrnCDWbUi+fwU0OUKVRl93viFKwQS+TNszyVvoM=; b=J3Eg24PGh7Q7qFdXKvPz0X4F78ZIVrlfa3T79Jfl4YT6aKt+QfABmzBZV4V+stOLE/ grqlEWiwhQpXiBftcXM2eBy2vBGv6BK/ddjJsE+65+U6RSiIefoAd4EZmpGzE0LGdc4b 62urQ3zP0j9jootO7lIH5CzvgTgdS0fBb5GSf16bkbAhvh5vHQg8OGQT6ttdIhKAvI8r 3GYe8lXBNV1EWUqdZsPBVxDfk6HsaZx5LP7d3A5Jp7J+UwCiLh9jyslvDj3kMFEADIsg wdIt4FIoqlVwsfE2JBwxPrTOUkIvUFgdhU26IRKlPkE13v/u/i7YVfNn2+FJMHR4Vm1v F7fA== X-Gm-Message-State: APjAAAUC2dV+no6kQNxPNLBd2XyAbWQWXEguhd11S30KKjQZV6tBPCXP xVpYuwXeL4lj1il1Tf+g9aZNDxfwtuY= X-Received: by 2002:adf:f4d0:: with SMTP id h16mr17674262wrp.103.1551804677774; Tue, 05 Mar 2019 08:51:17 -0800 (PST) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id 2sm10071495wrg.89.2019.03.05.08.51.16 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 05 Mar 2019 08:51:16 -0800 (PST) From: Peter Maydell To: qemu-devel@nongnu.org Date: Tue, 5 Mar 2019 16:50:50 +0000 Message-Id: <20190305165051.26860-22-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190305165051.26860-1-peter.maydell@linaro.org> References: <20190305165051.26860-1-peter.maydell@linaro.org> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::436 Subject: [Qemu-devel] [PULL 21/22] hw/arm/virt: Bump the 255GB initial RAM limit 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+patch=linaro.org@nongnu.org Sender: "Qemu-devel" From: Eric Auger Now we have the extended memory map (high IO regions beyond the scalable RAM) and dynamic IPA range support at KVM/ARM level we can bump the legacy 255GB initial RAM limit. The actual maximum RAM size now depends on the physical CPU and host kernel, in accelerated mode. In TCG mode, it depends on the VCPU AA64MMFR0.PARANGE. Signed-off-by: Eric Auger Reviewed-by: Igor Mammedov Message-id: 20190304101339.25970-11-eric.auger@redhat.com Signed-off-by: Peter Maydell --- hw/arm/virt.c | 21 +-------------------- 1 file changed, 1 insertion(+), 20 deletions(-) -- 2.20.1 diff --git a/hw/arm/virt.c b/hw/arm/virt.c index d725daefdf8..c7fb5348ae7 100644 --- a/hw/arm/virt.c +++ b/hw/arm/virt.c @@ -95,20 +95,7 @@ #define PLATFORM_BUS_NUM_IRQS 64 -/* RAM limit in GB. Since VIRT_MEM starts at the 1GB mark, this means - * RAM can go up to the 256GB mark, leaving 256GB of the physical - * address space unallocated and free for future use between 256G and 512G. - * If we need to provide more RAM to VMs in the future then we need to: - * * allocate a second bank of RAM starting at 2TB and working up - * * fix the DT and ACPI table generation code in QEMU to correctly - * report two split lumps of RAM to the guest - * * fix KVM in the host kernel to allow guests with >40 bit address spaces - * (We don't want to fill all the way up to 512GB with RAM because - * we might want it for non-RAM purposes later. Conversely it seems - * reasonable to assume that anybody configuring a VM with a quarter - * of a terabyte of RAM will be doing it on a host with more than a - * terabyte of physical address space.) - */ +/* Legacy RAM limit in GB (< version 4.0) */ #define LEGACY_RAMLIMIT_GB 255 #define LEGACY_RAMLIMIT_BYTES (LEGACY_RAMLIMIT_GB * GiB) @@ -1516,12 +1503,6 @@ static void machvirt_init(MachineState *machine) vms->smp_cpus = smp_cpus; - if (machine->ram_size > vms->memmap[VIRT_MEM].size) { - error_report("mach-virt: cannot model more than %dGB RAM", - LEGACY_RAMLIMIT_GB); - exit(1); - } - if (vms->virt && kvm_enabled()) { error_report("mach-virt: KVM does not support providing " "Virtualization extensions to the guest CPU"); From patchwork Tue Mar 5 16:50:51 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Maydell X-Patchwork-Id: 159691 Delivered-To: patch@linaro.org Received: by 2002:a02:5cc1:0:0:0:0:0 with SMTP id w62csp5198802jad; Tue, 5 Mar 2019 09:05:48 -0800 (PST) X-Google-Smtp-Source: APXvYqwp0C1FztZy4TyEu/hA1yTiC6Ub1iAcaMI2XAHATtoVd+5c5On+wJX8OUhUTDZ4d84MT8J+ X-Received: by 2002:a0d:fc05:: with SMTP id m5mr1838265ywf.404.1551805548007; Tue, 05 Mar 2019 09:05:48 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1551805548; cv=none; d=google.com; s=arc-20160816; b=C9OVf+AS0twSuPY+YsmIY3xEMNO3qxiSIKzuAIOsST9AzcBb//soZqfa07QqhZjayh wq+udoYVcVAEhD3vs6nL2XGGzNM74D+1eXIr4ORVBo9NXmRH88GZaHWVSlX5N00LM1tv tlfuRULZQIluCbthckvkB+e2GkIRyZ6YfcDXYj5jqIOGIxFjYYlX1Fj0YZMD/w/lLdSN KoE9HHEYy1yhk19FOTePQFbbnhZ3eMPHWqLEGXzG2RAIJ8MoCt2I+5AJ8V2wl6e3H0QF wrOMV1hp2R/EAIBtHhinvUUANU980AA8kGZNn5BiuitN53806SzyRlS6Mo0EYxXe6KNb ZrVg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:subject :content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:to:from:dkim-signature; bh=zpV7oLWWxRWKxgzgjLZMr9EEAeiiHHj4e8BFi8lYD2E=; b=EreuSHq5qrR3azjegjxbyuMLvvKzJtKBB0rTVH8kUgDpfcL4mny1BGSvNz5JTBon3V GaH1+wLmTqGRvMV38hje9RouaiL5w1Bk+Ga9R054PeD8hP0ymByy/oszkmhp/zq4ilEi t/yBAZk/0bxr8J6i8ovEbzGqf7ecaqCbejIiwfQyJs2M3/iBQpjo7P9qygYa4ECj1N4b /ybWAzrgmAfMhE5jlWib2KfSU71CpOFoZ7Weaf9R378PbxmBwlUcPVnpfW1e6ooXWPM6 bVWO/K8DVaveMflQSKFmHoB4TlSaA/W11bdRYTGSD7Ja7PM0HgWbLH1Mr1HHpLsAdJaF nSrQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=L0r74m6E; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id o16si4907815ybp.114.2019.03.05.09.05.47 for (version=TLS1 cipher=AES128-SHA bits=128/128); Tue, 05 Mar 2019 09:05:47 -0800 (PST) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; Authentication-Results: mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=L0r74m6E; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([127.0.0.1]:45924 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h1DVj-0004M3-EB for patch@linaro.org; Tue, 05 Mar 2019 12:05:47 -0500 Received: from eggs.gnu.org ([209.51.188.92]:54801) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h1DHm-0001m3-DI for qemu-devel@nongnu.org; Tue, 05 Mar 2019 11:51:23 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1h1DHk-0001AH-TA for qemu-devel@nongnu.org; Tue, 05 Mar 2019 11:51:22 -0500 Received: from mail-wr1-x441.google.com ([2a00:1450:4864:20::441]:42999) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1h1DHk-00019A-I3 for qemu-devel@nongnu.org; Tue, 05 Mar 2019 11:51:20 -0500 Received: by mail-wr1-x441.google.com with SMTP id r5so10242005wrg.9 for ; Tue, 05 Mar 2019 08:51:20 -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=zpV7oLWWxRWKxgzgjLZMr9EEAeiiHHj4e8BFi8lYD2E=; b=L0r74m6EAytrcuNHRWnPmt/pOy/mA3Q30pZBfIg4kxZXvLeE9yxvBdqk1rW44PTQP/ CcaVYD601KbJF4VNFKw66Ss5H8eewtysrUuQbvWHDUNUXSLNeGra5+ixHsiS7YIX28Ex zE51fEIQnkVMrW+JlOwZ2UoBiZ8GvwFo+utieUb9ZduPv0EB4sxJNt9eckMj6qZmchEV UQLbViSwiLUdcz+BjG2rMCv0SXdejJvlWuoQRjl0XtWJ/oYkf/sv4WEE6aQnV2sq0VEg PlWh0+2aQoSIEDRTbSstMsS3Femr8Jn9zKXpnaTS7Y6ha5WoC0DlAlwFnz1svyMbxReN WX/Q== 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=zpV7oLWWxRWKxgzgjLZMr9EEAeiiHHj4e8BFi8lYD2E=; b=FvmJvOODvpYV3H8UZplYodphVHPZ7m5goXv6lt7dZ9Mk6ACynh4ebSE4cCevBLiHl+ eKY/sU3p6YAKMulnNMve4jA0+dNUxHz+2D5yEy3TrhfhjQs0Onf1yrfzwiSJIHbzHIqZ nRR1vLVxHld5DNGfxVlpO7r+gFE0IidZkILa7ewu1HcIa9OK3DuHIZLaJcztlYM0sadq BfTCPT+Ge4JXMbk3WwX0/Jz6w/T2zjKutfJC0G0oABhQBS0tACjGs3i0gCqJC+bfnfTQ xna9GxZK/dTbMZvFGMLS0kHC0XS/iNwENhxke2gvA7Gcl2KLQ3TgY9jmSx9dJUpM+UA6 h6Fg== X-Gm-Message-State: APjAAAVlVljhasTb5hnf/XddkqGsMhYQm3GUDFHg46JCY2kpIPE056s7 5EyybBQZye704FAThlDi/Ed0AWeG1Hc= X-Received: by 2002:adf:e58f:: with SMTP id l15mr16605202wrm.309.1551804679082; Tue, 05 Mar 2019 08:51:19 -0800 (PST) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id 2sm10071495wrg.89.2019.03.05.08.51.17 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 05 Mar 2019 08:51:18 -0800 (PST) From: Peter Maydell To: qemu-devel@nongnu.org Date: Tue, 5 Mar 2019 16:50:51 +0000 Message-Id: <20190305165051.26860-23-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190305165051.26860-1-peter.maydell@linaro.org> References: <20190305165051.26860-1-peter.maydell@linaro.org> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::441 Subject: [Qemu-devel] [PULL 22/22] hw/arm/stellaris: Implement watchdog timer 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+patch=linaro.org@nongnu.org Sender: "Qemu-devel" From: Michel Heily Implement the watchdog timer for the stellaris boards. This device is a close variant of the CMSDK APB watchdog device, so we can model it by subclassing that device and tweaking the behaviour of some of its registers. Signed-off-by: Michel Heily Reviewed-by: Peter Maydell [PMM: rewrote commit message, fixed a few checkpatch nits, added comment giving the URL of the spec for the Stellaris variant of the watchdog device] Signed-off-by: Peter Maydell --- include/hw/watchdog/cmsdk-apb-watchdog.h | 8 +++ hw/arm/stellaris.c | 22 ++++++- hw/watchdog/cmsdk-apb-watchdog.c | 74 +++++++++++++++++++++++- 3 files changed, 100 insertions(+), 4 deletions(-) -- 2.20.1 diff --git a/include/hw/watchdog/cmsdk-apb-watchdog.h b/include/hw/watchdog/cmsdk-apb-watchdog.h index ab8b5987a19..6ae9531370f 100644 --- a/include/hw/watchdog/cmsdk-apb-watchdog.h +++ b/include/hw/watchdog/cmsdk-apb-watchdog.h @@ -38,6 +38,12 @@ #define CMSDK_APB_WATCHDOG(obj) OBJECT_CHECK(CMSDKAPBWatchdog, (obj), \ TYPE_CMSDK_APB_WATCHDOG) +/* + * This shares the same struct (and cast macro) as the base + * cmsdk-apb-watchdog device. + */ +#define TYPE_LUMINARY_WATCHDOG "luminary-watchdog" + typedef struct CMSDKAPBWatchdog { /*< private >*/ SysBusDevice parent_obj; @@ -46,6 +52,7 @@ typedef struct CMSDKAPBWatchdog { MemoryRegion iomem; qemu_irq wdogint; uint32_t wdogclk_frq; + bool is_luminary; struct ptimer_state *timer; uint32_t control; @@ -54,6 +61,7 @@ typedef struct CMSDKAPBWatchdog { uint32_t itcr; uint32_t itop; uint32_t resetstatus; + const uint32_t *id; } CMSDKAPBWatchdog; #endif diff --git a/hw/arm/stellaris.c b/hw/arm/stellaris.c index 7b45fe3ccf8..05f86749f40 100644 --- a/hw/arm/stellaris.c +++ b/hw/arm/stellaris.c @@ -22,6 +22,7 @@ #include "sysemu/sysemu.h" #include "hw/arm/armv7m.h" #include "hw/char/pl011.h" +#include "hw/watchdog/cmsdk-apb-watchdog.h" #include "hw/misc/unimp.h" #include "cpu.h" @@ -1243,7 +1244,7 @@ static void stellaris_init(MachineState *ms, stellaris_board_info *board) * Stellaris LM3S6965 Microcontroller Data Sheet (rev I) * http://www.ti.com/lit/ds/symlink/lm3s6965.pdf * - * 40000000 wdtimer (unimplemented) + * 40000000 wdtimer * 40002000 i2c (unimplemented) * 40004000 GPIO * 40005000 GPIO @@ -1338,6 +1339,24 @@ static void stellaris_init(MachineState *ms, stellaris_board_info *board) stellaris_sys_init(0x400fe000, qdev_get_gpio_in(nvic, 28), board, nd_table[0].macaddr.a); + + if (board->dc1 & (1 << 3)) { /* watchdog present */ + dev = qdev_create(NULL, TYPE_LUMINARY_WATCHDOG); + + /* system_clock_scale is valid now */ + uint32_t mainclk = NANOSECONDS_PER_SECOND / system_clock_scale; + qdev_prop_set_uint32(dev, "wdogclk-frq", mainclk); + + qdev_init_nofail(dev); + sysbus_mmio_map(SYS_BUS_DEVICE(dev), + 0, + 0x40000000u); + sysbus_connect_irq(SYS_BUS_DEVICE(dev), + 0, + qdev_get_gpio_in(nvic, 18)); + } + + for (i = 0; i < 7; i++) { if (board->dc4 & (1 << i)) { gpio_dev[i] = sysbus_create_simple("pl061_luminary", gpio_addr[i], @@ -1431,7 +1450,6 @@ static void stellaris_init(MachineState *ms, stellaris_board_info *board) /* Add dummy regions for the devices we don't implement yet, * so guest accesses don't cause unlogged crashes. */ - create_unimplemented_device("wdtimer", 0x40000000, 0x1000); create_unimplemented_device("i2c-0", 0x40002000, 0x1000); create_unimplemented_device("i2c-2", 0x40021000, 0x1000); create_unimplemented_device("PWM", 0x40028000, 0x1000); diff --git a/hw/watchdog/cmsdk-apb-watchdog.c b/hw/watchdog/cmsdk-apb-watchdog.c index eb79a73fa6c..9c865bce678 100644 --- a/hw/watchdog/cmsdk-apb-watchdog.c +++ b/hw/watchdog/cmsdk-apb-watchdog.c @@ -14,6 +14,10 @@ * System Design Kit (CMSDK) and documented in the Cortex-M System * Design Kit Technical Reference Manual (ARM DDI0479C): * https://developer.arm.com/products/system-design/system-design-kits/cortex-m-system-design-kit + * + * We also support the variant of this device found in the TI + * Stellaris/Luminary boards and documented in: + * http://www.ti.com/lit/ds/symlink/lm3s6965.pdf */ #include "qemu/osdep.h" @@ -37,6 +41,7 @@ REG32(WDOGINTCLR, 0xc) REG32(WDOGRIS, 0x10) FIELD(WDOGRIS, INT, 0, 1) REG32(WDOGMIS, 0x14) +REG32(WDOGTEST, 0x418) /* only in Stellaris/Luminary version of the device */ REG32(WDOGLOCK, 0xc00) #define WDOG_UNLOCK_VALUE 0x1ACCE551 REG32(WDOGITCR, 0xf00) @@ -61,12 +66,18 @@ REG32(CID2, 0xff8) REG32(CID3, 0xffc) /* PID/CID values */ -static const int watchdog_id[] = { +static const uint32_t cmsdk_apb_watchdog_id[] = { 0x04, 0x00, 0x00, 0x00, /* PID4..PID7 */ 0x24, 0xb8, 0x1b, 0x00, /* PID0..PID3 */ 0x0d, 0xf0, 0x05, 0xb1, /* CID0..CID3 */ }; +static const uint32_t luminary_watchdog_id[] = { + 0x00, 0x00, 0x00, 0x00, /* PID4..PID7 */ + 0x05, 0x18, 0x18, 0x01, /* PID0..PID3 */ + 0x0d, 0xf0, 0x05, 0xb1, /* CID0..CID3 */ +}; + static bool cmsdk_apb_watchdog_intstatus(CMSDKAPBWatchdog *s) { /* Return masked interrupt status */ @@ -85,6 +96,10 @@ static void cmsdk_apb_watchdog_update(CMSDKAPBWatchdog *s) bool wdogres; if (s->itcr) { + /* + * Not checking that !s->is_luminary since s->itcr can't be written + * when s->is_luminary in the first place. + */ wdogint = s->itop & R_WDOGITOP_WDOGINT_MASK; wdogres = s->itop & R_WDOGITOP_WDOGRES_MASK; } else { @@ -124,19 +139,34 @@ static uint64_t cmsdk_apb_watchdog_read(void *opaque, hwaddr offset, r = s->lock; break; case A_WDOGITCR: + if (s->is_luminary) { + goto bad_offset; + } r = s->itcr; break; case A_PID4 ... A_CID3: - r = watchdog_id[(offset - A_PID4) / 4]; + r = s->id[(offset - A_PID4) / 4]; break; case A_WDOGINTCLR: case A_WDOGITOP: + if (s->is_luminary) { + goto bad_offset; + } qemu_log_mask(LOG_GUEST_ERROR, "CMSDK APB watchdog read: read of WO offset %x\n", (int)offset); r = 0; break; + case A_WDOGTEST: + if (!s->is_luminary) { + goto bad_offset; + } + qemu_log_mask(LOG_UNIMP, + "Luminary watchdog read: stall not implemented\n"); + r = 0; + break; default: +bad_offset: qemu_log_mask(LOG_GUEST_ERROR, "CMSDK APB watchdog read: bad offset %x\n", (int)offset); r = 0; @@ -170,6 +200,14 @@ static void cmsdk_apb_watchdog_write(void *opaque, hwaddr offset, ptimer_run(s->timer, 0); break; case A_WDOGCONTROL: + if (s->is_luminary && 0 != (R_WDOGCONTROL_INTEN_MASK & s->control)) { + /* + * The Luminary version of this device ignores writes to + * this register after the guest has enabled interrupts + * (so they can only be disabled again via reset). + */ + break; + } s->control = value & R_WDOGCONTROL_VALID_MASK; cmsdk_apb_watchdog_update(s); break; @@ -182,10 +220,16 @@ static void cmsdk_apb_watchdog_write(void *opaque, hwaddr offset, s->lock = (value != WDOG_UNLOCK_VALUE); break; case A_WDOGITCR: + if (s->is_luminary) { + goto bad_offset; + } s->itcr = value & R_WDOGITCR_VALID_MASK; cmsdk_apb_watchdog_update(s); break; case A_WDOGITOP: + if (s->is_luminary) { + goto bad_offset; + } s->itop = value & R_WDOGITOP_VALID_MASK; cmsdk_apb_watchdog_update(s); break; @@ -197,7 +241,15 @@ static void cmsdk_apb_watchdog_write(void *opaque, hwaddr offset, "CMSDK APB watchdog write: write to RO offset 0x%x\n", (int)offset); break; + case A_WDOGTEST: + if (!s->is_luminary) { + goto bad_offset; + } + qemu_log_mask(LOG_UNIMP, + "Luminary watchdog write: stall not implemented\n"); + break; default: +bad_offset: qemu_log_mask(LOG_GUEST_ERROR, "CMSDK APB watchdog write: bad offset 0x%x\n", (int)offset); @@ -256,6 +308,9 @@ static void cmsdk_apb_watchdog_init(Object *obj) s, "cmsdk-apb-watchdog", 0x1000); sysbus_init_mmio(sbd, &s->iomem); sysbus_init_irq(sbd, &s->wdogint); + + s->is_luminary = false; + s->id = cmsdk_apb_watchdog_id; } static void cmsdk_apb_watchdog_realize(DeviceState *dev, Error **errp) @@ -318,9 +373,24 @@ static const TypeInfo cmsdk_apb_watchdog_info = { .class_init = cmsdk_apb_watchdog_class_init, }; +static void luminary_watchdog_init(Object *obj) +{ + CMSDKAPBWatchdog *s = CMSDK_APB_WATCHDOG(obj); + + s->is_luminary = true; + s->id = luminary_watchdog_id; +} + +static const TypeInfo luminary_watchdog_info = { + .name = TYPE_LUMINARY_WATCHDOG, + .parent = TYPE_CMSDK_APB_WATCHDOG, + .instance_init = luminary_watchdog_init +}; + static void cmsdk_apb_watchdog_register_types(void) { type_register_static(&cmsdk_apb_watchdog_info); + type_register_static(&luminary_watchdog_info); } type_init(cmsdk_apb_watchdog_register_types);