<feed xmlns='http://www.w3.org/2005/Atom'>
<title>linux-toradex.git/drivers/clk/clk.c, branch v3.14.7</title>
<subtitle>Linux kernel for Apalis and Colibri modules</subtitle>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/'/>
<entry>
<title>clk: Fix slab corruption in clk_unregister()</title>
<updated>2014-06-07T17:28:27+00:00</updated>
<author>
<name>Stephen Boyd</name>
<email>sboyd@codeaurora.org</email>
</author>
<published>2014-04-18T23:29:43+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=2bf0e785c5c78bcdf1eaa7b6516240ab58cad25c'/>
<id>2bf0e785c5c78bcdf1eaa7b6516240ab58cad25c</id>
<content type='text'>
commit 874f224cc52d64c912087e68e3724be95ad80ee7 upstream.

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
[&lt;c0014be0&gt;] (unwind_backtrace) from [&lt;c0012240&gt;] (show_stack+0x10/0x14)
[&lt;c0012240&gt;] (show_stack) from [&lt;c04b74a0&gt;] (dump_stack+0x70/0xbc)
[&lt;c04b74a0&gt;] (dump_stack) from [&lt;c00f7a78&gt;] (check_bytes_and_report+0xbc/0x100)
[&lt;c00f7a78&gt;] (check_bytes_and_report) from [&lt;c00f7c48&gt;] (check_object+0x18c/0x218)
[&lt;c00f7c48&gt;] (check_object) from [&lt;c00f7efc&gt;] (__free_slab+0x104/0x144)
[&lt;c00f7efc&gt;] (__free_slab) from [&lt;c04b6668&gt;] (__slab_free+0x3dc/0x41c)
[&lt;c04b6668&gt;] (__slab_free) from [&lt;c014c008&gt;] (load_elf_binary+0x88/0x12b4)
[&lt;c014c008&gt;] (load_elf_binary) from [&lt;c0105a44&gt;] (search_binary_handler+0x78/0x18c)
[&lt;c0105a44&gt;] (search_binary_handler) from [&lt;c0106fc0&gt;] (do_execve+0x490/0x5dc)
[&lt;c0106fc0&gt;] (do_execve) from [&lt;c0036b8c&gt;] (____call_usermodehelper+0x134/0x168)
[&lt;c0036b8c&gt;] (____call_usermodehelper) from [&lt;c000f048&gt;] (ret_from_fork+0x14/0x2c)
FIX kmalloc-128: Restoring 0xed0c4900-0xed0c4903=0x6b

Fixes: fcb0ee6a3d33 (clk: Implement clk_unregister)
Cc: Jiada Wang &lt;jiada_wang@mentor.com&gt;
Cc: Sylwester Nawrocki &lt;s.nawrocki@samsung.com&gt;
Cc: Kyungmin Park &lt;kyungmin.park@samsung.com&gt;
Signed-off-by: Stephen Boyd &lt;sboyd@codeaurora.org&gt;
Signed-off-by: Mike Turquette &lt;mturquette@linaro.org&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
commit 874f224cc52d64c912087e68e3724be95ad80ee7 upstream.

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
[&lt;c0014be0&gt;] (unwind_backtrace) from [&lt;c0012240&gt;] (show_stack+0x10/0x14)
[&lt;c0012240&gt;] (show_stack) from [&lt;c04b74a0&gt;] (dump_stack+0x70/0xbc)
[&lt;c04b74a0&gt;] (dump_stack) from [&lt;c00f7a78&gt;] (check_bytes_and_report+0xbc/0x100)
[&lt;c00f7a78&gt;] (check_bytes_and_report) from [&lt;c00f7c48&gt;] (check_object+0x18c/0x218)
[&lt;c00f7c48&gt;] (check_object) from [&lt;c00f7efc&gt;] (__free_slab+0x104/0x144)
[&lt;c00f7efc&gt;] (__free_slab) from [&lt;c04b6668&gt;] (__slab_free+0x3dc/0x41c)
[&lt;c04b6668&gt;] (__slab_free) from [&lt;c014c008&gt;] (load_elf_binary+0x88/0x12b4)
[&lt;c014c008&gt;] (load_elf_binary) from [&lt;c0105a44&gt;] (search_binary_handler+0x78/0x18c)
[&lt;c0105a44&gt;] (search_binary_handler) from [&lt;c0106fc0&gt;] (do_execve+0x490/0x5dc)
[&lt;c0106fc0&gt;] (do_execve) from [&lt;c0036b8c&gt;] (____call_usermodehelper+0x134/0x168)
[&lt;c0036b8c&gt;] (____call_usermodehelper) from [&lt;c000f048&gt;] (ret_from_fork+0x14/0x2c)
FIX kmalloc-128: Restoring 0xed0c4900-0xed0c4903=0x6b

