From nobody Mon Dec 15 13:03:22 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=epam.com); dmarc=pass(p=quarantine dis=none) header.from=epam.com ARC-Seal: i=2; a=rsa-sha256; t=1754591537; cv=pass; d=zohomail.com; s=zohoarc; b=Yxmewm2YhfbfZKLUv40HwgiagF7DbRn09mH+2nhtxEiXJMmyjt9UXoBStocmfFEyFo0bKeEBXYgybBhKG+L9uRKwV9xXyFzEwGQd2PjXnQzXRuyCjH2DeUWVNmBZTBNlvU22aEymBw/Q6RI5Ifd4MUbWF1fX5/HhcMXKBUht6h4= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1754591537; h=Content-ID:Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=W5bgCnmqREuCB9x7yrfXS0DVwJ5vmEllxhsq/3uGl74=; b=lpbHvE+bdxLupMOdKb8X7y8hNgEdp6BcdhHcKHB2sJv8UUgDgQVDrR6ubJTaFFaglo0CwfIueeC1Ifc0XjthyWHAkObovtd90PyESr1JFmd2XYAWhQGyi2btedzrslbKkKGMv1MKG3JzAWPP5ENFKAk/48Ag5/96wE0BTBPexMM= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=epam.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1754591537305678.4162338921209; Thu, 7 Aug 2025 11:32:17 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1073335.1436323 (Exim 4.92) (envelope-from ) id 1uk5Oy-00016P-Rk; Thu, 07 Aug 2025 18:31:44 +0000 Received: by outflank-mailman (output) from mailman id 1073335.1436323; Thu, 07 Aug 2025 18:31:44 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1uk5Oy-00014I-M8; Thu, 07 Aug 2025 18:31:44 +0000 Received: by outflank-mailman (input) for mailman id 1073335; Thu, 07 Aug 2025 16:59:23 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1uk3xb-000773-Gw for xen-devel@lists.xenproject.org; Thu, 07 Aug 2025 16:59:23 +0000 Received: from MRWPR03CU001.outbound.protection.outlook.com (mail-francesouthazlp170110003.outbound.protection.outlook.com [2a01:111:f403:c207::3]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id dd4bdc69-73af-11f0-b898-0df219b8e170; Thu, 07 Aug 2025 18:59:21 +0200 (CEST) Received: from PA4PR03MB7136.eurprd03.prod.outlook.com (2603:10a6:102:ea::23) by AS8PR03MB7336.eurprd03.prod.outlook.com (2603:10a6:20b:2ec::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9009.16; Thu, 7 Aug 2025 16:59:20 +0000 Received: from PA4PR03MB7136.eurprd03.prod.outlook.com ([fe80::36fa:728b:e216:6f6f]) by PA4PR03MB7136.eurprd03.prod.outlook.com ([fe80::36fa:728b:e216:6f6f%6]) with mapi id 15.20.9009.013; Thu, 7 Aug 2025 16:59:20 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: dd4bdc69-73af-11f0-b898-0df219b8e170 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=b6n9sHNDjRdkO/wjFznYxUX6XI3jkeGhb8so6IRXyn6WSBlrr5ykyXeZ1nZliuv0jJhbY4NU03Mrkyp/EJ/G7JAyTBeW6rwDeNdwI28U+u2W7Ze3T+88wUY7YofVD/fLM/xkm/tUvIt7Q0qL3UUEopHsAUQoYiee81sQKV4CcQOBKq+/8MhaJFWW5HtmxIxEyEaXEPNaFaUHlOYqVlzGbQd9N4Wdmg2kQuAN6u3+VpmbqNN7BHM28RGoD7jYsB+1ajJq1kLVp8MTwvK6PFVM7+b7CQ0at+bxUaJDAG+W9IuWtpJD5IeCojLHS5320n6DkVeG2S/d0M7DdmN/Y7zUQg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=W5bgCnmqREuCB9x7yrfXS0DVwJ5vmEllxhsq/3uGl74=; b=aPxb29Tj1IjlnB/XOgvciHwBtgjCw44WVJfzyETVYFsOakB0B9CdLWzv37rwPNC+2vro0OmU1lqZUUWt+QLEeyUzsjP3OowXpmOIll+1aS8EpCuR5jonNoHbsg+epQbeREZ6bt3w0Hnca9S+sCFsz6Wq5MqnyxPhzSv1bjJePahduW/PlAbewiXggmwF3RIrcHWsAdhLw7gdEZ0rcBhnhm05cbzvUoGv7OOAOrB97odf0NrLC5rXHUiVfzHtwmomKZCG4LG62Aw+lo3NwotkufRd+VGRcFBEv77i9lK3u123l/7aSMnc6Eic2aYZV/c0By3O6hwehhWyhjvwWYUbzQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=epam.com; dmarc=pass action=none header.from=epam.com; dkim=pass header.d=epam.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=epam.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=W5bgCnmqREuCB9x7yrfXS0DVwJ5vmEllxhsq/3uGl74=; b=pj1bEzzve/UE6/qyDNO2Dl7xIetP/4/k9P/rxj0N8hoRrM/EknP0PdqLK5JAm8wv+we7v1HBjDKWqI5moj45MsznfJcAhVkHXeGsB4B9JjV4oJ6Z2Sm0chhfVpR+BYgEEIy0b6Qo9ijcrlXtSCP9RAva6lIdkQI+2DWrxxBuP1kfBh9hKuI3IGxl6hwwmKzIpcO3JUUZRRgtgeOJIgmL+YhDPmf2kVBFdOh2pXMrTLUecjN/+lX+eE1En8mLOhxMMD6sHI7Rtadsj3eowv4OBBEPzpFEVwdXAUFhOZI7mZmW0byGd+cee3ej8d9lF05nqDUtVLxDX8zozFZDvekC7w== From: Milan Djokic To: "xen-devel@lists.xenproject.org" CC: Rahul Singh , Stefano Stabellini , Julien Grall , Bertrand Marquis , Michal Orzel , Volodymyr Babchuk , Jan Beulich , =?utf-8?B?Um9nZXIgUGF1IE1vbm7DqQ==?= , Milan Djokic Subject: [PATCH 05/20] xen/arm: vsmmuv3: Add dummy support for virtual SMMUv3 for guests Thread-Topic: [PATCH 05/20] xen/arm: vsmmuv3: Add dummy support for virtual SMMUv3 for guests Thread-Index: AQHcB7yeQvkt3U8dXUO5vMf5OxHVfQ== Date: Thu, 7 Aug 2025 16:59:20 +0000 Message-ID: <757e832e781fd22aa2c7d2491239a61c9935cdc1.1754580688.git.milan_djokic@epam.com> References: In-Reply-To: Accept-Language: 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=epam.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: PA4PR03MB7136:EE_|AS8PR03MB7336:EE_ x-ms-office365-filtering-correlation-id: 36c7e33d-cb71-469c-1b26-08ddd5d3c09b x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0;ARA:13230040|376014|1800799024|366016|38070700018; x-microsoft-antispam-message-info: =?utf-8?B?Q0dBL1hBU3lKT3dhYUUzeSt5VTNjT1UreGkyak9uUFBMUnFBOXp4eXJDbkFx?= =?utf-8?B?a3lzSWFNd3FXZDlXbnRqcGlianhrc3liN1diOG83TDlLYTVXU0hRTlVaM2JX?= =?utf-8?B?MG9IWHdtYmlkQnhFYXRva0o5R09LejlOaUxWcU5MdWl3T2g3YXYwb1Uwd2JD?= =?utf-8?B?bzVXQjlRR0swTEQ3a1hFOFNxelg5QTdYQjZvTnRLZVpmakhHcGJkV0ZPa2hp?= =?utf-8?B?a0duNDJqYm95Z1dtUFNSMVgyQnVabnM1YzF5THBzVE9DeThHd0srOUtyUzVH?= =?utf-8?B?RkRXNWFPUGcyZk5rS2JaNDVhaUhhWE56WXMxM3dKc2ZQR1BrUGxyZk1kTi9G?= =?utf-8?B?WGRVOVZBMzY4UjQvT0tqMXN0enMyU3N1a1EwNllrb09oT2twV3g0czFHdDBN?= =?utf-8?B?Z1IwMFpIam9zMlZaMmNtZk4zOUpIZ0N3MW9BcEUwWDMyZ0dYVUFMdVpaVjM2?= =?utf-8?B?eEZWZS9CVmhtMHJvU3FNci9yU2V4cDdQZGdFNGFLUjZzeDFYV0wwbGMrcVQ3?= =?utf-8?B?dWo2UDJQK3VCTUJvbU9xdThVNFhVV05TRTRJWTUxSUpzeUU1UU5GUmZRRnlo?= =?utf-8?B?NTk3aUtOSjVQY2JETytSZTg1ZG5FOVBxZ3VWTGpUOXFpM2VuL2hwbHFuTUY2?= =?utf-8?B?OUpNQTIrTHJtLzhncE5rS3dRQm5PczJaMEI2OUMybTZVKzdkTXc3WVFaQ3Q4?= =?utf-8?B?MHBKTlZXYnRBNXEyM2JuRHMrT1U3TnpMc1M2WDFmZXFTdjJhREQ4TnJ4YTI2?= =?utf-8?B?elNVRktLam81dmQrQ1BPQnkrY1NzT0NHQ0xrN003R2ZJWERmaDAxYUVHQlFK?= =?utf-8?B?amhOVnR5QW5kTzd6MDB6NmtBR0hJN0JiUnF6SmJEdFlRcnlXRE9yQ1hpVDVT?= =?utf-8?B?QjJKQWdQNTFMaFVmZUgyQlc4a1VPK3g2NS9sQW5ONFBmVXc0L2E1Q0svS2Rq?= =?utf-8?B?RUJrUTZTZXNkVEhmc0xjeDlSUUp3OUd1TEFWbngzdUpjNHRkMGM0M2U0bkVk?= =?utf-8?B?MWNkeWFMOVhSc3E0cVZjVWdkWnNTRVdEdXpRWTY5Qkh1WCtKRld3OWIvVi9H?= =?utf-8?B?YVdPTXdpOGhMU2xGSnlyNUxJU0lvbUt6TXFmUnVBUkV5OUc0SGJ5LzZ5STBB?= =?utf-8?B?MU9pNmFXaG42SjJHMGZFYVQ2Wk9aZnBmaUQraVV2WDZIcmkyenFSYWFLSTdt?= =?utf-8?B?WXFqbTVaaHBZcnVVQXVGYVR0SWZBbndUK2ZQWW13eTlUSTZYbVQxdTMzY1Q4?= =?utf-8?B?eElrRXdnV012WjZjZjRic3dhNVYyV0txeFQvMjR5RnNZcG0xa0lqUVdQL0Qv?= =?utf-8?B?M01SRHpWRHFlN255TWw1YnFXQTRQRXBZTUJEY2F6b1FHaEhIeTg3bzdURU9u?= =?utf-8?B?bjBkYmsvdGJwd3ExbkE0MHE1aHBFSkE3MG8zaHpoend6K2w0QnFOWVF3andz?= =?utf-8?B?OHU0OWhPYWp0NXZVNFBraHo2UXhpUkcvSkpyem5Tdnl5akVZWTdtdlJzYkhR?= =?utf-8?B?WEk5T3BndjYvNHJzZ1VQVFF6TXhLV3JtcWpWa0QrZzFtYjhlMFU5U3llNHMz?= =?utf-8?B?TEwzQ1k0ZVlvS3VGVFo1UEVGaHA0Z1RjOWtMMlBzUTJQTlpsU2lpdGg1RkEy?= =?utf-8?B?OGRnTTRsWXZyN1NDdENPWTNaUjJtbjJ1eDA5ZmRtU3MwcXMycmdxU2M4M0Z0?= =?utf-8?B?ZjJ4bGU3aWRUOW4zY2VMSFZrOFJjV0dhcTVlQ29xS2VhNWE5Y1JRYVVXMG85?= =?utf-8?B?WEd4V3gyeTRlOW1hcDNPTFlxK0Z0eEpyUk5ySnVVYVlCMFFJMDhxVnhRb0lm?= =?utf-8?B?VDhSeEZjZEpBMStnRFVXaDFzUUp6NlVqUUF0YnNkM01pa1JoNTNicktGbHIy?= =?utf-8?B?TCsxeUNobk85OUZNY1RKaEQvRnJMN2o2bEV6bHEzRkZ2TUI5WmhpeUR5QzMw?= =?utf-8?B?RGwzUDFLWTZmb0tiQ1pPMEMvejMrRVlyT0dpWEg2dDBLLzFjeE9vejllNEti?= =?utf-8?B?Ymw3YW1JS0ZBPT0=?= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PA4PR03MB7136.eurprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(1800799024)(366016)(38070700018);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?TWtkTTdGV1VVSURMcjVTc1IydmxqbVdueXM5V1c4WDZ2YUg4aWpYWnlhY0hi?= =?utf-8?B?cmxCWEJISWo5YmRTaXZncG9lRVo3a3A5TTZRRDQ1b285NVMvQXU1ZStYMVhp?= =?utf-8?B?NHJRYjQ0UkN6WHlPTWVYZ2x4UHRaaVRGS0Z2TEV4WmVPQkhBeWxtUjlmRFg2?= =?utf-8?B?b2gySG1UN0M3V0pQTmdQLzY1YzZKMVgrRDRDZnJSSm1SZ2tGeE1GT2hzZXlh?= =?utf-8?B?Yk05SlVnU1krd25SYzkrWnRxcGUzbUV5elZ1WXpYK3pMOU1tWXBNZTNXWWRQ?= =?utf-8?B?U3h6a1VEVjBSYjFGdXVrTmxwY2hqOVJUbm14bVlTbHpPQVMrZ1F5TXhlZFVQ?= =?utf-8?B?bXFFTitvV2dKRUVtSFJVYllUSG13eGpMcDVYZjYvM0oyQ29OWW8rbHcybDZP?= =?utf-8?B?ZU1GeTFRaWo2YkhZRTJlRjl4QjYrRG9lZU5JMXpTUW5kT0w0dFBwbDkvdEdt?= =?utf-8?B?VDAyU3dLdlVFUWhQUHI3dG9OdVdITk9YbWUwYlV0SXFkb3ZHMGVDMThBUkIy?= =?utf-8?B?bDJvR0dzTGxjc05zdll2bW04Q1BVeTFXY1dDNjBCeHI3eGtoa3RDbC9DTWdP?= =?utf-8?B?U0xOZmd0YWtUZXI1SjI3OS9vN0RKM1lza1hJZEJ1T0NOYVNGVEwwVVYzNkN2?= =?utf-8?B?Q3BwaEhDaDlTUE13SVI1ZHp6T0YyY0pUYS9Id1g3L1piZGplQlZic3h0MFRq?= =?utf-8?B?aHoyTjJMMkw4MDFZODBVQVpBOFdUVG5ybEVpUUpYdWZOWHpUZHl2T2Z4NzY5?= =?utf-8?B?YUp1c3lVWVhRT1FzNG9SQjMzTFFTMEV5MjNLUitrd3QrRW9ZZFJIaWhNZlA1?= =?utf-8?B?MXNuK0xMcXZSTjFpOSt5ck51RDI3V2dtQlYwaEp6T0JDSWFWcG5YMUZoQW53?= =?utf-8?B?SkxacGY3LzhNelZGak93SnBYZFpjdGtMMDZEUDhPL3pWbHdzek5PbVA5M3hs?= =?utf-8?B?eTZEd1BuL25CNyt5OWo4OXpCdXhJTFM1THM0cG9VL1JuYVpxbkR3d1JiSCtP?= =?utf-8?B?cERkNzlwUytkY0d2ZFJqQzE3VFpzWVVvZmt6eEhnVndZWTBybEFPWEs5MHhu?= =?utf-8?B?RVRldlNVdUhGU2hoWngrWnV4bWw3SklNenlzOEZ0SGN0akpBemNCdGZ3bDFz?= =?utf-8?B?WEh0U2ZzK0g3R0JwY1FPdkVPYlBEMXNwSzY3S2w5YWQrcEFSNlRZb1F0SzRL?= =?utf-8?B?L1pOek5ILzA4enFoUFdBMnVMNEF5RmNxVVZoTTdXOWdTRncvVnhYTmRGbU1q?= =?utf-8?B?TkNKMGlhS29kajN2cHpabG9rTnkxb0QwQVZOZGtwUWdLMW1lOXpSZkUwK2FJ?= =?utf-8?B?T0xobDdyTnhhVU5uTmg4ZUNzTm9sTXNwemR6T2RNVmJyWGk3UXR6dWNXTGsy?= =?utf-8?B?V09BZGF0SUR4RGVvV0hPTFhsWW9oNU9BQ0xkQWdmaVZBTlM2RU1kWG1GNEJs?= =?utf-8?B?QUE2YnBoZDBXSVRMWHA1Y2dSclZxaHFBcjVVTUw0OXZSa2dzai9TWkpuTlhs?= =?utf-8?B?c3hsY1owazF5VFRkdGpwVWVnZjd3V0xrUW05bWpPVk1yQWtGMmk2em40YWdj?= =?utf-8?B?OGFkYXFzZnkrUzhZY2l0MjlJZ040KzdJRzFyYThvUWU2SEVnanJrUHloMGhp?= =?utf-8?B?UzdhZFRya2RCbVh3eFFBWDhsaUJNazMxajhDWmk4NTl6dS81a0cvdXVTRnkw?= =?utf-8?B?eWFhOFZaSkpWWHpHMUh6bVI1WE9HTjFUaWxzcVNUdUo3cnlLWlBrLzBKQTJs?= =?utf-8?B?K0YvYmx2K2lkLzl0clNKUk9lRUFmYUJuaFBkTXMxTWpmTTBJUnhNdzh0aVg5?= =?utf-8?B?WUVvWFFZc0dpNnNKemt3b3EwV1RURUs1WEx4RFdrUVEwQ0txbDNGdmtjdDZJ?= =?utf-8?B?SGVSWS93ZFJUU05KQU1yQ1JPaXF0Wno2cHc4K3lvTDJ2c2tYWnVTZmFBQUw0?= =?utf-8?B?M1crTmhTaU9BVWdVclRDYXpsdE5OMWRDODhqZXVZS0pvNm9iRzduUXhJKyt1?= =?utf-8?B?cGlyWVJDNkpYMENFYW90OUVGTjllWVUxZ2xibUxUbHp3N1ZOaDNCbmIzMjNM?= =?utf-8?B?cS9RVnI2S3Z3U0pVcE9RTmpLU0VrTW1VcHNDQWVYdDg5cTEzQUhsUHJra3hv?= =?utf-8?Q?5Iqph4mxM3FLfIfBgdZn/uKgu?= Content-Type: text/plain; charset="utf-8" Content-ID: <3FE4F91D27F0E04893823C9B60DC5579@eurprd03.prod.outlook.com> Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: epam.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: PA4PR03MB7136.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 36c7e33d-cb71-469c-1b26-08ddd5d3c09b X-MS-Exchange-CrossTenant-originalarrivaltime: 07 Aug 2025 16:59:20.2470 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: b41b72d0-4e9f-4c26-8a69-f949f367c91d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: 3Owx8BXOic2WjkxGIe4G2gdOha9HpqTAbv375zU+o8wpAJ8zmPgtyllXzoR3T/c8Sv8QeZbUY7Yktbz2QZDbQw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR03MB7336 X-ZohoMail-DKIM: pass (identity @epam.com) X-ZM-MESSAGEID: 1754591539826124100 From: Rahul Singh domain_viommu_init() will be called during domain creation and will add the dummy trap handler for virtual IOMMUs for guests. A host IOMMU list will be created when host IOMMU devices are probed and this list will be used to create the IOMMU device tree node for dom0. For dom0, 1-1 mapping will be established between vIOMMU in dom0 and=C2=A0physical IOMMU. For domUs, the 1-N mapping will be established between domU and physical IOMMUs. A new area has been reserved in the arm guest physical map at which the emulated vIOMMU node is created in the device tree. Also set the vIOMMU type to vSMMUv3 to enable vIOMMU framework to call vSMMUv3 domain creation/destroy functions. Signed-off-by: Rahul Singh Signed-off-by: Milan Djokic --- xen/arch/arm/domain.c | 3 +- xen/arch/arm/include/asm/domain.h | 4 + xen/arch/arm/include/asm/viommu.h | 20 ++++ xen/drivers/passthrough/Kconfig | 8 ++ xen/drivers/passthrough/arm/Makefile | 1 + xen/drivers/passthrough/arm/smmu-v3.c | 7 ++ xen/drivers/passthrough/arm/viommu.c | 30 ++++++ xen/drivers/passthrough/arm/vsmmu-v3.c | 124 +++++++++++++++++++++++++ xen/drivers/passthrough/arm/vsmmu-v3.h | 20 ++++ xen/include/public/arch-arm.h | 7 +- 10 files changed, 222 insertions(+), 2 deletions(-) create mode 100644 xen/drivers/passthrough/arm/vsmmu-v3.c create mode 100644 xen/drivers/passthrough/arm/vsmmu-v3.h diff --git a/xen/arch/arm/domain.c b/xen/arch/arm/domain.c index a66f71da17..f0971a76cb 100644 --- a/xen/arch/arm/domain.c +++ b/xen/arch/arm/domain.c @@ -708,7 +708,8 @@ int arch_sanitise_domain_config(struct xen_domctl_creat= edomain *config) return -EINVAL; } =20 - if ( config->arch.viommu_type !=3D XEN_DOMCTL_CONFIG_VIOMMU_NONE ) + if ( config->arch.viommu_type !=3D XEN_DOMCTL_CONFIG_VIOMMU_NONE && + config->arch.viommu_type !=3D viommu_get_type() ) { dprintk(XENLOG_INFO, "vIOMMU type requested not supported by the platform or Xe= n\n"); diff --git a/xen/arch/arm/include/asm/domain.h b/xen/arch/arm/include/asm/d= omain.h index a3487ca713..25ee7c4290 100644 --- a/xen/arch/arm/include/asm/domain.h +++ b/xen/arch/arm/include/asm/domain.h @@ -121,6 +121,10 @@ struct arch_domain void *tee; #endif =20 +#ifdef CONFIG_VIRTUAL_IOMMU + struct list_head viommu_list; /* List of virtual IOMMUs */ +#endif + } __cacheline_aligned; =20 struct arch_vcpu diff --git a/xen/arch/arm/include/asm/viommu.h b/xen/arch/arm/include/asm/v= iommu.h index 7cd3818a12..4785877e2a 100644 --- a/xen/arch/arm/include/asm/viommu.h +++ b/xen/arch/arm/include/asm/viommu.h @@ -5,9 +5,21 @@ #ifdef CONFIG_VIRTUAL_IOMMU =20 #include +#include #include #include =20 +extern struct list_head host_iommu_list; + +/* data structure for each hardware IOMMU */ +struct host_iommu { + struct list_head entry; + const struct dt_device_node *dt_node; + paddr_t addr; + paddr_t size; + uint32_t irq; +}; + struct viommu_ops { /* * Called during domain construction if toolstack requests to enable @@ -35,6 +47,8 @@ struct viommu_desc { int domain_viommu_init(struct domain *d, uint16_t viommu_type); int viommu_relinquish_resources(struct domain *d); uint16_t viommu_get_type(void); +void add_to_host_iommu_list(paddr_t addr, paddr_t size, + const struct dt_device_node *node); =20 #else =20 @@ -56,6 +70,12 @@ static inline int viommu_relinquish_resources(struct dom= ain *d) return 0; } =20 +static inline void add_to_host_iommu_list(paddr_t addr, paddr_t size, + const struct dt_device_node *nod= e) +{ + return; +} + #endif /* CONFIG_VIRTUAL_IOMMU */ =20 #endif /* __ARCH_ARM_VIOMMU_H__ */ diff --git a/xen/drivers/passthrough/Kconfig b/xen/drivers/passthrough/Kcon= fig index fbd56eb990..d711123cac 100644 --- a/xen/drivers/passthrough/Kconfig +++ b/xen/drivers/passthrough/Kconfig @@ -41,6 +41,14 @@ config VIRTUAL_IOMMU help Support virtual IOMMU infrastructure to implement vIOMMU. =20 +config VIRTUAL_ARM_SMMU_V3 + bool "ARM Ltd. Virtual SMMUv3 Support (UNSUPPORTED)" if UNSUPPORTED + depends on ARM_SMMU_V3 && VIRTUAL_IOMMU + help + Support for implementations of the virtual ARM System MMU architecture + version 3. Virtual SMMUv3 is unsupported feature and should not be used + in production. + endif =20 config AMD_IOMMU diff --git a/xen/drivers/passthrough/arm/Makefile b/xen/drivers/passthrough= /arm/Makefile index 4cc54f3f4d..e758a9d6aa 100644 --- a/xen/drivers/passthrough/arm/Makefile +++ b/xen/drivers/passthrough/arm/Makefile @@ -3,3 +3,4 @@ obj-$(CONFIG_ARM_SMMU) +=3D smmu.o obj-$(CONFIG_IPMMU_VMSA) +=3D ipmmu-vmsa.o obj-$(CONFIG_ARM_SMMU_V3) +=3D smmu-v3.o obj-$(CONFIG_VIRTUAL_IOMMU) +=3D viommu.o +obj-$(CONFIG_VIRTUAL_ARM_SMMU_V3) +=3D vsmmu-v3.o diff --git a/xen/drivers/passthrough/arm/smmu-v3.c b/xen/drivers/passthroug= h/arm/smmu-v3.c index 15ff703458..193c892fcd 100644 --- a/xen/drivers/passthrough/arm/smmu-v3.c +++ b/xen/drivers/passthrough/arm/smmu-v3.c @@ -93,6 +93,7 @@ #include =20 #include "smmu-v3.h" +#include "vsmmu-v3.h" =20 #define ARM_SMMU_VTCR_SH_IS 3 #define ARM_SMMU_VTCR_RGN_WBWA 1 @@ -2708,6 +2709,9 @@ static int __init arm_smmu_device_probe(struct platfo= rm_device *pdev) list_add(&smmu->devices, &arm_smmu_devices); spin_unlock(&arm_smmu_devices_lock); =20 + /* Add to host IOMMU list to initialize vIOMMU for dom0 */ + add_to_host_iommu_list(ioaddr, iosize, dev_to_dt(pdev)); + return 0; =20 =20 @@ -3039,6 +3043,9 @@ static __init int arm_smmu_dt_init(struct dt_device_n= ode *dev, =20 platform_features &=3D smmu->features; =20 + /* Set vIOMMU type to SMMUv3 */ + vsmmuv3_set_type(); + return 0; } =20 diff --git a/xen/drivers/passthrough/arm/viommu.c b/xen/drivers/passthrough= /arm/viommu.c index 7ab6061e34..53ae46349a 100644 --- a/xen/drivers/passthrough/arm/viommu.c +++ b/xen/drivers/passthrough/arm/viommu.c @@ -2,12 +2,42 @@ =20 #include #include +#include #include =20 #include =20 +/* List of all host IOMMUs */ +LIST_HEAD(host_iommu_list); + const struct viommu_desc __read_mostly *cur_viommu; =20 +/* Common function for adding to host_iommu_list */ +void add_to_host_iommu_list(paddr_t addr, paddr_t size, + const struct dt_device_node *node) +{ + struct host_iommu *iommu_data; + + iommu_data =3D xzalloc(struct host_iommu); + if ( !iommu_data ) + panic("vIOMMU: Cannot allocate memory for host IOMMU data\n"); + + iommu_data->addr =3D addr; + iommu_data->size =3D size; + iommu_data->dt_node =3D node; + iommu_data->irq =3D platform_get_irq(node, 0); + if ( iommu_data->irq < 0 ) + { + gdprintk(XENLOG_ERR, + "vIOMMU: Cannot find a valid IOMMU irq\n"); + return; + } + + printk("vIOMMU: Found IOMMU @0x%"PRIx64"\n", addr); + + list_add_tail(&iommu_data->entry, &host_iommu_list); +} + int domain_viommu_init(struct domain *d, uint16_t viommu_type) { if ( viommu_type =3D=3D XEN_DOMCTL_CONFIG_VIOMMU_NONE ) diff --git a/xen/drivers/passthrough/arm/vsmmu-v3.c b/xen/drivers/passthrou= gh/arm/vsmmu-v3.c new file mode 100644 index 0000000000..6b4009e5ef --- /dev/null +++ b/xen/drivers/passthrough/arm/vsmmu-v3.c @@ -0,0 +1,124 @@ +/* SPDX-License-Identifier: (GPL-2.0-or-later OR BSD-2-Clause) */ + +#include +#include +#include +#include + +/* Struct to hold the vIOMMU ops and vIOMMU type */ +extern const struct viommu_desc __read_mostly *cur_viommu; + +struct virt_smmu { + struct domain *d; + struct list_head viommu_list; +}; + +static int vsmmuv3_mmio_write(struct vcpu *v, mmio_info_t *info, + register_t r, void *priv) +{ + return IO_HANDLED; +} + +static int vsmmuv3_mmio_read(struct vcpu *v, mmio_info_t *info, + register_t *r, void *priv) +{ + return IO_HANDLED; +} + +static const struct mmio_handler_ops vsmmuv3_mmio_handler =3D { + .read =3D vsmmuv3_mmio_read, + .write =3D vsmmuv3_mmio_write, +}; + +static int vsmmuv3_init_single(struct domain *d, paddr_t addr, paddr_t siz= e) +{ + struct virt_smmu *smmu; + + smmu =3D xzalloc(struct virt_smmu); + if ( !smmu ) + return -ENOMEM; + + smmu->d =3D d; + + register_mmio_handler(d, &vsmmuv3_mmio_handler, addr, size, smmu); + + /* Register the vIOMMU to be able to clean it up later. */ + list_add_tail(&smmu->viommu_list, &d->arch.viommu_list); + + return 0; +} + +int domain_vsmmuv3_init(struct domain *d) +{ + int ret; + INIT_LIST_HEAD(&d->arch.viommu_list); + + if ( is_hardware_domain(d) ) + { + struct host_iommu *hw_iommu; + + list_for_each_entry(hw_iommu, &host_iommu_list, entry) + { + ret =3D vsmmuv3_init_single(d, hw_iommu->addr, hw_iommu->size); + if ( ret ) + return ret; + } + } + else + { + ret =3D vsmmuv3_init_single(d, GUEST_VSMMUV3_BASE, GUEST_VSMMUV3_S= IZE); + if ( ret ) + return ret; + } + + return 0; +} + +int vsmmuv3_relinquish_resources(struct domain *d) +{ + struct virt_smmu *pos, *temp; + + /* Cope with unitialized vIOMMU */ + if ( list_head_is_null(&d->arch.viommu_list) ) + return 0; + + list_for_each_entry_safe(pos, temp, &d->arch.viommu_list, viommu_list ) + { + list_del(&pos->viommu_list); + xfree(pos); + } + + return 0; +} + +static const struct viommu_ops vsmmuv3_ops =3D { + .domain_init =3D domain_vsmmuv3_init, + .relinquish_resources =3D vsmmuv3_relinquish_resources, +}; + +static const struct viommu_desc vsmmuv3_desc =3D { + .ops =3D &vsmmuv3_ops, + .viommu_type =3D XEN_DOMCTL_CONFIG_VIOMMU_SMMUV3, +}; + +void __init vsmmuv3_set_type(void) +{ + const struct viommu_desc *desc =3D &vsmmuv3_desc; + + if ( cur_viommu && (cur_viommu !=3D desc) ) + { + printk("WARNING: Cannot set vIOMMU, already set to a different val= ue\n"); + return; + } + + cur_viommu =3D desc; +} + +/* + * Local variables: + * mode: C + * c-file-style: "BSD" + * c-basic-offset: 4 + * indent-tabs-mode: nil + * End: + */ diff --git a/xen/drivers/passthrough/arm/vsmmu-v3.h b/xen/drivers/passthrou= gh/arm/vsmmu-v3.h new file mode 100644 index 0000000000..e11f85b431 --- /dev/null +++ b/xen/drivers/passthrough/arm/vsmmu-v3.h @@ -0,0 +1,20 @@ +/* SPDX-License-Identifier: (GPL-2.0-or-later OR BSD-2-Clause) */ +#ifndef __ARCH_ARM_VSMMU_V3_H__ +#define __ARCH_ARM_VSMMU_V3_H__ + +#include + +#ifdef CONFIG_VIRTUAL_ARM_SMMU_V3 + +void vsmmuv3_set_type(void); + +#else + +static inline void vsmmuv3_set_type(void) +{ + return; +} + +#endif /* CONFIG_VIRTUAL_ARM_SMMU_V3 */ + +#endif /* __ARCH_ARM_VSMMU_V3_H__ */ diff --git a/xen/include/public/arch-arm.h b/xen/include/public/arch-arm.h index 0a155fe615..d6201df06a 100644 --- a/xen/include/public/arch-arm.h +++ b/xen/include/public/arch-arm.h @@ -327,7 +327,8 @@ DEFINE_XEN_GUEST_HANDLE(vcpu_guest_context_t); #define XEN_DOMCTL_CONFIG_TEE_OPTEE 1 #define XEN_DOMCTL_CONFIG_TEE_FFA 2 =20 -#define XEN_DOMCTL_CONFIG_VIOMMU_NONE 0 +#define XEN_DOMCTL_CONFIG_VIOMMU_NONE 0 +#define XEN_DOMCTL_CONFIG_VIOMMU_SMMUV3 1 =20 struct xen_arch_domainconfig { /* IN/OUT */ @@ -450,6 +451,10 @@ typedef uint64_t xen_callback_t; #define GUEST_GICV3_GICR0_BASE xen_mk_ullong(0x03020000) /* vCPU0..127= */ #define GUEST_GICV3_GICR0_SIZE xen_mk_ullong(0x01000000) =20 +/* vsmmuv3 ITS mappings */ +#define GUEST_VSMMUV3_BASE xen_mk_ullong(0x04040000) +#define GUEST_VSMMUV3_SIZE xen_mk_ullong(0x00040000) + /* * 256 MB is reserved for VPCI configuration space based on calculation * 256 buses x 32 devices x 8 functions x 4 KB =3D 256 MB --=20 2.43.0