From patchwork Tue Oct 11 03:19:07 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 614162 Delivered-To: patch@linaro.org Received: by 2002:a17:522:c983:b0:460:3032:e3c4 with SMTP id kr3csp2374401pvb; Mon, 10 Oct 2022 20:40:40 -0700 (PDT) X-Google-Smtp-Source: AMsMyM5LWiK5jkxfscmOxnikUyqALhahLx7YdHBMIz70oRnCUVNZPoRFhi3N1Aa6PmiXH+mhfB8X X-Received: by 2002:a05:620a:24cf:b0:6ee:6fb:4adf with SMTP id m15-20020a05620a24cf00b006ee06fb4adfmr3487454qkn.755.1665459640252; Mon, 10 Oct 2022 20:40:40 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1665459640; cv=none; d=google.com; s=arc-20160816; b=ZpMjbi+EQQj6YSLxhk9cOQxc0/e3BSGwf1RwebF7fodm06DxdGLeBauM8dHHGhYAVy 8IA9jbkuhPKiiLr2Acc6hyFtTdfRKGNarWCs1vdnpBg4e/e/WoeBQy+b7sOPyM8m+p+d KP8xxnfydjVMQPhaviafQA7lHPYWvKAQh4BnKJ628Weg23y72GR7DilB42MnzrkIybiL n8oU/PEMNG2bn6isOOf3TSduX6OPqdTYGK6apXKFrwy2zhFViey1UOdaRP4+OsehLojR UWQuUERSUopSipERv061Qnc71kaS4jnZPjdJgZkB0U3RTmwJI6+GVOVJpw+BihMNmUCz XXMg== 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:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=gpVIvUSjcXxlKo9G6SyGwDfpHpkVNVoesHQX5YvP4p8=; b=JNb8rkxurkvnjlts2tQHKy/zWCtI6UuxszPe+xK7nVIBXnKm2DQtKsTNx2aNoT4hHA IHsPv9t0GaMbj9i2Bwj5jfRZtMsHaZbHPmXCbR7owLkrG8aYrzJJMpKOD84OybE8dcut 4DkOXpqpgl5yC8dXO4UG1Ct692C0ovTcHTe3HZPwhvLY/jsCw8wB6XZjk924qX5vMsUd 2443yze7SW48ePTRisRiesslIc3OIC+G+8orS5M7dX1SZNp53MQuAz4X+SlyjnJI26Ce /ZBKvUeeDclmrvLO2DF0tEBi8jT1vpwHCkHmkAqq7QdID/kazFRT5zK2wcRMPRtfjX7Y vx2A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=l0On0j8n; 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=pass (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 fy21-20020a05622a5a1500b0039c71c28d01si230200qtb.13.2022.10.10.20.40.40 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Mon, 10 Oct 2022 20:40:40 -0700 (PDT) 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=pass header.i=@linaro.org header.s=google header.b=l0On0j8n; 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=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:47114 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oi68E-0001yC-My for patch@linaro.org; Mon, 10 Oct 2022 23:40:39 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59854) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oi5oE-0002vQ-Mu for qemu-devel@nongnu.org; Mon, 10 Oct 2022 23:19:58 -0400 Received: from mail-pf1-x431.google.com ([2607:f8b0:4864:20::431]:33380) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1oi5oB-00039A-Tw for qemu-devel@nongnu.org; Mon, 10 Oct 2022 23:19:57 -0400 Received: by mail-pf1-x431.google.com with SMTP id w2so12414632pfb.0 for ; Mon, 10 Oct 2022 20:19:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=gpVIvUSjcXxlKo9G6SyGwDfpHpkVNVoesHQX5YvP4p8=; b=l0On0j8nJ1Qznf6Pt+v8hJrEu/SYiTAJoVPGA9aV+hT4pKbEyuzAuVq8gheVM3QYha wPqFPpkL5WmunUncybJm2NPG5h+aIzZJrCVVLkw3OqfoaoYfuBEzKRSbhse3pHQgKaIl 8kVuDdEYDXksoUcUTLpQJrl0EFysWWjK1Wf6FKd0SoUUCfG/BQHvNvbiovGxiOjmuPYH xKFkpnXVr9CVDVslfjiHoUwvhZDcN4EOKzpYhQN+fgbpvnaosTBlbGXbD/KDX3sOhqYU oK+/ufXXPFysp5TqFj5iI2BbSv5m3DEtiMI1miiz+59FYDU6mcOXhE7NGGLsdM9P3GzS J9aQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=gpVIvUSjcXxlKo9G6SyGwDfpHpkVNVoesHQX5YvP4p8=; b=Ke3/D7U8O66xLGZd7PO5RCBfE4di/L9OdEFWOoInIQRBjjWjezX8bOFhO0Na0qWMWv QJpogquce1wwRwG7smP0demHCMXPweaubgOHG1GdLD4DJblO7qBavu/ri32obgBe0b0u d8occf4lpEnh86ONIE0WTnUg+1QotivGTf2BOuUJCz9Wq1U8UJSjwURv0SpUMcB7FBaE sRgaprjVTDdBN2yN5q1df304cDfHanDwjg9xI9UqngazASygBD35zKRid44uUmhlr5cG RKI+EufUjcngI4k6gI2p//RUMtZx7rZK/mf7nIdBtAAsDPepMnr2gk59vdeXKrklIw5t S3xA== X-Gm-Message-State: ACrzQf3aL6V8PxTosOrhptlDTIyVgaNeyOYZ7CMu2IBknqfjFhIw+1X7 1NEov3wGIpEAEj2UIcuPfsyBcKPTPNkQWg== X-Received: by 2002:a65:6b8e:0:b0:44f:ec0f:f684 with SMTP id d14-20020a656b8e000000b0044fec0ff684mr18686459pgw.25.1665458394569; Mon, 10 Oct 2022 20:19:54 -0700 (PDT) Received: from stoup.. ([2602:47:d49d:ec01:5aa4:aba1:1c91:a9b7]) by smtp.gmail.com with ESMTPSA id o74-20020a62cd4d000000b0055f209690c0sm7663567pfg.50.2022.10.10.20.19.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Oct 2022 20:19:50 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, Peter Maydell Subject: [PATCH v4 20/24] target/arm: Don't shift attrs in get_phys_addr_lpae Date: Mon, 10 Oct 2022 20:19:07 -0700 Message-Id: <20221011031911.2408754-21-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20221011031911.2408754-1-richard.henderson@linaro.org> References: <20221011031911.2408754-1-richard.henderson@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::431; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x431.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 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" Leave the upper and lower attributes in the place they originate from in the descriptor. Shifting them around is confusing, since one cannot read the bit numbers out of the manual. Also, new attributes have been added which would alter the shifts. Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- target/arm/ptw.c | 31 +++++++++++++++---------------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/target/arm/ptw.c b/target/arm/ptw.c index acbf09cce8..2227d2a2fd 100644 --- a/target/arm/ptw.c +++ b/target/arm/ptw.c @@ -1071,7 +1071,7 @@ static bool get_phys_addr_lpae(CPUARMState *env, S1Translate *ptw, hwaddr descaddr, indexmask, indexmask_grainsize; uint32_t tableattrs; target_ulong page_size; - uint32_t attrs; + uint64_t attrs; int32_t stride; int addrsize, inputsize, outputsize; uint64_t tcr = regime_tcr(env, mmu_idx); @@ -1338,49 +1338,48 @@ static bool get_phys_addr_lpae(CPUARMState *env, S1Translate *ptw, descaddr &= ~(hwaddr)(page_size - 1); descaddr |= (address & (page_size - 1)); /* Extract attributes from the descriptor */ - attrs = extract64(descriptor, 2, 10) - | (extract64(descriptor, 52, 12) << 10); + attrs = descriptor & (MAKE_64BIT_MASK(2, 10) | MAKE_64BIT_MASK(52, 12)); if (mmu_idx == ARMMMUIdx_Stage2 || mmu_idx == ARMMMUIdx_Stage2_S) { /* Stage 2 table descriptors do not include any attribute fields */ goto skip_attrs; } /* Merge in attributes from table descriptors */ - attrs |= nstable << 3; /* NS */ + attrs |= nstable << 5; /* NS */ guarded = extract64(descriptor, 50, 1); /* GP */ if (param.hpd) { /* HPD disables all the table attributes except NSTable. */ goto skip_attrs; } - attrs |= extract32(tableattrs, 0, 2) << 11; /* XN, PXN */ + attrs |= extract64(tableattrs, 0, 2) << 53; /* XN, PXN */ /* * The sense of AP[1] vs APTable[0] is reversed, as APTable[0] == 1 * means "force PL1 access only", which means forcing AP[1] to 0. */ - attrs &= ~(extract32(tableattrs, 2, 1) << 4); /* !APT[0] => AP[1] */ - attrs |= extract32(tableattrs, 3, 1) << 5; /* APT[1] => AP[2] */ + attrs &= ~(extract64(tableattrs, 2, 1) << 6); /* !APT[0] => AP[1] */ + attrs |= extract32(tableattrs, 3, 1) << 7; /* APT[1] => AP[2] */ skip_attrs: /* * Here descaddr is the final physical address, and attributes * are all in attrs. */ - if ((attrs & (1 << 8)) == 0) { + if ((attrs & (1 << 10)) == 0) { /* Access flag */ fi->type = ARMFault_AccessFlag; goto do_fault; } - ap = extract32(attrs, 4, 2); + ap = extract32(attrs, 6, 2); if (mmu_idx == ARMMMUIdx_Stage2 || mmu_idx == ARMMMUIdx_Stage2_S) { ns = mmu_idx == ARMMMUIdx_Stage2; - xn = extract32(attrs, 11, 2); + xn = extract64(attrs, 54, 2); result->f.prot = get_S2prot(env, ap, xn, s1_is_el0); } else { - ns = extract32(attrs, 3, 1); - xn = extract32(attrs, 12, 1); - pxn = extract32(attrs, 11, 1); + ns = extract32(attrs, 5, 1); + xn = extract64(attrs, 54, 1); + pxn = extract64(attrs, 53, 1); result->f.prot = get_S1prot(env, mmu_idx, aarch64, ap, ns, xn, pxn); } @@ -1405,10 +1404,10 @@ static bool get_phys_addr_lpae(CPUARMState *env, S1Translate *ptw, if (mmu_idx == ARMMMUIdx_Stage2 || mmu_idx == ARMMMUIdx_Stage2_S) { result->cacheattrs.is_s2_format = true; - result->cacheattrs.attrs = extract32(attrs, 0, 4); + result->cacheattrs.attrs = extract32(attrs, 2, 4); } else { /* Index into MAIR registers for cache attributes */ - uint8_t attrindx = extract32(attrs, 0, 3); + uint8_t attrindx = extract32(attrs, 2, 3); uint64_t mair = env->cp15.mair_el[regime_el(env, mmu_idx)]; assert(attrindx <= 7); result->cacheattrs.is_s2_format = false; @@ -1423,7 +1422,7 @@ static bool get_phys_addr_lpae(CPUARMState *env, S1Translate *ptw, if (param.ds) { result->cacheattrs.shareability = param.sh; } else { - result->cacheattrs.shareability = extract32(attrs, 6, 2); + result->cacheattrs.shareability = extract32(attrs, 8, 2); } result->f.phys_addr = descaddr;