• Stephen Boyd's avatar
    clk: Fix falling back to legacy parent string matching · 4f8c6aba
    Stephen Boyd authored
    Calls to clk_core_get() will return ERR_PTR(-EINVAL) if we've started
    migrating a clk driver to use the DT based style of specifying parents
    but we haven't made any DT updates yet. This happens when we pass a
    non-NULL value as the 'name' argument of of_parse_clkspec(). That
    function returns -EINVAL in such a situation, instead of -ENOENT like we
    expected. The return value comes back up to clk_core_fill_parent_index()
    which proceeds to skip calling clk_core_lookup() because the error
    pointer isn't equal to -ENOENT, it's -EINVAL.
    
    Furthermore, we blindly overwrite the error pointer returned by
    clk_core_get() with NULL when there isn't a legacy .name member
    specified in the parent map. This isn't too bad right now because we
    don't really care to differentiate NULL from an error, but in the future
    we should only try to do a legacy lookup if we know we might find
    something. This way DT lookups that fail don't try to lookup based on
    strings when there isn't any string to match, hiding the error from DT
    parsing.
    
    Fix both these problems so that clk provider drivers can use the new
    style of parent mapping without having to also update their DT at the
    same time. This patch is based on an earlier patch from Taniya Das which
    checked for -EINVAL in addition to -ENOENT return values from
    clk_core_get().
    
    Fixes: 601b6e93 ("clk: Allow parents to be specified via clkspec index")
    Cc: Taniya Das <tdas@codeaurora.org>
    Cc: Jerome Brunet <jbrunet@baylibre.com>
    Cc: Chen-Yu Tsai <wens@csie.org>
    Reported-by: default avatarTaniya Das <tdas@codeaurora.org>
    Signed-off-by: default avatarStephen Boyd <sboyd@kernel.org>
    Link: https://lkml.kernel.org/r/20190813214147.34394-1-sboyd@kernel.orgTested-by: default avatarTaniya Das <tdas@codeaurora.org>
    4f8c6aba
clk.c 117 KB