lkml.org 
[lkml]   [2022]   [Oct]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 6.0 468/862] clk: meson: Hold reference returned by of_get_parent()
    Date
    From: Liang He <windhl@126.com>

    [ Upstream commit 89ab396d712f7c91fe94f55cff23460426f5fc81 ]

    We should hold the reference returned by of_get_parent() and use it
    to call of_node_put() for refcount balance.

    Fixes: 88e2da81241e ("clk: meson: aoclk: refactor common code into dedicated file")
    Fixes: 6682bd4d443f ("clk: meson: factorise meson64 peripheral clock controller drivers")
    Fixes: bb6eddd1d28c ("clk: meson: meson8b: use the HHI syscon if available")

    Signed-off-by: Liang He <windhl@126.com>
    Link: https://lore.kernel.org/r/20220628141038.168383-1-windhl@126.com
    Reviewed-by: Neil Armstrong <narmstrong@baylibre.com>
    Reviewed-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
    Signed-off-by: Stephen Boyd <sboyd@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/clk/meson/meson-aoclk.c | 5 ++++-
    drivers/clk/meson/meson-eeclk.c | 5 ++++-
    drivers/clk/meson/meson8b.c | 5 ++++-
    3 files changed, 12 insertions(+), 3 deletions(-)

    diff --git a/drivers/clk/meson/meson-aoclk.c b/drivers/clk/meson/meson-aoclk.c
    index 27cd2c1f3f61..434cd8f9de82 100644
    --- a/drivers/clk/meson/meson-aoclk.c
    +++ b/drivers/clk/meson/meson-aoclk.c
    @@ -38,6 +38,7 @@ int meson_aoclkc_probe(struct platform_device *pdev)
    struct meson_aoclk_reset_controller *rstc;
    struct meson_aoclk_data *data;
    struct device *dev = &pdev->dev;
    + struct device_node *np;
    struct regmap *regmap;
    int ret, clkid;

    @@ -49,7 +50,9 @@ int meson_aoclkc_probe(struct platform_device *pdev)
    if (!rstc)
    return -ENOMEM;

    - regmap = syscon_node_to_regmap(of_get_parent(dev->of_node));
    + np = of_get_parent(dev->of_node);
    + regmap = syscon_node_to_regmap(np);
    + of_node_put(np);
    if (IS_ERR(regmap)) {
    dev_err(dev, "failed to get regmap\n");
    return PTR_ERR(regmap);
    diff --git a/drivers/clk/meson/meson-eeclk.c b/drivers/clk/meson/meson-eeclk.c
    index 8d5a5dab955a..0e5e6b57eb20 100644
    --- a/drivers/clk/meson/meson-eeclk.c
    +++ b/drivers/clk/meson/meson-eeclk.c
    @@ -18,6 +18,7 @@ int meson_eeclkc_probe(struct platform_device *pdev)
    {
    const struct meson_eeclkc_data *data;
    struct device *dev = &pdev->dev;
    + struct device_node *np;
    struct regmap *map;
    int ret, i;

    @@ -26,7 +27,9 @@ int meson_eeclkc_probe(struct platform_device *pdev)
    return -EINVAL;

    /* Get the hhi system controller node */
    - map = syscon_node_to_regmap(of_get_parent(dev->of_node));
    + np = of_get_parent(dev->of_node);
    + map = syscon_node_to_regmap(np);
    + of_node_put(np);
    if (IS_ERR(map)) {
    dev_err(dev,
    "failed to get HHI regmap\n");
    diff --git a/drivers/clk/meson/meson8b.c b/drivers/clk/meson/meson8b.c
    index 8f3b7a94a667..827e78fb16a8 100644
    --- a/drivers/clk/meson/meson8b.c
    +++ b/drivers/clk/meson/meson8b.c
    @@ -3792,12 +3792,15 @@ static void __init meson8b_clkc_init_common(struct device_node *np,
    struct clk_hw_onecell_data *clk_hw_onecell_data)
    {
    struct meson8b_clk_reset *rstc;
    + struct device_node *parent_np;
    const char *notifier_clk_name;
    struct clk *notifier_clk;
    struct regmap *map;
    int i, ret;

    - map = syscon_node_to_regmap(of_get_parent(np));
    + parent_np = of_get_parent(np);
    + map = syscon_node_to_regmap(parent_np);
    + of_node_put(parent_np);
    if (IS_ERR(map)) {
    pr_err("failed to get HHI regmap - Trying obsolete regs\n");
    return;
    --
    2.35.1


    \
     
     \ /
      Last update: 2022-10-19 11:12    [W:4.020 / U:0.180 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site