summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJack Diver <diverj@google.com>2023-08-16 15:29:20 +0000
committerJack Diver <diverj@google.com>2024-02-28 18:20:39 +0000
commit26a4b35b1e957afd074bf8faf500cdd738a87438 (patch)
tree6c3bd2f8fe4b62926cc072a3d5a6884bae665334
parent5f3c617c62642c316b47d3abc8f9e60c51e238ad (diff)
downloadgpu-26a4b35b1e957afd074bf8faf500cdd738a87438.tar.gz
mali_kbase: platform: Add additional platform hooks
Add: * platform_handler_context_active * platform_handler_context_idle Bug: 296485687 Signed-off-by: Jack Diver <diverj@google.com> (cherry picked from https://partner-android-review.googlesource.com/q/commit:fe220ffcb70d0c3188a6fe0e1e01458573ea1baf) Merged-In: If0a39f375a08ebb6674c7fb8aee0669c618dd9fa Change-Id: If0a39f375a08ebb6674c7fb8aee0669c618dd9fa
-rw-r--r--mali_kbase/mali_kbase_config.c18
-rw-r--r--mali_kbase/mali_kbase_config.h36
-rw-r--r--mali_kbase/mali_kbase_ctx_sched.c2
3 files changed, 56 insertions, 0 deletions
diff --git a/mali_kbase/mali_kbase_config.c b/mali_kbase/mali_kbase_config.c
index 32f404b..72080a7 100644
--- a/mali_kbase/mali_kbase_config.c
+++ b/mali_kbase/mali_kbase_config.c
@@ -83,6 +83,24 @@ void kbasep_platform_context_term(struct kbase_context *kctx)
platform_funcs_p->platform_handler_context_term_func(kctx);
}
+void kbasep_platform_context_active(struct kbase_context *kctx)
+{
+ struct kbase_platform_funcs_conf *platform_funcs_p;
+
+ platform_funcs_p = (struct kbase_platform_funcs_conf*)PLATFORM_FUNCS;
+ if (platform_funcs_p && platform_funcs_p->platform_handler_context_active)
+ platform_funcs_p->platform_handler_context_active(kctx);
+}
+
+void kbasep_platform_context_idle(struct kbase_context *kctx)
+{
+ struct kbase_platform_funcs_conf *platform_funcs_p;
+
+ platform_funcs_p = (struct kbase_platform_funcs_conf*)PLATFORM_FUNCS;
+ if (platform_funcs_p && platform_funcs_p->platform_handler_context_idle)
+ platform_funcs_p->platform_handler_context_idle(kctx);
+}
+
void kbasep_platform_event_work_begin(void *param)
{
struct kbase_platform_funcs_conf *platform_funcs_p;
diff --git a/mali_kbase/mali_kbase_config.h b/mali_kbase/mali_kbase_config.h
index c7a6b32..7f6d3ed 100644
--- a/mali_kbase/mali_kbase_config.h
+++ b/mali_kbase/mali_kbase_config.h
@@ -121,6 +121,23 @@ struct kbase_platform_funcs_conf {
*/
void (*platform_handler_context_term_func)(struct kbase_context *kctx);
/**
+ * platform_handler_context_active - Platform specific handler, called when a context is
+ * (re)activated.
+ *
+ * @kctx: kbase_context pointer
+ *
+ * Context: Atomic context
+ */
+ void (*platform_handler_context_active)(struct kbase_context *kctx);
+ /**
+ * platform_handler_context_idle - Platform specific handler, called when a context is idled.
+ *
+ * @kctx: kbase_context pointer
+ *
+ * Context: Atomic context
+ */
+ void (*platform_handler_context_idle)(struct kbase_context *kctx);
+ /**
* platform_handler_work_begin_func - Platform specific handler whose
* function changes depending on the
* backend used.
@@ -565,6 +582,25 @@ int kbasep_platform_context_init(struct kbase_context *kctx);
void kbasep_platform_context_term(struct kbase_context *kctx);
/**
+ * kbasep_platform_context_active - Platform specific callback, called when a context is
+ * (re)activated.
+ *
+ * @kctx: kbase_context pointer
+ *
+ * Function calls a platform defined routine if specified in the configuration attributes.
+ */
+void kbasep_platform_context_active(struct kbase_context *kctx);
+
+/**
+ * kbasep_platform_context_idle - Platform specific callback, called when a context is idled.
+ *
+ * @kctx: kbase_context pointer
+ *
+ * Function calls a platform defined routine if specified in the configuration attributes.
+ */
+void kbasep_platform_context_idle(struct kbase_context *kctx);
+
+/**
* kbasep_platform_event_work_begin - Platform specific callback whose function
* changes depending on the backend used.
* Signals that a unit of work has started
diff --git a/mali_kbase/mali_kbase_ctx_sched.c b/mali_kbase/mali_kbase_ctx_sched.c
index 41f8c9c..8c3d52e 100644
--- a/mali_kbase/mali_kbase_ctx_sched.c
+++ b/mali_kbase/mali_kbase_ctx_sched.c
@@ -118,6 +118,7 @@ int kbase_ctx_sched_retain_ctx(struct kbase_context *kctx)
if (free_as >= 0) {
kbdev->as_free &= ~(1u << free_as);
+ kbasep_platform_context_active(kctx);
/* Only program the MMU if the context has not been
* assigned the same address space before.
*/
@@ -185,6 +186,7 @@ void kbase_ctx_sched_release_ctx(struct kbase_context *kctx)
new_ref_count = atomic_dec_return(&kctx->refcount);
if (new_ref_count == 0) {
+ kbasep_platform_context_idle(kctx);
if (likely((kctx->as_nr >= 0) && (kctx->as_nr < BASE_MAX_NR_AS))) {
kbdev->as_free |= (1u << kctx->as_nr);
if (kbase_ctx_flag(kctx, KCTX_AS_DISABLED_ON_FAULT)) {