Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/amd/powerplay: add some hwmgr functions for sysfs interface on Carrizo

These add the interfaces for manual clock control.

Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Eric Huang <JinHuiEric.Huang@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>

authored by

Eric Huang and committed by
Alex Deucher
d7341ef6 b9c1a77e

+51
+51
drivers/gpu/drm/amd/powerplay/hwmgr/cz_hwmgr.c
··· 1700 1700 return -EINVAL; 1701 1701 } 1702 1702 1703 + static int cz_force_clock_level(struct pp_hwmgr *hwmgr, 1704 + enum pp_clock_type type, int level) 1705 + { 1706 + if (hwmgr->dpm_level != AMD_DPM_FORCED_LEVEL_MANUAL) 1707 + return -EINVAL; 1708 + 1709 + switch (type) { 1710 + case PP_SCLK: 1711 + smum_send_msg_to_smc_with_parameter(hwmgr->smumgr, 1712 + PPSMC_MSG_SetSclkSoftMin, 1713 + (1 << level)); 1714 + smum_send_msg_to_smc_with_parameter(hwmgr->smumgr, 1715 + PPSMC_MSG_SetSclkSoftMax, 1716 + (1 << level)); 1717 + break; 1718 + default: 1719 + break; 1720 + } 1721 + 1722 + return 0; 1723 + } 1724 + 1725 + static int cz_print_clock_levels(struct pp_hwmgr *hwmgr, 1726 + enum pp_clock_type type, char *buf) 1727 + { 1728 + struct phm_clock_voltage_dependency_table *sclk_table = 1729 + hwmgr->dyn_state.vddc_dependency_on_sclk; 1730 + int i, now, size = 0; 1731 + 1732 + switch (type) { 1733 + case PP_SCLK: 1734 + now = PHM_GET_FIELD(cgs_read_ind_register(hwmgr->device, 1735 + CGS_IND_REG__SMC, 1736 + ixTARGET_AND_CURRENT_PROFILE_INDEX), 1737 + TARGET_AND_CURRENT_PROFILE_INDEX, 1738 + CURR_SCLK_INDEX); 1739 + 1740 + for (i = 0; i < sclk_table->count; i++) 1741 + size += sprintf(buf + size, "%d: %uMhz %s\n", 1742 + i, sclk_table->entries[i].clk / 100, 1743 + (i == now) ? "*" : ""); 1744 + break; 1745 + default: 1746 + break; 1747 + } 1748 + return size; 1749 + } 1750 + 1703 1751 static const struct pp_hwmgr_func cz_hwmgr_funcs = { 1704 1752 .backend_init = cz_hwmgr_backend_init, 1705 1753 .backend_fini = cz_hwmgr_backend_fini, ··· 1767 1719 .set_cpu_power_state = cz_set_cpu_power_state, 1768 1720 .store_cc6_data = cz_store_cc6_data, 1769 1721 .get_dal_power_level= cz_get_dal_power_level, 1722 + .force_clock_level = cz_force_clock_level, 1723 + .print_clock_levels = cz_print_clock_levels, 1724 + 1770 1725 }; 1771 1726 1772 1727 int cz_hwmgr_init(struct pp_hwmgr *hwmgr)