• AngeloGioacchino Del Regno's avatar
    clk: mediatek: clk-mtk: Allow specifying flags on mtk_fixed_factor clocks · 672c779e
    AngeloGioacchino Del Regno authored
    Before this change, every mtk_fixed_factor clock forced clock flags to
    CLK_SET_RATE_PARENT: while this is harmless in some cases, it may not
    be desired in some others, especially when performing clock muxing on
    a clock having multiple parents of which one is a dedicated PLL and the
    others are not.
    
    This is especially seen on the GPU clocks on some SoCs, where we are
    muxing between multiple parents: a fixed clock (crystal), a programmable
    GPU PLL and one or more dividers for the MAINPLL, used for a number of
    devices; it happens that when a rate change is called for the GPU, the
    clock framework will try to satisfy the rate request by using one of the
    MAINPLL dividers, which have CLK_SET_RATE_PARENT and will set the rate
    on MAINPLL itself - overclocking or underclocking many devices in the
    system - and making it to lock up.
    
    Logically, it should be harmless (and would only reduce possible bugs)
    to change all of the univpll and mainpll related fixed factor clocks
    to not declare the CLK_SET_RATE_PARENT by default but, on some SoCs,
    this is also used for dividers of other PLLs for which a rate change
    based on the divider may be desired, hence introduce a new FACTOR_FLAGS()
    macro to use custom flags (or none) on selected fixed factor clocks.
    Signed-off-by: default avatarAngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
    Reviewed-by: default avatarChen-Yu Tsai <wenst@chromium.org>
    Link: https://lore.kernel.org/r/20221024102307.33722-2-angelogioacchino.delregno@collabora.comSigned-off-by: default avatarChen-Yu Tsai <wenst@chromium.org>
    672c779e
clk-mtk.c 10.7 KB