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)