From mboxrd@z Thu Jan 1 00:00:00 1970 From: emilio@elopez.com.ar (=?ISO-8859-1?Q?Emilio_L=F3pez?=) Date: Mon, 24 Feb 2014 20:38:44 -0300 Subject: [PATCH 1/5] clk: sun6i: Protect CPU clock In-Reply-To: <20140224163034.GN21483@n2100.arm.linux.org.uk> References: <1393258967-4843-1-git-send-email-maxime.ripard@free-electrons.com> <1393258967-4843-2-git-send-email-maxime.ripard@free-electrons.com> <20140224163034.GN21483@n2100.arm.linux.org.uk> Message-ID: <530BD804.5090806@elopez.com.ar> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org Hello Russell, El 24/02/14 13:30, Russell King - ARM Linux escribi?: > On Mon, Feb 24, 2014 at 05:22:43PM +0100, Maxime Ripard wrote: >> Right now, AHB is an indirect child clock of the CPU clock. If that happens to >> change, since the CPU clock has no other consumers declared in Linux, it would >> be shut down, which is not really a good idea. >> >> Prevent this by forcing it enabled. >> >> Signed-off-by: Maxime Ripard >> --- >> drivers/clk/sunxi/clk-sunxi.c | 8 ++++++++ >> 1 file changed, 8 insertions(+) >> >> diff --git a/drivers/clk/sunxi/clk-sunxi.c b/drivers/clk/sunxi/clk-sunxi.c >> index 23baad9..cedaf4b 100644 >> --- a/drivers/clk/sunxi/clk-sunxi.c >> +++ b/drivers/clk/sunxi/clk-sunxi.c >> @@ -1301,6 +1301,14 @@ static void __init sunxi_clock_protect(void) >> clk_prepare_enable(clk); >> clk_put(clk); >> } >> + >> + /* CPU clocks - sun6i */ >> + clk = clk_get(NULL, "cpu"); >> + if (!IS_ERR(clk)) { >> + clk_prepare_enable(clk); >> + clk_put(clk); >> + } > > This is broken. I'm not sure what's difficult to grasp about the concept > of "while a clock is in use, you should keep a reference to that clock". > > That implies that if you get a clock, and then enable it, you don't > put the clock until you've disabled it. Why is this so? Can't a clock be left enabled while nobody has a reference to it? I have looked around in Documentation/ (rather quickly I must say) and have not found any explicit mention that it is required to keep a reference to the clock while it's enabled. I'd appreciate it if you could explain this a bit more verbosely or point me to the relevant documents. For what it's worth, I've seen this same pattern on enable/disable_clock() on drivers/base/power/clock_ops.c as well. Cheers, Emilio From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?ISO-8859-1?Q?Emilio_L=F3pez?= Subject: Re: [PATCH 1/5] clk: sun6i: Protect CPU clock Date: Mon, 24 Feb 2014 20:38:44 -0300 Message-ID: <530BD804.5090806@elopez.com.ar> References: <1393258967-4843-1-git-send-email-maxime.ripard@free-electrons.com> <1393258967-4843-2-git-send-email-maxime.ripard@free-electrons.com> <20140224163034.GN21483@n2100.arm.linux.org.uk> Reply-To: linux-sunxi-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: quoted-printable Return-path: In-Reply-To: <20140224163034.GN21483-l+eeeJia6m9vn6HldHNs0ANdhmdF6hFW@public.gmane.org> List-Post: , List-Help: , List-Archive: Sender: linux-sunxi-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org List-Subscribe: , List-Unsubscribe: , To: Russell King - ARM Linux , Maxime Ripard Cc: Dan Williams , Vinod Koul , devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, Mike Turquette , linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-sunxi-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org, dmaengine-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org List-Id: devicetree@vger.kernel.org Hello Russell, El 24/02/14 13:30, Russell King - ARM Linux escribi=F3: > On Mon, Feb 24, 2014 at 05:22:43PM +0100, Maxime Ripard wrote: >> Right now, AHB is an indirect child clock of the CPU clock. If that happ= ens to >> change, since the CPU clock has no other consumers declared in Linux, it= would >> be shut down, which is not really a good idea. >> >> Prevent this by forcing it enabled. >> >> Signed-off-by: Maxime Ripard >> --- >> drivers/clk/sunxi/clk-sunxi.c | 8 ++++++++ >> 1 file changed, 8 insertions(+) >> >> diff --git a/drivers/clk/sunxi/clk-sunxi.c b/drivers/clk/sunxi/clk-sunxi= .c >> index 23baad9..cedaf4b 100644 >> --- a/drivers/clk/sunxi/clk-sunxi.c >> +++ b/drivers/clk/sunxi/clk-sunxi.c >> @@ -1301,6 +1301,14 @@ static void __init sunxi_clock_protect(void) >> clk_prepare_enable(clk); >> clk_put(clk); >> } >> + >> + /* CPU clocks - sun6i */ >> + clk =3D clk_get(NULL, "cpu"); >> + if (!IS_ERR(clk)) { >> + clk_prepare_enable(clk); >> + clk_put(clk); >> + } > > This is broken. I'm not sure what's difficult to grasp about the concept > of "while a clock is in use, you should keep a reference to that clock". > > That implies that if you get a clock, and then enable it, you don't > put the clock until you've disabled it. Why is this so? Can't a clock be left enabled while nobody has a=20 reference to it? I have looked around in Documentation/ (rather quickly=20 I must say) and have not found any explicit mention that it is required=20 to keep a reference to the clock while it's enabled. I'd appreciate it=20 if you could explain this a bit more verbosely or point me to the=20 relevant documents. For what it's worth, I've seen this same pattern on=20 enable/disable_clock() on drivers/base/power/clock_ops.c as well. Cheers, Emilio --=20 You received this message because you are subscribed to the Google Groups "= linux-sunxi" group. To unsubscribe from this group and stop receiving emails from it, send an e= mail to linux-sunxi+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit https://groups.google.com/groups/opt_out. From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753181AbaBXXjL (ORCPT ); Mon, 24 Feb 2014 18:39:11 -0500 Received: from yotta.elopez.com.ar ([31.220.24.173]:45796 "EHLO yotta.elopez.com.ar" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752555AbaBXXjJ (ORCPT ); Mon, 24 Feb 2014 18:39:09 -0500 Message-ID: <530BD804.5090806@elopez.com.ar> Date: Mon, 24 Feb 2014 20:38:44 -0300 From: =?ISO-8859-1?Q?Emilio_L=F3pez?= User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.3.0 MIME-Version: 1.0 To: Russell King - ARM Linux , Maxime Ripard CC: Dan Williams , Vinod Koul , devicetree@vger.kernel.org, Mike Turquette , linux-kernel@vger.kernel.org, linux-sunxi@googlegroups.com, dmaengine@vger.kernel.org, linux-arm-kernel@lists.infradead.org Subject: Re: [PATCH 1/5] clk: sun6i: Protect CPU clock References: <1393258967-4843-1-git-send-email-maxime.ripard@free-electrons.com> <1393258967-4843-2-git-send-email-maxime.ripard@free-electrons.com> <20140224163034.GN21483@n2100.arm.linux.org.uk> In-Reply-To: <20140224163034.GN21483@n2100.arm.linux.org.uk> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hello Russell, El 24/02/14 13:30, Russell King - ARM Linux escribió: > On Mon, Feb 24, 2014 at 05:22:43PM +0100, Maxime Ripard wrote: >> Right now, AHB is an indirect child clock of the CPU clock. If that happens to >> change, since the CPU clock has no other consumers declared in Linux, it would >> be shut down, which is not really a good idea. >> >> Prevent this by forcing it enabled. >> >> Signed-off-by: Maxime Ripard >> --- >> drivers/clk/sunxi/clk-sunxi.c | 8 ++++++++ >> 1 file changed, 8 insertions(+) >> >> diff --git a/drivers/clk/sunxi/clk-sunxi.c b/drivers/clk/sunxi/clk-sunxi.c >> index 23baad9..cedaf4b 100644 >> --- a/drivers/clk/sunxi/clk-sunxi.c >> +++ b/drivers/clk/sunxi/clk-sunxi.c >> @@ -1301,6 +1301,14 @@ static void __init sunxi_clock_protect(void) >> clk_prepare_enable(clk); >> clk_put(clk); >> } >> + >> + /* CPU clocks - sun6i */ >> + clk = clk_get(NULL, "cpu"); >> + if (!IS_ERR(clk)) { >> + clk_prepare_enable(clk); >> + clk_put(clk); >> + } > > This is broken. I'm not sure what's difficult to grasp about the concept > of "while a clock is in use, you should keep a reference to that clock". > > That implies that if you get a clock, and then enable it, you don't > put the clock until you've disabled it. Why is this so? Can't a clock be left enabled while nobody has a reference to it? I have looked around in Documentation/ (rather quickly I must say) and have not found any explicit mention that it is required to keep a reference to the clock while it's enabled. I'd appreciate it if you could explain this a bit more verbosely or point me to the relevant documents. For what it's worth, I've seen this same pattern on enable/disable_clock() on drivers/base/power/clock_ops.c as well. Cheers, Emilio