lkml.org 
[lkml]   [2016]   [Mar]   [31]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.2.y-ckt 210/218] clk: versatile: sp810: support reentrance
    Date
    4.2.8-ckt7 -stable review patch.  If anyone has any objections, please let me know.

    ---8<------------------------------------------------------------

    From: Linus Walleij <linus.walleij@linaro.org>

    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 ]---

    Cc: Michael Turquette <mturquette@baylibre.com>
    Cc: Pawel Moll <pawel.moll@arm.com>
    Fixes: 6e973d2c4385 "clk: vexpress: Add separate SP810 driver"
    Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
    Signed-off-by: Stephen Boyd <sboyd@codeaurora.org>
    Signed-off-by: Kamal Mostafa <kamal@canonical.com>
    ---
    drivers/clk/versatile/clk-sp810.c | 4 +++-
    1 file changed, 3 insertions(+), 1 deletion(-)

    diff --git a/drivers/clk/versatile/clk-sp810.c b/drivers/clk/versatile/clk-sp810.c
    index b674ffc..72af18b 100644
    --- a/drivers/clk/versatile/clk-sp810.c
    +++ b/drivers/clk/versatile/clk-sp810.c
    @@ -141,6 +141,7 @@ static void __init clk_sp810_of_setup(struct device_node *node)
    const char *parent_names[2];
    char name[12];
    struct clk_init_data init;
    + static int instance;
    int i;

    if (!sp810) {
    @@ -172,7 +173,7 @@ static void __init clk_sp810_of_setup(struct device_node *node)
    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 @@ static void __init clk_sp810_of_setup(struct device_node *node)
    }

    of_clk_add_provider(node, clk_sp810_timerclken_of_get, sp810);
    + instance++;
    }
    CLK_OF_DECLARE(sp810, "arm,sp810", clk_sp810_of_setup);
    --
    2.7.4
    \
     
     \ /
      Last update: 2016-03-31 22:41    [W:2.967 / U:0.132 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site