All of lore.kernel.org
 help / color / mirror / Atom feed
From: rnayak@ti.com (Rajendra Nayak)
To: linux-arm-kernel@lists.infradead.org
Subject: [RESEND PATCH 1/3] clk: Remove _clk_reparent from API and restructure code
Date: Wed, 20 Mar 2013 15:43:36 +0530	[thread overview]
Message-ID: <51498BD0.7010508@ti.com> (raw)
In-Reply-To: <CAPDyKFoon6p4Sgd+oxFra-qCUg_mV_V0Thtb8aim7mu0APUCsA@mail.gmail.com>

On Wednesday 20 March 2013 03:15 PM, Ulf Hansson wrote:
> On 19 March 2013 22:20, Mike Turquette <mturquette@linaro.org> wrote:
>> Quoting Ulf Hansson (2013-03-12 12:20:48)
>>> From: Ulf Hansson <ulf.hansson@linaro.org>
>>>
>>> There shall be no reason for keeping this API available for clock
>>> providers. So we remove it from the API and restrcuture the code so
>>> for example the COMMON_CLK_DEBUG part is separated.
>>>
>>
>> Hi Ulf,
>>
>> There is one reason to keep this api.  OMAP currently uses it to change
>> the parent of a PLL during .set_rate.  This is kind of a legacy
>> mechanism however, and the reentrancy series I posted actually takes
>> care of this one corner case:
>> http://article.gmane.org/gmane.linux.kernel/1448449
> 
> Hi Mike,
> 
> It was a while ago I created this patch, so I guess this has beed
> merged without me noticing, sorry.
> 
>>
>> Let me see how the OMAP folks feel about taking that patch in, which
>> eliminates the only external user of the API.  +Rajendra & Benoit
>>
> 
> I have no problem rebasing the patch and keep the API, if that is the
> easiest way forward.

Ulf, It would be good if you could keep the api for now. I seemed to have
missed out on Mikes patch getting rid of the the api from OMAP PLL .set_rate.
I will take a stab at that to get rid of that api along with the other OMAP
only things that exist today as part of Common clk.

regards,
Rajendra

