Jason,
Could you please review my patch below?
See also arm64 maintainer's comment:
http://lists.infradead.org/pipermail/linux-arm-kernel/2015-January/313712.h…
Thanks,
-Takahiro AKASHI
I tried to verify kgdb in vanilla kernel on fast model, but it seems that
the single stepping with kgdb doesn't work correctly since its first
appearance at v3.15.
On v3.15, 'stepi' command after breaking the kernel at some breakpoint
steps forward to the next instruction, but the succeeding 'stepi' never
goes beyond that.
On v3.16, 'stepi' moves forward and stops at the next instruction just
after enable_dbg in el1_dbg, and never goes beyond that. This variance of
behavior seems to come in with the following patch in v3.16:
commit 2a2830703a23 ("arm64: debug: avoid accessing mdscr_el1 on fault
paths where possible")
This patch
(1) moves kgdb_disable_single_step() from 'c' command handling to single
step handler.
This makes sure that single stepping gets effective at every 's' command.
Please note that, under the current implementation, single step bit in
spsr, which is cleared by the first single stepping, will not be set
again for the consecutive 's' commands because single step bit in mdscr
is still kept on (that is, kernel_active_single_step() in
kgdb_arch_handle_exception() is true).
(2) re-implements kgdb_roundup_cpus() because the current implementation
enabled interrupts naively. See below.
(3) removes 'enable_dbg' in el1_dbg.
Single step bit in mdscr is turned on in do_handle_exception()->
kgdb_handle_expection() before returning to debugged context, and if
debug exception is enabled in el1_dbg, we will see unexpected single-
stepping in el1_dbg.
Since v3.18, the following patch does the same:
commit 1059c6bf8534 ("arm64: debug: don't re-enable debug exceptions
on return from el1_dbg)
(4) masks interrupts while single-stepping one instruction.
If an interrupt is caught during processing a single-stepping, debug
exception is unintentionally enabled by el1_irq's 'enable_dbg' before
returning to debugged context.
Thus, like in (2), we will see unexpected single-stepping in el1_irq.
Basically (1) and (2) are for v3.15, (3) and (4) for v3.1[67].
* issue fixed by (2):
Without (2), we would see another problem if a breakpoint is set at
interrupt-sensible places, like gic_handle_irq():
KGDB: re-enter error: breakpoint removed ffffffc000081258
------------[ cut here ]------------
WARNING: CPU: 0 PID: 650 at kernel/debug/debug_core.c:435
kgdb_handle_exception+0x1dc/0x1f4()
Modules linked in:
CPU: 0 PID: 650 Comm: sh Not tainted 3.17.0-rc2+ #177
Call trace:
[<ffffffc000087fac>] dump_backtrace+0x0/0x130
[<ffffffc0000880ec>] show_stack+0x10/0x1c
[<ffffffc0004d683c>] dump_stack+0x74/0xb8
[<ffffffc0000ab824>] warn_slowpath_common+0x8c/0xb4
[<ffffffc0000ab90c>] warn_slowpath_null+0x14/0x20
[<ffffffc000121bfc>] kgdb_handle_exception+0x1d8/0x1f4
[<ffffffc000092ffc>] kgdb_brk_fn+0x18/0x28
[<ffffffc0000821c8>] brk_handler+0x9c/0xe8
[<ffffffc0000811e8>] do_debug_exception+0x3c/0xac
Exception stack(0xffffffc07e027650 to 0xffffffc07e027770)
...
[<ffffffc000083cac>] el1_dbg+0x14/0x68
[<ffffffc00012178c>] kgdb_cpu_enter+0x464/0x5c0
[<ffffffc000121bb4>] kgdb_handle_exception+0x190/0x1f4
[<ffffffc000092ffc>] kgdb_brk_fn+0x18/0x28
[<ffffffc0000821c8>] brk_handler+0x9c/0xe8
[<ffffffc0000811e8>] do_debug_exception+0x3c/0xac
Exception stack(0xffffffc07e027ac0 to 0xffffffc07e027be0)
...
[<ffffffc000083cac>] el1_dbg+0x14/0x68
[<ffffffc00032e4b4>] __handle_sysrq+0x11c/0x190
[<ffffffc00032e93c>] write_sysrq_trigger+0x4c/0x60
[<ffffffc0001e7d58>] proc_reg_write+0x54/0x84
[<ffffffc000192fa4>] vfs_write+0x98/0x1c8
[<ffffffc0001939b0>] SyS_write+0x40/0xa0
Once some interrupt occurs, a breakpoint at gic_handle_irq() triggers kgdb.
Kgdb then calls kgdb_roundup_cpus() to sync with other cpus.
Current kgdb_roundup_cpus() unmasks interrupts temporarily to
use smp_call_function().
This eventually allows another interrupt to occur and likely results in
hitting a breakpoint at gic_handle_irq() again since debug exception is
always enabled in el1_irq.
We can avoid this issue by specifying "nokgdbroundup" in kernel parameter,
but this will also leave other cpus be in unknown state in terms of kgdb,
and may result in interfering with kgdb activity.
Signed-off-by: AKASHI Takahiro <takahiro.akashi(a)linaro.org>
---
arch/arm64/kernel/kgdb.c | 60 +++++++++++++++++++++++++++++++++++-----------
1 file changed, 46 insertions(+), 14 deletions(-)
diff --git a/arch/arm64/kernel/kgdb.c b/arch/arm64/kernel/kgdb.c
index a0d10c5..81b5910 100644
--- a/arch/arm64/kernel/kgdb.c
+++ b/arch/arm64/kernel/kgdb.c
@@ -19,9 +19,13 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
+#include <linux/cpumask.h>
#include <linux/irq.h>
+#include <linux/irq_work.h>
#include <linux/kdebug.h>
#include <linux/kgdb.h>
+#include <linux/percpu.h>
+#include <asm/ptrace.h>
#include <asm/traps.h>
struct dbg_reg_def_t dbg_reg_def[DBG_MAX_REG_NUM] = {
@@ -95,6 +99,9 @@ struct dbg_reg_def_t dbg_reg_def[DBG_MAX_REG_NUM] = {
{ "fpcr", 4, -1 },
};
+static DEFINE_PER_CPU(unsigned int, kgdb_pstate);
+static DEFINE_PER_CPU(struct irq_work, kgdb_irq_work);
+
char *dbg_get_reg(int regno, void *mem, struct pt_regs *regs)
{
if (regno >= DBG_MAX_REG_NUM || regno < 0)
@@ -176,18 +183,14 @@ int kgdb_arch_handle_exception(int exception_vector, int signo,
* over and over again.
*/
kgdb_arch_update_addr(linux_regs, remcom_in_buffer);
- atomic_set(&kgdb_cpu_doing_single_step, -1);
- kgdb_single_step = 0;
-
- /*
- * Received continue command, disable single step
- */
- if (kernel_active_single_step())
- kernel_disable_single_step();
err = 0;
break;
case 's':
+ /* mask interrupts while single stepping */
+ __this_cpu_write(kgdb_pstate, linux_regs->pstate);
+ linux_regs->pstate |= PSR_I_BIT;
+
/*
* Update step address value with address passed
* with step packet.
@@ -198,8 +201,6 @@ int kgdb_arch_handle_exception(int exception_vector, int signo,
*/
kgdb_arch_update_addr(linux_regs, remcom_in_buffer);
atomic_set(&kgdb_cpu_doing_single_step, raw_smp_processor_id());
- kgdb_single_step = 1;
-
/*
* Enable single step handling
*/
@@ -229,6 +230,18 @@ static int kgdb_compiled_brk_fn(struct pt_regs *regs, unsigned int esr)
static int kgdb_step_brk_fn(struct pt_regs *regs, unsigned int esr)
{
+ unsigned int pstate;
+
+ kernel_disable_single_step();
+ atomic_set(&kgdb_cpu_doing_single_step, -1);
+
+ /* restore interrupt mask status */
+ pstate = __this_cpu_read(kgdb_pstate);
+ if (pstate & PSR_I_BIT)
+ regs->pstate |= PSR_I_BIT;
+ else
+ regs->pstate &= ~PSR_I_BIT;
+
kgdb_handle_exception(1, SIGTRAP, 0, regs);
return 0;
}
@@ -249,16 +262,27 @@ static struct step_hook kgdb_step_hook = {
.fn = kgdb_step_brk_fn
};
-static void kgdb_call_nmi_hook(void *ignored)
+static void kgdb_roundup_hook(struct irq_work *work)
{
kgdb_nmicallback(raw_smp_processor_id(), get_irq_regs());
}
void kgdb_roundup_cpus(unsigned long flags)
{
- local_irq_enable();
- smp_call_function(kgdb_call_nmi_hook, NULL, 0);
- local_irq_disable();
+ int cpu;
+ struct cpumask mask;
+ struct irq_work *work;
+
+ mask = *cpu_online_mask;
+ cpumask_clear_cpu(smp_processor_id(), &mask);
+ cpu = cpumask_first(&mask);
+ if (cpu >= nr_cpu_ids)
+ return;
+
+ for_each_cpu(cpu, &mask) {
+ work = per_cpu_ptr(&kgdb_irq_work, cpu);
+ irq_work_queue_on(work, cpu);
+ }
}
static int __kgdb_notify(struct die_args *args, unsigned long cmd)
@@ -299,6 +323,8 @@ static struct notifier_block kgdb_notifier = {
int kgdb_arch_init(void)
{
int ret = register_die_notifier(&kgdb_notifier);
+ int cpu;
+ struct irq_work *work;
if (ret != 0)
return ret;
@@ -306,6 +332,12 @@ int kgdb_arch_init(void)
register_break_hook(&kgdb_brkpt_hook);
register_break_hook(&kgdb_compiled_brkpt_hook);
register_step_hook(&kgdb_step_hook);
+
+ for_each_possible_cpu(cpu) {
+ work = per_cpu_ptr(&kgdb_irq_work, cpu);
+ init_irq_work(work, kgdb_roundup_hook);
+ }
+
return 0;
}
--
1.7.9.5
Hi Rafael/Preeti,
This is another attempt to fix the crashes reported by Preeti. They work
quite well for me now, and I hope they would work well for Preeti as
well :)
So, patches [1-7,9] are already Reviewed by Preeti.
The first 5 patches are minor cleanups, 6th & 7th try to optimize few
things to make code less complex.
Patches 8-10 actually solve (or try to solve :)) the synchronization
problems, or the crashes I was getting.
V1->V2:
- 7/11 is dropped and only 8/11 is updated, which is 8/10 now.
- Avoid taking the same mutex in both cpufreq_governor_dbs() and
work-handler as that has given us some locdeps, classic ABBA stuff.
- And so timer_mutex, responsible for synchronizing governor
work-handlers is kept as is.
- Later patches are almost same with minor updates.
- Invalid state-transitions are sensed better now with improved checks.
- I have run enough tests on my exynos dual core board and failed to
crash at all. Not that I wanted to crash :)
Rebased over pm/bleeeding-edge.
Viresh Kumar (10):
cpufreq: governor: Name delayed-work as dwork
cpufreq: governor: Drop unused field 'cpu'
cpufreq: governor: Rename 'cpu_dbs_common_info' to 'cpu_dbs_info'
cpufreq: governor: name pointer to cpu_dbs_info as 'cdbs'
cpufreq: governor: rename cur_policy as policy
cpufreq: governor: Keep single copy of information common to
policy->cpus
cpufreq: governor: split out common part of {cs|od}_dbs_timer()
cpufreq: governor: Avoid invalid states with additional checks
cpufreq: governor: Don't WARN on invalid states
cpufreq: propagate errors returned from __cpufreq_governor()
drivers/cpufreq/cpufreq.c | 22 ++--
drivers/cpufreq/cpufreq_conservative.c | 25 ++---
drivers/cpufreq/cpufreq_governor.c | 196 ++++++++++++++++++++++++---------
drivers/cpufreq/cpufreq_governor.h | 40 ++++---
drivers/cpufreq/cpufreq_ondemand.c | 67 ++++++-----
5 files changed, 220 insertions(+), 130 deletions(-)
--
2.4.0
This patch was initially intended to address a KVM issue described in
Geoff's kexec patch set[1]. But now the title of patch#1 would be more
suitable for the entire code as it was overhauled and, since the 4th
version, the fix is implemented as kvm cpu hotplug after Mark's comment.
I confirmed that it works with kexec under the following scenarios:
- boot 1st kernel
- run a guest OS
- (stop a guest OS)
- reboot 2nd kernel by kexec
- run a guest OS
test target: MediaTek MT8173-EVB
version: kernel v4.0-rc1 + Geoff's kexec v8 + Ard's patch[2]
But I didn't test other complicated scenarios with cpu hotplug.
On arm, Frediano[3] is no longer working on this issue as he left his
company. So patch#1 also has a stub definition for arm.
Changes from v4:
* restructured the patchset as cpu_init_hyp_mode() and kvm_cpu_reset() were
renamed to kvm_arch_hardware_{enable,disable}() respectively
* omitted some obvious arguments from __cpu_reset_hyp_mode().
Changes from v3:
* modified to use kvm cpu hotplug framework directly instead of reboot
notifier hook
Changes from v2:
* modified kvm_virt_to_trampoline() macro to fix a page-alignment issue[4]
Changes from v1:
* modified kvm_cpu_reset() implementation:
- define a macro to translate va to addr in trampoline
- use __hyp_default_vectors instead of kvm_get_hyp_stub_vectors()
- shuffle the arguments in __cpu_reset_hyp_mode()
- optimize TLB flush operations
* changed a patch#2's name
* added a patch#5 to add stub code for arm
[1] http://lists.infradead.org/pipermail/kexec/2015-April/335533.html
[2] http://lists.infradead.org/pipermail/linux-arm-kernel/2015-March/334002.html
[3] http://lists.infradead.org/pipermail/linux-arm-kernel/2015-February/322231.…
[4] http://lists.infradead.org/pipermail/linux-arm-kernel/2015-March/334910.html
AKASHI Takahiro (2):
arm64: kvm: allows kvm cpu hotplug
arm64: kvm: remove !KEXEC dependency
arch/arm/include/asm/kvm_host.h | 10 ++++++-
arch/arm/include/asm/kvm_mmu.h | 1 +
arch/arm/kvm/arm.c | 58 ++++++++++++-------------------------
arch/arm/kvm/mmu.c | 5 ++++
arch/arm64/include/asm/kvm_host.h | 11 ++++++-
arch/arm64/include/asm/kvm_mmu.h | 1 +
arch/arm64/include/asm/virt.h | 9 ++++++
arch/arm64/kvm/Kconfig | 1 -
arch/arm64/kvm/hyp-init.S | 33 +++++++++++++++++++++
arch/arm64/kvm/hyp.S | 32 +++++++++++++++++---
10 files changed, 114 insertions(+), 47 deletions(-)
--
1.7.9.5
This patch set enables kdump (crash dump kernel) support on arm64 on top of
Geoff's kexec patchset.
In this version, there are some arm64-specific usage/constraints:
1) "mem=" boot parameter must be specified on crash dump kernel
if the system starts on uefi.
2) Kvm will not be enabled on crash dump kernel even if configured
See commit messages and Documentation/kdump/kdump.txt for details.
The only concern I have is whether or not we can use the exact same kernel
as both system kernel and crash dump kernel. The current arm64 kernel is
not relocatable in the exact sense but I see no problems in using the same
binary when testing kdump.
I tested the code with
- ATF v1.1 + EDK2(UEFI) v3.0-rc0
- kernel v4.0 + Geoff' kexec v9
on
- Base fast model, and
- MediaTek MT8173-EVB
using my own kexec-tools [1], currently v0.12.
You may want to start a kernel with the following boot parameter:
crashkernel=64M (or so, on model)
and try
$ kexec -p --load <vmlinux> --append ...
$ echo c > /proc/sysrq-trigger
To examine vmcore (/proc/vmcore), you should use
- gdb v7.7 or later
- crash + a small patch (to recognize v4.0 kernel)
Changes from v1:
* rebased to Geoff's v9
* tested this patchset on real hardware and fixed bugs:
- added cache flush operation in ipi_cpu_stop() when shutting down
the system. Otherwise, data saved in vmcore's note sections by
crash_save_cpu() might not be flushed to dumped memory and crash command
fail to fetch correct data.
I will address Mark's commit[2] after Geoff takes care of it on kexec.
- modified to use ioremap_cache() instead of ioremap() when reading
crash memory. Otherwise, accessing /proc/vmcore on crash dump kernel
might cause an alignment fault.
* allows reserve_crashkernel() to handle "crashkernel=xyz[MG]" correctly,
thanks to Pratyush Anand. And it now also enforces memory limit.
* moved reserve_crashkernel() and reserve_elfcorehdr() to
arm64_memblock_init() to clarify that they should be called before
dma_contignuous_reserve().
[1] https://git.linaro.org/people/takahiro.akashi/kexec-tools.git
[2] http://lists.infradead.org/pipermail/linux-arm-kernel/2015-April/338171.html
AKASHI Takahiro (5):
arm64: kdump: reserve memory for crash dump kernel
arm64: kdump: implement machine_crash_shutdown()
arm64: kdump: do not go into EL2 before starting a crash dump kernel
arm64: add kdump support
arm64: enable kdump in the arm64 defconfig
Documentation/kdump/kdump.txt | 31 +++++++++++++-
arch/arm64/Kconfig | 12 ++++++
arch/arm64/configs/defconfig | 1 +
arch/arm64/include/asm/kexec.h | 34 ++++++++++++++-
arch/arm64/kernel/Makefile | 1 +
arch/arm64/kernel/crash_dump.c | 71 +++++++++++++++++++++++++++++++
arch/arm64/kernel/machine_kexec.c | 55 +++++++++++++++++++++++-
arch/arm64/kernel/process.c | 7 +++-
arch/arm64/kernel/setup.c | 8 +++-
arch/arm64/kernel/smp.c | 12 +++++-
arch/arm64/mm/init.c | 84 +++++++++++++++++++++++++++++++++++++
11 files changed, 309 insertions(+), 7 deletions(-)
create mode 100644 arch/arm64/kernel/crash_dump.c
--
1.7.9.5
->add_dev() may fail and the error returned from it can be useful for
the caller.
For example, if some of the resources aren't ready yet and -EPROBE_DEFER
is returned from ->add_dev(), then the owner of 'struct
subsys_interface' may want to try probing again at a later point of
time. And that requires a proper return value from ->add_dev().
Also, if we hit an error while registering subsys_interface, then we
should stop proceeding further and rollback whatever has been done until
then. Break part of subsys_interface_unregister() into another routine,
which lets us call ->remove_dev() for all devices for which ->add_dev()
is already called.
Cc: 3.3+ <stable(a)vger.kernel.org> # 3.3+
Fixes: ca22e56debc5 ("driver-core: implement 'sysdev' functionality for regular devices and buses")
Reported-and-tested-by: Pi-Cheng Chen <pi-cheng.chen(a)linaro.org>
Signed-off-by: Viresh Kumar <viresh.kumar(a)linaro.org>
---
drivers/base/bus.c | 55 ++++++++++++++++++++++++++++++++++--------------------
1 file changed, 35 insertions(+), 20 deletions(-)
diff --git a/drivers/base/bus.c b/drivers/base/bus.c
index 79bc203f51ef..d92dc109ba51 100644
--- a/drivers/base/bus.c
+++ b/drivers/base/bus.c
@@ -1112,11 +1112,36 @@ void subsys_dev_iter_exit(struct subsys_dev_iter *iter)
}
EXPORT_SYMBOL_GPL(subsys_dev_iter_exit);
+static void __subsys_interface_unregister(struct subsys_interface *sif,
+ struct device *lastdev)
+{
+ struct bus_type *subsys = sif->subsys;
+ struct subsys_dev_iter iter;
+ struct device *dev;
+
+ mutex_lock(&subsys->p->mutex);
+ list_del_init(&sif->node);
+ if (sif->remove_dev) {
+ subsys_dev_iter_init(&iter, subsys, NULL, NULL);
+ while ((dev = subsys_dev_iter_next(&iter))) {
+ if (dev == lastdev)
+ break;
+
+ sif->remove_dev(dev, sif);
+ }
+ subsys_dev_iter_exit(&iter);
+ }
+ mutex_unlock(&subsys->p->mutex);
+
+ bus_put(subsys);
+}
+
int subsys_interface_register(struct subsys_interface *sif)
{
struct bus_type *subsys;
struct subsys_dev_iter iter;
struct device *dev;
+ int ret = 0;
if (!sif || !sif->subsys)
return -ENODEV;
@@ -1129,38 +1154,28 @@ int subsys_interface_register(struct subsys_interface *sif)
list_add_tail(&sif->node, &subsys->p->interfaces);
if (sif->add_dev) {
subsys_dev_iter_init(&iter, subsys, NULL, NULL);
- while ((dev = subsys_dev_iter_next(&iter)))
- sif->add_dev(dev, sif);
+ while ((dev = subsys_dev_iter_next(&iter))) {
+ ret = sif->add_dev(dev, sif);
+ if (ret)
+ break;
+ }
subsys_dev_iter_exit(&iter);
}
mutex_unlock(&subsys->p->mutex);
- return 0;
+ if (ret)
+ __subsys_interface_unregister(sif, dev);
+
+ return ret;
}
EXPORT_SYMBOL_GPL(subsys_interface_register);
void subsys_interface_unregister(struct subsys_interface *sif)
{
- struct bus_type *subsys;
- struct subsys_dev_iter iter;
- struct device *dev;
-
if (!sif || !sif->subsys)
return;
- subsys = sif->subsys;
-
- mutex_lock(&subsys->p->mutex);
- list_del_init(&sif->node);
- if (sif->remove_dev) {
- subsys_dev_iter_init(&iter, subsys, NULL, NULL);
- while ((dev = subsys_dev_iter_next(&iter)))
- sif->remove_dev(dev, sif);
- subsys_dev_iter_exit(&iter);
- }
- mutex_unlock(&subsys->p->mutex);
-
- bus_put(subsys);
+ __subsys_interface_unregister(sif, NULL);
}
EXPORT_SYMBOL_GPL(subsys_interface_unregister);
--
2.4.0
Hi Guys,
This adds code to support operating-points-v2 bindings. Not everything
is supported yet, but most of the basic stuff is.
Tested with: Exynos 5250, dual cortex A15 board. With both old and new
bindings.
Bindings are already frozen:
http://marc.info/?i=cover.1433434659.git.viresh.kumar%40linaro.org
Pushed here as well for reference:
ssh://git@git.linaro.org/people/viresh.kumar/linux.git opp/v2
Viresh Kumar (10):
opp: Relocate few routines
OPP: Create _remove_device_opp() for freeing dev_opp
OPP: Allocate dev_opp from _add_device_opp()
OPP: Break _opp_add_dynamic() into smaller functions
opp: Add support to parse "operating-points-v2" bindings
OPP: Add clock-latency-ns support
opp: Add OPP sharing information to OPP library
OPP: Add support for opp-suspend
opp: Add helpers for initializing CPU OPPs
cpufreq-dt: Add support for operating-points-v2 bindings
drivers/base/power/opp.c | 1063 ++++++++++++++++++++++++++++++++----------
drivers/cpufreq/cpufreq-dt.c | 58 ++-
include/linux/pm_opp.h | 29 ++
3 files changed, 902 insertions(+), 248 deletions(-)
--
2.4.0
This is the sequel to the first episode that started here:
http://article.gmane.org/gmane.linux.ports.arm.kernel/401353
Now that most of the first set has been merged upstream, here's the last
set to complete the cleanup. This mainly includes the removal of the
backward compatibility support plus some cosmetic changes.
The hisi04 backend, though, is instead converted to raw SMP operations
as it currently doesn't benefit from MCPM at all and doesn't fit well
with the new backend structure.
This series can also be obtained from the following Git repository:
http://git.linaro.org/people/nicolas.pitre/linux.git mcpm
The diffstat shows more code removal again:
arch/arm/common/mcpm_entry.c | 281 +++++++++++++----------------
arch/arm/include/asm/mcpm.h | 73 +++-----
arch/arm/mach-exynos/suspend.c | 8 +-
arch/arm/mach-hisi/platmcpm.c | 127 +++++--------
drivers/cpuidle/cpuidle-big_little.c | 8 +-
5 files changed, 198 insertions(+), 299 deletions(-)
Hi Thomas/Daniel,
The earlier patchset (sent with similar $subject) is picked up by Daniel
for v4.3. This series is also targeted for v4.3 only.
This series migrates rest of the drivers present in drivers/clocksource/
directory, to the new set-state interface. This would enable these
drivers to use new states (like: ONESHOT_STOPPED, etc.) of a clockevent
device (if required), as the set-mode interface is marked obsolete now
and wouldn't be expanded to handle new states.
Once all the drivers are migrated to the new interface in future, we can
remove the code supporting '->mode' in clockevents core.
Rebased over:
git://git.linaro.org/people/daniel.lezcano/linux.git clockevents/4.3
And must be tested over this branch only due to dependencies on
clockevent core changes.
The patches in this series are independent of each other.
This has been build/boot tested by two bots on various platforms for few
days now:
- kernelci, http://kernelci.org/
- 0-DAY kernel test infrastructure, kbuild test robot
--
viresh
Cc: Alexander Shiyan <shc_work(a)mail.ru>
Cc: Alexandre Belloni <alexandre.belloni(a)free-electrons.com>
Cc: Andrew Bresticker <abrestic(a)chromium.org>
Cc: Andrew Lunn <andrew(a)lunn.ch>
Cc: Andy Gross <agross(a)codeaurora.org>
Cc: Barry Song <baohua(a)kernel.org>
Cc: Baruch Siach <baruch(a)tkos.co.il>
Cc: Carlo Caione <carlo(a)caione.org>
Cc: Daniel Tang <dt.tangr(a)gmail.com>
Cc: David Brown <davidb(a)codeaurora.org>
Cc: Gregory Clement <gregory.clement(a)free-electrons.com>
Cc: Heiko Stuebner <heiko(a)sntech.de>
Cc: Jacob Pan <jacob.jun.pan(a)linux.intel.com>
Cc: James Hogan <james.hogan(a)imgtec.com>
Cc: Jamie Iles <jamie(a)jamieiles.com>
Cc: Jason Cooper <jason(a)lakedaemon.net>
Cc: Jean-Christophe Plagniol-Villard <plagnioj(a)jcrosoft.com>
Cc: Jingchang Lu <b35083(a)freescale.com>
Cc: Jonas Jensen <jonas.jensen(a)gmail.com>
Cc: Kukjin Kim <kgene(a)kernel.org>
Cc: Kukjin Kim <kgene.kim(a)samsung.com>
Cc: Kumar Gala <galak(a)codeaurora.org>
Cc: Laurent Pinchart <laurent.pinchart+renesas(a)ideasonboard.com>
Cc: Linus Walleij <linus.walleij(a)linaro.org>
Cc: Magnus Damm <damm+renesas(a)opensource.se>
Cc: Mark Rutland <mark.rutland(a)arm.com>
Cc: Matthias Brugger <matthias.bgg(a)gmail.com>
Cc: Maxime Coquelin <mcoquelin.stm32(a)gmail.com>
Cc: Maxime Ripard <maxime.ripard(a)free-electrons.com>
Cc: Michal Simek <michal.simek(a)xilinx.com>
Cc: Nicolas Ferre <nicolas.ferre(a)atmel.com>
Cc: Oleksij Rempel <linux(a)rempel-privat.de>
Cc: Paul Mundt <lethal(a)linux-sh.org>
Cc: Robert Jarzmik <robert.jarzmik(a)free.fr>
Cc: Russell King <linux(a)arm.linux.org.uk>
Cc: Russell King <rmk+kernel(a)arm.linux.org.uk>
Cc: Santosh Shilimkar <ssantosh(a)kernel.org>
Cc: Sebastian Hesselbarth <sebastian.hesselbarth(a)gmail.com>
Cc: Shawn Guo <shawn.guo(a)linaro.org>
Cc: Sören Brinkmann <soren.brinkmann(a)xilinx.com>
Cc: Stefan Agner <stefan(a)agner.ch>
Cc: Stephen Boyd <sboyd(a)codeaurora.org>
Cc: Stephen Warren <swarren(a)wwwdotorg.org>
Cc: Steven J. Hill <Steven.Hill(a)imgtec.com>
Cc: Thierry Reding <treding(a)nvidia.com>
Cc: Tomasz Figa <tfiga(a)chromium.org>
Cc: Tony Prisk <linux(a)prisktech.co.nz>
Cc: Uwe Kleine-König <kernel(a)pengutronix.de>
Cc: Xiubo Li <Li.Xiubo(a)freescale.com>
Viresh Kumar (41):
clocksource: asm9260: Migrate to new 'set-state' interface
clocksource: cadence_ttc: Migrate to new 'set-state' interface
clocksource: clps711x: Migrate to new 'set-state' interface
clocksource: dummy_timer: Migrate to new 'set-state' interface
clocksource: dw_apb: Migrate to new 'set-state' interface
clocksource: exynos_mct: Migrate to new 'set-state' interface
clocksource: fsl_ftm: Migrate to new 'set-state' interface
clocksource: i8253: Migrate to new 'set-state' interface
clocksource: meson6: Migrate to new 'set-state' interface
clocksource: metag_generic: Migrate to new 'set-state' interface
clocksource: mips-gic: Migrate to new 'set-state' interface
clocksource: moxart: Migrate to new 'set-state' interface
clocksource: mtk: Migrate to new 'set-state' interface
clocksource: mxs: Migrate to new 'set-state' interface
clocksource: nomadik-mtu: Migrate to new 'set-state' interface
clocksource: pxa: Migrate to new 'set-state' interface
clocksource: qcom: Migrate to new 'set-state' interface
clocksource: rockchip: Migrate to new 'set-state' interface
clocksource: samsung_pwm: Migrate to new 'set-state' interface
clocksource: sh_cmt: Migrate to new 'set-state' interface
clocksource: sh_mtu2: Migrate to new 'set-state' interface
clocksource: sh_tmu: Migrate to new 'set-state' interface
clocksource: sun4i: Migrate to new 'set-state' interface
clocksource: tcb_clksrc: Migrate to new 'set-state' interface
clocksource: tegra20: Migrate to new 'set-state' interface
clocksource: time-armada-370-xp: Migrate to new 'set-state' interface
clocksource: efm32: Migrate to new 'set-state' interface
clocksource: orion: Migrate to new 'set-state' interface
clocksource: atlas7: Migrate to new 'set-state' interface
clocksource: atmel: Migrate to new 'set-state' interface
clocksource: atmel-st: Migrate to new 'set-state' interface
clocksource: digicolor: Migrate to new 'set-state' interface
clocksource: integrator: Migrate to new 'set-state' interface
clocksource: keystone: Migrate to new 'set-state' interface
clocksource: prima2: Migrate to new 'set-state' interface
clocksource: stm32: Migrate to new 'set-state' interface
clocksource: sun5i: Migrate to new 'set-state' interface
clocksource: u300: Migrate to new 'set-state' interface
clocksource: vf_pit: Migrate to new 'set-state' interface
clocksource: vt8500: Migrate to new 'set-state' interface
clocksource: zevio: Migrate to new 'set-state' interface
arch/x86/kernel/i8253.c | 2 +-
drivers/clocksource/asm9260_timer.c | 61 +++++++-----
drivers/clocksource/cadence_ttc_timer.c | 59 ++++++------
drivers/clocksource/clps711x-timer.c | 6 --
drivers/clocksource/dummy_timer.c | 10 --
drivers/clocksource/dw_apb_timer.c | 143 +++++++++++++++------------
drivers/clocksource/exynos_mct.c | 85 ++++++++--------
drivers/clocksource/fsl_ftm_timer.c | 35 ++++---
drivers/clocksource/i8253.c | 77 ++++++++-------
drivers/clocksource/meson6_timer.c | 50 +++++-----
drivers/clocksource/metag_generic.c | 20 ----
drivers/clocksource/mips-gic-timer.c | 7 --
drivers/clocksource/moxart_timer.c | 49 +++++-----
drivers/clocksource/mtk_timer.c | 32 +++---
drivers/clocksource/mxs_timer.c | 80 ++++++---------
drivers/clocksource/nomadik-mtu.c | 58 +++++------
drivers/clocksource/pxa_timer.c | 39 +++-----
drivers/clocksource/qcom-timer.c | 24 ++---
drivers/clocksource/rockchip_timer.c | 32 +++---
drivers/clocksource/samsung_pwm_timer.c | 41 ++++----
drivers/clocksource/sh_cmt.c | 62 ++++++------
drivers/clocksource/sh_mtu2.c | 42 +++-----
drivers/clocksource/sh_tmu.c | 63 ++++++------
drivers/clocksource/sun4i_timer.c | 41 ++++----
drivers/clocksource/tcb_clksrc.c | 93 ++++++++++--------
drivers/clocksource/tegra20_timer.c | 40 ++++----
drivers/clocksource/time-armada-370-xp.c | 53 +++++-----
drivers/clocksource/time-efm32.c | 66 +++++++------
drivers/clocksource/time-orion.c | 46 +++++----
drivers/clocksource/timer-atlas7.c | 19 ++--
drivers/clocksource/timer-atmel-pit.c | 41 ++++----
drivers/clocksource/timer-atmel-st.c | 69 +++++++------
drivers/clocksource/timer-digicolor.c | 41 ++++----
drivers/clocksource/timer-integrator-ap.c | 58 ++++++-----
drivers/clocksource/timer-keystone.c | 44 +++------
drivers/clocksource/timer-prima2.c | 34 +++----
drivers/clocksource/timer-stm32.c | 30 +++---
drivers/clocksource/timer-sun5i.c | 45 +++++----
drivers/clocksource/timer-u300.c | 155 +++++++++++++++---------------
drivers/clocksource/vf_pit_timer.c | 27 +++---
drivers/clocksource/vt8500_timer.c | 29 ++----
drivers/clocksource/zevio-timer.c | 44 ++++-----
42 files changed, 1001 insertions(+), 1051 deletions(-)
--
2.4.0
This patchset implements a clock driver for STM32F42xxx and STM32F43xxx
series devices.
There are a few small caveats at the present:
1. Relies on "Add support to STMicroeletronics STM32 family", v8 by
Maxime Coquelin:
http://thread.gmane.org/gmane.linux.kernel.cross-arch/27569
2. Allocating ~80 clock components appears to fragment memory enough
to prevent busybox (.text is ~300K, non-XIP) from running getty.
I have to use "init=/bin/sh" to avoid OOM problems.
3. Support for I2S and SAI is not included in this patchset.
Daniel Thompson (3):
dt-bindings: Document the STM32F4 clock bindings
clk: stm32: Add clock driver for STM32F4[23]xxx devices
ARM: dts: stm32f429: Adopt STM32F4 clock driver
.../devicetree/bindings/clock/st,stm32-rcc.txt | 65 ++++
arch/arm/boot/dts/stm32f429.dtsi | 83 ++---
drivers/clk/Makefile | 1 +
drivers/clk/clk-stm32f4.c | 365 +++++++++++++++++++++
4 files changed, 457 insertions(+), 57 deletions(-)
create mode 100644 Documentation/devicetree/bindings/clock/st,stm32-rcc.txt
create mode 100644 drivers/clk/clk-stm32f4.c
--
2.1.0