@ -24,6 +24,7 @@
# define HIST 5
# define HIST 5
# define TARGET 80
# define TARGET 80
# define CAP 75
# define CAP 75
# define WAIT_THRESHOLD 10
/* AB vote is in multiple of BW_STEP Mega bytes */
/* AB vote is in multiple of BW_STEP Mega bytes */
# define BW_STEP 160
# define BW_STEP 160
@ -67,6 +68,7 @@ static int devfreq_gpubw_get_target(struct devfreq *df,
int act_level ;
int act_level ;
int norm_max_cycles ;
int norm_max_cycles ;
int norm_cycles ;
int norm_cycles ;
int wait_active_percent ;
int gpu_percent ;
int gpu_percent ;
/*
/*
* Normalized AB should at max usage be the gpu_bimc frequency in MHz .
* Normalized AB should at max usage be the gpu_bimc frequency in MHz .
@ -99,6 +101,8 @@ static int devfreq_gpubw_get_target(struct devfreq *df,
( unsigned int ) priv - > bus . total_time ;
( unsigned int ) priv - > bus . total_time ;
norm_cycles = ( unsigned int ) ( priv - > bus . ram_time + priv - > bus . ram_wait ) /
norm_cycles = ( unsigned int ) ( priv - > bus . ram_time + priv - > bus . ram_wait ) /
( unsigned int ) priv - > bus . total_time ;
( unsigned int ) priv - > bus . total_time ;
wait_active_percent = ( 100 * ( unsigned int ) priv - > bus . ram_wait ) /
( unsigned int ) priv - > bus . ram_time ;
gpu_percent = ( 100 * ( unsigned int ) priv - > bus . gpu_time ) /
gpu_percent = ( 100 * ( unsigned int ) priv - > bus . gpu_time ) /
( unsigned int ) priv - > bus . total_time ;
( unsigned int ) priv - > bus . total_time ;
@ -117,7 +121,8 @@ static int devfreq_gpubw_get_target(struct devfreq *df,
act_level = ( act_level < 0 ) ? 0 : act_level ;
act_level = ( act_level < 0 ) ? 0 : act_level ;
act_level = ( act_level > = priv - > bus . num ) ?
act_level = ( act_level > = priv - > bus . num ) ?
( priv - > bus . num - 1 ) : act_level ;
( priv - > bus . num - 1 ) : act_level ;
if ( norm_cycles > priv - > bus . up [ act_level ] & &
if ( ( norm_cycles > priv - > bus . up [ act_level ] | |
wait_active_percent > WAIT_THRESHOLD ) & &
gpu_percent > CAP )
gpu_percent > CAP )
bus_profile - > flag = DEVFREQ_FLAG_FAST_HINT ;
bus_profile - > flag = DEVFREQ_FLAG_FAST_HINT ;
else if ( norm_cycles < priv - > bus . down [ act_level ] & & level )
else if ( norm_cycles < priv - > bus . down [ act_level ] & & level )