From nobody Sun May 12 06:21:36 2024 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=reject dis=none) header.from=google.com ARC-Seal: i=1; a=rsa-sha256; t=1677449298; cv=none; d=zohomail.com; s=zohoarc; b=E/adpnwWf37cdrdSTxiRvXmG9hLzkVELQ8w4gIoZ/GVuLNxDHz7iP0IyZ/9OnDicOEA2jnEkTatlP940ZkD5OACY0MHuVtl7ShgpeMjpXHLUccdcm1IdjVaJPCBQDI7Sw9oaLW4BR+6qZoGKbnu4ksTnfzzXSk95rv2xBnKV5PY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1677449298; h=Content-Type: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=fI+RGYAGJmkK9ItOnQm3SAMT7F8JvJjN4gwby0OUI64=; b=YYKWbJ3Xgq4zl4ETlg7x97kZRsKqSDpv+qelY1e4SSQJ+LRPt00y2p2ya7RYc33lx7lri4GzpXoGRgkj15HoWQHHLAlmNnfBvbi6XLWorGvmO0/g6lX+8Zi5jdryM/UBFCpov5AcOUpsa7A74ypEObDj99gucpMZDszmf3NSc6I= 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=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1677449298168145.174892451314; Sun, 26 Feb 2023 14:08:18 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pWPAn-0002PI-7O; Sun, 26 Feb 2023 17:07:13 -0500 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 <3B9j7YwgKCswA46ABsxsy66y3w.u648w4C-vwDw3565y5C.69y@flex--smostafa.bounces.google.com>) id 1pWPAh-0002Nw-2q for qemu-devel@nongnu.org; Sun, 26 Feb 2023 17:07:07 -0500 Received: from mail-wr1-x44a.google.com ([2a00:1450:4864:20::44a]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from <3B9j7YwgKCswA46ABsxsy66y3w.u648w4C-vwDw3565y5C.69y@flex--smostafa.bounces.google.com>) id 1pWPAf-0003tm-Kd for qemu-devel@nongnu.org; Sun, 26 Feb 2023 17:07:06 -0500 Received: by mail-wr1-x44a.google.com with SMTP id 15-20020a056000156f00b002ca79db6d42so197426wrz.18 for ; Sun, 26 Feb 2023 14:07:05 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=fI+RGYAGJmkK9ItOnQm3SAMT7F8JvJjN4gwby0OUI64=; b=M6mmnAtPssYSbaRHCy2ue6WJ/c/9BJvncXQUyDqZ02SQZM/9dBdl685KA8L4jlVxpI ORv/wIOkbr9IwPwiv6EhFfT9JRb7g449bKNSRiS4HdeMNQuHXINzHtE7BaVXs28V5ask y8cD7F/IVwKJu2rr9wbaZsoiMm7WlkYzVM/0G2wU4aLa3RsAs55JNNdoEW1CMo8+XEBx wYqWuCBQhGPiyVQFUcRlThP9CF0/L06ddst1QXrWvqsJGPea1qHrWdU6yfkUhXIzHGYe +jkEu1CRjqpDDF3X2irY65BzmdtjnA/xpo3uIyks+CsTJFGABcBetkIiVIe2DhicSI2z 3X1A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=fI+RGYAGJmkK9ItOnQm3SAMT7F8JvJjN4gwby0OUI64=; b=nR0W0lTsqhBdPiuGJnyYsO9Nzvb6t1oYLN3R6lwPLKV4B5LAjVSgJLIeT2Ld/w/i6a Nf/ZVjGMSzujAmkfhXr46eiX4U7y/Zx51NdWFr62yFrr+6tgsNLI4ghWWJS07rUfYWuf fRbAky4LmYeL9GNGZnNtpTPgi4rDYM+nLeLd786886VcFRG24zMD/TkG1mz/41rLdQ74 YG/Pz+ifIlIbB+W5WbmhWvJDjfFUONVCb0UrgvwSA89y+EoSPOpHlDg3xxZ4bk6bT6Eu yqMkaufl6G0crnEQIWwL6JSLj7etakDbds4HPkyhbSXC+0bKJfOE1Vs77yDOiE1wR1jf qivQ== X-Gm-Message-State: AO0yUKV2bM/zo/rnESl1ZnCWdsLzxYUiXviFZ2Jzrg9R4k6sjg9sB8Ti 2nV8DTcRhHtBovAWktTRXQcid2+WyRwqjpCdfvuEQHCV/DYHjievWIPfhbFMb5/Hn4subKOYvqq 4jNAHJrR71/Si7cf8n87PMpdtUg7WEj4A5W5fyhQHckEU/rDZYkoaDJBNS4HBbMEI7w== X-Google-Smtp-Source: AK7set/wjIXw1TqlsFeDMDJSVMsKbLtoI8b9NQQaXJisCsZxMVgzt9FJ8rfqgBcgE+UpvpR4K0fQzmdgnPSR6w== X-Received: from mostafa.c.googlers.com ([fda3:e722:ac3:cc00:28:9cb1:c0a8:333c]) (user=smostafa job=sendgmr) by 2002:a05:600c:3481:b0:3df:97a1:75e8 with SMTP id a1-20020a05600c348100b003df97a175e8mr1879457wmq.0.1677449223756; Sun, 26 Feb 2023 14:07:03 -0800 (PST) Date: Sun, 26 Feb 2023 22:06:40 +0000 In-Reply-To: <20230226220650.1480786-1-smostafa@google.com> Mime-Version: 1.0 References: <20230226220650.1480786-1-smostafa@google.com> X-Mailer: git-send-email 2.39.2.637.g21b0678d19-goog Message-ID: <20230226220650.1480786-2-smostafa@google.com> Subject: [RFC PATCH v2 01/11] hw/arm/smmuv3: Add missing fields for IDR0 From: Mostafa Saleh To: qemu-devel@nongnu.org Cc: jean-philippe@linaro.org, eric.auger@redhat.com, peter.maydell@linaro.org, qemu-arm@nongnu.org, richard.henderson@linaro.org, Mostafa Saleh 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=2a00:1450:4864:20::44a; envelope-from=3B9j7YwgKCswA46ABsxsy66y3w.u648w4C-vwDw3565y5C.69y@flex--smostafa.bounces.google.com; helo=mail-wr1-x44a.google.com X-Spam_score_int: -95 X-Spam_score: -9.6 X-Spam_bar: --------- X-Spam_report: (-9.6 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_MED=-0.001, 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, USER_IN_DEF_DKIM_WL=-7.5 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-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @google.com) X-ZM-MESSAGEID: 1677449299399100001 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" In preparation for adding stage-2 support. Add IDR0 fields related to stage-2. VMID16: 16-bit VMID supported. S2P: Stage-2 translation supported. They are described in 6.3.1 SMMU_IDR0. No functional change intended. Reviewed-by: Richard Henderson Reviewed-by: Eric Auger Signed-off-by: Mostafa Saleh --- Changes in V2: - Collected Reviewed-by tags. --- hw/arm/smmuv3-internal.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/hw/arm/smmuv3-internal.h b/hw/arm/smmuv3-internal.h index e8f0ebf25e..183d5ac8dc 100644 --- a/hw/arm/smmuv3-internal.h +++ b/hw/arm/smmuv3-internal.h @@ -34,10 +34,12 @@ typedef enum SMMUTranslationStatus { /* MMIO Registers */ =20 REG32(IDR0, 0x0) + FIELD(IDR0, S2P, 0 , 1) FIELD(IDR0, S1P, 1 , 1) FIELD(IDR0, TTF, 2 , 2) FIELD(IDR0, COHACC, 4 , 1) FIELD(IDR0, ASID16, 12, 1) + FIELD(IDR0, VMID16, 18, 1) FIELD(IDR0, TTENDIAN, 21, 2) FIELD(IDR0, STALL_MODEL, 24, 2) FIELD(IDR0, TERM_MODEL, 26, 1) --=20 2.39.2.637.g21b0678d19-goog From nobody Sun May 12 06:21:36 2024 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=reject dis=none) header.from=google.com ARC-Seal: i=1; a=rsa-sha256; t=1677449348; cv=none; d=zohomail.com; s=zohoarc; b=iEMVn9wOymy1MXNbMmkT3fSY8bkE0QlmqnVPWJrFVwShEuhQrYFokh5aVLhw1inqRwPwwRZ5ifcvkqGAOrxswKaZ5bNGA9T/+yjgCn/OoD8O6ilRz/F0wb58/xnjFRDVl9bHHYZWRAJKZlcK3B5suULUvFZHYZvigp70d+OUR08= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1677449348; h=Content-Type: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=5TC0wFDlcrEeYII5tY/AKUl2RtqT3yWH0TbfuyNXD9o=; b=jbdSc3oaXCcOepoXHb7tHzSpSTNlojfEZMuYkAeE0ebFmrdU4+DUAtZBI/ddaqYg4SIEo7A7rXJvbSZbdVWSB/crPTuuFqtykYg6hVcA+5C81yDKmeOmwUQIZjng1ZMYdu0eHh4IxGlBv7j9Bp3MrRBVBbx8xnCPyAe6RuimYCA= 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=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1677449348418164.9056397376287; Sun, 26 Feb 2023 14:09:08 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pWPAo-0002Qh-FX; Sun, 26 Feb 2023 17:07:14 -0500 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 <3Ctj7YwgKCs8D79DEv0v19916z.x97Bz7F-yzGz689818F.9C1@flex--smostafa.bounces.google.com>) id 1pWPAj-0002Om-9u for qemu-devel@nongnu.org; Sun, 26 Feb 2023 17:07:10 -0500 Received: from mail-wm1-x349.google.com ([2a00:1450:4864:20::349]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from <3Ctj7YwgKCs8D79DEv0v19916z.x97Bz7F-yzGz689818F.9C1@flex--smostafa.bounces.google.com>) id 1pWPAh-0003uC-QS for qemu-devel@nongnu.org; Sun, 26 Feb 2023 17:07:09 -0500 Received: by mail-wm1-x349.google.com with SMTP id f14-20020a7bcc0e000000b003dd41ad974bso2105130wmh.3 for ; Sun, 26 Feb 2023 14:07:06 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=5TC0wFDlcrEeYII5tY/AKUl2RtqT3yWH0TbfuyNXD9o=; b=Fy0/vgORRnReXyOSSxrZliKq5c7pm0JTu5obFxJtU6OAMT5szKIteAN+44aduytQXg 8sm/SzWf/hnvtBingVIDsTm4onAnT9cddqOAI1ZbvqWw0L+CJh8OAU2m09hxmXr7tuvW jW6TEh7esdxBK0xmFxpXW3iGb3EctBJU7W/C4eMNyNZmHJBVsL81AwEckMoWOmENzKsi EsVNIjc/5rGMSf3A46WG13qUra7oICjB3OFrYU6/ExmTSEVYN6CJxAsJgrsyT3YzvFiL 0u0kibzTE9tPR4x14vTt6frlGke3EKcKJIEKdvlkhF8XfnffJu+84aY09DyoUKMOWT1y EPGA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=5TC0wFDlcrEeYII5tY/AKUl2RtqT3yWH0TbfuyNXD9o=; b=xXvDboN0B4vHjgAqcJ+vH8RAUJKZCAxya94WulwVRA63GbwWNoIpS08i9rzdZL/1n7 gnFgm1K1GbopZtOn1h5xlDLK/yVzeXTk0uc3GRP6GVCcnz8jswUDuNdYh3wuv64kluvK dNchHMFeJyqOGHFBZgxsP669RF2k7EIyTYqvhMYZAiRXpY6szBJjRF0AbaTekQLvs1GH jNtzLCalsaARxB066jh6anlhxSfnSBTAakImKLkwHzJr/ohDE8SgDzKdUUKcH8RxEVuM pvPAt9qNm5dwzzO0OufsnM34qIHeZQWwbMuIqLrtuyo6AJ++w/bwRD3yJlbWoKZBwsPc hEtQ== X-Gm-Message-State: AO0yUKVizkOxhDQm6FJpHbbs9JH5A2bOm0e/62Zs/7rfEjoKhKT3RYs6 tzDjVXf5gABP13OSMl+wBNc+YitH7HrXICVqnWBSwlW5UwIGBZJFoUBTGqJ7GOay5TbVVvazx0S Ruj5EswNINfXcL8+BV9tac7b1ER8LjNTlyiurykOjJBONnyI6t9i/Eor7e5LstvpITg== X-Google-Smtp-Source: AK7set/lk0BR9GV0caa9w8zB9p0UC/AMOuODD0To7wUCObauzSZqKOBA7GVa+Riv/j3YTGebPZODYbFrHqKm0Q== X-Received: from mostafa.c.googlers.com ([fda3:e722:ac3:cc00:28:9cb1:c0a8:333c]) (user=smostafa job=sendgmr) by 2002:adf:d844:0:b0:2c5:52f8:59ab with SMTP id k4-20020adfd844000000b002c552f859abmr1812543wrl.13.1677449226015; Sun, 26 Feb 2023 14:07:06 -0800 (PST) Date: Sun, 26 Feb 2023 22:06:41 +0000 In-Reply-To: <20230226220650.1480786-1-smostafa@google.com> Mime-Version: 1.0 References: <20230226220650.1480786-1-smostafa@google.com> X-Mailer: git-send-email 2.39.2.637.g21b0678d19-goog Message-ID: <20230226220650.1480786-3-smostafa@google.com> Subject: [RFC PATCH v2 02/11] hw/arm/smmuv3: Update translation config to hold stage-2 From: Mostafa Saleh To: qemu-devel@nongnu.org Cc: jean-philippe@linaro.org, eric.auger@redhat.com, peter.maydell@linaro.org, qemu-arm@nongnu.org, richard.henderson@linaro.org, Mostafa Saleh 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=2a00:1450:4864:20::349; envelope-from=3Ctj7YwgKCs8D79DEv0v19916z.x97Bz7F-yzGz689818F.9C1@flex--smostafa.bounces.google.com; helo=mail-wm1-x349.google.com X-Spam_score_int: -95 X-Spam_score: -9.6 X-Spam_bar: --------- X-Spam_report: (-9.6 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_MED=-0.001, 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, USER_IN_DEF_DKIM_WL=-7.5 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-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @google.com) X-ZM-MESSAGEID: 1677449349533100005 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" In preparation for adding stage-2 support, add a S2 config struct(SMMUS2Cfg), composed of the following fields and embedded in the main SMMUTransCfg: -tsz: Input range -sl0: start level of translation -affd: AF fault disable -granule_sz: Granule page shift -vmid: VMID -vttb: PA of translation table -oas: Output address size They will be used in the next patches in stage-2 address translation. No functional change intended. Signed-off-by: Mostafa Saleh --- Changes in v2: -Add oas --- include/hw/arm/smmu-common.h | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/include/hw/arm/smmu-common.h b/include/hw/arm/smmu-common.h index 9fcff26357..2deead08d6 100644 --- a/include/hw/arm/smmu-common.h +++ b/include/hw/arm/smmu-common.h @@ -58,6 +58,16 @@ typedef struct SMMUTLBEntry { uint8_t granule; } SMMUTLBEntry; =20 +typedef struct SMMUS2Cfg { + uint8_t tsz; /* Input range */ + uint8_t sl0; /* Start level of translation */ + bool affd; /* AF Fault Disable */ + uint8_t granule_sz; /* Granule page shift */ + uint8_t oas; /* Output address size */ + uint16_t vmid; /* Virtual machine ID */ + uint64_t vttb; /* PA of translation table */ +} SMMUS2Cfg; + /* * Generic structure populated by derived SMMU devices * after decoding the configuration information and used as @@ -77,6 +87,7 @@ typedef struct SMMUTransCfg { SMMUTransTableInfo tt[2]; uint32_t iotlb_hits; /* counts IOTLB hits for this asid */ uint32_t iotlb_misses; /* counts IOTLB misses for this asid */ + struct SMMUS2Cfg s2cfg; } SMMUTransCfg; =20 typedef struct SMMUDevice { --=20 2.39.2.637.g21b0678d19-goog From nobody Sun May 12 06:21:36 2024 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=reject dis=none) header.from=google.com ARC-Seal: i=1; a=rsa-sha256; t=1677449266; cv=none; d=zohomail.com; s=zohoarc; b=jjZdeT1KHMnk+T3dOp9seH5aHtnyYEEvC8Bk7Z7u2PNkY8hZVsujn9oezGY9bkaha+rjpnX1aM6dYSwZaWFdP+tQmDK5fAa3dMo4w0WAY24fvZIc9IjA7A6eJPnZy4NJ2QKPvuxjz/fBPczFEICehWKOikvSl/6t9pKtJMVUWYc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1677449266; h=Content-Type: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=ZaWmgGAGcYO7s+WalFe3/fZGOIM7AA9SlREYy/ajjq4=; b=lICbq/jm01+AFA7YB/o1MSK7VBZQQzSoTYZtzUnIfxaZOEk8LEeuszyCIuWxUiwu7Hy8oPTlnaCjlfJdbe0kSKPGDK+aItMpBWlSKCAraCV0De8yn0wcCDITHKWYqGRtDbV0IB4D5gu8D+bRdRNtLac+1M0a0t2/MWIkxm9NEwg= 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=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1677449266388935.9146006488284; Sun, 26 Feb 2023 14:07:46 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pWPAq-0002Rm-IF; Sun, 26 Feb 2023 17:07:16 -0500 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 <3DNj7YwgKCtEF9BFGx2x3BB381.zB9D19H-01I18ABA3AH.BE3@flex--smostafa.bounces.google.com>) id 1pWPAm-0002PV-FD for qemu-devel@nongnu.org; Sun, 26 Feb 2023 17:07:13 -0500 Received: from mail-wm1-x349.google.com ([2a00:1450:4864:20::349]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from <3DNj7YwgKCtEF9BFGx2x3BB381.zB9D19H-01I18ABA3AH.BE3@flex--smostafa.bounces.google.com>) id 1pWPAk-0003uX-3A for qemu-devel@nongnu.org; Sun, 26 Feb 2023 17:07:11 -0500 Received: by mail-wm1-x349.google.com with SMTP id n15-20020a05600c500f00b003dd07ce79c8so2108306wmr.1 for ; Sun, 26 Feb 2023 14:07:08 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=content-transfer-encoding:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:from:to:cc:subject:date:message-id :reply-to; bh=ZaWmgGAGcYO7s+WalFe3/fZGOIM7AA9SlREYy/ajjq4=; b=NBqcJShOSxQ/UQmkRU6bJnOnEXEWhqf8mQoMImMBLdEGbXNQZbYG9zoygxxpzQ9Ztw 5MMFgPAPxEGvvTlbisSDDnKTrGEeRtezPtjlDz9hiMowmAk0Ts2OVZ3cYorqhpfi8IC/ Dwbkrj624sv9/HmRd/Ky+JHaqLMp6HLMwalQ8jdxXPy0HwowX6I9RyMnvdlI3i35Xt6J usaKo7Wuq/v/f/uY6jryFh3oInOznIHkfqF4ltk8xEVckC4ckt1ZhzCXy5eY+NO7vy0b 7H2v5/mY1PkRmXi2aBwrYnC3gBuL4Xiwe5Zl7URNQrOaajw++V7z3rDyDzaTWUstGqA4 +pNA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to; bh=ZaWmgGAGcYO7s+WalFe3/fZGOIM7AA9SlREYy/ajjq4=; b=0pUIdwbOd5nsycNtSv1mh7x4iN/5AEPF8d01S/BYXC2qBkeaz4NsCowL4ZKscADvGt RiSR2ySRn4pMd46wjzGFprl902rAGXu04OkZ018XRTK9jofE/DlWIgvKWKy8rlcag965 +A1wjEnB6LBEO5dnnRBg7ebMYepGHAdfLbu+H1a7y8ggHBoh+V+blTV79iLbwOZT+GtA FlacwGeWg8lzwUmCWFMvLcyuE5u4Tnub7oZdRfCgw0NqhMMC/CawmX11icsbiG6sPgQC yLSNLLE3z1FNEU5MfG71bwn1gxME2tDwkIX3tYgubmpaUpXhyp27rDS6Ph/reVqd1MM7 uJXw== X-Gm-Message-State: AO0yUKUhShRSCVBhSFMKi7XrsMvPKkSPWmV6+qChEeSow2PpTVzN5B8r rfxzSVFfSxKD6znLkarP7vSlWU7jNpx1j1P4b+df3gxDSh09CGK8bf2JwXKavEEMGk0jbkH9I58 eYZAD8CJTrMOjTUG1A/jgU4fWlPM6H6UEl2MO1cgpWGYNQliR9Y93+ka1nNLElWoRZA== X-Google-Smtp-Source: AK7set8MVo/bRrmCFaC0mI5xI/ESDfS4dJcTgeiN1HL9MPVVxI2TFBZyhAb66NwSkCAstozm7DNZo5295FAlig== X-Received: from mostafa.c.googlers.com ([fda3:e722:ac3:cc00:28:9cb1:c0a8:333c]) (user=smostafa job=sendgmr) by 2002:a05:600c:1c95:b0:3eb:3998:8bed with SMTP id k21-20020a05600c1c9500b003eb39988bedmr1094347wms.1.1677449228069; Sun, 26 Feb 2023 14:07:08 -0800 (PST) Date: Sun, 26 Feb 2023 22:06:42 +0000 In-Reply-To: <20230226220650.1480786-1-smostafa@google.com> Mime-Version: 1.0 References: <20230226220650.1480786-1-smostafa@google.com> X-Mailer: git-send-email 2.39.2.637.g21b0678d19-goog Message-ID: <20230226220650.1480786-4-smostafa@google.com> Subject: [RFC PATCH v2 03/11] hw/arm/smmuv3: Refactor stage-1 PTW From: Mostafa Saleh To: qemu-devel@nongnu.org Cc: jean-philippe@linaro.org, eric.auger@redhat.com, peter.maydell@linaro.org, qemu-arm@nongnu.org, richard.henderson@linaro.org, Mostafa Saleh 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=2a00:1450:4864:20::349; envelope-from=3DNj7YwgKCtEF9BFGx2x3BB381.zB9D19H-01I18ABA3AH.BE3@flex--smostafa.bounces.google.com; helo=mail-wm1-x349.google.com X-Spam_score_int: -95 X-Spam_score: -9.6 X-Spam_bar: --------- X-Spam_report: (-9.6 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_MED=-0.001, 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, USER_IN_DEF_DKIM_WL=-7.5 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-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @google.com) X-ZM-MESSAGEID: 1677449267284100001 Content-Type: text/plain; charset="utf-8" In preparation for adding stage-2 support, rename smmu_ptw_64 to smmu_ptw_64_s1 and refactor some of the code so it can be reused in stage-2 page table walk. Remove AA64 check from PTW as decode_cd already ensures that AA64 is used, otherwise it faults with C_BAD_CD. A stage member is added to SMMUPTWEventInfo to differentiate between stage-1 and stage-2 ptw faults. Add stage argument to trace_smmu_ptw_level be consistent with other trace events. Signed-off-by: Mostafa Saleh Reviewed-by: Eric Auger --- Changes in v2: - Refactor common functions to be use in stage-2. - Add stage to SMMUPTWEventInfo. - Remove AA64 check. --- hw/arm/smmu-common.c | 27 ++++++++++----------------- hw/arm/smmuv3.c | 2 ++ hw/arm/trace-events | 2 +- include/hw/arm/smmu-common.h | 15 ++++++++++++--- 4 files changed, 25 insertions(+), 21 deletions(-) diff --git a/hw/arm/smmu-common.c b/hw/arm/smmu-common.c index 0a5a60ca1e..b49c1affdb 100644 --- a/hw/arm/smmu-common.c +++ b/hw/arm/smmu-common.c @@ -264,7 +264,7 @@ SMMUTransTableInfo *select_tt(SMMUTransCfg *cfg, dma_ad= dr_t iova) } =20 /** - * smmu_ptw_64 - VMSAv8-64 Walk of the page tables for a given IOVA + * smmu_ptw_64_s1 - VMSAv8-64 Walk of the page tables for a given IOVA * @cfg: translation config * @iova: iova to translate * @perm: access type @@ -276,9 +276,9 @@ SMMUTransTableInfo *select_tt(SMMUTransCfg *cfg, dma_ad= dr_t iova) * Upon success, @tlbe is filled with translated_addr and entry * permission rights. */ -static int smmu_ptw_64(SMMUTransCfg *cfg, - dma_addr_t iova, IOMMUAccessFlags perm, - SMMUTLBEntry *tlbe, SMMUPTWEventInfo *info) +static int smmu_ptw_64_s1(SMMUTransCfg *cfg, + dma_addr_t iova, IOMMUAccessFlags perm, + SMMUTLBEntry *tlbe, SMMUPTWEventInfo *info) { dma_addr_t baseaddr, indexmask; int stage =3D cfg->stage; @@ -291,14 +291,14 @@ static int smmu_ptw_64(SMMUTransCfg *cfg, } =20 granule_sz =3D tt->granule_sz; - stride =3D granule_sz - 3; + stride =3D SMMU_STRIDE(granule_sz); inputsize =3D 64 - tt->tsz; level =3D 4 - (inputsize - 4) / stride; - indexmask =3D (1ULL << (inputsize - (stride * (4 - level)))) - 1; + indexmask =3D SMMU_IDXMSK(inputsize, stride, level); baseaddr =3D extract64(tt->ttb, 0, 48); baseaddr &=3D ~indexmask; =20 - while (level <=3D 3) { + while (level < SMMU_LEVELS) { uint64_t subpage_size =3D 1ULL << level_shift(level, granule_sz); uint64_t mask =3D subpage_size - 1; uint32_t offset =3D iova_level_offset(iova, inputsize, level, gran= ule_sz); @@ -309,7 +309,7 @@ static int smmu_ptw_64(SMMUTransCfg *cfg, if (get_pte(baseaddr, offset, &pte, info)) { goto error; } - trace_smmu_ptw_level(level, iova, subpage_size, + trace_smmu_ptw_level(stage, level, iova, subpage_size, baseaddr, offset, pte); =20 if (is_invalid_pte(pte) || is_reserved_pte(pte, level)) { @@ -358,6 +358,7 @@ static int smmu_ptw_64(SMMUTransCfg *cfg, info->type =3D SMMU_PTW_ERR_TRANSLATION; =20 error: + info->stage =3D 1; tlbe->entry.perm =3D IOMMU_NONE; return -EINVAL; } @@ -376,15 +377,7 @@ error: int smmu_ptw(SMMUTransCfg *cfg, dma_addr_t iova, IOMMUAccessFlags perm, SMMUTLBEntry *tlbe, SMMUPTWEventInfo *info) { - if (!cfg->aa64) { - /* - * This code path is not entered as we check this while decoding - * the configuration data in the derived SMMU model. - */ - g_assert_not_reached(); - } - - return smmu_ptw_64(cfg, iova, perm, tlbe, info); + return smmu_ptw_64_s1(cfg, iova, perm, tlbe, info); } =20 /** diff --git a/hw/arm/smmuv3.c b/hw/arm/smmuv3.c index 270c80b665..4e90343996 100644 --- a/hw/arm/smmuv3.c +++ b/hw/arm/smmuv3.c @@ -716,6 +716,8 @@ static IOMMUTLBEntry smmuv3_translate(IOMMUMemoryRegion= *mr, hwaddr addr, cached_entry =3D g_new0(SMMUTLBEntry, 1); =20 if (smmu_ptw(cfg, aligned_addr, flag, cached_entry, &ptw_info)) { + /* All faults from PTW has S2 field. */ + event.u.f_walk_eabt.s2 =3D (ptw_info.stage =3D=3D 2); g_free(cached_entry); switch (ptw_info.type) { case SMMU_PTW_ERR_WALK_EABT: diff --git a/hw/arm/trace-events b/hw/arm/trace-events index 2dee296c8f..205ac04573 100644 --- a/hw/arm/trace-events +++ b/hw/arm/trace-events @@ -5,7 +5,7 @@ virt_acpi_setup(void) "No fw cfg or ACPI disabled. Bailing = out." =20 # smmu-common.c smmu_add_mr(const char *name) "%s" -smmu_ptw_level(int level, uint64_t iova, size_t subpage_size, uint64_t bas= eaddr, uint32_t offset, uint64_t pte) "level=3D%d iova=3D0x%"PRIx64" subpag= e_sz=3D0x%zx baseaddr=3D0x%"PRIx64" offset=3D%d =3D> pte=3D0x%"PRIx64 +smmu_ptw_level(int stage, int level, uint64_t iova, size_t subpage_size, u= int64_t baseaddr, uint32_t offset, uint64_t pte) "stage=3D%d level=3D%d iov= a=3D0x%"PRIx64" subpage_sz=3D0x%zx baseaddr=3D0x%"PRIx64" offset=3D%d =3D> = pte=3D0x%"PRIx64 smmu_ptw_invalid_pte(int stage, int level, uint64_t baseaddr, uint64_t pte= addr, uint32_t offset, uint64_t pte) "stage=3D%d level=3D%d base@=3D0x%"PRI= x64" pte@=3D0x%"PRIx64" offset=3D%d pte=3D0x%"PRIx64 smmu_ptw_page_pte(int stage, int level, uint64_t iova, uint64_t baseaddr,= uint64_t pteaddr, uint64_t pte, uint64_t address) "stage=3D%d level=3D%d i= ova=3D0x%"PRIx64" base@=3D0x%"PRIx64" pte@=3D0x%"PRIx64" pte=3D0x%"PRIx64" = page address =3D 0x%"PRIx64 smmu_ptw_block_pte(int stage, int level, uint64_t baseaddr, uint64_t ptead= dr, uint64_t pte, uint64_t iova, uint64_t gpa, int bsize_mb) "stage=3D%d le= vel=3D%d base@=3D0x%"PRIx64" pte@=3D0x%"PRIx64" pte=3D0x%"PRIx64" iova=3D0x= %"PRIx64" block address =3D 0x%"PRIx64" block size =3D %d MiB" diff --git a/include/hw/arm/smmu-common.h b/include/hw/arm/smmu-common.h index 2deead08d6..1ada792122 100644 --- a/include/hw/arm/smmu-common.h +++ b/include/hw/arm/smmu-common.h @@ -23,9 +23,17 @@ #include "hw/pci/pci.h" #include "qom/object.h" =20 -#define SMMU_PCI_BUS_MAX 256 -#define SMMU_PCI_DEVFN_MAX 256 -#define SMMU_PCI_DEVFN(sid) (sid & 0xFF) +#define SMMU_PCI_BUS_MAX 256 +#define SMMU_PCI_DEVFN_MAX 256 +#define SMMU_PCI_DEVFN(sid) (sid & 0xFF) + +#define SMMU_LEVELS 4 + +#define SMMU_STRIDE(gran) ((gran) - SMMU_LEVELS + 1) +#define SMMU_BIT_LVL(isz, strd, lvl) ((isz) - (strd) * \ + (SMMU_LEVELS - (lvl))) +#define SMMU_IDXMSK(isz, strd, lvl) ((1ULL << \ + SMMU_BIT_LVL(isz, strd, lvl))= - 1) =20 /* * Page table walk error types @@ -40,6 +48,7 @@ typedef enum { } SMMUPTWEventType; =20 typedef struct SMMUPTWEventInfo { + int stage; SMMUPTWEventType type; dma_addr_t addr; /* fetched address that induced an abort, if any */ } SMMUPTWEventInfo; --=20 2.39.2.637.g21b0678d19-goog From nobody Sun May 12 06:21:36 2024 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=reject dis=none) header.from=google.com ARC-Seal: i=1; a=rsa-sha256; t=1677449357; cv=none; d=zohomail.com; s=zohoarc; b=EzUGnWleBXEwGXTXqF6dB+wu8YAnW4AkLLk3ofIoAiZ0isZS+6csHg9Oz6UfDb6+Agf8Qv4eKnhfRszIsx4C1v8nER0BINhKhEBMUZ0mEm4Zie7X1NZoasg70JdzqiDQodc3hdYdDKuKTz2t0xAkr+TCHgDwdjLAvOFQHyd6Zfg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1677449357; h=Content-Type: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=w8gBXvn0nsgqacWJ24f/nJlkTQIB5LOcWqOtQmpTzys=; b=lKmR40PqmRiZ3XuCkBEKeI9Tl4AIIVb4r2vJHyJ0xx0XCYIAo4Z+8zOjZ3aM3Y4FbxKcTQLiGL2CxBvee1yqcJME8IKrpU+dGOUBoO0wEvNfUuA+dK+BA7xYjm8lMpKySM9PYGhC6D++hFw3PwKCAfdYa2FEZgLHeLmqzokt9Yg= 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=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1677449357946829.2850801797331; Sun, 26 Feb 2023 14:09:17 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pWPAr-0002Sk-DT; Sun, 26 Feb 2023 17:07:17 -0500 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 <3Dtj7YwgKCtMHBDHIz4z5DD5A3.1DBF3BJ-23K3ACDC5CJ.DG5@flex--smostafa.bounces.google.com>) id 1pWPAo-0002Qr-SC for qemu-devel@nongnu.org; Sun, 26 Feb 2023 17:07:14 -0500 Received: from mail-yw1-x1149.google.com ([2607:f8b0:4864:20::1149]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from <3Dtj7YwgKCtMHBDHIz4z5DD5A3.1DBF3BJ-23K3ACDC5CJ.DG5@flex--smostafa.bounces.google.com>) id 1pWPAm-0003uv-UH for qemu-devel@nongnu.org; Sun, 26 Feb 2023 17:07:14 -0500 Received: by mail-yw1-x1149.google.com with SMTP id 00721157ae682-536bf649e70so101329107b3.0 for ; Sun, 26 Feb 2023 14:07:11 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=w8gBXvn0nsgqacWJ24f/nJlkTQIB5LOcWqOtQmpTzys=; b=ApflCs8A7SFoSx4FK7hhvBTIoIT/M1+f9EnUc0sF84QEMPkWnB9VF2AzTY47MmWTA5 tyg63MU67paFA6L5QpnH4ALjnVafS98hOfplo9y7grFUCaxaiRLqa7+UuORlJJ9LnUMk 716r2SyHyvxQcSWNjEBmbc0cui75cIEIM9KmAnsXpvei639MJdwhS9rjKK1nXJFBItZk nv5JVZCp4fXnNUFZLdWcepJ02hxZnoFXdLyib2Jaut5GDgEKyYJyX3KYOspVqDgpQ8n8 UDsEIHYKNUqnwAnh2rbZF0bWs0cOT2ZKmidh1tUBdkUi/II6mP9kuvy1mzYLEbv+KEwi QSxQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=w8gBXvn0nsgqacWJ24f/nJlkTQIB5LOcWqOtQmpTzys=; b=k6SmkadkYSuj8WenqTPKqT26tgVdUqzfYaevm+FhjKHG8CbksMyN8k0HWTQcadw874 4j7/e8fIulGsBfsbfxUYxbQJ0G5vc2GmLDoG6GDUhQ/ujda1FpdfJFlmHvo9Wg6TlZ55 ZqAzI+5sgReVOCy0u2JSOfiWsr3bXL0ZQ0kQ3oIl5xGqH4xpXKdVYY43+zp9yN12cGVR YqOedWHXow1xWdzV0PLrx3oNeJdSGAAm+wU30g2K2pXtI8O1J+B7hsK0yF4LpA6pNW/S XAFGTtQ7nVFHdu0wldBTwQ1p281kcJzCWAfWzw4NfVJgD9MJmr4gdfJAF2Je0iiq4Z6M Ktww== X-Gm-Message-State: AO0yUKWsOkPTNobS3p5JzTsjYLnRbwYfZiyeDMAjgtdBGU/QecZoOkf3 2zxHBL4+98Q42qeKtMEg21sMdVonUFBDdP/Zpv2kDmRUaqYi8YvtQJompHDNqeLvKER/3NGm0N2 jc6AVWi5K/VlaRHoyAvpgsxlNOtwn2FoaedZNzf4fg20HRRoUdPHaUOZyhLy+HWbW3Q== X-Google-Smtp-Source: AK7set8JOOsKZV3pra2YX+K4szS/Y0vFbrys4Q5+faksFHp+/NfZsMkayYKdz5Bqcu4B/3t0hG5H5z0zGWsxiA== X-Received: from mostafa.c.googlers.com ([fda3:e722:ac3:cc00:28:9cb1:c0a8:333c]) (user=smostafa job=sendgmr) by 2002:a05:6902:1602:b0:8a3:d147:280b with SMTP id bw2-20020a056902160200b008a3d147280bmr5715077ybb.3.1677449230307; Sun, 26 Feb 2023 14:07:10 -0800 (PST) Date: Sun, 26 Feb 2023 22:06:43 +0000 In-Reply-To: <20230226220650.1480786-1-smostafa@google.com> Mime-Version: 1.0 References: <20230226220650.1480786-1-smostafa@google.com> X-Mailer: git-send-email 2.39.2.637.g21b0678d19-goog Message-ID: <20230226220650.1480786-5-smostafa@google.com> Subject: [RFC PATCH v2 04/11] hw/arm/smmuv3: Add page table walk for stage-2 From: Mostafa Saleh To: qemu-devel@nongnu.org Cc: jean-philippe@linaro.org, eric.auger@redhat.com, peter.maydell@linaro.org, qemu-arm@nongnu.org, richard.henderson@linaro.org, Mostafa Saleh 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::1149; envelope-from=3Dtj7YwgKCtMHBDHIz4z5DD5A3.1DBF3BJ-23K3ACDC5CJ.DG5@flex--smostafa.bounces.google.com; helo=mail-yw1-x1149.google.com X-Spam_score_int: -95 X-Spam_score: -9.6 X-Spam_bar: --------- X-Spam_report: (-9.6 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_MED=-0.001, 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, USER_IN_DEF_DKIM_WL=-7.5 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-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @google.com) X-ZM-MESSAGEID: 1677449359587100003 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" In preparation for adding stage-2 support, add Stage-2 PTW code. Only Aarch64 format is supported as stage-1. Nesting stage-1 and stage-2 is not supported right now. HTTU is not supported, SW is expected to maintain the Access flag. This is described in the SMMUv3 manual "5.2. Stream Table Entry" in "[181] S2AFFD". This flag determines the behavior on access of a stage-2 page whose descriptor has AF =3D=3D 0: - 0b0: An Access flag fault occurs (stall not supported). - 0b1: An Access flag fault never occurs. An Access fault takes priority over a Permission fault. Checks for IPA and output PA are done according to the user manual "3.4 Address sizes". Signed-off-by: Mostafa Saleh --- Changes in v2: - Squash S2AFF PTW code. - Use common functions between stage-1 and stage-2. - Add checks for IPA and out PA. --- hw/arm/smmu-common.c | 132 ++++++++++++++++++++++++++++++++++++++++- hw/arm/smmu-internal.h | 39 ++++++++++++ 2 files changed, 170 insertions(+), 1 deletion(-) diff --git a/hw/arm/smmu-common.c b/hw/arm/smmu-common.c index b49c1affdb..3f448bc82e 100644 --- a/hw/arm/smmu-common.c +++ b/hw/arm/smmu-common.c @@ -363,6 +363,130 @@ error: return -EINVAL; } =20 +/** + * smmu_ptw_64_s2 - VMSAv8-64 Walk of the page tables for a given IOVA + * for stage-2. + * @cfg: translation config + * @iova: iova to translate + * @perm: access type + * @tlbe: SMMUTLBEntry (out) + * @info: handle to an error info + * + * Return 0 on success, < 0 on error. In case of error, @info is filled + * and tlbe->perm is set to IOMMU_NONE. + * Upon success, @tlbe is filled with translated_addr and entry + * permission rights. + */ +static int smmu_ptw_64_s2(SMMUTransCfg *cfg, + dma_addr_t iova, IOMMUAccessFlags perm, + SMMUTLBEntry *tlbe, SMMUPTWEventInfo *info) +{ + const int stage =3D 2; + int granule_sz =3D cfg->s2cfg.granule_sz; + /* ARM ARM: Table D8-7. */ + int inputsize =3D 64 - cfg->s2cfg.tsz; + int level =3D get_start_level(cfg->s2cfg.sl0, granule_sz); + int stride =3D SMMU_STRIDE(granule_sz); + int idx =3D pgd_idx(level, granule_sz, iova); + /* + * Get the ttb from concatenated structure. + * The offset is the idx * size of each ttb(number of ptes * (sizeof(p= te)) + */ + uint64_t baseaddr =3D extract64(cfg->s2cfg.vttb, 0, 48) + (1 << stride= ) * + idx * sizeof(uint64_t); + dma_addr_t indexmask =3D SMMU_IDXMSK(inputsize, stride, level); + + baseaddr &=3D ~indexmask; + + /* + * If the input address of a transaction exceeds the size of the IAS, a + * stage 1 Address Size fault occurs. + * For AA64, IAS =3D OAS + */ + if (iova >=3D (1ULL << cfg->s2cfg.oas)) { + info->type =3D SMMU_PTW_ERR_ADDR_SIZE; + info->stage =3D 1; + goto error_no_stage; + } + + while (level < SMMU_LEVELS) { + uint64_t subpage_size =3D 1ULL << level_shift(level, granule_sz); + uint64_t mask =3D subpage_size - 1; + uint32_t offset =3D iova_level_offset(iova, inputsize, level, gran= ule_sz); + uint64_t pte, gpa; + dma_addr_t pte_addr =3D baseaddr + offset * sizeof(pte); + uint8_t ap; + + if (get_pte(baseaddr, offset, &pte, info)) { + goto error; + } + trace_smmu_ptw_level(stage, level, iova, subpage_size, + baseaddr, offset, pte); + if (is_invalid_pte(pte) || is_reserved_pte(pte, level)) { + trace_smmu_ptw_invalid_pte(stage, level, baseaddr, + pte_addr, offset, pte); + break; + } + + if (is_table_pte(pte, level)) { + baseaddr =3D get_table_pte_address(pte, granule_sz); + level++; + continue; + } else if (is_page_pte(pte, level)) { + gpa =3D get_page_pte_address(pte, granule_sz); + trace_smmu_ptw_page_pte(stage, level, iova, + baseaddr, pte_addr, pte, gpa); + } else { + uint64_t block_size; + + gpa =3D get_block_pte_address(pte, level, granule_sz, + &block_size); + trace_smmu_ptw_block_pte(stage, level, baseaddr, + pte_addr, pte, iova, gpa, + block_size >> 20); + } + + /* + * If S2AFFD and PTE.AF are 0 =3D> fault. (5.2. Stream Table Entry) + * An Access fault takes priority over a Permission fault. + */ + if (!PTE_AF(pte) && !cfg->s2cfg.affd) { + info->type =3D SMMU_PTW_ERR_ACCESS; + goto error; + } + + ap =3D PTE_AP(pte); + if (is_permission_fault_s2(ap, perm)) { + info->type =3D SMMU_PTW_ERR_PERMISSION; + goto error; + } + + /* + * The address output from the translation causes a stage 2 Address + * Size fault if it exceeds the effective PA output range. + */ + if (gpa >=3D (1ULL << cfg->s2cfg.oas)) { + info->type =3D SMMU_PTW_ERR_ADDR_SIZE; + goto error; + } + + tlbe->entry.translated_addr =3D gpa; + tlbe->entry.iova =3D iova & ~mask; + tlbe->entry.addr_mask =3D mask; + tlbe->entry.perm =3D ap; + tlbe->level =3D level; + tlbe->granule =3D granule_sz; + return 0; + } + info->type =3D SMMU_PTW_ERR_TRANSLATION; + +error: + info->stage =3D 2; +error_no_stage: + tlbe->entry.perm =3D IOMMU_NONE; + return -EINVAL; +} + /** * smmu_ptw - Walk the page tables for an IOVA, according to @cfg * @@ -377,7 +501,13 @@ error: int smmu_ptw(SMMUTransCfg *cfg, dma_addr_t iova, IOMMUAccessFlags perm, SMMUTLBEntry *tlbe, SMMUPTWEventInfo *info) { - return smmu_ptw_64_s1(cfg, iova, perm, tlbe, info); + if (cfg->stage =3D=3D 1) { + return smmu_ptw_64_s1(cfg, iova, perm, tlbe, info); + } else if (cfg->stage =3D=3D 2) { + return smmu_ptw_64_s2(cfg, iova, perm, tlbe, info); + } + + g_assert_not_reached(); } =20 /** diff --git a/hw/arm/smmu-internal.h b/hw/arm/smmu-internal.h index 2d75b31953..f79c389cd3 100644 --- a/hw/arm/smmu-internal.h +++ b/hw/arm/smmu-internal.h @@ -66,6 +66,8 @@ #define PTE_APTABLE(pte) \ (extract64(pte, 61, 2)) =20 +#define PTE_AF(pte) \ + (extract64(pte, 10, 1)) /* * TODO: At the moment all transactions are considered as privileged (EL1) * as IOMMU translation callback does not pass user/priv attributes. @@ -73,6 +75,9 @@ #define is_permission_fault(ap, perm) \ (((perm) & IOMMU_WO) && ((ap) & 0x2)) =20 +#define is_permission_fault_s2(ap, perm) \ + (!((ap & perm) =3D=3D perm)) + #define PTE_AP_TO_PERM(ap) \ (IOMMU_ACCESS_FLAG(true, !((ap) & 0x2))) =20 @@ -96,6 +101,40 @@ uint64_t iova_level_offset(uint64_t iova, int inputsize, MAKE_64BIT_MASK(0, gsz - 3); } =20 +#define SMMU_MAX_S2_CONCAT 16 + +/* + * Relies on correctness of gran and sl0 from caller. + * FEAT_LPA2 and FEAT_TTST are not implemented. + */ +static inline int get_start_level(int sl0 , int gran) +{ + /* ARM ARM: Table D8-12. */ + if (gran =3D=3D 12) { + return 2 - sl0; + } + /* ARM ARM: Table D8-22 and Table D8-31. */ + return 3 - sl0; +} + +/* + * Index in a concatenated first level stage-2 page table. + * ARM ARM: D8.2.2 Concatenated translation tables. + */ +static inline int pgd_idx(int start_level, int granule, dma_addr_t iova) +{ + uint64_t ret; + /* + * Get the number of bits handled by next levels, then any extra bits = in + * the address should index the concatenated tables. This relation can + * deduced from tables in ARM ARM: D8.2.7-9 + */ + int shift =3D (SMMU_LEVELS - start_level) * (granule - 3) + granule; + + ret =3D iova >> shift; + return ret; +} + #define SMMU_IOTLB_ASID(key) ((key).asid) =20 typedef struct SMMUIOTLBPageInvInfo { --=20 2.39.2.637.g21b0678d19-goog From nobody Sun May 12 06:21:36 2024 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=reject dis=none) header.from=google.com ARC-Seal: i=1; a=rsa-sha256; t=1677449352; cv=none; d=zohomail.com; s=zohoarc; b=A5zvoUzNsIzlj8PVAoQ1ofHFAcqlE2KeBFGV/4zLq22N1jiAL9w8IyySGVcZS65SeB2aGSDWvlpZ584Wv75/rOmB1Ijn49L6rRuYO8QNfOObUdFAlyrDTDEzdecbX1ZhNZFLpg7Dt+SrghgdByAJx/nzuGIm4M+lDOkSo6sX/p0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1677449352; h=Content-Type: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=vgcJwiR1WaLfuqlyYYnqY8cLFGvSA2dGsL7q/gzpNRk=; b=klVAbR0WpLdjs2mXczGhqKBH6ctFeJoYIj02jzBPdRVz4q1THW7JzZhDDe2H5HI0pcCdalF75x7YJYxm/z8jnxSkislBcNs/gqTIA1Fyh1pXeELORmUGgZR9tV9q7m7n4qeYEdDojleMqoZDSgv8/gWlBIV1EcnggFQjAjXW9YE= 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=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1677449352289803.6918863439105; Sun, 26 Feb 2023 14:09:12 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pWPAr-0002Sp-M5; Sun, 26 Feb 2023 17:07:17 -0500 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 <3ENj7YwgKCtUJDFJK1617FF7C5.3FDH5DL-45M5CEFE7EL.FI7@flex--smostafa.bounces.google.com>) id 1pWPAq-0002Rq-J3 for qemu-devel@nongnu.org; Sun, 26 Feb 2023 17:07:16 -0500 Received: from mail-yw1-x114a.google.com ([2607:f8b0:4864:20::114a]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from <3ENj7YwgKCtUJDFJK1617FF7C5.3FDH5DL-45M5CEFE7EL.FI7@flex--smostafa.bounces.google.com>) id 1pWPAo-0003vO-Ib for qemu-devel@nongnu.org; Sun, 26 Feb 2023 17:07:16 -0500 Received: by mail-yw1-x114a.google.com with SMTP id 00721157ae682-536bf649e70so101330177b3.0 for ; Sun, 26 Feb 2023 14:07:13 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=vgcJwiR1WaLfuqlyYYnqY8cLFGvSA2dGsL7q/gzpNRk=; b=q+z1Ubkb6iwuq7N9GJ4abyDrWmOEX0TmdQFn8U1/WZ6r9VF1yMMfn5X0QO85EvdNVu BrfgMsoopcKDwM+KqQPmBMW2rRtIr6NSYkcORS0V0KF1pp9RNkk07nXtlmjg0pKaYH// 3dghIW406zwOUaQ/wrdwmdfKhmIE16wR5L2DwV1+FT9WdK2ctYZUQvbyuEKXMDaRrOIw HXH6LnvNy4H0RP6pZRds3t727gM0MvqGVzAIxggNEJaeXFxtoAJ7exiVMka4My3PpGQr 5jcTJc0F/LGh5Wy2yrsJTVKf/rwAd3nCoYulCinQHrkBTwKC7kO3atRMAO7YjMI7HL7L 7v0A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=vgcJwiR1WaLfuqlyYYnqY8cLFGvSA2dGsL7q/gzpNRk=; b=ovaW1szwcbC4tF9D3kUZCtoBKAQGhXQ22yGyqsq2H5lbF5o7OwMoRK2zSsRV0BuVWh QlF//gWSBlJVRv/0XD3NcAovSU7dxpfpyIGVPDB8udrD9dOVeQ8AuJYMGVqFClvnm6XP /WkvZJ1DWq2RLfLqy5BPH95gIFZEQ2Kh7rLUgT2+nNOA4kQ2kbchpBcvcH5ZLGfbdzAl wM7Rl18eyG4ZCRDVeM9IfnZHbDVmZh1D3IgrRX60n30YmqVMlKFj3hFNxQZepPWyonA0 pgPSFrocfAT6KrqIKdCU74Gaz++Gt2r37uqGIBflzIKPSHdCWRo3jw0+flvsJ54kd+sR 0vzA== X-Gm-Message-State: AO0yUKXOARLdaqNdjmiXVmXePUPh0yDW9XYWf3tHoaK5eQV5Q5/2Aliq PA5YodxfmVp82PyDTS0w9783Gzf+DKKAFmGk6f839LQTGE268XEMLaD9GOkmkpG1XwGVTy1ItvG 0uS8l51tbyN5WIhSyPvgEqC90hMsmEI0Gw07dCpeknMe5mPN6seNtN82Dc4wkIUMlhA== X-Google-Smtp-Source: AK7set8Yl+zN19h8B33+/F/LRjUmnCkzLdaDBSGpcZH4508mF/QGJybD1bmfsXm43VvF3QtrNyYrlTphla87yQ== X-Received: from mostafa.c.googlers.com ([fda3:e722:ac3:cc00:28:9cb1:c0a8:333c]) (user=smostafa job=sendgmr) by 2002:a05:6902:1003:b0:9f5:af6b:6f69 with SMTP id w3-20020a056902100300b009f5af6b6f69mr5709597ybt.5.1677449232676; Sun, 26 Feb 2023 14:07:12 -0800 (PST) Date: Sun, 26 Feb 2023 22:06:44 +0000 In-Reply-To: <20230226220650.1480786-1-smostafa@google.com> Mime-Version: 1.0 References: <20230226220650.1480786-1-smostafa@google.com> X-Mailer: git-send-email 2.39.2.637.g21b0678d19-goog Message-ID: <20230226220650.1480786-6-smostafa@google.com> Subject: [RFC PATCH v2 05/11] hw/arm/smmuv3: Parse STE config for stage-2 From: Mostafa Saleh To: qemu-devel@nongnu.org Cc: jean-philippe@linaro.org, eric.auger@redhat.com, peter.maydell@linaro.org, qemu-arm@nongnu.org, richard.henderson@linaro.org, Mostafa Saleh 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::114a; envelope-from=3ENj7YwgKCtUJDFJK1617FF7C5.3FDH5DL-45M5CEFE7EL.FI7@flex--smostafa.bounces.google.com; helo=mail-yw1-x114a.google.com X-Spam_score_int: -95 X-Spam_score: -9.6 X-Spam_bar: --------- X-Spam_report: (-9.6 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_MED=-0.001, 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, USER_IN_DEF_DKIM_WL=-7.5 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-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @google.com) X-ZM-MESSAGEID: 1677449353574100001 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Parse stage-2 configuration from STE and populate it in SMMUS2Cfg. Validity of these value are checked when possible. Only AA64 tables are supported and STT is not supported. According to SMMUv3 user manual "5.2 Stream Table Entry": All fields with an S2 prefix (with the exception of S2VMID) are IGNORED when stage-2 bypasses translation (Config[1] =3D=3D 0). Which means that VMID can be used(for TLB tagging) even if stage-2 is bypassed, so we parse it unconditionally when S2P exists. Otherwise it is set to -1.(only S1P) As stall is not supported, if S2S is set the translation would abort. For S2R, we reuse the same code used for stage-1 with flag record_faults. However when nested translation is supported we would need to separate stage-1 and stage-2 faults. Signed-off-by: Mostafa Saleh --- Changes in V2: - Parse S2PS and S2ENDI - Squash with S2VMID parsing patch - Squash with S2AFF parsing - Squash with fault reporting patch - Add check for S2T0SZ - Renaming and refactoring code --- hw/arm/smmuv3-internal.h | 4 ++ hw/arm/smmuv3.c | 138 +++++++++++++++++++++++++++++++++++++++ include/hw/arm/smmuv3.h | 3 + 3 files changed, 145 insertions(+) diff --git a/hw/arm/smmuv3-internal.h b/hw/arm/smmuv3-internal.h index 183d5ac8dc..3388e1a5f8 100644 --- a/hw/arm/smmuv3-internal.h +++ b/hw/arm/smmuv3-internal.h @@ -526,9 +526,13 @@ typedef struct CD { #define STE_S2TG(x) extract32((x)->word[5], 14, 2) #define STE_S2PS(x) extract32((x)->word[5], 16, 3) #define STE_S2AA64(x) extract32((x)->word[5], 19, 1) +#define STE_S2ENDI(x) extract32((x)->word[5], 20, 1) +#define STE_S2AFFD(x) extract32((x)->word[5], 21, 1) #define STE_S2HD(x) extract32((x)->word[5], 24, 1) #define STE_S2HA(x) extract32((x)->word[5], 25, 1) #define STE_S2S(x) extract32((x)->word[5], 26, 1) +#define STE_S2R(x) extract32((x)->word[5], 27, 1) + #define STE_CTXPTR(x) \ ({ \ unsigned long addr; \ diff --git a/hw/arm/smmuv3.c b/hw/arm/smmuv3.c index 4e90343996..dc74a5442d 100644 --- a/hw/arm/smmuv3.c +++ b/hw/arm/smmuv3.c @@ -329,6 +329,46 @@ static int smmu_get_cd(SMMUv3State *s, STE *ste, uint3= 2_t ssid, return 0; } =20 +/* + * Max valid value is 39 when SMMU_IDR3.STT =3D=3D 0. + * In architectures after SMMUv3.0: + * - If STE.S2TG selects a 4KB or 16KB granule, the minimum valid value fo= r this + * field is MAX(16, 64-IAS) + * - If STE.S2TG selects a 64KB granule, the minimum valid value for this = field + * is (64-IAS). + * As we only support AA64, IAS =3D OAS. + */ +static bool t0sz_valid(SMMUTransCfg *cfg) +{ + if (cfg->s2cfg.tsz > 39) { + return false; + } + + if (cfg->s2cfg.granule_sz =3D=3D 16) { + return (cfg->s2cfg.tsz >=3D 64 - cfg->s2cfg.oas); + } + + return (cfg->s2cfg.tsz >=3D MAX(64 - cfg->s2cfg.oas, 16)); +} + +/* + * Return true if s2 page table config is valid. + * This checks with the configured start level, ias_bits and granularity w= e can + * have a valid page table as described in ARM ARM D8.2 Translation proces= s. + * The idea here is to see for the highest possible number of IPA bits, how + * many concatenated tables we would need, if it is more than 16, then thi= s is + * not possible. + */ +static bool s2_pgtable_config_valid(uint8_t sl0, uint8_t t0sz, uint8_t gra= n) +{ + int level =3D get_start_level(sl0, gran); + uint64_t ipa_bits =3D 64 - t0sz; + uint64_t max_ipa =3D (1ULL << ipa_bits) - 1; + int nr_concat =3D pgd_idx(level, gran, max_ipa) + 1; + + return nr_concat <=3D SMMU_MAX_S2_CONCAT; +} + /* Returns < 0 in case of invalid STE, 0 otherwise */ static int decode_ste(SMMUv3State *s, SMMUTransCfg *cfg, STE *ste, SMMUEventInfo *event) @@ -354,7 +394,105 @@ static int decode_ste(SMMUv3State *s, SMMUTransCfg *c= fg, return 0; } =20 + /* + * If a stage is enabled in SW while not advertised, throw bad ste + * according to SMMU manual 5.2 Stream Table Entry - [3:1] Config. + */ + if (!STAGE1_SUPPORTED(s) && STE_CFG_S1_ENABLED(config)) { + qemu_log_mask(LOG_GUEST_ERROR, "SMMUv3 S1 used but not supported.\= n"); + goto bad_ste; + } + if (!STAGE2_SUPPORTED(s) && STE_CFG_S2_ENABLED(config)) { + qemu_log_mask(LOG_GUEST_ERROR, "SMMUv3 S2 used but not supported.\= n"); + goto bad_ste; + } + + if (STAGE2_SUPPORTED(s)) { + /* VMID is considered even if s2 is disabled. */ + cfg->s2cfg.vmid =3D STE_S2VMID(ste); + } else { + /* Default to -1 */ + cfg->s2cfg.vmid =3D -1; + } + if (STE_CFG_S2_ENABLED(config)) { + cfg->stage =3D 2; + + if (STE_S2AA64(ste) =3D=3D 0x0) { + qemu_log_mask(LOG_UNIMP, + "SMMUv3 AArch32 tables not supported\n"); + g_assert_not_reached(); + } + + switch (STE_S2TG(ste)) { + case 0x0: /* 4KB */ + cfg->s2cfg.granule_sz =3D 12; + break; + case 0x1: /* 64KB */ + cfg->s2cfg.granule_sz =3D 16; + break; + case 0x2: /* 16KB */ + cfg->s2cfg.granule_sz =3D 14; + break; + default: + qemu_log_mask(LOG_GUEST_ERROR, + "SMMUv3 bad STE S2TG: %x\n", STE_S2TG(ste)); + goto bad_ste; + } + + cfg->s2cfg.vttb =3D STE_S2TTB(ste); + + cfg->s2cfg.sl0 =3D STE_S2SL0(ste); + /* FEAT_TTST not supported. */ + if (cfg->s2cfg.sl0 =3D=3D 0x3) { + qemu_log_mask(LOG_UNIMP, "SMMUv3 S2SL0 =3D 0x3 has no meaning!= \n"); + goto bad_ste; + } + + + cfg->s2cfg.oas =3D oas2bits(MIN(STE_S2PS(ste), SMMU_IDR5_OAS)); + /* + * It is ILLEGAL for the address in S2TTB to be outside the range + * described by the effective S2PS value. + */ + if (cfg->s2cfg.vttb & ~(MAKE_64BIT_MASK(0, cfg->s2cfg.oas))) { + goto bad_ste; + } + + cfg->s2cfg.tsz =3D STE_S2T0SZ(ste); + + if (!t0sz_valid(cfg)) { + qemu_log_mask(LOG_GUEST_ERROR, "SMMUv3 bad STE S2T0SZ =3D %d\n= ", + cfg->s2cfg.tsz); + goto bad_ste; + } + + if (!s2_pgtable_config_valid(cfg->s2cfg.sl0, cfg->s2cfg.tsz, + cfg->s2cfg.granule_sz)) { + qemu_log_mask(LOG_GUEST_ERROR, + "SMMUv3 STE stage 2 config not valid!\n"); + goto bad_ste; + } + + /* Only LE supported(IDR0.TTENDIAN). */ + if (STE_S2ENDI(ste)) { + goto bad_ste; + } + + cfg->s2cfg.affd =3D STE_S2AFFD(ste); + /* + * We reuse the same code used for stage-1 with flag record_faults. + * However when nested translation is supported we would + * need to separate stage-1 and stage-2 faults. + */ + cfg->record_faults =3D STE_S2R(ste); + /* As stall is not supported. */ + if (STE_S2S(ste)) { + qemu_log_mask(LOG_UNIMP, "SMMUv3 Stall not implemented!\n"); + goto bad_ste; + } + + /* This is still here as stage 2 has not been fully enabled yet. */ qemu_log_mask(LOG_UNIMP, "SMMUv3 does not support stage 2 yet\n"); goto bad_ste; } diff --git a/include/hw/arm/smmuv3.h b/include/hw/arm/smmuv3.h index a0c026402e..6031d7d325 100644 --- a/include/hw/arm/smmuv3.h +++ b/include/hw/arm/smmuv3.h @@ -83,4 +83,7 @@ struct SMMUv3Class { #define TYPE_ARM_SMMUV3 "arm-smmuv3" OBJECT_DECLARE_TYPE(SMMUv3State, SMMUv3Class, ARM_SMMUV3) =20 +#define STAGE1_SUPPORTED(s) FIELD_EX32(s->idr[0], IDR0, S1P) +#define STAGE2_SUPPORTED(s) FIELD_EX32(s->idr[0], IDR0, S2P) + #endif --=20 2.39.2.637.g21b0678d19-goog From nobody Sun May 12 06:21:36 2024 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=reject dis=none) header.from=google.com ARC-Seal: i=1; a=rsa-sha256; t=1677449317; cv=none; d=zohomail.com; s=zohoarc; b=iVJhS5GE7pw05AnG6UB03P2rOU+WU1305Kz+nIsbVGOJcuCpLm+hxdnfFcyzyEOs9+DShM6MqS+r1vjbZFb0lFkfcqcLFjG0MFqnxhZ2lYIB5QJ6BG5yk4pD4OwrktShAWuGnUcgSOs+hRAhuSQFf4lqgt7dHP9EISZ3ALQwn/k= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1677449317; h=Content-Type: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=26w0ZsK+yJV9JuE2L/gekg4quDGDsIKNMc4eL5/NDRI=; b=EsIBq3DZasZc7vz2gqYleLCPvU4EnsgFpzfGvOnmtD8F/FmeCScWXMgb5XDMLXAvnQkSOIsS8IKZeyOoP1uSutShsaHRpMlrvrrq1S7cA6pi6Vd0/DJuhBa2W0r98hqLTQPGZaT92TBhUYHzcDT++Wooime0CfbDYEksnrSrevQ= 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=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1677449317123883.0021131534868; Sun, 26 Feb 2023 14:08:37 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pWPAu-0002Tu-N3; Sun, 26 Feb 2023 17:07:20 -0500 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 <3Etj7YwgKCtcLFHLM3839HH9E7.5HFJ7FN-67O7EGHG9GN.HK9@flex--smostafa.bounces.google.com>) id 1pWPAs-0002TF-4r for qemu-devel@nongnu.org; Sun, 26 Feb 2023 17:07:19 -0500 Received: from mail-wm1-x349.google.com ([2a00:1450:4864:20::349]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from <3Etj7YwgKCtcLFHLM3839HH9E7.5HFJ7FN-67O7EGHG9GN.HK9@flex--smostafa.bounces.google.com>) id 1pWPAq-0003uC-G2 for qemu-devel@nongnu.org; Sun, 26 Feb 2023 17:07:17 -0500 Received: by mail-wm1-x349.google.com with SMTP id f14-20020a7bcc0e000000b003dd41ad974bso2105258wmh.3 for ; Sun, 26 Feb 2023 14:07:15 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=26w0ZsK+yJV9JuE2L/gekg4quDGDsIKNMc4eL5/NDRI=; b=CTSGuKkVgdYZQi1dCSGiHEk+sdX8iCW/vK4nvGaGetkrr67LvWKZCvm3yuR9nNile1 XOpt0G78roqLs46t5FqFBUbleob/fHH1ewnvq+1FujnFhUjr9luhQSaSP9pyKLunbEYu w+qFfeTWI0na/1oNXmHxDRb6OgaPy+5hea4cUEit1KQ6AB3QA0nGn3mDAMUGV5aNmAve Cgu9EdeGG1DakBM9WuJAtiOxPA+B7Gk9i6RWpiQfTuobvmNBgeHbz8dTQhe5aiO/ZQp6 nLxQABLxd0L9czFDkuxKEcJgQRC7oFudK40VIPbK2k5zc14q5mT2riffLWRWeRkv7sLf pD/Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=26w0ZsK+yJV9JuE2L/gekg4quDGDsIKNMc4eL5/NDRI=; b=K1id1Cwcnxe2Nz9z9f/bN6t1ABysuBajG6+07ZVV5FIn/lbEYYF59Vh624TVuAoj9a 0QthLaFBLXnIr/3xPeQbleaFykLH3gxwYyTl7wB7rEjZqfLd8kovYtcQY4wVmdDCqCEj DV08KRoQn2ssbRYiinHkfuAnFl7UaUh5LoeB9e0EgbMuGfUVLzoj3WjvdV2jK2Yy3Ipi b0k8h6hGrGqVgCS7b+ZhQyCh9/74S3yTyAegvZXx6kM+kgi05GJ13z6mLv56rUkE4f/c xHlmI9M1N3zEL7Xkl8+aCp84lJQkRYVMiOtiAy6gl/HowmZw/Hs5vMRAMFe1pT+nYJHS J+iA== X-Gm-Message-State: AO0yUKXqX5RVOfJa6PVmK1wh8UKc94QFAtZryOaZg45MbVjKNZPIT2OY +SWAJNjeeybpRwEfeP8fQo/pK2vr7gZ8N8SgKoU4MPB/E6mVLUy4HDkqJmgOctAZz2IEw266oCf A1OdpkV0tHYuh35KiSXwUlf0FIeaCNdKfbNPNq0LZbpgL/+T5/f3rRWwk45esE4W3Dg== X-Google-Smtp-Source: AK7set+V1suInn3skMA6vwc80ZQ2Y+dZaPXKKrRKADthsFDPt7PI8HmcwJqTu8O4jy0/amkpdw0XHDm1XwR8Mw== X-Received: from mostafa.c.googlers.com ([fda3:e722:ac3:cc00:28:9cb1:c0a8:333c]) (user=smostafa job=sendgmr) by 2002:a5d:4205:0:b0:2c9:bd6e:83c0 with SMTP id n5-20020a5d4205000000b002c9bd6e83c0mr547690wrq.3.1677449234920; Sun, 26 Feb 2023 14:07:14 -0800 (PST) Date: Sun, 26 Feb 2023 22:06:45 +0000 In-Reply-To: <20230226220650.1480786-1-smostafa@google.com> Mime-Version: 1.0 References: <20230226220650.1480786-1-smostafa@google.com> X-Mailer: git-send-email 2.39.2.637.g21b0678d19-goog Message-ID: <20230226220650.1480786-7-smostafa@google.com> Subject: [RFC PATCH v2 06/11] hw/arm/smmuv3: Make TLB lookup work for stage-2 From: Mostafa Saleh To: qemu-devel@nongnu.org Cc: jean-philippe@linaro.org, eric.auger@redhat.com, peter.maydell@linaro.org, qemu-arm@nongnu.org, richard.henderson@linaro.org, Mostafa Saleh 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=2a00:1450:4864:20::349; envelope-from=3Etj7YwgKCtcLFHLM3839HH9E7.5HFJ7FN-67O7EGHG9GN.HK9@flex--smostafa.bounces.google.com; helo=mail-wm1-x349.google.com X-Spam_score_int: -95 X-Spam_score: -9.6 X-Spam_bar: --------- X-Spam_report: (-9.6 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_MED=-0.001, 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, USER_IN_DEF_DKIM_WL=-7.5 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-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @google.com) X-ZM-MESSAGEID: 1677449317433100011 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Right now, either stage-1 or stage-2 are supported, this simplifies how we can deal with TLBs. This patch makes TLB lookup work if stage-2 is enabled instead of stage-1. TLB lookup is done before a PTW, if a valid entry is found we won't do the PTW. To be able to do TLB lookup, we need the correct tagging info, as granularity and input size, so we get this based on the supported translation stage. The TLB entries are added correctly from each stage PTW. When nested translation is supported, this would need to change, for example if we go with a combined TLB implementation, we would need to use the min of the granularities in TLB. As stage-2 shouldn't be tagged by ASID, it will be set to -1 if S1P is not enabled. Signed-off-by: Mostafa Saleh Reviewed-by: Eric Auger --- Changes in v2: - check if S1 is enabled(not supported) when reading S1 TT. --- hw/arm/smmuv3.c | 45 ++++++++++++++++++++++++++++++++++----------- 1 file changed, 34 insertions(+), 11 deletions(-) diff --git a/hw/arm/smmuv3.c b/hw/arm/smmuv3.c index dc74a5442d..ce193e9598 100644 --- a/hw/arm/smmuv3.c +++ b/hw/arm/smmuv3.c @@ -697,6 +697,9 @@ static int smmuv3_decode_config(IOMMUMemoryRegion *mr, = SMMUTransCfg *cfg, STE ste; CD cd; =20 + /* ASID defaults to -1 (if s1 is not supported). */ + cfg->asid =3D -1; + ret =3D smmu_find_ste(s, sid, &ste, event); if (ret) { return ret; @@ -787,6 +790,7 @@ static IOMMUTLBEntry smmuv3_translate(IOMMUMemoryRegion= *mr, hwaddr addr, SMMUTLBEntry *cached_entry =3D NULL; SMMUTransTableInfo *tt; SMMUTransCfg *cfg =3D NULL; + uint8_t granule_sz, tsz; IOMMUTLBEntry entry =3D { .target_as =3D &address_space_memory, .iova =3D addr, @@ -822,21 +826,40 @@ static IOMMUTLBEntry smmuv3_translate(IOMMUMemoryRegi= on *mr, hwaddr addr, goto epilogue; } =20 - tt =3D select_tt(cfg, addr); - if (!tt) { - if (cfg->record_faults) { - event.type =3D SMMU_EVT_F_TRANSLATION; - event.u.f_translation.addr =3D addr; - event.u.f_translation.rnw =3D flag & 0x1; + if (cfg->stage =3D=3D 1) { + /* Select stage1 translation table. */ + tt =3D select_tt(cfg, addr); + if (!tt) { + if (cfg->record_faults) { + event.type =3D SMMU_EVT_F_TRANSLATION; + event.u.f_translation.addr =3D addr; + event.u.f_translation.rnw =3D flag & 0x1; + } + status =3D SMMU_TRANS_ERROR; + goto epilogue; } - status =3D SMMU_TRANS_ERROR; - goto epilogue; - } + granule_sz =3D tt->granule_sz; + tsz =3D tt->tsz; =20 - page_mask =3D (1ULL << (tt->granule_sz)) - 1; + } else { + /* Stage2. */ + granule_sz =3D cfg->s2cfg.granule_sz; + tsz =3D cfg->s2cfg.tsz; + } + /* + * TLB lookup looks for granule and input size for a translation stage, + * as only one stage is supported right now, choose the right values + * from the configuration. + */ + page_mask =3D (1ULL << granule_sz) - 1; aligned_addr =3D addr & ~page_mask; =20 - cached_entry =3D smmu_iotlb_lookup(bs, cfg, tt, aligned_addr); + SMMUTransTableInfo temp =3D { + .granule_sz =3D granule_sz, + .tsz =3D tsz, + }; + + cached_entry =3D smmu_iotlb_lookup(bs, cfg, &temp, aligned_addr); if (cached_entry) { if ((flag & IOMMU_WO) && !(cached_entry->entry.perm & IOMMU_WO)) { status =3D SMMU_TRANS_ERROR; --=20 2.39.2.637.g21b0678d19-goog From nobody Sun May 12 06:21:36 2024 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=reject dis=none) header.from=google.com ARC-Seal: i=1; a=rsa-sha256; t=1677449313; cv=none; d=zohomail.com; s=zohoarc; b=kXA/JVq9NnifGrDRdBCsulGw1ZfW+3NfDiSLGdOGqAOH0gSEslBc6A1Z4n7Uf6PWdg8jq4yDMVaa7xyXoi1BH668/QmVMxY40MsYeGLLaVslbG8JQN9yCuYAUq053V9tv9wsQSJ8OuQ6d2XhxdXR7bw5+AJN5tQlQpQlGexNFaw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1677449313; h=Content-Type: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=+h14IS3oIPIkYWXpfXi/FA89QzYqsvMO3akwpCPj/O0=; b=dKG+KQ1GUgaSG7hjUAnH61zdINrA52KCeBBN4xziKkewz/XRwhRu02Uqs2bf3W3KE2cabiZEEN2F0mvZknrBjy1mX3X4y6N+q8erp1B92U/eJ82Y1lKwJk20BnxW9O1dbV0D0ntMSY3fYbqX+SQHcEUcbQHIUywVmxSb76roUfo= 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=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1677449313198558.9173531194352; Sun, 26 Feb 2023 14:08:33 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pWPAw-0002VR-3x; Sun, 26 Feb 2023 17:07:22 -0500 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 <3Fdj7YwgKCtoOIKOP6B6CKKCHA.8KIMAIQ-9ARAHJKJCJQ.KNC@flex--smostafa.bounces.google.com>) id 1pWPAv-0002UA-0F for qemu-devel@nongnu.org; Sun, 26 Feb 2023 17:07:21 -0500 Received: from mail-yw1-x114a.google.com ([2607:f8b0:4864:20::114a]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from <3Fdj7YwgKCtoOIKOP6B6CKKCHA.8KIMAIQ-9ARAHJKJCJQ.KNC@flex--smostafa.bounces.google.com>) id 1pWPAt-0003w8-63 for qemu-devel@nongnu.org; Sun, 26 Feb 2023 17:07:20 -0500 Received: by mail-yw1-x114a.google.com with SMTP id 00721157ae682-536c039f859so101213997b3.21 for ; Sun, 26 Feb 2023 14:07:18 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=+h14IS3oIPIkYWXpfXi/FA89QzYqsvMO3akwpCPj/O0=; b=eA6StUV1jU1IqZJc5NEf7YlW7kOmIkiZgdhepX0pu/HIQtskxEGd0Pf2xz7Poa3QTO feXDF0jpzms2KQP9CD5kKA4K8ZgjA75vL5Kbs6l6jl8bSrpB7tjct5ekFLylYIdX63VZ 9ZKqllbyRKHEtkwL4I8Ca+SI5GykPDDI56GVRmaAYPTfqhII9rT14RVJ7FI8GnUHLCqn x5KtT0eM+rxbYU9aygSa0R5jYwTj4opf9+Zfob9WPXJUEYH7vXe0q+l5UfwM9Wi9ybIo ddK+XQsMcWlRsBi64aTy3hBrSEdRRJilIyzuo6YwLJhlRGMp/TzopAFB1w1YtLJINlKL rMEQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=+h14IS3oIPIkYWXpfXi/FA89QzYqsvMO3akwpCPj/O0=; b=QPWB85J9zE9dtZ85YZHg989R4biAB3WkTaPHSl2rxGYvjS6ZmcP1TOgp4fVZ7HAuom 9I7qVMlYiTJb+GVpqur/qUlxzzU66Zo39pM9/m+H4m50XL9VPaAQcOAn86Ey/PE/7z5C VVyZGH3cEThkTnVu+1Iymo/cpWwLqXKn06hm0lsl3kE9iPhmXgmxGMw8gN4/0mkrcCtp cRU8q1Ywajh9Rsqywl9LeeKPhU47SCE809h3+PKT0EeRmtkStf+1bV/jfspUDqDUlMbI Y85DpMoQLsYTblbHDdLe8nAQsYB+96e7WriEhPrheH93DLKmvSc7h0atWcF9jf5uNSpk A9jw== X-Gm-Message-State: AO0yUKXWMH8u9WJ8xwkGUlk0hhx4TUzMIs6EJIPtLwejmCL1RbNOYI2E 9Htk+csmZSPlKiUriFFq46mvskFynwxMu3oszABPjKLaBKOwzG2ynh2UaFxZaIOIUD+oZ6balYI XlKkbaiK+vOEmZYSndSAiimX2j5QgDYoRPi/758pE5wukDHhTu+5zop5JwCXIjFfGQA== X-Google-Smtp-Source: AK7set9D9O1OvflFoVz88G4/VuTzcj4TjnGPtilMj2Q/CvSBHewXeAZ/hfKWY9Uql5kAhkUcTHb7LAn1wppvTQ== X-Received: from mostafa.c.googlers.com ([fda3:e722:ac3:cc00:28:9cb1:c0a8:333c]) (user=smostafa job=sendgmr) by 2002:a5b:ac9:0:b0:80b:dedb:ec94 with SMTP id a9-20020a5b0ac9000000b0080bdedbec94mr428034ybr.528.1677449237106; Sun, 26 Feb 2023 14:07:17 -0800 (PST) Date: Sun, 26 Feb 2023 22:06:46 +0000 In-Reply-To: <20230226220650.1480786-1-smostafa@google.com> Mime-Version: 1.0 References: <20230226220650.1480786-1-smostafa@google.com> X-Mailer: git-send-email 2.39.2.637.g21b0678d19-goog Message-ID: <20230226220650.1480786-8-smostafa@google.com> Subject: [RFC PATCH v2 07/11] hw/arm/smmuv3: Add VMID to tlb tagging From: Mostafa Saleh To: qemu-devel@nongnu.org Cc: jean-philippe@linaro.org, eric.auger@redhat.com, peter.maydell@linaro.org, qemu-arm@nongnu.org, richard.henderson@linaro.org, Mostafa Saleh 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::114a; envelope-from=3Fdj7YwgKCtoOIKOP6B6CKKCHA.8KIMAIQ-9ARAHJKJCJQ.KNC@flex--smostafa.bounces.google.com; helo=mail-yw1-x114a.google.com X-Spam_score_int: -95 X-Spam_score: -9.6 X-Spam_bar: --------- X-Spam_report: (-9.6 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_MED=-0.001, 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, USER_IN_DEF_DKIM_WL=-7.5 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+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @google.com) X-ZM-MESSAGEID: 1677449313551100002 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Allow TLB to be tagged with VMID. If stage-1 is only supported, VMID is set to -1 and ignored from STE and CMD_TLBI_NH* cmds. Update smmu_iotlb_insert trace event to have vmid. Signed-off-by: Mostafa Saleh Reviewed-by: Eric Auger --- Changes in v2: -Fix TLB aliasing issue from missing check in smmu_iotlb_key_equal. -Add vmid to traces smmu_iotlb_insert and smmu_iotlb_lookup_hit/miss. -Add vmid to hash function. --- hw/arm/smmu-common.c | 36 ++++++++++++++++++++++-------------- hw/arm/smmu-internal.h | 2 ++ hw/arm/smmuv3.c | 12 +++++++++--- hw/arm/trace-events | 6 +++--- include/hw/arm/smmu-common.h | 5 +++-- 5 files changed, 39 insertions(+), 22 deletions(-) diff --git a/hw/arm/smmu-common.c b/hw/arm/smmu-common.c index 3f448bc82e..3191a008c6 100644 --- a/hw/arm/smmu-common.c +++ b/hw/arm/smmu-common.c @@ -38,7 +38,7 @@ static guint smmu_iotlb_key_hash(gconstpointer v) =20 /* Jenkins hash */ a =3D b =3D c =3D JHASH_INITVAL + sizeof(*key); - a +=3D key->asid + key->level + key->tg; + a +=3D key->asid + key->vmid + key->level + key->tg; b +=3D extract64(key->iova, 0, 32); c +=3D extract64(key->iova, 32, 32); =20 @@ -53,13 +53,15 @@ static gboolean smmu_iotlb_key_equal(gconstpointer v1, = gconstpointer v2) SMMUIOTLBKey *k1 =3D (SMMUIOTLBKey *)v1, *k2 =3D (SMMUIOTLBKey *)v2; =20 return (k1->asid =3D=3D k2->asid) && (k1->iova =3D=3D k2->iova) && - (k1->level =3D=3D k2->level) && (k1->tg =3D=3D k2->tg); + (k1->level =3D=3D k2->level) && (k1->tg =3D=3D k2->tg) && + (k1->vmid =3D=3D k2->vmid); } =20 -SMMUIOTLBKey smmu_get_iotlb_key(uint16_t asid, uint64_t iova, +SMMUIOTLBKey smmu_get_iotlb_key(uint16_t asid, uint16_t vmid, uint64_t iov= a, uint8_t tg, uint8_t level) { - SMMUIOTLBKey key =3D {.asid =3D asid, .iova =3D iova, .tg =3D tg, .lev= el =3D level}; + SMMUIOTLBKey key =3D {.asid =3D asid, .vmid =3D vmid, .iova =3D iova, + .tg =3D tg, .level =3D level}; =20 return key; } @@ -78,7 +80,8 @@ SMMUTLBEntry *smmu_iotlb_lookup(SMMUState *bs, SMMUTransC= fg *cfg, uint64_t mask =3D subpage_size - 1; SMMUIOTLBKey key; =20 - key =3D smmu_get_iotlb_key(cfg->asid, iova & ~mask, tg, level); + key =3D smmu_get_iotlb_key(cfg->asid, cfg->s2cfg.vmid, + iova & ~mask, tg, level); entry =3D g_hash_table_lookup(bs->iotlb, &key); if (entry) { break; @@ -88,13 +91,13 @@ SMMUTLBEntry *smmu_iotlb_lookup(SMMUState *bs, SMMUTran= sCfg *cfg, =20 if (entry) { cfg->iotlb_hits++; - trace_smmu_iotlb_lookup_hit(cfg->asid, iova, + trace_smmu_iotlb_lookup_hit(cfg->asid, cfg->s2cfg.vmid, iova, cfg->iotlb_hits, cfg->iotlb_misses, 100 * cfg->iotlb_hits / (cfg->iotlb_hits + cfg->iotlb_misses)); } else { cfg->iotlb_misses++; - trace_smmu_iotlb_lookup_miss(cfg->asid, iova, + trace_smmu_iotlb_lookup_miss(cfg->asid, cfg->s2cfg.vmid, iova, cfg->iotlb_hits, cfg->iotlb_misses, 100 * cfg->iotlb_hits / (cfg->iotlb_hits + cfg->iotlb_misses)= ); @@ -111,8 +114,10 @@ void smmu_iotlb_insert(SMMUState *bs, SMMUTransCfg *cf= g, SMMUTLBEntry *new) smmu_iotlb_inv_all(bs); } =20 - *key =3D smmu_get_iotlb_key(cfg->asid, new->entry.iova, tg, new->level= ); - trace_smmu_iotlb_insert(cfg->asid, new->entry.iova, tg, new->level); + *key =3D smmu_get_iotlb_key(cfg->asid, cfg->s2cfg.vmid, new->entry.iov= a, + tg, new->level); + trace_smmu_iotlb_insert(cfg->asid, cfg->s2cfg.vmid, new->entry.iova, + tg, new->level); g_hash_table_insert(bs->iotlb, key, new); } =20 @@ -130,8 +135,7 @@ static gboolean smmu_hash_remove_by_asid(gpointer key, = gpointer value, =20 return SMMU_IOTLB_ASID(*iotlb_key) =3D=3D asid; } - -static gboolean smmu_hash_remove_by_asid_iova(gpointer key, gpointer value, +static gboolean smmu_hash_remove_by_asid_vmid_iova(gpointer key, gpointer = value, gpointer user_data) { SMMUTLBEntry *iter =3D (SMMUTLBEntry *)value; @@ -142,18 +146,21 @@ static gboolean smmu_hash_remove_by_asid_iova(gpointe= r key, gpointer value, if (info->asid >=3D 0 && info->asid !=3D SMMU_IOTLB_ASID(iotlb_key)) { return false; } + if (info->vmid >=3D 0 && info->vmid !=3D SMMU_IOTLB_VMID(iotlb_key)) { + return false; + } return ((info->iova & ~entry->addr_mask) =3D=3D entry->iova) || ((entry->iova & ~info->mask) =3D=3D info->iova); } =20 -void smmu_iotlb_inv_iova(SMMUState *s, int asid, dma_addr_t iova, +void smmu_iotlb_inv_iova(SMMUState *s, int asid, int vmid, dma_addr_t iova, uint8_t tg, uint64_t num_pages, uint8_t ttl) { /* if tg is not set we use 4KB range invalidation */ uint8_t granule =3D tg ? tg * 2 + 10 : 12; =20 if (ttl && (num_pages =3D=3D 1) && (asid >=3D 0)) { - SMMUIOTLBKey key =3D smmu_get_iotlb_key(asid, iova, tg, ttl); + SMMUIOTLBKey key =3D smmu_get_iotlb_key(asid, vmid, iova, tg, ttl); =20 if (g_hash_table_remove(s->iotlb, &key)) { return; @@ -166,10 +173,11 @@ void smmu_iotlb_inv_iova(SMMUState *s, int asid, dma_= addr_t iova, =20 SMMUIOTLBPageInvInfo info =3D { .asid =3D asid, .iova =3D iova, + .vmid =3D vmid, .mask =3D (num_pages * 1 << granule) - 1}; =20 g_hash_table_foreach_remove(s->iotlb, - smmu_hash_remove_by_asid_iova, + smmu_hash_remove_by_asid_vmid_iova, &info); } =20 diff --git a/hw/arm/smmu-internal.h b/hw/arm/smmu-internal.h index f79c389cd3..4beba76302 100644 --- a/hw/arm/smmu-internal.h +++ b/hw/arm/smmu-internal.h @@ -136,9 +136,11 @@ static inline int pgd_idx(int start_level, int granule= , dma_addr_t iova) } =20 #define SMMU_IOTLB_ASID(key) ((key).asid) +#define SMMU_IOTLB_VMID(key) ((key).vmid) =20 typedef struct SMMUIOTLBPageInvInfo { int asid; + int vmid; uint64_t iova; uint64_t mask; } SMMUIOTLBPageInvInfo; diff --git a/hw/arm/smmuv3.c b/hw/arm/smmuv3.c index ce193e9598..f9c06723f9 100644 --- a/hw/arm/smmuv3.c +++ b/hw/arm/smmuv3.c @@ -1038,7 +1038,7 @@ static void smmuv3_s1_range_inval(SMMUState *s, Cmd *= cmd) { dma_addr_t end, addr =3D CMD_ADDR(cmd); uint8_t type =3D CMD_TYPE(cmd); - uint16_t vmid =3D CMD_VMID(cmd); + int vmid =3D -1; uint8_t scale =3D CMD_SCALE(cmd); uint8_t num =3D CMD_NUM(cmd); uint8_t ttl =3D CMD_TTL(cmd); @@ -1047,6 +1047,12 @@ static void smmuv3_s1_range_inval(SMMUState *s, Cmd = *cmd) uint64_t num_pages; uint8_t granule; int asid =3D -1; + SMMUv3State *smmuv3 =3D ARM_SMMUV3(s); + + /* Only consider VMID if stage-2 is supported. */ + if (STAGE2_SUPPORTED(smmuv3)) { + vmid =3D CMD_VMID(cmd); + } =20 if (type =3D=3D SMMU_CMD_TLBI_NH_VA) { asid =3D CMD_ASID(cmd); @@ -1055,7 +1061,7 @@ static void smmuv3_s1_range_inval(SMMUState *s, Cmd *= cmd) if (!tg) { trace_smmuv3_s1_range_inval(vmid, asid, addr, tg, 1, ttl, leaf); smmuv3_inv_notifiers_iova(s, asid, addr, tg, 1); - smmu_iotlb_inv_iova(s, asid, addr, tg, 1, ttl); + smmu_iotlb_inv_iova(s, asid, vmid, addr, tg, 1, ttl); return; } =20 @@ -1073,7 +1079,7 @@ static void smmuv3_s1_range_inval(SMMUState *s, Cmd *= cmd) num_pages =3D (mask + 1) >> granule; trace_smmuv3_s1_range_inval(vmid, asid, addr, tg, num_pages, ttl, = leaf); smmuv3_inv_notifiers_iova(s, asid, addr, tg, num_pages); - smmu_iotlb_inv_iova(s, asid, addr, tg, num_pages, ttl); + smmu_iotlb_inv_iova(s, asid, vmid, addr, tg, num_pages, ttl); addr +=3D mask + 1; } } diff --git a/hw/arm/trace-events b/hw/arm/trace-events index 205ac04573..705104e58b 100644 --- a/hw/arm/trace-events +++ b/hw/arm/trace-events @@ -14,9 +14,9 @@ smmu_iotlb_inv_all(void) "IOTLB invalidate all" smmu_iotlb_inv_asid(uint16_t asid) "IOTLB invalidate asid=3D%d" smmu_iotlb_inv_iova(uint16_t asid, uint64_t addr) "IOTLB invalidate asid= =3D%d addr=3D0x%"PRIx64 smmu_inv_notifiers_mr(const char *name) "iommu mr=3D%s" -smmu_iotlb_lookup_hit(uint16_t asid, uint64_t addr, uint32_t hit, uint32_t= miss, uint32_t p) "IOTLB cache HIT asid=3D%d addr=3D0x%"PRIx64" hit=3D%d m= iss=3D%d hit rate=3D%d" -smmu_iotlb_lookup_miss(uint16_t asid, uint64_t addr, uint32_t hit, uint32_= t miss, uint32_t p) "IOTLB cache MISS asid=3D%d addr=3D0x%"PRIx64" hit=3D%d= miss=3D%d hit rate=3D%d" -smmu_iotlb_insert(uint16_t asid, uint64_t addr, uint8_t tg, uint8_t level)= "IOTLB ++ asid=3D%d addr=3D0x%"PRIx64" tg=3D%d level=3D%d" +smmu_iotlb_lookup_hit(uint16_t asid, uint16_t vmid, uint64_t addr, uint32_= t hit, uint32_t miss, uint32_t p) "IOTLB cache HIT asid=3D%d vmid=3D%d addr= =3D0x%"PRIx64" hit=3D%d miss=3D%d hit rate=3D%d" +smmu_iotlb_lookup_miss(uint16_t asid, uint16_t vmid, uint64_t addr, uint32= _t hit, uint32_t miss, uint32_t p) "IOTLB cache MISS asid=3D%d vmid=3D%d ad= dr=3D0x%"PRIx64" hit=3D%d miss=3D%d hit rate=3D%d" +smmu_iotlb_insert(uint16_t asid, uint16_t vmid, uint64_t addr, uint8_t tg,= uint8_t level) "IOTLB ++ asid=3D%d vmid=3D%d addr=3D0x%"PRIx64" tg=3D%d le= vel=3D%d" =20 # smmuv3.c smmuv3_read_mmio(uint64_t addr, uint64_t val, unsigned size, uint32_t r) "= addr: 0x%"PRIx64" val:0x%"PRIx64" size: 0x%x(%d)" diff --git a/include/hw/arm/smmu-common.h b/include/hw/arm/smmu-common.h index 1ada792122..c415e8d853 100644 --- a/include/hw/arm/smmu-common.h +++ b/include/hw/arm/smmu-common.h @@ -118,6 +118,7 @@ typedef struct SMMUPciBus { typedef struct SMMUIOTLBKey { uint64_t iova; uint16_t asid; + uint16_t vmid; uint8_t tg; uint8_t level; } SMMUIOTLBKey; @@ -181,11 +182,11 @@ IOMMUMemoryRegion *smmu_iommu_mr(SMMUState *s, uint32= _t sid); SMMUTLBEntry *smmu_iotlb_lookup(SMMUState *bs, SMMUTransCfg *cfg, SMMUTransTableInfo *tt, hwaddr iova); void smmu_iotlb_insert(SMMUState *bs, SMMUTransCfg *cfg, SMMUTLBEntry *ent= ry); -SMMUIOTLBKey smmu_get_iotlb_key(uint16_t asid, uint64_t iova, +SMMUIOTLBKey smmu_get_iotlb_key(uint16_t asid, uint16_t vmid, uint64_t iov= a, uint8_t tg, uint8_t level); void smmu_iotlb_inv_all(SMMUState *s); void smmu_iotlb_inv_asid(SMMUState *s, uint16_t asid); -void smmu_iotlb_inv_iova(SMMUState *s, int asid, dma_addr_t iova, +void smmu_iotlb_inv_iova(SMMUState *s, int asid, int vmid, dma_addr_t iova, uint8_t tg, uint64_t num_pages, uint8_t ttl); =20 /* Unmap the range of all the notifiers registered to any IOMMU mr */ --=20 2.39.2.637.g21b0678d19-goog From nobody Sun May 12 06:21:36 2024 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=reject dis=none) header.from=google.com ARC-Seal: i=1; a=rsa-sha256; t=1677449262; cv=none; d=zohomail.com; s=zohoarc; b=k2c2z7+9zBmN9wxVJKy1l3H+DAMrcv3b+qOdtjer07Qxvj1Xjh+0bzcHsaQgJIlD2KsA+kzvR3gA0I9Pi5yxKMYtuMs5F3l+vPLBJ++B4gfezxctBY2m/9VQ4fJ2DL42Z4iCA9n23jKk2k70w22wLfUqTWEAzsa8k0/TBILO+Zo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1677449262; h=Content-Type: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=KbNmuFGJ5Kdw3e1umgze+jOGkBO3q4RpCfJyV0Au9q8=; b=GhvNV69w39OePKy26f2CKN8OgMvCVTAbtB6ukyFhwNNVNghiKUdVgem1yXBkJEougnrzdm/6YEA7YSpN6hKuwixgLGL6ST+iYUIvVgM1X8b/KaTLPAJ98bNZjF7ULiV0enC3uv6+sb+H7PFVoo4iNdEJ3KWhmlRQF4iE1CQh5G8= 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=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1677449262298377.0769737908638; Sun, 26 Feb 2023 14:07:42 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pWPAz-0002Wk-Lq; Sun, 26 Feb 2023 17:07:25 -0500 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 <3F9j7YwgKCtwQKMQR8D8EMMEJC.AMKOCKS-BCTCJLMLELS.MPE@flex--smostafa.bounces.google.com>) id 1pWPAx-0002Vv-ES for qemu-devel@nongnu.org; Sun, 26 Feb 2023 17:07:23 -0500 Received: from mail-wm1-x34a.google.com ([2a00:1450:4864:20::34a]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from <3F9j7YwgKCtwQKMQR8D8EMMEJC.AMKOCKS-BCTCJLMLELS.MPE@flex--smostafa.bounces.google.com>) id 1pWPAv-0003wP-I9 for qemu-devel@nongnu.org; Sun, 26 Feb 2023 17:07:23 -0500 Received: by mail-wm1-x34a.google.com with SMTP id l23-20020a7bc457000000b003e206cbce8dso1772649wmi.7 for ; Sun, 26 Feb 2023 14:07:20 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=KbNmuFGJ5Kdw3e1umgze+jOGkBO3q4RpCfJyV0Au9q8=; b=HovXJDDVcAPJ8wunhROH2tYz9QiTCjSO+cJDVfjvjcEnSNq8gX2zD/p3zfG6m6THHW na+b45s1rngx2L3bfpw+tuc47doUbk2eeYxyXLpT0Zqz8dIrhNFCkP4ecXORkoKERV0A kdfESpOXPXu1AkMq9KMwpHM/XQT8tKn5K7ANO1qiBgqV5JskZBmJYqgryydLc7ugHDWS 14OuSVYjKM9gCMw+O0K/oKsq+tqmTzFTdpbLKzhOFKwxp+nJinmKWEN5TEepFT9v9qIm ptK6UEM2DcFmd+k1Gj1LPEJ2ah2PnP42OD/PLeu900pMcyQBpdtGkDc6NSw857f4YhvS tAig== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=KbNmuFGJ5Kdw3e1umgze+jOGkBO3q4RpCfJyV0Au9q8=; b=jIrU64vv2JX2U7NHGdNT7LMIlJ3m0qyZFPtmTIFcTXIhIFUTp3C+eYUgx1Bg+PeKVL qytqPBwrWQVcgWeSSEdYi3QUoqWnbTZ+xg/Y4HKWsUoCfjmP1rbBWUJVw+/NyqNjOsv6 apmu/TVNU12M24t2QJcJ69UDC8ZQJ39fJUss+duS4Ri8S0hOzK8Ds/aqlYj9NTTSvkeB q9SpeTQfkskxTOyGuKiCiOExQXG3ffyZzzpBXrgbYL64sinU4NvMgGDXu9h27nRThclP oq6KQhFoypnwO2CHogWGcJcyd4+bwtJAn7Dcg80zykI1SbR9FMFHE1mHy9zSHJQNYHsT A4VQ== X-Gm-Message-State: AO0yUKUejjrfKJQDinvr/2PJMPzPX9gSbNqNCpUsSqiLP1eroThIMLG7 29HLo+CBjS5O09QL3r2RNd+7zmyC9ogq3B4UFdES6Z2pAACo61Ntnci2M/qWVClBnKayHu9uI57 Kql2pGUle8dckU0VrHxiXmz7W5CswPwlkyhpstnOjtNfABtEsDdEumzUD12aVZ/fhGQ== X-Google-Smtp-Source: AK7set+Ljynlsis1ZQ7rOWoCcfH4XpCT2KP0KgIi0HBg0I3YsYCSJubrSnvGxUuOZ9FT3m05nkAQUIzcbM9umA== X-Received: from mostafa.c.googlers.com ([fda3:e722:ac3:cc00:28:9cb1:c0a8:333c]) (user=smostafa job=sendgmr) by 2002:a05:600c:3b25:b0:3df:97b0:ba02 with SMTP id m37-20020a05600c3b2500b003df97b0ba02mr3190242wms.3.1677449239536; Sun, 26 Feb 2023 14:07:19 -0800 (PST) Date: Sun, 26 Feb 2023 22:06:47 +0000 In-Reply-To: <20230226220650.1480786-1-smostafa@google.com> Mime-Version: 1.0 References: <20230226220650.1480786-1-smostafa@google.com> X-Mailer: git-send-email 2.39.2.637.g21b0678d19-goog Message-ID: <20230226220650.1480786-9-smostafa@google.com> Subject: [RFC PATCH v2 08/11] hw/arm/smmuv3: Add CMDs related to stage-2 From: Mostafa Saleh To: qemu-devel@nongnu.org Cc: jean-philippe@linaro.org, eric.auger@redhat.com, peter.maydell@linaro.org, qemu-arm@nongnu.org, richard.henderson@linaro.org, Mostafa Saleh 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=2a00:1450:4864:20::34a; envelope-from=3F9j7YwgKCtwQKMQR8D8EMMEJC.AMKOCKS-BCTCJLMLELS.MPE@flex--smostafa.bounces.google.com; helo=mail-wm1-x34a.google.com X-Spam_score_int: -95 X-Spam_score: -9.6 X-Spam_bar: --------- X-Spam_report: (-9.6 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_MED=-0.001, 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, USER_IN_DEF_DKIM_WL=-7.5 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+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @google.com) X-ZM-MESSAGEID: 1677449263538100001 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" CMD_TLBI_S2_IPA: As S1+S2 is not enabled, for now this can be the same as CMD_TLBI_NH_VAA. CMD_TLBI_S12_VMALL: Added new function to invalidate TLB by VMID. For stage-1 only commands, add a check to to throw CERROR_ILL if used when stage-1 is not supported. Signed-off-by: Mostafa Saleh --- Changes in v2: - Add checks for stage-1 only commands - Rename smmuv3_s1_range_inval to smmuv3_range_inval --- hw/arm/smmu-common.c | 16 ++++++++++++ hw/arm/smmuv3.c | 47 +++++++++++++++++++++++++++++++----- hw/arm/trace-events | 4 ++- include/hw/arm/smmu-common.h | 1 + 4 files changed, 61 insertions(+), 7 deletions(-) diff --git a/hw/arm/smmu-common.c b/hw/arm/smmu-common.c index 3191a008c6..e4b477af10 100644 --- a/hw/arm/smmu-common.c +++ b/hw/arm/smmu-common.c @@ -135,6 +135,16 @@ static gboolean smmu_hash_remove_by_asid(gpointer key,= gpointer value, =20 return SMMU_IOTLB_ASID(*iotlb_key) =3D=3D asid; } + +static gboolean smmu_hash_remove_by_vmid(gpointer key, gpointer value, + gpointer user_data) +{ + uint16_t vmid =3D *(uint16_t *)user_data; + SMMUIOTLBKey *iotlb_key =3D (SMMUIOTLBKey *)key; + + return SMMU_IOTLB_VMID(*iotlb_key) =3D=3D vmid; +} + static gboolean smmu_hash_remove_by_asid_vmid_iova(gpointer key, gpointer = value, gpointer user_data) { @@ -187,6 +197,12 @@ void smmu_iotlb_inv_asid(SMMUState *s, uint16_t asid) g_hash_table_foreach_remove(s->iotlb, smmu_hash_remove_by_asid, &asid); } =20 +inline void smmu_iotlb_inv_vmid(SMMUState *s, uint16_t vmid) +{ + trace_smmu_iotlb_inv_vmid(vmid); + g_hash_table_foreach_remove(s->iotlb, smmu_hash_remove_by_vmid, &vmid); +} + /* VMSAv8-64 Translation */ =20 /** diff --git a/hw/arm/smmuv3.c b/hw/arm/smmuv3.c index f9c06723f9..8c76a48c8d 100644 --- a/hw/arm/smmuv3.c +++ b/hw/arm/smmuv3.c @@ -1034,7 +1034,7 @@ static void smmuv3_inv_notifiers_iova(SMMUState *s, i= nt asid, dma_addr_t iova, } } =20 -static void smmuv3_s1_range_inval(SMMUState *s, Cmd *cmd) +static void smmuv3_range_inval(SMMUState *s, Cmd *cmd) { dma_addr_t end, addr =3D CMD_ADDR(cmd); uint8_t type =3D CMD_TYPE(cmd); @@ -1059,7 +1059,7 @@ static void smmuv3_s1_range_inval(SMMUState *s, Cmd *= cmd) } =20 if (!tg) { - trace_smmuv3_s1_range_inval(vmid, asid, addr, tg, 1, ttl, leaf); + trace_smmuv3_range_inval(vmid, asid, addr, tg, 1, ttl, leaf); smmuv3_inv_notifiers_iova(s, asid, addr, tg, 1); smmu_iotlb_inv_iova(s, asid, vmid, addr, tg, 1, ttl); return; @@ -1077,7 +1077,7 @@ static void smmuv3_s1_range_inval(SMMUState *s, Cmd *= cmd) uint64_t mask =3D dma_aligned_pow2_mask(addr, end, 64); =20 num_pages =3D (mask + 1) >> granule; - trace_smmuv3_s1_range_inval(vmid, asid, addr, tg, num_pages, ttl, = leaf); + trace_smmuv3_range_inval(vmid, asid, addr, tg, num_pages, ttl, lea= f); smmuv3_inv_notifiers_iova(s, asid, addr, tg, num_pages); smmu_iotlb_inv_iova(s, asid, vmid, addr, tg, num_pages, ttl); addr +=3D mask + 1; @@ -1211,12 +1211,22 @@ static int smmuv3_cmdq_consume(SMMUv3State *s) { uint16_t asid =3D CMD_ASID(&cmd); =20 + if (!STAGE1_SUPPORTED(s)) { + cmd_error =3D SMMU_CERROR_ILL; + break; + } + trace_smmuv3_cmdq_tlbi_nh_asid(asid); smmu_inv_notifiers_all(&s->smmu_state); smmu_iotlb_inv_asid(bs, asid); break; } case SMMU_CMD_TLBI_NH_ALL: + if (!STAGE1_SUPPORTED(s)) { + cmd_error =3D SMMU_CERROR_ILL; + break; + } + QEMU_FALLTHROUGH; case SMMU_CMD_TLBI_NSNH_ALL: trace_smmuv3_cmdq_tlbi_nh(); smmu_inv_notifiers_all(&s->smmu_state); @@ -1224,7 +1234,34 @@ static int smmuv3_cmdq_consume(SMMUv3State *s) break; case SMMU_CMD_TLBI_NH_VAA: case SMMU_CMD_TLBI_NH_VA: - smmuv3_s1_range_inval(bs, &cmd); + if (!STAGE1_SUPPORTED(s)) { + cmd_error =3D SMMU_CERROR_ILL; + break; + } + smmuv3_range_inval(bs, &cmd); + break; + case SMMU_CMD_TLBI_S12_VMALL: + uint16_t vmid =3D CMD_VMID(&cmd); + + if (!STAGE2_SUPPORTED(s)) { + cmd_error =3D SMMU_CERROR_ILL; + break; + } + + trace_smmuv3_cmdq_tlbi_s12_vmid(vmid); + smmu_inv_notifiers_all(&s->smmu_state); + smmu_iotlb_inv_vmid(bs, vmid); + break; + case SMMU_CMD_TLBI_S2_IPA: + if (!STAGE2_SUPPORTED(s)) { + cmd_error =3D SMMU_CERROR_ILL; + break; + } + /* + * As currently only either s1 or s2 are supported + * we can reuse same function for s2. + */ + smmuv3_range_inval(bs, &cmd); break; case SMMU_CMD_TLBI_EL3_ALL: case SMMU_CMD_TLBI_EL3_VA: @@ -1232,8 +1269,6 @@ static int smmuv3_cmdq_consume(SMMUv3State *s) case SMMU_CMD_TLBI_EL2_ASID: case SMMU_CMD_TLBI_EL2_VA: case SMMU_CMD_TLBI_EL2_VAA: - case SMMU_CMD_TLBI_S12_VMALL: - case SMMU_CMD_TLBI_S2_IPA: case SMMU_CMD_ATC_INV: case SMMU_CMD_PRI_RESP: case SMMU_CMD_RESUME: diff --git a/hw/arm/trace-events b/hw/arm/trace-events index 705104e58b..f8fdf1ca9f 100644 --- a/hw/arm/trace-events +++ b/hw/arm/trace-events @@ -12,6 +12,7 @@ smmu_ptw_block_pte(int stage, int level, uint64_t baseadd= r, uint64_t pteaddr, ui smmu_get_pte(uint64_t baseaddr, int index, uint64_t pteaddr, uint64_t pte)= "baseaddr=3D0x%"PRIx64" index=3D0x%x, pteaddr=3D0x%"PRIx64", pte=3D0x%"PRI= x64 smmu_iotlb_inv_all(void) "IOTLB invalidate all" smmu_iotlb_inv_asid(uint16_t asid) "IOTLB invalidate asid=3D%d" +smmu_iotlb_inv_vmid(uint16_t vmid) "IOTLB invalidate vmid=3D%d" smmu_iotlb_inv_iova(uint16_t asid, uint64_t addr) "IOTLB invalidate asid= =3D%d addr=3D0x%"PRIx64 smmu_inv_notifiers_mr(const char *name) "iommu mr=3D%s" smmu_iotlb_lookup_hit(uint16_t asid, uint16_t vmid, uint64_t addr, uint32_= t hit, uint32_t miss, uint32_t p) "IOTLB cache HIT asid=3D%d vmid=3D%d addr= =3D0x%"PRIx64" hit=3D%d miss=3D%d hit rate=3D%d" @@ -45,9 +46,10 @@ smmuv3_cmdq_cfgi_ste_range(int start, int end) "start=3D= 0x%x - end=3D0x%x" smmuv3_cmdq_cfgi_cd(uint32_t sid) "sid=3D0x%x" smmuv3_config_cache_hit(uint32_t sid, uint32_t hits, uint32_t misses, uint= 32_t perc) "Config cache HIT for sid=3D0x%x (hits=3D%d, misses=3D%d, hit ra= te=3D%d)" smmuv3_config_cache_miss(uint32_t sid, uint32_t hits, uint32_t misses, uin= t32_t perc) "Config cache MISS for sid=3D0x%x (hits=3D%d, misses=3D%d, hit = rate=3D%d)" -smmuv3_s1_range_inval(int vmid, int asid, uint64_t addr, uint8_t tg, uint6= 4_t num_pages, uint8_t ttl, bool leaf) "vmid=3D%d asid=3D%d addr=3D0x%"PRIx= 64" tg=3D%d num_pages=3D0x%"PRIx64" ttl=3D%d leaf=3D%d" +smmuv3_range_inval(int vmid, int asid, uint64_t addr, uint8_t tg, uint64_t= num_pages, uint8_t ttl, bool leaf) "vmid=3D%d asid=3D%d addr=3D0x%"PRIx64"= tg=3D%d num_pages=3D0x%"PRIx64" ttl=3D%d leaf=3D%d" smmuv3_cmdq_tlbi_nh(void) "" smmuv3_cmdq_tlbi_nh_asid(uint16_t asid) "asid=3D%d" +smmuv3_cmdq_tlbi_s12_vmid(uint16_t vmid) "vmid=3D%d" smmuv3_config_cache_inv(uint32_t sid) "Config cache INV for sid=3D0x%x" smmuv3_notify_flag_add(const char *iommu) "ADD SMMUNotifier node for iommu= mr=3D%s" smmuv3_notify_flag_del(const char *iommu) "DEL SMMUNotifier node for iommu= mr=3D%s" diff --git a/include/hw/arm/smmu-common.h b/include/hw/arm/smmu-common.h index c415e8d853..d8b458379e 100644 --- a/include/hw/arm/smmu-common.h +++ b/include/hw/arm/smmu-common.h @@ -186,6 +186,7 @@ SMMUIOTLBKey smmu_get_iotlb_key(uint16_t asid, uint16_t= vmid, uint64_t iova, uint8_t tg, uint8_t level); void smmu_iotlb_inv_all(SMMUState *s); void smmu_iotlb_inv_asid(SMMUState *s, uint16_t asid); +void smmu_iotlb_inv_vmid(SMMUState *s, uint16_t vmid); void smmu_iotlb_inv_iova(SMMUState *s, int asid, int vmid, dma_addr_t iova, uint8_t tg, uint64_t num_pages, uint8_t ttl); =20 --=20 2.39.2.637.g21b0678d19-goog From nobody Sun May 12 06:21:36 2024 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=reject dis=none) header.from=google.com ARC-Seal: i=1; a=rsa-sha256; t=1677449345; cv=none; d=zohomail.com; s=zohoarc; b=MVpM68+MekhTsK3bbpVQu7S6Z9fo+fRri2VSeZ96dwMBmeQ6t+c45lvTK0ChtciClYBLBRnuR1WtmO8yyFoPpcCpSDZQ8jgbz1tVlw9NqqUV82p0vbUGWRuwY1RxO67hdFlrzPhlsFS3mgvIuOO2K7uBeHCKB4Yej5v+NtApwx4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1677449345; h=Content-Type: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=JlPd0DK9kbtSrRzcFmcepGFWM8AX5M3SBMBW2iYq3WM=; b=NGAMurM50lUBnFcT8xlqJu6kZnl142Yab1rdQYR8h+OMz3mkBJorST25zZRtjkvQ3f5ADv0knsKzXt5zs0+xHbsFlQrvExJfrc34bNk5q+jNPbDBed0wJZpQXHgE/AG2YGkc0bU9zSNIVHE823smTgPImW/u163l0MGINJiGad0= 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=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1677449345400398.3681601117935; Sun, 26 Feb 2023 14:09:05 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pWPB0-0002YZ-P5; Sun, 26 Feb 2023 17:07:26 -0500 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 <3Gdj7YwgKCt4SMOSTAFAGOOGLE.COMQEMU-DEVELNONGNU.ORG@flex--smostafa.bounces.google.com>) id 1pWPAz-0002Wa-7T for qemu-devel@nongnu.org; Sun, 26 Feb 2023 17:07:25 -0500 Received: from mail-wm1-x34a.google.com ([2a00:1450:4864:20::34a]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from <3Gdj7YwgKCt4SMOSTAFAGOOGLE.COMQEMU-DEVELNONGNU.ORG@flex--smostafa.bounces.google.com>) id 1pWPAx-0003wi-Ja for qemu-devel@nongnu.org; Sun, 26 Feb 2023 17:07:24 -0500 Received: by mail-wm1-x34a.google.com with SMTP id bi21-20020a05600c3d9500b003e836e354e0so2093520wmb.5 for ; Sun, 26 Feb 2023 14:07:22 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=JlPd0DK9kbtSrRzcFmcepGFWM8AX5M3SBMBW2iYq3WM=; b=DvRjjjPJkjrXk4AXCvm1125zelt8dSeJ5E9qjwdUqRHnk/zxMoAxP3wn5TdSIIs6NZ plzuznAQMjl0BZKIs6zrtC+9RDOv57cEE9pcDjEa2Dub5oVdgv0xmzNowTSflSE8356J gTXc1+4Y2SSrbRpSEqBv7wXLLAP/STz52VVdE1H9PZBwkEHbGy7Ofa5mOrNACBIf5P9v AVv6whbEup9Q5DoimHUSP5/cmmL6KjJq7GsY8pQ5hCNnMxWUX+I3qzpa5EtkDhE2iFhA dr0o4VdTpBZYP9q0Tl6NuDrRpYbexE4U6D8tWms5cRu9FJ7n1HUxICMuDOb08AIeRm80 otSw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=JlPd0DK9kbtSrRzcFmcepGFWM8AX5M3SBMBW2iYq3WM=; b=nElR2Qz6TTPzt7R1uw+k86DjCAfa2mLYhsf2ZTxZa0K2EpgM/gvtVH4ZkI/x/0fG76 sg+CmHYWpWN1JWZm7w9GUZ6UM0vP+DUmoMN/GKr7g0zcI5hfVIEqFE7xoKT4q+3QYsPk w9+/nCIHbOAEKWB10JIG1UuCwnKHzjbbXhaidtRYPaJqJ+u5967hIaL9lvl1si9vGPUQ Mgy8HguhvbvDI9JSr8Fum4OPFT+gOd2IUGT45c0sWu4QiIGxDJDOl9OltyNSQQtkbr6o iw1v43zR/xeMDUf9MvUsSUoiHPsmg8fmm0tqltNPglWhjUAe+z9/4c4hRGaaPzYzoRIG 2PLA== X-Gm-Message-State: AO0yUKVz/PtxCucmzZkCfbJ1nymlgeaH2ZOcu4I5miu6+M0hv/FemRJJ l+0qYIYC4QI2y2rpPcYnUu1RTMner8r9tfGC93uAiewSP5ta18PIk5ZqyrvEPITvoySsJOzLYEc 6SYtbs24SbqXaVtoWlSUySyEaOa+eHtrLRXk6BZejzXKaYti6TwCUfZn3vNOitlmbgg== X-Google-Smtp-Source: AK7set+7T1u2b5OEEZZVm3Jw/IL/8WEufDVTX7NLJClDEWnejXxm8DttQmcAb5iCnss7NYgH0A8TaAmDo9GC5w== X-Received: from mostafa.c.googlers.com ([fda3:e722:ac3:cc00:28:9cb1:c0a8:333c]) (user=smostafa job=sendgmr) by 2002:adf:fc51:0:b0:2c3:e6f6:7f37 with SMTP id e17-20020adffc51000000b002c3e6f67f37mr2416440wrs.5.1677449241757; Sun, 26 Feb 2023 14:07:21 -0800 (PST) Date: Sun, 26 Feb 2023 22:06:48 +0000 In-Reply-To: <20230226220650.1480786-1-smostafa@google.com> Mime-Version: 1.0 References: <20230226220650.1480786-1-smostafa@google.com> X-Mailer: git-send-email 2.39.2.637.g21b0678d19-goog Message-ID: <20230226220650.1480786-10-smostafa@google.com> Subject: [RFC PATCH v2 09/11] hw/arm/smmuv3: Add stage-2 support in iova notifier From: Mostafa Saleh To: qemu-devel@nongnu.org Cc: jean-philippe@linaro.org, eric.auger@redhat.com, peter.maydell@linaro.org, qemu-arm@nongnu.org, richard.henderson@linaro.org, Mostafa Saleh 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=2a00:1450:4864:20::34a; envelope-from=3Gdj7YwgKCt4SMOSTAFAGOOGLE.COMQEMU-DEVELNONGNU.ORG@flex--smostafa.bounces.google.com; helo=mail-wm1-x34a.google.com X-Spam_score_int: -95 X-Spam_score: -9.6 X-Spam_bar: --------- X-Spam_report: (-9.6 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_MED=-0.001, 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, USER_IN_DEF_DKIM_WL=-7.5 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+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @google.com) X-ZM-MESSAGEID: 1677449347533100003 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" In smmuv3_notify_iova, read the granule based on translation stage and use VMID if valid value is sent. Signed-off-by: Mostafa Saleh Reviewed-by: Eric Auger --- hw/arm/smmuv3.c | 39 ++++++++++++++++++++++++++------------- hw/arm/trace-events | 2 +- 2 files changed, 27 insertions(+), 14 deletions(-) diff --git a/hw/arm/smmuv3.c b/hw/arm/smmuv3.c index 8c76a48c8d..7297f6adc1 100644 --- a/hw/arm/smmuv3.c +++ b/hw/arm/smmuv3.c @@ -971,18 +971,21 @@ epilogue: * @mr: IOMMU mr region handle * @n: notifier to be called * @asid: address space ID or negative value if we don't care + * @vmid: virtual machine ID or negative value if we don't care * @iova: iova * @tg: translation granule (if communicated through range invalidation) * @num_pages: number of @granule sized pages (if tg !=3D 0), otherwise 1 */ static void smmuv3_notify_iova(IOMMUMemoryRegion *mr, IOMMUNotifier *n, - int asid, dma_addr_t iova, - uint8_t tg, uint64_t num_pages) + int asid, int vmid, + dma_addr_t iova, uint8_t tg, + uint64_t num_pages) { SMMUDevice *sdev =3D container_of(mr, SMMUDevice, iommu); IOMMUTLBEvent event; uint8_t granule; + SMMUv3State *s =3D sdev->smmu; =20 if (!tg) { SMMUEventInfo event =3D {.inval_ste_allowed =3D true}; @@ -997,11 +1000,20 @@ static void smmuv3_notify_iova(IOMMUMemoryRegion *mr, return; } =20 - tt =3D select_tt(cfg, iova); - if (!tt) { + if (vmid >=3D 0 && cfg->s2cfg.vmid !=3D vmid) { return; } - granule =3D tt->granule_sz; + + if (STAGE1_SUPPORTED(s)) { + tt =3D select_tt(cfg, iova); + if (!tt) { + return; + } + granule =3D tt->granule_sz; + } else { + granule =3D cfg->s2cfg.granule_sz; + } + } else { granule =3D tg * 2 + 10; } @@ -1015,9 +1027,10 @@ static void smmuv3_notify_iova(IOMMUMemoryRegion *mr, memory_region_notify_iommu_one(n, &event); } =20 -/* invalidate an asid/iova range tuple in all mr's */ -static void smmuv3_inv_notifiers_iova(SMMUState *s, int asid, dma_addr_t i= ova, - uint8_t tg, uint64_t num_pages) +/* invalidate an asid/vmid/iova range tuple in all mr's */ +static void smmuv3_inv_notifiers_iova(SMMUState *s, int asid, int vmid, + dma_addr_t iova, uint8_t tg, + uint64_t num_pages) { SMMUDevice *sdev; =20 @@ -1025,11 +1038,11 @@ static void smmuv3_inv_notifiers_iova(SMMUState *s,= int asid, dma_addr_t iova, IOMMUMemoryRegion *mr =3D &sdev->iommu; IOMMUNotifier *n; =20 - trace_smmuv3_inv_notifiers_iova(mr->parent_obj.name, asid, iova, - tg, num_pages); + trace_smmuv3_inv_notifiers_iova(mr->parent_obj.name, asid, vmid, + iova, tg, num_pages); =20 IOMMU_NOTIFIER_FOREACH(n, mr) { - smmuv3_notify_iova(mr, n, asid, iova, tg, num_pages); + smmuv3_notify_iova(mr, n, asid, vmid, iova, tg, num_pages); } } } @@ -1060,7 +1073,7 @@ static void smmuv3_range_inval(SMMUState *s, Cmd *cmd) =20 if (!tg) { trace_smmuv3_range_inval(vmid, asid, addr, tg, 1, ttl, leaf); - smmuv3_inv_notifiers_iova(s, asid, addr, tg, 1); + smmuv3_inv_notifiers_iova(s, asid, vmid, addr, tg, 1); smmu_iotlb_inv_iova(s, asid, vmid, addr, tg, 1, ttl); return; } @@ -1078,7 +1091,7 @@ static void smmuv3_range_inval(SMMUState *s, Cmd *cmd) =20 num_pages =3D (mask + 1) >> granule; trace_smmuv3_range_inval(vmid, asid, addr, tg, num_pages, ttl, lea= f); - smmuv3_inv_notifiers_iova(s, asid, addr, tg, num_pages); + smmuv3_inv_notifiers_iova(s, asid, vmid, addr, tg, num_pages); smmu_iotlb_inv_iova(s, asid, vmid, addr, tg, num_pages, ttl); addr +=3D mask + 1; } diff --git a/hw/arm/trace-events b/hw/arm/trace-events index f8fdf1ca9f..cdc1ea06a8 100644 --- a/hw/arm/trace-events +++ b/hw/arm/trace-events @@ -53,5 +53,5 @@ smmuv3_cmdq_tlbi_s12_vmid(uint16_t vmid) "vmid=3D%d" smmuv3_config_cache_inv(uint32_t sid) "Config cache INV for sid=3D0x%x" smmuv3_notify_flag_add(const char *iommu) "ADD SMMUNotifier node for iommu= mr=3D%s" smmuv3_notify_flag_del(const char *iommu) "DEL SMMUNotifier node for iommu= mr=3D%s" -smmuv3_inv_notifiers_iova(const char *name, uint16_t asid, uint64_t iova, = uint8_t tg, uint64_t num_pages) "iommu mr=3D%s asid=3D%d iova=3D0x%"PRIx64"= tg=3D%d num_pages=3D0x%"PRIx64 +smmuv3_inv_notifiers_iova(const char *name, uint16_t asid, uint16_t vmid, = uint64_t iova, uint8_t tg, uint64_t num_pages) "iommu mr=3D%s asid=3D%d vmi= d=3D%d iova=3D0x%"PRIx64" tg=3D%d num_pages=3D0x%"PRIx64 =20 --=20 2.39.2.637.g21b0678d19-goog From nobody Sun May 12 06:21:36 2024 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=reject dis=none) header.from=google.com ARC-Seal: i=1; a=rsa-sha256; t=1677449329; cv=none; d=zohomail.com; s=zohoarc; b=f5PX4c2aY59tAEHyiVaHDDjSX0R2AP8flDafBOCyvrOA7hWrXf9B+Sjvsp5vbXmLXN3tAmSPOwA4XJ7SHRtZzE67TDhP0+WtbVMrrP+LBU5g4x35ADXXEyuyRF2FIDNp2sKxQsnxqmsuLyNJWP54ki4vlY8GsxxmP+WjETJslvc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1677449329; h=Content-Type: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=C2ip3b5EiKYFYCP04yKL6DAvOdXYau4SFVNkWV7zyvk=; b=MutOgq/mS6T1QFCdAtxNnfFSLRnuPJOgFIq/q5U2i3I/tTADt5Dns2ozdgi9p5LaXs0Ysr/4SOvb0ykSqGMv71yqn+dqxqdA0aXmm8L8p7UgiAUNyOo6IVZniD4cTAf+4bp0Rnuo8y/EwV1OpySac3ZyNmypd6xTRq5GmlL6lSo= 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=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1677449329867119.40949822867299; Sun, 26 Feb 2023 14:08:49 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pWPB2-0002ZC-NQ; Sun, 26 Feb 2023 17:07:28 -0500 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 <3G9j7YwgKCuAUOQUVCHCIQQING.EQOSGOW-FGXGNPQPIPW.QTI@flex--smostafa.bounces.google.com>) id 1pWPB1-0002Z4-LS for qemu-devel@nongnu.org; Sun, 26 Feb 2023 17:07:27 -0500 Received: from mail-wm1-x349.google.com ([2a00:1450:4864:20::349]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from <3G9j7YwgKCuAUOQUVCHCIQQING.EQOSGOW-FGXGNPQPIPW.QTI@flex--smostafa.bounces.google.com>) id 1pWPAz-0003x3-R3 for qemu-devel@nongnu.org; Sun, 26 Feb 2023 17:07:27 -0500 Received: by mail-wm1-x349.google.com with SMTP id e17-20020a05600c219100b003e21fa60ec1so2105744wme.2 for ; Sun, 26 Feb 2023 14:07:24 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=C2ip3b5EiKYFYCP04yKL6DAvOdXYau4SFVNkWV7zyvk=; b=Wg5OgIM5RWbI8inVSWtUeZE8DSaUh8LCFbgSieu+jkcr8TNpqDPsXOE5UQbhLt++we aWlS26ws3eIJHc69lisNy5iOE8N59yfz2rqSsmgUeohqngRWy0s4nHYRxf6RfOUslFRr cIy5UvqZ4TGb63SrRa4dJpqs8K9sAYtSFt1KmNzwGw33yfRKBzfcXqEPoYS1OYap0fSQ Xac2HIZyYxqTot5HLvRHypsMReXmpRF0wHxmYOd1+JcRp77klh88kr2tDGkBh0YvrWk8 AG67KkQ5ADQZVHsYzg4T0WVplN3visVERkrIK1vQRxMkYsz6AYNGtBpYh2mpUUvyrq91 CqHA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=C2ip3b5EiKYFYCP04yKL6DAvOdXYau4SFVNkWV7zyvk=; b=Ax+hTXY16/QUZQdnjho97qbRoVcnqL/S+d14arwpKeDlXaC3eZ5KJjsWVcPK6v/Ad+ onGzTZEwMWHR5xYtnFjbnh+aKDmNDw7NIVbjHNWOWdLBnEPscmQAt+hgernUnWHyYt1j 8ASy/Qn8AUSOsKOKf81kK11aKZOygF+fqHjfz0FYtGuSgBHD61ragKUM0JMtXI2KEJwq ow1DVulNiKwciFRw1gTQnzlQvCjYfnl4XNiyU1bxpY9PBTdDeE/l1DdKn1QvU1dXsXtx mw3CqeRmT2KqF1p4LNGHMNVMoFEng6Oly+CCFLjnP5nY8Mf9xxTXtvha7OOrhuwUM9d+ LZfg== X-Gm-Message-State: AO0yUKX8HTTCX1THb1WEcoy/bkf1JlkiJsGOnE3RmEaC5U9WMEGe8PTX K+rMNwCJFteGGBBxOYCuoYNpSCq8Deph+E9E2P8KOCMiguszSMP75FesjZVMzziD8vYo+EY535p V7yKTw4Mg3IAhFJwwl0UXnS/8jt6doAYFnCp6sqO/sqMQxbVeIexio5YRA7EphYBrLw== X-Google-Smtp-Source: AK7set9HKoF19uM9h/SrAegTuAYOGaFGT7Bsu/38V7FiOW5LwWJwZVRsGAq7Tr1A7JfroPNhn+qwojm5BQX2aQ== X-Received: from mostafa.c.googlers.com ([fda3:e722:ac3:cc00:28:9cb1:c0a8:333c]) (user=smostafa job=sendgmr) by 2002:a05:600c:1d19:b0:3e2:db9:6fa9 with SMTP id l25-20020a05600c1d1900b003e20db96fa9mr1863374wms.4.1677449243874; Sun, 26 Feb 2023 14:07:23 -0800 (PST) Date: Sun, 26 Feb 2023 22:06:49 +0000 In-Reply-To: <20230226220650.1480786-1-smostafa@google.com> Mime-Version: 1.0 References: <20230226220650.1480786-1-smostafa@google.com> X-Mailer: git-send-email 2.39.2.637.g21b0678d19-goog Message-ID: <20230226220650.1480786-11-smostafa@google.com> Subject: [RFC PATCH v2 10/11] hw/arm/smmuv3: Populate OAS based on CPU PARANGE From: Mostafa Saleh To: qemu-devel@nongnu.org Cc: jean-philippe@linaro.org, eric.auger@redhat.com, peter.maydell@linaro.org, qemu-arm@nongnu.org, richard.henderson@linaro.org, Mostafa Saleh 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=2a00:1450:4864:20::349; envelope-from=3G9j7YwgKCuAUOQUVCHCIQQING.EQOSGOW-FGXGNPQPIPW.QTI@flex--smostafa.bounces.google.com; helo=mail-wm1-x349.google.com X-Spam_score_int: -95 X-Spam_score: -9.6 X-Spam_bar: --------- X-Spam_report: (-9.6 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_MED=-0.001, 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, USER_IN_DEF_DKIM_WL=-7.5 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-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @google.com) X-ZM-MESSAGEID: 1677449331622100003 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" OAS used to be hardcoded to 44 bits, however according to SMMU manual 6.3.6 SMMU_IDR5, OAS must match the system physical address size, so we read it from CPU PARANGE. Remove PA_MAX and pa_range as they were not used. Add SMMUv3State as an argument to decode_cd, so it can read the SMMU OAS. As CPU can use PARANGE with 52 bits, add 52 bits check to oas2bits, and cap OAS to 48 bits for stage-1 and stage-2 if granule is not 64KB as specified for SMMUv3.1 and later. Signed-off-by: Mostafa Saleh --- hw/arm/smmu-common.c | 13 +++++++++---- hw/arm/smmuv3-internal.h | 15 ++------------- hw/arm/smmuv3.c | 41 ++++++++++++++++++++++++++++++++++------ 3 files changed, 46 insertions(+), 23 deletions(-) diff --git a/hw/arm/smmu-common.c b/hw/arm/smmu-common.c index e4b477af10..3a2b06fd7f 100644 --- a/hw/arm/smmu-common.c +++ b/hw/arm/smmu-common.c @@ -307,7 +307,7 @@ static int smmu_ptw_64_s1(SMMUTransCfg *cfg, dma_addr_t baseaddr, indexmask; int stage =3D cfg->stage; SMMUTransTableInfo *tt =3D select_tt(cfg, iova); - uint8_t level, granule_sz, inputsize, stride; + uint8_t level, granule_sz, inputsize, stride, oas; =20 if (!tt || tt->disabled) { info->type =3D SMMU_PTW_ERR_TRANSLATION; @@ -319,7 +319,12 @@ static int smmu_ptw_64_s1(SMMUTransCfg *cfg, inputsize =3D 64 - tt->tsz; level =3D 4 - (inputsize - 4) / stride; indexmask =3D SMMU_IDXMSK(inputsize, stride, level); - baseaddr =3D extract64(tt->ttb, 0, 48); + oas =3D cfg->oas; + if (tt->granule_sz !=3D 16) { + oas =3D MIN(oas, 48); + } + + baseaddr =3D extract64(tt->ttb, 0, oas); baseaddr &=3D ~indexmask; =20 while (level < SMMU_LEVELS) { @@ -416,8 +421,8 @@ static int smmu_ptw_64_s2(SMMUTransCfg *cfg, * Get the ttb from concatenated structure. * The offset is the idx * size of each ttb(number of ptes * (sizeof(p= te)) */ - uint64_t baseaddr =3D extract64(cfg->s2cfg.vttb, 0, 48) + (1 << stride= ) * - idx * sizeof(uint64_t); + uint64_t baseaddr =3D extract64(cfg->s2cfg.vttb, 0, cfg->s2cfg.oas) + + (1 << stride) * idx * sizeof(uint64_t); dma_addr_t indexmask =3D SMMU_IDXMSK(inputsize, stride, level); =20 baseaddr &=3D ~indexmask; diff --git a/hw/arm/smmuv3-internal.h b/hw/arm/smmuv3-internal.h index 3388e1a5f8..25ae12fb5c 100644 --- a/hw/arm/smmuv3-internal.h +++ b/hw/arm/smmuv3-internal.h @@ -564,23 +564,12 @@ static inline int oas2bits(int oas_field) return 44; case 5: return 48; + case 6: + return 52; } return -1; } =20 -static inline int pa_range(STE *ste) -{ - int oas_field =3D MIN(STE_S2PS(ste), SMMU_IDR5_OAS); - - if (!STE_S2AA64(ste)) { - return 40; - } - - return oas2bits(oas_field); -} - -#define MAX_PA(ste) ((1 << pa_range(ste)) - 1) - /* CD fields */ =20 #define CD_VALID(x) extract32((x)->word[0], 31, 1) diff --git a/hw/arm/smmuv3.c b/hw/arm/smmuv3.c index 7297f6adc1..bc4ec202f4 100644 --- a/hw/arm/smmuv3.c +++ b/hw/arm/smmuv3.c @@ -238,6 +238,13 @@ void smmuv3_record_event(SMMUv3State *s, SMMUEventInfo= *info) =20 static void smmuv3_init_regs(SMMUv3State *s) { + /* + * According to 6.3.6 SMMU_IDR5, OAS must match the system physical ad= dress + * size. + */ + ARMCPU *armcpu =3D ARM_CPU(qemu_get_cpu(0)); + uint8_t oas =3D FIELD_EX64(armcpu->isar.id_aa64mmfr0, ID_AA64MMFR0, PA= RANGE); + /** * IDR0: stage1 only, AArch64 only, coherent access, 16b ASID, * multi-level stream table @@ -265,7 +272,7 @@ static void smmuv3_init_regs(SMMUv3State *s) s->idr[5] =3D FIELD_DP32(s->idr[5], IDR5, GRAN4K, 1); s->idr[5] =3D FIELD_DP32(s->idr[5], IDR5, GRAN16K, 1); s->idr[5] =3D FIELD_DP32(s->idr[5], IDR5, GRAN64K, 1); - s->idr[5] =3D FIELD_DP32(s->idr[5], IDR5, OAS, SMMU_IDR5_OAS); /* 44 b= its */ + s->idr[5] =3D FIELD_DP32(s->idr[5], IDR5, OAS, oas); =20 s->cmdq.base =3D deposit64(s->cmdq.base, 0, 5, SMMU_CMDQS); s->cmdq.prod =3D 0; @@ -374,6 +381,7 @@ static int decode_ste(SMMUv3State *s, SMMUTransCfg *cfg, STE *ste, SMMUEventInfo *event) { uint32_t config; + uint8_t oas =3D FIELD_EX32(s->idr[5], IDR5, OAS); =20 if (!STE_VALID(ste)) { if (!event->inval_ste_allowed) { @@ -450,7 +458,16 @@ static int decode_ste(SMMUv3State *s, SMMUTransCfg *cf= g, } =20 =20 - cfg->s2cfg.oas =3D oas2bits(MIN(STE_S2PS(ste), SMMU_IDR5_OAS)); + cfg->s2cfg.oas =3D oas2bits(MIN(STE_S2PS(ste), oas)); + /* + * For SMMUv3.1 and later, when OAS =3D=3D IAS =3D=3D 52, the stag= e 2 input + * range is further limited to 48 bits unless STE.S2TG indicates a + * 64KB granule. + */ + if (cfg->s2cfg.granule_sz !=3D 16) { + cfg->s2cfg.oas =3D MIN(cfg->s2cfg.oas, 48); + } + /* * It is ILLEGAL for the address in S2TTB to be outside the range * described by the effective S2PS value. @@ -607,10 +624,12 @@ static int smmu_find_ste(SMMUv3State *s, uint32_t sid= , STE *ste, return 0; } =20 -static int decode_cd(SMMUTransCfg *cfg, CD *cd, SMMUEventInfo *event) +static int decode_cd(SMMUv3State *s, SMMUTransCfg *cfg, CD *cd, + SMMUEventInfo *event) { int ret =3D -EINVAL; int i; + uint8_t oas =3D FIELD_EX32(s->idr[5], IDR5, OAS); =20 if (!CD_VALID(cd) || !CD_AARCH64(cd)) { goto bad_cd; @@ -630,7 +649,8 @@ static int decode_cd(SMMUTransCfg *cfg, CD *cd, SMMUEve= ntInfo *event) cfg->stage =3D 1; =20 cfg->oas =3D oas2bits(CD_IPS(cd)); - cfg->oas =3D MIN(oas2bits(SMMU_IDR5_OAS), cfg->oas); + cfg->oas =3D MIN(oas2bits(oas), cfg->oas); + cfg->tbi =3D CD_TBI(cd); cfg->asid =3D CD_ASID(cd); =20 @@ -658,9 +678,18 @@ static int decode_cd(SMMUTransCfg *cfg, CD *cd, SMMUEv= entInfo *event) goto bad_cd; } =20 + /* + * An address greater than 48 bits in size can only be output from= a + * TTD when, in SMMUv3.1 and later, the effective IPS is 52 and a = 64KB + * granule is in use for that translation table + */ + if (tt->granule_sz !=3D 16) { + oas =3D MIN(cfg->oas, 48); + } + tt->tsz =3D tsz; tt->ttb =3D CD_TTB(cd, i); - if (tt->ttb & ~(MAKE_64BIT_MASK(0, cfg->oas))) { + if (tt->ttb & ~(MAKE_64BIT_MASK(0, oas))) { goto bad_cd; } tt->had =3D CD_HAD(cd, i); @@ -719,7 +748,7 @@ static int smmuv3_decode_config(IOMMUMemoryRegion *mr, = SMMUTransCfg *cfg, return ret; } =20 - return decode_cd(cfg, &cd, event); + return decode_cd(s, cfg, &cd, event); } =20 /** --=20 2.39.2.637.g21b0678d19-goog From nobody Sun May 12 06:21:36 2024 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=reject dis=none) header.from=google.com ARC-Seal: i=1; a=rsa-sha256; t=1677449315; cv=none; d=zohomail.com; s=zohoarc; b=BCGB9ykiI2XKcJKLmYGeM+26xXo9ioS9Jz3CFHxd4jB4wJMfTAPvd+24tNqQifdHYHqsRF6ikKtceok4whMeZIj1TS1sJHu6QWbID2rTyMQYuss2/6uYAOIm/NPe0Ez7IXP0K/jeDLAfExpUPoJc9CK3dphHptypfsgPD8ksUcA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1677449315; h=Content-Type: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=7JsPmexuAA9KVUzOd9TgH6d0EGckRDRiNS9iokJg500=; b=WhiemSepo5beZBz4z5b34NhtjSe89K6RESlP+2ApnOTy6ECxLeqHsaLUlRrLrnPR3HubASpvsGfGfv8azQOwd0RFfq2BoFhLMH+j7KEYz+8lA7uTynaGoijonzQVWxBjjaKi8dN2YWq5ad6qfCOBhuxqGzz47uG+oHsztxPFv+s= 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=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1677449315719660.8478677462857; Sun, 26 Feb 2023 14:08:35 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pWPB4-0002aE-Dy; Sun, 26 Feb 2023 17:07:30 -0500 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 <3Htj7YwgKCuMXRTXYFKFLTTLQJ.HTRVJRZ-IJaJQSTSLSZ.TWL@flex--smostafa.bounces.google.com>) id 1pWPB3-0002ZS-9R for qemu-devel@nongnu.org; Sun, 26 Feb 2023 17:07:29 -0500 Received: from mail-yw1-x114a.google.com ([2607:f8b0:4864:20::114a]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from <3Htj7YwgKCuMXRTXYFKFLTTLQJ.HTRVJRZ-IJaJQSTSLSZ.TWL@flex--smostafa.bounces.google.com>) id 1pWPB1-0003xP-LW for qemu-devel@nongnu.org; Sun, 26 Feb 2023 17:07:29 -0500 Received: by mail-yw1-x114a.google.com with SMTP id 00721157ae682-536cad819c7so101140687b3.6 for ; Sun, 26 Feb 2023 14:07:27 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=7JsPmexuAA9KVUzOd9TgH6d0EGckRDRiNS9iokJg500=; b=Zwp7YavjE/frjrlSWGTt0I6RZT2O85YDZka1L0zDcaj0r72NDFZ2MOsKu16ESbrl85 jQRx07Fjq2eFMXvmbJQYEtgy9zxkiHt88hxQTLBRXtXugCGSWKmPgxUs0+2ctVYw/lP/ nzv/zS9ILl3WNNc5rzkbabgfRA0TZ5wYUpMbtSrTUfzE87Tsj5AjZny1nQ2Iq5VfWvwL YAI4KMmpNtILsyoHkxiW+gkWI2uSkVkuTJ+9exbpolIVgAnxqeXZoUqqM9S/jM2iK+T4 jvd3OY7m37PqNCUtNdDCaWDS9GKHAfG//7P8vM+dWog9istZLUEXDhqVq5h8XWXPLbya opyw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=7JsPmexuAA9KVUzOd9TgH6d0EGckRDRiNS9iokJg500=; b=DxeJRSIyXw80DE/fplqmtKECYi1GdiSdgdVulnZrtmafUixV63iNdZg63n56k0J4aN Bp+bcU2S/NU2fqLPBinRpspZxZkktSOrU1suAz4Hn/S8nX/4rKh1QUrWzEqe2DGdQAF8 FwFJuDhtmsor7hcnfH5UTugM68OS2noOmFH5dSh9+sLz9QF1VbECSUkbxNXpB+gvXMp2 0M8YPwtKMonHAOc98yhgQYQoTGgiIf9hBgkIUnmldWHJNV9eqoI3B3q7yaSiOyISsX+Z w81FJKthjM3dG0q9dl4TleqF6NbidoUby7r3j2in5whLEmgauUoVucyXI9QAtLmJaA6A rI6A== X-Gm-Message-State: AO0yUKVBV9JCpe6g3iXbJmVI8Qv0rZBQblwuTUezc2aEnWVc9IRTW+nf dUydzFEzO74eNi2QdgIoURNQbSembmqAecxOB3ebkpwcQFCdzEzCCMEe2G8s9GbmR3gluWhALRD h+cqb0C8NNeKNMtZDCS1g/o1Cd1n4YKp+nQqQOET2iCbWYFXzQfzelD1V6zA7KTJxnQ== X-Google-Smtp-Source: AK7set9vQazgrpdszKTNFi48w5hfqs8/66ZjxcMYRNT45IMJqAegqRintip95fyf54Mn3RG1l3z0jGgzn6rJGQ== X-Received: from mostafa.c.googlers.com ([fda3:e722:ac3:cc00:28:9cb1:c0a8:333c]) (user=smostafa job=sendgmr) by 2002:a05:6902:101:b0:886:7517:31a5 with SMTP id o1-20020a056902010100b00886751731a5mr1011117ybh.404.1677449246099; Sun, 26 Feb 2023 14:07:26 -0800 (PST) Date: Sun, 26 Feb 2023 22:06:50 +0000 In-Reply-To: <20230226220650.1480786-1-smostafa@google.com> Mime-Version: 1.0 References: <20230226220650.1480786-1-smostafa@google.com> X-Mailer: git-send-email 2.39.2.637.g21b0678d19-goog Message-ID: <20230226220650.1480786-12-smostafa@google.com> Subject: [RFC PATCH v2 11/11] hw/arm/smmuv3: Add knob to choose translation stage and enable stage-2 From: Mostafa Saleh To: qemu-devel@nongnu.org Cc: jean-philippe@linaro.org, eric.auger@redhat.com, peter.maydell@linaro.org, qemu-arm@nongnu.org, richard.henderson@linaro.org, Mostafa Saleh 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::114a; envelope-from=3Htj7YwgKCuMXRTXYFKFLTTLQJ.HTRVJRZ-IJaJQSTSLSZ.TWL@flex--smostafa.bounces.google.com; helo=mail-yw1-x114a.google.com X-Spam_score_int: -95 X-Spam_score: -9.6 X-Spam_bar: --------- X-Spam_report: (-9.6 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_MED=-0.001, 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, USER_IN_DEF_DKIM_WL=-7.5 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+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @google.com) X-ZM-MESSAGEID: 1677449317442100012 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" As everything is in place, we can use a new system property to advertise which stage is supported and remove bad_ste from STE stage2 config. The property added arm-smmuv3.stage can have 3 values: - "1": Stage-1 only is advertised. - "2": Stage-2 only is advertised. - "all": Stage-1 + Stage-2 are supported, which is not implemented in this patch series. If not passed or an unsupported value is passed, it will default to stage-1. Advertise VMID16. Don't try to decode CD, if stage-2 is configured. Signed-off-by: Mostafa Saleh --- Changes in v2: - Squash knob patch with stage-2 enable patch. - Don't try to decode CD, if stage-2 is configured. --- hw/arm/smmuv3.c | 34 +++++++++++++++++++++++++--------- include/hw/arm/smmuv3.h | 1 + 2 files changed, 26 insertions(+), 9 deletions(-) diff --git a/hw/arm/smmuv3.c b/hw/arm/smmuv3.c index bc4ec202f4..ebffc7e5f5 100644 --- a/hw/arm/smmuv3.c +++ b/hw/arm/smmuv3.c @@ -21,6 +21,7 @@ #include "hw/irq.h" #include "hw/sysbus.h" #include "migration/vmstate.h" +#include "hw/qdev-properties.h" #include "hw/qdev-core.h" #include "hw/pci/pci.h" #include "cpu.h" @@ -245,14 +246,20 @@ static void smmuv3_init_regs(SMMUv3State *s) ARMCPU *armcpu =3D ARM_CPU(qemu_get_cpu(0)); uint8_t oas =3D FIELD_EX64(armcpu->isar.id_aa64mmfr0, ID_AA64MMFR0, PA= RANGE); =20 - /** - * IDR0: stage1 only, AArch64 only, coherent access, 16b ASID, - * multi-level stream table + /* + * Based on sys property, the stages supported in smmu will be adverti= sed. + * At the moment "all" is not supported and default to stage-1. */ - s->idr[0] =3D FIELD_DP32(s->idr[0], IDR0, S1P, 1); /* stage 1 supporte= d */ + if (s->stage && !strcmp("2", s->stage)) { + s->idr[0] =3D FIELD_DP32(s->idr[0], IDR0, S2P, 1); + } else { + s->idr[0] =3D FIELD_DP32(s->idr[0], IDR0, S1P, 1); + } + s->idr[0] =3D FIELD_DP32(s->idr[0], IDR0, TTF, 2); /* AArch64 PTW only= */ s->idr[0] =3D FIELD_DP32(s->idr[0], IDR0, COHACC, 1); /* IO coherent */ s->idr[0] =3D FIELD_DP32(s->idr[0], IDR0, ASID16, 1); /* 16-bit ASID */ + s->idr[0] =3D FIELD_DP32(s->idr[0], IDR0, VMID16, 1); /* 16-bit VMID */ s->idr[0] =3D FIELD_DP32(s->idr[0], IDR0, TTENDIAN, 2); /* little endi= an */ s->idr[0] =3D FIELD_DP32(s->idr[0], IDR0, STALL_MODEL, 1); /* No stall= */ /* terminated transaction will always be aborted/error returned */ @@ -508,10 +515,6 @@ static int decode_ste(SMMUv3State *s, SMMUTransCfg *cf= g, qemu_log_mask(LOG_UNIMP, "SMMUv3 Stall not implemented!\n"); goto bad_ste; } - - /* This is still here as stage 2 has not been fully enabled yet. */ - qemu_log_mask(LOG_UNIMP, "SMMUv3 does not support stage 2 yet\n"); - goto bad_ste; } =20 if (STE_S1CDMAX(ste) !=3D 0) { @@ -739,7 +742,7 @@ static int smmuv3_decode_config(IOMMUMemoryRegion *mr, = SMMUTransCfg *cfg, return ret; } =20 - if (cfg->aborted || cfg->bypassed) { + if (cfg->aborted || cfg->bypassed || (cfg->stage =3D=3D 2)) { return 0; } =20 @@ -1801,6 +1804,18 @@ static const VMStateDescription vmstate_smmuv3 =3D { } }; =20 +static Property smmuv3_properties[] =3D { + /* + * Stages of translation advertised. + * "1": Stage 1 + * "2": Stage 2 + * "all": Stage 1 + Stage 2 + * Defaults to stage 1 + */ + DEFINE_PROP_STRING("stage", SMMUv3State, stage), + DEFINE_PROP_END_OF_LIST() +}; + static void smmuv3_instance_init(Object *obj) { /* Nothing much to do here as of now */ @@ -1817,6 +1832,7 @@ static void smmuv3_class_init(ObjectClass *klass, voi= d *data) &c->parent_phases); c->parent_realize =3D dc->realize; dc->realize =3D smmu_realize; + device_class_set_props(dc, smmuv3_properties); } =20 static int smmuv3_notify_flag_changed(IOMMUMemoryRegion *iommu, diff --git a/include/hw/arm/smmuv3.h b/include/hw/arm/smmuv3.h index 6031d7d325..d183a62766 100644 --- a/include/hw/arm/smmuv3.h +++ b/include/hw/arm/smmuv3.h @@ -62,6 +62,7 @@ struct SMMUv3State { =20 qemu_irq irq[4]; QemuMutex mutex; + char *stage; }; =20 typedef enum { --=20 2.39.2.637.g21b0678d19-goog