Hi Marek, Quoting Marek Szyprowski (2017-08-21 01:04:58) > Dear All, > > This patchset adds runtime PM support to common clock framework. This is an > attempt to implement support for clock controllers, which belongs to a power > domain. This approach works surprisingly well on Exynos 5433 SoC, what allowed > us to solve various freeze/crash issues related to power management. > > The main idea behind this patchset is to keep clock's controller power domain > enabled every time when at least one of its clock is enabled or access to its > registers is being made. Clock controller driver (clock provider) can > supply a struct device pointer, which is the used by clock core for tracking and > managing clock's controller runtime pm state. Each clk_prepare() operation will > first call pm_runtime_get_sync() on the supplied device, while clk_unprepare() > will do pm_runtime_put() at the end. > > This runtime PM feature has been tested with Exynos4412 (not included in this > patchset) and Exynos5433 clocks drivers. Both have some clocks, which belongs to > respective power domains and need special handling during power on/off > procedures. Till now it wasn't handled at all, what caused various problems. > > Patches for clocks drivers change the way the clock provider is initialized. > Instead of CLK_OF_DECLARE based initialization, a complete platform device driver > infrastructure is being used. This is needed to let driver to use runtime PM > feature and integrate with generic power domains. The side-effect of this change > is a delay in clock provider registeration during system boot, so early > initialized drivers might get EPROBEDEFER error when requesting their clocks. > This was an issue for IOMMU drivers, but IOMMU deferred probe support has been > finally merged to v4.13-rc1 and now it is handled correctly. > > Patches are based and tested on v4.13-rc5, but applies fine also on v4.13-rc1. Patches look good to me. It's too late for the v4.14 PR, but I'll merge this to clk-next after -rc1 drops. Best regards, Mike > > Best regards > Marek Szyprowski > Samsung R&D Institute Poland > > > Changelog: > > v9: > - moved pm_runtime_get() call from clk_register() to __clk_core_init() as > requested by Michael Turquette > - added remaining 'Reviewed-by' tags > > v8: https://www.spinics.net/lists/arm-kernel/msg599494.html > - fixed minor issues pointed by Krzysztof Kozlowski and added his 'Reviewed-by' > tags > - added 'Reviewed-by' and 'Tested-by' tags from Chanwoo Choi > - moved trivial changes in Exynos AudioSS driver to separate patch > - added pm_runtime_get_noresume/pm_runtime_put_sync calls also to exynos-audss > driver (like it is already done for exynos5433 clocks driver) > - still waiting for any comments from clk maintainers > > v7: https://www.spinics.net/lists/arm-kernel/msg598408.html > - rebased onto v4.13-rc3 > - still waiting for any comments from clk maintainers > > v6: https://patches.linaro.org/cover/95713/ > - addressed comments from Ulf Hanson and added his 'Reviewed-by' tags > - simplified exynos 5433 clock driver code a bit > - fixes issues pointed by kbuild test robot > > v5: https://www.spinics.net/lists/linux-samsung-soc/msg57718.html > - rebased onto next-20170125 kernel release > - added two more calls to runtime PM in clock's core: > 1. clk_recalc() should ensure active runtime pm state, because it might > read registers (in case of dividers) to calculate the rate > 2. clk_register() also needs to ensure active runtime pm state to read > initial rate and status of the clocks > - more fixes in Exynos5433 clocks drivers: > 1. PLL in DISP CMU must be enabled for suspend > 2. guard clocks registration with pm_runtime_get_sync/pm_runtime_put to > avoid turning the power domain on and off many times for no good > reason (registering each clock will call pm_runtime_get_sync(), then > pm_runtime_put, what in turn might disable power domain) > - still waiting for a review... > > v4: http://www.spinics.net/lists/arm-kernel/msg550747.html > - Removed patch for Exynos4412 clocks from the patchset. DT bindings for power > domain for ISP sub-controller needs more discussion. It will be handled > separately when the runtime PM for clocks feature gets merged. > - Added patch with runtime PM support for Exynos AudioSS clock controller driver > (needed to enable audio power domain on Exynos5 series). > - Fixes in Exynos5433 driver: > 1. added missing clock for Audio CMU > 2. added support for FSYS CMU > 3. improved support for DISP CMU (thanks to Andrzej Hajda for > investigating that). > - Rebased onto v4.10-rc1 > - Waiting for a review... > > v3: http://www.spinics.net/lists/arm-kernel/msg538122.html > - Removed CLK_RUNTIME_PM flag, core now simply checks if runtime pm is enabled > for the provided device during clock registration as suggested by Ulf > - Simplified code for exynos4412 isp clock driver registration > - Resolved some other minor issues pointed by Ulf clk core code > - Rebased onto v4.9-rc1 and new version of IOMMU deferred probe patchset > > v2: https://www.spinics.net/lists/arm-kernel/msg532798.html > - Simplified clk_pm_runtime_get/put functions, removed workaround for devices > with disabled runtime pm. Such workaround is no longer needed since commit > 4d23a5e84806b202d9231929c9507ef7cf7a0185 ("PM / Domains: Allow runtime PM > during system PM phases"). > - Added CLK_RUNTIME_PM flag to indicate clocks, for which clock core should > call runtime pm functions. This solves problem with clocks, for which struct > device is already registered, but no runtime pm is enabled. > - Extended commit messages according to Ulf suggestions. > - Fixed some style issues pointed by Barlomiej. > > v1: http://www.spinics.net/lists/arm-kernel/msg528128.html > - initial version > > > Patch summary: > > Marek Szyprowski (5): > clk: Add support for runtime PM > clk: samsung: Add support for runtime PM > clk: samsung: exynos5433: Add support for runtime PM > clk: samsung: exynos-audss: Use local variable for controller's device > clk: samsung: exynos-audss: Add support for runtime PM > > .../devicetree/bindings/clock/clk-exynos-audss.txt | 6 + > .../devicetree/bindings/clock/exynos5433-clock.txt | 16 + > drivers/clk/clk.c | 126 ++++++- > drivers/clk/samsung/clk-exynos-audss.c | 76 ++-- > drivers/clk/samsung/clk-exynos5433.c | 409 ++++++++++++++++----- > drivers/clk/samsung/clk-pll.c | 2 +- > drivers/clk/samsung/clk.c | 12 +- > drivers/clk/samsung/clk.h | 7 + > 8 files changed, 519 insertions(+), 135 deletions(-) > > -- > 1.9.1 -- To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html