Received: by 2002:a05:6a11:4021:0:0:0:0 with SMTP id ky33csp504224pxb; Thu, 23 Sep 2021 05:06:02 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzKPwlvdJ+fLj+wtSIayVT+CYfM0e0BXwmILjqPDQScy8VqQnl9NcZdBU8q1ZB/Uq30y38d X-Received: by 2002:a17:907:7703:: with SMTP id kw3mr4563109ejc.34.1632398762171; Thu, 23 Sep 2021 05:06:02 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1632398762; cv=none; d=google.com; s=arc-20160816; b=DQrZEoSzFcxBMV6vRjFD2whlImMhfJH0T8Ycy1cBdZNhxIC1h7ztrpwaCi2Hg0QMxC s0fgoi2PNUJ43/x8cxVEoI2E/dLIJif6Y2JRcWxwHGCSLJ9jmGMfwIv5LK0krgj4IcOa 77lb0rJggyQaEMANp3blva+c/NtA926GDlJsdIDUL/JO+XSxi7OrL9FDOg5p1zde1Wjf Z7b2qiEbjqWrN5zuX+MLU10WonBABcW9Gn2vB04rfmxrrv34IU+VGOqJ38K3skoLRFp+ hO93a7IWaZ6dJpkcGnjCRUwulGsCf0oq5+rUjrVZMP/Cnnyg+y3GozDYMC5kMQ9abLiW QGMw== ARC-Message-Signature: i=1; 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; bh=aOhvIO0FIAnocXaHP1h239GzbMwQWCO29jk/eOvB+VY=; b=g38MumodZULC+Lu+ephu6+sDrZctz2SeOUjcSgj6+eRVuvJQDYmF2WLyNUi2jObMsJ ro3jSekPwgUhYiu5V4Y1A3WAa1RngUhIj3bFUe1RjaWCRl0i4cWLwwXzdBMJl/RfDKWY SqjjbtEDuKRO6oKwN48y7PgGqiBGmC9o0ZYaULReHTBRXRDPPUKBYRp/blp8rn4Ul+x7 XaO+mhxlolakTKqLdhjyZu4RM+wrtkW+c0Y+HbWcE9F3Mfr3iCFtknKocWIhkUWKQu8r tq65w6KoQrS/Em/nOwVZttfJueQFwuRR8MxucKXvHRMxtp6C/a43QYyKWocYmRDBULDw zBhg== ARC-Authentication-Results: i=1; mx.google.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=fail (p=NONE sp=NONE dis=NONE) header.from=mediatek.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id n26si5789312ejd.436.2021.09.23.05.05.37; Thu, 23 Sep 2021 05:06:02 -0700 (PDT) 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; 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=fail (p=NONE sp=NONE dis=NONE) header.from=mediatek.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240838AbhIWMCw (ORCPT + 99 others); Thu, 23 Sep 2021 08:02:52 -0400 Received: from mailgw01.mediatek.com ([60.244.123.138]:52376 "EHLO mailgw01.mediatek.com" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S240821AbhIWMCt (ORCPT ); Thu, 23 Sep 2021 08:02:49 -0400 X-UUID: 0910dc122d474a15a1ae037b6dd89fee-20210923 X-UUID: 0910dc122d474a15a1ae037b6dd89fee-20210923 Received: from mtkcas06.mediatek.inc [(172.21.101.30)] by mailgw01.mediatek.com (envelope-from ) (Generic MTA with TLSv1.2 ECDHE-RSA-AES256-SHA384 256/256) with ESMTP id 1928541220; Thu, 23 Sep 2021 20:01:11 +0800 Received: from MTKCAS06.mediatek.inc (172.21.101.30) by mtkmbs07n2.mediatek.inc (172.21.101.141) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Thu, 23 Sep 2021 20:01:10 +0800 Received: from localhost.localdomain (10.17.3.154) by MTKCAS06.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Thu, 23 Sep 2021 20:01:09 +0800 From: Yong Wu To: Joerg Roedel , Rob Herring , Matthias Brugger , Will Deacon , Robin Murphy CC: Krzysztof Kozlowski , Tomasz Figa , , , , , , , Hsin-Yi Wang , , , , , Subject: [PATCH v3 13/33] iommu/mediatek: Remove the power status checking in tlb flush all Date: Thu, 23 Sep 2021 19:58:20 +0800 Message-ID: <20210923115840.17813-14-yong.wu@mediatek.com> X-Mailer: git-send-email 2.18.0 In-Reply-To: <20210923115840.17813-1-yong.wu@mediatek.com> References: <20210923115840.17813-1-yong.wu@mediatek.com> MIME-Version: 1.0 Content-Type: text/plain X-MTK: N Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org To simplify the code, Remove the power status checking in the tlb_flush_all, remove this: if (pm_runtime_get_if_in_use(data->dev) <= 0) continue; After this patch, the mtk_iommu_tlb_flush_all will be called from a) isr b) pm runtime resume callback c) tlb flush range fail case d) iommu_create_device_direct_mappings -> iommu_flush_iotlb_all In first three cases, the power and clock always are enabled; d) is direct mapping, the tlb flush is unnecessay since we already have tlb_flush_all in the pm_runtime_resume callback. When the iommu's power status is changed to active, the tlb always is clean. In addition, there still are 2 reasons that don't add PM status checking in the tlb flush all: a) Write tlb flush all register also is ok even though the HW has no power and clocks. Write ignore. b) pm_runtime_get_if_in_use(m4udev) is 0 when the tlb_flush_all is called frm pm_runtime_resume cb. From this point, we can not add this code above in this tlb_flush_all. Signed-off-by: Yong Wu --- drivers/iommu/mtk_iommu.c | 20 +++++++------------- 1 file changed, 7 insertions(+), 13 deletions(-) diff --git a/drivers/iommu/mtk_iommu.c b/drivers/iommu/mtk_iommu.c index e9e94944ed91..4a33b6c6b1db 100644 --- a/drivers/iommu/mtk_iommu.c +++ b/drivers/iommu/mtk_iommu.c @@ -204,10 +204,14 @@ static struct mtk_iommu_domain *to_mtk_domain(struct iommu_domain *dom) return container_of(dom, struct mtk_iommu_domain, domain); } -static void mtk_iommu_tlb_do_flush_all(struct mtk_iommu_data *data) +static void mtk_iommu_tlb_flush_all(struct mtk_iommu_data *data) { unsigned long flags; + /* + * No need get power status since the HW PM status nearly is active + * when entering here. + */ spin_lock_irqsave(&data->tlb_lock, flags); writel_relaxed(F_INVLD_EN1 | F_INVLD_EN0, data->base + data->plat_data->inv_sel_reg); @@ -216,16 +220,6 @@ static void mtk_iommu_tlb_do_flush_all(struct mtk_iommu_data *data) spin_unlock_irqrestore(&data->tlb_lock, flags); } -static void mtk_iommu_tlb_flush_all(struct mtk_iommu_data *data) -{ - if (pm_runtime_get_if_in_use(data->dev) <= 0) - return; - - mtk_iommu_tlb_do_flush_all(data); - - pm_runtime_put(data->dev); -} - static void mtk_iommu_tlb_flush_range_sync(unsigned long iova, size_t size, struct mtk_iommu_data *data) { @@ -263,7 +257,7 @@ static void mtk_iommu_tlb_flush_range_sync(unsigned long iova, size_t size, if (ret) { dev_warn(data->dev, "Partial TLB flush timed out, falling back to full flush\n"); - mtk_iommu_tlb_do_flush_all(data); + mtk_iommu_tlb_flush_all(data); } if (has_pm) @@ -993,7 +987,7 @@ static int __maybe_unused mtk_iommu_runtime_resume(struct device *dev) * * Thus, Make sure the tlb always is clean after each PM resume. */ - mtk_iommu_tlb_do_flush_all(data); + mtk_iommu_tlb_flush_all(data); /* * Uppon first resume, only enable the clk and return, since the values of the -- 2.18.0