From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933245AbcJTHXw (ORCPT ); Thu, 20 Oct 2016 03:23:52 -0400 Received: from mailout2.w1.samsung.com ([210.118.77.12]:23930 "EHLO mailout2.w1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753439AbcJTHXk (ORCPT ); Thu, 20 Oct 2016 03:23:40 -0400 X-AuditID: cbfec7f2-f79556d000002c42-b1-580870f6822e From: Marek Szyprowski To: linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org, iommu@lists.linux-foundation.org, linux-samsung-soc@vger.kernel.org Cc: Marek Szyprowski , Joerg Roedel , Inki Dae , Kukjin Kim , Krzysztof Kozlowski , Bartlomiej Zolnierkiewicz , "Rafael J. Wysocki" , Mark Brown , "Luis R. Rodriguez" , Greg Kroah-Hartman , Tomeu Vizoso , Lukas Wunner , Kevin Hilman , Tobias Jakobi , Tomasz Figa Subject: [PATCH v5 4/7] iommu/exynos: Set master device once on boot Date: Thu, 20 Oct 2016 09:22:50 +0200 Message-id: <1476948173-21093-5-git-send-email-m.szyprowski@samsung.com> X-Mailer: git-send-email 1.9.1 In-reply-to: <1476948173-21093-1-git-send-email-m.szyprowski@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAAzWSf0gTYRzGe+9ud7fVxTGXvWkJDSIw+x30lhUFZRcIWRSt/ihXHdNy03ZN ZhRp1qpFc7kiMS3TlbG5Vmsssx8zG1tZOFP7QaFRM4rUUJdBUdLm2X+fh+f5fp/3hS+Ny69K kuhc3UFer1PnKUkZ4Qv+apv7s4BWLfB/SES3K9wSdOFjL4lK69wkKv9gJVCNPx2dvnSLQmWR Phx9vhPBUDgck51NVSSKng0AVBF+hKGvX5KRK9BNobfWzwC9eN4hQSbnoAQ5mv4AZHF1kKsT uN7HlzGusdsOuHuV3RTncZwmOX91A8XZ3tYDbjRIcd5XJwnO4nUALupJ4SpO+iRZE3fIVuzl 83ILef38VdmynM7IX1BgVRjNw1eoYtDOmoGUhuwS6B70YiInwvYeNxlnOXsNwIvvM81AFuMo gNX219T/gbq+HiAa1wHsKu/HRVGMwdaeh0Q8RbILoXnATMYNBVsC4I9TdiwucPYTAU0ltSCe SmDXwt7Lg3icCXYWdH33jXUwLAdtN26SYl8KfBa0SeIsZTfA+w1nx+ogO0RBZ+lIrI6OiRnQ 04yL+bXQZHEBkRPgt5B3/N3TYaftDCFyGYDHTswRuQLAtgFG5HT4JPRyrAtnJ8Ny30VcXM/A Uya5GOFgf9Oz8fVrYNT+Y/z3VQBGW89gVjC9BkxwAAVvELQaXlg8T1BrBYNOM29PvtYDYofz fDQ03AhGni5vASwNlJOYnDZKJZeoC4UibQuANK5UMME8WiVn9qqLDvH6/F16Qx4vtIBkmlBO ZR7UdG2Tsxr1QX4/zxfw+v8uRkuTisEildaWTVsiR8s2eq1kYLeRmTLto3HldpmjcksRauV0 M6Qv3pNb+4d2jiD30nDzqiVpyzTuzcbjXX+jXtcnMjVjU36qXeI8vDkLD9cHzIXvMvTYuiTD gZnpGevP2dLuGjK3VIXOQ0UJPdu/D//pHD7CWGobfvdXCW82mTXtSkLIUS9MxfWC+h+B7Vj2 NAMAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFjrEIsWRmVeSWpSXmKPExsVy+t/xK7qXCjgiDHZcZrHYOGM9q8XUh0/Y LJoXr2ezmHR/AovFgv3WFp2zN7Bb9D9+zWzxdPNjJovz54Hcy7vmsFl87j3CaDHj/D4mixfP pS3WHrnLbnFjwlNGizOnL7FatK3+wGqxatcfRou+tZfYHIQ9nhycx+Sx4+4SRo+ds+6ye2xa 1cnmsX/uGnaPyTeWM3r8O8buseVqO4tH35ZVjB6fN8l5zGjfxhrAHeVmk5GamJJapJCal5yf kpmXbqsUGuKma6GkkJeYm2qrFKHrGxKkpFCWmFMK5BkZoAEH5wD3YCV9uwS3jMuP/zIWTBCp 6Po0n72B8YJAFyMnh4SAicTi1/cYIWwxiQv31rN1MXJxCAksYZQ4vHI7lNPEJDHn4S12kCo2 AUOJrrddYAkRgUZGiW1bJ7KDOMwCz1gkFvzYxgZSJSzgIvFk3gdmEJtFQFVi7bttYN28Ah4S k1esY4PYJydx8thkVhCbU8BTYveaXrB6IaCa9xvXMU5g5F3AyLCKUSS1tDg3PbfYSK84Mbe4 NC9dLzk/dxMjMP62Hfu5ZQdj17vgQ4wCHIxKPLwZ59gjhFgTy4orcw8xSnAwK4nwHsvhiBDi TUmsrEotyo8vKs1JLT7EaAp01ERmKdHkfGBqyCuJNzQxNLc0NDK2sDA3MlIS55364Uq4kEB6 YklqdmpqQWoRTB8TB6dUA2Pq0q8i1odDzmXLqPYl37w1RzFIrUqodp67MlPZ5ytbS1/2dZ9V ceRd76gWM7W/Xcdvn324gPgmOemudJvdrioJwWv3nHBdF/78G/e/5h+a1y8ddctattFG2nCb pn5bpc+NAs0NJp7xRvL8v/dsELf6/FTh+ungDSuastY0r9dRi94ft8JZVYmlOCPRUIu5qDgR AIIcw2DVAgAA X-MTR: 20000000000000000@CPGS X-CMS-MailID: 20161020072333eucas1p25b638379091939f10b3c9eb5d89a031e X-Msg-Generator: CA X-Sender-IP: 182.198.249.180 X-Local-Sender: =?UTF-8?B?TWFyZWsgU3p5cHJvd3NraRtTUlBPTC1LZXJuZWwgKFRQKRs=?= =?UTF-8?B?7IK87ISx7KCE7J6QG1NlbmlvciBTb2Z0d2FyZSBFbmdpbmVlcg==?= X-Global-Sender: =?UTF-8?B?TWFyZWsgU3p5cHJvd3NraRtTUlBPTC1LZXJuZWwgKFRQKRtT?= =?UTF-8?B?YW1zdW5nIEVsZWN0cm9uaWNzG1NlbmlvciBTb2Z0d2FyZSBFbmdpbmVlcg==?= X-Sender-Code: =?UTF-8?B?QzEwG0VIURtDMTBDRDAyQ0QwMjczOTI=?= CMS-TYPE: 201P X-HopCount: 7 X-CMS-RootMailID: 20161020072333eucas1p25b638379091939f10b3c9eb5d89a031e X-RootMTR: 20161020072333eucas1p25b638379091939f10b3c9eb5d89a031e References: <1476948173-21093-1-git-send-email-m.szyprowski@samsung.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org To avoid possible races, set master device pointer in each SYSMMU controller once on boot. Suspend/resume callbacks now properly relies on the configured iommu domain to enable or disable SYSMMU controller. While changing the code, also update the sleep debug messages and make them conditional. Signed-off-by: Marek Szyprowski --- drivers/iommu/exynos-iommu.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/drivers/iommu/exynos-iommu.c b/drivers/iommu/exynos-iommu.c index f45b274513cc..28e570b53672 100644 --- a/drivers/iommu/exynos-iommu.c +++ b/drivers/iommu/exynos-iommu.c @@ -600,10 +600,12 @@ static int exynos_sysmmu_suspend(struct device *dev) struct sysmmu_drvdata *data = dev_get_drvdata(dev); struct device *master = data->master; - dev_dbg(dev, "suspend\n"); if (master) { - __sysmmu_disable(data); pm_runtime_put(dev); + if (data->domain) { + dev_dbg(data->sysmmu, "saving state\n"); + __sysmmu_disable(data); + } } return 0; } @@ -613,10 +615,12 @@ static int exynos_sysmmu_resume(struct device *dev) struct sysmmu_drvdata *data = dev_get_drvdata(dev); struct device *master = data->master; - dev_dbg(dev, "resume\n"); if (master) { pm_runtime_get_sync(dev); - __sysmmu_enable(data); + if (data->domain) { + dev_dbg(data->sysmmu, "restoring state\n"); + __sysmmu_enable(data); + } } return 0; } @@ -730,7 +734,6 @@ static void exynos_iommu_domain_free(struct iommu_domain *iommu_domain) __sysmmu_disable(data); data->pgtable = 0; data->domain = NULL; - data->master = NULL; list_del_init(&data->domain_node); } @@ -772,7 +775,6 @@ static void exynos_iommu_detach_device(struct iommu_domain *iommu_domain, spin_lock_irqsave(&domain->lock, flags); list_for_each_entry_safe(data, next, &domain->clients, domain_node) { __sysmmu_disable(data); - data->master = NULL; data->pgtable = 0; data->domain = NULL; list_del_init(&data->domain_node); @@ -806,7 +808,6 @@ static int exynos_iommu_attach_device(struct iommu_domain *iommu_domain, data->domain = domain; pm_runtime_get_sync(data->sysmmu); __sysmmu_enable(data); - data->master = dev; spin_lock_irqsave(&domain->lock, flags); list_add_tail(&data->domain_node, &domain->clients); @@ -1192,6 +1193,7 @@ static int exynos_iommu_of_xlate(struct device *dev, } list_add_tail(&data->owner_node, &owner->controllers); + data->master = dev; return 0; } -- 1.9.1