aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/video/samsung/mali/common/mali_kernel_utilization.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/media/video/samsung/mali/common/mali_kernel_utilization.c')
-rw-r--r--drivers/media/video/samsung/mali/common/mali_kernel_utilization.c56
1 files changed, 32 insertions, 24 deletions
diff --git a/drivers/media/video/samsung/mali/common/mali_kernel_utilization.c b/drivers/media/video/samsung/mali/common/mali_kernel_utilization.c
index b43b872..a374dbf 100644
--- a/drivers/media/video/samsung/mali/common/mali_kernel_utilization.c
+++ b/drivers/media/video/samsung/mali/common/mali_kernel_utilization.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2010 ARM Limited. All rights reserved.
+ * Copyright (C) 2010-2012 ARM Limited. All rights reserved.
*
* This program is free software and is provided to you under the terms of the GNU General Public License version 2
* as published by the Free Software Foundation, and any use by you of this program is subject to the terms of such GNU licence.
@@ -27,7 +27,7 @@ static _mali_osk_timer_t *utilization_timer = NULL;
static mali_bool timer_running = MALI_FALSE;
-static void calculate_gpu_utilization(void *arg)
+static void calculate_gpu_utilization(void* arg)
{
u64 time_now;
u64 time_period;
@@ -39,7 +39,8 @@ static void calculate_gpu_utilization(void *arg)
_mali_osk_lock_wait(time_data_lock, _MALI_OSK_LOCKMODE_RW);
- if (accumulated_work_time == 0 && work_start_time == 0) {
+ if (accumulated_work_time == 0 && work_start_time == 0)
+ {
/* Don't reschedule timer, this will be started if new work arrives */
timer_running = MALI_FALSE;
@@ -55,7 +56,8 @@ static void calculate_gpu_utilization(void *arg)
time_period = time_now - period_start_time;
/* If we are currently busy, update working period up to now */
- if (work_start_time != 0) {
+ if (work_start_time != 0)
+ {
accumulated_work_time += (time_now - work_start_time);
work_start_time = time_now;
}
@@ -79,10 +81,13 @@ static void calculate_gpu_utilization(void *arg)
* (we could do a combination, but we just use one for simplicity,
* but the end result should be good enough anyway)
*/
- if (period_normalized > 0x00FFFFFF) {
+ if (period_normalized > 0x00FFFFFF)
+ {
/* The divisor is so big that it is safe to shift it down */
period_normalized >>= 8;
- } else {
+ }
+ else
+ {
/*
* The divisor is so small that we can shift up the dividend, without loosing any data.
* (dividend is always smaller than the divisor)
@@ -99,22 +104,25 @@ static void calculate_gpu_utilization(void *arg)
_mali_osk_timer_add(utilization_timer, _mali_osk_time_mstoticks(MALI_GPU_UTILIZATION_TIMEOUT));
+
mali_gpu_utilization_handler(utilization);
}
-
-
_mali_osk_errcode_t mali_utilization_init(void)
{
- time_data_lock = _mali_osk_lock_init( _MALI_OSK_LOCKFLAG_SPINLOCK_IRQ|_MALI_OSK_LOCKFLAG_NONINTERRUPTABLE, 0, 0 );
+ time_data_lock = _mali_osk_lock_init(_MALI_OSK_LOCKFLAG_ORDERED | _MALI_OSK_LOCKFLAG_SPINLOCK_IRQ |
+ _MALI_OSK_LOCKFLAG_NONINTERRUPTABLE, 0, _MALI_OSK_LOCK_ORDER_UTILIZATION);
+
if (NULL == time_data_lock)
+ {
return _MALI_OSK_ERR_FAULT;
-
+ }
_mali_osk_atomic_init(&num_running_cores, 0);
utilization_timer = _mali_osk_timer_init();
- if (NULL == utilization_timer) {
+ if (NULL == utilization_timer)
+ {
_mali_osk_lock_term(time_data_lock);
return _MALI_OSK_ERR_FAULT;
}
@@ -125,7 +133,8 @@ _mali_osk_errcode_t mali_utilization_init(void)
void mali_utilization_suspend(void)
{
- if (NULL != utilization_timer) {
+ if (NULL != utilization_timer)
+ {
_mali_osk_timer_del(utilization_timer);
timer_running = MALI_FALSE;
}
@@ -133,7 +142,8 @@ void mali_utilization_suspend(void)
void mali_utilization_term(void)
{
- if (NULL != utilization_timer) {
+ if (NULL != utilization_timer)
+ {
_mali_osk_timer_del(utilization_timer);
timer_running = MALI_FALSE;
_mali_osk_timer_term(utilization_timer);
@@ -145,11 +155,10 @@ void mali_utilization_term(void)
_mali_osk_lock_term(time_data_lock);
}
-
-
void mali_utilization_core_start(u64 time_now)
{
- if (_mali_osk_atomic_inc_return(&num_running_cores) == 1) {
+ if (_mali_osk_atomic_inc_return(&num_running_cores) == 1)
+ {
/*
* We went from zero cores working, to one core working,
* we now consider the entire GPU for being busy
@@ -167,27 +176,26 @@ void mali_utilization_core_start(u64 time_now)
}
work_start_time = time_now;
-
- if (timer_running != MALI_TRUE) {
+ if (timer_running != MALI_TRUE)
+ {
timer_running = MALI_TRUE;
period_start_time = work_start_time; /* starting a new period */
_mali_osk_lock_signal(time_data_lock, _MALI_OSK_LOCKMODE_RW);
- _mali_osk_timer_del(utilization_timer);
-
_mali_osk_timer_add(utilization_timer, _mali_osk_time_mstoticks(MALI_GPU_UTILIZATION_TIMEOUT));
- } else {
+ }
+ else
+ {
_mali_osk_lock_signal(time_data_lock, _MALI_OSK_LOCKMODE_RW);
}
}
}
-
-
void mali_utilization_core_end(u64 time_now)
{
- if (_mali_osk_atomic_dec_return(&num_running_cores) == 0) {
+ if (_mali_osk_atomic_dec_return(&num_running_cores) == 0)
+ {
/*
* No more cores are working, so accumulate the time we was busy.
*/