#include "syslocal.h"
#include "env_data.h"
#include "ocpdefs.h"
+#include "pvr_bridge_km.h"
#define HZ_TO_MHZ(m) ((m) / 1000000)
if (atomic_read(&gpsSysSpecificData->sSGXClocksEnabled) != 0 &&
gpsSysSpecificData->bSGXInitComplete) {
-#if defined(DEBUG)
+#if defined(CONFIG_PVR_DEBUG_EXTRA)
unsigned long rate;
rate = clk_get_rate(gpsSysSpecificData->psSGX_FCK);
cnd->rate);
if (CLK_PRE_RATE_CHANGE == event) {
- PVRSRVDvfsLock();
+ pvr_dev_lock();
PVR_TRACE("vdd2_pre_post_func: CLK_PRE_RATE_CHANGE event");
vdd2_pre_func(n, event, ptr);
} else if (CLK_POST_RATE_CHANGE == event) {
PVR_TRACE("vdd2_pre_post_func: CLK_POST_RATE_CHANGE event");
vdd2_post_func(n, event, ptr);
- PVRSRVDvfsUnlock();
+ pvr_dev_unlock();
} else if (CLK_ABORT_RATE_CHANGE == event) {
PVR_TRACE("vdd2_pre_post_func: CLK_ABORT_RATE_CHANGE event");
- PVRSRVDvfsUnlock();
+ pvr_dev_unlock();
} else {
printk(KERN_ERR "vdd2_pre_post_func: unexpected event (%lu)\n",
event);
struct ENV_DATA *psEnvData =
container_of(d_work, struct ENV_DATA, sPerfWork);
+ pvr_lock();
+
+ if (pvr_is_disabled()) {
+ pvr_unlock();
+ return;
+ }
+
load = sgx_current_load();
+
+ pvr_unlock();
+
if (load) {
vdd1 = 500000000;
vdd2 = 400000;
struct SYS_SPECIFIC_DATA *psSysSpecData = psSysData->pvSysSpecificData;
struct clk *psCLK;
struct clk *core_ck = NULL;
+ unsigned long rate;
+ int r;
psCLK = clk_get(NULL, "sgx_fck");
if (IS_ERR(psCLK))
}
clk_put(core_ck);
+ /* +1 to account for rounding errors */
+ rate = clk_round_rate(psSysSpecData->psSGX_FCK, sgx_get_max_freq() + 1);
+ r = clk_set_rate(psSysSpecData->psSGX_FCK, rate);
+ if (r < 0) {
+ unsigned long current_rate;
+
+ current_rate = clk_get_rate(psSysSpecData->psSGX_FCK);
+ pr_warning("error %d when setting SGX fclk to %lu Hz, "
+ "falling back to %lu Hz\n", r, rate, current_rate);
+ } else {
+ pr_info("SGX clock rate %lu MHz\n", rate / 1000000);
+ };
+
RegisterConstraintNotifications(psSysSpecData);
return PVRSRV_OK;
}
}
-#if defined(DEBUG) || defined(TIMING)
+#if defined(CONFIG_PVR_DEBUG_EXTRA) || defined(TIMING)
static inline u32 gpt_read_reg(struct SYS_DATA *psSysData, u32 reg)
{
struct SYS_SPECIFIC_DATA *psSysSpecData = psSysData->pvSysSpecificData;