Re: [PATCH v3 7/7] clk: qcom: apcs-msm8916: use clk_parent_data to specify the parent

From: Bjorn Andersson
Date: Thu Dec 26 2019 - 21:27:09 EST


On Mon 23 Dec 18:16 PST 2019, Stephen Boyd wrote:

> Quoting Niklas Cassel (2019-12-20 09:56:16)
> > On Wed, Dec 18, 2019 at 10:23:39PM -0800, Stephen Boyd wrote:
> > > This is odd. The clks could be registered with of_clk_hw_register() but
> > > then we lose the device provider information. Maybe we should search up
> > > one level to the parent node and if that has a DT node but the
> > > clk controller device doesn't we should use that instead?
> >
> > Hello Stephen,
> >
> > Having this in the clk core is totally fine with me,
> > since it solves my problem.
> >
> > Will you cook up a patch, or do you want me to do it?
> >
>
> Can you try the patch I appended to my previous mail? I can write
> something up more proper later this week.
>

Unfortunately we have clocks with no dev, so this fail as below. Adding
a second check for dev != NULL to your oneliner works fine though.

I.e. this ugly hack works fine:
core->of_node = np ? : (dev ? dev_of_node(dev->parent) : NULL);

Regards,
Bjorn

[ 0.000000] Unable to handle kernel NULL pointer dereference at virtual address 0000000000000040
[ 0.000000] Mem abort info:
[ 0.000000] ESR = 0x96000004
[ 0.000000] EC = 0x25: DABT (current EL), IL = 32 bits
[ 0.000000] SET = 0, FnV = 0
[ 0.000000] EA = 0, S1PTW = 0
[ 0.000000] Data abort info:
[ 0.000000] ISV = 0, ISS = 0x00000004
[ 0.000000] CM = 0, WnR = 0
[ 0.000000] [0000000000000040] user address but active_mm is swapper
[ 0.000000] Internal error: Oops: 96000004 [#1] PREEMPT SMP
[ 0.000000] Modules linked in:
[ 0.000000] CPU: 0 PID: 0 Comm: swapper/0 Not tainted 5.5.0-rc2-next-20191220-00017-g359fd8f91acb-dirty #107
[ 0.000000] Hardware name: Qualcomm Technologies, Inc. QCS404 EVB 4000 (DT)
[ 0.000000] pstate: 80000085 (Nzcv daIf -PAN -UAO)
[ 0.000000] pc : __clk_register (drivers/clk/clk.c:3679)
[ 0.000000] lr : __clk_register (drivers/clk/clk.c:3664)
[ 0.000000] sp : ffffdb6871043d70
[ 0.000000] x29: ffffdb6871043d70 x28: ffff00003ddf4518
[ 0.000000] x27: 0000000000000001 x26: 0000000000000008
[ 0.000000] x25: 0000000000000000 x24: 0000000000000000
[ 0.000000] x23: 0000000000000000 x22: 0000000000000000
[ 0.000000] x21: ffff00003d821080 x20: ffffdb6871043e60
[ 0.000000] x19: ffff00003d822000 x18: 0000000000000014
[ 0.000000] x17: 000000006f7295ba x16: 0000000043d45a86
[ 0.000000] x15: 000000005f0037cd x14: 00000000b22e3fc4
[ 0.000000] x13: 0000000000000001 x12: 0000000000000000
[ 0.000000] x11: 0101010101010101 x10: 7f7f7f7f7f7f7f7f
[ 0.000000] x9 : fefefefefefefeff x8 : 7f7f7f7f7f7f7f7f
[ 0.000000] x7 : 6371606e612c6e77 x6 : ffff00003d821109
[ 0.000000] x5 : 0000000000000000 x4 : ffff00003dd9d060
[ 0.000000] x3 : 0000000000000000 x2 : 0000000000000009
[ 0.000000] x1 : ffff00003ddf47b9 x0 : ffffdb68705b0ee0
[ 0.000000] Call trace:
[ 0.000000] __clk_register (drivers/clk/clk.c:3679)
[ 0.000000] clk_hw_register (./include/linux/err.h:60 drivers/clk/clk.c:3760)
[ 0.000000] clk_hw_register_fixed_rate_with_accuracy (drivers/clk/clk-fixed-rate.c:82)
[ 0.000000] _of_fixed_clk_setup (drivers/clk/clk-fixed-rate.c:98 drivers/clk/clk-fixed-rate.c:173)
[ 0.000000] of_fixed_clk_setup (drivers/clk/clk-fixed-rate.c:193)
[ 0.000000] of_clk_init (drivers/clk/clk.c:4856)
[ 0.000000] time_init (arch/arm64/kernel/time.c:59)
[ 0.000000] start_kernel (init/main.c:697)