Received: by 2002:a5b:505:0:0:0:0:0 with SMTP id o5csp7131816ybp; Wed, 16 Oct 2019 04:22:19 -0700 (PDT) X-Google-Smtp-Source: APXvYqzuU2vDuR34+lYsEvGSWdpKU3/jwM3EMap6VAa51hmMCdxT73W7SM4vaFogUOJlyN2zNDqM X-Received: by 2002:a17:906:e8d:: with SMTP id p13mr39411930ejf.236.1571224939362; Wed, 16 Oct 2019 04:22:19 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1571224939; cv=none; d=google.com; s=arc-20160816; b=Na78JRYBIq3iZranooT35/WPvRYhF9iCJ6cDidGyyog6GZzdUk4c+yz7R1D1rI7k98 lTBXRAQtrv4ZZKCXcPKqakM7gJuOlzYoI6tQeoJK1fGBne2pfjHrgwLVNg93VRSyDcv7 OlUeEICEkcq5Y/j4HFQVoH0met78M0fAH64XAF11zrlHBq0nQwcHsj7az/RaPWBz/O5D dstaTDi0dSXYRBewk0YCQwMGxOCeXbdXPgEceVw5xVnytHjVKdFw0UtwVncbyDS+WMtX /LMiABro34Vzqus+74/Ij/rmfW24qDl8pdZJHw4RgdSS3XIAu30Kq0/2OZuMebcQ2RJK 1zdA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from; bh=1VSE4w/4q0V/rYS47d6He3/ZtMCkiqukDsPQFrW3E3E=; b=PkFtftVx0Q/VEWvn2KY44A/vWl7igyv14DFgM+uaJSGTDzSOiRKThsdCL9i/TIZBL7 cYgDKK/3mtCaCgb4Zfj+OJLymb5TqS4W237A+go4R/x23Ace+ZL9al9jJNfxSvgszQEt M4LutxyAsfyeEFzto+921KqKCf0nMidQfSm2TYxY6ZnYN9CHPAXpYo0lZXpVBvndcNGj e2kMIh4vjY2j+7ZCkFamYyIzoe3bY8iEKml5P4uss9A/LPI5rkvncRqB0kXc7NLdlifT s74OipT8aalUh3Q/H2VN2jALNEg/VfeIMq/SB8gR7Oee0oK6V3EdD3nc36tj9uT8EXCa o75w== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=mediatek.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id si9si15181268ejb.97.2019.10.16.04.21.55; Wed, 16 Oct 2019 04:22:19 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=mediatek.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2403966AbfJPDeQ (ORCPT + 99 others); Tue, 15 Oct 2019 23:34:16 -0400 Received: from mailgw02.mediatek.com ([210.61.82.184]:42698 "EHLO mailgw02.mediatek.com" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S2403911AbfJPDeN (ORCPT ); Tue, 15 Oct 2019 23:34:13 -0400 X-UUID: 8ecdb9dbaa284e0586e93ec9c31e477e-20191016 X-UUID: 8ecdb9dbaa284e0586e93ec9c31e477e-20191016 Received: from mtkcas06.mediatek.inc [(172.21.101.30)] by mailgw02.mediatek.com (envelope-from ) (Cellopoint E-mail Firewall v4.1.10 Build 0809 with TLS) with ESMTP id 1432395595; Wed, 16 Oct 2019 11:34:07 +0800 Received: from mtkcas08.mediatek.inc (172.21.101.126) by mtkmbs01n2.mediatek.inc (172.21.101.79) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Wed, 16 Oct 2019 11:34:03 +0800 Received: from localhost.localdomain (10.17.3.153) by mtkcas08.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1395.4 via Frontend Transport; Wed, 16 Oct 2019 11:34:02 +0800 From: Yong Wu To: Matthias Brugger , Joerg Roedel , Will Deacon CC: Evan Green , Robin Murphy , Tomasz Figa , , , , , , , , Nicolas Boichat , , , , Subject: [PATCH v4 5/7] iommu/mediatek: Move the tlb_sync into tlb_flush Date: Wed, 16 Oct 2019 11:33:10 +0800 Message-ID: <1571196792-12382-6-git-send-email-yong.wu@mediatek.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1571196792-12382-1-git-send-email-yong.wu@mediatek.com> References: <1571196792-12382-1-git-send-email-yong.wu@mediatek.com> MIME-Version: 1.0 Content-Type: text/plain X-TM-SNTS-SMTP: C5018E1BE821F0B12DBD3BFF81ED24D602A6050BF1D33E0E29578E761BD871EC2000:8 X-MTK: N Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Right now, the tlb_add_flush_nosync and tlb_sync always appear together. we merge the two functions into one(also move the tlb_lock into the new function). No functional change. Signed-off-by: Chao Hao Signed-off-by: Yong Wu --- drivers/iommu/mtk_iommu.c | 45 ++++++++++----------------------------------- drivers/iommu/mtk_iommu.h | 1 - 2 files changed, 10 insertions(+), 36 deletions(-) diff --git a/drivers/iommu/mtk_iommu.c b/drivers/iommu/mtk_iommu.c index 1d7254c..0e5f41f 100644 --- a/drivers/iommu/mtk_iommu.c +++ b/drivers/iommu/mtk_iommu.c @@ -173,12 +173,16 @@ static void mtk_iommu_tlb_flush_all(void *cookie) } } -static void mtk_iommu_tlb_add_flush_nosync(unsigned long iova, size_t size, +static void mtk_iommu_tlb_flush_range_sync(unsigned long iova, size_t size, size_t granule, void *cookie) { struct mtk_iommu_data *data = cookie; + unsigned long flags; + int ret; + u32 tmp; for_each_m4u(data) { + spin_lock_irqsave(&data->tlb_lock, flags); writel_relaxed(F_INVLD_EN1 | F_INVLD_EN0, data->base + REG_MMU_INV_SEL); @@ -187,21 +191,8 @@ static void mtk_iommu_tlb_add_flush_nosync(unsigned long iova, size_t size, data->base + REG_MMU_INVLD_END_A); writel_relaxed(F_MMU_INV_RANGE, data->base + REG_MMU_INVALIDATE); - data->tlb_flush_active = true; - } -} - -static void mtk_iommu_tlb_sync(void *cookie) -{ - struct mtk_iommu_data *data = cookie; - int ret; - u32 tmp; - - for_each_m4u(data) { - /* Avoid timing out if there's nothing to wait for */ - if (!data->tlb_flush_active) - return; + /* tlb sync */ ret = readl_poll_timeout_atomic(data->base + REG_MMU_CPE_DONE, tmp, tmp != 0, 10, 100000); if (ret) { @@ -211,22 +202,10 @@ static void mtk_iommu_tlb_sync(void *cookie) } /* Clear the CPE status */ writel_relaxed(0, data->base + REG_MMU_CPE_DONE); - data->tlb_flush_active = false; + spin_unlock_irqrestore(&data->tlb_lock, flags); } } -static void mtk_iommu_tlb_flush_walk(unsigned long iova, size_t size, - size_t granule, void *cookie) -{ - struct mtk_iommu_data *data = cookie; - unsigned long flags; - - spin_lock_irqsave(&data->tlb_lock, flags); - mtk_iommu_tlb_add_flush_nosync(iova, size, granule, cookie); - mtk_iommu_tlb_sync(cookie); - spin_unlock_irqrestore(&data->tlb_lock, flags); -} - static void mtk_iommu_tlb_flush_page_nosync(struct iommu_iotlb_gather *gather, unsigned long iova, size_t granule, void *cookie) @@ -239,8 +218,8 @@ static void mtk_iommu_tlb_flush_page_nosync(struct iommu_iotlb_gather *gather, static const struct iommu_flush_ops mtk_iommu_flush_ops = { .tlb_flush_all = mtk_iommu_tlb_flush_all, - .tlb_flush_walk = mtk_iommu_tlb_flush_walk, - .tlb_flush_leaf = mtk_iommu_tlb_flush_walk, + .tlb_flush_walk = mtk_iommu_tlb_flush_range_sync, + .tlb_flush_leaf = mtk_iommu_tlb_flush_range_sync, .tlb_add_page = mtk_iommu_tlb_flush_page_nosync, }; @@ -455,16 +434,12 @@ static void mtk_iommu_iotlb_sync(struct iommu_domain *domain, { struct mtk_iommu_data *data = mtk_iommu_get_m4u_data(); size_t length = gather->end - gather->start; - unsigned long flags; if (gather->start == ULONG_MAX) return; - spin_lock_irqsave(&data->tlb_lock, flags); - mtk_iommu_tlb_add_flush_nosync(gather->start, length, gather->pgsize, + mtk_iommu_tlb_flush_range_sync(gather->start, length, gather->pgsize, data); - mtk_iommu_tlb_sync(data); - spin_unlock_irqrestore(&data->tlb_lock, flags); } static phys_addr_t mtk_iommu_iova_to_phys(struct iommu_domain *domain, diff --git a/drivers/iommu/mtk_iommu.h b/drivers/iommu/mtk_iommu.h index 8cae22d..ea949a3 100644 --- a/drivers/iommu/mtk_iommu.h +++ b/drivers/iommu/mtk_iommu.h @@ -57,7 +57,6 @@ struct mtk_iommu_data { struct mtk_iommu_domain *m4u_dom; struct iommu_group *m4u_group; bool enable_4GB; - bool tlb_flush_active; spinlock_t tlb_lock; /* lock for tlb range flush */ struct iommu_device iommu; -- 1.9.1