commit
90bdfa0b05e3cc809a7c1aa3b1f162b46ea1b330 upstream.
We must bail out early if the clock is not hw_omap. Otherwise we will
try to access invalid address with hwclk->clkdm_name:
Unable to handle kernel paging request at virtual address
ffffffff
Internal error: Oops: 27 [#1] ARM
...
(strcmp) from [<
c011b348>] (clkdm_lookup+0x40/0x60)
[<
c011b348>] (clkdm_lookup) from [<
c011cb84>] (ti_sysc_clkdm_init+0x5c/0x64)
[<
c011cb84>] (ti_sysc_clkdm_init) from [<
c03680a8>] (sysc_probe+0x948/0x117c)
[<
c03680a8>] (sysc_probe) from [<
c03d0af4>] (platform_drv_probe+0x48/0x98)
...
Fixes:
2b2f7def058a ("bus: ti-sysc: Add support for missing clockdomain handling")
Signed-off-by: Tony Lindgren <tony@atomide.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
static struct clockdomain *ti_sysc_find_one_clockdomain(struct clk *clk)
{
+ struct clk_hw *hw = __clk_get_hw(clk);
struct clockdomain *clkdm = NULL;
struct clk_hw_omap *hwclk;
- hwclk = to_clk_hw_omap(__clk_get_hw(clk));
+ hwclk = to_clk_hw_omap(hw);
+ if (!omap2_clk_is_hw_omap(hw))
+ return NULL;
+
if (hwclk && hwclk->clkdm_name)
clkdm = clkdm_lookup(hwclk->clkdm_name);