• Sam Protsenko's avatar
    clk: samsung: Introduce Exynos850 clock driver · 7dd05578
    Sam Protsenko authored
    This is the initial implementation adding only basic clocks like UART,
    MMC, I2C and corresponding parent clocks. Design is influenced by
    Exynos5433 clock driver.
    
    Bus clock is enabled by default (in probe function) for all CMUs except
    CMU_TOP, the reasoning is as follows. By default if bus clock has no
    users its "enable count" value is 0. It might be actually running if
    it's already enabled in bootloader, but then in some cases it can be
    disabled by mistake. For example, such case was observed when
    dw_mci_probe() enabled the bus clock, then failed to do something and
    disabled that bus clock on error path. After that, even the attempt to
    read the 'clk_summary' file in DebugFS freezed forever, as CMU bus clock
    ended up being disabled and it wasn't possible to access CMU registers
    anymore.
    
    To avoid such cases, CMU driver must increment the ref count for that
    bus clock by running clk_prepare_enable(). There is already existing
    '.clk_name' field in struct samsung_cmu_info, exactly for that reason.
    It was added in commit 523d3de4 ("clk: samsung: exynos5433: Add
    support for runtime PM"), with next mentioning in commit message:
    
      > Also for each CMU there is one special parent clock, which has to be
      > enabled all the time when any access to CMU registers is being done.
    
    But that clock is actually only enabled in Exynos5433 clock driver right
    now. So the same code is added to exynos850_cmu_probe() function,
    As was described above, it might be helpful not only for PM reasons, but
    also to prevent possible erroneous clock gating on error paths.
    
    Another way to workaround that issue would be to use CLOCK_IS_CRITICAL
    flag for corresponding gate clocks. But that might be not very good
    design decision, as we might still want to disable that bus clock, e.g.
    on PM suspend.
    Signed-off-by: default avatarSam Protsenko <semen.protsenko@linaro.org>
    Reviewed-by: default avatarKrzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
    Acked-by: default avatarChanwoo Choi <cw00.choi@samsung.com>
    Link: https://lore.kernel.org/r/20211008154352.19519-6-semen.protsenko@linaro.orgSigned-off-by: default avatarSylwester Nawrocki <s.nawrocki@samsung.com>
    7dd05578
clk-exynos850.c 33 KB