/* set 3d clocks to max */ static void reset_3d_clocks(void) { if (clk_get_rate(scale3d.clk_3d) != scale3d.max_rate_3d) { if (is_tegra_camera_on()) clk_set_rate(scale3d.clk_3d, CAMERA_3D_CLK); else clk_set_rate(scale3d.clk_3d, scale3d.max_rate_3d); if (tegra_get_chipid() == TEGRA_CHIPID_TEGRA3) { if (is_tegra_camera_on()) clk_set_rate(scale3d.clk_3d2, CAMERA_3D_CLK); else clk_set_rate(scale3d.clk_3d2, scale3d.max_rate_3d); } if (scale3d.p_scale_emc) { if (is_tegra_camera_on()) clk_set_rate(scale3d.clk_3d_emc, CAMERA_3D_EMC_CLK); else clk_set_rate(scale3d.clk_3d_emc, clk_round_rate(scale3d.clk_3d_emc, UINT_MAX)); } } }
static void scale3d_clocks(unsigned long percent) { unsigned long hz, curr; int i = 0; ktime_t t; if (!tegra_is_clk_enabled(scale3d.clk_3d)) return; if (tegra_get_chipid() == TEGRA_CHIPID_TEGRA3) if (!tegra_is_clk_enabled(scale3d.clk_3d2)) return; curr = clk_get_rate(scale3d.clk_3d); hz = percent * (curr / 100); if (!(hz >= scale3d.max_rate_3d && curr == scale3d.max_rate_3d)) { if (tegra_get_chipid() == TEGRA_CHIPID_TEGRA3) clk_set_rate(scale3d.clk_3d2, 0); if (is_tegra_camera_on()) clk_set_rate(scale3d.clk_3d, CAMERA_3D_CLK); else clk_set_rate(scale3d.clk_3d, hz); if (scale3d.p_scale_emc) { long after = (long) clk_get_rate(scale3d.clk_3d); hz = after * scale3d.emc_slope + scale3d.emc_offset; if (scale3d.p_emc_dip) hz -= (scale3d.emc_dip_slope * POW2(after / 1000 - scale3d.emc_xmid) + scale3d.emc_dip_offset); if (is_tegra_camera_on()) clk_set_rate(scale3d.clk_3d_emc, CAMERA_3D_EMC_CLK); else clk_set_rate(scale3d.clk_3d_emc, hz); } } t = ktime_get(); hz = clk_get_rate(scale3d.clk_3d); if (hz != curr) { gpu_loading[curr_idx].total_time += ktime_us_delta(t, gpu_loading[curr_idx].last_start); for (i=0 ; i<FREQ_LEVEL ; i++) { if (gpu_loading[i].freq == hz) { curr_idx = i; break; } } gpu_loading[curr_idx].last_start = t; } }
static void do_scale(int diff) { unsigned long hz, curr; if (!tegra_is_clk_enabled(scale3d.clk_3d)) return; if (tegra_get_chipid() == TEGRA_CHIPID_TEGRA3) if (!tegra_is_clk_enabled(scale3d.clk_3d2)) return; curr = clk_get_rate(scale3d.clk_3d); hz = curr + diff; if (hz < scale3d.min_rate_3d) hz = scale3d.min_rate_3d; if (hz > scale3d.max_rate_3d) hz = scale3d.max_rate_3d; if (hz == curr) return; if (tegra_get_chipid() == TEGRA_CHIPID_TEGRA3) clk_set_rate(scale3d.clk_3d2, 0); if (is_tegra_camera_on()) clk_set_rate(scale3d.clk_3d, CAMERA_3D_CLK); else clk_set_rate(scale3d.clk_3d, hz); if (scale3d.p_scale_emc) { long after = (long) clk_get_rate(scale3d.clk_3d); hz = after * scale3d.emc_slope + scale3d.emc_offset; if (scale3d.p_emc_dip) hz -= (scale3d.emc_dip_slope * POW2(after / 1000 - scale3d.emc_xmid) + scale3d.emc_dip_offset); if (is_tegra_camera_on()) clk_set_rate(scale3d.clk_3d_emc, CAMERA_3D_EMC_CLK); else clk_set_rate(scale3d.clk_3d_emc, hz); } }
/* set 3d clocks to max */ static void reset_3d_clocks(void) { unsigned long curr = clk_get_rate(scale3d.clk_3d); unsigned long hz = 0; int i = 0; ktime_t t; if (clk_get_rate(scale3d.clk_3d) != scale3d.max_rate_3d) { if (is_tegra_camera_on()) clk_set_rate(scale3d.clk_3d, CAMERA_3D_CLK); else clk_set_rate(scale3d.clk_3d, scale3d.max_rate_3d); if (tegra_get_chipid() == TEGRA_CHIPID_TEGRA3) { if (is_tegra_camera_on()) clk_set_rate(scale3d.clk_3d2, CAMERA_3D_CLK); else clk_set_rate(scale3d.clk_3d2, scale3d.max_rate_3d); } if (scale3d.p_scale_emc) { if(is_tegra_camera_on()) clk_set_rate(scale3d.clk_3d_emc, CAMERA_3D_EMC_CLK); else clk_set_rate(scale3d.clk_3d_emc, clk_round_rate(scale3d.clk_3d_emc, UINT_MAX)); } } t = ktime_get(); hz = clk_get_rate(scale3d.clk_3d); if (hz != curr) { gpu_loading[curr_idx].total_time += ktime_us_delta(t, gpu_loading[curr_idx].last_start); for (i=0 ; i<FREQ_LEVEL ; i++) { if (gpu_loading[i].freq == hz) { curr_idx = i; break; } } gpu_loading[curr_idx].last_start = t; } }