From nobody Tue Feb 10 15:28:09 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1666306105; cv=none; d=zohomail.com; s=zohoarc; b=AjU4jxs09eLBHbx3Dtb5I7y4rOskv+KMLsxCxH+ACbJFQaZbYhsRjPZmXC+ECG5CWQz9yce1UcMYrIqLQ3OMN2o8MfrGJeBzZOItNMBSO78783mLu/XamA/ke5kJAoyRqWAt0jYJTl25WVfOiKBXT6vcazi+VVbjLWuZcNtX268= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1666306105; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=CAqlLEmc1/qSiJ628jszYxvmjlF1IdNnj+tj3JK4HDk=; b=SUy1+Niav2CI7lQIl93yaLEIrSTVz0tVb21W+QYaZYNDvXmuoWs18XeOLW5Q1qqDmecMuSkXYNv6YCZvHfAS84um8YVUJ4ImoTqto0TbXj+E+PuQ900xIm97mdzY5c9EvHARpmCV/QXLM5P1CeJVYfzupsJAW3mkwoXbfz4/b1o= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1666306105478349.6150782462729; Thu, 20 Oct 2022 15:48:25 -0700 (PDT) Received: from localhost ([::1] helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oleKt-0005Gu-89 for importer@patchew.org; Thu, 20 Oct 2022 18:48:23 -0400 Received: from [::1] (helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ole9y-0007Wn-B5 for importer@patchew.org; Thu, 20 Oct 2022 18:37:06 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ole9s-0007Hi-Ae for qemu-devel@nongnu.org; Thu, 20 Oct 2022 18:37:00 -0400 Received: from mail-pg1-x52b.google.com ([2607:f8b0:4864:20::52b]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1ole9o-00011s-So for qemu-devel@nongnu.org; Thu, 20 Oct 2022 18:36:59 -0400 Received: by mail-pg1-x52b.google.com with SMTP id bh13so872865pgb.4 for ; Thu, 20 Oct 2022 15:36:56 -0700 (PDT) Received: from localhost.localdomain ([149.135.10.35]) by smtp.gmail.com with ESMTPSA id r10-20020aa7988a000000b0054cd16c9f6bsm13753841pfl.200.2022.10.20.15.36.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Oct 2022 15:36: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=CAqlLEmc1/qSiJ628jszYxvmjlF1IdNnj+tj3JK4HDk=; b=hlK/7bu1Gx27WzqSDJHV3EHULhHiFyL3ecrfEfQK8QiddotXo1yWmDu9XKFRBdTeKb pJo0m9K2znfVgYScRO3HpTT3wF3BH1J/1n9Kr91IBpt67JVlqI6bg44SY4bOB13tMFbD FxDL7KMe3s7Lez/aDmZEEiZypqtVSsXC8bUOyTJ2twmgznQKQfd2AWWBJNmM4/h4lH0L kaztO+gpNCmVYd/mVsKIMjKtqPgPVy8knrgdER4LyqukLfoin0EjXAOehOuAiWtKvaKe zFBS41Mm+pRam7VqcE4kNS6zKKmI6TABldz0we+9uU4fWTlOf2W/ykm0Y1tdPWkkPlWI tGMA== 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=CAqlLEmc1/qSiJ628jszYxvmjlF1IdNnj+tj3JK4HDk=; b=lfz6RTy79iGDV/FF+t76gaY60+lJ9322uAYTqyfsj6hDoZMdaUIInmB1zs8AOCZtyQ ZSuiGyatRhTxlp+cmEUO+2R1X07WiKbQtt59Bxju+cS9H/fQnZoesUaMD/WgdAZCcyQa 8SQ9UDrUsrIECo7Cu7G6ysZWBLhIW9iqUaVn/8O6LBQFO4xoq3pVfrkRYmkJWsxlZdtl y2Zf7OvhuGljiZTOC2+W9nlMCzGi9zTiqPHkIW7re1WDDqhMzYGhMNyC56d2hqmNL1Yr YODi1M12tUlKL5UGtOXiWOvESsKO+Sg5p/6PMRYrtOvLxLCbnN4BZZSj2ftxSz+xlBVE 85FA== X-Gm-Message-State: ACrzQf1VJmrJKRAlZ8H4WtECnkaS4uga69DaFlc4StqnqAB8SopCCJLD NFQs5gcyZ6VYTzRz2+RwnsNLw/pujp1InO5v X-Google-Smtp-Source: AMsMyM5MzA9+DocHKW9WBhlNakgFkvC2M2+qjs2hlEXtCV69vzKDSzs7/qxfE9SIJpalTVc1AmlfJw== X-Received: by 2002:a63:4c23:0:b0:45f:eab4:4f47 with SMTP id z35-20020a634c23000000b0045feab44f47mr13538754pga.532.1666305416020; Thu, 20 Oct 2022 15:36:56 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, Peter Maydell Subject: [PATCH v5 09/14] target/arm: Don't shift attrs in get_phys_addr_lpae Date: Fri, 21 Oct 2022 08:35:43 +1000 Message-Id: <20221020223548.2310496-10-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20221020223548.2310496-1-richard.henderson@linaro.org> References: <20221020223548.2310496-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::52b; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x52b.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=ham 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+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1666306106765100001 Content-Type: text/plain; charset="utf-8" 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 cd16b42c96..6820c2f4bc 100644 --- a/target/arm/ptw.c +++ b/target/arm/ptw.c @@ -1069,7 +1069,7 @@ static bool get_phys_addr_lpae(CPUARMState *env, S1Tr= anslate *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 =3D regime_tcr(env, mmu_idx); @@ -1343,49 +1343,48 @@ static bool get_phys_addr_lpae(CPUARMState *env, S1= Translate *ptw, descaddr &=3D ~(hwaddr)(page_size - 1); descaddr |=3D (address & (page_size - 1)); /* Extract attributes from the descriptor */ - attrs =3D extract64(descriptor, 2, 10) - | (extract64(descriptor, 52, 12) << 10); + attrs =3D descriptor & (MAKE_64BIT_MASK(2, 10) | MAKE_64BIT_MASK(52, 1= 2)); =20 if (regime_is_stage2(mmu_idx)) { /* Stage 2 table descriptors do not include any attribute fields */ goto skip_attrs; } /* Merge in attributes from table descriptors */ - attrs |=3D nstable << 3; /* NS */ + attrs |=3D nstable << 5; /* NS */ guarded =3D extract64(descriptor, 50, 1); /* GP */ if (param.hpd) { /* HPD disables all the table attributes except NSTable. */ goto skip_attrs; } - attrs |=3D extract32(tableattrs, 0, 2) << 11; /* XN, PXN */ + attrs |=3D extract64(tableattrs, 0, 2) << 53; /* XN, PXN */ /* * The sense of AP[1] vs APTable[0] is reversed, as APTable[0] =3D=3D 1 * means "force PL1 access only", which means forcing AP[1] to 0. */ - attrs &=3D ~(extract32(tableattrs, 2, 1) << 4); /* !APT[0] =3D> AP[1= ] */ - attrs |=3D extract32(tableattrs, 3, 1) << 5; /* APT[1] =3D> AP[2]= */ + attrs &=3D ~(extract64(tableattrs, 2, 1) << 6); /* !APT[0] =3D> AP[1= ] */ + attrs |=3D extract32(tableattrs, 3, 1) << 7; /* APT[1] =3D> AP[2]= */ skip_attrs: =20 /* * Here descaddr is the final physical address, and attributes * are all in attrs. */ - if ((attrs & (1 << 8)) =3D=3D 0) { + if ((attrs & (1 << 10)) =3D=3D 0) { /* Access flag */ fi->type =3D ARMFault_AccessFlag; goto do_fault; } =20 - ap =3D extract32(attrs, 4, 2); + ap =3D extract32(attrs, 6, 2); =20 if (regime_is_stage2(mmu_idx)) { ns =3D mmu_idx =3D=3D ARMMMUIdx_Stage2; - xn =3D extract32(attrs, 11, 2); + xn =3D extract64(attrs, 54, 2); result->f.prot =3D get_S2prot(env, ap, xn, s1_is_el0); } else { - ns =3D extract32(attrs, 3, 1); - xn =3D extract32(attrs, 12, 1); - pxn =3D extract32(attrs, 11, 1); + ns =3D extract32(attrs, 5, 1); + xn =3D extract64(attrs, 54, 1); + pxn =3D extract64(attrs, 53, 1); result->f.prot =3D get_S1prot(env, mmu_idx, aarch64, ap, ns, xn, p= xn); } =20 @@ -1410,10 +1409,10 @@ static bool get_phys_addr_lpae(CPUARMState *env, S1= Translate *ptw, =20 if (regime_is_stage2(mmu_idx)) { result->cacheattrs.is_s2_format =3D true; - result->cacheattrs.attrs =3D extract32(attrs, 0, 4); + result->cacheattrs.attrs =3D extract32(attrs, 2, 4); } else { /* Index into MAIR registers for cache attributes */ - uint8_t attrindx =3D extract32(attrs, 0, 3); + uint8_t attrindx =3D extract32(attrs, 2, 3); uint64_t mair =3D env->cp15.mair_el[regime_el(env, mmu_idx)]; assert(attrindx <=3D 7); result->cacheattrs.is_s2_format =3D false; @@ -1428,7 +1427,7 @@ static bool get_phys_addr_lpae(CPUARMState *env, S1Tr= anslate *ptw, if (param.ds) { result->cacheattrs.shareability =3D param.sh; } else { - result->cacheattrs.shareability =3D extract32(attrs, 6, 2); + result->cacheattrs.shareability =3D extract32(attrs, 8, 2); } =20 result->f.phys_addr =3D descaddr; --=20 2.34.1