aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorClément G <geecko.dev@free.fr>2013-08-16 18:30:12 +0200
committerClément G <geecko.dev@free.fr>2013-08-16 23:35:54 +0200
commit81acf891b5786d5b392bc0af2a81f193cb90bfc4 (patch)
tree747ce60a51e735311386618d8cc3371ab7b6e9cb /drivers
parentbfed9629ed3cc5b2e805abd0b3c62aa677b87502 (diff)
downloadkernel_samsung_smdk4412-81acf891b5786d5b392bc0af2a81f193cb90bfc4.zip
kernel_samsung_smdk4412-81acf891b5786d5b392bc0af2a81f193cb90bfc4.tar.gz
kernel_samsung_smdk4412-81acf891b5786d5b392bc0af2a81f193cb90bfc4.tar.bz2
mali: pick the right GPU voltage table for 1400MHz devices, restore thresholds
8-level table was always used, resulting in increased voltages for 1400MHz devices. Now, the right table (5-level) can be picked at runtime. Restore the thresholds to stock value for more stable frequencies. Change-Id: I29900535c15557e75c72793b7169771982fce7f9
Diffstat (limited to 'drivers')
-rw-r--r--drivers/media/video/samsung/mali/platform/orion-m400/mali_platform_dvfs.c13
1 files changed, 7 insertions, 6 deletions
diff --git a/drivers/media/video/samsung/mali/platform/orion-m400/mali_platform_dvfs.c b/drivers/media/video/samsung/mali/platform/orion-m400/mali_platform_dvfs.c
index 3bf6805..98a8852 100644
--- a/drivers/media/video/samsung/mali/platform/orion-m400/mali_platform_dvfs.c
+++ b/drivers/media/video/samsung/mali/platform/orion-m400/mali_platform_dvfs.c
@@ -67,8 +67,8 @@ mali_dvfs_staycount_table mali_dvfs_staycount[MALI_DVFS_STEPS]={
/*dvfs threshold*/
mali_dvfs_threshold_table mali_dvfs_threshold[MALI_DVFS_STEPS]={
/*step 0*/{((int)((255*0)/100)) ,((int)((255*85)/100))},
- /*step 1*/{((int)((255*80)/100)) ,((int)((255*90)/100))},
- /*step 2*/{((int)((255*80)/100)) ,((int)((255*100)/100))} };
+ /*step 1*/{((int)((255*75)/100)) ,((int)((255*85)/100))},
+ /*step 2*/{((int)((255*75)/100)) ,((int)((255*100)/100))} };
/*dvfs status*/
mali_dvfs_currentstatus maliDvfsStatus;
@@ -84,7 +84,6 @@ mali_dvfs_table mali_dvfs[MALI_DVFS_STEPS]={
#define ASV_8_LEVEL 8
#define ASV_5_LEVEL 5
-#define ASV_LEVEL_SUPPORT 0
static unsigned int asv_3d_volt_5_table[ASV_5_LEVEL][MALI_DVFS_STEPS] = {
/* L3 (100MHz) L2(160MHz), L1(267MHz) */
@@ -269,16 +268,18 @@ static unsigned int decideNextStatus(unsigned int utilization)
static mali_bool mali_dvfs_table_update(void)
{
unsigned int exynos_result_of_asv_group;
+ unsigned int target_asv;
unsigned int i;
exynos_result_of_asv_group = exynos_result_of_asv & 0xf;
- MALI_PRINT(("exynos_result_of_asv_group = 0x%x\n", exynos_result_of_asv_group));
+ target_asv = exynos_result_of_asv >> 28;
+ MALI_PRINT(("exynos_result_of_asv_group = 0x%x, target_asv = 0x%x\n", exynos_result_of_asv_group, target_asv));
- if (ASV_LEVEL_SUPPORT) { //asv level information will be added.
+ if (target_asv == 0x8) { //SUPPORT_1400MHZ
for (i = 0; i < MALI_DVFS_STEPS; i++) {
mali_dvfs[i].vol = asv_3d_volt_5_table[exynos_result_of_asv_group][i];
MALI_PRINT(("mali_dvfs[%d].vol = %d\n", i, mali_dvfs[i].vol));
}
- } else {
+ } else if (target_asv == 0x4){ //SUPPORT_1200MHZ
for (i = 0; i < MALI_DVFS_STEPS; i++) {
mali_dvfs[i].vol = asv_3d_volt_8_table[exynos_result_of_asv_group][i];
MALI_PRINT(("mali_dvfs[%d].vol = %d\n", i, mali_dvfs[i].vol));