1. 15 5月, 2015 1 次提交
  2. 10 3月, 2015 3 次提交
  3. 07 3月, 2015 1 次提交
  4. 28 1月, 2015 1 次提交
  5. 18 1月, 2015 1 次提交
  6. 18 11月, 2014 1 次提交
    • J
      clk-divider: Fix READ_ONLY when divider > 1 · e6d5e7d9
      James Hogan 提交于
      Commit 79c6ab50 (clk: divider: add CLK_DIVIDER_READ_ONLY flag) in
      v3.16 introduced the CLK_DIVIDER_READ_ONLY flag which caused the
      recalc_rate() and round_rate() clock callbacks to be omitted.
      
      However using this flag has the unfortunate side effect of causing the
      clock recalculation code when a clock rate change is attempted to always
      treat it as a pass-through clock, i.e. with a fixed divide of 1, which
      may not be the case. Child clock rates are then recalculated using the
      wrong parent rate.
      
      Therefore instead of dropping the recalc_rate() and round_rate()
      callbacks, alter clk_divider_bestdiv() to always report the current
      divider as the best divider so that it is never altered.
      
      For me the read only clock was the system clock, which divided the PLL
      rate by 2, from which both the UART and the SPI clocks were divided.
      Initial setting of the UART rate set it correctly, but when the SPI
      clock was set, the other child clocks were miscalculated. The UART clock
      was recalculated using the PLL rate as the parent rate, resulting in a
      UART new_rate of double what it should be, and a UART which spewed forth
      garbage when the rate changes were propagated.
      Signed-off-by: NJames Hogan <james.hogan@imgtec.com>
      Cc: Thomas Abraham <thomas.ab@samsung.com>
      Cc: Tomasz Figa <t.figa@samsung.com>
      Cc: Max Schwarz <max.schwarz@online.de>
      Cc: <stable@vger.kernel.org> # v3.16+
      Acked-by: NHaojian Zhuang <haojian.zhuang@gmail.com>
      Signed-off-by: NMichael Turquette <mturquette@linaro.org>
      e6d5e7d9
  7. 28 5月, 2014 1 次提交
    • T
      clk: divider: Fix overflow in clk_divider_bestdiv · 3c17296f
      Tomasz Figa 提交于
      Commit c686078 ("clk: divider: Add round to closest divider") introduced
      a helper function to check whether given divisor is the best one instead
      of direct check. However due to int type used instead of unsigned long
      for passing calculated rates to this function in certain cases an
      overflow could occur, for example when trying to obtain maximum possible
      clock rate by calling clk_round_rate(..., UINT_MAX).
      
      This patch fixes this issue by changing the type of rate, now and best
      arguments of the function to unsigned long, which is the type that
      should be used for clock rates.
      Signed-off-by: NTomasz Figa <t.figa@samsung.com>
      Acked-by: NMaxime Coquelin <maxime.coquelin@st.com>
      Signed-off-by: NMike Turquette <mturquette@linaro.org>
      3c17296f
  8. 24 5月, 2014 2 次提交
  9. 01 5月, 2014 3 次提交
  10. 27 2月, 2014 1 次提交
    • T
      clk: divider: fix rate calculation for fractional rates · b11d282d
      Tomi Valkeinen 提交于
      clk-divider.c does not calculate the rates consistently at the moment.
      
      As an example, on OMAP3 we have a clock divider with a source clock of
      864000000 Hz. With dividers 6, 7 and 8 the theoretical rates are:
      
      6: 144000000
      7: 123428571.428571...
      8: 108000000
      
      Calling clk_round_rate() with the rate in the first column will give the
      rate in the second column:
      
      144000000 -> 144000000
      143999999 -> 123428571
      123428572 -> 123428571
      123428571 -> 108000000
      
      Note how clk_round_rate() returns 123428571 for rates from 123428572 to
      143999999, which is mathematically correct, but when clk_round_rate() is
      called with 123428571, the returned value is surprisingly 108000000.
      
      This means that the following code works a bit oddly:
      
      rate = clk_round_rate(clk, 123428572);
      clk_set_rate(clk, rate);
      
      As clk_set_rate() also does clock rate rounding, the result is that the
      clock is set to the rate of 108000000, not 123428571 returned by the
      clk_round_rate.
      
      This patch changes the clk-divider.c to use DIV_ROUND_UP when
      calculating the rate. This gives the following behavior which fixes the
      inconsistency:
      
      144000000 -> 144000000
      143999999 -> 123428572
      123428572 -> 123428572
      123428571 -> 108000000
      Signed-off-by: NTomi Valkeinen <tomi.valkeinen@ti.com>
      Signed-off-by: NMike Turquette <mturquette@linaro.org>
      b11d282d
  11. 09 1月, 2014 1 次提交
    • J
      clk: clk-divider: fix divisor > 255 bug · 778037e1
      James Hogan 提交于
      Commit 6d9252bd (clk: Add support for power of two type dividers)
      merged in v3.6 added the _get_val function to convert a divisor value to
      a register field value depending on the flags. However it used the type
      u8 for the div field, causing divisors larger than 255 to be masked
      and the resultant clock rate to be too high.
      
      E.g. in my case an 11bit divider was supposed to divide 24.576 MHz down
      to 32.768KHz. The divisor was correctly calculated as 750 (0x2ee). This
      was masked to 238 (0xee) resulting in a frequency of 103.26KHz.
      Signed-off-by: NJames Hogan <james.hogan@imgtec.com>
      Cc: Rajendra Nayak <rnayak@ti.com>
      Cc: linux-arm-kernel@lists.infradead.org
      Cc: stable@vger.kernel.org
      Signed-off-by: NMike Turquette <mturquette@linaro.org>
      778037e1
  12. 28 8月, 2013 1 次提交
  13. 17 8月, 2013 1 次提交
  14. 16 6月, 2013 1 次提交
  15. 11 6月, 2013 1 次提交
    • S
      clk: divider: do not propagate rate change request when unnecessary · 081c9025
      Shawn Guo 提交于
      If the current rate of parent clock is sufficient to provide child a
      requested rate with a proper divider setting, the rate change request
      should not be propagated.  Instead, changing the divider setting is good
      enough to get child clock run at the requested rate.
      
      On an imx6q clock configuration illustrated below,
      
        ahb --> ipg --> ipg_per
        132M    66M     66M
      
      calling clk_set_rate(ipg_per, 22M) with the current
      clk_divider_bestdiv() implementation will result in the rate change up
      to ahb level like the following, because of the unnecessary/incorrect
      rate change propagation.
      
        ahb --> ipg --> ipg_per
        66M     22M     22M
      
      Fix the problem by trying to see if the requested rate can be achieved
      by simply changing the divider value, and in that case return the
      divider immediately from function clk_divider_bestdiv() as the best
      one, so that all those unnecessary rate change propagation can be saved.
      Reported-by: NAnson Huang <b20788@freescale.com>
      Signed-off-by: NShawn Guo <shawn.guo@linaro.org>
      Signed-off-by: NMike Turquette <mturquette@linaro.org>
      081c9025
  16. 04 4月, 2013 1 次提交
  17. 19 1月, 2013 1 次提交
    • J
      clk-divider: fix macros · 1a3cd184
      James Hogan 提交于
      The macro is_power_of_two() in clk-divider.c was defined as !(i & ~i)
      which is always true.  Instead use is_power_of_2() from log2.h.
      
      Also add brackets around the macro arguments in div_mask to avoid any
      future operator precedence problems.
      Signed-off-by: NJames Hogan <james.hogan@imgtec.com>
      Cc: Joe Perches <joe@perches.com>
      Signed-off-by: NMike Turquette <mturquette@linaro.org>
      [mturquette@linaro.org: use log2.h per Joe Perches; update changelog]
      1a3cd184
  18. 12 7月, 2012 3 次提交
    • R
      clk: Add CLK_IS_BASIC flag to identify basic clocks · f7d8caad
      Rajendra Nayak 提交于
      Most platforms end up using a mix of basic clock types and
      some which use clk_hw_foo struct for filling in custom platform
      information when the clocks don't fit into basic types supported.
      
      In platform code, its useful to know if a clock is using a basic
      type or clk_hw_foo, which helps platforms know if they can
      safely use to_clk_hw_foo to derive the clk_hw_foo pointer from
      clk_hw.
      
      Mark all basic clocks with a CLK_IS_BASIC flag.
      Signed-off-by: NRajendra Nayak <rnayak@ti.com>
      Signed-off-by: NMike Turquette <mturquette@linaro.org>
      f7d8caad
    • R
      clk: Add support for rate table based dividers · 357c3f0a
      Rajendra Nayak 提交于
      Some divider clks do not have any obvious relationship
      between the divider and the value programmed in the
      register. For instance, say a value of 1 could signify divide
      by 6 and a value of 2 could signify divide by 4 etc.
      Also there are dividers where not all values possible
      based on the bitfield width are valid. For instance
      a 3 bit wide bitfield can be used to program a value
      from 0 to 7. However its possible that only 0 to 4
      are valid values.
      
      All these cases need the platform code to pass a simple
      table of divider/value tuple, so the framework knows
      the exact value to be written based on the divider
      calculation and can also do better error checking.
      
      This patch adds support for such rate table based
      dividers and as part of the support adds a new
      registration function 'clk_register_divider_table()'
      and a new macro for static definition
      'DEFINE_CLK_DIVIDER_TABLE'.
      Signed-off-by: NRajendra Nayak <rnayak@ti.com>
      Signed-off-by: NMike Turquette <mturquette@linaro.org>
      357c3f0a
    • R
      clk: Add support for power of two type dividers · 6d9252bd
      Rajendra Nayak 提交于
      Quite often dividers and the value programmed in the
      register have a relation of 'power of two', something like
      value	div
      0	1
      1	2
      2	4
      3	8...
      
      Add support for such dividers as part of clk-divider.
      
      The clk-divider flag 'CLK_DIVIDER_POWER_OF_TWO' should be used
      to define such clocks.
      Signed-off-by: NRajendra Nayak <rnayak@ti.com>
      Signed-off-by: NMike Turquette <mturquette@linaro.org>
      6d9252bd
  19. 02 5月, 2012 1 次提交
    • 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
  20. 25 4月, 2012 5 次提交
  21. 17 3月, 2012 1 次提交
    • M
      clk: basic clock hardware types · 9d9f78ed
      Mike Turquette 提交于
      Many platforms support simple gateable clocks, fixed-rate clocks,
      adjustable divider clocks and multi-parent multiplexer clocks.
      
      This patch introduces basic clock types for the above-mentioned hardware
      which share some common characteristics.
      
      Based on original work by Jeremy Kerr and contribution by Jamie Iles.
      Dividers and multiplexor clocks originally contributed by Richard Zhao &
      Sascha Hauer.
      Signed-off-by: NMike Turquette <mturquette@linaro.org>
      Signed-off-by: NMike Turquette <mturquette@ti.com>
      Reviewed-by: NAndrew Lunn <andrew@lunn.ch>
      Tested-by: NAndrew Lunn <andrew@lunn.ch>
      Reviewed-by: NRob 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>
      Signed-off-by: NArnd Bergmann <arnd@arndb.de>
      9d9f78ed