From patchwork Wed Dec 20 16:57:31 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gary R Hook X-Patchwork-Id: 10125931 X-Patchwork-Delegate: herbert@gondor.apana.org.au Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 2808A6019C for ; Wed, 20 Dec 2017 16:57:41 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 1A3D7295DE for ; Wed, 20 Dec 2017 16:57:41 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 0D92329627; Wed, 20 Dec 2017 16:57:41 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id EBC36295DE for ; Wed, 20 Dec 2017 16:57:39 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755542AbdLTQ5j (ORCPT ); Wed, 20 Dec 2017 11:57:39 -0500 Received: from mail-bl2nam02on0077.outbound.protection.outlook.com ([104.47.38.77]:49056 "EHLO NAM02-BL2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1755532AbdLTQ5i (ORCPT ); Wed, 20 Dec 2017 11:57:38 -0500 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; bh=j+NbnGs5O0RnmvEoSlKqS9eTkc9oYtB/GS2xUcMW2Xw=; b=VHiD+z8GV1NuBDA0KSn5+2OfjDYfjmzka8hpLi0sdwYj0W31aBzcXbZQTAvcPJ5P0/e5D2qg4zuLVQfrTrLbnA54Xnm9RF2K+pXNC/Oj3/xhpPMcj5hFb3gSK2zIg4Z857VZQSKCi+amrIPbuRfnlQOlfwI13jiEH8iZkrfrf8c= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Gary.Hook@amd.com; Received: from sosxen2.amd.com (165.204.78.1) by CY4PR12MB1208.namprd12.prod.outlook.com (10.168.167.7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.323.15; Wed, 20 Dec 2017 16:57:35 +0000 Subject: [PATCH] iommu/amd - Set the device table entry PPR bit for IOMMU V2 devices From: Gary R Hook To: yong.zhao@amd.com, linux-crypto@vger.kernel.org Cc: thomas.lendacky@amd.com, herbert@gondor.apana.org.au, davem@davemloft.net Date: Wed, 20 Dec 2017 10:57:31 -0600 Message-ID: <151378905140.769.2045094569843732393.stgit@sosxen2.amd.com> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 X-Originating-IP: [165.204.78.1] X-ClientProxiedBy: MWHPR2201CA0042.namprd22.prod.outlook.com (10.172.59.16) To CY4PR12MB1208.namprd12.prod.outlook.com (10.168.167.7) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: aa9bb30a-d6ab-4146-8eae-08d547cac533 X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(5600026)(4604075)(4534020)(4602075)(4627115)(201703031133081)(201702281549075)(48565401081)(2017052603307)(7153060); SRVR:CY4PR12MB1208; X-Microsoft-Exchange-Diagnostics: 1; CY4PR12MB1208; 3:IpsJO5Nmh0HGtV6eoZNbf01X1i5LR3zMedOaisKoT/LVEHceDw6UNX3PJZ/KG8nHjLjn8omDcDRSFthnVnAnqOL7Z9bcXbErp8831RdRM/JRLxT8VTlYTJB4XBT6qxqr4w18DmrA/94D5IbDmjl2p3LI8C7SbBV8CseCtkoRHNoW5vqG+m04EP7T9AO+RK+LdM6c/cTHtmm2y8TruJ0C8WtNaeMyyVtrFf86QWt76VOvxDoeCJEMaozTykHEDJWB; 25:MTFTUyoblGILxa4jHjSETFSeikJ1Lqtb3vGIVocMecMml/scQLxxY2uLwrQsmCr4HZ3gXgeBSHUg+IiJhIqnEgWFfI6ou/ZO1Xn4wo9asb40tiucXvWe1guperl3himR2um649fT0CecVTog3c1XkAywLdENj+wb2zri++okSvZMJhs+qLhUr+T+3hK5I8QmVWf4hcMqztKstkWcub6DAkkCTyRdKE6C8yJs91TysewY1t87fdljHepFYBAjstJ/lxd72bhc/B2zLqTSSZF/YRYaW445Y9Oy1/eC4As3QriIAXqNChDb2Opb4LcQdqDIFHSKllhkjazSPXj4nYUfVQ==; 31:JVI7C832hA20NO+3hEURdKvWZSou5ED43BIeu16XTO1ShX+nZdC76Qz1tSmDLDSKuaTiYrH2xmgn8bDGTB1TF6Pgl3MYFZvePHcyLbXpphJI9ZBwFqb8IAGW/oW9RBWMY/mbc/NdPswEJ37rnFwKXBJpsG/LEb97Bd9yQjayyK9wWbekHuokc/vM67KvnJhXB8c9ip6hiIqp2JIwTFRZBB9w9XjdFNjp/LhpwPuyKmM= X-MS-TrafficTypeDiagnostic: CY4PR12MB1208: X-Microsoft-Exchange-Diagnostics: 1; CY4PR12MB1208; 20:8TNnHaT8F+4+Nj/sN6KUGvU3iI9hOWCRA1Zm5Dl18B2960PDR8FfVNOvOv370s/VAzfaJRZCxRHp2V8stdeprrkV0NdCeXoDV7T0TGwzhJ05QbYCalLj05eUIE9c+6Rt1uNTeL9Vcm6kuRBJUuxYlZO54glx9eMHduEeAT4Qp9aPvingiQNqN8paERCmbcIxX0HDUuplAkos0pRs+EIQTyL07lZEv6nVIB1DbWEFu6fj//5JBEvTj1lSHNCHdk77itE5kTFMZd2BqdxpuMHa0htM9+UwzQlNUuQujAzbYQvwhzDIgzXOb9Rjo6FCiLxe6zGhSp1u6T0540KMTsDggOjBeWxzXCH1A8XgFqSB1ss61gSWlZAascuW7EPkZ9cTJTX/e1bvMoieOpCwIQ3oRfxRMRFakB23IlbF5qFB9cMhf1kacp+YO/zOGBfdtfLQtoVoAVHvisEa2IM4q8IAEaQqRFnahL7epISyv4ayB85yeLLLUFwBLXtwLdMqLEB4; 4:naHHI4GximzNFRCiy2uZVL0QvdDrzHU50j4ba/3uWQ7eCchCLwsIUOpx7N/J0rszqeHymQSG+1JGNSFhClsdRdWNt/UBfFmImhe7npEra8pp2v9YBAe+YJzt+fr7B6d4CWHa7Cq+RKnuO+THHeWtxeYzil5aaC+ihT7WnTENHWe9ht5rrMhoENWPlBEgCgdxEZiRJdEfe5nIWreMRJWBf3W33fK/FGF5aoVfuKsuTvJJxsAvVhVZIm91sDDxQ7l2R86NgM9G/H3r0dDPFpQn8zdI11tYgcPegJ8cmSZ37jlRo1wcLTVJQll+2ShJXEKA X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(767451399110); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040470)(2401047)(8121501046)(5005006)(10201501046)(93006095)(93001095)(3231023)(3002001)(6055026)(6041268)(20161123560045)(20161123564045)(20161123562045)(20161123558120)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(6072148)(201708071742011); SRVR:CY4PR12MB1208; BCL:0; PCL:0; RULEID:(100000803101)(100110400095); SRVR:CY4PR12MB1208; X-Forefront-PRVS: 0527DFA348 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(979002)(396003)(346002)(366004)(39380400002)(39860400002)(376002)(199004)(189003)(86362001)(58126008)(50466002)(47776003)(25786009)(66066001)(316002)(6666003)(83506002)(8936002)(4326008)(5890100001)(16526018)(53936002)(97736004)(68736007)(7736002)(8676002)(81156014)(478600001)(72206003)(55016002)(966005)(103116003)(5660300001)(230700001)(305945005)(6116002)(52116002)(2486003)(105586002)(23676004)(59450400001)(386003)(53416004)(6306002)(7696005)(2906002)(81166006)(106356001)(3846002)(969003)(989001)(999001)(1009001)(1019001); DIR:OUT; SFP:1101; SCL:1; SRVR:CY4PR12MB1208; H:sosxen2.amd.com; FPR:; SPF:None; PTR:InfoNoRecords; A:1; MX:1; LANG:en; Received-SPF: None (protection.outlook.com: amd.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtDWTRQUjEyTUIxMjA4OzIzOjJMR3RhQjQrM1pHNXhtMnFsSHJTZHMwZHpN?= =?utf-8?B?WUN6TEJrT3lVM2U2RlpCcndqNXVKUU1wTERLSTRaejU2c2l3azZjb1pXSnV1?= =?utf-8?B?SEdWaHJIZHhsc1VMajV3R3g4RGlGSVRKQlEzb21VaFprTzZiSDd3VWNYZmRU?= =?utf-8?B?UWcrcmJoNTJHUE02MW1PQk8wS2xIc1dxeGppd21Yb2F6NWpsd1lKTTRBVkYv?= =?utf-8?B?K29iSWxraU1kWmNYK2pweUNLTk5aL3hkblpoUFdKMGU0amRUM2lDWXR3MU1O?= =?utf-8?B?Z0ZpaFpMYzhLS1FhaG9xS2FLaTFnYmp6eUtaVFZQRGVKZThmSFlXWThQckxs?= =?utf-8?B?dnZJekx3c1VNUFBhVlpRYnh1dm9sNTRiMDk0MHcvaHBUUDNwb2U1Tll1U2lH?= =?utf-8?B?bXo2UmtYbWlHRHV2M1NmYS9tZDNzMEJSWm5KWk1wWmVNeEVFa0hieTRkeUNz?= =?utf-8?B?WkZITzFjQ0VrYUhEOC9HSFlsS1FMZUZYZWE0cUVzdVI5MlNicEFTKzRNaFpY?= =?utf-8?B?WXpKQ3RpS2J5c0FUN1VTZWhEVEJkVXdJV3VBNHNEUG85ZHZhd2FtR2N2dWFM?= =?utf-8?B?cVJEQ0Izem9PR2tuYkxMQ1o3aFNRRCs1N09wR1dtbHlqV043b2x1VGs2YmFw?= =?utf-8?B?VkV6WVVHalZ6a21jeG1RNjZRd05iczhMUTAwZXoxMEprRDVRbmVUcFIyTDdz?= =?utf-8?B?Y2M0aG53SUt6aS9sRjJRMHE4bEpNTmlibE1GbWQ2NHVvODJRNFBmVGxWWHow?= =?utf-8?B?b3kzODFYYjR1aVNQR3l6czkrVE0yL2VGUlJXZlpuejBIYjBVU1lJVW1Zbktt?= =?utf-8?B?bU94NHpxWGhyVjBRT1hBWDREQkNRcy9iU3N6SUtobS8xOUpEQU9QQ0h0cDFP?= =?utf-8?B?REsxSkZsVnorUVdKbWQrdkoxT3NMd3p4U20yTmsyYkRPVmpsSXBlbW91NkJz?= =?utf-8?B?d1R1T0l1RGp3eXRDRDdjNDJYMVFvNlp5TEtocW96elRHTk9JK1JERTExQ056?= =?utf-8?B?dUJrUHovUkNOWUNETWQ3dllPRUExZGIvd1p3VG16YzNGUU1pdWhvRWZEdWVu?= =?utf-8?B?d09ma2REc0lGb2p0aWtPTWk0Wklpb21aMGZjMmhRVFZjRGZiUUw1TWFQQk9W?= =?utf-8?B?ZHVVT1lZM0Z6WU9OaHhNUUljT1MwODlsQkdSclU0d0d1VmZvMHZQWUkwcGpE?= =?utf-8?B?blVNU2g5WnUweHc2MjlaTFRsdC9IZ3RwV0g4cS83VG90M3laWTkwaWd1Z0Ir?= =?utf-8?B?TXpKd2ZHa0FFL1BRMUJTVUtrTVF5b1REUjdBY1BXQ3QyMU92cW5xbUVMQXEw?= =?utf-8?B?R2xJbUhnWk9aK1BnbTF2QzE2Uk9wbW5xTktVQ0xNdnlKcmlaaFdiUS9NRWZK?= =?utf-8?B?ZEJ4dzJJQ001UFNpZUlacUk1WEx0Z28ybTNRODVFYzdXbHhIZjVoNFY4ZWxn?= =?utf-8?B?QUJ6QXkvZXhhVEVTMzVEcy9jY0IxOHZBNXI0T2M5dzlsNXB3anF6YWNHVHpx?= =?utf-8?B?SkY0dm1nR0JWdm9KelBYek04THR2WTJFREEvbHZ1REZ1WUJ3Y1BURUlFY0FZ?= =?utf-8?B?a21xZ1ltNkYxNGtZaDFwcWxZOXdDT0E3R05HL1NJOC8vNGJQeUlBNy9kOWJL?= =?utf-8?B?c280enVaWGg2SWJkRmdXS09hZlhmLzVWRWNvOWRmYUhvUDFVMkppVE5ueWk4?= =?utf-8?Q?BFT59++W5ZpGqSqcKA=3D?= X-Microsoft-Exchange-Diagnostics: 1; CY4PR12MB1208; 6:KtBu2P0q7oDOV0ymlnF0IqWN25g64ZoIshjkImrHV5aBr9bgL6zwz69juqphHWuLTG9zQwC6Qj2jTQV2Eh4sJmlAXitqBnJyS31O9LGifc9U+DeOWygxWi5oqpid1JT6QPPN9+KVcZKb5s8oHv0+ItRufa1He5F5ntGAPaN0pPodzHjP2DxG+OtMZ6xJSTelkTR+AstxBassTkb+pn7dqsD6ULA7z0RplkVhnQxoOZsrj0R6QtJI18vFfuruJtm4XaEUR+M094etzuNsoUMHbCoN4x18JTAZJ2nLMkEZu5AJ45jjPDJbBC5/3R8VZ/Vfj3LtYeu73vbN0A/IvT1vz5kJ4P/OC29ziwg38VDGjrk=; 5:Ja/mKXzn1FDtRjG86LcHEeVSy8TNxtFkDGctWRhxrqLA+r/KKo+b9qguXRrynXh6/9X4wKZ2XtWOZsHlCfuQ9l+8ihTni9iM19kuumDrqWMY97i8MlvB2NH5PYFAlfsAYi4UVg4m4eBOLhEWHNGwVV+Zw0/TQa1q/LCZMSf0bPs=; 24:jLbWzVNXyRKxRp6Rd7Vq4qnRna18YGZsiAyuzlJdR1YNpd0K+wQhglUXDgslZ+8Xbe3tffdu+MfA+6EY4oVb2MIroKzkOHMGs4jvh91wxYY=; 7:n0ydr4/HM/WRObNDLsc/aqet9wUkY8Leu8lw71yyxxlzi69UmUOdk2cEcRNBc3p9cYttktvQfv8+AN/aCQWLWTQitg0nGFYE4ris9I/HlnLpnRLWXZjjUJwhV10KwePQ0sxN1/EqHNPSL7xcB068K9Q0LNJBlZpGbns9p4l0bjGwgJESmc1e+uH5I7EIKi4aZBuTdW3ET6aFrc/zfscx+XsA/TMmDTH7cmVn7V0yw4c6pcxd6+FGgX9M8ox3fXkX SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; CY4PR12MB1208; 20:OdiLvyFjPes49y8zestDoyHOk8DeB52cuAw9Htu5GIwlF0HOHWvD0P5VpB9MJR47bJFRt5hAzzef6dQS9dN05luqVJLf8bOsAPUSRvv9DKglKUaEDxfCdjwtAQokwyij0QclJ4gOVWzCNFNEnuoraAZbUGNnBUQuFrFvz3lfbVhuU2Pz3Ey1JN2WNCkicVyO5exBx3SKW8/jbIZnzn2Uqr8MQSpWTL4vuUedCasuMBESah6uL5cgO/LSl3Vs7Nn7 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Dec 2017 16:57:35.2280 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: aa9bb30a-d6ab-4146-8eae-08d547cac533 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR12MB1208 Sender: linux-crypto-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-crypto@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP The AMD IOMMU specification Rev 3.00 (December 2016) introduces a new Enhanced PPR Handling Support (EPHSup) bit in the MMIO register offset 0030h (IOMMU Extended Feature Register). When EPHSup=1, the IOMMU hardware requires the PPR bit of the device table entry (DTE) to be set in order to support PPR for a particular endpoint device. Please see https://support.amd.com/TechDocs/48882_IOMMU.pdf for this revision of the AMD IOMMU specification. Signed-off-by: Gary R Hook --- drivers/iommu/amd_iommu.c | 20 +++++++++++++++----- drivers/iommu/amd_iommu_types.h | 2 ++ 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/drivers/iommu/amd_iommu.c b/drivers/iommu/amd_iommu.c index cb78933ef53f..5f3da95ff6a0 100644 --- a/drivers/iommu/amd_iommu.c +++ b/drivers/iommu/amd_iommu.c @@ -1818,7 +1818,8 @@ static bool dma_ops_domain(struct protection_domain *domain) return domain->flags & PD_DMA_OPS_MASK; } -static void set_dte_entry(u16 devid, struct protection_domain *domain, bool ats) +static void set_dte_entry(u16 devid, struct protection_domain *domain, + bool ats, bool ppr) { u64 pte_root = 0; u64 flags = 0; @@ -1835,6 +1836,13 @@ static void set_dte_entry(u16 devid, struct protection_domain *domain, bool ats) if (ats) flags |= DTE_FLAG_IOTLB; + if (ppr) { + struct amd_iommu *iommu = amd_iommu_rlookup_table[devid]; + + if (iommu_feature(iommu, FEATURE_EPHSUP)) + pte_root |= 1ULL << DEV_ENTRY_PPR; + } + if (domain->flags & PD_IOMMUV2_MASK) { u64 gcr3 = iommu_virt_to_phys(domain->gcr3_tbl); u64 glx = domain->glx; @@ -1897,9 +1905,9 @@ static void do_attach(struct iommu_dev_data *dev_data, domain->dev_cnt += 1; /* Update device table */ - set_dte_entry(dev_data->devid, domain, ats); + set_dte_entry(dev_data->devid, domain, ats, dev_data->iommu_v2); if (alias != dev_data->devid) - set_dte_entry(alias, domain, ats); + set_dte_entry(alias, domain, ats, dev_data->iommu_v2); device_flush_dte(dev_data); } @@ -2278,13 +2286,15 @@ static void update_device_table(struct protection_domain *domain) struct iommu_dev_data *dev_data; list_for_each_entry(dev_data, &domain->dev_list, list) { - set_dte_entry(dev_data->devid, domain, dev_data->ats.enabled); + set_dte_entry(dev_data->devid, domain, dev_data->ats.enabled, + dev_data->iommu_v2); if (dev_data->devid == dev_data->alias) continue; /* There is an alias, update device table entry for it */ - set_dte_entry(dev_data->alias, domain, dev_data->ats.enabled); + set_dte_entry(dev_data->alias, domain, dev_data->ats.enabled, + dev_data->iommu_v2); } } diff --git a/drivers/iommu/amd_iommu_types.h b/drivers/iommu/amd_iommu_types.h index f6b24c7d8b70..6a877ebd058b 100644 --- a/drivers/iommu/amd_iommu_types.h +++ b/drivers/iommu/amd_iommu_types.h @@ -98,6 +98,7 @@ #define FEATURE_HE (1ULL<<8) #define FEATURE_PC (1ULL<<9) #define FEATURE_GAM_VAPIC (1ULL<<21) +#define FEATURE_EPHSUP (1ULL<<50) #define FEATURE_PASID_SHIFT 32 #define FEATURE_PASID_MASK (0x1fULL << FEATURE_PASID_SHIFT) @@ -192,6 +193,7 @@ /* macros and definitions for device table entries */ #define DEV_ENTRY_VALID 0x00 #define DEV_ENTRY_TRANSLATION 0x01 +#define DEV_ENTRY_PPR 0x34 #define DEV_ENTRY_IR 0x3d #define DEV_ENTRY_IW 0x3e #define DEV_ENTRY_NO_PAGE_FAULT 0x62