Fixes: fcb0ee6a3d33 (clk: Implement clk_unregister)
Cc: Jiada Wang &lt;jiada_wang@mentor.com&gt;
Cc: Sylwester Nawrocki &lt;s.nawrocki@samsung.com&gt;
Cc: Kyungmin Park &lt;kyungmin.park@samsung.com&gt;
Signed-off-by: Stephen Boyd &lt;sboyd@codeaurora.org&gt;
Signed-off-by: Mike Turquette &lt;mturquette@linaro.org&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</pre>
</div>
</content>
</entry>
<entry>
<title>clk: Fix double free due to devm_clk_register()</title>
<updated>2014-06-07T17:28:27+00:00</updated>
<author>
<name>Stephen Boyd</name>
<email>sboyd@codeaurora.org</email>
</author>
<published>2014-04-18T23:29:42+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=798ad2abc1b05842b7bd5292ff43055e4a767a64'/>
<id>798ad2abc1b05842b7bd5292ff43055e4a767a64</id>
<content type='text'>
commit 293ba3b4a4fd54891b900f2911d1a57e1ed4a843 upstream.

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
[&lt;c0014be0&gt;] (unwind_backtrace) from [&lt;c0012240&gt;] (show_stack+0x10/0x14)
[&lt;c0012240&gt;] (show_stack) from [&lt;c04b74dc&gt;] (dump_stack+0x70/0xbc)
[&lt;c04b74dc&gt;] (dump_stack) from [&lt;c00f6778&gt;] (slab_err+0x74/0x84)
[&lt;c00f6778&gt;] (slab_err) from [&lt;c04b6278&gt;] (free_debug_processing+0x2cc/0x31c)
[&lt;c04b6278&gt;] (free_debug_processing) from [&lt;c04b6300&gt;] (__slab_free+0x38/0x41c)
[&lt;c04b6300&gt;] (__slab_free) from [&lt;c03931bc&gt;] (clk_unregister+0xd4/0x140)
[&lt;c03931bc&gt;] (clk_unregister) from [&lt;c02fb774&gt;] (release_nodes+0x164/0x1d8)
[&lt;c02fb774&gt;] (release_nodes) from [&lt;c02f8698&gt;] (__device_release_driver+0x60/0xb0)
[&lt;c02f8698&gt;] (__device_release_driver) from [&lt;c02f9080&gt;] (driver_detach+0xb4/0xb8)
[&lt;c02f9080&gt;] (driver_detach) from [&lt;c02f8480&gt;] (bus_remove_driver+0x5c/0xc4)
[&lt;c02f8480&gt;] (bus_remove_driver) from [&lt;c008c9b8&gt;] (SyS_delete_module+0x148/0x1d8)
[&lt;c008c9b8&gt;] (SyS_delete_module) from [&lt;c000ef80&gt;] (ret_fast_syscall+0x0/0x48)
FIX kmalloc-128: Object at 0xed08e8d0 not freed

Fixes: fcb0ee6a3d33 (clk: Implement clk_unregister)
Cc: Jiada Wang &lt;jiada_wang@mentor.com&gt;
Cc: Sylwester Nawrocki &lt;s.nawrocki@samsung.com&gt;
Cc: Kyungmin Park &lt;kyungmin.park@samsung.com&gt;
Signed-off-by: Stephen Boyd &lt;sboyd@codeaurora.org&gt;
Signed-off-by: Mike Turquette &lt;mturquette@linaro.org&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
commit 293ba3b4a4fd54891b900f2911d1a57e1ed4a843 upstream.

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
[&lt;c0014be0&gt;] (unwind_backtrace) from [&lt;c0012240&gt;] (show_stack+0x10/0x14)
[&lt;c0012240&gt;] (show_stack) from [&lt;c04b74dc&gt;] (dump_stack+0x70/0xbc)
[&lt;c04b74dc&gt;] (dump_stack) from [&lt;c00f6778&gt;] (slab_err+0x74/0x84)
[&lt;c00f6778&gt;] (slab_err) from [&lt;c04b6278&gt;] (free_debug_processing+0x2cc/0x31c)
[&lt;c04b6278&gt;] (free_debug_processing) from [&lt;c04b6300&gt;] (__slab_free+0x38/0x41c)
[&lt;c04b6300&gt;] (__slab_free) from [&lt;c03931bc&gt;] (clk_unregister+0xd4/0x140)
[&lt;c03931bc&gt;] (clk_unregister) from [&lt;c02fb774&gt;] (release_nodes+0x164/0x1d8)
[&lt;c02fb774&gt;] (release_nodes) from [&lt;c02f8698&gt;] (__device_release_driver+0x60/0xb0)
[&lt;c02f8698&gt;] (__device_release_driver) from [&lt;c02f9080&gt;] (driver_detach+0xb4/0xb8)
[&lt;c02f9080&gt;] (driver_detach) from [&lt;c02f8480&gt;] (bus_remove_driver+0x5c/0xc4)
[&lt;c02f8480&gt;] (bus_remove_driver) from [&lt;c008c9b8&gt;] (SyS_delete_module+0x148/0x1d8)
[&lt;c008c9b8&gt;] (SyS_delete_module) from [&lt;c000ef80&gt;] (ret_fast_syscall+0x0/0x48)
FIX kmalloc-128: Object at 0xed08e8d0 not freed

