Patch "clk: versatile: sp810: support reentrance" has been added to the 3.14-stable tree
This is a note to let you know that I've just added the patch titled
clk: versatile: sp810: support reentrance
to the 3.14-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
clk-versatile-sp810-support-reentrance.patch
and it can be found in the queue-3.14 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
ec7957a6aa0aaf981fb8356dc47a2cdd01cde03cMon Sep 17 00:00:00 2001
From: Linus Walleij <[email protected]>
Date: Wed, 24 Feb 2016 09:39:11 +0100
Subject: clk: versatile: sp810: support reentrance
From: Linus Walleij <[email protected]>
commit ec7957a6aa0aaf981fb8356dc47a2cdd01cde03c upstream.
Despite care take to allocate clocks state containers the SP810 driver actually just supports creating one instance:
all clocks registered for every instance will end up with the exact same name and __clk_init() will fail.
Rename the timclken<0> .. timclken<n> to sp810_<instance>_<n> so every clock on every instance gets a unique name.
This is necessary for the RealView PBA8 which has two SP810
blocks: the second block will not register its clocks unless every clock on every instance is unique and results in boot logs like this:
------------[ cut here ]------------
WARNING: CPU: 0 PID: 0 at ../drivers/clk/versatile/clk-sp810.c:137
clk_sp810_of_setup+0x110/0x154()
Modules linked in:
CPU: 0 PID: 0 Comm: swapper/0 Not tainted
4.5.0-rc2-00030-g352718fc39f6-dirty #225
Hardware name: ARM RealView Machine (Device Tree Support)
[<c00167f8>] (unwind_backtrace) from [<c0013204>]
(show_stack+0x10/0x14)
[<c0013204>] (show_stack) from [<c01a049c>]
(dump_stack+0x84/0x9c)
[<c01a049c>] (dump_stack) from [<c0024990>]
(warn_slowpath_common+0x74/0xb0)
[<c0024990>] (warn_slowpath_common) from [<c0024a68>]
(warn_slowpath_null+0x1c/0x24)
[<c0024a68>] (warn_slowpath_null) from [<c051eb44>]
(clk_sp810_of_setup+0x110/0x154)
[<c051eb44>] (clk_sp810_of_setup) from [<c051e3a4>]
(of_clk_init+0x12c/0x1c8)
[<c051e3a4>] (of_clk_init) from [<c0504714>]
(time_init+0x20/0x2c)
[<c0504714>] (time_init) from [<c0501b18>]
(start_kernel+0x244/0x3c4)
[<c0501b18>] (start_kernel) from [<7000807c>] (0x7000807c)
---[ end trace cb88537fdc8fa200 ]------ drivers/clk/versatile/clk-sp810.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
drivers/clk/versatile/clk-sp810.c +3 -1
@@ -141,6 +141,7 @@ void __init clk_sp810_of_setup(struct deconst char *parent_names[2 ];char name[12 ];struct clk_init_data init; +static int instance;int i;if (!sp810) {
@@ -172,7 +173,7 @@ void __init clk_sp810_of_setup(struct de init.num_parents =ARRAY_SIZE (parent_names);for (i =0 ; i <ARRAY_SIZE (sp810->timerclken); i++) { -snprintf (name,ARRAY_SIZE (name),"timerclken%d" , i); +snprintf (name,sizeof (name),"sp810_%d_%d" , instance, i); sp810->timerclken[i].sp810 = sp810; sp810->timerclken[i].channel = i;
@@ -184,5 +185,6 @@ void __init clk_sp810_of_setup(struct de }of_clk_add_provider (node, clk_sp810_timerclken_of_get, sp810); + instance++; }CLK_OF_DECLARE (sp810,"arm,sp810" , clk_sp810_of_setup);
Patches currently in stable-queue which might be from [email protected] are
queue-3.14/clk-versatile-sp810-support-reentrance.patch