Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit af022faf authored by Paul Walmsley's avatar Paul Walmsley
Browse files

OMAP1 clock: fix for "BUG: spinlock lockup on CPU#0"



Commit 52650505 caused clock initialization
to fail on OMAP1 with "BUG: spinlock lockup on CPU#0" -- this is because
omap1_select_table_rate() and omap1_round_to_table_rate() call clk_get_rate()
with the clockfw spinlock held.  Fix by accessing the rate directly from
the internal clock framework functions.

Thanks to Tony Lindgren <tony@atomide.com> for reporting and testing the fix.

Signed-off-by: default avatarPaul Walmsley <paul@pwsan.com>
Cc: Tony Lindgren <tony@atomide.com>
parent ecbb0659
Loading
Loading
Loading
Loading
+3 −3
Original line number Original line Diff line number Diff line
@@ -214,8 +214,8 @@ int omap1_select_table_rate(struct clk *clk, unsigned long rate)
	struct mpu_rate * ptr;
	struct mpu_rate * ptr;
	unsigned long dpll1_rate, ref_rate;
	unsigned long dpll1_rate, ref_rate;


	dpll1_rate = clk_get_rate(ck_dpll1_p);
	dpll1_rate = ck_dpll1_p->rate;
	ref_rate = clk_get_rate(ck_ref_p);
	ref_rate = ck_ref_p->rate;


	for (ptr = omap1_rate_table; ptr->rate; ptr++) {
	for (ptr = omap1_rate_table; ptr->rate; ptr++) {
		if (ptr->xtal != ref_rate)
		if (ptr->xtal != ref_rate)
@@ -306,7 +306,7 @@ long omap1_round_to_table_rate(struct clk *clk, unsigned long rate)
	long highest_rate;
	long highest_rate;
	unsigned long ref_rate;
	unsigned long ref_rate;


	ref_rate = clk_get_rate(ck_ref_p);
	ref_rate = ck_ref_p->rate;


	highest_rate = -EINVAL;
	highest_rate = -EINVAL;