Commit f679e89a authored by Thierry Reding's avatar Thierry Reding Committed by Stephen Boyd
Browse files

clk: tegra: Avoid calling an uninitialized function



Commit 493ffb04 ("clk: tegra: super: Switch to determine_rate")
replaced clk_super_round_rate() by clk_super_determine_rate(), but
didn't update one callsite that was explicitly calling the old
tegra_clk_super_ops.round_rate() function, which was now NULL. This
resulted in a crash on Tegra30 systems during early boot.

Switch this callsite over to the clk_super_determine_rate() equivalent
to avoid the crash.

Fixes: 493ffb04 ("clk: tegra: super: Switch to determine_rate")
Tested-by: default avatarDmitry Osipenko <digetx@gmail.com>
Signed-off-by: default avatarThierry Reding <treding@nvidia.com>
Link: https://lore.kernel.org/r/20230630130748.840729-1-thierry.reding@gmail.com


Signed-off-by: default avatarStephen Boyd <sboyd@kernel.org>
parent b2115425
Loading
Loading
Loading
Loading
+12 −3
Original line number Diff line number Diff line
@@ -86,9 +86,18 @@ static int cclk_super_determine_rate(struct clk_hw *hw,
	if (rate <= pllp_rate) {
		if (super->flags & TEGRA20_SUPER_CLK)
			rate = pllp_rate;
		else
			rate = tegra_clk_super_ops.round_rate(hw, rate,
							      &pllp_rate);
		else {
			struct clk_rate_request parent = {
				.rate = req->rate,
				.best_parent_rate = pllp_rate,
			};

			clk_hw_get_rate_range(hw, &parent.min_rate,
					      &parent.max_rate);
			tegra_clk_super_ops.determine_rate(hw, &parent);
			pllp_rate = parent.best_parent_rate;
			rate = parent.rate;
		}

		req->best_parent_rate = pllp_rate;
		req->best_parent_hw = pllp_hw;