Skip to content

Commit

Permalink
Added GPU OC (Thanks to ktoonsez)
Browse files Browse the repository at this point in the history
  • Loading branch information
ausdim committed Jul 19, 2013
1 parent dbbf852 commit 01db4f7
Showing 1 changed file with 57 additions and 6 deletions.
63 changes: 57 additions & 6 deletions drivers/gpu/msm/kgsl_pwrctrl.c
Expand Up @@ -33,6 +33,8 @@
#define UPDATE_BUSY_VAL 1000000
#define UPDATE_BUSY 50

unsigned long internal_max = 450000000;

struct clk_pair {
const char *name;
uint map;
Expand Down Expand Up @@ -371,6 +373,9 @@ static int _get_nearest_pwrlevel(struct kgsl_pwrctrl *pwr, unsigned int clock)
return -ERANGE;
}

extern void SetGPUpll_config(u32 loc, unsigned long freq);
extern void SetMAXGPUFreq(unsigned long freq);

static int kgsl_pwrctrl_max_gpuclk_store(struct device *dev,
struct device_attribute *attr,
const char *buf, size_t count)
Expand All @@ -389,6 +394,39 @@ static int kgsl_pwrctrl_max_gpuclk_store(struct device *dev,
if (ret != 1)
return count;

if (val == 450000000)
{
//pwr->pwrlevels[0].gpu_freq = val;
//SetMAXGPUFreq(val);
SetGPUpll_config(0x21, val);
}
else if (val == 504000000)
{
//pwr->pwrlevels[0].gpu_freq = val;
//SetMAXGPUFreq(val);
SetGPUpll_config(0x25, val);
}
else if (val == 545000000)
{
//pwr->pwrlevels[0].gpu_freq = val;
//SetMAXGPUFreq(val);
SetGPUpll_config(0x28, val);
}
else if (val == 600000000)
{
//pwr->pwrlevels[0].gpu_freq = val;
//SetMAXGPUFreq(val);
SetGPUpll_config(0x2C, val);
}
else if (val == 627000000)
{
//pwr->pwrlevels[0].gpu_freq = val;
//SetMAXGPUFreq(val);
SetGPUpll_config(0x2E, val);
}

internal_max = val;

mutex_lock(&device->mutex);
level = _get_nearest_pwrlevel(pwr, val);
if (level < 0)
Expand All @@ -403,7 +441,7 @@ static int kgsl_pwrctrl_max_gpuclk_store(struct device *dev,

if (pwr->thermal_pwrlevel > pwr->active_pwrlevel)
kgsl_pwrctrl_pwrlevel_change(device, pwr->thermal_pwrlevel);

done:
mutex_unlock(&device->mutex);
return count;
Expand All @@ -419,8 +457,8 @@ static int kgsl_pwrctrl_max_gpuclk_show(struct device *dev,
if (device == NULL)
return 0;
pwr = &device->pwrctrl;
return snprintf(buf, PAGE_SIZE, "%d\n",
pwr->pwrlevels[pwr->thermal_pwrlevel].gpu_freq);
return snprintf(buf, PAGE_SIZE, "%ld\n",
internal_max);
}

static int kgsl_pwrctrl_gpuclk_store(struct device *dev,
Expand Down Expand Up @@ -459,8 +497,12 @@ static int kgsl_pwrctrl_gpuclk_show(struct device *dev,
if (device == NULL)
return 0;
pwr = &device->pwrctrl;
return snprintf(buf, PAGE_SIZE, "%d\n",
if (pwr->active_pwrlevel != 0)
return snprintf(buf, PAGE_SIZE, "%d\n",
pwr->pwrlevels[pwr->active_pwrlevel].gpu_freq);
else
return snprintf(buf, PAGE_SIZE, "%ld\n",
internal_max);
}

static int kgsl_pwrctrl_pwrnap_store(struct device *dev,
Expand Down Expand Up @@ -609,8 +651,16 @@ static int kgsl_pwrctrl_gpu_available_frequencies_show(
return 0;
pwr = &device->pwrctrl;
for (index = 0; index < pwr->num_pwrlevels - 1; index++)
num_chars += snprintf(buf + num_chars, PAGE_SIZE, "%d ",
pwr->pwrlevels[index].gpu_freq);
if (index == 0)
{
num_chars += snprintf(buf + num_chars, PAGE_SIZE, "%d ",627000000);
num_chars += snprintf(buf + num_chars, PAGE_SIZE, "%d ",600000000);
num_chars += snprintf(buf + num_chars, PAGE_SIZE, "%d ",545000000);
num_chars += snprintf(buf + num_chars, PAGE_SIZE, "%d ",504000000);
num_chars += snprintf(buf + num_chars, PAGE_SIZE, "%d ",450000000);
}
else
num_chars += snprintf(buf + num_chars, PAGE_SIZE, "%d ",pwr->pwrlevels[index].gpu_freq);
buf[num_chars++] = '\n';
return num_chars;
}
Expand Down Expand Up @@ -861,6 +911,7 @@ int kgsl_pwrctrl_init(struct kgsl_device *device)
struct kgsl_pwrctrl *pwr = &device->pwrctrl;
struct kgsl_device_platform_data *pdata = pdev->dev.platform_data;


/*acquire clocks */
for (i = 0; i < KGSL_MAX_CLKS; i++) {
if (pdata->clk_map & clks[i].map) {
Expand Down

0 comments on commit 01db4f7

Please sign in to comment.