From patchwork Thu May 30 12:25:04 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: CLEMENT MATHIEU--DRIF X-Patchwork-Id: 1941691 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=eviden.com header.i=@eviden.com header.a=rsa-sha256 header.s=mail header.b=NvPHhUI9; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=patchwork.ozlabs.org) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4Vqlpj0rksz20WX for ; Thu, 30 May 2024 22:26:05 +1000 (AEST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1sCeqV-0007B9-Tt; Thu, 30 May 2024 08:25:27 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1sCeqT-0007A1-HQ for qemu-devel@nongnu.org; Thu, 30 May 2024 08:25:25 -0400 Received: from smarthost3.eviden.com ([80.78.11.84]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1sCeqL-0006CX-NS for qemu-devel@nongnu.org; Thu, 30 May 2024 08:25:25 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=eviden.com; i=@eviden.com; q=dns/txt; s=mail; t=1717071917; x=1748607917; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-id:content-transfer-encoding: mime-version; bh=gNcnDcGIoZWQA9eLeBSUZ/Vwq52+cEGSr0++VuU4HGY=; b=NvPHhUI98IcVg9jRFHyjewbdI4UCY23/SE2PRTVOe1DtFeuDTvuLaCIA ssJ7pmHv8lCCyrAVrikTwyTplDnqerTDK2IcUmyS5Irtlf6SHMZokV72Q +9iKNI+lANvbQwFPveyKLbVq4dFQbDtn/Ku07BBMLMr07q+bAHrmsLKIw pvtvZO+uxO4yqvuw/Zs6Cuci5BBP0v0CavVIPL5pzFSZ8QU2fb1ZA3wjj 4NQfylvYSaWW6+jygDWAd5vcwztMPNuo/tVGTI9d5tqa/GuPGmHzMR5xL IMrNIrvZB9ajD1xseDbEMAZIb5oHdh80YI343UdF6qAlKirAEBbg4w9Ig w==; X-IronPort-AV: E=Sophos;i="6.08,201,1712613600"; d="scan'208";a="13581119" X-MGA-submission: MDF4KhjoaBdeXoFC9wYhCZomhS3YUDLBt13KxfZglEb/hg5xub+MbtBduFheZ1WFo0FpXxlU2OW62RyLnfTLpAkkR0aQwgsZK1X3LfR6OOLYEYILERmAfYRAu7atFZE/O4NcIJKhszAg0vJkbgwKBAGGBUOZCEN9DyEWaQC6lmv6WA== Received: from mail-he1eur01lp2051.outbound.protection.outlook.com (HELO EUR01-HE1-obe.outbound.protection.outlook.com) ([104.47.0.51]) by smarthost3.eviden.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 30 May 2024 14:25:07 +0200 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=IDSxqvdkkXdHWK6Zo4j1n7Md3MandHRELijm/aJl5eQ3AWERO812K/9EODCDdXgQo46PgFXOQ7Lln720t2rJ/K8MaRUG5Do0iFudcr3MqdaqGxQrQokSQzbUlL9PIf2d4pYYlVhpgmVHYjOuGEPePKAHXVrWuwn6JNJyfiQJt9ROX6O31K3TQixxrzc7dsGnU/UNS9xyisgd8vnM9XSPLv+XroIDR5RVMTJcIJYbOx17MxYCIGhIABmHlnfvSofXsvXICZUSJyQTBXaFtcsukLWmBX6pyaVfHUpHrV2m40yZryH1ugN11y0FWN7/RO4m8WjZdTDCejLhObjh9j1P4g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=gNcnDcGIoZWQA9eLeBSUZ/Vwq52+cEGSr0++VuU4HGY=; b=McFNQ8ppIVc7QGmF2WNgnNlqOYMhWBjySvqpmJ39m7cFpk3IP85rK/zlOf8n6WFrigqaLDKgod1Pgw8JRxs3Fm7g4zPw2EJe/EqZBxZ65DFo7yfchbzZSxyy4m/IulQqzQOXY1qNM2QmjXcX413xDJocg8jc1JUdnpU3pm2AgIj/JG2Dq538s+1OWAmCazGb+qBpeHVKgM61FCfT30bcpb/Ih3y92OaudpcqoNTJ20XWT9j+AMWtJ9nyeTQ1C5LzRSU8iw+JBQv+bTF4dfFqgEfJD5Ygty8l2vLqWFpjVY9FAMjGUTVfiRAM6oRqd7jqI83gh4Ts6mVU7tl9dqjKkA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=eviden.com; dmarc=pass action=none header.from=eviden.com; dkim=pass header.d=eviden.com; arc=none Received: from AM8PR07MB7602.eurprd07.prod.outlook.com (2603:10a6:20b:24b::7) by AS8PR07MB8069.eurprd07.prod.outlook.com (2603:10a6:20b:358::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7633.21; Thu, 30 May 2024 12:25:05 +0000 Received: from AM8PR07MB7602.eurprd07.prod.outlook.com ([fe80::fbd7:ca71:b636:6f9d]) by AM8PR07MB7602.eurprd07.prod.outlook.com ([fe80::fbd7:ca71:b636:6f9d%5]) with mapi id 15.20.7633.018; Thu, 30 May 2024 12:25:04 +0000 From: CLEMENT MATHIEU--DRIF To: "qemu-devel@nongnu.org" CC: "jasowang@redhat.com" , "zhenzhong.duan@intel.com" , "kevin.tian@intel.com" , "yi.l.liu@intel.com" , "joao.m.martins@oracle.com" , "peterx@redhat.com" , CLEMENT MATHIEU--DRIF Subject: [PATCH v1 7/8] intel_iommu: declare registers for PRI Thread-Topic: [PATCH v1 7/8] intel_iommu: declare registers for PRI Thread-Index: AQHasoxmdbGUniy0gkq3Lt1n7bIUGA== Date: Thu, 30 May 2024 12:25:04 +0000 Message-ID: <20240530122439.42888-8-clement.mathieu--drif@eviden.com> References: <20240530122439.42888-1-clement.mathieu--drif@eviden.com> In-Reply-To: <20240530122439.42888-1-clement.mathieu--drif@eviden.com> Accept-Language: en-GB, fr-FR, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=eviden.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: AM8PR07MB7602:EE_|AS8PR07MB8069:EE_ x-ms-office365-filtering-correlation-id: 4a1a30c3-77ab-48b5-390b-08dc80a38917 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; ARA:13230031|376005|1800799015|366007|38070700009; x-microsoft-antispam-message-info: =?utf-8?q?54IyMS81BXXSaIcltn0YSnCAjvKYWkR?= =?utf-8?q?DprsxRH7mMtUSDhtyuzKFsKAHMEDIYF8tSj2+XCfLSwZlpad1PhFVSaI7vj5dSpjU?= =?utf-8?q?0XJB6A7gb1TcyD9fImTlXZpGJl1/WmCgf+g3OwboRIMp+xosxi+JxbvcQW/1C482X?= =?utf-8?q?adqMzSMpWt4QsiGpQKvkEWaI5NhEWjmuzNzIFU1GG/y0UzGEN4hJpGvAHHeU8gzFm?= =?utf-8?q?yoqq1aVla6EgzpU7HEFM4H9dyCuYhycsjWMBAMs4I1X2hzYTHHBIhQsdrbPVb9uw4?= =?utf-8?q?RjRctnf7rwghmV7j1JmZa68SCc+rIp2GOC9flmG8JW7WUUOhis2kWtf/le93RsO6U?= =?utf-8?q?zB5bIvn5O2LgwNhf9Gv5bkI3jVtXaAve1xEXzbufV72vXPfPit3W4tTIGiGcVjsp7?= =?utf-8?q?gYhfXMxCGgabShuwyWn4ZR/3FkKXEqlvj+MsyxktGk4x95fxYjUvCgOFXvIx0ruVo?= =?utf-8?q?huv39Dd7n5ueJI33rYRgDHo8TAW8yNvcWt+bx+xDnqkmjueIJNdFawk76F3+36kmL?= =?utf-8?q?5B6x0LgTZnaEpp/ISpNWHQOloEEIhdT0e8Ifw6w4e1x9npXvOF99BGkt4Ri3iFSX/?= =?utf-8?q?HMBSTZ5I9T/gZo5YHs4fJeh7FxfWLmO/njcgByZ3cLQPn2mkAh0vRPxr8dDAbwJJU?= =?utf-8?q?QANJ10k87NU7y4LAbPPjAmiENkbuTyCGoNV4piZarDPG2k8SDk+XWqRhxTEUjYKE/?= =?utf-8?q?U4557f9B0qgZEY1X9hjpEbqQzKmUSfsewoG1Wy5RuMkYxhnfToIMWuqt38whgfYwc?= =?utf-8?q?o3oX/C3yIecdEXBYfT1REM6tHbRwUIFmdWOgyjduCYRkv1jfVoFvpuhEyoFI/XhaB?= =?utf-8?q?7eD4HePlGTFMnTGtafugB2AUYNJh4rRj8CxlVc0S/YlkVx2c4hZ4tR9Cye+wLfUf1?= =?utf-8?q?o6vn4m20Uc5t7m1XYzcBQX/9ET5hwyKzZDBW4qMm4qdDYXzhfQ+DotofKKXq7vV/W?= =?utf-8?q?ktvkXfqYLG48aJxuYPpnASRpJdzPGP239S4wxUHBQqVv+IUs/AAoGdhntauR6/zq9?= =?utf-8?q?k9kDHMufcJtEOWmjngagA6RtJ5ogFBjg2iVGFDFYUfr85vzCGXgFgAOMFSvcKFvo0?= =?utf-8?q?+ebkBKODd/Dp19B5KJiS16mYsT5tJyiT1NaI5bHLrI+KD9jekgZ1M6+RJ8UmU/8ee?= =?utf-8?q?OMt0/9HXuoFr0+4gYC/8ah2tvbltorUb2yLQYO7j9Nwdsirg8e4yRd3GDQocIrsLv?= =?utf-8?q?5szP8xLfA5ADyaUsUfE/Exi7K9IcicYxHYvfoU11PALJzXkaB5E+3vluKVE9+YOvL?= =?utf-8?q?RpevFWZ2vR7GY/r2j/+6AqYrAiN0gxwo16g=3D=3D?= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM8PR07MB7602.eurprd07.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230031)(376005)(1800799015)(366007)(38070700009); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?q?3X/PmZjzvn+1A+BrH84KIvwVfk1f?= =?utf-8?q?5Hrs0FrvgtO5VnYnjaQujzpUvFsXQYjx6i29sqNqI5wCGbrAZhJM81WyDs7hLZrKY?= =?utf-8?q?Bw2ERjMf4mRh5bX+mwcM+8n4ZwoKDAwXUTfxnXxHxVBjoWEYmp2enDGFa/+BMIQNZ?= =?utf-8?q?8WU6ib8r5WtHGtYm7mQuTDbImXkJITmFUJdpZb4/tLiXfKyBCglc5ZiUGeA5j5hbh?= =?utf-8?q?rZoHXCLsPqd4Iql6g/pLBhw9b/rqLQl2aGhJ9hstRhddymW9g5+AgLEtziQvEkumW?= =?utf-8?q?Yb+ZNNa3Z/cuFS4F8vULgk6mSMHGYKn7lSdikVhUTj4Ms9Gyk3ppJJOuhm7gt7Rz+?= =?utf-8?q?jQCGWe7KPlS1veiQT7iruCEu32fm5zeN7a1GUAEiT+mem0I6/SfhrmoUOse2BlKa3?= =?utf-8?q?lIDyoEMC/wf5kdYirJ0Dgg9RAf9Njgk7ThqjYV6s6ZeSN/D1YKczWZySgsEqbkSxe?= =?utf-8?q?iMUqPJ5HsjjhgdshV32ubTeM9IM0THJGwEb6qTullA4SxkcFmU3KnDmkIJIEUG2xR?= =?utf-8?q?C+PtKWop1X7qcl7MqwXPCFJovYIsylz0NMb5aOsKL/yA4oiw2gd6OB2IJyoPua1Do?= =?utf-8?q?vWUVhcMWvmYaDf9CqZaBSwfWo07B3+Dzw6S3yfFfG0WEpAaJPSfDAAjdkYj1CR3G6?= =?utf-8?q?eKYe4wu1NnUHW15g9PvfGihLe9gsKsVd0ZIp/eHFYriaOUhjMhB26vMGWujpX+AQG?= =?utf-8?q?EeXd2Q8L2a6jmnBgF2JSOp15ybypCPzE8FDvvzgXwmaE3hRBeQF5DwRd2gPCHWe4P?= =?utf-8?q?aRwv6d2bYXShNcj3ZoNTSesIsLi5UYCM8PGJpPgTYVUteNbP0LJ/wldu9CsP0PrCF?= =?utf-8?q?iPC5HTN9inbTWWytCg/I/HEhZKPjaCIGDb2jztOKODrz2gO3Kki4xjLf2qYaPAM7h?= =?utf-8?q?CWja6vKF9M1XJCzkvdz+M5mkHMUAeNA1fxX0Mq6EVxihInKkC1qrjN6W2nsTHtlI3?= =?utf-8?q?h6TNL5fmrCiT4jfIb++XT0NRTE+O6FvvmY0fzQL8is6QC0X4g1+4vaH9+X4+dj3lm?= =?utf-8?q?PIt6QbhEWdaKraf9fyCOB9324H8b8F3oeqsbmiEjeJLmNojSZe1MQcP1qYBK66hPx?= =?utf-8?q?CVkay3KdTSjNH9k9vDBtG6R+9EckqbvdujKWNzMuoQp7u/IE7tMXCw0B5NKboL/K9?= =?utf-8?q?iNey7icVhRFiT52FZ0m3OAphwcRzGblUCIoLLyXm0V+e7QTj3YelBv1XmFVCmrBc1?= =?utf-8?q?/CmQPfWv0YBGKH64i2kfDA0qRjdy2BAX3MbhduO0UH0dA8u58fZZ/t/t44B3p7CWg?= =?utf-8?q?mLNb1g9g5A3/Y8bvdvW+2Jjog72wn7L/aopiXR5XsBvGJY7RusBLGf2jGmvdON2h+?= =?utf-8?q?SEyjuXmBpNHziSlQVHkp9sqPLOr3MOT47JhxuUGZLOZkB+cQW2xzJFl0SqlCi86T+?= =?utf-8?q?PFDURB4OWXeEG4Z8ShxGaDabCuuGgZvTkjeA2TzRlHwNcNRbJcWxJVMk/7cYe+bMF?= =?utf-8?q?WFhdIxwkPgynufK1f864JIv2+GMJZlyX83d5elrQryUithSW0L+GAsOWqv/WCGGqz?= =?utf-8?q?MlpGbcYsJ4jdQrUf+kd/ekHPAbkDMi4aEnx7nvPr2TgXjhgP+Et5wDo=3D?= Content-ID: <8DE45F1EC0C64749B7B52C214DF0DA8E@eurprd07.prod.outlook.com> MIME-Version: 1.0 X-OriginatorOrg: eviden.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: AM8PR07MB7602.eurprd07.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 4a1a30c3-77ab-48b5-390b-08dc80a38917 X-MS-Exchange-CrossTenant-originalarrivaltime: 30 May 2024 12:25:04.7705 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 7d1c7785-2d8a-437d-b842-1ed5d8fbe00a X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: 26RHbAEA0TfJ4IZEoo7AgrHDH5TV3QPWxB/8ffxbQn+tH51HZ6//uC234UbPkhurmFdrkddHgr+uNvyUoHH0JNggvi3qzkDpTshuKk1Hrc2g0OMZjej43PiVfZX2nnqV X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR07MB8069 Received-SPF: pass client-ip=80.78.11.84; envelope-from=clement.mathieu--drif@eviden.com; helo=smarthost3.eviden.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 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+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Signed-off-by: Clément Mathieu--Drif --- hw/i386/intel_iommu.c | 67 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) diff --git a/hw/i386/intel_iommu.c b/hw/i386/intel_iommu.c index 2e78ebe6d2..899655928d 100644 --- a/hw/i386/intel_iommu.c +++ b/hw/i386/intel_iommu.c @@ -4609,6 +4609,27 @@ static void vtd_handle_iectl_write(IntelIOMMUState *s) } } +static void vtd_handle_prs_write(IntelIOMMUState *s) +{ + uint32_t prs = vtd_get_long_raw(s, DMAR_PRS_REG); + if (!(prs & VTD_PR_STATUS_PPR) && !(prs & VTD_PR_STATUS_PRO)) { + vtd_set_clear_mask_long(s, DMAR_PECTL_REG, VTD_PR_PECTL_IP, 0); + } +} + +static void vtd_handle_pectl_write(IntelIOMMUState *s) +{ + uint32_t pectl = vtd_get_long_raw(s, DMAR_PECTL_REG); + if ((pectl & VTD_PR_PECTL_IP) && !(pectl & VTD_PR_PECTL_IM)) { + /* + * If IP field was 1 when software clears the IM field, + * the interrupt is generated along with clearing the IP field. + */ + vtd_set_clear_mask_long(s, DMAR_PECTL_REG, VTD_PR_PECTL_IP, 0); + vtd_generate_interrupt(s, DMAR_PEADDR_REG, DMAR_PEDATA_REG); + } +} + static uint64_t vtd_mem_read(void *opaque, hwaddr addr, unsigned size) { IntelIOMMUState *s = opaque; @@ -4649,6 +4670,17 @@ static uint64_t vtd_mem_read(void *opaque, hwaddr addr, unsigned size) val = s->iq >> 32; break; + /* Page Request Event Address Register */ + case DMAR_PEADDR_REG: + assert(size == 4); + val = vtd_get_long_raw(s, DMAR_PEADDR_REG); + break; + + case DMAR_PEUADDR_REG: + assert(size == 4); + val = vtd_get_long_raw(s, DMAR_PEUADDR_REG); + break; + default: if (size == 4) { val = vtd_get_long(s, addr); @@ -4712,6 +4744,17 @@ static void vtd_mem_write(void *opaque, hwaddr addr, vtd_handle_iotlb_write(s); break; + /* Page Request Event Address Register */ + case DMAR_PEADDR_REG: + assert(size == 4); + vtd_set_long(s, addr, val); + break; + + case DMAR_PEUADDR_REG: + assert(size == 4); + vtd_set_long(s, addr, val); + break; + /* Invalidate Address Register, 64-bit */ case DMAR_IVA_REG: if (size == 4) { @@ -4892,6 +4935,18 @@ static void vtd_mem_write(void *opaque, hwaddr addr, vtd_set_long(s, addr, val); break; + case DMAR_PRS_REG: + assert(size == 4); + vtd_set_long(s, addr, val); + vtd_handle_prs_write(s); + break; + + case DMAR_PECTL_REG: + assert(size == 4); + vtd_set_long(s, addr, val); + vtd_handle_pectl_write(s); + break; + default: if (size == 4) { vtd_set_long(s, addr, val); @@ -5957,6 +6012,18 @@ static void vtd_init(IntelIOMMUState *s) * Interrupt remapping registers. */ vtd_define_quad(s, DMAR_IRTA_REG, 0, 0xfffffffffffff80fULL, 0); + + /* Page request registers */ + if (s->ecap & VTD_ECAP_PRS) { + vtd_define_quad(s, DMAR_PQH_REG, 0, 0x7ffe0ULL, 0); + vtd_define_quad(s, DMAR_PQT_REG, 0, 0x7ffe0ULL, 0); + vtd_define_quad(s, DMAR_PQA_REG, 0, 0xfffffffffffff007ULL, 0); + vtd_define_long(s, DMAR_PRS_REG, 0, 0, 0x3UL); + vtd_define_long(s, DMAR_PECTL_REG, 0, 0x80000000UL, 0); + vtd_define_long(s, DMAR_PEDATA_REG, 0, 0xffffUL, 0); + vtd_define_long(s, DMAR_PEADDR_REG, 0, 0xfffffffcUL, 0); + vtd_define_long(s, DMAR_PEUADDR_REG, 0, 0xffffffffUL, 0); + } } /* Should not reset address_spaces when reset because devices will still use