* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
*****************************************************************************/
-
-
#include "gc_hal.h"
#include "gc_hal_kernel.h"
#if gcdENABLE_AUTO_FREQ
#include <linux/time.h>
+#include <linux/clk.h>
u32 usec_run = 0;
u32 usec_idle = 0;
gceCHIPPOWERSTATE lastState = gcvPOWER_IDLE;
struct timeval tv_on, tv_idle;
+int nextfreq = 0;
+struct clk *clk_gpu = NULL;
+
void get_run_idle(u32 *run, u32 *idle)
{
if(gcvPOWER_IDLE==lastState)
usec_run = 0;
}
+void set_nextfreq(int freq)
+{
+ nextfreq = freq;
+}
+
inline void cal_run_idle(gceCHIPPOWERSTATE State)
{
+ int freq = 0;
+
if(gcvPOWER_IDLE==lastState && gcvPOWER_ON==State) //gcvPOWER_IDLE->gcvPOWER_ON
{
do_gettimeofday(&tv_on);
{
do_gettimeofday(&tv_idle);
usec_run += (1000000*(tv_idle.tv_sec-tv_on.tv_sec)+(tv_idle.tv_usec-tv_on.tv_usec));
+
+ freq = nextfreq;
+ nextfreq = 0;
+ if(freq) {
+ clk_gpu = clk_get(NULL, "gpu");
+ clk_set_parent(clk_gpu, clk_get(NULL, "general_pll"));
+ clk_set_rate(clk_get(NULL, "codec_pll"), freq*1000000);
+ clk_set_rate(clk_gpu, freq*1000000);
+ clk_set_parent(clk_gpu, clk_get(NULL, "codec_pll"));
+ //printk(" == > gpu change freq to %d \n", freq);
+ }
}
lastState = State;
gckCOMMAND command = gcvNULL;
gckOS os;
gctUINT flag, clock;
+#if 0 // dkm del
gctPOINTER buffer;
gctSIZE_T bytes, requested;
+#endif
gctBOOL acquired = gcvFALSE;
gctBOOL reserved = gcvFALSE;
gctBOOL mutexAcquired = gcvFALSE;
else
{
+#if 0 // dkm del
/* Get the size of the flush command. */
gcmkONERROR(gckHARDWARE_Flush(Hardware,
gcvFLUSH_ALL,
/* Wait to finish all commands. */
gcmkONERROR(gckCOMMAND_Stall(command));
+#endif
}
}
ulong contiguousBase = 0;
module_param(contiguousBase, ulong, 0644);
-long bankSize = 32 << 20;
+long bankSize = 16 << 20;
module_param(bankSize, long, 0644);
int fastClear = -1;
#include <linux/timer.h>
struct timer_list gpu_timer;
extern void get_run_idle(u32 *run, u32 *idle);
+extern void set_nextfreq(int freq);
int power_cnt = 0;
int last_precent = 0;
int last_freq = 0;
{
u32 run, idle;
int precent, freq, diff;
- struct clk * clk_gpu = clk_get(NULL, "gpu");
mod_timer(&gpu_timer, jiffies + HZ/10);
else freq = 456;
if(freq!=last_freq) {
- clk_set_parent(clk_gpu, clk_get(NULL, "general_pll"));
- clk_set_rate(clk_get(NULL, "codec_pll"), freq*1000000);
- clk_set_rate(clk_gpu, freq*1000000);
- clk_set_parent(clk_gpu, clk_get(NULL, "codec_pll"));
+ last_freq = freq;
+ set_nextfreq(freq);
}
-
- last_freq = freq;
- printk("%8d /%8d = %3d %%, freq = %dM (%d)\n", (int)run, (int)(run+idle), precent, freq, power_cnt);
+
+ //printk("%8d /%8d = %3d %%, needfreq = %dM (%d)\n", (int)run, (int)(run+idle), precent, freq, power_cnt);
}
#endif
{
gceSTATUS status;
gckGALDEVICE device;
+
+ printk("Enter %s \n", __func__);
device = platform_get_drvdata(dev);
if (gcmIS_ERROR(status))
{
+ printk("%s fail!\n", __func__);
return -1;
}
{
gceSTATUS status;
gckGALDEVICE device;
+
+ printk("Enter %s \n", __func__);
device = platform_get_drvdata(dev);
if (gcmIS_ERROR(status))
{
+ printk("%s fail!\n", __func__);
return -1;
}
#include <linux/dma-mapping.h>
#endif /* NO_DMA_COHERENT */
+
+#include <linux/delay.h>
#include <mach/pmu.h>
#if !USE_NEW_LINUX_SIGNAL
struct clk * clk_aclk_ddr_gpu = clk_get(NULL, "aclk_ddr_gpu");
struct clk * clk_hclk_gpu = clk_get(NULL, "hclk_gpu");
+ printk("---------- Enter gckOS_SetGPUPowerOs=0x%p Clock=%d Power=%d \n", (void*)Os, Clock, Power);
+
if(Clock) {
+ printk("---------- start gpu clk_enable...\n");
clk_enable(clk_hclk_gpu);
clk_enable(clk_aclk_gpu);
clk_enable(clk_aclk_ddr_gpu);
clk_enable(clk_gpu);
+ printk("---------- end gpu clk_enable!\n");
} else {
+ printk("---------- start gpu clk_disable...\n");
clk_disable(clk_gpu);
clk_disable(clk_aclk_gpu);
clk_disable(clk_aclk_ddr_gpu);
clk_disable(clk_hclk_gpu);
+ printk("---------- end gpu clk_disable!\n");
}
if(Power) {
+ unsigned long flags;
+ printk("---------- start gpu power_domain on...\n");
+ mdelay(10);
+ local_irq_save(flags);
+ mdelay(5);
pmu_set_power_domain(PD_GPU, true);
+ mdelay(10);
+ local_irq_restore(flags);
+ printk("---------- end gpu power_domain on!\n");
} else {
- pmu_set_power_domain(PD_GPU, false);
+ //printk("---------- start gpu power_domain off...\n");
+ //pmu_set_power_domain(PD_GPU, false);
+ //printk("---------- end gpu power_domain off!\n");
}
-
- printk("gckOS_SetGPUPowerOs=0x%p Clock=%d Power=%d \n", (void*)Os, Clock, Power)
+
#endif
gcmkFOOTER_NO();