Fixes: fcb0ee6a3d33 (clk: Implement clk_unregister)
Cc: Jiada Wang &lt;jiada_wang@mentor.com&gt;
Cc: Sylwester Nawrocki &lt;s.nawrocki@samsung.com&gt;
Cc: Kyungmin Park &lt;kyungmin.park@samsung.com&gt;
Signed-off-by: Stephen Boyd &lt;sboyd@codeaurora.org&gt;
Signed-off-by: Mike Turquette &lt;mturquette@linaro.org&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</pre>
</div>
</content>
</entry>
<entry>
<title>clk: Correct handling of NULL clk in __clk_{get, put}</title>
<updated>2014-02-25T05:58:38+00:00</updated>
<author>
<name>Sylwester Nawrocki</name>
<email>s.nawrocki@samsung.com</email>
</author>
<published>2014-01-07T12:03:43+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=00efcb1c8e1c3c5e5d3ce6f0682d66402911a84f'/>
<id>00efcb1c8e1c3c5e5d3ce6f0682d66402911a84f</id>
<content type='text'>
Ensure clk-&gt;kref is dereferenced only when clk is not NULL.

Signed-off-by: Sylwester Nawrocki &lt;s.nawrocki@samsung.com&gt;
Tested-by: Sachin Kamat &lt;sachin.kamat@linaro.org&gt;
Signed-off-by: Mike Turquette &lt;mturquette@linaro.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Ensure clk-&gt;kref is dereferenced only when clk is not NULL.

Signed-off-by: Sylwester Nawrocki &lt;s.nawrocki@samsung.com&gt;
Tested-by: Sachin Kamat &lt;sachin.kamat@linaro.org&gt;
Signed-off-by: Mike Turquette &lt;mturquette@linaro.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>clk: Export more clk-provider functions</title>
<updated>2014-01-27T19:43:19+00:00</updated>
<author>
<name>Stephen Boyd</name>
<email>sboyd@codeaurora.org</email>
</author>
<published>2014-01-18T03:47:17+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=0b7f04b868ec1230cf2dd698697dbc32a509ea4d'/>
<id>0b7f04b868ec1230cf2dd698697dbc32a509ea4d</id>
<content type='text'>
Allow drivers to be compiled as modules by exporting more clock
provider functions.

Reported-by: kbuild test robot &lt;fengguang.wu@intel.com&gt;
Signed-off-by: Stephen Boyd &lt;sboyd@codeaurora.org&gt;
Signed-off-by: Mike Turquette &lt;mturquette@linaro.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Allow drivers to be compiled as modules by exporting more clock
provider functions.

Reported-by: kbuild test robot &lt;fengguang.wu@intel.com&gt;
Signed-off-by: Stephen Boyd &lt;sboyd@codeaurora.org&gt;
Signed-off-by: Mike Turquette &lt;mturquette@linaro.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>CLK: ti: add init support for clock IP blocks</title>
<updated>2014-01-17T20:34:52+00:00</updated>
<author>
<name>Tero Kristo</name>
<email>t-kristo@ti.com</email>
</author>
<published>2013-10-22T08:39:36+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=819b4861c18d602463cfe815041d11fd81002654'/>
<id>819b4861c18d602463cfe815041d11fd81002654</id>
<content type='text'>
ti_dt_clk_init_provider() can now be used to initialize the contents of
a single clock IP block. This parses all the clocks under the IP block
and calls the corresponding init function for them.

This patch also introduces a helper function for the TI clock drivers
to get register info from DT and append the master IP info to this.

Signed-off-by: Tero Kristo &lt;t-kristo@ti.com&gt;
Acked-by: Tony Lindgren &lt;tony@atomide.com&gt;
Signed-off-by: Mike Turquette &lt;mturquette@linaro.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
ti_dt_clk_init_provider() can now be used to initialize the contents of
a single clock IP block. This parses all the clocks under the IP block
and calls the corresponding init function for them.

This patch also introduces a helper function for the TI clock drivers
to get register info from DT and append the master IP info to this.

Signed-off-by: Tero Kristo &lt;t-kristo@ti.com&gt;
Acked-by: Tony Lindgren &lt;tony@atomide.com&gt;
Signed-off-by: Mike Turquette &lt;mturquette@linaro.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>clk: Add set_rate_and_parent() op</title>
<updated>2014-01-16T20:00:57+00:00</updated>
<author>
<name>Stephen Boyd</name>
<email>sboyd@codeaurora.org</email>
</author>
<published>2014-01-15T18:47:22+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=3fa2252b7a78a8057017471a28f47b306e95ee26'/>
<id>3fa2252b7a78a8057017471a28f47b306e95ee26</id>
<content type='text'>
Some of Qualcomm's clocks can change their parent and rate at the
same time with a single register write. Add support for this
hardware to the common clock framework by adding a new
set_rate_and_parent() op. When the clock framework determines
that both the parent and the rate are going to change during
clk_set_rate() it will call the .set_rate_and_parent() op if
available and fall back to calling .set_parent() followed by
.set_rate() otherwise.

