summaryrefslogtreecommitdiff
path: root/mali_kbase
diff options
context:
space:
mode:
Diffstat (limited to 'mali_kbase')
-rw-r--r--mali_kbase/backend/gpu/mali_kbase_js_backend.c3
-rw-r--r--mali_kbase/csf/mali_kbase_csf_scheduler.c4
-rw-r--r--mali_kbase/mali_kbase_config.c9
-rw-r--r--mali_kbase/mali_kbase_config.h18
-rw-r--r--mali_kbase/platform/pixel/pixel_gpu.c1
-rw-r--r--mali_kbase/platform/pixel/pixel_gpu_slc.c10
-rw-r--r--mali_kbase/platform/pixel/pixel_gpu_slc.h4
7 files changed, 49 insertions, 0 deletions
diff --git a/mali_kbase/backend/gpu/mali_kbase_js_backend.c b/mali_kbase/backend/gpu/mali_kbase_js_backend.c
index be72c4a..304737f 100644
--- a/mali_kbase/backend/gpu/mali_kbase_js_backend.c
+++ b/mali_kbase/backend/gpu/mali_kbase_js_backend.c
@@ -244,6 +244,9 @@ static enum hrtimer_restart timer_callback(struct hrtimer *timer)
spin_unlock_irqrestore(&kbdev->hwaccess_lock, flags);
+ /* Inform platform of scheduling event */
+ kbasep_platform_event_tick_tock(kbdev);
+
return HRTIMER_NORESTART;
}
diff --git a/mali_kbase/csf/mali_kbase_csf_scheduler.c b/mali_kbase/csf/mali_kbase_csf_scheduler.c
index f7f7ed0..22a08a6 100644
--- a/mali_kbase/csf/mali_kbase_csf_scheduler.c
+++ b/mali_kbase/csf/mali_kbase_csf_scheduler.c
@@ -43,6 +43,7 @@
#include <mali_kbase_gpu_metrics.h>
#include <csf/mali_kbase_csf_trace_buffer.h>
#endif /* CONFIG_MALI_TRACE_POWER_GPU_WORK_PERIOD */
+#include <uapi/gpu/arm/midgard/platform/pixel/pixel_memory_group_manager.h>
/* Value to indicate that a queue group is not groups_to_schedule list */
#define KBASEP_GROUP_PREPARED_SEQ_NUM_INVALID (U32_MAX)
@@ -6685,6 +6686,9 @@ static int kbase_csf_scheduler_kthread(void *data)
dev_dbg(kbdev->dev, "Waking up for event after a scheduling iteration.");
wake_up_all(&kbdev->csf.event_wait);
+
+ /* Inform platform of scheduling event */
+ kbasep_platform_event_tick_tock(kbdev);
}
/* Wait for the other thread, that signaled the exit, to call kthread_stop() */
diff --git a/mali_kbase/mali_kbase_config.c b/mali_kbase/mali_kbase_config.c
index 72080a7..669e1c3 100644
--- a/mali_kbase/mali_kbase_config.c
+++ b/mali_kbase/mali_kbase_config.c
@@ -119,6 +119,15 @@ void kbasep_platform_event_work_end(void *param)
platform_funcs_p->platform_handler_work_end_func(param);
}
+void kbasep_platform_event_tick_tock(struct kbase_device *kbdev)
+{
+ 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_tick_tock)
+ platform_funcs_p->platform_handler_tick_tock(kbdev);
+}
+
int kbasep_platform_fw_config_init(struct kbase_device *kbdev)
{
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 7f6d3ed..549c170 100644
--- a/mali_kbase/mali_kbase_config.h
+++ b/mali_kbase/mali_kbase_config.h
@@ -138,6 +138,14 @@ struct kbase_platform_funcs_conf {
*/
void (*platform_handler_context_idle)(struct kbase_context *kctx);
/**
+ * platform_handler_tick_tock - Platform specific callback when a scheduler tick/tock occurs.
+ *
+ * @kbdev: kbase_device pointer
+ *
+ * Context: Process context
+ */
+ void (*platform_handler_tick_tock)(struct kbase_device *kbdev);
+ /**
* platform_handler_work_begin_func - Platform specific handler whose
* function changes depending on the
* backend used.
@@ -634,6 +642,16 @@ void kbasep_platform_event_work_begin(void *param);
void kbasep_platform_event_work_end(void *param);
/**
+ * kbasep_platform_tick_tock - Platform specific callback when a scheduler tick/tock occurs.
+ *
+ * @kbdev: kbase_device pointer
+ *
+ * Function calls a platform defined routine if specified in the configuration attributes.
+ *
+ */
+void kbasep_platform_event_tick_tock(struct kbase_device *kbdev);
+
+/**
* kbasep_platform_fw_config_init - Platform specific callback to configure FW
*
* @kbdev - kbase_device pointer
diff --git a/mali_kbase/platform/pixel/pixel_gpu.c b/mali_kbase/platform/pixel/pixel_gpu.c
index ba0ceb8..6e30053 100644
--- a/mali_kbase/platform/pixel/pixel_gpu.c
+++ b/mali_kbase/platform/pixel/pixel_gpu.c
@@ -282,6 +282,7 @@ struct kbase_platform_funcs_conf platform_funcs = {
.platform_handler_work_end_func = &gpu_dvfs_metrics_work_end,
.platform_handler_context_active = &gpu_slc_kctx_active,
.platform_handler_context_idle = &gpu_slc_kctx_idle,
+ .platform_handler_tick_tock = &gpu_slc_tick_tock,
.platform_fw_cfg_init_func = &gpu_fw_cfg_init,
.platform_handler_core_dump_func = &gpu_sscd_dump,
};
diff --git a/mali_kbase/platform/pixel/pixel_gpu_slc.c b/mali_kbase/platform/pixel/pixel_gpu_slc.c
index e8aae75..cf330af 100644
--- a/mali_kbase/platform/pixel/pixel_gpu_slc.c
+++ b/mali_kbase/platform/pixel/pixel_gpu_slc.c
@@ -126,6 +126,16 @@ void gpu_slc_kctx_idle(struct kbase_context *kctx)
}
/**
+ * gpu_slc_tick_tock() - Called when a GPU scheduling kick occurs
+ *
+ * @kbdev: The &struct kbase_device for the GPU.
+ */
+void gpu_slc_tick_tock(struct kbase_device *kbdev)
+{
+ pixel_mgm_slc_update_signal(kbdev->mgm_dev, 0);
+}
+
+/**
* gpu_slc_init - Initialize the SLC context for the GPU
*
* @kbdev: The &struct kbase_device for the GPU.
diff --git a/mali_kbase/platform/pixel/pixel_gpu_slc.h b/mali_kbase/platform/pixel/pixel_gpu_slc.h
index 82d0779..cca2af9 100644
--- a/mali_kbase/platform/pixel/pixel_gpu_slc.h
+++ b/mali_kbase/platform/pixel/pixel_gpu_slc.h
@@ -22,6 +22,8 @@ void gpu_slc_kctx_term(struct kbase_context *kctx);
void gpu_slc_kctx_active(struct kbase_context *kctx);
void gpu_slc_kctx_idle(struct kbase_context *kctx);
+
+void gpu_slc_tick_tock(struct kbase_device *kbdev);
#else
static int __maybe_unused gpu_pixel_handle_buffer_liveness_update_ioctl(struct kbase_context* kctx,
struct kbase_ioctl_buffer_liveness_update* update)
@@ -40,6 +42,8 @@ static void __maybe_unused gpu_slc_kctx_term(struct kbase_context* kctx) { (void
static void __maybe_unused gpu_slc_kctx_active(struct kbase_context *kctx) { (void)kctx; }
static void __maybe_unused gpu_slc_kctx_idle(struct kbase_context *kctx) { (void)kctx; }
+
+static void __maybe_unused gpu_slc_tick_tock(struct kbase_device *kbdev) { (void)kbdev; }
#endif /* CONFIG_MALI_PIXEL_GPU_SLC */
#endif /* _PIXEL_GPU_SLC_H_ */