From patchwork Tue Feb 16 14:56:58 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marek Szyprowski X-Patchwork-Id: 62047 Delivered-To: patch@linaro.org Received: by 10.112.43.199 with SMTP id y7csp1712184lbl; Tue, 16 Feb 2016 06:58:14 -0800 (PST) X-Received: by 10.98.19.215 with SMTP id 84mr31947401pft.22.1455634685735; Tue, 16 Feb 2016 06:58:05 -0800 (PST) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 70si51706761pfk.205.2016.02.16.06.58.05; Tue, 16 Feb 2016 06:58:05 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-samsung-soc-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-samsung-soc-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-samsung-soc-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932245AbcBPO5w (ORCPT + 4 others); Tue, 16 Feb 2016 09:57:52 -0500 Received: from mailout1.w1.samsung.com ([210.118.77.11]:22655 "EHLO mailout1.w1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932178AbcBPO5q (ORCPT ); Tue, 16 Feb 2016 09:57:46 -0500 Received: from eucpsbgm1.samsung.com (unknown [203.254.199.244]) by mailout1.w1.samsung.com (Oracle Communications Messaging Server 7.0.5.31.0 64bit (built May 5 2014)) with ESMTP id <0O2N00G9ZAW6WM30@mailout1.w1.samsung.com> for linux-samsung-soc@vger.kernel.org; Tue, 16 Feb 2016 14:57:42 +0000 (GMT) X-AuditID: cbfec7f4-f79026d00000418a-86-56c338e5b19f Received: from eusync3.samsung.com ( [203.254.199.213]) by eucpsbgm1.samsung.com (EUCPMTA) with SMTP id 23.96.16778.5E833C65; Tue, 16 Feb 2016 14:57:41 +0000 (GMT) Received: from amdc1339.digital.local ([106.116.147.30]) by eusync3.samsung.com (Oracle Communications Messaging Server 7.0.5.31.0 64bit (built May 5 2014)) with ESMTPA id <0O2N00BHIAVXJJA0@eusync3.samsung.com>; Tue, 16 Feb 2016 14:57:41 +0000 (GMT) From: Marek Szyprowski To: iommu@lists.linux-foundation.org, linux-samsung-soc@vger.kernel.org, linux-arm-kernel@lists.infradead.org Cc: Marek Szyprowski , Joerg Roedel , Inki Dae , Kukjin Kim , Krzysztof Kozlowski , Bartlomiej Zolnierkiewicz Subject: [PATCH 05/11] iommu: exynos: refactor code (no direct register access) Date: Tue, 16 Feb 2016 15:56:58 +0100 Message-id: <1455634624-18130-6-git-send-email-m.szyprowski@samsung.com> X-Mailer: git-send-email 1.9.2 In-reply-to: <1455634624-18130-1-git-send-email-m.szyprowski@samsung.com> References: <1455634624-18130-1-git-send-email-m.szyprowski@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFprPLMWRmVeSWpSXmKPExsVy+t/xq7pPLQ6HGcw7o2mxccZ6VotJ9yew WCzYb23ROXsDu8XrF4YW/Y9fM1tsenyN1WLG+X1MFmuP3GV34PR4cnAek8emVZ1sHpuX1HtM vrGc0aNvyypGj8+b5ALYorhsUlJzMstSi/TtErgymppXMRbskak4sewiWwPjJfEuRg4OCQET iXvd8l2MnECmmMSFe+vZuhi5OIQEljJKPH46hR3CaWKS+L33GgtIFZuAoUTX2y42EFtEIF/i xd6/LCBFzAK/GCXOdbYzgSSEBfwlHqx8AVbEIqAqsW32JbBmXgEPiZ5/6xkh1slJ/H+5ggnk Ck4BT4mbn+NAwkJAJUd3TWCZwMi7gJFhFaNoamlyQXFSeq6hXnFibnFpXrpecn7uJkZIsH3Z wbj4mNUhRgEORiUeXg6PQ2FCrIllxZW5hxglOJiVRHj/vQIK8aYkVlalFuXHF5XmpBYfYpTm YFES5527632IkEB6YklqdmpqQWoRTJaJg1OqgbFaaxvntrVHMr3m8208dcLPQ0jjwqIPeStq dxQaxSX9qFhjMCF27poXTcWPdjt9vRQ9b/OJy7Ur/OZzfjJ+9iEhUk37Q9X35cqfFtgVX1FX WNVQ637nmu+Fa3sLDjH1vmO4p51Wo3s4cM+njpOqhuERW9U8fx3NWhVSOffK65OBkz9cbczI +9+qxFKckWioxVxUnAgAHzMJjjICAAA= Sender: linux-samsung-soc-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-samsung-soc@vger.kernel.org This patch changes some internal functions to have access to the state of sysmmu device instead of having only it's registers. This will make the code ready for future extensions. Signed-off-by: Marek Szyprowski --- drivers/iommu/exynos-iommu.c | 40 +++++++++++++++++++--------------------- 1 file changed, 19 insertions(+), 21 deletions(-) -- 1.9.2 -- To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html diff --git a/drivers/iommu/exynos-iommu.c b/drivers/iommu/exynos-iommu.c index bf6b826..4275222 100644 --- a/drivers/iommu/exynos-iommu.c +++ b/drivers/iommu/exynos-iommu.c @@ -254,50 +254,49 @@ static bool is_sysmmu_active(struct sysmmu_drvdata *data) return data->activations > 0; } -static void sysmmu_unblock(void __iomem *sfrbase) +static void sysmmu_unblock(struct sysmmu_drvdata *data) { - __raw_writel(CTRL_ENABLE, sfrbase + REG_MMU_CTRL); + __raw_writel(CTRL_ENABLE, data->sfrbase + REG_MMU_CTRL); } -static bool sysmmu_block(void __iomem *sfrbase) +static bool sysmmu_block(struct sysmmu_drvdata *data) { int i = 120; - __raw_writel(CTRL_BLOCK, sfrbase + REG_MMU_CTRL); - while ((i > 0) && !(__raw_readl(sfrbase + REG_MMU_STATUS) & 1)) + __raw_writel(CTRL_BLOCK, data->sfrbase + REG_MMU_CTRL); + while ((i > 0) && !(__raw_readl(data->sfrbase + REG_MMU_STATUS) & 1)) --i; - if (!(__raw_readl(sfrbase + REG_MMU_STATUS) & 1)) { - sysmmu_unblock(sfrbase); + if (!(__raw_readl(data->sfrbase + REG_MMU_STATUS) & 1)) { + sysmmu_unblock(data); return false; } return true; } -static void __sysmmu_tlb_invalidate(void __iomem *sfrbase) +static void __sysmmu_tlb_invalidate(struct sysmmu_drvdata *data) { - __raw_writel(0x1, sfrbase + REG_MMU_FLUSH); + __raw_writel(0x1, data->sfrbase + REG_MMU_FLUSH); } -static void __sysmmu_tlb_invalidate_entry(void __iomem *sfrbase, +static void __sysmmu_tlb_invalidate_entry(struct sysmmu_drvdata *data, sysmmu_iova_t iova, unsigned int num_inv) { unsigned int i; for (i = 0; i < num_inv; i++) { __raw_writel((iova & SPAGE_MASK) | 1, - sfrbase + REG_MMU_FLUSH_ENTRY); + data->sfrbase + REG_MMU_FLUSH_ENTRY); iova += SPAGE_SIZE; } } -static void __sysmmu_set_ptbase(void __iomem *sfrbase, - phys_addr_t pgd) +static void __sysmmu_set_ptbase(struct sysmmu_drvdata *data, phys_addr_t pgd) { - __raw_writel(pgd, sfrbase + REG_PT_BASE_ADDR); + __raw_writel(pgd, data->sfrbase + REG_PT_BASE_ADDR); - __sysmmu_tlb_invalidate(sfrbase); + __sysmmu_tlb_invalidate(data); } static void show_fault_information(const char *name, @@ -363,7 +362,7 @@ static irqreturn_t exynos_sysmmu_irq(int irq, void *dev_id) __raw_writel(1 << itype, data->sfrbase + REG_INT_CLEAR); - sysmmu_unblock(data->sfrbase); + sysmmu_unblock(data); clk_disable(data->clk_master); @@ -440,7 +439,7 @@ static void __sysmmu_enable_nocount(struct sysmmu_drvdata *data) __sysmmu_init_config(data); - __sysmmu_set_ptbase(data->sfrbase, data->pgtable); + __sysmmu_set_ptbase(data, data->pgtable); __raw_writel(CTRL_ENABLE, data->sfrbase + REG_MMU_CTRL); @@ -521,10 +520,9 @@ static void sysmmu_tlb_invalidate_entry(struct sysmmu_drvdata *data, if (MMU_MAJ_VER(data->version) == 2) num_inv = min_t(unsigned int, size / PAGE_SIZE, 64); - if (sysmmu_block(data->sfrbase)) { - __sysmmu_tlb_invalidate_entry( - data->sfrbase, iova, num_inv); - sysmmu_unblock(data->sfrbase); + if (sysmmu_block(data)) { + __sysmmu_tlb_invalidate_entry(data, iova, num_inv); + sysmmu_unblock(data); } clk_disable(data->clk_master); } else {