From mboxrd@z Thu Jan 1 00:00:00 1970 From: Stephen Boyd Subject: Re: [PATCH v5 1/2] clk: add lpc18xx creg clk driver Date: Fri, 4 Mar 2016 09:42:01 -0800 Message-ID: <20160304174201.GH24999@codeaurora.org> References: <1457041625-21163-1-git-send-email-manabian@gmail.com> <1457041625-21163-2-git-send-email-manabian@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Return-path: Content-Disposition: inline In-Reply-To: <1457041625-21163-2-git-send-email-manabian@gmail.com> Sender: linux-clk-owner@vger.kernel.org To: Joachim Eastwood Cc: mturquette@baylibre.com, linux-clk@vger.kernel.org, devicetree@vger.kernel.org List-Id: devicetree@vger.kernel.org On 03/03, Joachim Eastwood wrote: > diff --git a/drivers/clk/nxp/clk-lpc18xx-creg.c b/drivers/clk/nxp/clk-lpc18xx-creg.c > new file mode 100644 > index 000000000000..d44b61afa2dc > --- /dev/null > +++ b/drivers/clk/nxp/clk-lpc18xx-creg.c > @@ -0,0 +1,226 @@ > + > +static int clk_creg_32k_is_prepared(struct clk_hw *hw) > +{ > + struct clk_creg_data *creg = to_clk_creg(hw); > + u32 reg; > + > + regmap_read(creg->reg, LPC18XX_CREG_CREG0, ®); > + > + return !(reg & LPC18XX_CREG_CREG0_PD32KHZ) && > + !(reg & LPC18XX_CREG_CREG0_RESET32KHZ); > +} > + > +static unsigned long clk_creg_1k_recalc_rate(struct clk_hw *hw, > + unsigned long parent_rate) > +{ > + return parent_rate / 32; > +} > + > +static int clk_creg_enable(struct clk_hw *hw) > +{ > + struct clk_creg_data *creg = to_clk_creg(hw); > + > + return regmap_update_bits(creg->reg, LPC18XX_CREG_CREG0, > + creg->en_mask, creg->en_mask); Have you tested this with CONFIG_DEBUG_ATOMIC_SLEEP=y? I seem to recall that syscon uses a regmap with regmap_config::fast_io set to false, so all regmap operations take a mutex lock. clk_ops::enable is called with a spinlock held, so that isn't going to work well. -- Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project