Received: by 2002:a05:6a10:9848:0:0:0:0 with SMTP id x8csp1075538pxf; Fri, 12 Mar 2021 00:59:55 -0800 (PST) X-Google-Smtp-Source: ABdhPJwDxOR/t035SwDD9oZGBMETD7ltJV9pl7MjywBX5LX39cVdv0rU3nRWKrqHy+X5E7FkxPdT X-Received: by 2002:a17:906:1746:: with SMTP id d6mr7607988eje.36.1615539595130; Fri, 12 Mar 2021 00:59:55 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1615539595; cv=pass; d=google.com; s=arc-20160816; b=uo4O8RSoLpiJ0bm2LJJSgLdwqCipevUjWatn/kdXwm5Up04Yz2hK9efNdtQiJLbNrX OjQjMtyG/3VnKsQAIE+oEndDGU6DW9RO7Skqf7T3nz2N6ziJ6faZfEYKuDASRFVOTO1v u9uPWBP75YaUQAX0VdcZyFf3MeubXOabLcTuV4e9L7AXyLfcg3EgTsna7v1Q4pS64PaW lAiCvMQi68RU8kpvK4itfru+yZx+GbCbkSznj+E+lguD0fSr5eWB4Z89Y/KfBUBrQ8b1 o3qqTcmhgxes9rp70wKk+R+tBQ4IUBUExzmdx/fQNUEEsP8/nNR65vsLU2iO7TQTP7Iy fitQ== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:references:in-reply-to:message-id :date:subject:cc:to:from:dkim-signature; bh=kp00RgzTlDfb/okqSIV6M3N9sErA+psNz0tvHQixVXk=; b=eGGQAQXB8JykXMJow8+C3eEYWv6sINs3nrf2/tor96ogqC0XA5Q/9Kqa3X90BUc0JF N4Ui7Gxvaw8pHhvUozSoTvI3748cP2Jy9S9WW8zdHyWOBN6b0BDw8SQT8K8k7CHN29Mf D8WCfBIffK+Vtn7UJdLS8sed15w0BEYMdsSYsA2ZsFIU54d2TKjTKe6XzgIVArQqrJkg MGpKZwsr2R0hVTh7h13fmn9hdf6MERBDxHaSHJbb5MrEDZVT9C76NPkd0BlJsq42xbt2 kKgAtHkdunNKlW9Ew8XQ+Kd3EiFVvpXVXA121lHuTrZMeK5M5o4FyPcSTEw7OGvfgfq7 RnLw== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@amd.com header.s=selector1 header.b=SAWovRuB; arc=pass (i=1 spf=pass spfdomain=amd.com dkim=pass dkdomain=amd.com dmarc=pass fromdomain=amd.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=amd.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id y3si3646138eds.265.2021.03.12.00.59.32; Fri, 12 Mar 2021 00:59:55 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@amd.com header.s=selector1 header.b=SAWovRuB; arc=pass (i=1 spf=pass spfdomain=amd.com dkim=pass dkdomain=amd.com dmarc=pass fromdomain=amd.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=amd.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232675AbhCLIz5 (ORCPT + 99 others); Fri, 12 Mar 2021 03:55:57 -0500 Received: from mail-mw2nam12on2080.outbound.protection.outlook.com ([40.107.244.80]:16736 "EHLO NAM12-MW2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S232593AbhCLIzW (ORCPT ); Fri, 12 Mar 2021 03:55:22 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=TNsx7Lu0Rac8AXDUx2mi51Wsgmp/xJSsJ7elDMtomG1inVnRT+oAVZ6vJK9luQgKKnrU3LiXjgvUNyo0vD9d5U8PmZaPmKTnkkjrRkXRRNImOHsdAJgIENDCUDfr7VW09mmVxufkxjUY0Z4bDzc1xbnli1Ks2kXetEOsTTVxsm4QY113GMj+QRGvsiDOQMB4tC4YrWkQekKQVHqiyM+KFpYPLJry5h+Kc9feq6ICML5YzDcVKmukGWp+bxGyc3mlo5s9Ffvkxldtn2UwpT3T+bul51+gtM3MernhsuZo0ZcVzUtXMMUf9oK6D0CcFrTlaqUD8fRiwsOtHmigA8tiDg== 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-SenderADCheck; bh=kp00RgzTlDfb/okqSIV6M3N9sErA+psNz0tvHQixVXk=; b=RbFMYQVw4JkumW9kmZfEU1ttZrOXWmUQE303Z/mz71YTfQwViVK3mRY+Yo41uOxDy+yu45J2QDCOsPka4TXkg7yZa6YBv8jLYQ8wKOxRZr+nD8PtsTgy0rf3Yo37Cy/4FV5UyTofx4D/ci0jgf0k76SMH9bCCeBSg11MvhnQzVutbYm1551eP7A56wbs5hoUSd+Vs8WPzU/mlUPteIowC8zv5hXTfszrSINHhU/9hJoa+e+w1U8Y8RnrLil81vNO7xAng0n5Sybf0L+B3HL9iuLrsMRMJKpU9CVdVIBMUAq99YZP4eeJlLPnek2iMpK2l+PjmFn4dpec9la+GWzdbg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=amd.com; dmarc=pass action=none header.from=amd.com; dkim=pass header.d=amd.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=kp00RgzTlDfb/okqSIV6M3N9sErA+psNz0tvHQixVXk=; b=SAWovRuB9hPoQTW0QjiMny7m9O55HiJnpFyf5FzIQNGi4HsYWoCyjrGy9iRTp8wl9zoiApnqhaLrb7dWk741pTpUlal4oRg8dki2lQsV4w4WjUeYLtpx9/kB6DG8eCa433dGuuhrbUiqOkhR/+dFjhvXANg1zBTRUneCZX/l5jQ= Authentication-Results: vger.kernel.org; dkim=none (message not signed) header.d=none;vger.kernel.org; dmarc=none action=none header.from=amd.com; Received: from BYAPR12MB4597.namprd12.prod.outlook.com (2603:10b6:a03:10b::14) by BYAPR12MB2840.namprd12.prod.outlook.com (2603:10b6:a03:62::32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3846.25; Fri, 12 Mar 2021 08:55:19 +0000 Received: from BYAPR12MB4597.namprd12.prod.outlook.com ([fe80::a95a:7202:81db:1972]) by BYAPR12MB4597.namprd12.prod.outlook.com ([fe80::a95a:7202:81db:1972%7]) with mapi id 15.20.3912.031; Fri, 12 Mar 2021 08:55:19 +0000 From: Suravee Suthikulpanit To: linux-kernel@vger.kernel.org, iommu@lists.linux-foundation.org Cc: joro@8bytes.org, Jon.Grimm@amd.com, Wei.Huang2@amd.com, Suravee Suthikulpanit Subject: [RFC PATCH 5/7] iommu/amd: Add support for Guest IO protection Date: Fri, 12 Mar 2021 03:04:09 -0600 Message-Id: <20210312090411.6030-6-suravee.suthikulpanit@amd.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20210312090411.6030-1-suravee.suthikulpanit@amd.com> References: <20210312090411.6030-1-suravee.suthikulpanit@amd.com> Content-Type: text/plain X-Originating-IP: [165.204.78.2] X-ClientProxiedBy: SN7PR04CA0040.namprd04.prod.outlook.com (2603:10b6:806:120::15) To BYAPR12MB4597.namprd12.prod.outlook.com (2603:10b6:a03:10b::14) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from ethanolx5673host.amd.com (165.204.78.2) by SN7PR04CA0040.namprd04.prod.outlook.com (2603:10b6:806:120::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3912.18 via Frontend Transport; Fri, 12 Mar 2021 08:55:18 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: 32a1fc37-817b-485f-b026-08d8e534902f X-MS-TrafficTypeDiagnostic: BYAPR12MB2840: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:1013; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: KgJAfTlS8B9VsGt4gzGACYgZxo+9FV+0hEVjD1peBEZok+f167RnhHC39bSlHPR4a+y+w1R4B4uU7KWcIal21HxEG0CXLMWXvF0P9eazS05EUn9aqRWt0/UKe6s0OgH9ixn9Lqil5S5qxS3iSHUu0QB4HBK2U82PBQgkt5CtTL7YLroF0Ho1NYHJ670TQiuqlt2gFAdbcSwvGXWhTEk8vxGDqRyys5q4QRr07g8X2rpcLEJVwh1w06Xlt9GUdFSaKrlTi2xKjWgRMMh46HItbmaRuGL7JrHqYHH2XrUV9CSNFqBx8NBg27aiTHpPZQ7aymadd6ZysR0VyqUTRWWLnzBpde6/B/v8BDy3TW7sO6mYUA+ffgriMavfpQKWuMmZ56DhTqW4tYTA0jVoCRXVMMlnYMR71YiDx4Ozdl1oAbL6s0CFqnZO8i+oq/7D9K7OiKyAXKFA8dcL2VFUzwPIeSrEWGoK9324zdeTLZ+aHTo85Owhuj5pYDtRrnPejy4M//lbpAxz6oVjkEvYWwE3YA== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR12MB4597.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(366004)(39860400002)(376002)(396003)(346002)(136003)(8936002)(36756003)(86362001)(2906002)(8676002)(316002)(1076003)(26005)(956004)(2616005)(66946007)(6666004)(186003)(6486002)(5660300002)(7696005)(16526019)(44832011)(66556008)(52116002)(4326008)(66476007)(478600001)(83380400001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData: =?us-ascii?Q?AQ5/htT73mV6wnhjxTg1a1QBbpeR6zgit27kn7ikwZhA/G/CUG+StsPGNX/z?= =?us-ascii?Q?5d24QTZTwqIq5PT9u3dTC/pCnbiwu+M57P26ishjh3t2CI7mjQzop5JCPXjl?= =?us-ascii?Q?PT95DFkiVjeKbEjq6kzecPuGV59pw4ly7EWAdZNW1Pe2zGU++wyf8d9Ok77S?= =?us-ascii?Q?AMlIfOgSelRsPYLylRKhAnv4j9Iv1FKiZvSqDGGPkoaBRijwOxL/1d1s9oBv?= =?us-ascii?Q?qPRJqzs1FjOu284v8H2a15mhvJq3/+UGSVKf66PbgtnSIlkn3ceGW71n7jYA?= =?us-ascii?Q?NRX0I+vp0uF7LgO+yz+XBYnHXjI5yyg3TlBnfDPQrsZOJUJG54XEh3fDoXMK?= =?us-ascii?Q?kcwu9UcYgYUQiSiwsEcuxjOKLJaZ8fUKr9pKzjub9iCYOtEdMTyW53iJxp7h?= =?us-ascii?Q?0aqxst9L3j7qAQUkQqFVYuIJfguxWuqWpPTZXdFwHKRmAU6j1VqP6s1+ukf0?= =?us-ascii?Q?eVEXKhuB5OXtoWLTD4eqPoR7IuJVm6xlh5h6exxc65ojykWg1mcQsE8Y5Hbi?= =?us-ascii?Q?/DxgKj5gaGL3P238LKyWORr3s09l2YbfBKh5cfbfkj9A93UsqjHHFoOPWzTF?= =?us-ascii?Q?S3bYdtYyNAjI3Fx56o+8Jdr3+hwBDIJb6qrEWtgQwoRmMI1+bpV9WYwPkJiw?= =?us-ascii?Q?32V7e0ZWDWkswG9ZPd969iZIKM4EzJB/70hu/h6sh9ZbG71SYhGBkAs//fu+?= =?us-ascii?Q?e7iFs0NYVfMvafpvW5dDSXeLpYhQ0O6eijn4EQaG2zshOwePn8EGs5aBK7lY?= =?us-ascii?Q?Jd/czVx7Q8zTqoQXX7dbxameEi/BqZrs3e/e+PBFcAwML5Eo6V9aLm9CMhOe?= =?us-ascii?Q?cr1ViPJE/MeyU8Qg1DW5oinNNjSEMYK+yjuAJdfCrYt2POgiq2TUi572P8pd?= =?us-ascii?Q?rVWXI9PkSNL8y0+gcyaLzpzeOSu1iUeRrD20PkolaQ7x1xWHbi8jfQNmlRh0?= =?us-ascii?Q?xeOu5S+SeWuZEXyVRFnNLxHW/KesPMTT8GeYRx5i4i30mI+aga8M47z88X6R?= =?us-ascii?Q?bXjWdPgnn+i5dy/+DNH2rVdqnv3iBY4Uiv1nuxsywpWtbDNh7+zvMiL53bXi?= =?us-ascii?Q?EsyxXWxGMT/JOz7O2sAtYANrwyEtxCdt1MCRZYtcmsbEdanFYo9ZwU2BUATm?= =?us-ascii?Q?/4MUt3yN+kekBKIZPb98Ypjy9cDJuT1gjc3re0YzVu/LvVhjSspT4KXNvtlH?= =?us-ascii?Q?CiYcKpHEiIf9idxtkJ8m+WZtVVBpMDZ/KOFQXEsc63x9Fjcu8/9S1Ro65I7W?= =?us-ascii?Q?JGRF2a+nmzIr8kSbLFyAL19h4kzb98o5v8nopPusQMJ2sOHFpTsjChwTlGMk?= =?us-ascii?Q?a53srCdsuB0645plmZzr5u9b?= X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: 32a1fc37-817b-485f-b026-08d8e534902f X-MS-Exchange-CrossTenant-AuthSource: BYAPR12MB4597.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Mar 2021 08:55:19.5888 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: +dZXhXTrHPSLr0YJuK/i49v5WQ0zNYIjcvJ1kWMPQ9wlZdniTN1k0NaBqNT3hH3Kvulmf0pOeb4FYMClthGK3A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR12MB2840 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org AMD IOMMU introduces support for Guest I/O protection where the request from the I/O device without a PASID are treated as if they have PASID 0. Signed-off-by: Suravee Suthikulpanit --- drivers/iommu/amd/amd_iommu_types.h | 3 +++ drivers/iommu/amd/init.c | 8 ++++++++ drivers/iommu/amd/iommu.c | 4 ++++ 3 files changed, 15 insertions(+) diff --git a/drivers/iommu/amd/amd_iommu_types.h b/drivers/iommu/amd/amd_iommu_types.h index 25062eb86c8b..876ba1adf73e 100644 --- a/drivers/iommu/amd/amd_iommu_types.h +++ b/drivers/iommu/amd/amd_iommu_types.h @@ -93,6 +93,7 @@ #define FEATURE_HE (1ULL<<8) #define FEATURE_PC (1ULL<<9) #define FEATURE_GAM_VAPIC (1ULL<<21) +#define FEATURE_GIOSUP (1ULL<<48) #define FEATURE_EPHSUP (1ULL<<50) #define FEATURE_SNP (1ULL<<63) @@ -366,6 +367,7 @@ #define DTE_FLAG_IW (1ULL << 62) #define DTE_FLAG_IOTLB (1ULL << 32) +#define DTE_FLAG_GIOV (1ULL << 54) #define DTE_FLAG_GV (1ULL << 55) #define DTE_FLAG_MASK (0x3ffULL << 32) #define DTE_GLX_SHIFT (56) @@ -519,6 +521,7 @@ struct protection_domain { spinlock_t lock; /* mostly used to lock the page table*/ u16 id; /* the domain id written to the device table */ int glx; /* Number of levels for GCR3 table */ + bool giov; /* guest IO protection domain */ u64 *gcr3_tbl; /* Guest CR3 table */ unsigned long flags; /* flags to find out type of domain */ unsigned dev_cnt; /* devices assigned to this domain */ diff --git a/drivers/iommu/amd/init.c b/drivers/iommu/amd/init.c index 5def566de6f6..9265c1bf1d84 100644 --- a/drivers/iommu/amd/init.c +++ b/drivers/iommu/amd/init.c @@ -1895,6 +1895,12 @@ static int __init iommu_init_pci(struct amd_iommu *iommu) init_iommu_perf_ctr(iommu); + if (amd_iommu_pgtable == AMD_IOMMU_V2 && + !iommu_feature(iommu, FEATURE_GIOSUP)) { + pr_warn("Cannot enable v2 page table for DMA-API. Fallback to v1.\n"); + amd_iommu_pgtable = AMD_IOMMU_V1; + } + if (is_rd890_iommu(iommu->dev)) { int i, j; @@ -1969,6 +1975,8 @@ static void print_iommu_info(void) if (amd_iommu_xt_mode == IRQ_REMAP_X2APIC_MODE) pr_info("X2APIC enabled\n"); } + if (amd_iommu_pgtable == AMD_IOMMU_V2) + pr_info("GIOV enabled\n"); } static int __init amd_iommu_init_pci(void) diff --git a/drivers/iommu/amd/iommu.c b/drivers/iommu/amd/iommu.c index f3800efdbb29..e29ece6e1e68 100644 --- a/drivers/iommu/amd/iommu.c +++ b/drivers/iommu/amd/iommu.c @@ -1405,6 +1405,10 @@ static void set_dte_entry(u16 devid, struct protection_domain *domain, pte_root |= (domain->iop.mode & DEV_ENTRY_MODE_MASK) << DEV_ENTRY_MODE_SHIFT; + + if (domain->giov && (domain->flags & PD_IOMMUV2_MASK)) + pte_root |= DTE_FLAG_GIOV; + pte_root |= DTE_FLAG_IR | DTE_FLAG_IW | DTE_FLAG_V | DTE_FLAG_TV; flags = amd_iommu_dev_table[devid].data[1]; -- 2.17.1