Re: [PATCH v2 2/3] irqchip/gic-pm: use devm_clk_*() helpers

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 21/03/2019 10:46, Marc Zyngier wrote:
> On Thu, 21 Mar 2019 09:37:46 +0000,
> Jon Hunter <jonathanh@xxxxxxxxxx> wrote:
>>
>>
>> On 20/03/2019 18:08, Marc Zyngier wrote:
>>> On Thu, 14 Mar 2019 13:23:13 +0530
>>> Sameer Pujar <spujar@xxxxxxxxxx> wrote:
>>>
>>>> gic-pm driver is using pm_clk_*() interface to manage clock resources. With
>>>> this, clocks always remain ON. This happens on Tegra devices which use BPMP
>>>> co-processor to manage the clocks, where clocks are enabled during prepare
>>>> phase. This is necessary because calls to BPMP are always blocking. When
>>>> pm_clk_*() interface is used on such devices, clock prepare count is not
>>>> balanced till driver remove() gets executed and hence clocks are seen ON
>>>> always. This patch replaces pm_clk_*() with devm_clk_*() framework.
>>>
>>> Does this mean this code effectively becomes Tegra specific, bypassing
>>> the existing PM framework to workaround implementation-specific issues?
>>> I don't really mind (Tegra is apparently the only user), but I'd rather
>>> make it sure I understand what is going on.
>>
>> No not at all. It is still generic and not Tegra specific, but for newer
>> Tegra devices we cannot use the pm-clk framework and so use the clk
>> framework directly. So this still works for any device. Consider it a
>> lower common denominator.
> 
> But this assumes that the lowest common denominator will be good
> enough for whatever comes next. As I said, I don't really mind (I
> really hope that GICvX (for X < 3) is dead as a nail).

I guess I hope that that would never be an issue.

>>
>>> Also, I object to the subject line. This is not about switching to some
>>> fancy helpers. This is about changing the life-cycle of clocks, which
>>> is entirely different. Please make sure the subject reflects what the
>>> patch is doing.
>>>
>>> Otherwise, there isn't much to say about the code. A couple of very
>>> minor nits below:
>>>
>>>>
>>>> Suggested-by: Mohan Kumar D <mkumard@xxxxxxxxxx>
>>>> Signed-off-by: Sameer Pujar <spujar@xxxxxxxxxx>
>>>> Reviewed-by: Jonathan Hunter <jonathanh@xxxxxxxxxx>
>>>> ---
>>>>  drivers/irqchip/irq-gic-pm.c | 70 +++++++++++++++++++++++++++++---------------
>>>>  1 file changed, 47 insertions(+), 23 deletions(-)
>>>>
>>>> diff --git a/drivers/irqchip/irq-gic-pm.c b/drivers/irqchip/irq-gic-pm.c
>>>> index ecafd29..ae6c8d6 100644
>>>> --- a/drivers/irqchip/irq-gic-pm.c
>>>> +++ b/drivers/irqchip/irq-gic-pm.c
>>>> @@ -19,7 +19,6 @@
>>>>  #include <linux/of_irq.h>
>>>>  #include <linux/irqchip/arm-gic.h>
>>>>  #include <linux/platform_device.h>
>>>> -#include <linux/pm_clock.h>
>>>>  #include <linux/pm_runtime.h>
>>>>  #include <linux/slab.h>
>>>>  
>>>> @@ -28,14 +27,29 @@ struct gic_clk_data {
>>>>  	const char *const *clocks;
>>>>  };
>>>>  
>>>> +struct gic_chip_pm {
>>>> +	struct gic_chip_data *chip_data;
>>>> +	const struct gic_clk_data *clk_data;
>>>> +	struct clk **clk_handle;
>>>
>>> It is really ugly that clk_handle cannot be bundled with clk_data.
>>> Oh well.
>>
>> I wonder if we should use clk_bulk_data here and then use the clk_bulk
>> APIs below? It would simplify the code and given that the clocks are
>> well-defined for the GIC (ie. for a given version we know what clocks
>> are required) I don't see any harm in doing so.
> 
> That'd be fine indeed. It seems to clash with the use devm_clk_get
> below, but I don't think the use of the devm* helpers bring much
> here.
There are devm_clk_bulk APIs available and so we can use them there as well.

Cheers
Jon

-- 
nvpublic



[Index of Archives]     [ARM Kernel]     [Linux ARM]     [Linux ARM MSM]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux