Exemple #1
0
IMG_VOID RgxSunxiInit(IMG_VOID)
{	
	ParseFexPara();
	
	rgx_regulator = regulator_get(NULL, regulator_id);
	if (IS_ERR(rgx_regulator)) 
	{
		PVR_DPF((PVR_DBG_ERROR, "Failed to get rgx regulator!"));
        rgx_regulator = NULL;
		return;
	}
	
	gpu_core_clk = clk_get(NULL, GPUCORE_CLK);
	gpu_mem_clk  = clk_get(NULL, GPUMEM_CLK);
	gpu_axi_clk  = clk_get(NULL, GPUAXI_CLK);
	gpu_pll_clk  = clk_get(NULL, PLL9_CLK);
	gpu_ctrl_clk = clk_get(NULL, GPU_CTRL);
	
	SetGpuVol(min_vf_level_val);
		
	SetClkVal("pll", vf_table[min_vf_level_val][1]);
	SetClkVal("core", vf_table[min_vf_level_val][1]);
	SetClkVal("mem", vf_table[min_vf_level_val][1]);
	SetClkVal("axi", AXI_CLK_FREQ);
	
	RgxResume();

#ifdef CONFIG_CPU_BUDGET_THERMAL
	register_budget_cooling_notifier(&rgx_throttle_notifier);
#endif /* CONFIG_CPU_BUDGET_THERMAL */
}
IMG_VOID RgxSunxiInit(IMG_VOID)
{	
	ParseFexPara();
	
	rgx_regulator = regulator_get(NULL, "axp22_dcdc2");
	if (IS_ERR(rgx_regulator)) {
	    printk(KERN_ERR "Failed to get rgx regulator \n");
        rgx_regulator = NULL;
	}
	
	gpu_core_clk  = clk_get(NULL, GPUCORE_CLK);
	gpu_mem_clk   = clk_get(NULL, GPUMEM_CLK);
	gpu_axi_clk   = clk_get(NULL, GPUAXI_CLK);
	gpu_pll_clk   = clk_get(NULL, PLL9_CLK);
	
	SetGpuVol(min_vf_level_val);
		
	SetClkVal("pll", vf_table[min_vf_level_val][1]);
	SetClkVal("core", vf_table[min_vf_level_val][1]);
	SetClkVal("mem", vf_table[min_vf_level_val][1]);
	SetClkVal("axi", AXI_CLK_FREQ);
		
	RgxResume();

#ifdef CONFIG_CPU_BUDGET_THERMAL
	register_budget_cooling_notifier(&rgx_throttle_notifier);
#endif /* CONFIG_CPU_BUDGET_THERMAL */

	printk(KERN_INFO "Sunxi init successfully\n");
}
static IMG_VOID DvfsChange(int freq /* MHz */)
{
	PVRSRV_ERROR err;

	if(freq == GetCurrentFreq())
	{
		return;
	}

	mutex_lock(&private_data.dvfs_lock);
	err = PVRSRVDevicePreClockSpeedChange(0, IMG_TRUE, NULL);
	if(err == PVRSRV_OK)
	{
		if(GetCurrentFreq() <= vf_data.normal.freq)
		{
			if(freq <= vf_data.normal.freq)
			{
				if(GetCurrentVol() != vf_data.normal.vol)
				{
					SetGpuVol(vf_data.normal.vol);
				}
			}
			else
			{
				if(GetCurrentVol() != vf_data.extreme.vol)
				{
					SetGpuVol(vf_data.extreme.vol);
				}
			}
			SetClkVal(freq);
		}
		else
		{
			if(freq <= vf_data.normal.freq)
			{
				SetClkVal(freq);
				if(GetCurrentVol() != vf_data.normal.vol)
				{
					SetGpuVol(vf_data.normal.vol);
				}
			}
			else
			{
				if(GetCurrentVol() != vf_data.extreme.vol)
				{
					SetGpuVol(vf_data.extreme.vol);
				}
				SetClkVal(freq);
			}
		}

		PVRSRVDevicePostClockSpeedChange(0, IMG_TRUE, NULL);
	}
	mutex_unlock(&private_data.dvfs_lock);
}
static IMG_VOID RgxDvfsChange(int vf_level, int up_flag)
{
	PVRSRVDevicePreClockSpeedChange(0, IMG_TRUE, NULL);
	printk(KERN_INFO "RGX DVFS begin\n");
	if(up_flag == 1)
	{
		SetGpuVol(vf_level);
		SetClkVal("pll", vf_table[vf_level][1]);
	}
	else
	{
		SetClkVal("pll", vf_table[vf_level][1]);
		SetGpuVol(vf_level);
	}
	printk(KERN_INFO "RGX DVFS end\n");
	PVRSRVDevicePostClockSpeedChange(0, IMG_TRUE, NULL);
}
Exemple #5
0
static IMG_VOID RgxDvfsChange(int vf_level, int up_flag)
{
	PVRSRV_ERROR err;
	err = PVRSRVDevicePreClockSpeedChange(0, IMG_TRUE, NULL);
	if(err == PVRSRV_OK)
	{
		if(up_flag == 1)
		{
			SetGpuVol(vf_level);
			SetClkVal("pll", vf_table[vf_level][1]);
		}
		else
		{
			SetClkVal("pll", vf_table[vf_level][1]);
			SetGpuVol(vf_level);
		}
		PVRSRVDevicePostClockSpeedChange(0, IMG_TRUE, NULL);
	}
}
static IMG_VOID SetGpuClkVal(int freq /* MHz */)
{
	PVRSRV_ERROR err;

	if(freq == GetCurrentFreq())
	{
		return;
	}

	mutex_lock(&private_data.dvfs_lock);
	err = PVRSRVDevicePreClockSpeedChange(0, IMG_TRUE, NULL);
	if(err == PVRSRV_OK)
	{
		SetClkVal(freq);
		PVRSRVDevicePostClockSpeedChange(0, IMG_TRUE, NULL);
	}
	mutex_unlock(&private_data.dvfs_lock);
}
/*!
******************************************************************************

 @Function  EnableSystemClocks

 @Description Setup up the clocks for the graphics device to work.

 @Return   PVRSRV_ERROR

******************************************************************************/
PVRSRV_ERROR EnableSystemClocks(SYS_DATA *psSysData)
{
	SYS_SPECIFIC_DATA *psSysSpecData = (SYS_SPECIFIC_DATA *) psSysData->pvSysSpecificData;

	PVR_TRACE(("EnableSystemClocks: Enabling System Clocks"));
	if (!psSysSpecData->bSysClocksOneTimeInit)
	{
		if(NULL != private_data.regulator_id)
		{
			private_data.regulator = regulator_get(NULL,private_data.regulator_id);
			if (IS_ERR(private_data.regulator))
			{
				PVR_DPF((PVR_DBG_ERROR, "Failed to get gpu regulator!"));
			}
		}

		if(regulator_enable(private_data.regulator))
		{
			PVR_DPF((PVR_DBG_ERROR, "Failed to enable gpu external power!"));
		}

#ifdef CONFIG_CPU_BUDGET_THERMAL
        private_data.tempctrl_data.count = sizeof(tf_table)/sizeof(tf_table[0]);
#endif /* CONFIG_CPU_BUDGET_THERMAL */

		ParseFex();

		private_data.max_freq = vf_data.extreme.freq;

		GetGpuClk();

		SetGpuClkParent();

		SetGpuVol(vf_data.normal.vol);

		SetClkVal(vf_data.normal.freq);

		mutex_init(&psSysSpecData->sPowerLock);

		atomic_set(&psSysSpecData->sSGXClocksEnabled, 0);

		psSysSpecData->bSysClocksOneTimeInit = IMG_TRUE;

		mutex_init(&private_data.dvfs_lock);

		sysfs_create_group(&gpsPVRLDMDev->dev.kobj, &gpu_attribute_group);

	#ifdef CONFIG_CPU_BUDGET_THERMAL
        register_budget_cooling_notifier(&gpu_throttle_notifier);
    #endif /* CONFIG_CPU_BUDGET_THERMAL */
	}

	EnableGpuPower();
	
	/* Delay for gpu power stability */
	mdelay(2);

	/* Set gpu power off gating invalid */
	SetBit(private_data.poweroff_gate.bit, 0, private_data.poweroff_gate.addr);

	DeAssertGpuResetSignal();

	return PVRSRV_OK;
}