> Although, I guess in the end you want to remove these kind of internal
> clk API functions. So, if we get ack from Rajendra & Benoit, it is
> better to remove the API right?
> 
> Kind regards
> Ulf Hansson
> 
>> Thanks,
>> Mike
>>
>>> This patch will also make it possible to hold the spinlock over the
>>> actual update of the clock tree topology, which could not be done
>>> before when both debugfs updates and clock rate updates was done
>>> within the same function.
>>>
>>> Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
>>> ---
>>>  drivers/clk/clk.c            |   82 ++++++++++++++++++++++++------------------
>>>  include/linux/clk-provider.h |    1 -
>>>  2 files changed, 48 insertions(+), 35 deletions(-)
>>>
>>> diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c
>>> index 593a2e4..2e10cc1 100644
>>> --- a/drivers/clk/clk.c
>>> +++ b/drivers/clk/clk.c
>>> @@ -284,6 +284,39 @@ out:
>>>  }
>>>
>>>  /**
>>> + * clk_debug_reparent - reparent clk node in the debugfs clk tree
>>> + * @clk: the clk being reparented
>>> + * @new_parent: the new clk parent, may be NULL
>>> + *
>>> + * Rename clk entry in the debugfs clk tree if debugfs has been
>>> + * initialized.  Otherwise it bails out early since the debugfs clk tree
>>> + * will be created lazily by clk_debug_init as part of a late_initcall.
>>> + *
>>> + * Caller must hold prepare_lock.
>>> + */
>>> +static void clk_debug_reparent(struct clk *clk, struct clk *new_parent)
>>> +{
>>> +       struct dentry *d;
>>> +       struct dentry *new_parent_d;
>>> +
>>> +       if (!inited)
>>> +               return;
>>> +
>>> +       if (new_parent)
>>> +               new_parent_d = new_parent->dentry;
>>> +       else
>>> +               new_parent_d = orphandir;
>>> +
>>> +       d = debugfs_rename(clk->dentry->d_parent, clk->dentry,
>>> +                       new_parent_d, clk->name);
>>> +       if (d)
>>> +               clk->dentry = d;
>>> +       else
>>> +               pr_debug("%s: failed to rename debugfs entry for %s\n",
>>> +                               __func__, clk->name);
>>> +}
>>> +
>>> +/**
>>>   * clk_debug_init - lazily create the debugfs clk tree visualization
>>>   *
>>>   * clks are often initialized very early during boot before memory can
>>> @@ -338,6 +371,9 @@ static int __init clk_debug_init(void)
>>>  late_initcall(clk_debug_init);
>>>  #else
>>>  static inline int clk_debug_register(struct clk *clk) { return 0; }
>>> +static inline void clk_debug_reparent(struct clk *clk, struct clk *new_parent)
>>> +{
>>> +}
>>>  #endif
>>>
>>>  /* caller must hold prepare_lock */
>>> @@ -1179,16 +1215,8 @@ out:
>>>         return ret;
>>>  }
>>>
>>> -void __clk_reparent(struct clk *clk, struct clk *new_parent)
>>> +static void clk_reparent(struct clk *clk, struct clk *new_parent)
>>>  {
>>> -#ifdef CONFIG_COMMON_CLK_DEBUG
>>> -       struct dentry *d;
>>> -       struct dentry *new_parent_d;
>>> -#endif
>>> -
>>> -       if (!clk || !new_parent)
>>> -               return;
>>> -
>>>         hlist_del(&clk->child_node);
>>>
>>>         if (new_parent)
>>> @@ -1196,28 +1224,7 @@ void __clk_reparent(struct clk *clk, struct clk *new_parent)
>>>         else
>>>                 hlist_add_head(&clk->child_node, &clk_orphan_list);
>>>
>>> -#ifdef CONFIG_COMMON_CLK_DEBUG
>>> -       if (!inited)
>>> -               goto out;
>>> -
>>> -       if (new_parent)
>>> -               new_parent_d = new_parent->dentry;
>>> -       else
>>> -               new_parent_d = orphandir;
>>> -
>>> -       d = debugfs_rename(clk->dentry->d_parent, clk->dentry,
>>> -                       new_parent_d, clk->name);
>>> -       if (d)
>>> -               clk->dentry = d;
>>> -       else
>>> -               pr_debug("%s: failed to rename debugfs entry for %s\n",
>>> -                               __func__, clk->name);
>>> -out:
>>> -#endif
>>> -
>>>         clk->parent = new_parent;
>>> -
>>> -       __clk_recalc_rates(clk, POST_RATE_CHANGE);
>>>  }
>>>
>>>  static int __clk_set_parent(struct clk *clk, struct clk *parent)
>>> @@ -1329,7 +1336,9 @@ int clk_set_parent(struct clk *clk, struct clk *parent)
>>>         }
>>>
>>>         /* propagate rate recalculation downstream */
>>> -       __clk_reparent(clk, parent);
>>> +       clk_reparent(clk, parent);
>>> +       clk_debug_reparent(clk, parent);
>>> +       __clk_recalc_rates(clk, POST_RATE_CHANGE);
>>>
>>>  out:
>>>         mutex_unlock(&prepare_lock);
>>> @@ -1453,14 +1462,19 @@ int __clk_init(struct device *dev, struct clk *clk)
>>>         hlist_for_each_entry_safe(orphan, tmp, tmp2, &clk_orphan_list, child_node) {
>>>                 if (orphan->ops->get_parent) {
>>>                         i = orphan->ops->get_parent(orphan->hw);
>>> -                       if (!strcmp(clk->name, orphan->parent_names[i]))
>>> -                               __clk_reparent(orphan, clk);
>>> +                       if (!strcmp(clk->name, orphan->parent_names[i])) {
>>> +                               clk_reparent(orphan, clk);
>>> +                               clk_debug_reparent(orphan, clk);
>>> +                               __clk_recalc_rates(orphan, POST_RATE_CHANGE);
>>> +                       }
>>>                         continue;
>>>                 }
>>>
>>>                 for (i = 0; i < orphan->num_parents; i++)
>>>                         if (!strcmp(clk->name, orphan->parent_names[i])) {
>>> -                               __clk_reparent(orphan, clk);
>>> +                               clk_reparent(orphan, clk);
>>> +                               clk_debug_reparent(orphan, clk);
>>> +                               __clk_recalc_rates(orphan, POST_RATE_CHANGE);
>>>                                 break;
>>>                         }
>>>          }
>>> diff --git a/include/linux/clk-provider.h b/include/linux/clk-provider.h
>>> index 4989b8a..87a7c2c 100644
>>> --- a/include/linux/clk-provider.h
>>> +++ b/include/linux/clk-provider.h
>>> @@ -359,7 +359,6 @@ struct clk *__clk_lookup(const char *name);
>>>   */
>>>  int __clk_prepare(struct clk *clk);
>>>  void __clk_unprepare(struct clk *clk);
>>> -void __clk_reparent(struct clk *clk, struct clk *new_parent);
>>>  unsigned long __clk_round_rate(struct clk *clk, unsigned long rate);
>>>
>>>  struct of_device_id;
>>> --
>>> 1.7.10

  reply	other threads:[~2013-03-20 10:13 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-03-12 19:20 [RESEND PATCH 0/3] clk: Fixup issues for clk_set_parent Ulf Hansson
2013-03-12 19:20 ` [RESEND PATCH 1/3] clk: Remove _clk_reparent from API and restructure code Ulf Hansson
2013-03-19 21:20   ` Mike Turquette
2013-03-20  9:45     ` Ulf Hansson
2013-03-20 10:13       ` Rajendra Nayak [this message]
2013-03-20 15:03         ` Mike Turquette
2013-03-20 20:39           ` Ulf Hansson
2013-03-12 19:20 ` [RESEND PATCH 2/3] clk: Improve errorhandling for clk_set_parent Ulf Hansson
2013-03-12 19:20 ` [RESEND PATCH 3/3] clk: Fixup locking issues " Ulf Hansson

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=51498BD0.7010508@ti.com \
    --to=rnayak@ti.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.