Commit af55dadf authored by Stephen Boyd's avatar Stephen Boyd
Browse files

clk: sirf: Don't reference clk_init_data after registration



A future patch is going to change semantics of clk_register() so that
clk_hw::init is guaranteed to be NULL after a clk is registered. Avoid
referencing this member here so that we don't run into NULL pointer
exceptions.

Cc: Guo Zeng <Guo.Zeng@csr.com>
Cc: Barry Song <Baohua.Song@csr.com>
Signed-off-by: default avatarStephen Boyd <sboyd@kernel.org>
Link: https://lkml.kernel.org/r/20190731193517.237136-6-sboyd@kernel.org
parent af884a5d
Loading
Loading
Loading
Loading
+8 −4
Original line number Diff line number Diff line
@@ -297,9 +297,10 @@ static u8 dmn_clk_get_parent(struct clk_hw *hw)
{
	struct clk_dmn *clk = to_dmnclk(hw);
	u32 cfg = clkc_readl(clk->regofs);
	const char *name = clk_hw_get_name(hw);

	/* parent of io domain can only be pll3 */
	if (strcmp(hw->init->name, "io") == 0)
	if (strcmp(name, "io") == 0)
		return 4;

	WARN_ON((cfg & (BIT(3) - 1)) > 4);
@@ -311,9 +312,10 @@ static int dmn_clk_set_parent(struct clk_hw *hw, u8 parent)
{
	struct clk_dmn *clk = to_dmnclk(hw);
	u32 cfg = clkc_readl(clk->regofs);
	const char *name = clk_hw_get_name(hw);

	/* parent of io domain can only be pll3 */
	if (strcmp(hw->init->name, "io") == 0)
	if (strcmp(name, "io") == 0)
		return -EINVAL;

	cfg &= ~(BIT(3) - 1);
@@ -353,7 +355,8 @@ static long dmn_clk_round_rate(struct clk_hw *hw, unsigned long rate,
{
	unsigned long fin;
	unsigned ratio, wait, hold;
	unsigned bits = (strcmp(hw->init->name, "mem") == 0) ? 3 : 4;
	const char *name = clk_hw_get_name(hw);
	unsigned bits = (strcmp(name, "mem") == 0) ? 3 : 4;

	fin = *parent_rate;
	ratio = fin / rate;
@@ -375,7 +378,8 @@ static int dmn_clk_set_rate(struct clk_hw *hw, unsigned long rate,
	struct clk_dmn *clk = to_dmnclk(hw);
	unsigned long fin;
	unsigned ratio, wait, hold, reg;
	unsigned bits = (strcmp(hw->init->name, "mem") == 0) ? 3 : 4;
	const char *name = clk_hw_get_name(hw);
	unsigned bits = (strcmp(name, "mem") == 0) ? 3 : 4;

	fin = parent_rate;
	ratio = fin / rate;