pollCount = Wait ? 100 : 1;
/* At most, try for 1 second. */
- for (retry = 0; retry < 1000; ++retry)
+ //for (retry = 0; retry < 1000; ++retry)
+ for (retry = 0; retry < 100; ++retry)
{
/* If we have to wait, try 100 polls per millisecond. */
for (poll = pollCount; poll > 0; --poll)
},
/* gcvPOWER_SUSPEND */
- { /* ON */ gcvPOWER_FLAG_START |
+ { /* ON */ gcvPOWER_FLAG_INITIALIZE |
+ gcvPOWER_FLAG_START |
gcvPOWER_FLAG_RELEASE |
gcvPOWER_FLAG_DELAY,
/* OFF */ gcvPOWER_FLAG_SAVE |
gcvPOWER_FLAG_OFF |
gcvPOWER_FLAG_CLOCK_OFF,
- /* IDLE */ gcvPOWER_FLAG_START |
+ /* IDLE */ gcvPOWER_FLAG_INITIALIZE |
+ gcvPOWER_FLAG_START |
gcvPOWER_FLAG_DELAY,
/* SUSPEND */ 0,
},
gckGALDEVICE_Destroy(galDevice);
#if ENABLE_GPU_CLOCK_BY_DRIVER && LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,28)
+ printk("gpu: %s clk_disable... ", __func__);
+
clk_gpu = clk_get(NULL, "gpu");
if(!IS_ERR(clk_gpu)) clk_disable(clk_gpu);
clk_hclk_gpu = clk_get(NULL, "hclk_gpu");
if(!IS_ERR(clk_hclk_gpu)) clk_disable(clk_hclk_gpu);
+
+ printk("done!\n");
#endif
}
device = platform_get_drvdata(dev);
- status = gckHARDWARE_SetPowerManagementState(device->kernel->hardware, gcvPOWER_OFF);
+ status = gckHARDWARE_SetPowerManagementState(device->kernel->hardware, gcvPOWER_SUSPEND);
if (gcmIS_ERROR(status))
{
return -1;
}
+ printk("Exit %s \n", __func__);
+
return 0;
}
device = platform_get_drvdata(dev);
- status = gckHARDWARE_SetPowerManagementState(device->kernel->hardware, gcvPOWER_ON);
+ status = gckHARDWARE_SetPowerManagementState(device->kernel->hardware, gcvPOWER_IDLE);
if (gcmIS_ERROR(status))
{
return -1;
}
+ printk("Exit %s \n", __func__);
+
return 0;
}
static void __devinit gpu_shutdown(struct platform_device *dev)
{
- gceSTATUS status;
- gckGALDEVICE device;
-
printk("Enter %s \n", __func__);
-
- device = platform_get_drvdata(dev);
-
- status = gckHARDWARE_SetPowerManagementState(device->kernel->hardware, gcvPOWER_OFF);
-
- if (gcmIS_ERROR(status))
- {
- printk("%s fail!\n", __func__);
- }
+ drv_exit();
+ printk("Exit %s \n", __func__);
}
static struct platform_driver gpu_driver = {
struct clk * clk_aclk_gpu = clk_get(NULL, "aclk_gpu");
struct clk * clk_aclk_ddr_gpu = clk_get(NULL, "aclk_ddr_gpu");
struct clk * clk_hclk_gpu = clk_get(NULL, "hclk_gpu");
+ static int lastpower = 0;
- printk("---------- Enter gckOS_SetGPUPowerOs=0x%p Clock=%d Power=%d \n", (void*)Os, Clock, Power);
+ //printk("---------- gckOS_SetGPUPower Clock=%d Power=%d \n", Clock, Power);
+ mdelay(1);
if(Clock) {
- printk("---------- start gpu clk_enable...\n");
+ printk("gpu: clk_enable... ");
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");
+ printk("done!\n");
} else {
- printk("---------- start gpu clk_disable...\n");
+ printk("gpu: clk_disable... ");
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");
+ printk("done!\n");
}
+ mdelay(1);
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");
-
- /* disable gpu' reset bit */
- cru_set_soft_reset(SOFT_RST_DDR_GPU_PORT, false);
- cru_set_soft_reset(SOFT_RST_GPU, false);
+ if(lastpower != Power) {
+ printk("gpu: power on... ");
+ pmu_set_power_domain(PD_GPU, true);
+ printk("done!\n");
+
+ printk("gpu: reset... ");
+ mdelay(1);
+ cru_set_soft_reset(SOFT_RST_GPU, true);
+ cru_set_soft_reset(SOFT_RST_DDR_GPU_PORT, true);
+ mdelay(2);
+ cru_set_soft_reset(SOFT_RST_DDR_GPU_PORT, false);
+ cru_set_soft_reset(SOFT_RST_GPU, false);
+ mdelay(1);
+ cru_set_soft_reset(SOFT_RST_GPU, true);
+ cru_set_soft_reset(SOFT_RST_DDR_GPU_PORT, true);
+ mdelay(2);
+ cru_set_soft_reset(SOFT_RST_DDR_GPU_PORT, false);
+ cru_set_soft_reset(SOFT_RST_GPU, false);
+ mdelay(1);
+ printk("done!\n");
+ }
} else {
- //printk("---------- start gpu power_domain off...\n");
+ //printk("gpu: power off... ");
//pmu_set_power_domain(PD_GPU, false);
- //printk("---------- end gpu power_domain off!\n");
-
- /* enable gpu' reset bit */
- cru_set_soft_reset(SOFT_RST_GPU, true);
- cru_set_soft_reset(SOFT_RST_DDR_GPU_PORT, true);
+ //printk("done!\n");
}
+ lastpower = Power;
#endif