* [PATCH] clk: clk-divider: Export clk_register_divider() @ 2013-08-02 16:14 Fabio Estevam 2013-08-02 16:47 ` Lothar Waßmann 2013-08-16 2:00 ` Mike Turquette 0 siblings, 2 replies; 5+ messages in thread From: Fabio Estevam @ 2013-08-02 16:14 UTC (permalink / raw) To: linux-arm-kernel From: Fabio Estevam <fabio.estevam@freescale.com> clk_register_divider() needs to be exported so that it could be used in a module driver, otherwise we get the following error: ERROR: "clk_register_divider" [sound/soc/mxs/snd-soc-mxs.ko] undefined! Signed-off-by: Fabio Estevam <fabio.estevam@freescale.com> --- drivers/clk/clk-divider.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/clk/clk-divider.c b/drivers/clk/clk-divider.c index 6d55eb2..98ee97f 100644 --- a/drivers/clk/clk-divider.c +++ b/drivers/clk/clk-divider.c @@ -317,6 +317,7 @@ struct clk *clk_register_divider(struct device *dev, const char *name, return _register_divider(dev, name, parent_name, flags, reg, shift, width, clk_divider_flags, NULL, lock); } +EXPORT_SYMBOL_GPL(clk_register_divider); /** * clk_register_divider_table - register a table based divider clock with -- 1.8.1.2 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH] clk: clk-divider: Export clk_register_divider() 2013-08-02 16:14 [PATCH] clk: clk-divider: Export clk_register_divider() Fabio Estevam @ 2013-08-02 16:47 ` Lothar Waßmann 2013-08-02 17:48 ` Sylwester Nawrocki 2013-08-04 15:50 ` Shawn Guo 2013-08-16 2:00 ` Mike Turquette 1 sibling, 2 replies; 5+ messages in thread From: Lothar Waßmann @ 2013-08-02 16:47 UTC (permalink / raw) To: linux-arm-kernel Hi, Fabio Estevam writes: > From: Fabio Estevam <fabio.estevam@freescale.com> > > clk_register_divider() needs to be exported so that it could be used > in a module driver, otherwise we get the following error: > > ERROR: "clk_register_divider" [sound/soc/mxs/snd-soc-mxs.ko] undefined! > > Signed-off-by: Fabio Estevam <fabio.estevam@freescale.com> > --- > drivers/clk/clk-divider.c | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/drivers/clk/clk-divider.c b/drivers/clk/clk-divider.c > index 6d55eb2..98ee97f 100644 > --- a/drivers/clk/clk-divider.c > +++ b/drivers/clk/clk-divider.c > @@ -317,6 +317,7 @@ struct clk *clk_register_divider(struct device *dev, const char *name, > return _register_divider(dev, name, parent_name, flags, reg, shift, > width, clk_divider_flags, NULL, lock); > } > +EXPORT_SYMBOL_GPL(clk_register_divider); > > /** > * clk_register_divider_table - register a table based divider clock with > -- Did you try unloading and reloading the module with this patch? The registered clock divider will not be deregistered, but will be reused upon reload, still using the old (now unmapped) address to access the clk registers. Thus the whole approach used in snd-soc-mxs is broken by design (at least for modules). You would need to keep the mapping of the base registers established upon the first module load to let the clock divider registered from the first module load stay operational across module unload/load. I already considered creating a patch for this, but the whole approach seemed me too crappy to submit it to mainline. Lothar Wa?mann -- ___________________________________________________________ Ka-Ro electronics GmbH | Pascalstra?e 22 | D - 52076 Aachen Phone: +49 2408 1402-0 | Fax: +49 2408 1402-10 Gesch?ftsf?hrer: Matthias Kaussen Handelsregistereintrag: Amtsgericht Aachen, HRB 4996 www.karo-electronics.de | info at karo-electronics.de ___________________________________________________________ ^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH] clk: clk-divider: Export clk_register_divider() 2013-08-02 16:47 ` Lothar Waßmann @ 2013-08-02 17:48 ` Sylwester Nawrocki 2013-08-04 15:50 ` Shawn Guo 1 sibling, 0 replies; 5+ messages in thread From: Sylwester Nawrocki @ 2013-08-02 17:48 UTC (permalink / raw) To: linux-arm-kernel Hi, On 08/02/2013 06:47 PM, Lothar Wa?mann wrote: > Fabio Estevam writes: >> From: Fabio Estevam <fabio.estevam@freescale.com> >> >> clk_register_divider() needs to be exported so that it could be used >> in a module driver, otherwise we get the following error: >> >> ERROR: "clk_register_divider" [sound/soc/mxs/snd-soc-mxs.ko] undefined! >> >> Signed-off-by: Fabio Estevam <fabio.estevam@freescale.com> >> --- >> drivers/clk/clk-divider.c | 1 + >> 1 file changed, 1 insertion(+) >> >> diff --git a/drivers/clk/clk-divider.c b/drivers/clk/clk-divider.c >> index 6d55eb2..98ee97f 100644 >> --- a/drivers/clk/clk-divider.c >> +++ b/drivers/clk/clk-divider.c >> @@ -317,6 +317,7 @@ struct clk *clk_register_divider(struct device *dev, const char *name, >> return _register_divider(dev, name, parent_name, flags, reg, shift, >> width, clk_divider_flags, NULL, lock); >> } >> +EXPORT_SYMBOL_GPL(clk_register_divider); >> >> /** >> * clk_register_divider_table - register a table based divider clock with >> -- > Did you try unloading and reloading the module with this patch? > > The registered clock divider will not be deregistered, but will be > reused upon reload, still using the old (now unmapped) address to > access the clk registers. Thus the whole approach used in snd-soc-mxs > is broken by design (at least for modules). > > You would need to keep the mapping of the base registers established > upon the first module load to let the clock divider registered from > the first module load stay operational across module unload/load. Not sure this is a good idea, clock supplier should unregister its clocks upon module removal. > I already considered creating a patch for this, but the whole approach > seemed me too crappy to submit it to mainline. I have been working on adding support for the clocks unregistration, currently only clk_unregister(), following discussion [1] and based a little on patch [2]. I'll try to post what I currently have as an RFC on Monday. I've added __clk_get(), __clk_put() for the common clock API implementation. These functions take reference on the clock supplier module, but there is also plain reference counting so memory allocated for the clock object is freed when last consumer calls clk_put() on the clock. This is mainly to avoid a disaster in cases when driver is unbound through "unbind" sysfs attribute, the module is not unloaded but the driver's remove() callback is invoked - which causes the clock to be unregistered. My use case is that an SoC camera host interface provides clock for external image sensor driver, and since the host interface driver is a LKM this can't work without proper clock unregistration support. [1] http://www.spinics.net/lists/arm-kernel/msg258387.html [2] http://www.spinics.net/lists/arm-kernel/msg247548.html Thanks, Sylwester ^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH] clk: clk-divider: Export clk_register_divider() 2013-08-02 16:47 ` Lothar Waßmann 2013-08-02 17:48 ` Sylwester Nawrocki @ 2013-08-04 15:50 ` Shawn Guo 1 sibling, 0 replies; 5+ messages in thread From: Shawn Guo @ 2013-08-04 15:50 UTC (permalink / raw) To: linux-arm-kernel On Fri, Aug 02, 2013 at 06:47:37PM +0200, Lothar Wa?mann wrote: > Hi, > > Fabio Estevam writes: > > From: Fabio Estevam <fabio.estevam@freescale.com> > > > > clk_register_divider() needs to be exported so that it could be used > > in a module driver, otherwise we get the following error: > > > > ERROR: "clk_register_divider" [sound/soc/mxs/snd-soc-mxs.ko] undefined! > > > > Signed-off-by: Fabio Estevam <fabio.estevam@freescale.com> > > --- > > drivers/clk/clk-divider.c | 1 + > > 1 file changed, 1 insertion(+) > > > > diff --git a/drivers/clk/clk-divider.c b/drivers/clk/clk-divider.c > > index 6d55eb2..98ee97f 100644 > > --- a/drivers/clk/clk-divider.c > > +++ b/drivers/clk/clk-divider.c > > @@ -317,6 +317,7 @@ struct clk *clk_register_divider(struct device *dev, const char *name, > > return _register_divider(dev, name, parent_name, flags, reg, shift, > > width, clk_divider_flags, NULL, lock); > > } > > +EXPORT_SYMBOL_GPL(clk_register_divider); > > > > /** > > * clk_register_divider_table - register a table based divider clock with > > -- > Did you try unloading and reloading the module with this patch? > > The registered clock divider will not be deregistered, but will be > reused upon reload, still using the old (now unmapped) address to > access the clk registers. Thus the whole approach used in snd-soc-mxs > is broken by design (at least for modules). It's just an immediate stop-gap fix to the failure of devm_clk_get() in sgtl5000 driver. The register access will only happen when clk_*_rate() is called on the clock, since it's a divider clock. Yeah, I have to admit it's dirty, but it shouldn't cause any problem for now, because sgtl5000 driver does not do any clk_*_rate() calls so far. > > You would need to keep the mapping of the base registers established > upon the first module load to let the clock divider registered from > the first module load stay operational across module unload/load. > > I already considered creating a patch for this, but the whole approach > seemed me too crappy to submit it to mainline. I agree with Sylwester. Clock framework should support deregistration. Shawn ^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH] clk: clk-divider: Export clk_register_divider() 2013-08-02 16:14 [PATCH] clk: clk-divider: Export clk_register_divider() Fabio Estevam 2013-08-02 16:47 ` Lothar Waßmann @ 2013-08-16 2:00 ` Mike Turquette 1 sibling, 0 replies; 5+ messages in thread From: Mike Turquette @ 2013-08-16 2:00 UTC (permalink / raw) To: linux-arm-kernel Quoting Fabio Estevam (2013-08-02 09:14:07) > From: Fabio Estevam <fabio.estevam@freescale.com> > > clk_register_divider() needs to be exported so that it could be used > in a module driver, otherwise we get the following error: > > ERROR: "clk_register_divider" [sound/soc/mxs/snd-soc-mxs.ko] undefined! > > Signed-off-by: Fabio Estevam <fabio.estevam@freescale.com> > --- > drivers/clk/clk-divider.c | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/drivers/clk/clk-divider.c b/drivers/clk/clk-divider.c > index 6d55eb2..98ee97f 100644 > --- a/drivers/clk/clk-divider.c > +++ b/drivers/clk/clk-divider.c > @@ -317,6 +317,7 @@ struct clk *clk_register_divider(struct device *dev, const char *name, > return _register_divider(dev, name, parent_name, flags, reg, shift, > width, clk_divider_flags, NULL, lock); > } > +EXPORT_SYMBOL_GPL(clk_register_divider); > > /** > * clk_register_divider_table - register a table based divider clock with > -- > 1.8.1.2 Taken into clk-next. I also exported clk_register_divider_table. Updated patch below: >From 43cf78b2d87c525d009515c936e4ad2c6c7cfc24 Mon Sep 17 00:00:00 2001 From: Fabio Estevam <fabio.estevam@freescale.com> Date: Fri, 2 Aug 2013 13:14:07 -0300 Subject: [PATCH] clk: clk-divider: Export clk_register_divider() clk_register_divider() needs to be exported so that it could be used in a module driver, otherwise we get the following error: ERROR: "clk_register_divider" [sound/soc/mxs/snd-soc-mxs.ko] undefined! Signed-off-by: Fabio Estevam <fabio.estevam@freescale.com> Signed-off-by: Mike Turquette <mturquette@linaro.org> [mturquette at linaro.org: also export clk_register_divider_table] --- drivers/clk/clk-divider.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/clk/clk-divider.c b/drivers/clk/clk-divider.c index 6d55eb2..749372f 100644 --- a/drivers/clk/clk-divider.c +++ b/drivers/clk/clk-divider.c @@ -317,6 +317,7 @@ struct clk *clk_register_divider(struct device *dev, const char *name, return _register_divider(dev, name, parent_name, flags, reg, shift, width, clk_divider_flags, NULL, lock); } +EXPORT_SYMBOL_GPL(clk_register_divider); /** * clk_register_divider_table - register a table based divider clock with @@ -341,3 +342,4 @@ struct clk *clk_register_divider_table(struct device *dev, const char *name, return _register_divider(dev, name, parent_name, flags, reg, shift, width, clk_divider_flags, table, lock); } +EXPORT_SYMBOL_GPL(clk_register_divider_table); -- 1.8.1.2 ^ permalink raw reply related [flat|nested] 5+ messages in thread
end of thread, other threads:[~2013-08-16 2:00 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2013-08-02 16:14 [PATCH] clk: clk-divider: Export clk_register_divider() Fabio Estevam 2013-08-02 16:47 ` Lothar Waßmann 2013-08-02 17:48 ` Sylwester Nawrocki 2013-08-04 15:50 ` Shawn Guo 2013-08-16 2:00 ` Mike Turquette
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).