From nobody Mon Sep 28 02:16:13 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=gmail.com); dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=2; a=rsa-sha256; t=1785119310; cv=pass; d=zohomail.com; s=zohoarc; b=UPoFVq6b9Gm9NUTKDTS52K4sMb2BfE2SPzUYrUaR+CHrhTOfItJFtDc+O6Y130emifg+yeoqnRh6gxlG+SmsaAxh+ajeqUavl2EZzanzdx/Q3YKjyljNIfyJH2+ogPeHpwz8cTXgpx7dxF2TybyWyaXxETQYD/rEpxFAGPtec+c= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1785119310; h=Content-Type:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=lMi35gDihCwI1P51XMeGM8P/9jzYQBtwW4fd6qN5iX0=; b=ERD3Nx6BhjSi6DLrv9H33qxFacyn+mr3oWxyxFq1Yva0tCeAzqsmk5u/bRgB3qzVPcnAJS7wPa6AWYWhvV5MIFIP9yZlG1Z1IdhH8zm3ECnnJUkQ0dkVyIpJxCC7Gg5R1jK8axu3lbWekc7dQtTDEEVyO5Skub02nojkc2Y153w= ARC-Authentication-Results: i=2; 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; arc=pass (i=1 dmarc=pass fromdomain=gmail.com); dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1785119310043746.7417413127388; Sun, 26 Jul 2026 19:28:30 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1woB4o-0006aY-3G; Sun, 26 Jul 2026 22:28:22 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1woB4m-0006Vc-HP for qemu-devel@nongnu.org; Sun, 26 Jul 2026 22:28:20 -0400 Received: from mail-qk1-x72b.google.com ([2607:f8b0:4864:20::72b]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1woB4k-0001De-Qt for qemu-devel@nongnu.org; Sun, 26 Jul 2026 22:28:20 -0400 Received: by mail-qk1-x72b.google.com with SMTP id af79cd13be357-92e5b048375so129399985a.1 for ; Sun, 26 Jul 2026 19:28:18 -0700 (PDT) Received: from 77377267392 named unknown by gmailapi.google.com with HTTPREST; Sun, 26 Jul 2026 19:28:17 -0700 Received: from 77377267392 named unknown by gmailapi.google.com with HTTPREST; Sun, 26 Jul 2026 19:27:47 -0700 ARC-Seal: i=1; a=rsa-sha256; t=1785119298; cv=none; d=google.com; s=arc-20260327; b=IXkJwcZUrxaWRiLKf7MfWHzy7rlCDVLPFao4euloHrUJf6BmM0ktfy0RJMUZyZlKIY 6w1K6gh5b+XWvoPq23XO6GUOmFM9v2wcllcXsK0ZPyxLOuWbnjRPS7DqQWLjpM9SxT3m DL7whi5jpl2FK3sB1+DRBLCxMTxPQx/frhPYFWAshVwl+/1/EACNyL+5SWDNXCfD9vmF dJAQ6H2yX5rnCgh5mXODug/fIZPXsf/bqizLucShtEz+2OeuASoGFo++tYLuKcBBaKJz ygiNLpeyKASvLdEf0Ukc74GXbjsgop4V8ZQCHweFmLacswArAVEoj7pVHMCGILYGlbz/ 8iGQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20260327; h=cc:to:subject:message-id:date:references:in-reply-to:from :mime-version:dkim-signature; bh=lMi35gDihCwI1P51XMeGM8P/9jzYQBtwW4fd6qN5iX0=; fh=tM9uqhnisH6PlMOYdsdDavWujv1Qk2/fU/qZi5QboKo=; b=fYseTRCw4CppH1gDv+xAGqLcymVUvPfq1kpijiMzdgm+9vRfCc0YjFytxpH2Y1ZWIL sugp7Ga3WO5/FckUswUCfGAb8X7NUylfQPbsoRHya5xV0hFgZgoymRt4z0l8mKxfEohu KMaGpb0ZsV0x0MECK2hu0b6Z5aQ8nWnMAV3qFEoWO9vDUKCvgTSRWYHS7ji/sXi+6ht1 7JNHKHB6tdwNFZrG6toL5fgEwn0RnPCVLh4Hmu5lS7mpbFlLqcrqDmgfRoyLD2D/DUgY QgKsuo/RUP8lkeb/tbYklefOKMv3Ur5UKEajFEn6qKQ1pn35tZalArp6Sra3m2Ufr+zw LT+A==; darn=nongnu.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1785119298; x=1785724098; darn=nongnu.org; h=content-type:cc:to:subject:message-id:date:references:in-reply-to :from:mime-version:from:to:cc:subject:date:message-id:reply-to :content-type; bh=lMi35gDihCwI1P51XMeGM8P/9jzYQBtwW4fd6qN5iX0=; b=i2kywZ63ks616E6XOqLwi5yYFLYBouJLBUxE8+eHg9UXbEH4Q2QoO/csWUuykOGu8s gtbTR+rEjJO53DKL/xIF7GPaqH3ogv/W81nyQuwBAD0sX/nENdgkhfwMtufkwV94Q1Wv ilzfAubjYzzMjuZnOFDt8X3jc7qhAiSNRomEI5tbfNt7pFkUlkJpYuEMqBkXpyeayijB vB8sZQxLyBVRu+pevoQ/zzkI37fhGHHThU2R+Ll3/CR+upJRU1QLlfPfOH5N4SlWtN3l 4EXD2pNLFxXVipZ4rDQ/CS2SRhRRBIE7lSfk+bYeZBG2eWae3I9PnPJ2e4ReOftH50zi YsNA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785119298; x=1785724098; h=content-type:cc:to:subject:message-id:date:references:in-reply-to :from:mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to:content-type; bh=lMi35gDihCwI1P51XMeGM8P/9jzYQBtwW4fd6qN5iX0=; b=bjkcjyvi/580wKee3b0TYbfRSQ6cvMtH6C3FkpiSwuprTPhbuSnioqmtUrjyehTFed k1q3nCZMgwnn82TcH0fkW8Ys1N1aLOcAWUWc8w3/U7/Y6fzeihGtjCqjQQhLN/djZ/4N ZbRSXp5HLvCU7eHU0cLzCIXP2nHn8E195J5dfjOJUth1OLao2KEqkP436HBJmTxgBKcf 6cOtOCWAe9K1cTOxVWSKzESkJR/TKdd0d6xswEicZ2YQLQr3h4ORIiga0XRy8VQtxaiq K1o1gYEapA+qTO236rJOpG+f2GKphvZPlAENMr9IufP6gIMGf/jNYtf+7PPsJBPsE/ll CrYw== X-Gm-Message-State: AOJu0Ywd4leMAAvESJKjlbW6cNUWf/q0Rlsm7EAdM0LynfbfKXhaHYhQ XEPjjcIdgmzxuUGDfB6LURmSza2xn1vmG8CKjWfQaDkk7mCBeimsDTrzyZNwns0EnAW8MecvDtw CECZb4D7+kVqDnIq2ChXQy73RVvA1bJWBPw== X-Gm-Gg: AR+sD11s4UsISfX397POO+Nc+AxLFgyI8T94xmejfYCXljI7L+Nbkr0kSSReJtd25/q 68CpbVxVUvxrnj2JOTqO8iw4GzNTCzlZTOz1V56xJMU3OiCKB9oL/gok2YtVZ9009Gdi5vyMcld bh3gB2T691LwUdZ9lROB4HFniBH9lAuN4iOuY1XODSTj5uTUcearzWhJ8Eousno0Hf7hpdx8a16 ouQo2+5wzHvJiZOdXYGu6ZxugblH7hY1uQ9aiWVgq+bBNSjkyjEm7tXkdFg6WIfdZ+ADhlWeyQw C94mHlgUQbtkpyYf6CY6n7J5xOY= X-Received: by 2002:a05:620a:648a:b0:92f:279:594f with SMTP id af79cd13be357-932df6c4718mr695740185a.78.1785119297619; Sun, 26 Jul 2026 19:28:17 -0700 (PDT) MIME-Version: 1.0 From: flavien.solt97@gmail.com In-Reply-To: References: Date: Sun, 26 Jul 2026 19:28:17 -0700 X-Gm-Features: AUfX_myFbpYdzQLim1HMI4xOqWEb5E_vqLXOVjh8mi4NPRMI71Fsg3R6A3lQCQw Message-ID: Subject: [PATCH v3 1/3] hw/misc/iommu-testdev: support PCI MSI test writes To: qemu-devel@nongnu.org Cc: qemu-riscv@nongnu.org, Andrew Jones , Tao Tang 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::72b; envelope-from=flavien.solt97@gmail.com; helo=mail-qk1-x72b.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1785119310973158500 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From 84574de55c0f63f0963b3e5e0d477b18de91cf33 Mon Sep 17 00:00:00 2001 From: Flavien Solt Date: Sun, 26 Jul 2026 17:51:16 +0800 Subject: [PATCH v3 1/3] hw/misc/iommu-testdev: support PCI MSI test writes iommu-testdev writes ITD_DMA_WRITE_VAL with unspecified requester attributes. RISC-V MSI remapping tests need to select an interrupt identity in the payload. The MSI trap also identifies the device through MemTxAttrs.requester_id. Add a write-value register with the existing constant as its reset default. Populate the requester ID from the PCI function. Existing translation tests retain their payload while interrupt-remapping tests can issue a valid MSI for the test device. Signed-off-by: Flavien Solt Reviewed-by: Tao Tang Reviewed-by: Nutty Liu --- hw/misc/iommu-testdev.c | 14 ++++++++++++-- include/hw/misc/iommu-testdev.h | 1 + 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/hw/misc/iommu-testdev.c b/hw/misc/iommu-testdev.c index 15eb6de..6428a57 100644 --- a/hw/misc/iommu-testdev.c +++ b/hw/misc/iommu-testdev.c @@ -28,6 +28,7 @@ struct IOMMUTestDevState { uint64_t dma_paddr; uint32_t dma_len; uint32_t dma_result; + uint32_t dma_write_val; bool dma_armed; /* armed until a trigger consumes the request */ AddressSpace *dma_as; /* IOMMU-mediated DMA AS for this device */ @@ -80,6 +81,7 @@ static void iommu_testdev_maybe_run_dma(IOMMUTestDevState= *s) /* Initialize MemTxAttrs from generic register. */ attrs.secure =3D ITD_ATTRS_GET_SECURE(s->dma_attrs_cfg); + attrs.requester_id =3D pci_requester_id(&s->parent_obj); space_valid =3D ITD_ATTRS_GET_SPACE_VALID(s->dma_attrs_cfg); if (space_valid) { @@ -97,12 +99,12 @@ static void iommu_testdev_maybe_run_dma(IOMMUTestDevState *s) as =3D s->dma_as; - /* Step 1: Write ITD_DMA_WRITE_VAL to DMA address */ + /* Step 1: Write the configured test value to DMA address */ trace_iommu_testdev_dma_write(s->dma_vaddr, s->dma_len); for (int i =3D 0; i < s->dma_len; i++) { /* Data is written in little-endian order */ - write_buf[i] =3D (ITD_DMA_WRITE_VAL >> ((i % 4) * 8)) & 0xff; + write_buf[i] =3D (s->dma_write_val >> ((i % 4) * 8)) & 0xff; } write_res =3D dma_memory_write(as, s->dma_vaddr, write_buf, s->dma_len, attrs); @@ -186,6 +188,9 @@ static uint64_t iommu_testdev_mmio_read(void *opaque, hwaddr addr, case ITD_REG_DMA_ATTRS: value =3D s->dma_attrs_cfg; break; + case ITD_REG_DMA_WRITE_VAL: + value =3D s->dma_write_val; + break; default: value =3D 0; break; @@ -240,6 +245,9 @@ static void iommu_testdev_mmio_write(void *opaque, hwaddr addr, uint64_t val, case ITD_REG_DMA_ATTRS: s->dma_attrs_cfg =3D data; break; + case ITD_REG_DMA_WRITE_VAL: + s->dma_write_val =3D data; + break; default: break; } @@ -263,6 +271,7 @@ static void iommu_testdev_realize(PCIDevice *pdev, Error **errp) s->dma_paddr =3D 0; s->dma_len =3D 0; s->dma_result =3D ITD_DMA_RESULT_IDLE; + s->dma_write_val =3D ITD_DMA_WRITE_VAL; s->dma_armed =3D false; s->dma_attrs_cfg =3D ITD_ATTRS_SET_SPACE(0, ITD_ATTRS_SPACE_NONSECURE); s->dma_as =3D pci_device_iommu_address_space(pdev); @@ -280,6 +289,7 @@ static void iommu_testdev_reset(DeviceState *dev) s->dma_paddr =3D 0; s->dma_len =3D 0; s->dma_result =3D ITD_DMA_RESULT_IDLE; + s->dma_write_val =3D ITD_DMA_WRITE_VAL; s->dma_armed =3D false; s->dma_attrs_cfg =3D ITD_ATTRS_SET_SPACE(0, ITD_ATTRS_SPACE_NONSECURE); } diff --git a/include/hw/misc/iommu-testdev.h b/include/hw/misc/iommu-testde= v.h index 3383659..2f4e931 100644 --- a/include/hw/misc/iommu-testdev.h +++ b/include/hw/misc/iommu-testdev.h @@ -81,6 +81,7 @@ enum { ITD_REG_DMA_ATTRS =3D 0x18, ITD_REG_DMA_GPA_LO =3D 0x1c, ITD_REG_DMA_GPA_HI =3D 0x20, + ITD_REG_DMA_WRITE_VAL =3D 0x24, BAR0_SIZE =3D 0x1000, }; --=20 2.54.0 From nobody Mon Sep 28 02:16:13 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=gmail.com); dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=2; a=rsa-sha256; t=1785119358; cv=pass; d=zohomail.com; s=zohoarc; b=ip6erKPi++0bjdSxeDbE0Ro/DFCJfXSG8KzeT8JWRMNuvE3e193AiBm4b8UK3sXOFLBo72kTlNBCs7xmehJ4laXsOdF6IH24hfyE7n/E3/4sIwSPbnXREIbAWGj75t43Tahgynl2WuAh83YN685yZSIYarbdJDDqBkFjazjKGRA= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1785119358; h=Content-Type:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=YdjUz8yik0MeA92jNBhv3Nw6JCVgFI8IwVl9CAMpWCw=; b=Hzed3wKnW1iVu2/8vfUZccsEbXePN9fCTl1j9pvmMTpyD+AqnI453tdAdnjxzxseFq2vy4dQwwePoteK++xNTyArD5y8VkzmQxYwXJtC8dU5LeFgtoekVsPCamwKNm5qE6q5Jfz6l3oPRstiR2fudIDUdJFQPF9QkkevgRQetgw= ARC-Authentication-Results: i=2; 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; arc=pass (i=1 dmarc=pass fromdomain=gmail.com); dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1785119358880955.9077802230873; Sun, 26 Jul 2026 19:29:18 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1woB4w-0006i5-NR; Sun, 26 Jul 2026 22:28:30 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1woB4r-0006eL-12 for qemu-devel@nongnu.org; Sun, 26 Jul 2026 22:28:25 -0400 Received: from mail-qk1-x735.google.com ([2607:f8b0:4864:20::735]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1woB4p-0001EJ-Hh for qemu-devel@nongnu.org; Sun, 26 Jul 2026 22:28:24 -0400 Received: by mail-qk1-x735.google.com with SMTP id af79cd13be357-92e50979c71so227720885a.3 for ; Sun, 26 Jul 2026 19:28:23 -0700 (PDT) Received: from 77377267392 named unknown by gmailapi.google.com with HTTPREST; Sun, 26 Jul 2026 19:28:21 -0700 Received: from 77377267392 named unknown by gmailapi.google.com with HTTPREST; Sun, 26 Jul 2026 19:27:48 -0700 ARC-Seal: i=1; a=rsa-sha256; t=1785119302; cv=none; d=google.com; s=arc-20260327; b=Yd07+We7cugIQVaqlyBBjAhijUGf4V5OtjlC7xiv8NGk48R988gQVbb3sKeqjFTVZ/ +fJrVQ9yc8Ba/bEOYHpmPBJLuZKUv+vzGzLJ0s0+EcFwwE+VL9755agIZ/V2g8l0Dqf0 f/q5/1oxoRP1Ix0mUvCdikmlAdGA2tKnKzoPy/pEIiNj7KiuzPiEqM3Z294w7rcJychq UneAuR4WVP3WzNIZA2HY79zWUsp3bNzfInIy4wR90TI+KNyge3Ds1TkiZ27BBR50z5Yh y2KUkrqisc7uJ7+OssKquKa7w+HlN59pdyTb3e/EtStfIqbZaVNyv/OM5OuWsJc/KUYT aO9Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20260327; h=cc:to:subject:message-id:date:references:in-reply-to:from :mime-version:dkim-signature; bh=YdjUz8yik0MeA92jNBhv3Nw6JCVgFI8IwVl9CAMpWCw=; fh=uyabCLEm0uqzMNAsIYkyVrHZAOjrXY7bH/yG4RoUZKQ=; b=XdhmhlftzVKlAwBBNlcG4X9LPTESrRdZAnl2ufNqxUVxOKLRQWzoTZNPtiQvkJRrd4 BgwF7wHRcsaqH65UEobNBPfFrNOba99MVy2i9gAHWJb5RbxBHsjTjfP6VHl4z4RdBAX7 Qb08AfrCcP/zyd5UhodgERJzqulcRoiRnZhps0Kn9dj3BAT7KUO1HYH02nSIL52iTrXB h5eHvSCOejOdqb+5pd29hNhHpPCUkxLKbjAJaarwtvQP9QFf0wYs3QyaPZDPpKHk/tjt CISM9hZb4fpm+qbOnJ6/GPw5C6XLspD9/MUE6qbF1V/8puxXtlp2pmuWisGDBdu21aRG 7WUQ==; darn=nongnu.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1785119302; x=1785724102; darn=nongnu.org; h=content-type:cc:to:subject:message-id:date:references:in-reply-to :from:mime-version:from:to:cc:subject:date:message-id:reply-to :content-type; bh=YdjUz8yik0MeA92jNBhv3Nw6JCVgFI8IwVl9CAMpWCw=; b=kR9dXconlDklXhfPRn99VrHn+37eZef/x80EeSIKFBiaxV9Rvb5EWC3vknUKIxoeot Xx3KiKm+TwufsfAtKR72MYJvM7rgENuA+JvSFl405auxY1zoSjSUZ4MNXhc/xrIVL5Zy UzR7h7aTDfe0GF6CEyYi+jJ3foXmtF/OUeVxfMF4y8VR50ZQQ15VqdTeVQqy/iGfjYSq G4PCCzWCmHHDitTklc7iW7Jrs0vf6e91eGJulXfKTP2eYhocC8y3orSpTSriNNimFXgz 6513aFvx1DkllU+MZVACg/xET5zfPLAMYty+6HAlIH6cEZ6OVXJhzRYgNaqbRRDsDOzQ oYDA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785119302; x=1785724102; h=content-type:cc:to:subject:message-id:date:references:in-reply-to :from:mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to:content-type; bh=YdjUz8yik0MeA92jNBhv3Nw6JCVgFI8IwVl9CAMpWCw=; b=bMlLFxKwymlh8zXWroa62t8z/CoIFokNVDgUD+oPfkG3a1Z7GByLMPwHeHBZa57IEQ /R1FoV6CtxHg26yMh4M0+r34ZdJAeca/R1MLD/eCtFu3YYxfndbsIgXXaiBYri40Ebg1 R1nCh34h/Rawv8b7+lxL60yqJJYxoohhBkH+kZaJJsoqDUElOXt19lxQL59WvCHp/ito gJyHplGf788bZW/9oN/fBqfkJ82fBn4ch1E+NWS8NNLFj//0zY//P0NJLsnDUGDvh5JQ mEq8sCKt+JdtSQHY9YkUbrvydmkFASa7538oywNqC4stCcMggbj1zEihmDTq0j9oCNOC b/gg== X-Gm-Message-State: AOJu0Yzwoy84tGh989Fi/s1HpJTIAV7tDvoze6woB4DC161oQmxZIg0r S6aKwCDX2zST5OcWAbAFk/dihj21tEqEvZgSJCMhE0sKew+rWavIq3I2sbxY7y5zxbWtHSlvEnK I+HxnR+cZamR0QLafmLu2dI8g6Ur3R7rjPR7W X-Gm-Gg: AR+sD13KAsFeOcBT8L8TRhuNhWLXv1NqLBcXbOkj/PI0BlODscnO/EmJmYjemV/pGAO ko/C0JAuo4DJgTkwU/F90EGUVghgrDYFlVrjouNXMbZQ7N53h11XAMeyPw0Sg2WrrBwjmBn1C8/ qvV8GaISLSynek98o6KmisZc/cHKFn0fUVJmS3QM56orWQpJT2uLNrw8M/guI01O3sp5j1XvVsl gsAP7QG7v4YzsfEn2mzjR4Dtzj4T4cwTi2vXSzHjlEHusGLs8u2rM+z8z9PkW4cKeVvy7KuZzi4 ZuR36RahjvMWiL1L X-Received: by 2002:a05:620a:608e:b0:92e:675e:8eef with SMTP id af79cd13be357-932df5c4974mr702949685a.15.1785119302517; Sun, 26 Jul 2026 19:28:22 -0700 (PDT) MIME-Version: 1.0 From: flavien.solt97@gmail.com In-Reply-To: References: Date: Sun, 26 Jul 2026 19:28:21 -0700 X-Gm-Features: AUfX_mza1SR7s82RBsNpv5HCAVKryuqxdGxcsv0bkATEczjuOFrF6lJgDbUbVIM Message-ID: Subject: [PATCH v3 2/3] hw/riscv/riscv-iommu.c: always send MRIF notice MSI To: qemu-devel@nongnu.org Cc: qemu-riscv@nongnu.org, qemu-stable@nongnu.org, Andrew Jones , Palmer Dabbelt , Alistair Francis , Weiwei Li , Daniel Henrique Barboza , Liu Zhiwei , Chao Liu 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::735; envelope-from=flavien.solt97@gmail.com; helo=mail-qk1-x735.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1785119360913158500 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From 42f759d7e7f4eca064638622d52aa38be11b956b Mon Sep 17 00:00:00 2001 From: Flavien Solt Date: Sun, 26 Jul 2026 17:52:03 +0800 Subject: [PATCH v3 2/3] hw/riscv/riscv-iommu.c: always send MRIF notice MSI The AIA specification requires an IOMMU to send the configured notice MSI after storing an MSI to an MRIF, even when the corresponding interrupt-enable bit is clear. riscv_iommu_msi_write() currently reads the MRIF interrupt-enable doubleword and suppresses the notice MSI when the matching bit is zero. This makes notice delivery depend on a bit that AIA requires the IOMMU to ignore. Remove the enable-word read and send the notice MSI unconditionally after updating the MRIF pending bit. Fixes: 0c54acb8243d ("hw/riscv: add RISC-V IOMMU base emulation") Cc: qemu-stable@nongnu.org Reviewed-by: Andrew Jones Signed-off-by: Flavien Solt Reviewed-by: Chao Liu Reviewed-by: Nutty Liu Tested-by: Chao Liu --- hw/riscv/riscv-iommu.c | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/hw/riscv/riscv-iommu.c b/hw/riscv/riscv-iommu.c index f6865d1..2bbac30 100644 --- a/hw/riscv/riscv-iommu.c +++ b/hw/riscv/riscv-iommu.c @@ -788,19 +788,6 @@ static MemTxResult riscv_iommu_msi_write(RISCVIOMMUState *s, goto err; } - /* Get MRIF enable bits */ - addr =3D addr + sizeof(intn); - res =3D dma_memory_read(s->target_as, addr, &intn, sizeof(intn), attrs= ); - if (res !=3D MEMTX_OK) { - cause =3D RISCV_IOMMU_FQ_CAUSE_MSI_LOAD_FAULT; - goto err; - } - - if (!(intn & data)) { - /* notification disabled, MRIF update completed. */ - return MEMTX_OK; - } - /* Send notification message */ addr =3D PPN_PHYS(get_field(pte[1], RISCV_IOMMU_MSI_MRIF_NPPN)); n190 =3D get_field(pte[1], RISCV_IOMMU_MSI_MRIF_NID) | --=20 2.54.0 From nobody Mon Sep 28 02:16:13 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=gmail.com); dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=2; a=rsa-sha256; t=1785119366; cv=pass; d=zohomail.com; s=zohoarc; b=K4CXMlzTeoVhHbzHnfpo4hHBnK48gfeniicnQVHzXjRHLsPkmtTvqd6gXahN2VB6BsBeZkcf2a2UkW6d0h4Ex09QxFw0kLSJO9guwzrpLJMpQHY5O3uxIaqWwIxWzj7pMBCfYxXqRQST1Nbgc6VfyOhddhdMd+Bsvrd8Zg0ex5A= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1785119366; h=Content-Type:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=pCWjQx4w+GCh74OHw0vbTxUBJc1a3hAacXuGwjmTCTM=; b=JfK4p5uzJzc3NpA3WwL2l87qRqFG0d+ROP8jAmcFkwgXZdwq/2xUYaxopAbVA+D6iV6lZ8jX+Fq3D/JNGcsas6i0dqycw9tf5mZhR6piP+ssmOAAj+dHLi+ahwbSVb9MaAkQpJqJIbUtREfAg4U70IIUJrY9UTuGG4J52N6KFho= ARC-Authentication-Results: i=2; 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; arc=pass (i=1 dmarc=pass fromdomain=gmail.com); dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 178511936615294.28542724754038; Sun, 26 Jul 2026 19:29:26 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1woB54-0006m9-Sz; Sun, 26 Jul 2026 22:28:42 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1woB4z-0006jo-FZ for qemu-devel@nongnu.org; Sun, 26 Jul 2026 22:28:34 -0400 Received: from mail-qk1-x729.google.com ([2607:f8b0:4864:20::729]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1woB4w-0001FC-HX for qemu-devel@nongnu.org; Sun, 26 Jul 2026 22:28:33 -0400 Received: by mail-qk1-x729.google.com with SMTP id af79cd13be357-92e7c6ec9dbso120760085a.0 for ; Sun, 26 Jul 2026 19:28:30 -0700 (PDT) Received: from 77377267392 named unknown by gmailapi.google.com with HTTPREST; Sun, 26 Jul 2026 19:28:28 -0700 Received: from 77377267392 named unknown by gmailapi.google.com with HTTPREST; Sun, 26 Jul 2026 19:27:49 -0700 ARC-Seal: i=1; a=rsa-sha256; t=1785119309; cv=none; d=google.com; s=arc-20260327; b=nPtQrew9EBRVO0gPHSo4fRlOvEKx5/oYnO/YCNZ+X7S4dH+hk46uX/LgTb6DRoaQqL 4tIfCLiHCRT7p6+YaaH0vIXBwnd/5qbsEslrKJ5ReYQ5vnLtWUS6c6789OK0Z+IQP65c oIstON5XbbhnfVDwPRGq5VTYRer9+r0Om9eU20yia0cHwKYxwYaznwHg9si5uSAur9yx m1xpcSYaO6yVvbetUky/fPVRfDOqVCAJ9WSo0pYq21SmzjqrF3Yh7b4rGOnwrf0/upzw b/iiuY47KCXwaUNIkbcQVZTciwLOr81NH++q8jKC8mARA4QH6c2E0TQQPXomnYS1YpDo vi9w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20260327; h=cc:to:subject:message-id:date:references:in-reply-to:from :mime-version:dkim-signature; bh=pCWjQx4w+GCh74OHw0vbTxUBJc1a3hAacXuGwjmTCTM=; fh=QaT6lRC5y6lD/gWdSAGuafbdbUY/EiCC08Uj3KsmyVY=; b=MHDk1P+WgoAHoEIOs6LdZGzfGMov1y9arbwDf4aCWsJ5eSIcz0WYjIcV6p0rWVqvE2 /44cNOqafiaN7UdssMYShnZ8mgMYxyvfHw05kCLHjcJPVz/BgmByhM33DIboXtZbfFMr jw+hCzzz9lIaWLmA2xUK1rSJPH6y+z3eKM7Is2mmkWJ8CKQwUKmHpRto5hFtxXSRPsC8 VcVFpce2Xg27nQ68gqesnPbzpakWA/Z0hOf70sI/2BxBNvjlsCb4Vj+lZnYDtl4F2oUu B7ZriO4a5KgIzlb45thMQNM9WD2ooUH+57mGVd8CUFiBMWOJW/soljVV0baVXLOfHzDm 4nqQ==; darn=nongnu.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1785119309; x=1785724109; darn=nongnu.org; h=content-type:cc:to:subject:message-id:date:references:in-reply-to :from:mime-version:from:to:cc:subject:date:message-id:reply-to :content-type; bh=pCWjQx4w+GCh74OHw0vbTxUBJc1a3hAacXuGwjmTCTM=; b=FkNItFfJuIbmDSNtomv+nnzK8RmNlkmOrWFYhzHPKBCi//TncF79fYNldmM/8hHg0j q+/OiGeJEUSvy81StCZfwoGWrwra1MDQGpVWoJIqllYe8eqs1WcaFvCYXtGuFmy19bJL NXzyz1m7/oWvUuJVTWefm3w1mEkHHjDzR1DkoXIAuBqEwAqqHWDDINfplMex+eWmGMuT tGj06n7YuHe7THw2S4ipBVhL9+C8uSm0pdY3oLQOucKuoeOih0zfT7K9OryfEPVimt0w M9tMxHKiLUubGomeKKwqEFkIUZdOx4VlsFlAQ/aSJEIie1qCQ5v0BFMO/I3D3cKQ10PH RX5Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785119309; x=1785724109; h=content-type:cc:to:subject:message-id:date:references:in-reply-to :from:mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to:content-type; bh=pCWjQx4w+GCh74OHw0vbTxUBJc1a3hAacXuGwjmTCTM=; b=V6sD95hITdjNeBRj76DKY+N3SkCt7AHx2sWSWx7uT4bfeOBb8RizF+GXZNKldJWlz7 H0iRUNvFT3JQLDWCysedfCftLKmeLKm5aIdtRzc7V0BOduvq6LeG3JvT3YcHt0meZwim Com3t0QMd3rj4m4zzl/mxZ8L93EERx0jZyZxc48Ai/9pudcyOWXE76moUcXTp9nmLeTh +V828FNH2miF9tQIZbVwsGMrfcf7z2YLnjLi/gBasTmYv5n75aanGhYDU5XRSzLLenUE 3GsFQsJMnux91HxlTt2CAfmJ024Y/btL01FTBSyUPbUDg5LAiOciR/EOwR4y8Ij8EZ+V sSJw== X-Gm-Message-State: AOJu0YzpjrQ/sPnemCu0Y/hLVmY6s9mbv6U+/ebubktrdKVmRXSoW8pX w7Rv7Kwh6UexvjfeOgfV8/bdK8Dc2YvrJpyBZL05L7tUXuZORDQuK68bQJ6T6RnZZAJOAh/xF5J PQ4wYjC4F0UOmdXUhqAm88AAOEw/jQUuMEWGq X-Gm-Gg: AR+sD10hm6SiKAP1QNsJ8OUzQqgslcinni1YG8zGlyWozVC2++q+S1x51QPtluEpsv3 5FyssA9BNlYVcR1I8N1atrS277Zzwx5RH4nFvdSwxPFXa23dub2vzabgUlWj1qYDiKeOoFvdhSl XOjjt6TkrXRj3FUYHEJRDocSiBZZ4y/sjG0No3EdLHmDJXLR/ndBej4A+jFBp3RTWZVKezrRhN6 zVQ01PxDd2DFiS9vh5N5JqjGejeOH6eGv6XQ8VjFVooSIM7QAWjV83/sxz7GkCWzHA83IgvQIOf vPdYeU1/TnaFiUfB X-Received: by 2002:a05:620a:2702:b0:915:e670:4021 with SMTP id af79cd13be357-932df674b87mr630241285a.45.1785119309459; Sun, 26 Jul 2026 19:28:29 -0700 (PDT) MIME-Version: 1.0 From: flavien.solt97@gmail.com In-Reply-To: References: Date: Sun, 26 Jul 2026 19:28:27 -0700 X-Gm-Features: AUfX_myA_9jgBJBZxGX_lRGMecf5ODMY1MrrSUNqkYVNZCF3gw2Rvjzd0UNMh2s Message-ID: Subject: [PATCH v3 3/3] tests/qtest: add RISC-V IOMMU MRIF notice tests To: qemu-devel@nongnu.org Cc: qemu-riscv@nongnu.org, Andrew Jones , Palmer Dabbelt , Alistair Francis , Weiwei Li , Daniel Henrique Barboza , Liu Zhiwei , Chao Liu , Fabiano Rosas , Laurent Vivier , Paolo Bonzini 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::729; envelope-from=flavien.solt97@gmail.com; helo=mail-qk1-x729.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1785119366738158500 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From a13bfa64b84ac70c9e257253616ce650fc3e794b Mon Sep 17 00:00:00 2001 From: Flavien Solt Date: Sun, 26 Jul 2026 17:54:04 +0800 Subject: [PATCH v3 3/3] tests/qtest: add RISC-V IOMMU MRIF notice tests Exercise MRIF-mode MSI writes through iommu-testdev with the destination interrupt-enable bit both clear and set. Each case requires the pending bit to be stored plus the configured notice ID to reach guest memory. The enable-clear case regresses the notice suppression fixed by the previous patch. The enable-set case provides a control for the existing path. Signed-off-by: Flavien Solt Reviewed-by: Chao Liu --- tests/qtest/iommu-riscv-test.c | 102 +++++++++++++++++++++++++++++++++ 1 file changed, 102 insertions(+) diff --git a/tests/qtest/iommu-riscv-test.c b/tests/qtest/iommu-riscv-test.c index 2638024..85f79ea 100644 --- a/tests/qtest/iommu-riscv-test.c +++ b/tests/qtest/iommu-riscv-test.c @@ -14,6 +14,7 @@ #include "hw/pci/pci_regs.h" #include "hw/misc/iommu-testdev.h" #include "hw/riscv/riscv-iommu-bits.h" +#include "libqos/qos-iommu-testdev.h" #include "libqos/qos-riscv-iommu.h" #include "libqos/riscv-iommu.h" @@ -26,6 +27,13 @@ #define RISCV_BUS_MMIO_LIMIT 0x80000000 #define RISCV_ECAM_ALLOC_PTR 0x30000000 +#define RISCV_MRIF_MSI_IOVA 0x00000000fee00000ull +#define RISCV_MRIF_MSI_PT_GPA (QRIOMMU_SPACE_OFFS + 0x00030000ull) +#define RISCV_MRIF_BASE_GPA (QRIOMMU_SPACE_OFFS + 0x00031000ull) +#define RISCV_MRIF_NOTICE_GPA (QRIOMMU_SPACE_OFFS + 0x00032000ull) +#define RISCV_MRIF_INTID 5u +#define RISCV_MRIF_NOTICE_ID 0x12du + typedef struct RiscvIommuTestState { QTestState *qts; QGenericPCIBus gbus; @@ -264,6 +272,96 @@ static void test_riscv_iommu_nested(void) run_riscv_iommu_translation(&cfg); } +static void riscv_iommu_setup_mrif_context(RiscvIommuTestState *state) +{ + uint64_t dc_addr; + uint64_t msiptp; + uint64_t pte0; + uint64_t pte1; + + qtest_memset(state->qts, QRIOMMU_SPACE_OFFS + QRIOMMU_DDT_BASE, 0, + 0x1000); + qtest_memset(state->qts, RISCV_MRIF_MSI_PT_GPA, 0, 0x1000); + qtest_memset(state->qts, RISCV_MRIF_BASE_GPA, 0, 0x1000); + qtest_memset(state->qts, RISCV_MRIF_NOTICE_GPA, 0, 4); + + dc_addr =3D QRIOMMU_SPACE_OFFS + QRIOMMU_DDT_BASE + + state->testdev->devfn * sizeof(struct riscv_iommu_dc); + + msiptp =3D (RISCV_MRIF_MSI_PT_GPA >> 12) | + ((uint64_t)RISCV_IOMMU_DC_MSIPTP_MODE_FLAT << 60); + + qtest_writeq(state->qts, dc_addr + 0, RISCV_IOMMU_DC_TC_V); + qtest_writeq(state->qts, dc_addr + 8, 0); + qtest_writeq(state->qts, dc_addr + 16, 0); + qtest_writeq(state->qts, dc_addr + 24, 0); + qtest_writeq(state->qts, dc_addr + 32, msiptp); + qtest_writeq(state->qts, dc_addr + 40, 0); + qtest_writeq(state->qts, dc_addr + 48, RISCV_MRIF_MSI_IOVA >> 12); + qtest_writeq(state->qts, dc_addr + 56, 0); + + pte0 =3D RISCV_IOMMU_MSI_PTE_V | + ((uint64_t)RISCV_IOMMU_MSI_PTE_M_MRIF << 1) | + ((RISCV_MRIF_BASE_GPA >> 9) << 7); + pte1 =3D ((RISCV_MRIF_NOTICE_GPA >> 12) << 10) | RISCV_MRIF_NOTICE_ID; + + qtest_writeq(state->qts, RISCV_MRIF_MSI_PT_GPA, pte0); + qtest_writeq(state->qts, RISCV_MRIF_MSI_PT_GPA + 8, pte1); + + qriommu_program_regs(state->qts, state->iommu_base); +} + +static void run_riscv_iommu_mrif_notice(bool enable_bit) +{ + RiscvIommuTestState state =3D { 0 }; + uint64_t pending; + uint64_t enabled; + uint32_t notice; + uint32_t dma_result; + + if (!riscv_iommu_test_setup(&state)) { + return; + } + + riscv_iommu_check(state.qts, state.iommu_base, QRIOMMU_TM_BARE); + riscv_iommu_setup_mrif_context(&state); + + enabled =3D enable_bit ? (1ull << RISCV_MRIF_INTID) : 0; + qtest_writeq(state.qts, RISCV_MRIF_BASE_GPA + 8, enabled); + qpci_io_writel(state.testdev, state.testdev_bar, ITD_REG_DMA_WRITE_VAL, + RISCV_MRIF_INTID); + + dma_result =3D qos_iommu_testdev_trigger_dma( + state.testdev, state.testdev_bar, RISCV_MRIF_MSI_IOVA, + RISCV_MRIF_NOTICE_GPA, DMA_LEN, qriommu_build_dma_attrs()); + + pending =3D qtest_readq(state.qts, RISCV_MRIF_BASE_GPA); + notice =3D qtest_readl(state.qts, RISCV_MRIF_NOTICE_GPA); + + g_test_message("MRIF notice: enable=3D%u pending=3D0x%" PRIx64 + " notice=3D0x%x", enable_bit, pending, notice); + + /* + * Interrupt remapping consumes the original DMA write; the generic + * test device cannot read it back from the supplied physical address. + */ + g_assert_cmpuint(dma_result, =3D=3D, ITD_DMA_ERR_MISMATCH); + g_assert_cmpuint(pending & (1ull << RISCV_MRIF_INTID), !=3D, 0); + g_assert_cmpuint(notice, =3D=3D, RISCV_MRIF_NOTICE_ID); + + riscv_iommu_test_teardown(&state); +} + +static void test_riscv_iommu_mrif_notice_enable_clear(void) +{ + run_riscv_iommu_mrif_notice(false); +} + +static void test_riscv_iommu_mrif_notice_enable_set(void) +{ + run_riscv_iommu_mrif_notice(true); +} + int main(int argc, char **argv) { g_test_init(&argc, &argv, NULL); @@ -275,5 +373,9 @@ int main(int argc, char **argv) test_riscv_iommu_g_stage_only); qtest_add_func("/iommu-testdev/translation/ns-nested", test_riscv_iommu_nested); + qtest_add_func("/iommu-testdev/mrif-notice/enable-clear", + test_riscv_iommu_mrif_notice_enable_clear); + qtest_add_func("/iommu-testdev/mrif-notice/enable-set", + test_riscv_iommu_mrif_notice_enable_set); return g_test_run(); } --=20 2.54.0