int gpu_disable_dvs(struct exynos_context *platform)
{
	if (!platform->dvs_status)
		return 0;

	if (!cal_get_fs_abb()) {
		if (set_match_abb(ID_G3D, gpu_dvfs_get_cur_asv_abb())) {
			GPU_LOG(DVFS_ERROR, DUMMY, 0u, 0u, "%s: failed to restore RBB setting\n", __func__);
			return -1;
		}
	}

#if defined(CONFIG_REGULATOR_S2MPS13)
	if (s2m_set_dvs_pin(false) != 0) {
		GPU_LOG(DVFS_ERROR, DUMMY, 0u, 0u, "%s: failed to disable dvs\n", __func__);
		return -1;
	}
#endif /* CONFIG_REGULATOR_S2MPS13 */

	GPU_LOG(DVFS_INFO, DUMMY, 0u, 0u, "dvs is disabled (vol: %d)\n", gpu_get_cur_voltage(platform));
	return 0;
}
示例#2
0
u32 cal_get_abb(u32 id, s32 level)
{
	u32 match_abb;
	u32 asv_grp;
	u32 min_lvl = cal_get_min_lv(id);
	u32 is_fs_abb = cal_get_fs_abb();
	u32 fs_abb;
	const u32 *p_table = NULL;
	u32 idx;

	Assert(level >= 0);

	if (level >= min_lvl)
		level = min_lvl;

	idx = level;

	if (cal_get_table_ver() == 0) {
		p_table = ((id == SYSC_DVFS_BIG) ? abb_table_big_v0[idx] :
				(id == SYSC_DVFS_LIT) ? abb_table_lit_v0[idx] :
				(id == SYSC_DVFS_G3D) ? abb_table_g3d_v0[idx] :
				(id == SYSC_DVFS_MIF) ? abb_table_mif_v0[idx] :
				(id == SYSC_DVFS_INT) ? abb_table_int_v0[idx] :
				NULL);
	} else if (cal_get_table_ver() <= 4) {
		p_table = ((id == SYSC_DVFS_BIG) ? abb_table_big_v1[idx] :
				(id == SYSC_DVFS_LIT) ? abb_table_lit_v1[idx] :
				(id == SYSC_DVFS_G3D) ? abb_table_g3d_v1[idx] :
				(id == SYSC_DVFS_MIF) ? abb_table_mif_v1[idx] :
				(id == SYSC_DVFS_INT) ? abb_table_int_v1[idx] :
				NULL);
	} else if (cal_get_table_ver() == 5) {
		p_table = ((id == SYSC_DVFS_BIG) ? abb_table_big_v2[idx] :
				(id == SYSC_DVFS_LIT) ? abb_table_lit_v2[idx] :
				(id == SYSC_DVFS_G3D) ? abb_table_g3d_v2[idx] :
				(id == SYSC_DVFS_MIF) ? abb_table_mif_v2[idx] :
				(id == SYSC_DVFS_INT) ? abb_table_int_v2[idx] :
				NULL);
	} else if (cal_get_table_ver() <= 8) {
		p_table = ((id == SYSC_DVFS_BIG) ? abb_table_big_v3[idx] :
				(id == SYSC_DVFS_LIT) ? abb_table_lit_v3[idx] :
				(id == SYSC_DVFS_G3D) ? abb_table_g3d_v3[idx] :
				(id == SYSC_DVFS_MIF) ? abb_table_mif_v3[idx] :
				(id == SYSC_DVFS_INT) ? abb_table_int_v3[idx] :
				NULL);
	}

	Assert(p_table != NULL);
	if (p_table == NULL)
		return 0;

	if (is_fs_abb) {
		if (id == SYSC_DVFS_BIG)
			fs_abb = GetBits(CHIPID_ASV_TBL_BASE + 0x0010, 0, 0xF);
		else if (id == SYSC_DVFS_LIT)
			fs_abb = GetBits(CHIPID_ASV_TBL_BASE + 0x0010, 4, 0xF);
		else if (id == SYSC_DVFS_G3D)
			fs_abb = GetBits(CHIPID_ASV_TBL_BASE + 0x0010, 8, 0xF);
		else if (id == SYSC_DVFS_MIF)
			fs_abb = GetBits(CHIPID_ASV_TBL_BASE + 0x0010, 12, 0xF);
		else if (id == SYSC_DVFS_INT)
			fs_abb = GetBits(CHIPID_ASV_TBL_BASE + 0x0010, 16, 0xF);
		else
			fs_abb = ABB_BYPASS;

		match_abb = fs_abb;
	} else {
		asv_grp = cal_get_asv_grp(id, level);
		match_abb = p_table[asv_grp + 1];
	}

	return match_abb;
}