| From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 |
| From: Elliot Berman <eberman@codeaurora.org> |
| Date: Mon, 14 Sep 2020 15:35:41 -0700 |
| Subject: NOUPSTREAM: ANDROID: gic: Add vendor hook for gic-v3 resume |
| |
| Add vendor hook for gic-v3 resume to allow vendor GIC enhancement. |
| |
| [CPNOTE: 03/06/21] Lee: Vendor related code - maintain forever |
| |
| Bug: 168730134 |
| Change-Id: Id3298715355c8f592f58393db6aa903b18dd812c |
| Signed-off-by: Elliot Berman <eberman@codeaurora.org> |
| --- |
| drivers/android/vendor_hooks.c | 2 ++ |
| drivers/irqchip/irq-gic-v3.c | 24 ++++++++++++++++++++++++ |
| include/trace/hooks/gic.h | 21 +++++++++++++++++++++ |
| 3 files changed, 47 insertions(+) |
| create mode 100644 include/trace/hooks/gic.h |
| |
| diff --git a/drivers/android/vendor_hooks.c b/drivers/android/vendor_hooks.c |
| --- a/drivers/android/vendor_hooks.c |
| +++ b/drivers/android/vendor_hooks.c |
| @@ -17,6 +17,7 @@ |
| #include <trace/hooks/cpuidle.h> |
| #include <trace/hooks/topology.h> |
| #include <trace/hooks/mpam.h> |
| +#include <trace/hooks/gic.h> |
| #include <trace/hooks/wqlockup.h> |
| #include <trace/hooks/debug.h> |
| #include <trace/hooks/printk.h> |
| @@ -64,6 +65,7 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_cpu_idle_enter); |
| EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_cpu_idle_exit); |
| EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mpam_set); |
| EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_find_busiest_group); |
| +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_gic_resume); |
| EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_wq_lockup_pool); |
| EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_ipi_stop); |
| EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_dump_throttled_rt_tasks); |
| diff --git a/drivers/irqchip/irq-gic-v3.c b/drivers/irqchip/irq-gic-v3.c |
| --- a/drivers/irqchip/irq-gic-v3.c |
| +++ b/drivers/irqchip/irq-gic-v3.c |
| @@ -18,6 +18,7 @@ |
| #include <linux/percpu.h> |
| #include <linux/refcount.h> |
| #include <linux/slab.h> |
| +#include <linux/syscore_ops.h> |
| #include <linux/wakeup_reason.h> |
| |
| |
| @@ -31,6 +32,8 @@ |
| #include <asm/smp_plat.h> |
| #include <asm/virt.h> |
| |
| +#include <trace/hooks/gic.h> |
| + |
| #include "irq-gic-common.h" |
| |
| #define GICD_INT_NMI_PRI (GICD_INT_DEF_PRI & ~0x80) |
| @@ -1317,6 +1320,26 @@ static void gic_cpu_pm_init(void) |
| static inline void gic_cpu_pm_init(void) { } |
| #endif /* CONFIG_CPU_PM */ |
| |
| +#ifdef CONFIG_PM |
| +static void gic_resume(void) |
| +{ |
| + trace_android_vh_gic_resume(gic_data.domain, gic_data.dist_base); |
| +} |
| + |
| +static struct syscore_ops gic_syscore_ops = { |
| + .resume = gic_resume, |
| +}; |
| + |
| +static void gic_syscore_init(void) |
| +{ |
| + register_syscore_ops(&gic_syscore_ops); |
| +} |
| + |
| +#else |
| +static inline void gic_syscore_init(void) { } |
| +#endif |
| + |
| + |
| static struct irq_chip gic_chip = { |
| .name = "GICv3", |
| .irq_mask = gic_mask_irq, |
| @@ -1801,6 +1824,7 @@ static int __init gic_init_bases(void __iomem *dist_base, |
| gic_cpu_init(); |
| gic_smp_init(); |
| gic_cpu_pm_init(); |
| + gic_syscore_init(); |
| |
| if (gic_dist_supports_lpis()) { |
| its_init(handle, &gic_data.rdists, gic_data.domain); |
| diff --git a/include/trace/hooks/gic.h b/include/trace/hooks/gic.h |
| new file mode 100644 |
| --- /dev/null |
| +++ b/include/trace/hooks/gic.h |
| @@ -0,0 +1,21 @@ |
| +/* SPDX-License-Identifier: GPL-2.0 */ |
| +#undef TRACE_SYSTEM |
| +#define TRACE_SYSTEM gic |
| + |
| +#define TRACE_INCLUDE_PATH trace/hooks |
| + |
| +#if !defined(_TRACE_HOOK_GIC_H) || defined(TRACE_HEADER_MULTI_READ) |
| +#define _TRACE_HOOK_GIC_H |
| + |
| +#include <linux/irqdomain.h> |
| + |
| +#include <linux/tracepoint.h> |
| +#include <trace/hooks/vendor_hooks.h> |
| + |
| +DECLARE_HOOK(android_vh_gic_resume, |
| + TP_PROTO(struct irq_domain *domain, void __iomem *dist_base), |
| + TP_ARGS(domain, dist_base)); |
| + |
| +#endif /* _TRACE_HOOK_GIC_H */ |
| +/* This part must be outside protection */ |
| +#include <trace/define_trace.h> |