From patchwork Thu Aug 31 08:20:39 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Xie Yisheng X-Patchwork-Id: 9931595 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 EB42F6022E for ; Thu, 31 Aug 2017 08:40:42 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id E174828882 for ; Thu, 31 Aug 2017 08:40:42 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id D596E2889C; Thu, 31 Aug 2017 08:40:42 +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=-2.6 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_LOW autolearn=unavailable version=3.3.1 Received: from bombadil.infradead.org (bombadil.infradead.org [65.50.211.133]) (using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 85E2A2889E for ; Thu, 31 Aug 2017 08:40:41 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=mUhSnTL+MCi0N7FddwTz6m0JmHLNlz/sl4vK5SmR2yU=; b=Zt91VwJ6EqLFds Dj9gQvJG1jl306VMBqVU1ma0yLcfolcH7A2gpwpRyqnvGMp2/LFA4y1ElDaLgKMsTRkvMvlIYSKg0 XtUaaLOTfJ0VSpvhAH3LWcwQzaOEZUld7+1k4pCABe6CbieuHxTK6b7YffzQCyttr+QCn+F78ke9k Yt6qB6OpNiEaa8IZx3CKw1PxrDefjnn+zKp+Zk9lgWv4RYXr9iCWBqzGDlqkJv7RrqBqc28IukRIb rUXlwVn/suNxq3h2sPtW4+YqdRzZXqmSb9guyEtk6m25qnPiEzXL9T5uC+zIgIxGfFjMrfxm4QTT9 ppPiy8VfCIfKCgU2fAGA==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.87 #1 (Red Hat Linux)) id 1dnL0e-0008AR-Pf; Thu, 31 Aug 2017 08:39:32 +0000 Received: from szxga04-in.huawei.com ([45.249.212.190]) by bombadil.infradead.org with esmtps (Exim 4.87 #1 (Red Hat Linux)) id 1dnKrO-0002EA-Kv for linux-arm-kernel@lists.infradead.org; Thu, 31 Aug 2017 08:30:03 +0000 Received: from 172.30.72.59 (EHLO DGGEMS402-HUB.china.huawei.com) ([172.30.72.59]) by dggrg04-dlp.huawei.com (MOS 4.4.6-GA FastPath queued) with ESMTP id DGG21821; Thu, 31 Aug 2017 16:29:12 +0800 (CST) Received: from linux-ibm.site (10.175.102.37) by DGGEMS402-HUB.china.huawei.com (10.3.19.202) with Microsoft SMTP Server id 14.3.301.0; Thu, 31 Aug 2017 16:29:02 +0800 From: Yisheng Xie To: Subject: [RFC PATCH 3/6] ACPI: IORT: Add stall and pasid properties to iommu_fwspec Date: Thu, 31 Aug 2017 16:20:39 +0800 Message-ID: <1504167642-14922-4-git-send-email-xieyisheng1@huawei.com> X-Mailer: git-send-email 1.7.12.4 In-Reply-To: <1504167642-14922-1-git-send-email-xieyisheng1@huawei.com> References: <1504167642-14922-1-git-send-email-xieyisheng1@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.175.102.37] X-CFilter-Loop: Reflected X-Mirapoint-Virus-RAPID-Raw: score=unknown(0), refid=str=0001.0A010202.59A7C8DA.000F, ss=1, re=0.000, recu=0.000, reip=0.000, cl=1, cld=1, fgs=0, ip=0.0.0.0, so=2014-11-16 11:51:01, dmn=2013-03-21 17:37:32 X-Mirapoint-Loop-Id: 91252059a907dec4d3577ba22f7f0394 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20170831_012959_157910_4BAA80EB X-CRM114-Status: GOOD ( 10.83 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: mark.rutland@arm.com, devicetree@vger.kernel.org, lorenzo.pieralisi@arm.com, lv.zheng@intel.com, will.deacon@arm.com, joro@8bytes.org, liubo95@huawei.com, rjw@rjwysocki.net, robert.moore@intel.com, linux-kernel@vger.kernel.org, linux-acpi@vger.kernel.org, iommu@lists.linux-foundation.org, robh+dt@kernel.org, hanjun.guo@linaro.org, xieyisheng@huawei.com, sudeep.holla@arm.com, chenjiankang1@huawei.com, devel@acpica.org, robin.murphy@arm.com, linux-arm-kernel@lists.infradead.org, lenb@kernel.org Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org X-Virus-Scanned: ClamAV using ClamSMTP According to ACPI IORT spec, named component specific data has a node flags field whoes bit0 is for Stall support. However, it do not have any field for pasid bit. As PCIe SMMU support 20 pasid bits, this patch suggest to use 5 bits[5:1] in node flags field for pasid bits which means we can have 32 pasid bits. And this should be enough for platform device. Anyway, this is just a RFC. Signed-off-by: Yisheng Xie --- drivers/acpi/arm64/iort.c | 20 ++++++++++++++++++++ include/acpi/actbl2.h | 5 +++++ 2 files changed, 25 insertions(+) diff --git a/drivers/acpi/arm64/iort.c b/drivers/acpi/arm64/iort.c index 4d9ccdd0..514caca3 100644 --- a/drivers/acpi/arm64/iort.c +++ b/drivers/acpi/arm64/iort.c @@ -710,6 +710,22 @@ static bool iort_pci_rc_supports_ats(struct acpi_iort_node *node) return pci_rc->ats_attribute & ACPI_IORT_ATS_SUPPORTED; } +static bool iort_platform_support_stall(struct acpi_iort_node *node) +{ + struct acpi_iort_named_component *ncomp; + + ncomp = (struct acpi_iort_named_component *)node->node_data; + return ncomp->node_flags & ACPI_IORT_STALL_SUPPORTED; +} + +static unsigned long iort_platform_get_pasid_bits(struct acpi_iort_node *node) +{ + struct acpi_iort_named_component *ncomp; + + ncomp = (struct acpi_iort_named_component *)node->node_data; + return (ncomp->node_flags & ACPI_IORT_PASID_BITS_MASK) >> ACPI_IORT_PASID_BITS_SHIFT; +} + /** * iort_iommu_configure - Set-up IOMMU configuration for a device. * @@ -772,6 +788,10 @@ const struct iommu_ops *iort_iommu_configure(struct device *dev) IORT_IOMMU_TYPE, i++); } + if (!IS_ERR_OR_NULL(ops)) { + dev->iommu_fwspec->can_stall = iort_platform_support_stall(node); + dev->iommu_fwspec->num_pasid_bits = iort_platform_get_pasid_bits(node); + } } /* diff --git a/include/acpi/actbl2.h b/include/acpi/actbl2.h index 707dda74..125b150 100644 --- a/include/acpi/actbl2.h +++ b/include/acpi/actbl2.h @@ -749,6 +749,11 @@ struct acpi_iort_named_component { char device_name[1]; /* Path of namespace object */ }; +#define ACPI_IORT_STALL_SUPPORTED 0x00000001 /* The platform device supports stall */ +#define ACPI_IORT_STALL_UNSUPPORTED 0x00000000 /* The platform device doesn't support stall */ +#define ACPI_IORT_PASID_BITS_MASK 0x0000003e /* 5 bits for PASID BITS */ +#define ACPI_IORT_PASID_BITS_SHIFT 1 /* PASID BITS numbers shift */ + struct acpi_iort_root_complex { u64 memory_properties; /* Memory access properties */ u32 ats_attribute;