1. 12 1月, 2013 3 次提交
    • P
      clk: human-readable debugfs clock tree summary · 1af599df
      Prashant Gaikwad 提交于
      Adds debug file "clk_summary" in /sys/kernel/debug/clk dir.
      It helps to view all the clock registered in human-readable format.
      
      For example:
         clock                        enable_cnt  prepare_cnt  rate
      ---------------------------------------------------------------------
       i2s0_sync                      0           0            24000000
       spdif_in_sync                  0           0            24000000
          spdif_mux                   0           0            24000000
             spdif                    0           0            24000000
                spdif_doubler         0           0            48000000
                   spdif_div          0           0            48000000
                      spdif_2x        0           0            48000000
       clk_32k                        2           2            32768
          blink_override              1           1            32768
             blink                    1           1            32768
       clk_m                          2           2            12000000
          clk_out_3_mux               0           0            12000000
             clk_out_3                0           0            12000000
          pll_ref                     3           3            12000000
             pll_e_mux                0           0            12000000
                pll_e                 0           0            100000000
                   cml0               0           0            100000000
                   cml1               0           0            100000000
                   pciex              0           0            100000000
             pll_d2                   0           0            1000000
                pll_d2_out0           0           0            500000
             pll_d                    0           0            1000000
                pll_d_out0            0           0            500000
                   dsib_mux           0           0            500000
                      dsib            0           0            500000
                   dsia               0           0            500000
      Signed-off-by: NPrashant Gaikwad <pgaikwad@nvidia.com>
      Signed-off-by: NMike Turquette <mturquette@linaro.org>
      1af599df
    • N
      clk: export __clk_get_name for re-use in imx-ipu-v3 and others · 4895084c
      Niels de Vos 提交于
      This fixes the following error when building for arm-imx:
      > ERROR: "__clk_get_name" [drivers/staging/imx-drm/ipu-v3/imx-ipu-v3.ko] undefined!
      > make[1]: *** [__modpost] Error 1
      > make: *** [modules] Error 2
      
      There are valid usecases to get the name of a clock, be it for debugging
      purposes or to register a children of a clock like done in this IPU driver.
      Therefore exporting __clk_get_name() and make it available for others makes
      sense.
      Reported-by: NPeter Robinson <pbrobinson@gmail.com>
      CC: Sascha Hauer <s.hauer@pengutronix.de>
      CC: Mike Turquette <mturquette@linaro.org>
      Signed-off-by: NNiels de Vos <ndevos@redhat.com>
      Signed-off-by: NMike Turquette <mturquette@linaro.org>
      [mturquette@linaro.org: removal of inline made redundant by 65800b2c]
      4895084c
    • R
      clk: Don't mark shared helper functions as inline · 65800b2c
      Russ Dill 提交于
      The helper functions that access the opaque struct clk should
      not be marked inline since they are contained in clk.c, but expected
      to be used by other compilation units. This causes compile errors
      under gcc-4.7
      
      In file included from arch/arm/mach-omap2/clockdomain.c:25:0:
      arch/arm/mach-omap2/clockdomain.c: In function ‘clkdm_clk_disable’:
      include/linux/clk-provider.h:338:12: error: inlining failed in call to always_inline ‘__clk_get_enable_count’: function body not available
      arch/arm/mach-omap2/clockdomain.c:1001:28: error: called from here
      make[1]: *** [arch/arm/mach-omap2/clockdomain.o] Error 1
      make: *** [arch/arm/mach-omap2] Error 2
      Signed-off-by: NRuss Dill <Russ.Dill@ti.com>
      Signed-off-by: NMike Turquette <mturquette@linaro.org>
      [mturquette@linaro.org: removed fixes made redundant by commit 93532c8a]
      [mturquette@linaro.org: improved $SUBJECT]
      65800b2c
  2. 11 12月, 2012 1 次提交
    • M
      clk: introduce optional disable_unused callback · 7c045a55
      Mike Turquette 提交于
      Some gate clocks have special needs which must be handled during the
      disable-unused clocks sequence.  These needs might be driven by software
      due to the fact that we're disabling a clock outside of the normal
      clk_disable path and a clk's enable_count will not be accurate.  On the
      other hand a specific hardware programming sequence might need to be
      followed for this corner case.
      
      This change is needed for the upcoming OMAP port to the common clock
      framework.  Specifically, it is undesirable to treat the disable-unused
      path identically to the normal clk_disable path since other software
      layers are involved.  In this case OMAP's clockdomain code throws WARNs
      and bails early due to the clock's enable_count being set to zero.  A
      custom callback mitigates this problem nicely.
      
      Cc: Paul Walmsley <paul@pwsan.com>
      Acked-by: NUlf Hansson <ulf.hansson@linaro.org>
      Acked-by: NLinus Walleij <linus.walleij@linaro.org>
      Signed-off-by: NMike Turquette <mturquette@linaro.org>
      7c045a55
  3. 27 11月, 2012 1 次提交
    • M
      clk: clock multiplexers may register out of order · 1f61e5f1
      Martin Fuzzey 提交于
      When a clock, C is initialised any orphan clocks listing C as
      a possible parent are reparented to it regardless of the
      parent requested by the orphan's get_parent() operation.
      
      This means that multiplexers registered before their parents
      are reparented to the first parent subsequently declared,
      regardless of the selection made by the hardware registers.
      
      For example:
      	static const char *sel[] = { "srcA", "srcB", "dummy", "srcC" };
      
      	child = clk_register_mux(NULL, "child",  sel, ARRAY_SIZE(sel), ...);
      	clk_register_fixed(NULL, "dummy", ...);
      	clk_register_fixed(NULL, "srcA", ...);
      	clk_register_fixed(NULL, "srcB", ...);
      	clk_register_fixed(NULL, "srcC", ...);
      
      Causes child's parent to always be "dummy".
      
      To fix this, when an orphanned clock has a get_parent() operation,
      only reparent to the clock indicated by get_parent().
      Signed-off-by: NMartin Fuzzey <mfuzzey@parkeon.com>
      Signed-off-by: NMike Turquette <mturquette@linaro.org>
      [mturquette@linaro.org: improve $SUBJECT]
      1f61e5f1
  4. 30 10月, 2012 2 次提交
  5. 08 9月, 2012 1 次提交
  6. 07 9月, 2012 1 次提交
  7. 31 7月, 2012 1 次提交
    • F
      clk: validate pointer in __clk_disable() · e47c6a34
      Fengguang Wu 提交于
      clk_get() returns -ENOENT on error and some careless caller might
      dereference it without error checking:
      
      In mxc_rnga_remove():
      
              struct clk *clk = clk_get(&pdev->dev, "rng");
      
      	// ...
      
              clk_disable(clk);
      
      Since it's insane to audit the lots of existing and future clk users,
      let's add a check in the callee to avoid kernel panic and warn about
      any buggy user.
      
      Cc: Russell King <rmk@arm.linux.org.uk>
      Cc: Paul Gortmaker <paul.gortmaker@windriver.com>
      Cc: Viresh Kumar <viresh.kumar@st.com>
      Cc: viresh kumar <viresh.linux@gmail.com>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      e47c6a34
  8. 12 7月, 2012 2 次提交
    • G
      clk: add DT clock binding support · 766e6a4e
      Grant Likely 提交于
      Based on work 1st by Ben Herrenschmidt and Jeremy Kerr, then by Grant
      Likely, this patch adds support to clk_get to allow drivers to retrieve
      clock data from the device tree.
      
      Platforms scan for clocks in DT with of_clk_init and a match table, and
      the register a provider through of_clk_add_provider. The provider's
      clk_src_get function will be called when a device references the
      provider's OF node for a clock reference.
      
      v6 (Rob Herring):
          - Return error values instead of NULL to match clock framework
            expectations
      
      v5 (Rob Herring):
          - Move from drivers/of into common clock subsystem
          - Squashed "dt/clock: add a simple provider get function" and
            "dt/clock: add function to get parent clock name"
          - Rebase to 3.4-rc1
          - Drop CONFIG_OF_CLOCK and just use CONFIG_OF
          - Add missing EXPORT_SYMBOL to various functions
          - s/clock-output-name/clock-output-names/
          - Define that fixed-clock binding is a single output
      
      v4 (Rob Herring):
          - Rework for common clk subsystem
          - Add of_clk_get_parent_name function
      
      v3: - Clarified documentation
      
      v2: - fixed errant ';' causing compile error
          - Editorial fixes from Shawn Guo
          - merged in adding lookup to clkdev
          - changed property names to match established convention. After
            working with the binding a bit it really made more sense to follow the
            lead of 'reg', 'gpios' and 'interrupts' by making the input simply
            'clocks' & 'clock-names' instead of 'clock-input-*', and to only use
            clock-output* for the producer nodes. (Sorry Shawn, this will mean
            you need to change some code, but it should be trivial)
          - Add ability to inherit clocks from parent nodes by using an empty
            'clock-ranges' property.  Useful for busses.  I could use some feedback
            on the new property name, 'clock-ranges' doesn't feel right to me.
      Signed-off-by: NGrant Likely <grant.likely@secretlab.ca>
      Signed-off-by: NRob Herring <rob.herring@calxeda.com>
      Reviewed-by: NShawn Guo <shawn.guo@freescale.com>
      Cc: Sascha Hauer <kernel@pengutronix.de>
      Signed-off-by: NMike Turquette <mturquette@linaro.org>
      766e6a4e
    • R
      clk: cache parent clocks only for muxes · 9ca1c5a4
      Rajendra Nayak 提交于
      caching parent clocks makes sense only when a clock has more
      than one parent (mux clocks).
      Avoid doing this for every other clock.
      Signed-off-by: NRajendra Nayak <rnayak@ti.com>
      [mturquette@linaro.org: removed extra parentheses]
      Signed-off-by: NMike Turquette <mturquette@linaro.org>
      9ca1c5a4
  9. 04 7月, 2012 1 次提交
    • R
      clk: fix parent validation in __clk_set_parent() · 863b1327
      Rajendra Nayak 提交于
      The below commit introduced a bug in __clk_set_parent()
      which could cause it to *skip* the parent validation
      which makes sure the parent passed to the api is a valid
      one.
      
          commit 7975059d
          Author: Rajendra Nayak <rnayak@ti.com>
          Date:   Wed Jun 6 14:41:31 2012 +0530
      
              clk: Allow late cache allocation for clk->parents
      
      This was identified by the following compiler warning..
      
          drivers/clk/clk.c: In function '__clk_set_parent':
          drivers/clk/clk.c:1083:5: warning: 'i' may be used uninitialized in this function [-Wuninitialized]
      
      .. as reported by Marc Kleine-Budde.
      
      There were various options discussed on how to fix this, one
      being initing 'i' to clk->num_parents, but the below approach
      was found to be more appropriate as it also makes the 'parent
      validation' code simpler to read.
      Reported-by: NMarc Kleine-Budde <mkl@pengutronix.de>
      Signed-off-by: NRajendra Nayak <rnayak@ti.com>
      Signed-off-by: NMike Turquette <mturquette@linaro.org>
      Cc: stable@kernel.org
      863b1327
  10. 26 6月, 2012 2 次提交
    • P
      clk: Check parent for NULL in clk_change_rate · bf47b4fd
      Pawel Moll 提交于
      clk_change_rate() is accessing parent's rate without checking
      if the parent exists at all. In case of root clocks this will
      cause NULL pointer dereference.
      
      This patch follows what clk_calc_new_rates() does in such
      situation.
      Signed-off-by: NPawel Moll <pawel.moll@arm.com>
      Signed-off-by: NMike Turquette <mturquette@linaro.org>
      Cc: stable@kernel.org
      bf47b4fd
    • R
      clk: Allow late cache allocation for clk->parents · 7975059d
      Rajendra Nayak 提交于
      Parent clocks for muxes are cached in clk->parents to
      avoid frequent lookups, however the cache allocation happens
      only during clock registeration and later clk_set_parent()
      assumes a cache space available and allocated.
      
      This is not entirely true for platforms which do early clock
      registerations wherein the cache allocation using kzalloc
      could fail during clock registeration.
      
      Allow cache allocation to happen later as part of clk_set_parent()
      to help such cases and avoid crashes assuming a cache being
      available.
      
      While here also replace existing kmalloc() with kzalloc()
      in the file.
      Signed-off-by: NRajendra Nayak <rnayak@ti.com>
      Signed-off-by: NMike Turquette <mturquette@linaro.org>
      Cc: stable@kernel.org
      7975059d
  11. 16 5月, 2012 2 次提交
  12. 09 5月, 2012 2 次提交
  13. 02 5月, 2012 2 次提交
    • V
      clk: clk_set_rate() must fail if CLK_SET_RATE_GATE is set and clk is enabled · 0e1c0301
      Viresh Kumar 提交于
      This is well documented but isn't implemented. clk_set_rate() must check if
      flags have CLK_SET_RATE_GATE bit set and is enabled too.
      Signed-off-by: NViresh Kumar <viresh.kumar@st.com>
      Signed-off-by: NMike Turquette <mturquette@linaro.org>
      0e1c0301
    • S
      clk: Use a separate struct for holding init data. · 0197b3ea
      Saravana Kannan 提交于
      Create a struct clk_init_data to hold all data that needs to be passed from
      the platfrom specific driver to the common clock framework during clock
      registration. Add a pointer to this struct inside clk_hw.
      
      This has several advantages:
      * Completely hides struct clk from many clock platform drivers and static
        clock initialization code that don't care for static initialization of
        the struct clks.
      * For platforms that want to do complete static initialization, it removed
        the need to directly mess with the struct clk's fields while still
        allowing to statically allocate struct clk. This keeps the code more
        future proof even if they include clk-private.h.
      * Simplifies the generic clk_register() function and allows adding optional
        fields in the future without modifying the function signature.
      * Simplifies the static initialization of clocks on all platforms by
        removing the need for forward delcarations or convoluted macros.
      Signed-off-by: NSaravana Kannan <skannan@codeaurora.org>
      [mturquette@linaro.org: kept DEFINE_CLK_* macros and __clk_init]
      Signed-off-by: NMike Turquette <mturquette@linaro.org>
      Cc: Andrew Lunn <andrew@lunn.ch>
      Cc: Rob Herring <rob.herring@calxeda.com>
      Cc: Russell King <linux@arm.linux.org.uk>
      Cc: Jeremy Kerr <jeremy.kerr@canonical.com>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: Arnd Bergman <arnd.bergmann@linaro.org>
      Cc: Paul Walmsley <paul@pwsan.com>
      Cc: Shawn Guo <shawn.guo@freescale.com>
      Cc: Sascha Hauer <s.hauer@pengutronix.de>
      Cc: Jamie Iles <jamie@jamieiles.com>
      Cc: Richard Zhao <richard.zhao@linaro.org>
      Cc: Saravana Kannan <skannan@codeaurora.org>
      Cc: Magnus Damm <magnus.damm@gmail.com>
      Cc: Mark Brown <broonie@opensource.wolfsonmicro.com>
      Cc: Linus Walleij <linus.walleij@stericsson.com>
      Cc: Stephen Boyd <sboyd@codeaurora.org>
      Cc: Amit Kucheria <amit.kucheria@linaro.org>
      Cc: Deepak Saxena <dsaxena@linaro.org>
      Cc: Grant Likely <grant.likely@secretlab.ca>
      0197b3ea
  14. 25 4月, 2012 11 次提交
  15. 17 3月, 2012 1 次提交
    • M
      clk: introduce the common clock framework · b2476490
      Mike Turquette 提交于
      The common clock framework defines a common struct clk useful across
      most platforms as well as an implementation of the clk api that drivers
      can use safely for managing clocks.
      
      The net result is consolidation of many different struct clk definitions
      and platform-specific clock framework implementations.
      
      This patch introduces the common struct clk, struct clk_ops and an
      implementation of the well-known clock api in include/clk/clk.h.
      Platforms may define their own hardware-specific clock structure and
      their own clock operation callbacks, so long as it wraps an instance of
      struct clk_hw.
      
      See Documentation/clk.txt for more details.
      
      This patch is based on the work of Jeremy Kerr, which in turn was based
      on the work of Ben Herrenschmidt.
      Signed-off-by: NMike Turquette <mturquette@linaro.org>
      Signed-off-by: NMike Turquette <mturquette@ti.com>
      Reviewed-by: NThomas Gleixner <tglx@linutronix.de>
      Tested-by: NAndrew Lunn <andrew@lunn.ch>
      Reviewed-by: Rob Herring <rob.herring <at> calxeda.com>
      Cc: Russell King <linux@arm.linux.org.uk>
      Cc: Jeremy Kerr <jeremy.kerr@canonical.com>
      Cc: Arnd Bergman <arnd.bergmann@linaro.org>
      Cc: Paul Walmsley <paul@pwsan.com>
      Cc: Shawn Guo <shawn.guo@freescale.com>
      Cc: Sascha Hauer <s.hauer@pengutronix.de>
      Cc: Richard Zhao <richard.zhao@linaro.org>
      Cc: Saravana Kannan <skannan@codeaurora.org>
      Cc: Magnus Damm <magnus.damm@gmail.com>
      Cc: Mark Brown <broonie@opensource.wolfsonmicro.com>
      Cc: Linus Walleij <linus.walleij@stericsson.com>
      Cc: Stephen Boyd <sboyd@codeaurora.org>
      Cc: Amit Kucheria <amit.kucheria@linaro.org>
      Cc: Deepak Saxena <dsaxena@linaro.org>
      Cc: Grant Likely <grant.likely@secretlab.ca>
      Signed-off-by: NArnd Bergmann <arnd@arndb.de>
      b2476490