From patchwork Tue Sep 11 16:49:45 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Brijesh Singh X-Patchwork-Id: 968633 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=2001:4830:134:3::11; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=amd.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=amdcloud.onmicrosoft.com header.i=@amdcloud.onmicrosoft.com header.b="ElRMw46X"; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 428rxw6bnkz9s3l for ; Wed, 12 Sep 2018 03:09:56 +1000 (AEST) Received: from localhost ([::1]:58689 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fzmAk-0005b2-7F for incoming@patchwork.ozlabs.org; Tue, 11 Sep 2018 13:09:54 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:54284) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fzm6z-00082a-KL for qemu-devel@nongnu.org; Tue, 11 Sep 2018 13:06:05 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fzlre-0002gx-CC for qemu-devel@nongnu.org; Tue, 11 Sep 2018 12:50:14 -0400 Received: from mail-eopbgr730079.outbound.protection.outlook.com ([40.107.73.79]:55072 helo=NAM05-DM3-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1fzlre-0002dH-4Z for qemu-devel@nongnu.org; Tue, 11 Sep 2018 12:50:10 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amdcloud.onmicrosoft.com; s=selector1-amd-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=50qXypgL3rGj2RiJOsCX04vAmFFKUogb/ljqA0HZGs0=; b=ElRMw46X1/aJ6kbuj6Z1TDq1zxOlpYdN9lH4TQWGULP3ePFyIA184azBwYV+3uI3CyQ236H2TX1lnasMfl8n/u0XAu85C/H0cQ1xpkqngSaZks2fxMYdN2vP14y2zuLKJjjZ3Me2547gKs4+wWkfESODBiQkD2AAhsKM4TKn9i0= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=brijesh.singh@amd.com; Received: from sbrijesh-desktop.amd.com (165.204.77.1) by SN6PR12MB2688.namprd12.prod.outlook.com (2603:10b6:805:6f::29) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1122.16; Tue, 11 Sep 2018 16:50:06 +0000 From: Brijesh Singh To: qemu-devel@nongnu.org Date: Tue, 11 Sep 2018 11:49:45 -0500 Message-Id: <1536684589-11718-3-git-send-email-brijesh.singh@amd.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1536684589-11718-1-git-send-email-brijesh.singh@amd.com> References: <1536684589-11718-1-git-send-email-brijesh.singh@amd.com> MIME-Version: 1.0 X-Originating-IP: [165.204.77.1] X-ClientProxiedBy: SN1PR12CA0065.namprd12.prod.outlook.com (2603:10b6:802:20::36) To SN6PR12MB2688.namprd12.prod.outlook.com (2603:10b6:805:6f::29) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 31fb46f5-8bfd-4a37-6b8e-08d61806a134 X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: BCL:0; PCL:0; RULEID:(7020095)(4652040)(8989137)(4534165)(4627221)(201703031133081)(201702281549075)(8990107)(5600074)(711020)(4618075)(2017052603328)(7153060)(7193020); SRVR:SN6PR12MB2688; X-Microsoft-Exchange-Diagnostics: 1; SN6PR12MB2688; 3:HEcI9jTIvK3+UjY3N8G0nmRN+zr9DdzEhGklDJpyXbvls4nBK3QU9IJO8CQSJ09+Ii30QXO8APyslq86CnzJO9HsPmyuPI8lBRZ0glfwmaCZjpiU7j1JNJjUDvji1dtlMoeTI+Xy3Yu2OTDz4pexVFFjv4HeI5iGoqbYpRANQu7CM+nE9VqFuPUWDnl9oSMO2pvpmrDg8bcEM4QZLb6++Z8hZscCOO1dOK/KTbjX7rbTwMQunMPDkh4H2SIFvn5t; 25:m/vep6DL8YfhJElE8+LR/LD4ZQ/W99FHXA9I9ju8bwQ5j6ZvxMx0drbAMA1lul0vw15MNJw/Ff6HiYBk5vb7Vz2oyN0mE2xcXhFFCeTprF4M/ydNXPbNkb4unwdwsMTXvb+jPLEWxzFFgIuJR5YMMM38iTgdMfgcDJfwT+GqEWhocBKbhgf7PqvcbisaypBZep6V2AE6AQbNX8DiyRCzg0FNnGcpGG4U9ttvkrt41AB3g+9H++fAEM39NutnfyKdY0DgMwESy0DxPpkIhKfvat15a/NxWfnxc/qA2UU1oob7L/3OepVB/6VoEuq+AX3IjNFUzNbw44ph6Krz98rmNg==; 31:vkQM60lcInTa3uA3+UTqZhDbeOFkftwZIBrM2pGqeykxgW4VJ8+RTHIHmwEAMuLtHeiEqXuHqWPSgEOJj1SHL7Z72dwUqysiFD1NEuE/Fese7J/z1BQGdq+JM89u5CSvSBiGtKC0iVi40SLgliFUA8MEqh7kK8Gmzw+3NkR/T2Prn7VUStgmejxdsSsaVusadhIESLmkm2jzNMSQPAIvEtB+m0N1M7fRRjBf5DnJbhI= X-MS-TrafficTypeDiagnostic: SN6PR12MB2688: X-Microsoft-Exchange-Diagnostics: 1; SN6PR12MB2688; 20:A3Gu+FljQDB2lnirNeeAEFWwvFlABCHhiN4CBuPl2HdC14XSo5ydjK4LHaPhVpL7w71phqgXFzmhJ6052bHF17DGpXi1/ui1a8jUnt3IS7O6kufE8XCyZvv41p+Tnru87UfCxWEp9clgp7HFMDKTHRPViYajAXnlXagR+z2itWGwZDygCaXn5QeqyOk9MLOu8msUHL1iPdX4Mf2QYbVQ+szmOpy221ATKmdNofTr9CLZTIlI90rCFjFMuRwdGjUA65WzW8fwdLpkoiFcW2P4fBLLdfWhWhQksXJ7N88Fxi4KGwNQANw05zdl5flK3s9jn3NkjJvER+39TqKOG9cxo5IceOgfjcK8hNIoGG3WoAg1mS+9pL90GwT47JFOMZS5L0gwKBmezxXpefkdwTF2jOS++E99jk7CpkaaDTxJ6lJGuv5qgCVaUjuhNrU6zWwG+1rWcgihY6HtoERGmjMNdJulTyJp+UedxU2/TdfpccrIer++4MPxdBwef/NcJZK7; 4:02e6U5/SjXo7UgpwEH/713/KuAohrQy36rTswhIkSkOZgDcRahyudBf92b99CsfffDYbsQEXM5af0Vsmkmtfgs7KeLI2XPYR7S0jdKKSkuZiH1ombiN8tVly//hfcNjDOLOLL5R0cGmOpYGtkIBBas0dur+whXv8TBy/KaTx+YvhDe/3Ow4LJ5Mp/2MID92/J7NPOIEIkc4AkHHx1eAqEXmqJRw8vDsED2rMOJayjEENTgjfgBQBG9GGyqER31vaECbzzkaI286nD7970V+qhFR3NBPkLgY/bx5L7BUuZfLDTRPxYC/M73eOk34g1ykdB8lI6YtTkyRD5c6IajfaGGHJEIgillzG86Amzp904Ow= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(85827821059158)(767451399110); X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(5005006)(8121501046)(823301075)(10201501046)(3002001)(3231311)(944501410)(52105095)(93006095)(93001095)(6055026)(149027)(150027)(6041310)(20161123558120)(20161123562045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123564045)(20161123560045)(201708071742011)(7699050); SRVR:SN6PR12MB2688; BCL:0; PCL:0; RULEID:; SRVR:SN6PR12MB2688; X-Forefront-PRVS: 0792DBEAD0 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(346002)(366004)(136003)(376002)(39860400002)(396003)(189003)(199004)(2616005)(386003)(3846002)(97736004)(7736002)(48376002)(11346002)(316002)(305945005)(53416004)(6116002)(50466002)(476003)(2351001)(478600001)(486006)(39060400002)(956004)(7696005)(76176011)(4326008)(51416003)(6666003)(36756003)(6486002)(6916009)(106356001)(8676002)(68736007)(186003)(44832011)(2361001)(105586002)(52116002)(5660300001)(25786009)(81166006)(81156014)(2906002)(446003)(53936002)(47776003)(66066001)(54906003)(26005)(50226002)(8936002)(16586007)(14444005)(16526019)(575784001)(86362001); DIR:OUT; SFP:1101; SCL:1; SRVR:SN6PR12MB2688; H:sbrijesh-desktop.amd.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; Received-SPF: None (protection.outlook.com: amd.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; SN6PR12MB2688; 23:D47OQpyHL4mezXPPE0z9BTn8dw3aeAVhjLe32WxPe?= 3+0XEBsZf4U+dU81YqjreGlok1t/9a93IqA8rTMdEPJK+/z8CZsJvxWcPnKux1v3CnpQtlCpPM5vFxQdAn/ZGx3tfw7XEyYnyot/rMF+UU3+5bt8RwtegNJrgtzJb88dRoGt/CIbYED4aPptg8pvqczvmMEfHAfZspWu2fEefSS/o9etfzNNitkrKaonc/FJ8z6ml9pAPsdSGdTTKnCIaGcHvRI4EC5Ja93MmSQTiBIXlGndwa13s212z0ibSrBd1aB4+29f12AKKlddHafhhJtj/Vn0U32rOMJX/R7m2lDZMEdxrJxVDq42Itd424fHaWl9BS9G/Gj5lo0V0THpbSANuhrzoBE8jRtmarIHJ5zcFWB+Y7stYlcNhfwW/Rqe415I/dUR0LGrxaDgLUyFUW0daBq73J9TmL0YXUmBmYS+9J/XffK6u4w8uj5wqPoNo3wltwXUE2RnbLINeiHurKvPzy+c8ilrzH2StlLb0LItYiM3Bz2gOWfrFO2DT7mSU77JA/yFEG4TL9c4q4ls7mpnb9H1KwazQoQWlcDugK6NHeoXhvFqI1OfT6289+MXoF7i+uM2jzOE6eU/gdtj91+X6fZKBSTfrDWsVhMnWBwhtDpPQIhnffvenVJ7lnq0UKtr+muxWBUzPsRpXdJ+P0Fv8ndBp9B/AO1xhUUTJZqUT5/GafKRLZicVQa5oOtXDfKsQGKLFYhEL8XG/r0koU7/xL6d6kpWTJ1u+EilqWtdQzORjjI5tcT/RNhsdKxKYqe6r64jiKXgn2xA8E0X/7RV54M5+JV3ygWV9NzmsG1WihZNGkjNTWubnTSwQ7DdLSUPAxGD4FPT7WI3XStXrJEp2zQ+/3pdHLUfJ0AaZJWTWMxDydUoPd5m3G66PBF4XtiNHLInxnH67JhIAApTC3HIdrjq+cVkSULPUI+3TtTWQEEx5BxDNhoJFUUNrrrsy/++AQkSV7eIg4zsHPNGTKI/dccaQa1XlGThEemu9dKJMj7MbDRnWT41HrM6VWS6IDnzICm4bgLJMLqD0O6oUYoR+H9WuwPM1u+z9n4sC4pBMWVS/i17M242RZOQ9a7dZe2SRjr1vo+kL/vCLzQIAISA38uSOut1Ay6a9/pRkZSWIOLUKUnUKKpa6YyIhDu025ArphB+eVdMf5NxzzQW65LR8c/I/oxB5jj7WgD/fqltdw6IasaZsSKqDn6eXTJW8hF8YIlFBJkG7q8Dzv/sRLT2L3iB51L/aa909LEtmuxHwDun59DzzCiUJRugK18hvA= X-Microsoft-Antispam-Message-Info: UFwra1AkTdyc6g1VeI3gbOvKUjvCD7CbhYTGUkYGbbvf+G+at5OqxXzsH+7l6vHcdbCC1FNcGQLx86Niw4U2p46tKN0r4YFPoOGOBEEolst30hGcKUXmswaUbJnHTOREn11fdcAIHcUPW5j+efal6EJByEIs0HHfJcLk2AbavVFpfR897F39WL+18zq8Kji4nnq9cMCcmbGqtMC+KTRXuPJNC7ftBOr8KY4cA/LBX73Y90rnDYQlZjywct3fQ4HFrwBNiygZf7Iupbd/vwJkqajAoL6pZDHJySOK3CF8YIGQbt5L3pKB3NRsVNtXJLcupAfPC774L4e21dusLv4JtxxHX3z2jBvuOpce1ec4Rss= X-Microsoft-Exchange-Diagnostics: 1; SN6PR12MB2688; 6:FthEAmqfR6wpmHJsFZMgWwKU47eQQ/M2zesN1QrRv6WUgr1U8e+uZ/oPJdE2SQQvQwwSjyfL0Wi5gJ/K4ugbkYY4mFlmaStBhXCSkEIWvI5JH7T4AHVwO+K7g/Ol3Fuio+9OzKxjvbFGx+/dlwRY7T4M7dks5QHXg9QpFH7GaVcHhav1i/V66i+lZmZRYJgJhTOYdb1mWXsIp0xH/4GcmDbdcC+fyq1GVsyIDxh8XRvbiVJCYq6P9CwajcxvcFeOcRB7mOUJRXGT9oIobAEp6q5Qe2dB/tKXgZ64BNnEUI1j1NlLT0SVGnIFJxHP3RSoGte3f2/m/DinwBrBNhqR8fThwRO4V1/2WhGy72B4Jq9j6YrDSDN32Mw2yhaoUJJr1lZ3aARWE78WNZu3jWhI9xZb4ksOX2MnaaL9q9OMCyHjYoovRjP2gRe+keML+dDBgicJQhTnHv4xuLBh0HiNmw==; 5:i2EUXCdA0s6sgAPkDohNKJNFjaD3ffJz8YlXWPJNoF4CvXDPs6gtrvOOyISTU2I4Xsrm/+C3iKwKOuJuiSJSf6kJ+8yN6GgTQTCILmZNDwrtG5Fa+e8fe/2N09m+pcPaFEIG/002tLIi6Bv4xO1I1bhnqk2/wD1atSYa9qHS1EM=; 7:ynk1eqOuvJNSZvgZnbCT+TgCCLQFlg/iJiYDDE2I2GrA4pTFfGwVzErW68E3hvEA3TayK2Nz9T17GXV56u2kn3vFxJ6C/uDCDYBsqX1klyonChBhP1s3ldxM/A6oyezimGdBJl6MJ8UdXnkzd7ioeOsQiz0ZvXpu1q87/0urV3r+yA25cwgYqjdNT6W1eKJM8ck3n4b3yMA00YMoDs931MRppiyxKym6SE/raXqaCZcM2YgHD2PpvDppmdAq8bjo SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; SN6PR12MB2688; 20:4fOE+m5dizb3FOcJQ2g8Jj5bNsZ7gaSn/7COqEdRwq4Vw8cbi0gTZs8kGp+PS84vT0rY/111t/FiMp58Z/uU0g028xAHxwtVAqZIpvW3jpnzi5FBqj1e2InTs+tWgMLNBcIH0uH+VVUkQO5RcB2C5LEuNyFBX+uB/nMFn7fOxBt6x4OyXGm+N9Hyp78U1hUYAr2EjwexCacqilyz0JD3c7id7yGikMRArTbHhu/T/KGmnaCrWUNarixWPbdTOLL2 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 Sep 2018 16:50:06.3354 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 31fb46f5-8bfd-4a37-6b8e-08d61806a134 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN6PR12MB2688 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 40.107.73.79 Subject: [Qemu-devel] [PATCH 2/6] x86_iommu/amd: Prepare for interrupt remap support X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Tom Lendacky , Brijesh Singh , Eduardo Habkost , "Michael S. Tsirkin" , Paolo Bonzini , Suravee Suthikulpanit , Richard Henderson Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Register the interrupt remapping callback and read/write ops for the amd-iommu-ir memory region. Cc: "Michael S. Tsirkin" Cc: Paolo Bonzini Cc: Richard Henderson Cc: Eduardo Habkost Cc: Marcel Apfelbaum Cc: Tom Lendacky Cc: Suravee Suthikulpanit Signed-off-by: Brijesh Singh --- hw/i386/amd_iommu.c | 107 +++++++++++++++++++++++++++++++++++++++++++++++++++ hw/i386/amd_iommu.h | 17 +++++++- hw/i386/trace-events | 5 +++ 3 files changed, 127 insertions(+), 2 deletions(-) diff --git a/hw/i386/amd_iommu.c b/hw/i386/amd_iommu.c index 1fd669f..572ba0a 100644 --- a/hw/i386/amd_iommu.c +++ b/hw/i386/amd_iommu.c @@ -26,6 +26,7 @@ #include "amd_iommu.h" #include "qapi/error.h" #include "qemu/error-report.h" +#include "hw/i386/apic_internal.h" #include "trace.h" /* used AMD-Vi MMIO registers */ @@ -1026,6 +1027,101 @@ static IOMMUTLBEntry amdvi_translate(IOMMUMemoryRegion *iommu, hwaddr addr, return ret; } +/* Interrupt remapping for MSI/MSI-X entry */ +static int amdvi_int_remap_msi(AMDVIState *iommu, + MSIMessage *origin, + MSIMessage *translated, + uint16_t sid) +{ + int ret; + + assert(origin && translated); + + trace_amdvi_ir_remap_msi_req(origin->address, origin->data, sid); + + if (!iommu || !iommu->intr_enabled) { + memcpy(translated, origin, sizeof(*origin)); + goto out; + } + + if (origin->address & AMDVI_MSI_ADDR_HI_MASK) { + trace_amdvi_err("MSI address high 32 bits non-zero when " + "Interrupt Remapping enabled."); + return -AMDVI_IR_ERR; + } + + if ((origin->address & AMDVI_MSI_ADDR_LO_MASK) != APIC_DEFAULT_ADDRESS) { + trace_amdvi_err("MSI is not from IOAPIC."); + return -AMDVI_IR_ERR; + } + +out: + trace_amdvi_ir_remap_msi(origin->address, origin->data, + translated->address, translated->data); + return 0; +} + +static int amdvi_int_remap(X86IOMMUState *iommu, + MSIMessage *origin, + MSIMessage *translated, + uint16_t sid) +{ + return amdvi_int_remap_msi(AMD_IOMMU_DEVICE(iommu), origin, + translated, sid); +} + +static MemTxResult amdvi_mem_ir_write(void *opaque, hwaddr addr, + uint64_t value, unsigned size, + MemTxAttrs attrs) +{ + int ret; + MSIMessage from = { 0, 0 }, to = { 0, 0 }; + uint16_t sid = AMDVI_SB_IOAPIC_ID; + + from.address = (uint64_t) addr + AMDVI_INT_ADDR_FIRST; + from.data = (uint32_t) value; + + trace_amdvi_mem_ir_write_req(addr, value, size); + + if (!attrs.unspecified) { + /* We have explicit Source ID */ + sid = attrs.requester_id; + } + + ret = amdvi_int_remap_msi(opaque, &from, &to, sid); + if (ret < 0) { + /* TODO: report error */ + /* Drop the interrupt */ + return MEMTX_ERROR; + } + + apic_get_class()->send_msi(&to); + + trace_amdvi_mem_ir_write(to.address, to.data); + return MEMTX_OK; +} + +static MemTxResult amdvi_mem_ir_read(void *opaque, hwaddr addr, + uint64_t *data, unsigned size, + MemTxAttrs attrs) +{ + return MEMTX_OK; +} + +static const MemoryRegionOps amdvi_ir_ops = { + .read_with_attrs = amdvi_mem_ir_read, + .write_with_attrs = amdvi_mem_ir_write, + .endianness = DEVICE_LITTLE_ENDIAN, + .impl = { + .min_access_size = 4, + .max_access_size = 4, + }, + .valid = { + .min_access_size = 4, + .max_access_size = 4, + } +}; + static AddressSpace *amdvi_host_dma_iommu(PCIBus *bus, void *opaque, int devfn) { AMDVIState *s = opaque; @@ -1055,6 +1151,12 @@ static AddressSpace *amdvi_host_dma_iommu(PCIBus *bus, void *opaque, int devfn) address_space_init(&iommu_as[devfn]->as, MEMORY_REGION(&iommu_as[devfn]->iommu), "amd-iommu"); + memory_region_init_io(&iommu_as[devfn]->iommu_ir, OBJECT(s), + &amdvi_ir_ops, s, "amd-iommu-ir", + AMDVI_INT_ADDR_SIZE); + memory_region_add_subregion(MEMORY_REGION(&iommu_as[devfn]->iommu), + AMDVI_INT_ADDR_FIRST, + &iommu_as[devfn]->iommu_ir); } return &iommu_as[devfn]->as; } @@ -1172,6 +1274,10 @@ static void amdvi_realize(DeviceState *dev, Error **err) return; } + /* Pseudo address space under root PCI bus. */ + pcms->ioapic_as = amdvi_host_dma_iommu(bus, s, AMDVI_SB_IOAPIC_ID); + s->intr_enabled = x86_iommu->intr_supported; + /* set up MMIO */ memory_region_init_io(&s->mmio, OBJECT(s), &mmio_mem_ops, s, "amdvi-mmio", AMDVI_MMIO_SIZE); @@ -1205,6 +1311,7 @@ static void amdvi_class_init(ObjectClass *klass, void* data) dc->vmsd = &vmstate_amdvi; dc->hotpluggable = false; dc_class->realize = amdvi_realize; + dc_class->int_remap = amdvi_int_remap; /* Supported by the pc-q35-* machine types */ dc->user_creatable = true; } diff --git a/hw/i386/amd_iommu.h b/hw/i386/amd_iommu.h index 8740305..74e568b 100644 --- a/hw/i386/amd_iommu.h +++ b/hw/i386/amd_iommu.h @@ -206,8 +206,18 @@ #define AMDVI_COMMAND_SIZE 16 -#define AMDVI_INT_ADDR_FIRST 0xfee00000 -#define AMDVI_INT_ADDR_LAST 0xfeefffff +#define AMDVI_INT_ADDR_FIRST 0xfee00000 +#define AMDVI_INT_ADDR_LAST 0xfeefffff +#define AMDVI_INT_ADDR_SIZE (AMDVI_INT_ADDR_LAST - AMDVI_INT_ADDR_FIRST + 1) +#define AMDVI_MSI_ADDR_HI_MASK (0xffffffff00000000ULL) +#define AMDVI_MSI_ADDR_LO_MASK (0x00000000ffffffffULL) + +/* Southbridge IOAPIC ID */ +#define AMDVI_SB_IOAPIC_ID 0xa0 + +/* Interrupt remapping errors */ +#define AMDVI_IR_ERR 0x1 + #define TYPE_AMD_IOMMU_DEVICE "amd-iommu" #define AMD_IOMMU_DEVICE(obj)\ @@ -278,6 +288,9 @@ typedef struct AMDVIState { /* IOTLB */ GHashTable *iotlb; + + /* Interrupt remapping */ + bool intr_enabled; } AMDVIState; #endif diff --git a/hw/i386/trace-events b/hw/i386/trace-events index 9e6fc4d..41d533c 100644 --- a/hw/i386/trace-events +++ b/hw/i386/trace-events @@ -101,6 +101,11 @@ amdvi_mode_invalid(uint8_t level, uint64_t addr)"error: translation level 0x%"PR amdvi_page_fault(uint64_t addr) "error: page fault accessing guest physical address 0x%"PRIx64 amdvi_iotlb_hit(uint8_t bus, uint8_t slot, uint8_t func, uint64_t addr, uint64_t txaddr) "hit iotlb devid %02x:%02x.%x gpa 0x%"PRIx64" hpa 0x%"PRIx64 amdvi_translation_result(uint8_t bus, uint8_t slot, uint8_t func, uint64_t addr, uint64_t txaddr) "devid: %02x:%02x.%x gpa 0x%"PRIx64" hpa 0x%"PRIx64 +amdvi_mem_ir_write_req(uint64_t addr, uint64_t val, uint32_t size) "addr 0x%"PRIx64" data 0x%"PRIx64" size 0x%"PRIx32 +amdvi_mem_ir_write(uint64_t addr, uint64_t val) "addr 0x%"PRIx64" data 0x%"PRIx64 +amdvi_ir_remap_msi_req(uint64_t addr, uint64_t data, uint8_t devid) "addr 0x%"PRIx64" data 0x%"PRIx64" devid 0x%"PRIx8 +amdvi_ir_remap_msi(uint64_t addr, uint64_t data, uint64_t addr2, uint64_t data2) "(addr 0x%"PRIx64", data 0x%"PRIx64") -> (addr 0x%"PRIx64", data 0x%"PRIx64")" +amdvi_err(const char *str) "%s" # hw/i386/vmport.c vmport_register(unsigned char command, void *func, void *opaque) "command: 0x%02x func: %p opaque: %p"