From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932652AbcJXFT5 (ORCPT ); Mon, 24 Oct 2016 01:19:57 -0400 Received: from mailout3.w1.samsung.com ([210.118.77.13]:16817 "EHLO mailout3.w1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752429AbcJXFTy (ORCPT ); Mon, 24 Oct 2016 01:19:54 -0400 X-AuditID: cbfec7ef-f79e76d000005b57-6b-580d99f5c58c Subject: Re: [PATCH v5 6/7] iommu/exynos: Add runtime pm support To: Sricharan , linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org, iommu@lists.linux-foundation.org, linux-samsung-soc@vger.kernel.org Cc: "'Tomeu Vizoso'" , "'Bartlomiej Zolnierkiewicz'" , "'Greg Kroah-Hartman'" , "'Kevin Hilman'" , "'Rafael J. Wysocki'" , "'Tomasz Figa'" , "'Krzysztof Kozlowski'" , "'Inki Dae'" , "'Tobias Jakobi'" , "'Luis R. Rodriguez'" , "'Kukjin Kim'" , "'Mark Brown'" , "'Lukas Wunner'" From: Marek Szyprowski Message-id: <91601a86-253a-3fe8-85e1-a8c55a2ceb09@samsung.com> Date: Mon, 24 Oct 2016 07:19:44 +0200 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 Thunderbird/45.4.0 MIME-version: 1.0 In-reply-to: <000701d22c28$2da381d0$88ea8570$@codeaurora.org> Content-type: text/plain; charset=utf-8; format=flowed Content-transfer-encoding: 7bit X-Brightmail-Tracker: H4sIAAAAAAAAA02SbUhTURyHObsvu5pXrlfLk2nGKuht1qQPp0wxirpQQkGhlFBTbyY5lU0j +xTzpW3oNJ21ZpFUFi5LUxGVbGmWROVMLWeWtWpNfClxZgkxcrsafns4/+ec3/kdDoWxn4kQ Ki0jm1dmyNMlpC/e/HzOKv11lU7YVmmQoofGOgJV2L+RKO9WHYnKPpXiqMoShUq+jmPI0fhV hKzWejHqb7tGIldxF0BG62MRGnWuQrZSB0CvXvYRaOaSBkeF96YIZG77C5D+fh8Zy3L9+mIR 1/LxNuBaTR/FXINZS3KW67Virtx2F3Du52Ku6e1FnNM3mQHnaljNGS82E4eWHfPdlcKnp53l lVtjTvqeHjTr8ayp0HOGsgr8AnAG6wBFQWY7rLft1wGfeVwBe0fqSB3wpVjmDoCzn7tEngHL uACsVwcs+o6RmP9OyXTHwgYngL97f+CeDYFMLFR3vSc8gyCmBsDLQwVeC2Pu4/CFVk16LJKR Qd2kzss0EwMbZz5443BmPSyyG4CHlzOJcNjwDhOcAPinfMSb4MNEQ1OHyetgzE743V1ACBwO G2snMU8YZKop6HBaCeHeYbDhCSbgXvisMFioHAjHupvEAodCraZDJHAJgOqCzQIbAeyZpAWO gk+73yxE+cOy5isLR9JQU8gKCgebP2nEwvJu2OtMFN5HL4JFz9rxUhBuWlLGtKSAaUmBKoCZ QRCfo1Kk8ipZhEquUOVkpEYkZyoawPy/e+nu/tkCHHlHOgFDAYkfveatXwJLyM+qchWdAFKY JIiOKqMTWDpFnnueV2aeUOak86pOsIrCJcF0e9VAPMukyrP5MzyfxSsXpyLKJ+QCMBy33EgK S9TS4KRDHnBtIn/OVlmzIeP68keBU8y94qNx5ck1gz0DP5NXR2aN5bv21C7bntSYV6lIstiH R8ejU04ZDj6J27HFFP500r/68JD0wQ81sS5ulm5f+WjtvnixnXjnqMzv/OKaCNnYdEB5kJXp W/13uW9qp6WnIle+rimX4KrTctkmTKmS/wMtYtZjcwMAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFmplleLIzCtJLcpLzFFi42I5/e/4Fd3nM3kjDD7/47fYOGM9q8XUh0/Y LJoXr2ezmHR/AovFgv3WFv2PXzNbPN38mMni/PkN7BaXd81hs/jce4TRYsb5fUwWL55LW9yY 8JTR4szpS6wWXyZ2sFi0rf7AarFq1x9Gi761l9gchDwu9/Uyeey4u4TRY+esu+wem1Z1snns n7uG3WPyjeWMHv+OsXtsudrO4tG3ZRWjx+dNch4z2rexBnBHudlkpCampBYppOYl56dk5qXb KoWGuOlaKCnkJeam2ipF6PqGBCkplCXmlAJ5RgZowME5wD1YSd8uwS3j+qo+loIPMhVTJk1l aWB8Lt7FyMEhIWAi8fSeXRcjJ5ApJnHh3nq2LkYuDiGBJYwSz9qfM0E4zxklJn1axwJSJSzg INF05BYrSEJEYCWjxPFTe6Gq+pgkrsz7wALiMAtsZJFYu3Y/M0gLm4ChRNfbLjYQm1fATmLz lztMIDaLgKpEz8MpjCC2qECMxPVnj6BqBCV+TL4Hto5TwFZi1sFZYDXMAmYSX14eZoWw5SU2 r3nLPIFRYBaSlllIymYhKVvAyLyKUSS1tDg3PbfYUK84Mbe4NC9dLzk/dxMjMAlsO/Zz8w7G SxuDDzEKcDAq8fCeuMQTIcSaWFZcmXuIUYKDWUmE13oSb4QQb0piZVVqUX58UWlOavEhRlOg JyYyS4km5wMTVF5JvKGJobmloZGxhYW5kZGSOG/JhyvhQgLpiSWp2ampBalFMH1MHJxSDYyc zvvflhm4RF5/scy5Yb3ZuU73aIne2Vm3331gF5xkYcilZzlhua1SkYHXrWlSUlN8Vv5xVjxU 0JE9Zc5JL77QtXmitt+L9t5WdMwvtT1UqrCV+d6CY3KCM457tPiv8+N5devWNZljX4rufqzf HR7Y2G4rqWX+Yo7mUdF92nZCPzdOCm8+0KXEUpyRaKjFXFScCAAFe8ArGAMAAA== X-MTR: 20000000000000000@CPGS X-CMS-MailID: 20161024051948eucas1p21917beb6200def34a2accad3d72acfae 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: 20161020072335eucas1p209675d6fbf39e5045281e8023fa9d234 X-RootMTR: 20161020072335eucas1p209675d6fbf39e5045281e8023fa9d234 References: <1476948173-21093-1-git-send-email-m.szyprowski@samsung.com> <1476948173-21093-7-git-send-email-m.szyprowski@samsung.com> <000701d22c28$2da381d0$88ea8570$@codeaurora.org> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Sricharan On 2016-10-22 07:50, Sricharan wrote: > >> This patch adds runtime pm implementation, which is based on previous >> suspend/resume code. SYSMMU controller is now being enabled/disabled mainly > > from the runtime pm callbacks. System sleep callbacks relies on generic >> pm_runtime_force_suspend/pm_runtime_force_resume helpers. To ensure >> internal state consistency, additional lock for runtime pm transitions >> was introduced. >> >> Signed-off-by: Marek Szyprowski >> --- >> drivers/iommu/exynos-iommu.c | 45 +++++++++++++++++++++++++++++++++++--------- >> 1 file changed, 36 insertions(+), 9 deletions(-) >> >> diff --git a/drivers/iommu/exynos-iommu.c b/drivers/iommu/exynos-iommu.c >> index a959443e6f33..5e6d7bbf9b70 100644 >> --- a/drivers/iommu/exynos-iommu.c >> +++ b/drivers/iommu/exynos-iommu.c >> @@ -206,6 +206,7 @@ struct sysmmu_fault_info { >> struct exynos_iommu_owner { >> struct list_head controllers; /* list of sysmmu_drvdata.owner_node */ >> struct iommu_domain *domain; /* domain this device is attached */ >> + struct mutex rpm_lock; /* for runtime pm of all sysmmus */ >> }; >> >> /* >> @@ -594,40 +595,46 @@ static int __init exynos_sysmmu_probe(struct platform_device *pdev) >> return 0; >> } >> >> -#ifdef CONFIG_PM_SLEEP >> -static int exynos_sysmmu_suspend(struct device *dev) >> +static int __maybe_unused exynos_sysmmu_suspend(struct device *dev) >> { >> struct sysmmu_drvdata *data = dev_get_drvdata(dev); >> struct device *master = data->master; >> >> if (master) { >> - pm_runtime_put(dev); >> + struct exynos_iommu_owner *owner = master->archdata.iommu; >> + >> + mutex_lock(&owner->rpm_lock); > More of a device link question, > To understand, i see that with device link + runtime, the supplier > callbacks are not called for irqsafe clients, even if supplier is irqsafe. > Why so ? Frankly I didn't care about irqsafe runtime pm, because there is no such need for Exynos platform and its drivers. Exynos power domain driver also doesn't support irqsafe mode. > >> if (data->domain) { >> dev_dbg(data->sysmmu, "saving state\n"); >> __sysmmu_disable(data); >> } >> + mutex_unlock(&owner->rpm_lock); >> } >> return 0; >> } >> >> -static int exynos_sysmmu_resume(struct device *dev) >> +static int __maybe_unused exynos_sysmmu_resume(struct device *dev) >> { >> struct sysmmu_drvdata *data = dev_get_drvdata(dev); >> struct device *master = data->master; >> >> if (master) { >> - pm_runtime_get_sync(dev); >> + struct exynos_iommu_owner *owner = master->archdata.iommu; >> + >> + mutex_lock(&owner->rpm_lock); >> if (data->domain) { >> dev_dbg(data->sysmmu, "restoring state\n"); >> __sysmmu_enable(data); >> } >> + mutex_unlock(&owner->rpm_lock); >> } >> return 0; >> } >> -#endif >> >> static const struct dev_pm_ops sysmmu_pm_ops = { >> - SET_LATE_SYSTEM_SLEEP_PM_OPS(exynos_sysmmu_suspend, exynos_sysmmu_resume) >> + SET_RUNTIME_PM_OPS(exynos_sysmmu_suspend, exynos_sysmmu_resume, NULL) >> + SET_LATE_SYSTEM_SLEEP_PM_OPS(pm_runtime_force_suspend, >> + pm_runtime_force_resume) >> }; > Is this needed to be LATE_SYSTEM_SLEEP_PM_OPS with device links to take care > of the order ? Hmmm. LASE_SYSTEM_SLEEP_PM_OPS is a left over from the previous versions of the driver, which doesn't use device links. You are right, that "normal" SYSTEM_SLEEP_PM_OPS should be enough assuming that device links will take care of the proper call sequence between consumer and supplier device. Best regards -- Marek Szyprowski, PhD Samsung R&D Institute Poland