1. 01 5月, 2014 14 次提交
    • A
      clk: bcm281xx: add clock hysteresis support · dc613840
      Alex Elder 提交于
      Add support for clock gate hysteresis control.  For now, if it's
      defined for a clock, it's enabled.
      Signed-off-by: NAlex Elder <elder@linaro.org>
      Signed-off-by: NMike Turquette <mturquette@linaro.org>
      dc613840
    • A
      clk: bcm281xx: add clock policy support · a597facc
      Alex Elder 提交于
      Add support for CCU policy engine control, and also for setting the
      mask bits for bus clocks that require a policy change to get
      activated.  This includes adding validity checking framework for
      CCUs, to validate the policy fields if defined.
      Signed-off-by: NAlex Elder <elder@linaro.org>
      Signed-off-by: NMike Turquette <mturquette@linaro.org>
      a597facc
    • A
      clk: bcm281xx: define CCU clock data statically · 03548ec0
      Alex Elder 提交于
      Rather than "manually" setting up each CCU's clock entries at run
      time, define a flexible array of generic Kona clock structures
      within the CCU structure itself.  Each of these entries contains
      generic kona clock information (like its CCU pointer and clock
      framework initialization data).  Each also has a pointer to a
      structure contianing clock type-dependent initialization data
      (like register definitions).
      
      Since we'll iterate over these arrays we need to be sure they have
      slots for all potential clock index values.  (E.g. for the root CCU
      we must have at least BCM281XX_ROOT_CCU_CLOCK_COUNT slots.)  To
      ensure this we always define an extra entry and fill it using the
      special initializer LAST_KONA_CLK.
      
      Just about everything we need to know about a clock can be defined
      statically.  As a result, kona_clk_setup() can be changed to take
      just a kona_clk structure as its argument, and peri_clk_setup() can
      be simplified.  With the information pre-defined we are also able
      to handle most clock setup genericially.  We can do away with the
      CCU-specific callback functions that previously were needed to set
      up the entries in CCU's clock array.
      
      Move the definition of the ccu_data structure down in "clk-kona.h"
      to avoid a forward dependency.
      Signed-off-by: NAlex Elder <elder@linaro.org>
      Signed-off-by: NMike Turquette <mturquette@linaro.org>
      03548ec0
    • A
      clk: bcm281xx: initialize CCU structures statically · b12151ca
      Alex Elder 提交于
      We know up front how many CCU's we'll support, so there's no need to
      allocate their data structures dynamically.  Define a macro
      KONA_CCU_COMMON() to simplify the initialization of many of the
      fields in a ccu_data structure.  Pass the address of a statically
      defined CCU structure to kona_dt_ccu_setup() rather than having that
      function allocate one.
      
      We also know at build time how many clocks a given CCU will provide,
      though the number of of them for each CCU is different.  Record the
      number of clocks we need in the CCU's clk_onecell_data struct
      (which is used when we register the CCU with the common clock code
      as a clock provider).  Rename that struct field "clk_data" (because
      "data" alone gets a little confusing).
      
      Use the known clock count to move the allocation of each CCU's
      clocks array into ccu_clks_setup() rather than having each CCU's
      setup callback function do it.
      
      (The real motivation behind all of this is that we'll be doing some
      static initialization of some additional CCU-specific data soon.)
      Signed-off-by: NAlex Elder <elder@linaro.org>
      Signed-off-by: NMike Turquette <mturquette@linaro.org>
      b12151ca
    • A
      clk: bcm281xx: change some symbol names · 9d3d87c7
      Alex Elder 提交于
      As I developed the bcm281xx clock code I understood there were
      restrictions on device tree "compatible" strings names, and as a
      result "bcm11351" was used in places despite the part family being
      more properly called "bcm281xx".  This can be a little confusing.
      
      In some cases I went to far and things using "bcm11351" when that
      was not necessary.
      
      This patch remedies this.  It renames the symbol used to define the
      "compatible" string (but not its value) so it uses "BCM281XX".
      Similarly, the name names provided to the CLK_OF_DECLARE() macro
      are changed, hoping to minimize the number of places that the
      confusing "11351" string is used.
      Signed-off-by: NAlex Elder <elder@linaro.org>
      Signed-off-by: NMike Turquette <mturquette@linaro.org>
      9d3d87c7
    • A
      clk: bcm281xx: use init_data.name for clock name · e7563252
      Alex Elder 提交于
      Use the init_data.name field to hold the name of a Kona clock rather
      than duplicating it.
      Signed-off-by: NAlex Elder <elder@linaro.org>
      Signed-off-by: NMike Turquette <mturquette@linaro.org>
      e7563252
    • A
      clk: bcm281xx: warn if ccu_wait_bit() fails · 4bac65ca
      Alex Elder 提交于
      Don't let a failure of ccu_wait_bit() go unnoticed.
      Signed-off-by: NAlex Elder <elder@linaro.org>
      Signed-off-by: NMike Turquette <mturquette@linaro.org>
      4bac65ca
    • M
      clk: divider: Optimize clk_divider_bestdiv loop · 0e2de78e
      Maxime COQUELIN 提交于
      Currently, the for-loop used to try all the different dividers to find the
      one that best fit tries all the values from 1 to max_div, incrementing by one.
      In case of power-of-two, or table based divider, the loop isn't optimal.
      
      Instead of incrementing by one, this patch provides directly the next divider.
      Signed-off-by: NMaxime Coquelin <maxime.coquelin@st.com>
      Signed-off-by: NMike Turquette <mturquette@linaro.org>
      0e2de78e
    • M
      clk: divider: Add round to closest divider · 774b5143
      Maxime COQUELIN 提交于
      In some cases, we want to be able to round the divider to the closest one,
      instead than rounding up.
      
      This patch adds a new CLK_DIVIDER_ROUND_CLOSEST flag to specify the divider
      has to round to closest div, keeping rounding up as de default behaviour.
      Signed-off-by: NMaxime Coquelin <maxime.coquelin@st.com>
      Signed-off-by: NMike Turquette <mturquette@linaro.org>
      774b5143
    • S
      clk: Fix slab corruption in clk_unregister() · 874f224c
      Stephen Boyd 提交于
      When a clock is unregsitered, we iterate over the list of
      children and reparent them to NULL (i.e. orphan list). While
      iterating the list, we should use the safe iterators because the
      children list for this clock is changing when we reparent the
      children to NULL. Failure to iterate safely can lead to slab
      corruption like this:
      
      =============================================================================
      BUG kmalloc-128 (Not tainted): Poison overwritten
      -----------------------------------------------------------------------------
      
      Disabling lock debugging due to kernel taint
      INFO: 0xed0c4900-0xed0c4903. First byte 0x0 instead of 0x6b
      INFO: Allocated in clk_register+0x20/0x1bc age=297 cpu=2 pid=70
       __slab_alloc.isra.39.constprop.42+0x410/0x454
       kmem_cache_alloc_trace+0x200/0x24c
       clk_register+0x20/0x1bc
       devm_clk_register+0x34/0x68
       0xbf0000f0
       platform_drv_probe+0x18/0x48
       driver_probe_device+0x94/0x360
       __driver_attach+0x94/0x98
       bus_for_each_dev+0x54/0x88
       bus_add_driver+0xe8/0x204
       driver_register+0x78/0xf4
       do_one_initcall+0xc4/0x17c
       load_module+0x19ac/0x2294
       SyS_init_module+0xa4/0x110
       ret_fast_syscall+0x0/0x48
      INFO: Freed in clk_unregister+0xd4/0x140 age=23 cpu=2 pid=73
       __slab_free+0x38/0x41c
       clk_unregister+0xd4/0x140
       release_nodes+0x164/0x1d8
       __device_release_driver+0x60/0xb0
       driver_detach+0xb4/0xb8
       bus_remove_driver+0x5c/0xc4
       SyS_delete_module+0x148/0x1d8
       ret_fast_syscall+0x0/0x48
      INFO: Slab 0xeec50b90 objects=25 used=0 fp=0xed0c5400 flags=0x4080
      INFO: Object 0xed0c48c0 @offset=2240 fp=0xed0c4a00
      
      Bytes b4 ed0c48b0: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a  ZZZZZZZZZZZZZZZZ
      Object ed0c48c0: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b  kkkkkkkkkkkkkkkk
      Object ed0c48d0: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b  kkkkkkkkkkkkkkkk
      Object ed0c48e0: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b  kkkkkkkkkkkkkkkk
      Object ed0c48f0: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b  kkkkkkkkkkkkkkkk
      Object ed0c4900: 00 00 00 00 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b  ....kkkkkkkkkkkk
      Object ed0c4910: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b  kkkkkkkkkkkkkkkk
      Object ed0c4920: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b  kkkkkkkkkkkkkkkk
      Object ed0c4930: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b a5  kkkkkkkkkkkkkkk.
      Redzone ed0c4940: bb bb bb bb                                      ....
      Padding ed0c49e8: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a  ZZZZZZZZZZZZZZZZ
      Padding ed0c49f8: 5a 5a 5a 5a 5a 5a 5a 5a                          ZZZZZZZZ
      CPU: 3 PID: 75 Comm: mdev Tainted: G    B         3.14.0-11033-g2054ba5ca781 #35
      [<c0014be0>] (unwind_backtrace) from [<c0012240>] (show_stack+0x10/0x14)
      [<c0012240>] (show_stack) from [<c04b74a0>] (dump_stack+0x70/0xbc)
      [<c04b74a0>] (dump_stack) from [<c00f7a78>] (check_bytes_and_report+0xbc/0x100)
      [<c00f7a78>] (check_bytes_and_report) from [<c00f7c48>] (check_object+0x18c/0x218)
      [<c00f7c48>] (check_object) from [<c00f7efc>] (__free_slab+0x104/0x144)
      [<c00f7efc>] (__free_slab) from [<c04b6668>] (__slab_free+0x3dc/0x41c)
      [<c04b6668>] (__slab_free) from [<c014c008>] (load_elf_binary+0x88/0x12b4)
      [<c014c008>] (load_elf_binary) from [<c0105a44>] (search_binary_handler+0x78/0x18c)
      [<c0105a44>] (search_binary_handler) from [<c0106fc0>] (do_execve+0x490/0x5dc)
      [<c0106fc0>] (do_execve) from [<c0036b8c>] (____call_usermodehelper+0x134/0x168)
      [<c0036b8c>] (____call_usermodehelper) from [<c000f048>] (ret_from_fork+0x14/0x2c)
      FIX kmalloc-128: Restoring 0xed0c4900-0xed0c4903=0x6b
      
      Fixes: fcb0ee6a (clk: Implement clk_unregister)
      Cc: Jiada Wang <jiada_wang@mentor.com>
      Cc: Sylwester Nawrocki <s.nawrocki@samsung.com>
      Cc: Kyungmin Park <kyungmin.park@samsung.com>
      Signed-off-by: NStephen Boyd <sboyd@codeaurora.org>
      Signed-off-by: NMike Turquette <mturquette@linaro.org>
      Cc: stable@vger.kernel.org
      874f224c
    • S
      clk: Fix double free due to devm_clk_register() · 293ba3b4
      Stephen Boyd 提交于
      Now that clk_unregister() frees the struct clk we're
      unregistering we'll free memory twice: first we'll call kfree()
      in __clk_release() with an address kmalloc doesn't know about and
      second we'll call kfree() in the devres layer. Remove the
      allocation of struct clk in devm_clk_register() and let
      clk_release() handle it. This fixes slab errors like:
      
      =============================================================================
      BUG kmalloc-128 (Not tainted): Invalid object pointer 0xed08e8d0
      -----------------------------------------------------------------------------
      
      Disabling lock debugging due to kernel taint
      INFO: Slab 0xeec503f8 objects=25 used=15 fp=0xed08ea00 flags=0x4081
      CPU: 2 PID: 73 Comm: rmmod Tainted: G    B         3.14.0-11032-g526e9c764381 #34
      [<c0014be0>] (unwind_backtrace) from [<c0012240>] (show_stack+0x10/0x14)
      [<c0012240>] (show_stack) from [<c04b74dc>] (dump_stack+0x70/0xbc)
      [<c04b74dc>] (dump_stack) from [<c00f6778>] (slab_err+0x74/0x84)
      [<c00f6778>] (slab_err) from [<c04b6278>] (free_debug_processing+0x2cc/0x31c)
      [<c04b6278>] (free_debug_processing) from [<c04b6300>] (__slab_free+0x38/0x41c)
      [<c04b6300>] (__slab_free) from [<c03931bc>] (clk_unregister+0xd4/0x140)
      [<c03931bc>] (clk_unregister) from [<c02fb774>] (release_nodes+0x164/0x1d8)
      [<c02fb774>] (release_nodes) from [<c02f8698>] (__device_release_driver+0x60/0xb0)
      [<c02f8698>] (__device_release_driver) from [<c02f9080>] (driver_detach+0xb4/0xb8)
      [<c02f9080>] (driver_detach) from [<c02f8480>] (bus_remove_driver+0x5c/0xc4)
      [<c02f8480>] (bus_remove_driver) from [<c008c9b8>] (SyS_delete_module+0x148/0x1d8)
      [<c008c9b8>] (SyS_delete_module) from [<c000ef80>] (ret_fast_syscall+0x0/0x48)
      FIX kmalloc-128: Object at 0xed08e8d0 not freed
      
      Fixes: fcb0ee6a (clk: Implement clk_unregister)
      Cc: Jiada Wang <jiada_wang@mentor.com>
      Cc: Sylwester Nawrocki <s.nawrocki@samsung.com>
      Cc: Kyungmin Park <kyungmin.park@samsung.com>
      Signed-off-by: NStephen Boyd <sboyd@codeaurora.org>
      Signed-off-by: NMike Turquette <mturquette@linaro.org>
      Cc: stable@vger.kernel.org
      293ba3b4
    • D
      clk: socfpga: fix clock driver for 3.15 · a30d27ed
      Dinh Nguyen 提交于
      commit [1771b10d clk: respect the clock dependencies in of_clk_init]
      exposed a flaw in the socfpga clock driver and prevents the platform
      from booting on 3.15-rc1.
      
      Because the "altr,clk-mgr" is not really a clock, it should not be using
      CLK_OF_DECLARE, instead we should be mapping the clk-mgr's base address
      one of the functional clock init function. Use the socfpga_pll_init function
      to map the clk_mgr_base_addr as this clock should always be initialized first.
      Signed-off-by: NDinh Nguyen <dinguyen@altera.com>
      Tested-by: NPavel Machek <pavel@denx.de>
      a30d27ed
    • M
      clk: divider: Fix best div calculation for power-of-two and table dividers · dd23c2cd
      Maxime COQUELIN 提交于
      The divider returned by clk_divider_bestdiv() is likely to be invalid in case
      of power-of-two and table dividers when CLK_SET_RATE_PARENT flag isn't set.
      
      Fixes boot on STiH416 platform.
      Signed-off-by: NMaxime Coquelin <maxime.coquelin@st.com>
      Signed-off-by: NMike Turquette <mturquette@linaro.org>
      [mturquette@linaro.org: trivial merge conflict & updated changelog]
      dd23c2cd
    • A
      clk: bcm281xx: don't use unnamed structs or unions · e813d49d
      Alex Elder 提交于
      The Broadcom Kona clock code, as originally written, made use of
      unnamed union and struct fields.  This is a feature present in C11,
      and is a GNU extension otherwise.  It worked very well for me.
      
      Unfortunately, Russell King reported that this feature was not
      supported in a build environment he used, which meant attempting
      to build this code failed spectacularly.
      
      Add names to these unnamed fields, and update the code accordingly.
      Reported-by: NRussell King <linux@arm.linux.org.uk>
      Tested-by: NMarkus Mayer <markus.mayer@linaro.org>
      Signed-off-by: NAlex Elder <elder@linaro.org>
      Signed-off-by: NMike Turquette <mturquette@linaro.org>
      e813d49d
  2. 24 4月, 2014 2 次提交
  3. 03 4月, 2014 1 次提交
  4. 01 4月, 2014 1 次提交
  5. 28 3月, 2014 2 次提交
  6. 27 3月, 2014 4 次提交
  7. 26 3月, 2014 6 次提交
  8. 25 3月, 2014 3 次提交
  9. 21 3月, 2014 4 次提交
  10. 20 3月, 2014 3 次提交