From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933256AbcKNKKg (ORCPT ); Mon, 14 Nov 2016 05:10:36 -0500 Received: from mailout2.w1.samsung.com ([210.118.77.12]:31554 "EHLO mailout2.w1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753671AbcKNKJQ (ORCPT ); Mon, 14 Nov 2016 05:09:16 -0500 X-AuditID: cbfec7f1-f79f46d0000008eb-46-58298d47b2d8 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, Joerg Roedel Cc: Marek Szyprowski , 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 v7 4/7] iommu/exynos: Set master device once on boot Date: Mon, 14 Nov 2016 11:08:09 +0100 Message-id: <1479118092-1365-5-git-send-email-m.szyprowski@samsung.com> X-Mailer: git-send-email 1.9.1 In-reply-to: <1479118092-1365-1-git-send-email-m.szyprowski@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAAzWSfUhTUQDFu3tvb8/V4rENu/gRtIiyyDQSL1qWIfUogv5ripAjHyo5lT2V 9B/NSrfl1BzmUldWprCK1VpiUfnR3KyFmh9l1loxJTXNdFlEJW17+t/vcM49h3u5JCa+zg8h s3LyGVWOIltGCPF2++/+nYd1EfKo5YY4dN9g5qO6zxMEOnfTTKBadw2OmjvjkabxngBVe75i aPKBh4cGBnxy+HETgbw6G0CGgWc8NPUlFN21uQRorGYSoFfOIT4qv/2dj0yP/wJUdXeIOCCh J7qv8ugOVwugHzW4BLTFpCHoTuMdAa0fawP0sl1AW0crcLrKagK017KRNlS084+vTRHuTWey swoZ1a6ENGFmy7JekFcuPeP+tYiXAjulBUEkpPZA40gpwXEwHPxoDrCYugVgr3u/Fgh97AXQ 8bCbt3rgr/sRxhmtANref8M5UcqDo71NfH+KoKKhdk5L+A0pdRPAvsY3PL/AqC4cTl/yYP6U hEqCXv1QgHFqCxz+WQX8LKIOw1ZPJZ/b2whf2PUBDqJoaPQuBuYgtSCA1U90vlbSJ8KhpQvj 8knwxr9BwLEEzjisAo7DoEa9eodqAMsu7ODYAGD/nIjjePjc8TqwhVHrYW17PcbVi6C6XMxF aNjSd2WlMhGOur6vPEUjgPPjNrwGhDWDNSYgZQpYZQbD7o5kFUq2ICcj8lSu0gJ8H8e57Fjo APN9cT2AIoFsnUidu00u5isK2SJlD4AkJpOKNldGyMWidEVRMaPKPakqyGbYHhBK4rINoifN IyfEVIYinznNMHmMatXlkUEhpeCAjjSP1R0TJ7l+bFvck5rq3n62PnP9wXdFVrHFGRue3KRO vaz5dHR+85oYYeJSmV2/z/NUrWO2yqPebro4lxx9rcQyVfI+L0oTHDcza5k+ujPtw9CRqS6W TQwzzMSkmGeX/rSdd3bIiy/Ux0rHW19YX6Zn7A1pONQtiTGeGv+TIMPZTEX0dkzFKv4DQlca xDQDAAA= X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFjrIIsWRmVeSWpSXmKPExsVy+t/xa7revZoRBhPOyFlsnLGe1WLqwyds Fs2L17NZTLo/gcViwX5ri87ZG9gt+h+/ZrZ4uvkxk8X580Du5V1z2Cw+9x5htJhxfh+TxYvn 0hZrj9xlt7gx4SmjxZnTl1gt2lZ/YLVYtesPo0Xf2ktsDsIeTw7OY/LYcXcJo8fOWXfZPTat 6mTz2D93DbvH5BvLGT3+HWP32HK1ncWjb8sqRo/Pm+Q8ZrRvYw3gjnKzyUhNTEktUkjNS85P ycxLt1UKDXHTtVBSyEvMTbVVitD1DQlSUihLzCkF8owM0ICDc4B7sJK+XYJbxpJ/k9kL2kQq 7n//xNLAeEygi5GTQ0LAROLP/Z3MELaYxIV769lAbCGBJYwS7S8Nuhi5gOwmJomud21gRWwC hhJdb7vYQBIiAosZJRoOTWEEcZgFjrFILO45CFYlLOAi8XnyJTCbRUBV4vK3PkYQm1fAXWLZ 4x5WiHVyEiePTQazOQU8JOZ+/sQCsdpd4url/cwTGHkXMDKsYhRJLS3OTc8tNtQrTswtLs1L 10vOz93ECIy+bcd+bt7BeGlj8CFGAQ5GJR7ejnyNCCHWxLLiytxDjBIczEoivMo9mhFCvCmJ lVWpRfnxRaU5qcWHGE2BjprILCWanA9MDHkl8YYmhuaWhkbGFhbmRkZK4rwlH66ECwmkJ5ak ZqemFqQWwfQxcXBKNTBm90++FuX22CSa87D091kfpxTva4s+2//QvT37bWLz7Z7NrXejDy3/ OPmt4YJNRpJNhYcX72syXbHhyb6d7AKRs/VCjX/H3d60uMInf9mGyNn7HvrM8jt0J4b9VM2j 37G8Ro9+BpVM2/3YWrPMMWNO0PzUWfs8tHbe2v9C09XM+lOi3vTLpyI0lFiKMxINtZiLihMB /IfZa9QCAAA= X-MTR: 20000000000000000@CPGS X-CMS-MailID: 20161114100911eucas1p15b495af346ea89af2f10bb3267b2cdc5 X-Msg-Generator: CA X-Sender-IP: 182.198.249.179 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: 20161114100911eucas1p15b495af346ea89af2f10bb3267b2cdc5 X-RootMTR: 20161114100911eucas1p15b495af346ea89af2f10bb3267b2cdc5 References: <1479118092-1365-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 f45b274..28e570b 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 From mboxrd@z Thu Jan 1 00:00:00 1970 From: Marek Szyprowski Subject: [PATCH v7 4/7] iommu/exynos: Set master device once on boot Date: Mon, 14 Nov 2016 11:08:09 +0100 Message-ID: <1479118092-1365-5-git-send-email-m.szyprowski@samsung.com> References: <1479118092-1365-1-git-send-email-m.szyprowski@samsung.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-reply-to: <1479118092-1365-1-git-send-email-m.szyprowski-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: iommu-bounces-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org Errors-To: iommu-bounces-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org To: linux-pm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org, linux-samsung-soc-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, Joerg Roedel Cc: Tomeu Vizoso , Bartlomiej Zolnierkiewicz , Greg Kroah-Hartman , Mark Brown , Kevin Hilman , "Rafael J. Wysocki" , Tomasz Figa , Krzysztof Kozlowski , Inki Dae , Tobias Jakobi , "Luis R. Rodriguez" , Kukjin Kim , Lukas Wunner List-Id: linux-pm@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 f45b274..28e570b 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