Reviewed-by: James Hogan &lt;james.hogan@imgtec.com&gt;
Signed-off-by: Stephen Boyd &lt;sboyd@codeaurora.org&gt;
Signed-off-by: Mike Turquette &lt;mturquette@linaro.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Some of Qualcomm's clocks can change their parent and rate at the
same time with a single register write. Add support for this
hardware to the common clock framework by adding a new
set_rate_and_parent() op. When the clock framework determines
that both the parent and the rate are going to change during
clk_set_rate() it will call the .set_rate_and_parent() op if
available and fall back to calling .set_parent() followed by
.set_rate() otherwise.

Reviewed-by: James Hogan &lt;james.hogan@imgtec.com&gt;
Signed-off-by: Stephen Boyd &lt;sboyd@codeaurora.org&gt;
Signed-off-by: Mike Turquette &lt;mturquette@linaro.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Merge branch 'clk-next-unregister' into clk-next</title>
<updated>2013-12-31T19:35:12+00:00</updated>
<author>
<name>Mike Turquette</name>
<email>mturquette@linaro.org</email>
</author>
<published>2013-12-31T19:35:12+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=dbdf6ff51e3ce13ade5834b0d7d451522fcdb478'/>
<id>dbdf6ff51e3ce13ade5834b0d7d451522fcdb478</id>
<content type='text'>
Conflicts:
	drivers/clk/clk.c
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Conflicts:
	drivers/clk/clk.c
</pre>
</div>
</content>
</entry>
<entry>
<title>clk: remove CONFIG_COMMON_CLK_DEBUG</title>
<updated>2013-12-28T01:45:08+00:00</updated>
<author>
<name>Mike Turquette</name>
<email>mturquette@linaro.org</email>
</author>
<published>2013-12-19T05:38:52+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=ea72dc2cf9552631e43327ce593bdbb0b9fdf058'/>
<id>ea72dc2cf9552631e43327ce593bdbb0b9fdf058</id>
<content type='text'>
Populate ${DEBUGS_MOUNT_POINT}/clk if CONFIG_DEBUG_FS is set. This
eliminates the extra (annoying) step of enabling the config option
manually.

Signed-off-by: Mike Turquette &lt;mturquette@linaro.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Populate ${DEBUGS_MOUNT_POINT}/clk if CONFIG_DEBUG_FS is set. This
eliminates the extra (annoying) step of enabling the config option
manually.

Signed-off-by: Mike Turquette &lt;mturquette@linaro.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>clk: add clk accuracy retrieval support</title>
<updated>2013-12-23T07:14:27+00:00</updated>
<author>
<name>Boris BREZILLON</name>
<email>b.brezillon@overkiz.com</email>
</author>
<published>2013-12-21T09:34:47+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=5279fc402ae59361a224d641d5823b21b4206232'/>
<id>5279fc402ae59361a224d641d5823b21b4206232</id>
<content type='text'>
The clock accuracy is expressed in ppb (parts per billion) and represents
the possible clock drift.
Say you have a clock (e.g. an oscillator) which provides a fixed clock of
20MHz with an accuracy of +- 20Hz. This accuracy expressed in ppb is
20Hz/20MHz = 1000 ppb (or 1 ppm).

Clock users may need the clock accuracy information in order to choose
the best clock (the one with the best accuracy) across several available
clocks.

This patch adds clk accuracy retrieval support for common clk framework by
means of a new function called clk_get_accuracy.
This function returns the given clock accuracy expressed in ppb.

In order to get the clock accuracy, this implementation adds one callback
called recalc_accuracy to the clk_ops structure.
This callback is given the parent clock accuracy (if the clock is not a
root clock) and should recalculate the given clock accuracy.

This callback is optional and may be implemented if the clock is not
a perfect clock (accuracy != 0 ppb).

Signed-off-by: Boris BREZILLON &lt;b.brezillon@overkiz.com&gt;
Signed-off-by: Mike Turquette &lt;mturquette@linaro.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The clock accuracy is expressed in ppb (parts per billion) and represents
the possible clock drift.
Say you have a clock (e.g. an oscillator) which provides a fixed clock of
20MHz with an accuracy of +- 20Hz. This accuracy expressed in ppb is
20Hz/20MHz = 1000 ppb (or 1 ppm).

Clock users may need the clock accuracy information in order to choose
the best clock (the one with the best accuracy) across several available
clocks.

This patch adds clk accuracy retrieval support for common clk framework by
means of a new function called clk_get_accuracy.
This function returns the given clock accuracy expressed in ppb.

In order to get the clock accuracy, this implementation adds one callback
called recalc_accuracy to the clk_ops structure.
This callback is given the parent clock accuracy (if the clock is not a
root clock) and should recalculate the given clock accuracy.

This callback is optional and may be implemented if the clock is not
a perfect clock (accuracy != 0 ppb).

