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; }
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; }