1. 28 1月, 2015 4 次提交
    • J
      clk: qcom: Add support for regmap divider clocks · 4116076e
      Josh Cartwright 提交于
      Add support for dividers that use regmap instead of readl/writel.
      Signed-off-by: NJosh Cartwright <joshc@codeaurora.org>
      Signed-off-by: NRajendra Nayak <rnayak@codeaurora.org>
      [sboyd@codeaurora.org: Switch to using generic divider code, drop
      enable/disable, reword commit text]
      Signed-off-by: NStephen Boyd <sboyd@codeaurora.org>
      Tested-by: NKenneth Westfield <kwestfie@codeaurora.org>
      Signed-off-by: NMichael Turquette <mturquette@linaro.org>
      4116076e
    • S
      clk: divider: Make generic for usage elsewhere · bca9690b
      Stephen Boyd 提交于
      Some devices don't use mmio to interact with dividers. Split out the
      logic from the register read/write parts so that we can reuse the
      division logic elsewhere.
      Signed-off-by: NStephen Boyd <sboyd@codeaurora.org>
      Tested-by: NKenneth Westfield <kwestfie@codeaurora.org>
      Signed-off-by: NMichael Turquette <mturquette@linaro.org>
      bca9690b
    • S
      clk: Add __clk_mux_determine_rate_closest · 15a02c1f
      Stephen Boyd 提交于
      Some clock drivers want to find the closest rate on the input of
      a mux instead of a rate that's less than or equal to the desired
      rate. Add a generic mux function to support this.
      Signed-off-by: NStephen Boyd <sboyd@codeaurora.org>
      Tested-by: NKenneth Westfield <kwestfie@codeaurora.org>
      Signed-off-by: NMichael Turquette <mturquette@linaro.org>
      15a02c1f
    • S
      clk: Fix debugfs clk removal before inited · 52bba980
      Srinivas Kandagatla 提交于
      Some of the clks can be registered & unregistered before the clk related debugfs
      entries are initialized at late_initcall. In the unregister path checking for only
      dentry before clk_debug_init() would lead dangling pointers in the debug clk list,
      because the list is already populated in register path and the clk pointer freed in
      unregister path.
      The side effect of not removing it from the list is either a null pointer
      dereference or if lucky to boot the system, the number of clk entries in
      debugfs disappear.
      
      We could add more checks like if (inited && !clk->dentry) but just removing
      the check for dentry made more sense as debugfs_remove_recursive() seems to be
      safe with null pointers. This will ensure that the unregistering clk would be
      removed from the debug list in all the code paths.
      
      Without this patch kernel would crash with log:
      Unable to handle kernel NULL pointer dereference at virtual address 00000000
      pgd = c0204000
      [00000000] *pgd=00000000
      Internal error: Oops: 5 [#1] SMP ARM
      Modules linked in:
      CPU: 1 PID: 1 Comm: swapper/0 Tainted: G    B          3.19.0-rc3-00007-g412f9ba-dirty #840
      Hardware name: Qualcomm (Flattened Device Tree)
      task: ed948000 ti: ed944000 task.ti: ed944000
      PC is at strlen+0xc/0x40
      LR is at __create_file+0x64/0x1dc
      pc : [<c04ee604>]    lr : [<c049f1c4>]    psr: 60000013
      sp : ed945e40  ip : ed945e50  fp : ed945e4c
      r10: 00000000  r9 : c1006094  r8 : 00000000
      r7 : 000041ed  r6 : 00000000  r5 : ed4af998  r4 : c11b5e28
      r3 : 00000000  r2 : ed945e38  r1 : a0000013  r0 : 00000000
      Flags: nZCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment kernel
      Control: 10c5787d  Table: 8020406a  DAC: 00000015
      Process swapper/0 (pid: 1, stack limit = 0xed944248)
      Stack: (0xed945e40 to 0xed946000)
      5e40: ed945e7c ed945e50 c049f1c4 c04ee604 c0fc2fa4 00000000 ecb748c0 c11c2b80
      5e60: c0beec04 0000011c c0fc2fa4 00000000 ed945e94 ed945e80 c049f3e0 c049f16c
      5e80: 00000000 00000000 ed945eac ed945e98 c08cbc50 c049f3c0 ecb748c0 c11c2b80
      5ea0: ed945ed4 ed945eb0 c0fc3080 c08cbc30 c0beec04 c107e1d8 ecdf0600 c107e1d8
      5ec0: c107e1d8 ecdf0600 ed945f54 ed945ed8 c0208ed4 c0fc2fb0 c026a784 c04ee628
      5ee0: ed945f0c ed945ef0 c0f5d600 c04ee604 c0f5d5ec ef7fcc7d c0b40ecc 0000011c
      5f00: ed945f54 ed945f10 c026a994 c0f5d5f8 c04ecc00 00000007 ef7fcc95 00000007
      5f20: c0e90744 c0dd0884 ed945f54 c106cde0 00000007 c117f8c0 0000011c c0f5d5ec
      5f40: c1006094 c100609c ed945f94 ed945f58 c0f5de34 c0208e50 00000007 00000007
      5f60: c0f5d5ec be9b5ae0 00000000 c117f8c0 c0af1680 00000000 00000000 00000000
      5f80: 00000000 00000000 ed945fac ed945f98 c0af169c c0f5dd2c ed944000 00000000
      5fa0: 00000000 ed945fb0 c020f298 c0af168c 00000000 00000000 00000000 00000000
      5fc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
      5fe0: 00000000 00000000 00000000 00000000 00000013 00000000 ebcc6d33 bfffca73
      [<c04ee604>] (strlen) from [<c049f1c4>] (__create_file+0x64/0x1dc)
      [<c049f1c4>] (__create_file) from [<c049f3e0>] (debugfs_create_dir+0x2c/0x34)
      [<c049f3e0>] (debugfs_create_dir) from [<c08cbc50>] (clk_debug_create_one+0x2c/0x16c)
      [<c08cbc50>] (clk_debug_create_one) from [<c0fc3080>] (clk_debug_init+0xdc/0x144)
      [<c0fc3080>] (clk_debug_init) from [<c0208ed4>] (do_one_initcall+0x90/0x1e0)
      [<c0208ed4>] (do_one_initcall) from [<c0f5de34>] (kernel_init_freeable+0x114/0x1e0)
      [<c0f5de34>] (kernel_init_freeable) from [<c0af169c>] (kernel_init+0x1c/0xfc)
      [<c0af169c>] (kernel_init) from [<c020f298>] (ret_from_fork+0x14/0x3c)
      Code: c0b40ecc e1a0c00d e92dd800 e24cb004 (e5d02000)
      ---[ end trace b940e45b5e25c1e7 ]---
      
      Fixes: 6314b679 "clk: Don't hold prepare_lock across debugfs creation"
      Signed-off-by: NSrinivas Kandagatla <srinivas.kandagatla@linaro.org>
      Reviewed-by: NStephen Boyd <sboyd@codeaurora.org>
      Signed-off-by: NMichael Turquette <mturquette@linaro.org>
      52bba980
  2. 25 1月, 2015 1 次提交
    • T
      clk: Introduce clk_has_parent() · 4e88f3de
      Thierry Reding 提交于
      This new function is similar to clk_set_parent(), except that it doesn't
      actually change the parent. It merely checks that the given parent clock
      can be a parent for the given clock.
      
      A situation where this is useful is to check that a particular setup is
      valid before switching to it. One specific use-case for this is atomic
      modesetting in the DRM framework where setting a mode is divided into a
      check phase where a given configuration is validated before applying
      changes to the hardware.
      
      Cc: Russell King <linux@arm.linux.org.uk>
      Signed-off-by: NThierry Reding <treding@nvidia.com>
      Reviewed-by: NStephen Boyd <sboyd@codeaurora.org>
      Signed-off-by: NMichael Turquette <mturquette@linaro.org>
      4e88f3de
  3. 21 1月, 2015 9 次提交
    • O
      ARM: clk: add clk-asm9260 driver · ec6415dc
      Oleksij Rempel 提交于
      Provide CLK support for Alphascale ASM9260 SoC.
      Signed-off-by: NOleksij Rempel <linux@rempel-privat.de>
      Signed-off-by: NMichael Turquette <mturquette@linaro.org>
      ec6415dc
    • P
      clk: st: STiH410: Fix pdiv and fdiv divisor when setting rate · edc30077
      Peter Griffin 提交于
      Debugging eMMC on upstream kernels it has been noticed that when the
      targetpack configures MMC0 clock to 200Mhz (required to switch to
      HS200) then everything works OK. However if the kernel sets the
      clock rate using clk_set_rate, then the eMMC card initialisation
      fails with timeouts. Lower clock speeds (the default being 50Mhz)
      work ok, but they we fail to get good eMMC transfer rates.
      
      Looking through the vendor kernel clock driver reveals Giuseppe
      had already fixed this issue, but the patch hasn't made its way
      upstream.
      
      The issue is fixed by changing the logic to manage the pdiv and
      fdiv divisors used for setting the rate inside the flexgen driver code.
      
      Pdiv is mainly targeted for low freq results, while fdiv should be
      used for divs =< 64. The other way can lead to 'duty cycle'
      issues.
      
      I have changed the original patch to keep the original behaviour
      in cases where the div is >64 which matches the original comment
      and patch description more closely. Although no clocks appear to hit
      this case currently when booting an upstream kernel.
      Signed-off-by: NPeter Griffin <peter.griffin@linaro.org>
      Signed-off-by: NGiuseppe Cavallaro <peppe.cavallaro@st.com>
      Signed-off-by: NMichael Turquette <mturquette@linaro.org>
      edc30077
    • T
      clk: ppc-corenet: rename driver to clk-qoriq · 93a17c05
      Tang Yuantian 提交于
      Freescale introduced new ARM-based socs which using the compatible
      clock IP block with PowerPC-based socs'. So this driver can be used
      on both platforms.
      Updated relevant descriptions and renamed this driver to better
      represent its meaning and keep the function of driver untouched.
      Signed-off-by: NTang Yuantian <Yuantian.Tang@freescale.com>
      Signed-off-by: NMichael Turquette <mturquette@linaro.org>
      93a17c05
    • T
      clock: redefine variable clocks_per_pll as a struct member · 57bfd7ee
      Tang Yuantian 提交于
      redefine variable clocks_per_pll as a struct member
      
      If there are multiple PLL clock nodes, this variable will
      get overwritten. Redefining it as a struct member can avoid that.
      Signed-off-by: NTang Yuantian <Yuantian.Tang@freescale.com>
      Signed-off-by: NMichael Turquette <mturquette@linaro.org>
      57bfd7ee
    • T
      clk: ti: Initialize clocks for dm816x · 1a34275d
      Tony Lindgren 提交于
      The clocks on ti81xx are not compatible with omap3. On dm816x
      the clock source is a FAPLL (Flying Adder PLL), and on dm814x
      there seems to be an APLL (All Digital PLL).
      
      Let's fix up things for dm816x in preparation for adding the
      FAPLL support. As we already have a dummy ti81xx_dt_clk_init()
      in place, let's use that for now to avoid adding a dependency
      to the omap patches.
      
      Later on if somebody adds dm814x support we can split the
      ti81xx_dt_clk_init() clock init function as needed.
      
      Cc: Brian Hutchinson <b.hutchman@gmail.com>
      Cc: Paul Walmsley <paul@pwsan.com>
      Cc: Tero Kristo <t-kristo@ti.com>
      Signed-off-by: NTony Lindgren <tony@atomide.com>
      Signed-off-by: NMichael Turquette <mturquette@linaro.org>
      1a34275d
    • T
      clk: ti: Add support for FAPLL on dm816x · 163152cb
      Tony Lindgren 提交于
      On dm816x the clocks are sourced from a FAPLL (Flying Adder PLL)
      that does not seem to be used on the other omap variants.
      
      There are four instances of the FAPLL on dm816x that each have three
      to seven child synthesizers.
      
      I've set up the FAPLL as a single fapll.c driver. Later on we could
      potentially have the PLL code generic. To do that, we would have to
      consider the following:
      
      1. Setting the PLL to bypass mode also sets the child synthesizers
         into bypass mode. As the bypass rate can also be generated by
         the PLL in regular mode, there's no way for the child synthesizers
         to detect the bypass mode based on the parent clock rate.
      
      2. The PLL registers control the power for each of the child
         syntheriser.
      
      Note that the clocks are currently still missing the set_rate
      implementation so things are still running based on the bootloader
      values. That's OK for now as most of the outputs have dividers and
      those can be set using the existing TI component clock code.
      
      I have verified that the extclk rates are correct for a few clocks,
      so adding the set_rate support should be fairly trivial later on.
      
      This code is partially based on the TI81XX-LINUX-PSP-04.04.00.02
      patches published at:
      
      http://downloads.ti.com/dsps/dsps_public_sw/psp/LinuxPSP/TI81XX_04_04/04_04_00_02/index_FDS.html
      
      Cc: Brian Hutchinson <b.hutchman@gmail.com>
      Cc: Paul Walmsley <paul@pwsan.com>
      Cc: Tero Kristo <t-kristo@ti.com>
      Signed-off-by: NTony Lindgren <tony@atomide.com>
      Signed-off-by: NMichael Turquette <mturquette@linaro.org>
      163152cb
    • S
      clk: Skip fetching index for single parent clocks · 4526e7b8
      Stephen Boyd 提交于
      We don't need to fetch the parent index for clocks if they only
      have one parent. Doing this also avoid an unnecessary allocation
      for the parent cache.
      Signed-off-by: NStephen Boyd <sboyd@codeaurora.org>
      Signed-off-by: NMichael Turquette <mturquette@linaro.org>
      4526e7b8
    • S
      clk-gate: fix bit # check in clk_register_gate() · 2e9dcdae
      Sergei Shtylyov 提交于
      In case CLK_GATE_HIWORD_MASK flag is passed to clk_register_gate(), the bit #
      should be no higher than 15, however the corresponding check is obviously off-
      by-one.
      
      Fixes: 04577994 ("clk: gate: add CLK_GATE_HIWORD_MASK")
      Signed-off-by: NSergei Shtylyov <sergei.shtylyov@cogentembedded.com>
      Signed-off-by: NMichael Turquette <mturquette@linaro.org>
      2e9dcdae
    • K
      clk: ppc-corenet: fix section mismatch warning · 66619ac5
      Kevin Hao 提交于
      In order to fix the following section mismatch warning:
        WARNING: drivers/clk/built-in.o(.data+0xe4): Section mismatch in reference from the variable ppc_corenet_clk_driver to the function .init.text:ppc_corenet_clk_probe()
        The variable ppc_corenet_clk_driver references
        the function __init ppc_corenet_clk_probe()
        If the reference is valid then annotate the
        variable with __init* or __refdata (see linux/init.h) or name the variable:
        *_template, *_timer, *_sht, *_ops, *_probe, *_probe_one, *_console
      
        WARNING: drivers/clk/built-in.o(.data+0x10c): Section mismatch in reference from the variable ppc_corenet_clk_driver to the variable .init.rodata:ppc_clk_ids
        The variable ppc_corenet_clk_driver references
        the variable __initconst ppc_clk_ids
        If the reference is valid then annotate the
        variable with __init* or __refdata (see linux/init.h) or name the variable:
        *_template, *_timer, *_sht, *_ops, *_probe, *_probe_one, *_console
      
      We can't just add the __init annotation to ppc_corenet_clk_driver or
      remove the __init from ppc_corenet_clk_probe() and ppc_clk_ids.
      So choose to use CLK_OF_DECLARE to scan and init the clock devices.
      Signed-off-by: NKevin Hao <haokexin@gmail.com>
      Acked-by: NScott Wood <scottwood@freescale.com>
      Acked-by: NMichael Turquette <mturquette@linaro.org>
      Signed-off-by: NMichael Turquette <mturquette@linaro.org>
      66619ac5
  4. 18 1月, 2015 6 次提交
  5. 15 1月, 2015 3 次提交
  6. 14 1月, 2015 2 次提交
  7. 08 1月, 2015 5 次提交
  8. 29 12月, 2014 2 次提交
    • H
      clk: rockchip: fix rk3288 cpuclk core dividers · 9880d427
      Heiko Stuebner 提交于
      Commit 0e5bdb3f (clk: rockchip: switch to using the new cpuclk type
      for armclk) didn't take into account that the divider used on rk3288
      are of the (n+1) type.
      
      The rk3066 and rk3188 socs use more complex divider types making it
      necessary for the list-elements to be the real register-values to write.
      
      Therefore reduce divider values in the table accordingly so that they
      really are the values that should be written to the registers and match
      the dividers actually specified for the rk3288.
      Reported-by: NSonny Rao <sonnyrao@chromium.org>
      Fixes: 0e5bdb3f ("clk: rockchip: switch to using the new cpuclk type for armclk")
      Signed-off-by: NHeiko Stuebner <heiko@sntech.de>
      Reviewed-by: NDoug Anderson <dianders@chromium.org>
      Cc: stable@vger.kernel.org
      9880d427
    • H
      clk: rockchip: fix rk3066 pll lock bit location · 12551f02
      Heiko Stuebner 提交于
      The bit locations indicating the locking status of the plls on rk3066 are
      shifted by one to the right when compared to the rk3188, bits [7:4] instead
      of [8:5] on the rk3188, thus indicating the locking state of the wrong pll
      or a completely different information in case of the gpll.
      
      The recently introduced pll init code exposed that problem on some rk3066
      boards when it tried to bring the boot-pll value in line with the value
      from the rate table.
      
      Fix this by defining separate pll definitions for rk3066 with the correct
      locking indices.
      Signed-off-by: NHeiko Stuebner <heiko@sntech.de>
      Fixes: 2c14736c ("clk: rockchip: add clock driver for rk3188 and rk3066 clocks")
      Tested-by: NFUKAUMI Naoki <naobsd@gmail.com>
      Cc: stable@vger.kernel.org
      12551f02
  9. 23 12月, 2014 2 次提交
  10. 21 12月, 2014 2 次提交
  11. 20 12月, 2014 4 次提交