From mboxrd@z Thu Jan 1 00:00:00 1970 From: shawn.guo@freescale.com (Shawn Guo) Date: Mon, 7 Jul 2014 21:56:37 +0800 Subject: [PATCH] ARM: imx: fix shared gate clock In-Reply-To: References: <1404701631-13870-1-git-send-email-shawn.guo@freescale.com> Message-ID: <20140707135636.GS30239@dragon> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org On Mon, Jul 07, 2014 at 09:49:00AM -0300, Fabio Estevam wrote: > On Sun, Jul 6, 2014 at 11:53 PM, Shawn Guo wrote: > > Let's say clock A and B are two gate clocks that share the same register > > bit in hardware. Therefore they are registered as shared gate clocks > > with imx_clk_gate2_shared(). > > > > In a scenario that only clock A is enabled by clk_enable(A) while B is > > not used, the shared gate will be unexpectedly disabled in hardware. > > It happens because clk_enable(A) increments the share_count from 0 to 1, > > while clock B is unused to clock core, and therefore the core function > > will just disable B by calling clk->ops->disable() directly. The > > consequence of that call is share_count is decremented to 0 and the gate > > is disabled in hardware, even though clock A is still in use. > > > > The patch fixes the issue by initializing the share_count per hardware > > state and returns enable state per share_count from .is_enabled() hook, > > in case it's a shared gate. > > > > While at it, add a check in clk_gate2_disable() to ensure it's never > > called with a zero share_count. > > > > Reported-by: Fabio Estevam > > Fixes: f9f28cdf2167 ("ARM: imx: add shared gate clock support") > > Signed-off-by: Shawn Guo > > --- > > Fabio, > > > > Per my testing, it fixes the shared gate clock issue you reported. > > But I'd like to get your confirmation before I ask arm-soc folks to > > apply it for 3.16-rc. > > I can get audio working now and I have also inspected CCGR5 register > and it looks correct now: > > Tested-by: Fabio Estevam Thanks, Fabio. Arnd, Olof, Can you please apply this patch for 3.16? Shawn