1. 21 5月, 2010 2 次提交
    • P
      OMAP2+ clock: clean up clkt_clksel.c · 435699db
      Paul Walmsley 提交于
      This patch cleans up arch/arm/mach-omap2/clkt_clksel.c.  It:
      
      - makes several functions static that are not called outside the file;
      
      - adds documentation;
      
      - makes some code paths easier to read (hopefully), by breaking up
        compound statements and removing redundant checks;
      
      - converts some pr_err()s that indicate clock tree data problems into WARN()s,
        so they are more likely to be noticed;
      
      - and moves omap2_clk_round_rate() back into mach-omap2/clock.c, its proper
        home, since it is not clksel-specific.
      Signed-off-by: NPaul Walmsley <paul@pwsan.com>
      435699db
    • P
      OMAP2+ clock: remove DEFAULT_RATE clksel_rate flag · d74b4949
      Paul Walmsley 提交于
      The DEFAULT_RATE clksel_rate flag is essentially useless.  It was set
      on some of the lowest divisors, which, when switching to a much
      higher-rate parent, could have potentially resulted in rates that
      exceeded the hardware specifications for downstream clocks in the
      window between the clk_set_parent(), and a subsequent clk_set_rate().
      It seems much safer to just remove the flag and always use the highest
      available divisor (resulting in the lowest possible rate) after the
      switch, and this patch does so.
      
      Ideally, it would be best to first attempt to switch to a divisor that
      matches the clock's rate with the previous parent, if at all possible.
      But that is a project for some other day or some other person.  The
      parent changing code is rarely used.
      Signed-off-by: NPaul Walmsley <paul@pwsan.com>
      d74b4949
  2. 25 2月, 2010 2 次提交
    • P
      OMAP clock: drop RATE_FIXED clock flag · 51c19541
      Paul Walmsley 提交于
      The RATE_FIXED clock flag is pointless.  In the OMAP1 clock code, it
      simply causes the omap1_clk_round_rate() function to return the
      current rate of the clock.  omap1_clk_round_rate(), however, should
      never be called for a fixed-rate clock, since none of these clocks
      have a .round_rate function pointer set in their struct clk records.
      Similarly, in the OMAP2+ clock code, the RATE_FIXED flag just causes
      the clock code to emit a warning if the OMAP clock maintainer was
      foolish enough to add a .round_rate function pointer to a fixed-rate
      clock.  "Doctor, it hurts when I pretend that a fixed-rate clock is
      rate-changeable."  "Then don't pretend that a fixed-rate clock is
      rate-changeable."  It has no functional value.  This patch drops the
      RATE_FIXED clock flag, removing it from all clocks that are so marked.
      Signed-off-by: NPaul Walmsley <paul@pwsan.com>
      Cc: Richard Woodruff <r-woodruff2@ti.com>
      51c19541
    • P
      OMAP2 clock: drop DELAYED_APP clock flag · 8c34974a
      Paul Walmsley 提交于
      All of the clocks that are marked with DELAYED_APP are changed as part
      of the virt_prcm_set OPP virtual clock.  On 24xx, these clocks all
      need to be changed as part of a group to keep the clock tree
      functional - hence the need for the VALID_CONFIG bit, which is not
      present on later OMAPs.  These clocks should not be rate-changed
      independently.  So prevent these clocks from being changed
      independently by dropping their .round_rate and .set_rate function
      pointers.  It then turns out that the DELAYED_APP clock flag is no
      longer useful, so drop it and the associated code and renumber the
      clock flags.
      Signed-off-by: NPaul Walmsley <paul@pwsan.com>
      Cc: Richard Woodruff <r-woodruff2@ti.com>
      8c34974a
  3. 27 1月, 2010 4 次提交
    • P
      OMAP2/3/4 clock: move clksel clock functions into mach-omap2/clkt_clksel.c · df791b3e
      Paul Walmsley 提交于
      Move all clksel-related clock functions from mach-omap2/clock.c to
      mach-omap2/clkt_clksel.c.  This is intended to make the clock code
      easier to understand, since all of the functions needed to manage
      clksel clocks are now located in their own file, rather than being
      mixed with other, unrelated functions.
      
      Clock debugging is also now more finely-grained, since the DEBUG macro
      can now be defined for clksel clocks alon.  This should reduce
      unnecessary console noise when debugging.
      
      Also, if at some future point the mach-omap2/ directory is split
      into OMAP2/3/4 variants, this clkt file can be moved to the plat-omap/
      directory to be shared.
      
      Thanks to Alexander Shishkin <virtuoso@slind.org> for his comments to
      improve the patch description.
      Signed-off-by: NPaul Walmsley <paul@pwsan.com>
      Cc: Alexander Shishkin <virtuoso@slind.org>
      df791b3e
    • P
      OMAP2/3/4 clock: move DPLL clock functions into mach-omap2/clkt_dpll.c · 0b96af68
      Paul Walmsley 提交于
      Move all DPLL-related clock functions from mach-omap2/clock.c to
      mach-omap2/clkt_dpll.c.  This is intended to make the clock code
      easier to understand, since all of the functions needed to manage
      DPLLs are now located in their own file, rather than being mixed with
      other, unrelated functions.
      
      Clock debugging is also now more finely-grained, since the DEBUG macro
      can now be defined for DPLLs alone.  This should reduce unnecessary
      console noise when debugging.
      
      Also, if at some future point the mach-omap2/ directory is split
      into OMAP2/3/4 variants, this clkt file can be moved to the plat-omap/
      directory to be shared.
      
      Thanks to Alexander Shishkin <virtuoso@slind.org> for his comments to
      improve the patch description.
      Signed-off-by: NPaul Walmsley <paul@pwsan.com>
      Cc: Alexander Shishkin <virtuoso@slind.org>
      0b96af68
    • A
      ARM: OMAP4 clock framework: Remove the checks preventing OMAP4 clockdomain validation · bf985401
      Abhijit Pagare 提交于
      The clockdomain related code being in place, it is not necessary to have
      some part of the clock code commented out. This would help the validation of
      the clockdomain functions using the clock level interfaces.
      Signed-off-by: NAbhijit Pagare <abhijitpagare@ti.com>
      Signed-off-by: NPaul Walmsley <paul@pwsan.com>
      bf985401
    • P
      OMAP clock: make the fixed divisor clock code available for all OMAPs · e9b98f60
      Paul Walmsley 提交于
      One of the OMAP1 clocks can use the fixed divisor recalculation code
      introduced in the OMAP2 clock code, so rename the
      omap2_fixed_divisor_recalc() function to omap_fixed_divisor_recalc()
      and make it available to all OMAPs.  A followup patch converts the OMAP1
      clock.
      Signed-off-by: NPaul Walmsley <paul@pwsan.com>
      e9b98f60
  4. 12 12月, 2009 3 次提交
  5. 21 10月, 2009 1 次提交
    • T
      omap: headers: Move remaining headers from include/mach to include/plat · ce491cf8
      Tony Lindgren 提交于
      Move the remaining headers under plat-omap/include/mach
      to plat-omap/include/plat. Also search and replace the
      files using these headers to include using the right path.
      
      This was done with:
      
      #!/bin/bash
      mach_dir_old="arch/arm/plat-omap/include/mach"
      plat_dir_new="arch/arm/plat-omap/include/plat"
      headers=$(cd $mach_dir_old && ls *.h)
      omap_dirs="arch/arm/*omap*/ \
      drivers/video/omap \
      sound/soc/omap"
      other_files="drivers/leds/leds-ams-delta.c \
      drivers/mfd/menelaus.c \
      drivers/mfd/twl4030-core.c \
      drivers/mtd/nand/ams-delta.c"
      
      for header in $headers; do
      	old="#include <mach\/$header"
      	new="#include <plat\/$header"
      	for dir in $omap_dirs; do
      		find $dir -type f -name \*.[chS] | \
      			xargs sed -i "s/$old/$new/"
      	done
      	find drivers/ -type f -name \*omap*.[chS] | \
      		xargs sed -i "s/$old/$new/"
      	for file in $other_files; do
      		sed -i "s/$old/$new/" $file
      	done
      done
      
      for header in $(ls $mach_dir_old/*.h); do
      	git mv $header $plat_dir_new/
      done
      Signed-off-by: NTony Lindgren <tony@atomide.com>
      ce491cf8
  6. 03 9月, 2009 1 次提交
  7. 25 7月, 2009 1 次提交
    • P
      OMAP2/3 clock: split, rename omap2_wait_clock_ready() · 72350b29
      Paul Walmsley 提交于
      Some OMAP2/3 hardware modules have CM_IDLEST attributes that are not
      handled by the current omap2_wait_clock_ready() code.  In preparation
      for patches that fix the unusual devices, rename the function
      omap2_wait_clock_ready() to omap2_wait_module_ready() and split it
      into three parts:
      
      1. A clkops-specific companion clock return function (by default,
         omap2_clk_dflt_find_companion())
      
      2. A clkops-specific CM_IDLEST register address and bit shift return
         function (by default, omap2_clk_dflt_find_idlest())
      
      3. Code to wait for the CM to indicate that the module is ready
         (omap2_cm_wait_idlest())
      
      Clocks can now specify their own custom find_companion() and find_idlest()
      functions; used in subsequent patches.
      Signed-off-by: NPaul Walmsley <paul@pwsan.com>
      72350b29
  8. 20 6月, 2009 1 次提交
  9. 26 5月, 2009 2 次提交
  10. 13 5月, 2009 2 次提交
  11. 03 3月, 2009 1 次提交
    • R
      [ARM] omap: clk_set_parent: deny changing parent if clock is enabled · 4da37821
      Russell King 提交于
      Richard Woodruff writes:
      | The historic usage of this has been against single use leaf clocks
      | (1st instance of gptimer).  When it was used it did:
      |       clk_get()
      |       clk_set_parent()
      |       clk_enable()
      |
      | This usage was ok for that. Use on a disabled clock is needed.
      |
      | If there are multiple users on the clock or it is enabled there are
      | problems.
      |
      | The call can still be unfriendly if 2 different drivers are using the
      | clock with their own clock get/enable. It might be the function should
      | return an error if usecount != 0 to stop surprises.  It is all around
      | better if the parenting is done when the clock is off.
      
      This is a good reason to ensure that the clock is not enabled when
      clk_set_parent() is called.
      Acked-by: NRichard Woodruff <r-woodruff2@ti.com>
      Signed-off-by: NRussell King <rmk+kernel@arm.linux.org.uk>
      4da37821
  12. 20 2月, 2009 1 次提交
    • R
      [ARM] omap: add support for bypassing DPLLs · c0bf3132
      Russell King 提交于
      This roughly corresponds with OMAP commits: 7d06c48, 3241b19,
      88b5d9b, 18a5500, 9c909ac, 5c6497b, 8b1f0bd, 2ac1da8.
      
      For both OMAP2 and OMAP3, we note the reference and bypass clocks in
      the DPLL data structure.  Whenever we modify the DPLL rate, we first
      ensure that both the reference and bypass clocks are enabled.  Then,
      we decide whether to use the reference and DPLL, or the bypass clock
      if the desired rate is identical to the bypass rate, and program the
      DPLL appropriately.  Finally, we update the clock's parent, and then
      disable the unused clocks.
      
      This keeps the parents correctly balanced, and more importantly ensures
      that the bypass clock is running whenever we reprogram the DPLL.  This
      is especially important because the procedure for reprogramming the DPLL
      involves switching to the bypass clock.
      Signed-off-by: NRussell King <rmk+kernel@arm.linux.org.uk>
      c0bf3132
  13. 19 2月, 2009 1 次提交
  14. 14 2月, 2009 3 次提交
  15. 09 2月, 2009 15 次提交
    • R
      [ARM] omap: fix clockdomain enable/disable ordering · 8263e5b3
      Russell King 提交于
      Based on a patch from Paul Walmsley <paul@pwsan.com>:
      
       omap2_clk_enable() should enable a clock's clockdomain before
       attempting to enable its parent clock's clockdomain.  Similarly, in
       the unlikely event that the parent clock enable fails, the clockdomain
       should be disabled.
      
       linux-omap source commit is 6d6e285e5a7912b1ea68fadac387304c914aaba8.
      Signed-off-by: NRussell King <rmk+kernel@arm.linux.org.uk>
      8263e5b3
    • R
      [ARM] omap: fix usecount decrement bug · a7f8c599
      Russell King 提交于
      Based upon a patch from Paul Walmsley <paul@pwsan.com>:
      
       If _omap2_clk_enable() fails, the clock's usecount must be decremented
       by one no matter whether the clock has a parent or not.
      
      but reorganised a bit.
      Signed-off-by: NRussell King <rmk+kernel@arm.linux.org.uk>
      a7f8c599
    • P
      [ARM] OMAP2/3 clock: convert remaining MPU barriers into OCP barriers · f11fda6a
      Paul Walmsley 提交于
      Several parts of the OMAP2/3 clock code use wmb() to try to ensure
      that the hardware write completes before continuing.  This approach is
      problematic: wmb() only ensures that the write leaves the ARM.  It
      does not ensure that the write actually reaches the endpoint device.
      The endpoint device in this case - either the PRM, CM, or SCM - is
      three interconnects away from the ARM - and the final interconnect is
      low-speed.  And the OCP interconnects will post the write, and who
      knows how long that will take to complete.  So the wmb() is not what
      we want.  Worse, the wmb() is indiscriminate; it causes the ARM to
      flush any other unrelated buffered writes and wait for the local
      interconnect to acknowledge them - potentially very expensive.
      
      Fix this by converting the wmb()s into readbacks of the same PRM/CM/SCM
      register.  Since the PRM/CM/SCM devices use a single OCP thread, this
      will cause the MPU to block while waiting for posted writes to that device
      to complete.
      
      linux-omap source commit is 260f5487848681b4d8ea7430a709a601bbcb21d1.
      Signed-off-by: NPaul Walmsley <paul@pwsan.com>
      Signed-off-by: NTony Lindgren <tony@atomide.com>
      Signed-off-by: NRussell King <rmk+kernel@arm.linux.org.uk>
      f11fda6a
    • P
      [ARM] OMAP2xxx clock: consolidate DELAYED_APP clock commits; fix barrier · 439764cc
      Paul Walmsley 提交于
      Consolidate the commit code for DELAYED_APP clocks into a subroutine,
      _omap2xxx_clk_commit().  Also convert the MPU barrier wmb() into an
      OCP barrier, since with an MPU barrier, we have no guarantee that the
      write actually reached the endpoint device.
      
      linux-omap source commit is 0f5bdb736515801b296125d16937a21ff7b3cfdc.
      Signed-off-by: NPaul Walmsley <paul@pwsan.com>
      Signed-off-by: NTony Lindgren <tony@atomide.com>
      Signed-off-by: NRussell King <rmk+kernel@arm.linux.org.uk>
      439764cc
    • P
      [ARM] OMAP2/3 clock: don't use a barrier after clk_disable() · de07fedd
      Paul Walmsley 提交于
      clk_disable() previously used an ARM barrier, wmb(), to try to ensure
      that the hardware write completed before continuing.  There are some
      problems with this approach.
      
      The first problem is that wmb() only ensures that the write leaves the
      ARM -- not that it actually reaches the endpoint device.  In this
      case, the endpoint device - either the PRM, CM, or SCM - is three
      interconnects away from the ARM, and the final interconnect is
      low-speed.  And the OCP interconnects will post the write, who knows
      how long that will take to complete.  So the wmb() is not really what
      we want.
      
      Worse, the wmb() is indiscriminate; it will cause the ARM to flush any
      other unrelated buffered writes and wait for the local interconnect to
      acknowledge them - potentially very expensive.
      
      This first problem could be fixed by doing a readback of the same PRM/CM/SCM
      register.  Since these devices use a single OCP thread, this will cause the
      MPU to wait for the write to complete.
      
      But the primary problem is a conceptual one: clk_disable() should not
      need any kind of barrier.  clk_enable() needs one since device driver
      code must not access a device until its clocks are known to be
      enabled.  But clk_disable() has no such restriction.
      
      Since blocking the MPU on a PRM/CM/SCM write can be a very
      high-latency operation - several hundred MPU cycles - it's worth
      avoiding this barrier if possible.
      
      linux-omap source commit is f4aacad2c0ed1055622d5c1e910befece24ef0e2.
      Signed-off-by: NPaul Walmsley <paul@pwsan.com>
      Signed-off-by: NTony Lindgren <tony@atomide.com>
      Signed-off-by: NRussell King <rmk+kernel@arm.linux.org.uk>
      de07fedd
    • R
      [ARM] omap: create a proper tree of clocks · 3f0a820c
      Russell King 提交于
      Traditionally, we've tracked the parent/child relationships between
      clk structures by setting the child's parent member to point at the
      upstream clock.  As a result, when decending the tree, we have had
      to scan all clocks to find the children.
      
      Avoid this wasteful scanning by keeping a list of the clock's children.
      Signed-off-by: NRussell King <rmk+kernel@arm.linux.org.uk>
      3f0a820c
    • T
      [ARM] OMAP3: PM: Make sure clk_disable_unused() order is correct · 8463e20a
      Tero Kristo 提交于
      Current implementation will disable clocks in the order defined in clock34xx.h,
      at least DPLL4_M2X2 will hang in certain cases (and prevent retention / off)
      if clocks are not disabled in correct order. This patch makes sure the parent
      clocks will be active when disabling a clock.
      
      linux-omap source commit is 672680063420ef8c8c4e7271984bb9cc08171d29.
      Signed-off-by: NTero Kristo <tero.kristo@nokia.com>
      Signed-off-by: NKevin Hilman <khilman@deeprootsystems.com>
      Signed-off-by: NRussell King <rmk+kernel@arm.linux.org.uk>
      8463e20a
    • P
      [ARM] OMAP2 SDRC: move mach-omap2/memory.h into mach/sdrc.h · f8de9b2c
      Paul Walmsley 提交于
      Move the contents of the arch/arm/mach-omap2/memory.h file to the
      existing mach/sdrc.h file, and remove memory.h.  Modify files which
      include memory.h to include asm/arch/sdrc.h instead.
      
      linux-omap source commit is e7ae2d89921372fc4b9712a32cc401d645597807.
      Signed-off-by: NPaul Walmsley <paul@pwsan.com>
      Signed-off-by: NTony Lindgren <tony@atomide.com>
      Signed-off-by: NRussell King <rmk+kernel@arm.linux.org.uk>
      f8de9b2c
    • P
      [ARM] OMAP2/3 clock: clean up mach-omap2/clock.c · ee1eec36
      Paul Walmsley 提交于
      This patch rolls up several cleanup patches.
      
      1. Some unnecessarily verbose variable names are used in several clock.c
      functions; clean these up per CodingStyle.
      
      2. Remove omap2_get_clksel() and just use clk->clksel_reg and
      clk->clksel_mask directly.
      
      3. Get rid of void __iomem * usage in omap2_clksel_get_src_field.
      Prepend the function name with an underscore to highlight that it is a
      static function.
      
      linux-omap source commits are 7fa95e007ea2f3c4d0ecd2779d809756e7775894,
      af0ea23f1ee4a5bea3b026e38761b47089f9048a, and
      91c0c979b47c44b08f80e4f8d4c990fb158d82c4.
      Signed-off-by: NPaul Walmsley <paul@pwsan.com>
      Signed-off-by: NTony Lindgren <tony@atomide.com>
      Signed-off-by: NRussell King <rmk+kernel@arm.linux.org.uk>
      ee1eec36
    • P
      [ARM] OMAP3 clock: avoid invalid FREQSEL values during DPLL rate rounding · 95f538ac
      Paul Walmsley 提交于
      The DPLL FREQSEL jitter correction bits are set based on a table in
      the 34xx TRM, Table 4-38, according to the DPLL's internal clock
      frequency "Fint."  Several Fint frequency ranges are missing from this
      table.  Previously, we allowed these Fint frequency ranges to be
      selected in the rate rounding code, but did not change the FREQSEL bits.
      Correspondence with the OMAP hardware team indicates that Fint values
      not in the table should not be used.  So, prevent them from being
      selected during DPLL rate rounding.  This removes warnings and also
      can prevent the chip from locking up.
      
      The first pass through the rate rounding code will update the DPLL max
      and min dividers appropriately, so later rate rounding passes will run
      faster than the first.
      
      Peter de Schrijver <peter.de-schrijver@nokia.com> put up with several
      test cycles of this patch - thanks Peter.
      
      linux-omap source commit is f9c1b82f55b60fc39eaa6e7aa1fbe380c0ffe2e9.
      Signed-off-by: NPaul Walmsley <paul@pwsan.com>
      Cc: Peter de Schrijver <peter.de-schrijver@nokia.com>
      Signed-off-by: NTony Lindgren <tony@atomide.com>
      Signed-off-by: NRussell King <rmk+kernel@arm.linux.org.uk>
      95f538ac
    • P
      [ARM] OMAP3 clock: optimize DPLL rate rounding algorithm · 85a5f78d
      Paul Walmsley 提交于
      The previous DPLL rate rounding algorithm counted the divider (N) down
      from the maximum to 1.  Since we currently use a broad DPLL rate
      tolerance, and lower N values are more power-efficient, we can often
      bypass several iterations through the loop by counting N upwards from
      1.
      
      Peter de Schrijver <peter.de-schrijver@nokia.com> put up with several
      test cycles of this patch - thanks Peter.
      
      linux-omap source commit is 6f6d82bb2f80fa20a841ac3e95a6f44a5a156188.
      Signed-off-by: NPaul Walmsley <paul@pwsan.com>
      Cc: Peter de Schrijver <peter.de-schrijver@nokia.com>
      Signed-off-by: NTony Lindgren <tony@atomide.com>
      Signed-off-by: NRussell King <rmk+kernel@arm.linux.org.uk>
      85a5f78d
    • P
      [ARM] OMAP3 clock: remove unnecessary dpll_data dereferences · b3245040
      Paul Walmsley 提交于
      Remove some clutter from omap2_dpll_round_rate().
      
      linux-omap source commit is 4625dceb8583c02a6d67ededc9f6a8347b6b8cb7.
      Signed-off-by: NPaul Walmsley <paul@pwsan.com>
      Signed-off-by: NTony Lindgren <tony@atomide.com>
      Signed-off-by: NRussell King <rmk+kernel@arm.linux.org.uk>
      b3245040
    • P
      [ARM] OMAP: Fix sparse, checkpatch warnings in OMAP2/3 PRCM/PM code · fecb494b
      Paul Walmsley 提交于
      Fix sparse & checkpatch warnings in OMAP2/3 PRCM & PM code.  This mostly
      consists of:
      
      - converting pointer comparisons to integers in form similar to
        (ptr == 0) to the standard idiom (!ptr)
      
      - labeling a few non-static private functions as static
      
      - adding prototypes for *_init() functions in the appropriate header
        files, and getting rid of the corresponding open-coded extern
        prototypes in other C files
      
      - renaming the variable 'sclk' in mach-omap2/clock.c:omap2_get_apll_clkin
        to avoid shadowing an earlier declaration
      
      Clean up checkpatch issues.  This mostly involves:
      
      - converting some asm/ includes to linux/ includes
      
      - cleaning up some whitespace
      
      - getting rid of braces for conditionals with single following statements
      
      Also take care of a few odds and ends, including:
      
      - getting rid of unlikely() and likely() - none of this code is particularly
        fast-path code, so the performance impact seems slim; and some of those
        likely() and unlikely() indicators are probably not as accurate as the
        ARM's branch predictor
      
      - removing some superfluous casts
      
      linux-omap source commit is 347df59f5d20fdf905afbc26b1328b0e28a8a01b.
      Signed-off-by: NPaul Walmsley <paul@pwsan.com>
      Signed-off-by: NTony Lindgren <tony@atomide.com>
      Signed-off-by: NRussell King <rmk+kernel@arm.linux.org.uk>
      fecb494b
    • R
      [ARM] omap: move propagate_rate() calls into generic omap clock code · 9a5fedac
      Russell King 提交于
      propagate_rate() is recursive, so it makes sense to minimise the
      amount of stack which is used for each recursion.  So, rather than
      recursing back into it from the ->recalc functions if RATE_PROPAGATES
      is set, do that test at the higher level.
      Signed-off-by: NRussell King <rmk+kernel@arm.linux.org.uk>
      9a5fedac
    • R
      [ARM] omap: move clock propagation into core omap clock code · c6af4508
      Russell King 提交于
      Move the clock propagation calls for set_parent and set_rate into
      the core omap clock code, rather than having these calls scattered
      throughout the OMAP1 and OMAP2 implementations.
      Signed-off-by: NRussell King <rmk+kernel@arm.linux.org.uk>
      c6af4508