Signed-off-by: Boris BREZILLON &lt;b.brezillon@overkiz.com&gt;
Signed-off-by: Mike Turquette &lt;mturquette@linaro.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>clk: Fix debugfs reparenting NULL pointer dereference</title>
<updated>2013-12-15T03:23:52+00:00</updated>
<author>
<name>Stephen Boyd</name>
<email>sboyd@codeaurora.org</email>
</author>
<published>2013-10-16T07:40:03+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=3a5aec246f294004564cbe960724fa0ace59a4c5'/>
<id>3a5aec246f294004564cbe960724fa0ace59a4c5</id>
<content type='text'>
Adding clocks from a kernel module can cause a NULL pointer
dereference if the parent of a clock is added after the clock is
added. This happens because __clk_init() iterates over the list
of orphans and reparents the orphans to the clock being
registered before creating the debugfs entry for the clock.
Create the debugfs entry first before reparenting the orphans.

Unable to handle kernel NULL pointer dereference at virtual address 00000028
pgd = ef3e4000
[00000028] *pgd=bf810831
Internal error: Oops: 17 [#1] PREEMPT SMP ARM
Modules linked in: mmcc_8960(+)
CPU: 0 PID: 52 Comm: modprobe Not tainted 3.12.0-rc2-00023-g1021a28-dirty #659
task: ef319200 ti: ef3a6000 task.ti: ef3a6000
PC is at lock_rename+0x24/0xc4
LR is at debugfs_rename+0x34/0x208
pc : [&lt;c0317238&gt;]    lr : [&lt;c047dfe4&gt;]    psr: 00000013
sp : ef3a7b88  ip : ef3a7ba8  fp : ef3a7ba4
r10: ef3d51cc  r9 : ef3bc680  r8 : ef3d5210
r7 : ef3bc640  r6 : eee287e0  r5 : eee287e0  r4 : 00000000
r3 : ef3bc640  r2 : 00000000  r1 : eee287e0  r0 : 00000000
Flags: nzcv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment user
Control: 10c5787d  Table: af3e406a  DAC: 00000015
Process modprobe (pid: 52, stack limit = 0xef3a6240)
Stack: (0xef3a7b88 to 0xef3a8000)
7b80:                   ef3bc640 ee4047e0 00000000 eee287e0 ef3a7bec ef3a7ba8
7ba0: c047dfe4 c0317220 ef3bc680 ef3d51cc ef3a7bdc ef3a7bc0 c06e29d0 c0268784
7bc0: c08946e8 ef3d5210 00000000 ef3bc700 ef3d5290 ef3d5210 ef3bc680 ef3d51cc
7be0: ef3a7c0c ef3a7bf0 c05b9e9c c047dfbc 00000000 00000000 ef3d5210 ef3d5290
7c00: ef3a7c24 ef3a7c10 c05baebc c05b9e30 00000001 00000001 ef3a7c64 ef3a7c28
7c20: c05bb124 c05bae9c bf000cd8 ef3bc7c0 000000d0 c0ff129c bf001774 00000002
7c40: ef3bc740 ef3d5290 ef0f9a10 bf001774 bf00042c 00000061 ef3a7c8c ef3a7c68
7c60: c05bb480 c05baed8 bf001774 ef3d5290 ef0f9a10 bf001774 ef38bc10 ef0f9a00
7c80: ef3a7cac ef3a7c90 c05bb5a8 c05bb3a0 bf001774 00000062 ef0f9a10 ef38bc18
7ca0: ef3a7cec ef3a7cb0 bf00010c c05bb56c 00000000 ef38ba00 00000000 ef3d60d0
7cc0: ef3a7cdc c0fefc24 ef0f9a10 c0a091c0 bf000d24 00000000 bf0029f0 bf006000
7ce0: ef3a7cfc ef3a7cf0 c05156c0 bf000040 ef3a7d2c ef3a7d00 c0513f5c c05156a8
7d00: ef3a7d2c ef0f9a10 ef0f9a10 bf000d24 ef0f9a44 c09ca588 00000000 bf006000
7d20: ef3a7d4c ef3a7d30 c05142b8 c0513ecc ef0fd25c 00000000 bf000d24 c0514214
7d40: ef3a7d74 ef3a7d50 c0512030 c0514220 ef0050a8 ef0fd250 ef0050f8 bf000d24
7d60: ef37c100 c09ed150 ef3a7d84 ef3a7d78 c05139c8 c0511fd8 ef3a7
7d80: c051344c c05139a8 bf000864 c09ca588 ef3a7db4 bf000d24 bf002
7da0: c09ca588 00000000 ef3a7dcc ef3a7db8 c05149dc c0513360 ef3a7
7dc0: ef3a7ddc ef3a7dd0 c0515914 c0514960 ef3a7dec ef3a7de0 bf006
7de0: ef3a7e74 ef3a7df0 c0208800 bf00600c ef3a7e1c ef3a7e00 c04c5
7e00: ffffffff c09d46c4 00000000 bf0029a8 ef3a7e34 ef3a7e20 c024c
7e20: ffffffff c09d46c4 ef3a7e5c ef3a7e38 c024e2fc c024ce40 00000
7e40: ef3a7f48 bf0029b4 bf0029a8 271aeb1c ef3a7f48 bf0029a8 00000001 ef383c00
7e60: bf0029f0 00000001 ef3a7f3c ef3a7e78 c028fac4 c0208718 bf0029b4 00007fff
7e80: c028cd58 000000d2 f0065000 00000000 ef3a7ebc 00000000 00000000 bf0029b4
7ea0: 00000000 bf0029ac bf0029b4 ef3a6000 ef3a7efc c08bf128 00000000 00000000
7ec0: 00000000 00000000 00000000 00000000 6e72656b 00006c65 00000000 00000000
7ee0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
7f00: 00000000 00000000 00000000 271aeb1c ef3a7f2c 00016376 b6f38008 001d3774
7f20: 00000080 c020f968 ef3a6000 00000000 ef3a7fa4 ef3a7f40 c02904dc c028e178
7f40: c020f898 010ccfa8 f0065000 00016376 f0073f60 f0073d7d f007a1e8 00002b24
7f60: 000039e4 00000000 00000000 00000000 0000002f 00000030 00000019 00000016
7f80: 00000012 00000000 00000000 010de1b2 b6f38008 010ccfa8 00000000 ef3a7fa8
7fa0: c020f6c0 c0290434 010de1b2 b6f38008 b6f38008 00016376 001d3774 00000000
7fc0: 010de1b2 b6f38008 010ccfa8 00000080 010de1b2 bedb6f90 010de1c9 0001d8dc
7fe0: 0000000c bedb674c 0001ce30 000094c4 60000010 b6f38008 00000008 0000001d
[&lt;c0317238&gt;] (lock_rename+0x24/0xc4) from [&lt;c047dfe4&gt;] (debugfs_rename+0x34/0x208)
[&lt;c047dfe4&gt;] (debugfs_rename+0x34/0x208) from [&lt;c05b9e9c&gt;] (clk_debug_reparent+0x78/0xc0)
[&lt;c05baebc&gt;] (__clk_reparent+0x2c/0x3c) from [&lt;c05bb124&gt;] (__clk_init+0x258/0x4c8)
[&lt;c05bb124&gt;] (__clk_init+0x258/0x4c8) from [&lt;c05bb480&gt;] (_clk_register+0xec/0x1cc)
[&lt;c05bb480&gt;] (_clk_register+0xec/0x1cc) from [&lt;c05bb5a8&gt;] (devm_clk_register+0x48/0x7c)
[&lt;c05bb5a8&gt;] (devm_clk_register+0x48/0x7c) from [&lt;bf00010c&gt;] (msm_mmcc_8960_probe+0xd8/0x190 [mmcc_8960])
[&lt;bf00010c&gt;] (msm_mmcc_8960_probe+0xd8/0x190 [mmcc_8960]) from [&lt;c05156c0&gt;] (platform_drv_probe+0x24/0x28)
[&lt;c05156c0&gt;] (platform_drv_probe+0x24/0x28) from [&lt;c0513f5c&gt;] (driver_probe_device+0x9c/0x354)
[&lt;c0513f5c&gt;] (driver_probe_device+0x9c/0x354) from [&lt;c05142b8&gt;] (__driver_attach+0xa4/0xa8)
[&lt;c05142b8&gt;] (__driver_attach+0xa4/0xa8) from [&lt;c0512030&gt;] (bus_for_each_dev+0x64/0x98)
[&lt;c0512030&gt;] (bus_for_each_dev+0x64/0x98) from [&lt;c05139c8&gt;] (driver_attach+0x2c/0x30)
[&lt;c05139c8&gt;] (driver_attach+0x2c/0x30) from [&lt;c051344c&gt;] (bus_add_driver+0xf8/0x2a8)
[&lt;c051344c&gt;] (bus_add_driver+0xf8/0x2a8) from [&lt;c05149dc&gt;] (driver_register+0x88/0x104)
[&lt;c05149dc&gt;] (driver_register+0x88/0x104) from [&lt;c0515914&gt;] (__platform_driver_register+0x58/0x6c)
[&lt;c0515914&gt;] (__platform_driver_register+0x58/0x6c) from [&lt;bf006018&gt;] (msm_mmcc_8960_driver_init+0x18/0x24 [mmcc_8960])
[&lt;bf006018&gt;] (msm_mmcc_8960_driver_init+0x18/0x24 [mmcc_8960]) from [&lt;c0208800&gt;] (do_one_initcall+0xf4/0x1b8)
[&lt;c0208800&gt;] (do_one_initcall+0xf4/0x1b8) from [&lt;c028fac4&gt;] (load_module+0x1958/0x22bc)
[&lt;c028fac4&gt;] (load_module+0x1958/0x22bc) from [&lt;c02904dc&gt;] (SyS_init_module+0xb4/0x120)
[&lt;c02904dc&gt;] (SyS_init_module+0xb4/0x120) from [&lt;c020f6c0&gt;] (ret_fast_syscall+0x0/0x48)
Code: e1500001 e1a04000 e1a05001 0a000021 (e5903028)

Signed-off-by: Stephen Boyd &lt;sboyd@codeaurora.org&gt;
Signed-off-by: Mike Turquette &lt;mturquette@linaro.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Adding clocks from a kernel module can cause a NULL pointer
dereference if the parent of a clock is added after the clock is
added. This happens because __clk_init() iterates over the list
of orphans and reparents the orphans to the clock being
registered before creating the debugfs entry for the clock.
Create the debugfs entry first before reparenting the orphans.

Unable to handle kernel NULL pointer dereference at virtual address 00000028
pgd = ef3e4000
[00000028] *pgd=bf810831
Internal error: Oops: 17 [#1] PREEMPT SMP ARM
Modules linked in: mmcc_8960(+)
CPU: 0 PID: 52 Comm: modprobe Not tainted 3.12.0-rc2-00023-g1021a28-dirty #659
task: ef319200 ti: ef3a6000 task.ti: ef3a6000
PC is at lock_rename+0x24/0xc4
LR is at debugfs_rename+0x34/0x208
pc : [&lt;c0317238&gt;]    lr : [&lt;c047dfe4&gt;]    psr: 00000013
sp : ef3a7b88  ip : ef3a7ba8  fp : ef3a7ba4
r10: ef3d51cc  r9 : ef3bc680  r8 : ef3d5210
r7 : ef3bc640  r6 : eee287e0  r5 : eee287e0  r4 : 00000000
r3 : ef3bc640  r2 : 00000000  r1 : eee287e0  r0 : 00000000
Flags: nzcv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment user
Control: 10c5787d  Table: af3e406a  DAC: 00000015
Process modprobe (pid: 52, stack limit = 0xef3a6240)
Stack: (0xef3a7b88 to 0xef3a8000)
7b80:                   ef3bc640 ee4047e0 00000000 eee287e0 ef3a7bec ef3a7ba8
7ba0: c047dfe4 c0317220 ef3bc680 ef3d51cc ef3a7bdc ef3a7bc0 c06e29d0 c0268784
7bc0: c08946e8 ef3d5210 00000000 ef3bc700 ef3d5290 ef3d5210 ef3bc680 ef3d51cc
7be0: ef3a7c0c ef3a7bf0 c05b9e9c c047dfbc 00000000 00000000 ef3d5210 ef3d5290
7c00: ef3a7c24 ef3a7c10 c05baebc c05b9e30 00000001 00000001 ef3a7c64 ef3a7c28
7c20: c05bb124 c05bae9c bf000cd8 ef3bc7c0 000000d0 c0ff129c bf001774 00000002
7c40: ef3bc740 ef3d5290 ef0f9a10 bf001774 bf00042c 00000061 ef3a7c8c ef3a7c68
7c60: c05bb480 c05baed8 bf001774 ef3d5290 ef0f9a10 bf001774 ef38bc10 ef0f9a00
7c80: ef3a7cac ef3a7c90 c05bb5a8 c05bb3a0 bf001774 00000062 ef0f9a10 ef38bc18
7ca0: ef3a7cec ef3a7cb0 bf00010c c05bb56c 00000000 ef38ba00 00000000 ef3d60d0
7cc0: ef3a7cdc c0fefc24 ef0f9a10 c0a091c0 bf000d24 00000000 bf0029f0 bf006000
7ce0: ef3a7cfc ef3a7cf0 c05156c0 bf000040 ef3a7d2c ef3a7d00 c0513f5c c05156a8
7d00: ef3a7d2c ef0f9a10 ef0f9a10 bf000d24 ef0f9a44 c09ca588 00000000 bf006000
7d20: ef3a7d4c ef3a7d30 c05142b8 c0513ecc ef0fd25c 00000000 bf000d24 c0514214
7d40: ef3a7d74 ef3a7d50 c0512030 c0514220 ef0050a8 ef0fd250 ef0050f8 bf000d24
7d60: ef37c100 c09ed150 ef3a7d84 ef3a7d78 c05139c8 c0511fd8 ef3a7
7d80: c051344c c05139a8 bf000864 c09ca588 ef3a7db4 bf000d24 bf002
7da0: c09ca588 00000000 ef3a7dcc ef3a7db8 c05149dc c0513360 ef3a7
7dc0: ef3a7ddc ef3a7dd0 c0515914 c0514960 ef3a7dec ef3a7de0 bf006
7de0: ef3a7e74 ef3a7df0 c0208800 bf00600c ef3a7e1c ef3a7e00 c04c5
7e00: ffffffff c09d46c4 00000000 bf0029a8 ef3a7e34 ef3a7e20 c024c
7e20: ffffffff c09d46c4 ef3a7e5c ef3a7e38 c024e2fc c024ce40 00000
7e40: ef3a7f48 bf0029b4 bf0029a8 271aeb1c ef3a7f48 bf0029a8 00000001 ef383c00
7e60: bf0029f0 00000001 ef3a7f3c ef3a7e78 c028fac4 c0208718 bf0029b4 00007fff
7e80: c028cd58 000000d2 f0065000 00000000 ef3a7ebc 00000000 00000000 bf0029b4
7ea0: 00000000 bf0029ac bf0029b4 ef3a6000 ef3a7efc c08bf128 00000000 00000000
7ec0: 00000000 00000000 00000000 00000000 6e72656b 00006c65 00000000 00000000
7ee0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
7f00: 00000000 00000000 00000000 271aeb1c ef3a7f2c 00016376 b6f38008 001d3774
7f20: 00000080 c020f968 ef3a6000 00000000 ef3a7fa4 ef3a7f40 c02904dc c028e178
7f40: c020f898 010ccfa8 f0065000 00016376 f0073f60 f0073d7d f007a1e8 00002b24
7f60: 000039e4 00000000 00000000 00000000 0000002f 00000030 00000019 00000016
7f80: 00000012 00000000 00000000 010de1b2 b6f38008 010ccfa8 00000000 ef3a7fa8
7fa0: c020f6c0 c0290434 010de1b2 b6f38008 b6f38008 00016376 001d3774 00000000
7fc0: 010de1b2 b6f38008 010ccfa8 00000080 010de1b2 bedb6f90 010de1c9 0001d8dc
7fe0: 0000000c bedb674c 0001ce30 000094c4 60000010 b6f38008 00000008 0000001d
[&lt;c0317238&gt;] (lock_rename+0x24/0xc4) from [&lt;c047dfe4&gt;] (debugfs_rename+0x34/0x208)
[&lt;c047dfe4&gt;] (debugfs_rename+0x34/0x208) from [&lt;c05b9e9c&gt;] (clk_debug_reparent+0x78/0xc0)
[&lt;c05baebc&gt;] (__clk_reparent+0x2c/0x3c) from [&lt;c05bb124&gt;] (__clk_init+0x258/0x4c8)
[&lt;c05bb124&gt;] (__clk_init+0x258/0x4c8) from [&lt;c05bb480&gt;] (_clk_register+0xec/0x1cc)
[&lt;c05bb480&gt;] (_clk_register+0xec/0x1cc) from [&lt;c05bb5a8&gt;] (devm_clk_register+0x48/0x7c)
[&lt;c05bb5a8&gt;] (devm_clk_register+0x48/0x7c) from [&lt;bf00010c&gt;] (msm_mmcc_8960_probe+0xd8/0x190 [mmcc_8960])
[&lt;bf00010c&gt;] (msm_mmcc_8960_probe+0xd8/0x190 [mmcc_8960]) from [&lt;c05156c0&gt;] (platform_drv_probe+0x24/0x28)
[&lt;c05156c0&gt;] (platform_drv_probe+0x24/0x28) from [&lt;c0513f5c&gt;] (driver_probe_device+0x9c/0x354)
[&lt;c0513f5c&gt;] (driver_probe_device+0x9c/0x354) from [&lt;c05142b8&gt;] (__driver_attach+0xa4/0xa8)
[&lt;c05142b8&gt;] (__driver_attach+0xa4/0xa8) from [&lt;c0512030&gt;] (bus_for_each_dev+0x64/0x98)
[&lt;c0512030&gt;] (bus_for_each_dev+0x64/0x98) from [&lt;c05139c8&gt;] (driver_attach+0x2c/0x30)
[&lt;c05139c8&gt;] (driver_attach+0x2c/0x30) from [&lt;c051344c&gt;] (bus_add_driver+0xf8/0x2a8)
[&lt;c051344c&gt;] (bus_add_driver+0xf8/0x2a8) from [&lt;c05149dc&gt;] (driver_register+0x88/0x104)
[&lt;c05149dc&gt;] (driver_register+0x88/0x104) from [&lt;c0515914&gt;] (__platform_driver_register+0x58/0x6c)
[&lt;c0515914&gt;] (__platform_driver_register+0x58/0x6c) from [&lt;bf006018&gt;] (msm_mmcc_8960_driver_init+0x18/0x24 [mmcc_8960])
[&lt;bf006018&gt;] (msm_mmcc_8960_driver_init+0x18/0x24 [mmcc_8960]) from [&lt;c0208800&gt;] (do_one_initcall+0xf4/0x1b8)
[&lt;c0208800&gt;] (do_one_initcall+0xf4/0x1b8) from [&lt;c028fac4&gt;] (load_module+0x1958/0x22bc)
[&lt;c028fac4&gt;] (load_module+0x1958/0x22bc) from [&lt;c02904dc&gt;] (SyS_init_module+0xb4/0x120)
[&lt;c02904dc&gt;] (SyS_init_module+0xb4/0x120) from [&lt;c020f6c0&gt;] (ret_fast_syscall+0x0/0x48)
Code: e1500001 e1a04000 e1a05001 0a000021 (e5903028)

Signed-off-by: Stephen Boyd &lt;sboyd@codeaurora.org&gt;
Signed-off-by: Mike Turquette &lt;mturquette@linaro.org&gt;
</pre>
</div>
</content>
</entry>
</feed>
