diff options
author | Evan Quan <evan.quan@amd.com> | 2018-04-10 00:32:16 -0400 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2018-05-15 14:43:04 -0400 |
commit | b8a5559112714bb328330dbf2a4a1912e8c7a462 (patch) | |
tree | 7eb434043df825267477d2824a8a6ab0768a5890 | |
parent | e6636ae1b7aab30a1fb4ea7805b5b6b2494eca71 (diff) |
drm/amd/pp: use soc15 common macros instead of vega10 specific
pp_soc15.h is vega10 specific. Update powerplay code to use soc15 common
macros defined in soc15_common.h.
Signed-off-by: Evan Quan <evan.quan@amd.com>
Reviewed-by: Rex Zhu <Rex.Zhu@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
-rw-r--r-- | drivers/gpu/drm/amd/powerplay/hwmgr/smu10_hwmgr.c | 7 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/powerplay/hwmgr/vega10_hwmgr.c | 16 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/powerplay/hwmgr/vega10_powertune.c | 50 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/powerplay/hwmgr/vega10_thermal.c | 107 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/powerplay/hwmgr/vega12_hwmgr.c | 1 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/powerplay/hwmgr/vega12_thermal.c | 37 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/powerplay/inc/pp_soc15.h | 52 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/powerplay/smumgr/smu10_smumgr.c | 37 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/powerplay/smumgr/vega10_smumgr.c | 50 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/powerplay/smumgr/vega12_smumgr.c | 56 |
10 files changed, 133 insertions, 280 deletions
diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/smu10_hwmgr.c b/drivers/gpu/drm/amd/powerplay/hwmgr/smu10_hwmgr.c index 055358b95fdf..6ba3b1fa57aa 100644 --- a/drivers/gpu/drm/amd/powerplay/hwmgr/smu10_hwmgr.c +++ b/drivers/gpu/drm/amd/powerplay/hwmgr/smu10_hwmgr.c | |||
@@ -34,7 +34,7 @@ | |||
34 | #include "rv_ppsmc.h" | 34 | #include "rv_ppsmc.h" |
35 | #include "smu10_hwmgr.h" | 35 | #include "smu10_hwmgr.h" |
36 | #include "power_state.h" | 36 | #include "power_state.h" |
37 | #include "pp_soc15.h" | 37 | #include "soc15_common.h" |
38 | 38 | ||
39 | #define SMU10_MAX_DEEPSLEEP_DIVIDER_ID 5 | 39 | #define SMU10_MAX_DEEPSLEEP_DIVIDER_ID 5 |
40 | #define SMU10_MINIMUM_ENGINE_CLOCK 800 /* 8Mhz, the low boundary of engine clock allowed on this chip */ | 40 | #define SMU10_MINIMUM_ENGINE_CLOCK 800 /* 8Mhz, the low boundary of engine clock allowed on this chip */ |
@@ -947,9 +947,8 @@ static int smu10_get_max_high_clocks(struct pp_hwmgr *hwmgr, struct amd_pp_simpl | |||
947 | 947 | ||
948 | static int smu10_thermal_get_temperature(struct pp_hwmgr *hwmgr) | 948 | static int smu10_thermal_get_temperature(struct pp_hwmgr *hwmgr) |
949 | { | 949 | { |
950 | uint32_t reg_offset = soc15_get_register_offset(THM_HWID, 0, | 950 | struct amdgpu_device *adev = hwmgr->adev; |
951 | mmTHM_TCON_CUR_TMP_BASE_IDX, mmTHM_TCON_CUR_TMP); | 951 | uint32_t reg_value = RREG32_SOC15(THM, 0, mmTHM_TCON_CUR_TMP); |
952 | uint32_t reg_value = cgs_read_register(hwmgr->device, reg_offset); | ||
953 | int cur_temp = | 952 | int cur_temp = |
954 | (reg_value & THM_TCON_CUR_TMP__CUR_TEMP_MASK) >> THM_TCON_CUR_TMP__CUR_TEMP__SHIFT; | 953 | (reg_value & THM_TCON_CUR_TMP__CUR_TEMP_MASK) >> THM_TCON_CUR_TMP__CUR_TEMP__SHIFT; |
955 | 954 | ||
diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_hwmgr.c b/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_hwmgr.c index ba299424f8f6..f6427c88f6a7 100644 --- a/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_hwmgr.c +++ b/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_hwmgr.c | |||
@@ -36,7 +36,7 @@ | |||
36 | #include "smu9.h" | 36 | #include "smu9.h" |
37 | #include "smu9_driver_if.h" | 37 | #include "smu9_driver_if.h" |
38 | #include "vega10_inc.h" | 38 | #include "vega10_inc.h" |
39 | #include "pp_soc15.h" | 39 | #include "soc15_common.h" |
40 | #include "pppcielanes.h" | 40 | #include "pppcielanes.h" |
41 | #include "vega10_hwmgr.h" | 41 | #include "vega10_hwmgr.h" |
42 | #include "vega10_processpptables.h" | 42 | #include "vega10_processpptables.h" |
@@ -754,7 +754,6 @@ static int vega10_hwmgr_backend_init(struct pp_hwmgr *hwmgr) | |||
754 | uint32_t config_telemetry = 0; | 754 | uint32_t config_telemetry = 0; |
755 | struct pp_atomfwctrl_voltage_table vol_table; | 755 | struct pp_atomfwctrl_voltage_table vol_table; |
756 | struct amdgpu_device *adev = hwmgr->adev; | 756 | struct amdgpu_device *adev = hwmgr->adev; |
757 | uint32_t reg; | ||
758 | 757 | ||
759 | data = kzalloc(sizeof(struct vega10_hwmgr), GFP_KERNEL); | 758 | data = kzalloc(sizeof(struct vega10_hwmgr), GFP_KERNEL); |
760 | if (data == NULL) | 759 | if (data == NULL) |
@@ -860,10 +859,7 @@ static int vega10_hwmgr_backend_init(struct pp_hwmgr *hwmgr) | |||
860 | advanceFanControlParameters.usFanPWMMinLimit * | 859 | advanceFanControlParameters.usFanPWMMinLimit * |
861 | hwmgr->thermal_controller.fanInfo.ulMaxRPM / 100; | 860 | hwmgr->thermal_controller.fanInfo.ulMaxRPM / 100; |
862 | 861 | ||
863 | reg = soc15_get_register_offset(DF_HWID, 0, | 862 | data->mem_channels = (RREG32_SOC15(DF, 0, mmDF_CS_AON0_DramBaseAddress0) & |
864 | mmDF_CS_AON0_DramBaseAddress0_BASE_IDX, | ||
865 | mmDF_CS_AON0_DramBaseAddress0); | ||
866 | data->mem_channels = (cgs_read_register(hwmgr->device, reg) & | ||
867 | DF_CS_AON0_DramBaseAddress0__IntLvNumChan_MASK) >> | 863 | DF_CS_AON0_DramBaseAddress0__IntLvNumChan_MASK) >> |
868 | DF_CS_AON0_DramBaseAddress0__IntLvNumChan__SHIFT; | 864 | DF_CS_AON0_DramBaseAddress0__IntLvNumChan__SHIFT; |
869 | PP_ASSERT_WITH_CODE(data->mem_channels < ARRAY_SIZE(channel_number), | 865 | PP_ASSERT_WITH_CODE(data->mem_channels < ARRAY_SIZE(channel_number), |
@@ -3808,11 +3804,12 @@ static int vega10_get_gpu_power(struct pp_hwmgr *hwmgr, | |||
3808 | static int vega10_read_sensor(struct pp_hwmgr *hwmgr, int idx, | 3804 | static int vega10_read_sensor(struct pp_hwmgr *hwmgr, int idx, |
3809 | void *value, int *size) | 3805 | void *value, int *size) |
3810 | { | 3806 | { |
3807 | struct amdgpu_device *adev = hwmgr->adev; | ||
3811 | uint32_t sclk_idx, mclk_idx, activity_percent = 0; | 3808 | uint32_t sclk_idx, mclk_idx, activity_percent = 0; |
3812 | struct vega10_hwmgr *data = hwmgr->backend; | 3809 | struct vega10_hwmgr *data = hwmgr->backend; |
3813 | struct vega10_dpm_table *dpm_table = &data->dpm_table; | 3810 | struct vega10_dpm_table *dpm_table = &data->dpm_table; |
3814 | int ret = 0; | 3811 | int ret = 0; |
3815 | uint32_t reg, val_vid; | 3812 | uint32_t val_vid; |
3816 | 3813 | ||
3817 | switch (idx) { | 3814 | switch (idx) { |
3818 | case AMDGPU_PP_SENSOR_GFX_SCLK: | 3815 | case AMDGPU_PP_SENSOR_GFX_SCLK: |
@@ -3862,10 +3859,7 @@ static int vega10_read_sensor(struct pp_hwmgr *hwmgr, int idx, | |||
3862 | } | 3859 | } |
3863 | break; | 3860 | break; |
3864 | case AMDGPU_PP_SENSOR_VDDGFX: | 3861 | case AMDGPU_PP_SENSOR_VDDGFX: |
3865 | reg = soc15_get_register_offset(SMUIO_HWID, 0, | 3862 | val_vid = (RREG32_SOC15(SMUIO, 0, mmSMUSVI0_PLANE0_CURRENTVID) & |
3866 | mmSMUSVI0_PLANE0_CURRENTVID_BASE_IDX, | ||
3867 | mmSMUSVI0_PLANE0_CURRENTVID); | ||
3868 | val_vid = (cgs_read_register(hwmgr->device, reg) & | ||
3869 | SMUSVI0_PLANE0_CURRENTVID__CURRENT_SVI0_PLANE0_VID_MASK) >> | 3863 | SMUSVI0_PLANE0_CURRENTVID__CURRENT_SVI0_PLANE0_VID_MASK) >> |
3870 | SMUSVI0_PLANE0_CURRENTVID__CURRENT_SVI0_PLANE0_VID__SHIFT; | 3864 | SMUSVI0_PLANE0_CURRENTVID__CURRENT_SVI0_PLANE0_VID__SHIFT; |
3871 | *((uint32_t *)value) = (uint32_t)convert_to_vddc((uint8_t)val_vid); | 3865 | *((uint32_t *)value) = (uint32_t)convert_to_vddc((uint8_t)val_vid); |
diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_powertune.c b/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_powertune.c index 203a6918395b..a9efd8554fbc 100644 --- a/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_powertune.c +++ b/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_powertune.c | |||
@@ -27,7 +27,7 @@ | |||
27 | #include "vega10_ppsmc.h" | 27 | #include "vega10_ppsmc.h" |
28 | #include "vega10_inc.h" | 28 | #include "vega10_inc.h" |
29 | #include "pp_debug.h" | 29 | #include "pp_debug.h" |
30 | #include "pp_soc15.h" | 30 | #include "soc15_common.h" |
31 | 31 | ||
32 | static const struct vega10_didt_config_reg SEDiDtTuningCtrlConfig_Vega10[] = | 32 | static const struct vega10_didt_config_reg SEDiDtTuningCtrlConfig_Vega10[] = |
33 | { | 33 | { |
@@ -888,36 +888,36 @@ static void vega10_didt_set_mask(struct pp_hwmgr *hwmgr, const bool enable) | |||
888 | if (PP_CAP(PHM_PlatformCaps_DiDtEDCEnable)) { | 888 | if (PP_CAP(PHM_PlatformCaps_DiDtEDCEnable)) { |
889 | if (PP_CAP(PHM_PlatformCaps_SQRamping)) { | 889 | if (PP_CAP(PHM_PlatformCaps_SQRamping)) { |
890 | data = cgs_read_ind_register(hwmgr->device, CGS_IND_REG__DIDT, ixDIDT_SQ_EDC_CTRL); | 890 | data = cgs_read_ind_register(hwmgr->device, CGS_IND_REG__DIDT, ixDIDT_SQ_EDC_CTRL); |
891 | data = CGS_REG_SET_FIELD(data, DIDT_SQ_EDC_CTRL, EDC_EN, en); | 891 | data = REG_SET_FIELD(data, DIDT_SQ_EDC_CTRL, EDC_EN, en); |
892 | data = CGS_REG_SET_FIELD(data, DIDT_SQ_EDC_CTRL, EDC_SW_RST, ~en); | 892 | data = REG_SET_FIELD(data, DIDT_SQ_EDC_CTRL, EDC_SW_RST, ~en); |
893 | cgs_write_ind_register(hwmgr->device, CGS_IND_REG__DIDT, ixDIDT_SQ_EDC_CTRL, data); | 893 | cgs_write_ind_register(hwmgr->device, CGS_IND_REG__DIDT, ixDIDT_SQ_EDC_CTRL, data); |
894 | } | 894 | } |
895 | 895 | ||
896 | if (PP_CAP(PHM_PlatformCaps_DBRamping)) { | 896 | if (PP_CAP(PHM_PlatformCaps_DBRamping)) { |
897 | data = cgs_read_ind_register(hwmgr->device, CGS_IND_REG__DIDT, ixDIDT_DB_EDC_CTRL); | 897 | data = cgs_read_ind_register(hwmgr->device, CGS_IND_REG__DIDT, ixDIDT_DB_EDC_CTRL); |
898 | data = CGS_REG_SET_FIELD(data, DIDT_DB_EDC_CTRL, EDC_EN, en); | 898 | data = REG_SET_FIELD(data, DIDT_DB_EDC_CTRL, EDC_EN, en); |
899 | data = CGS_REG_SET_FIELD(data, DIDT_DB_EDC_CTRL, EDC_SW_RST, ~en); | 899 | data = REG_SET_FIELD(data, DIDT_DB_EDC_CTRL, EDC_SW_RST, ~en); |
900 | cgs_write_ind_register(hwmgr->device, CGS_IND_REG__DIDT, ixDIDT_DB_EDC_CTRL, data); | 900 | cgs_write_ind_register(hwmgr->device, CGS_IND_REG__DIDT, ixDIDT_DB_EDC_CTRL, data); |
901 | } | 901 | } |
902 | 902 | ||
903 | if (PP_CAP(PHM_PlatformCaps_TDRamping)) { | 903 | if (PP_CAP(PHM_PlatformCaps_TDRamping)) { |
904 | data = cgs_read_ind_register(hwmgr->device, CGS_IND_REG__DIDT, ixDIDT_TD_EDC_CTRL); | 904 | data = cgs_read_ind_register(hwmgr->device, CGS_IND_REG__DIDT, ixDIDT_TD_EDC_CTRL); |
905 | data = CGS_REG_SET_FIELD(data, DIDT_TD_EDC_CTRL, EDC_EN, en); | 905 | data = REG_SET_FIELD(data, DIDT_TD_EDC_CTRL, EDC_EN, en); |
906 | data = CGS_REG_SET_FIELD(data, DIDT_TD_EDC_CTRL, EDC_SW_RST, ~en); | 906 | data = REG_SET_FIELD(data, DIDT_TD_EDC_CTRL, EDC_SW_RST, ~en); |
907 | cgs_write_ind_register(hwmgr->device, CGS_IND_REG__DIDT, ixDIDT_TD_EDC_CTRL, data); | 907 | cgs_write_ind_register(hwmgr->device, CGS_IND_REG__DIDT, ixDIDT_TD_EDC_CTRL, data); |
908 | } | 908 | } |
909 | 909 | ||
910 | if (PP_CAP(PHM_PlatformCaps_TCPRamping)) { | 910 | if (PP_CAP(PHM_PlatformCaps_TCPRamping)) { |
911 | data = cgs_read_ind_register(hwmgr->device, CGS_IND_REG__DIDT, ixDIDT_TCP_EDC_CTRL); | 911 | data = cgs_read_ind_register(hwmgr->device, CGS_IND_REG__DIDT, ixDIDT_TCP_EDC_CTRL); |
912 | data = CGS_REG_SET_FIELD(data, DIDT_TCP_EDC_CTRL, EDC_EN, en); | 912 | data = REG_SET_FIELD(data, DIDT_TCP_EDC_CTRL, EDC_EN, en); |
913 | data = CGS_REG_SET_FIELD(data, DIDT_TCP_EDC_CTRL, EDC_SW_RST, ~en); | 913 | data = REG_SET_FIELD(data, DIDT_TCP_EDC_CTRL, EDC_SW_RST, ~en); |
914 | cgs_write_ind_register(hwmgr->device, CGS_IND_REG__DIDT, ixDIDT_TCP_EDC_CTRL, data); | 914 | cgs_write_ind_register(hwmgr->device, CGS_IND_REG__DIDT, ixDIDT_TCP_EDC_CTRL, data); |
915 | } | 915 | } |
916 | 916 | ||
917 | if (PP_CAP(PHM_PlatformCaps_DBRRamping)) { | 917 | if (PP_CAP(PHM_PlatformCaps_DBRRamping)) { |
918 | data = cgs_read_ind_register(hwmgr->device, CGS_IND_REG__DIDT, ixDIDT_DBR_EDC_CTRL); | 918 | data = cgs_read_ind_register(hwmgr->device, CGS_IND_REG__DIDT, ixDIDT_DBR_EDC_CTRL); |
919 | data = CGS_REG_SET_FIELD(data, DIDT_DBR_EDC_CTRL, EDC_EN, en); | 919 | data = REG_SET_FIELD(data, DIDT_DBR_EDC_CTRL, EDC_EN, en); |
920 | data = CGS_REG_SET_FIELD(data, DIDT_DBR_EDC_CTRL, EDC_SW_RST, ~en); | 920 | data = REG_SET_FIELD(data, DIDT_DBR_EDC_CTRL, EDC_SW_RST, ~en); |
921 | cgs_write_ind_register(hwmgr->device, CGS_IND_REG__DIDT, ixDIDT_DBR_EDC_CTRL, data); | 921 | cgs_write_ind_register(hwmgr->device, CGS_IND_REG__DIDT, ixDIDT_DBR_EDC_CTRL, data); |
922 | } | 922 | } |
923 | } | 923 | } |
@@ -933,17 +933,15 @@ static int vega10_enable_cac_driving_se_didt_config(struct pp_hwmgr *hwmgr) | |||
933 | struct amdgpu_device *adev = hwmgr->adev; | 933 | struct amdgpu_device *adev = hwmgr->adev; |
934 | int result; | 934 | int result; |
935 | uint32_t num_se = 0, count, data; | 935 | uint32_t num_se = 0, count, data; |
936 | uint32_t reg; | ||
937 | 936 | ||
938 | num_se = adev->gfx.config.max_shader_engines; | 937 | num_se = adev->gfx.config.max_shader_engines; |
939 | 938 | ||
940 | adev->gfx.rlc.funcs->enter_safe_mode(adev); | 939 | adev->gfx.rlc.funcs->enter_safe_mode(adev); |
941 | 940 | ||
942 | mutex_lock(&adev->grbm_idx_mutex); | 941 | mutex_lock(&adev->grbm_idx_mutex); |
943 | reg = soc15_get_register_offset(GC_HWID, 0, mmGRBM_GFX_INDEX_BASE_IDX, mmGRBM_GFX_INDEX); | ||
944 | for (count = 0; count < num_se; count++) { | 942 | for (count = 0; count < num_se; count++) { |
945 | data = GRBM_GFX_INDEX__INSTANCE_BROADCAST_WRITES_MASK | GRBM_GFX_INDEX__SH_BROADCAST_WRITES_MASK | ( count << GRBM_GFX_INDEX__SE_INDEX__SHIFT); | 943 | data = GRBM_GFX_INDEX__INSTANCE_BROADCAST_WRITES_MASK | GRBM_GFX_INDEX__SH_BROADCAST_WRITES_MASK | ( count << GRBM_GFX_INDEX__SE_INDEX__SHIFT); |
946 | cgs_write_register(hwmgr->device, reg, data); | 944 | WREG32_SOC15(GC, 0, mmGRBM_GFX_INDEX, data); |
947 | 945 | ||
948 | result = vega10_program_didt_config_registers(hwmgr, SEDiDtStallCtrlConfig_vega10, VEGA10_CONFIGREG_DIDT); | 946 | result = vega10_program_didt_config_registers(hwmgr, SEDiDtStallCtrlConfig_vega10, VEGA10_CONFIGREG_DIDT); |
949 | result |= vega10_program_didt_config_registers(hwmgr, SEDiDtStallPatternConfig_vega10, VEGA10_CONFIGREG_DIDT); | 947 | result |= vega10_program_didt_config_registers(hwmgr, SEDiDtStallPatternConfig_vega10, VEGA10_CONFIGREG_DIDT); |
@@ -958,7 +956,7 @@ static int vega10_enable_cac_driving_se_didt_config(struct pp_hwmgr *hwmgr) | |||
958 | if (0 != result) | 956 | if (0 != result) |
959 | break; | 957 | break; |
960 | } | 958 | } |
961 | cgs_write_register(hwmgr->device, reg, 0xE0000000); | 959 | WREG32_SOC15(GC, 0, mmGRBM_GFX_INDEX, 0xE0000000); |
962 | mutex_unlock(&adev->grbm_idx_mutex); | 960 | mutex_unlock(&adev->grbm_idx_mutex); |
963 | 961 | ||
964 | vega10_didt_set_mask(hwmgr, true); | 962 | vega10_didt_set_mask(hwmgr, true); |
@@ -986,17 +984,15 @@ static int vega10_enable_psm_gc_didt_config(struct pp_hwmgr *hwmgr) | |||
986 | struct amdgpu_device *adev = hwmgr->adev; | 984 | struct amdgpu_device *adev = hwmgr->adev; |
987 | int result; | 985 | int result; |
988 | uint32_t num_se = 0, count, data; | 986 | uint32_t num_se = 0, count, data; |
989 | uint32_t reg; | ||
990 | 987 | ||
991 | num_se = adev->gfx.config.max_shader_engines; | 988 | num_se = adev->gfx.config.max_shader_engines; |
992 | 989 | ||
993 | adev->gfx.rlc.funcs->enter_safe_mode(adev); | 990 | adev->gfx.rlc.funcs->enter_safe_mode(adev); |
994 | 991 | ||
995 | mutex_lock(&adev->grbm_idx_mutex); | 992 | mutex_lock(&adev->grbm_idx_mutex); |
996 | reg = soc15_get_register_offset(GC_HWID, 0, mmGRBM_GFX_INDEX_BASE_IDX, mmGRBM_GFX_INDEX); | ||
997 | for (count = 0; count < num_se; count++) { | 993 | for (count = 0; count < num_se; count++) { |
998 | data = GRBM_GFX_INDEX__INSTANCE_BROADCAST_WRITES_MASK | GRBM_GFX_INDEX__SH_BROADCAST_WRITES_MASK | ( count << GRBM_GFX_INDEX__SE_INDEX__SHIFT); | 994 | data = GRBM_GFX_INDEX__INSTANCE_BROADCAST_WRITES_MASK | GRBM_GFX_INDEX__SH_BROADCAST_WRITES_MASK | ( count << GRBM_GFX_INDEX__SE_INDEX__SHIFT); |
999 | cgs_write_register(hwmgr->device, reg, data); | 995 | WREG32_SOC15(GC, 0, mmGRBM_GFX_INDEX, data); |
1000 | 996 | ||
1001 | result = vega10_program_didt_config_registers(hwmgr, SEDiDtStallCtrlConfig_vega10, VEGA10_CONFIGREG_DIDT); | 997 | result = vega10_program_didt_config_registers(hwmgr, SEDiDtStallCtrlConfig_vega10, VEGA10_CONFIGREG_DIDT); |
1002 | result |= vega10_program_didt_config_registers(hwmgr, SEDiDtStallPatternConfig_vega10, VEGA10_CONFIGREG_DIDT); | 998 | result |= vega10_program_didt_config_registers(hwmgr, SEDiDtStallPatternConfig_vega10, VEGA10_CONFIGREG_DIDT); |
@@ -1005,7 +1001,7 @@ static int vega10_enable_psm_gc_didt_config(struct pp_hwmgr *hwmgr) | |||
1005 | if (0 != result) | 1001 | if (0 != result) |
1006 | break; | 1002 | break; |
1007 | } | 1003 | } |
1008 | cgs_write_register(hwmgr->device, reg, 0xE0000000); | 1004 | WREG32_SOC15(GC, 0, mmGRBM_GFX_INDEX, 0xE0000000); |
1009 | mutex_unlock(&adev->grbm_idx_mutex); | 1005 | mutex_unlock(&adev->grbm_idx_mutex); |
1010 | 1006 | ||
1011 | vega10_didt_set_mask(hwmgr, true); | 1007 | vega10_didt_set_mask(hwmgr, true); |
@@ -1049,17 +1045,15 @@ static int vega10_enable_se_edc_config(struct pp_hwmgr *hwmgr) | |||
1049 | struct amdgpu_device *adev = hwmgr->adev; | 1045 | struct amdgpu_device *adev = hwmgr->adev; |
1050 | int result; | 1046 | int result; |
1051 | uint32_t num_se = 0, count, data; | 1047 | uint32_t num_se = 0, count, data; |
1052 | uint32_t reg; | ||
1053 | 1048 | ||
1054 | num_se = adev->gfx.config.max_shader_engines; | 1049 | num_se = adev->gfx.config.max_shader_engines; |
1055 | 1050 | ||
1056 | adev->gfx.rlc.funcs->enter_safe_mode(adev); | 1051 | adev->gfx.rlc.funcs->enter_safe_mode(adev); |
1057 | 1052 | ||
1058 | mutex_lock(&adev->grbm_idx_mutex); | 1053 | mutex_lock(&adev->grbm_idx_mutex); |
1059 | reg = soc15_get_register_offset(GC_HWID, 0, mmGRBM_GFX_INDEX_BASE_IDX, mmGRBM_GFX_INDEX); | ||
1060 | for (count = 0; count < num_se; count++) { | 1054 | for (count = 0; count < num_se; count++) { |
1061 | data = GRBM_GFX_INDEX__INSTANCE_BROADCAST_WRITES_MASK | GRBM_GFX_INDEX__SH_BROADCAST_WRITES_MASK | ( count << GRBM_GFX_INDEX__SE_INDEX__SHIFT); | 1055 | data = GRBM_GFX_INDEX__INSTANCE_BROADCAST_WRITES_MASK | GRBM_GFX_INDEX__SH_BROADCAST_WRITES_MASK | ( count << GRBM_GFX_INDEX__SE_INDEX__SHIFT); |
1062 | cgs_write_register(hwmgr->device, reg, data); | 1056 | WREG32_SOC15(GC, 0, mmGRBM_GFX_INDEX, data); |
1063 | result = vega10_program_didt_config_registers(hwmgr, SEDiDtWeightConfig_Vega10, VEGA10_CONFIGREG_DIDT); | 1057 | result = vega10_program_didt_config_registers(hwmgr, SEDiDtWeightConfig_Vega10, VEGA10_CONFIGREG_DIDT); |
1064 | result |= vega10_program_didt_config_registers(hwmgr, SEEDCStallPatternConfig_Vega10, VEGA10_CONFIGREG_DIDT); | 1058 | result |= vega10_program_didt_config_registers(hwmgr, SEEDCStallPatternConfig_Vega10, VEGA10_CONFIGREG_DIDT); |
1065 | result |= vega10_program_didt_config_registers(hwmgr, SEEDCStallDelayConfig_Vega10, VEGA10_CONFIGREG_DIDT); | 1059 | result |= vega10_program_didt_config_registers(hwmgr, SEEDCStallDelayConfig_Vega10, VEGA10_CONFIGREG_DIDT); |
@@ -1070,7 +1064,7 @@ static int vega10_enable_se_edc_config(struct pp_hwmgr *hwmgr) | |||
1070 | if (0 != result) | 1064 | if (0 != result) |
1071 | break; | 1065 | break; |
1072 | } | 1066 | } |
1073 | cgs_write_register(hwmgr->device, reg, 0xE0000000); | 1067 | WREG32_SOC15(GC, 0, mmGRBM_GFX_INDEX, 0xE0000000); |
1074 | mutex_unlock(&adev->grbm_idx_mutex); | 1068 | mutex_unlock(&adev->grbm_idx_mutex); |
1075 | 1069 | ||
1076 | vega10_didt_set_mask(hwmgr, true); | 1070 | vega10_didt_set_mask(hwmgr, true); |
@@ -1099,7 +1093,6 @@ static int vega10_enable_psm_gc_edc_config(struct pp_hwmgr *hwmgr) | |||
1099 | int result; | 1093 | int result; |
1100 | uint32_t num_se = 0; | 1094 | uint32_t num_se = 0; |
1101 | uint32_t count, data; | 1095 | uint32_t count, data; |
1102 | uint32_t reg; | ||
1103 | 1096 | ||
1104 | num_se = adev->gfx.config.max_shader_engines; | 1097 | num_se = adev->gfx.config.max_shader_engines; |
1105 | 1098 | ||
@@ -1108,10 +1101,9 @@ static int vega10_enable_psm_gc_edc_config(struct pp_hwmgr *hwmgr) | |||
1108 | vega10_program_gc_didt_config_registers(hwmgr, AvfsPSMResetConfig_vega10); | 1101 | vega10_program_gc_didt_config_registers(hwmgr, AvfsPSMResetConfig_vega10); |
1109 | 1102 | ||
1110 | mutex_lock(&adev->grbm_idx_mutex); | 1103 | mutex_lock(&adev->grbm_idx_mutex); |
1111 | reg = soc15_get_register_offset(GC_HWID, 0, mmGRBM_GFX_INDEX_BASE_IDX, mmGRBM_GFX_INDEX); | ||
1112 | for (count = 0; count < num_se; count++) { | 1104 | for (count = 0; count < num_se; count++) { |
1113 | data = GRBM_GFX_INDEX__INSTANCE_BROADCAST_WRITES_MASK | GRBM_GFX_INDEX__SH_BROADCAST_WRITES_MASK | ( count << GRBM_GFX_INDEX__SE_INDEX__SHIFT); | 1105 | data = GRBM_GFX_INDEX__INSTANCE_BROADCAST_WRITES_MASK | GRBM_GFX_INDEX__SH_BROADCAST_WRITES_MASK | ( count << GRBM_GFX_INDEX__SE_INDEX__SHIFT); |
1114 | cgs_write_register(hwmgr->device, reg, data); | 1106 | WREG32_SOC15(GC, 0, mmGRBM_GFX_INDEX, data); |
1115 | result |= vega10_program_didt_config_registers(hwmgr, PSMSEEDCStallPatternConfig_Vega10, VEGA10_CONFIGREG_DIDT); | 1107 | result |= vega10_program_didt_config_registers(hwmgr, PSMSEEDCStallPatternConfig_Vega10, VEGA10_CONFIGREG_DIDT); |
1116 | result |= vega10_program_didt_config_registers(hwmgr, PSMSEEDCStallDelayConfig_Vega10, VEGA10_CONFIGREG_DIDT); | 1108 | result |= vega10_program_didt_config_registers(hwmgr, PSMSEEDCStallDelayConfig_Vega10, VEGA10_CONFIGREG_DIDT); |
1117 | result |= vega10_program_didt_config_registers(hwmgr, PSMSEEDCCtrlResetConfig_Vega10, VEGA10_CONFIGREG_DIDT); | 1109 | result |= vega10_program_didt_config_registers(hwmgr, PSMSEEDCCtrlResetConfig_Vega10, VEGA10_CONFIGREG_DIDT); |
@@ -1120,7 +1112,7 @@ static int vega10_enable_psm_gc_edc_config(struct pp_hwmgr *hwmgr) | |||
1120 | if (0 != result) | 1112 | if (0 != result) |
1121 | break; | 1113 | break; |
1122 | } | 1114 | } |
1123 | cgs_write_register(hwmgr->device, reg, 0xE0000000); | 1115 | WREG32_SOC15(GC, 0, mmGRBM_GFX_INDEX, 0xE0000000); |
1124 | mutex_unlock(&adev->grbm_idx_mutex); | 1116 | mutex_unlock(&adev->grbm_idx_mutex); |
1125 | 1117 | ||
1126 | vega10_didt_set_mask(hwmgr, true); | 1118 | vega10_didt_set_mask(hwmgr, true); |
@@ -1165,14 +1157,12 @@ static int vega10_disable_psm_gc_edc_config(struct pp_hwmgr *hwmgr) | |||
1165 | static int vega10_enable_se_edc_force_stall_config(struct pp_hwmgr *hwmgr) | 1157 | static int vega10_enable_se_edc_force_stall_config(struct pp_hwmgr *hwmgr) |
1166 | { | 1158 | { |
1167 | struct amdgpu_device *adev = hwmgr->adev; | 1159 | struct amdgpu_device *adev = hwmgr->adev; |
1168 | uint32_t reg; | ||
1169 | int result; | 1160 | int result; |
1170 | 1161 | ||
1171 | adev->gfx.rlc.funcs->enter_safe_mode(adev); | 1162 | adev->gfx.rlc.funcs->enter_safe_mode(adev); |
1172 | 1163 | ||
1173 | mutex_lock(&adev->grbm_idx_mutex); | 1164 | mutex_lock(&adev->grbm_idx_mutex); |
1174 | reg = soc15_get_register_offset(GC_HWID, 0, mmGRBM_GFX_INDEX_BASE_IDX, mmGRBM_GFX_INDEX); | 1165 | WREG32_SOC15(GC, 0, mmGRBM_GFX_INDEX, 0xE0000000); |
1175 | cgs_write_register(hwmgr->device, reg, 0xE0000000); | ||
1176 | mutex_unlock(&adev->grbm_idx_mutex); | 1166 | mutex_unlock(&adev->grbm_idx_mutex); |
1177 | 1167 | ||
1178 | result = vega10_program_didt_config_registers(hwmgr, SEEDCForceStallPatternConfig_Vega10, VEGA10_CONFIGREG_DIDT); | 1168 | result = vega10_program_didt_config_registers(hwmgr, SEEDCForceStallPatternConfig_Vega10, VEGA10_CONFIGREG_DIDT); |
diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_thermal.c b/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_thermal.c index 9f18226a56ea..aa044c1955fe 100644 --- a/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_thermal.c +++ b/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_thermal.c | |||
@@ -25,7 +25,7 @@ | |||
25 | #include "vega10_hwmgr.h" | 25 | #include "vega10_hwmgr.h" |
26 | #include "vega10_ppsmc.h" | 26 | #include "vega10_ppsmc.h" |
27 | #include "vega10_inc.h" | 27 | #include "vega10_inc.h" |
28 | #include "pp_soc15.h" | 28 | #include "soc15_common.h" |
29 | #include "pp_debug.h" | 29 | #include "pp_debug.h" |
30 | 30 | ||
31 | static int vega10_get_current_rpm(struct pp_hwmgr *hwmgr, uint32_t *current_rpm) | 31 | static int vega10_get_current_rpm(struct pp_hwmgr *hwmgr, uint32_t *current_rpm) |
@@ -89,6 +89,7 @@ int vega10_fan_ctrl_get_fan_speed_percent(struct pp_hwmgr *hwmgr, | |||
89 | 89 | ||
90 | int vega10_fan_ctrl_get_fan_speed_rpm(struct pp_hwmgr *hwmgr, uint32_t *speed) | 90 | int vega10_fan_ctrl_get_fan_speed_rpm(struct pp_hwmgr *hwmgr, uint32_t *speed) |
91 | { | 91 | { |
92 | struct amdgpu_device *adev = hwmgr->adev; | ||
92 | struct vega10_hwmgr *data = hwmgr->backend; | 93 | struct vega10_hwmgr *data = hwmgr->backend; |
93 | uint32_t tach_period; | 94 | uint32_t tach_period; |
94 | uint32_t crystal_clock_freq; | 95 | uint32_t crystal_clock_freq; |
@@ -100,10 +101,8 @@ int vega10_fan_ctrl_get_fan_speed_rpm(struct pp_hwmgr *hwmgr, uint32_t *speed) | |||
100 | if (data->smu_features[GNLD_FAN_CONTROL].supported) { | 101 | if (data->smu_features[GNLD_FAN_CONTROL].supported) { |
101 | result = vega10_get_current_rpm(hwmgr, speed); | 102 | result = vega10_get_current_rpm(hwmgr, speed); |
102 | } else { | 103 | } else { |
103 | uint32_t reg = soc15_get_register_offset(THM_HWID, 0, | ||
104 | mmCG_TACH_STATUS_BASE_IDX, mmCG_TACH_STATUS); | ||
105 | tach_period = | 104 | tach_period = |
106 | CGS_REG_GET_FIELD(cgs_read_register(hwmgr->device, reg), | 105 | REG_GET_FIELD(RREG32_SOC15(THM, 0, mmCG_TACH_STATUS), |
107 | CG_TACH_STATUS, | 106 | CG_TACH_STATUS, |
108 | TACH_PERIOD); | 107 | TACH_PERIOD); |
109 | 108 | ||
@@ -127,26 +126,23 @@ int vega10_fan_ctrl_get_fan_speed_rpm(struct pp_hwmgr *hwmgr, uint32_t *speed) | |||
127 | */ | 126 | */ |
128 | int vega10_fan_ctrl_set_static_mode(struct pp_hwmgr *hwmgr, uint32_t mode) | 127 | int vega10_fan_ctrl_set_static_mode(struct pp_hwmgr *hwmgr, uint32_t mode) |
129 | { | 128 | { |
130 | uint32_t reg; | 129 | struct amdgpu_device *adev = hwmgr->adev; |
131 | |||
132 | reg = soc15_get_register_offset(THM_HWID, 0, | ||
133 | mmCG_FDO_CTRL2_BASE_IDX, mmCG_FDO_CTRL2); | ||
134 | 130 | ||
135 | if (hwmgr->fan_ctrl_is_in_default_mode) { | 131 | if (hwmgr->fan_ctrl_is_in_default_mode) { |
136 | hwmgr->fan_ctrl_default_mode = | 132 | hwmgr->fan_ctrl_default_mode = |
137 | CGS_REG_GET_FIELD(cgs_read_register(hwmgr->device, reg), | 133 | REG_GET_FIELD(RREG32_SOC15(THM, 0, mmCG_FDO_CTRL2), |
138 | CG_FDO_CTRL2, FDO_PWM_MODE); | 134 | CG_FDO_CTRL2, FDO_PWM_MODE); |
139 | hwmgr->tmin = | 135 | hwmgr->tmin = |
140 | CGS_REG_GET_FIELD(cgs_read_register(hwmgr->device, reg), | 136 | REG_GET_FIELD(RREG32_SOC15(THM, 0, mmCG_FDO_CTRL2), |
141 | CG_FDO_CTRL2, TMIN); | 137 | CG_FDO_CTRL2, TMIN); |
142 | hwmgr->fan_ctrl_is_in_default_mode = false; | 138 | hwmgr->fan_ctrl_is_in_default_mode = false; |
143 | } | 139 | } |
144 | 140 | ||
145 | cgs_write_register(hwmgr->device, reg, | 141 | WREG32_SOC15(THM, 0, mmCG_FDO_CTRL2, |
146 | CGS_REG_SET_FIELD(cgs_read_register(hwmgr->device, reg), | 142 | REG_SET_FIELD(RREG32_SOC15(THM, 0, mmCG_FDO_CTRL2), |
147 | CG_FDO_CTRL2, TMIN, 0)); | 143 | CG_FDO_CTRL2, TMIN, 0)); |
148 | cgs_write_register(hwmgr->device, reg, | 144 | WREG32_SOC15(THM, 0, mmCG_FDO_CTRL2, |
149 | CGS_REG_SET_FIELD(cgs_read_register(hwmgr->device, reg), | 145 | REG_SET_FIELD(RREG32_SOC15(THM, 0, mmCG_FDO_CTRL2), |
150 | CG_FDO_CTRL2, FDO_PWM_MODE, mode)); | 146 | CG_FDO_CTRL2, FDO_PWM_MODE, mode)); |
151 | 147 | ||
152 | return 0; | 148 | return 0; |
@@ -159,18 +155,15 @@ int vega10_fan_ctrl_set_static_mode(struct pp_hwmgr *hwmgr, uint32_t mode) | |||
159 | */ | 155 | */ |
160 | int vega10_fan_ctrl_set_default_mode(struct pp_hwmgr *hwmgr) | 156 | int vega10_fan_ctrl_set_default_mode(struct pp_hwmgr *hwmgr) |
161 | { | 157 | { |
162 | uint32_t reg; | 158 | struct amdgpu_device *adev = hwmgr->adev; |
163 | |||
164 | reg = soc15_get_register_offset(THM_HWID, 0, | ||
165 | mmCG_FDO_CTRL2_BASE_IDX, mmCG_FDO_CTRL2); | ||
166 | 159 | ||
167 | if (!hwmgr->fan_ctrl_is_in_default_mode) { | 160 | if (!hwmgr->fan_ctrl_is_in_default_mode) { |
168 | cgs_write_register(hwmgr->device, reg, | 161 | WREG32_SOC15(THM, 0, mmCG_FDO_CTRL2, |
169 | CGS_REG_SET_FIELD(cgs_read_register(hwmgr->device, reg), | 162 | REG_SET_FIELD(RREG32_SOC15(THM, 0, mmCG_FDO_CTRL2), |
170 | CG_FDO_CTRL2, FDO_PWM_MODE, | 163 | CG_FDO_CTRL2, FDO_PWM_MODE, |
171 | hwmgr->fan_ctrl_default_mode)); | 164 | hwmgr->fan_ctrl_default_mode)); |
172 | cgs_write_register(hwmgr->device, reg, | 165 | WREG32_SOC15(THM, 0, mmCG_FDO_CTRL2, |
173 | CGS_REG_SET_FIELD(cgs_read_register(hwmgr->device, reg), | 166 | REG_SET_FIELD(RREG32_SOC15(THM, 0, mmCG_FDO_CTRL2), |
174 | CG_FDO_CTRL2, TMIN, | 167 | CG_FDO_CTRL2, TMIN, |
175 | hwmgr->tmin << CG_FDO_CTRL2__TMIN__SHIFT)); | 168 | hwmgr->tmin << CG_FDO_CTRL2__TMIN__SHIFT)); |
176 | hwmgr->fan_ctrl_is_in_default_mode = true; | 169 | hwmgr->fan_ctrl_is_in_default_mode = true; |
@@ -257,10 +250,10 @@ int vega10_fan_ctrl_stop_smc_fan_control(struct pp_hwmgr *hwmgr) | |||
257 | int vega10_fan_ctrl_set_fan_speed_percent(struct pp_hwmgr *hwmgr, | 250 | int vega10_fan_ctrl_set_fan_speed_percent(struct pp_hwmgr *hwmgr, |
258 | uint32_t speed) | 251 | uint32_t speed) |
259 | { | 252 | { |
253 | struct amdgpu_device *adev = hwmgr->adev; | ||
260 | uint32_t duty100; | 254 | uint32_t duty100; |
261 | uint32_t duty; | 255 | uint32_t duty; |
262 | uint64_t tmp64; | 256 | uint64_t tmp64; |
263 | uint32_t reg; | ||
264 | 257 | ||
265 | if (hwmgr->thermal_controller.fanInfo.bNoFan) | 258 | if (hwmgr->thermal_controller.fanInfo.bNoFan) |
266 | return 0; | 259 | return 0; |
@@ -271,10 +264,7 @@ int vega10_fan_ctrl_set_fan_speed_percent(struct pp_hwmgr *hwmgr, | |||
271 | if (PP_CAP(PHM_PlatformCaps_MicrocodeFanControl)) | 264 | if (PP_CAP(PHM_PlatformCaps_MicrocodeFanControl)) |
272 | vega10_fan_ctrl_stop_smc_fan_control(hwmgr); | 265 | vega10_fan_ctrl_stop_smc_fan_control(hwmgr); |
273 | 266 | ||
274 | reg = soc15_get_register_offset(THM_HWID, 0, | 267 | duty100 = REG_GET_FIELD(RREG32_SOC15(THM, 0, mmCG_FDO_CTRL1), |
275 | mmCG_FDO_CTRL1_BASE_IDX, mmCG_FDO_CTRL1); | ||
276 | |||
277 | duty100 = CGS_REG_GET_FIELD(cgs_read_register(hwmgr->device, reg), | ||
278 | CG_FDO_CTRL1, FMAX_DUTY100); | 268 | CG_FDO_CTRL1, FMAX_DUTY100); |
279 | 269 | ||
280 | if (duty100 == 0) | 270 | if (duty100 == 0) |
@@ -284,10 +274,8 @@ int vega10_fan_ctrl_set_fan_speed_percent(struct pp_hwmgr *hwmgr, | |||
284 | do_div(tmp64, 100); | 274 | do_div(tmp64, 100); |
285 | duty = (uint32_t)tmp64; | 275 | duty = (uint32_t)tmp64; |
286 | 276 | ||
287 | reg = soc15_get_register_offset(THM_HWID, 0, | 277 | WREG32_SOC15(THM, 0, mmCG_FDO_CTRL0, |
288 | mmCG_FDO_CTRL0_BASE_IDX, mmCG_FDO_CTRL0); | 278 | REG_SET_FIELD(RREG32_SOC15(THM, 0, mmCG_FDO_CTRL0), |
289 | cgs_write_register(hwmgr->device, reg, | ||
290 | CGS_REG_SET_FIELD(cgs_read_register(hwmgr->device, reg), | ||
291 | CG_FDO_CTRL0, FDO_STATIC_DUTY, duty)); | 279 | CG_FDO_CTRL0, FDO_STATIC_DUTY, duty)); |
292 | 280 | ||
293 | return vega10_fan_ctrl_set_static_mode(hwmgr, FDO_PWM_MODE_STATIC); | 281 | return vega10_fan_ctrl_set_static_mode(hwmgr, FDO_PWM_MODE_STATIC); |
@@ -317,10 +305,10 @@ int vega10_fan_ctrl_reset_fan_speed_to_default(struct pp_hwmgr *hwmgr) | |||
317 | */ | 305 | */ |
318 | int vega10_fan_ctrl_set_fan_speed_rpm(struct pp_hwmgr *hwmgr, uint32_t speed) | 306 | int vega10_fan_ctrl_set_fan_speed_rpm(struct pp_hwmgr *hwmgr, uint32_t speed) |
319 | { | 307 | { |
308 | struct amdgpu_device *adev = hwmgr->adev; | ||
320 | uint32_t tach_period; | 309 | uint32_t tach_period; |
321 | uint32_t crystal_clock_freq; | 310 | uint32_t crystal_clock_freq; |
322 | int result = 0; | 311 | int result = 0; |
323 | uint32_t reg; | ||
324 | 312 | ||
325 | if (hwmgr->thermal_controller.fanInfo.bNoFan || | 313 | if (hwmgr->thermal_controller.fanInfo.bNoFan || |
326 | (speed < hwmgr->thermal_controller.fanInfo.ulMinRPM) || | 314 | (speed < hwmgr->thermal_controller.fanInfo.ulMinRPM) || |
@@ -333,10 +321,8 @@ int vega10_fan_ctrl_set_fan_speed_rpm(struct pp_hwmgr *hwmgr, uint32_t speed) | |||
333 | if (!result) { | 321 | if (!result) { |
334 | crystal_clock_freq = amdgpu_asic_get_xclk((struct amdgpu_device *)hwmgr->adev); | 322 | crystal_clock_freq = amdgpu_asic_get_xclk((struct amdgpu_device *)hwmgr->adev); |
335 | tach_period = 60 * crystal_clock_freq * 10000 / (8 * speed); | 323 | tach_period = 60 * crystal_clock_freq * 10000 / (8 * speed); |
336 | reg = soc15_get_register_offset(THM_HWID, 0, | 324 | WREG32_SOC15(THM, 0, mmCG_TACH_STATUS, |
337 | mmCG_TACH_STATUS_BASE_IDX, mmCG_TACH_STATUS); | 325 | REG_SET_FIELD(RREG32_SOC15(THM, 0, mmCG_TACH_STATUS), |
338 | cgs_write_register(hwmgr->device, reg, | ||
339 | CGS_REG_SET_FIELD(cgs_read_register(hwmgr->device, reg), | ||
340 | CG_TACH_STATUS, TACH_PERIOD, | 326 | CG_TACH_STATUS, TACH_PERIOD, |
341 | tach_period)); | 327 | tach_period)); |
342 | } | 328 | } |
@@ -350,13 +336,10 @@ int vega10_fan_ctrl_set_fan_speed_rpm(struct pp_hwmgr *hwmgr, uint32_t speed) | |||
350 | */ | 336 | */ |
351 | int vega10_thermal_get_temperature(struct pp_hwmgr *hwmgr) | 337 | int vega10_thermal_get_temperature(struct pp_hwmgr *hwmgr) |
352 | { | 338 | { |
339 | struct amdgpu_device *adev = hwmgr->adev; | ||
353 | int temp; | 340 | int temp; |
354 | uint32_t reg; | ||
355 | 341 | ||
356 | reg = soc15_get_register_offset(THM_HWID, 0, | 342 | temp = RREG32_SOC15(THM, 0, mmCG_MULT_THERMAL_STATUS); |
357 | mmCG_MULT_THERMAL_STATUS_BASE_IDX, mmCG_MULT_THERMAL_STATUS); | ||
358 | |||
359 | temp = cgs_read_register(hwmgr->device, reg); | ||
360 | 343 | ||
361 | temp = (temp & CG_MULT_THERMAL_STATUS__CTF_TEMP_MASK) >> | 344 | temp = (temp & CG_MULT_THERMAL_STATUS__CTF_TEMP_MASK) >> |
362 | CG_MULT_THERMAL_STATUS__CTF_TEMP__SHIFT; | 345 | CG_MULT_THERMAL_STATUS__CTF_TEMP__SHIFT; |
@@ -379,11 +362,12 @@ int vega10_thermal_get_temperature(struct pp_hwmgr *hwmgr) | |||
379 | static int vega10_thermal_set_temperature_range(struct pp_hwmgr *hwmgr, | 362 | static int vega10_thermal_set_temperature_range(struct pp_hwmgr *hwmgr, |
380 | struct PP_TemperatureRange *range) | 363 | struct PP_TemperatureRange *range) |
381 | { | 364 | { |
365 | struct amdgpu_device *adev = hwmgr->adev; | ||
382 | int low = VEGA10_THERMAL_MINIMUM_ALERT_TEMP * | 366 | int low = VEGA10_THERMAL_MINIMUM_ALERT_TEMP * |
383 | PP_TEMPERATURE_UNITS_PER_CENTIGRADES; | 367 | PP_TEMPERATURE_UNITS_PER_CENTIGRADES; |
384 | int high = VEGA10_THERMAL_MAXIMUM_ALERT_TEMP * | 368 | int high = VEGA10_THERMAL_MAXIMUM_ALERT_TEMP * |
385 | PP_TEMPERATURE_UNITS_PER_CENTIGRADES; | 369 | PP_TEMPERATURE_UNITS_PER_CENTIGRADES; |
386 | uint32_t val, reg; | 370 | uint32_t val; |
387 | 371 | ||
388 | if (low < range->min) | 372 | if (low < range->min) |
389 | low = range->min; | 373 | low = range->min; |
@@ -393,20 +377,17 @@ static int vega10_thermal_set_temperature_range(struct pp_hwmgr *hwmgr, | |||
393 | if (low > high) | 377 | if (low > high) |
394 | return -EINVAL; | 378 | return -EINVAL; |
395 | 379 | ||
396 | reg = soc15_get_register_offset(THM_HWID, 0, | 380 | val = RREG32_SOC15(THM, 0, mmTHM_THERMAL_INT_CTRL); |
397 | mmTHM_THERMAL_INT_CTRL_BASE_IDX, mmTHM_THERMAL_INT_CTRL); | ||
398 | |||
399 | val = cgs_read_register(hwmgr->device, reg); | ||
400 | 381 | ||
401 | val = CGS_REG_SET_FIELD(val, THM_THERMAL_INT_CTRL, MAX_IH_CREDIT, 5); | 382 | val = REG_SET_FIELD(val, THM_THERMAL_INT_CTRL, MAX_IH_CREDIT, 5); |
402 | val = CGS_REG_SET_FIELD(val, THM_THERMAL_INT_CTRL, THERM_IH_HW_ENA, 1); | 383 | val = REG_SET_FIELD(val, THM_THERMAL_INT_CTRL, THERM_IH_HW_ENA, 1); |
403 | val = CGS_REG_SET_FIELD(val, THM_THERMAL_INT_CTRL, DIG_THERM_INTH, (high / PP_TEMPERATURE_UNITS_PER_CENTIGRADES)); | 384 | val = REG_SET_FIELD(val, THM_THERMAL_INT_CTRL, DIG_THERM_INTH, (high / PP_TEMPERATURE_UNITS_PER_CENTIGRADES)); |
404 | val = CGS_REG_SET_FIELD(val, THM_THERMAL_INT_CTRL, DIG_THERM_INTL, (low / PP_TEMPERATURE_UNITS_PER_CENTIGRADES)); | 385 | val = REG_SET_FIELD(val, THM_THERMAL_INT_CTRL, DIG_THERM_INTL, (low / PP_TEMPERATURE_UNITS_PER_CENTIGRADES)); |
405 | val &= (~THM_THERMAL_INT_CTRL__THERM_TRIGGER_MASK_MASK) & | 386 | val &= (~THM_THERMAL_INT_CTRL__THERM_TRIGGER_MASK_MASK) & |
406 | (~THM_THERMAL_INT_CTRL__THERM_INTH_MASK_MASK) & | 387 | (~THM_THERMAL_INT_CTRL__THERM_INTH_MASK_MASK) & |
407 | (~THM_THERMAL_INT_CTRL__THERM_INTL_MASK_MASK); | 388 | (~THM_THERMAL_INT_CTRL__THERM_INTL_MASK_MASK); |
408 | 389 | ||
409 | cgs_write_register(hwmgr->device, reg, val); | 390 | WREG32_SOC15(THM, 0, mmTHM_THERMAL_INT_CTRL, val); |
410 | 391 | ||
411 | return 0; | 392 | return 0; |
412 | } | 393 | } |
@@ -418,21 +399,17 @@ static int vega10_thermal_set_temperature_range(struct pp_hwmgr *hwmgr, | |||
418 | */ | 399 | */ |
419 | static int vega10_thermal_initialize(struct pp_hwmgr *hwmgr) | 400 | static int vega10_thermal_initialize(struct pp_hwmgr *hwmgr) |
420 | { | 401 | { |
421 | uint32_t reg; | 402 | struct amdgpu_device *adev = hwmgr->adev; |
422 | 403 | ||
423 | if (hwmgr->thermal_controller.fanInfo.ucTachometerPulsesPerRevolution) { | 404 | if (hwmgr->thermal_controller.fanInfo.ucTachometerPulsesPerRevolution) { |
424 | reg = soc15_get_register_offset(THM_HWID, 0, | 405 | WREG32_SOC15(THM, 0, mmCG_TACH_CTRL, |
425 | mmCG_TACH_CTRL_BASE_IDX, mmCG_TACH_CTRL); | 406 | REG_SET_FIELD(RREG32_SOC15(THM, 0, mmCG_TACH_CTRL), |
426 | cgs_write_register(hwmgr->device, reg, | ||
427 | CGS_REG_SET_FIELD(cgs_read_register(hwmgr->device, reg), | ||
428 | CG_TACH_CTRL, EDGE_PER_REV, | 407 | CG_TACH_CTRL, EDGE_PER_REV, |
429 | hwmgr->thermal_controller.fanInfo.ucTachometerPulsesPerRevolution - 1)); | 408 | hwmgr->thermal_controller.fanInfo.ucTachometerPulsesPerRevolution - 1)); |
430 | } | 409 | } |
431 | 410 | ||
432 | reg = soc15_get_register_offset(THM_HWID, 0, | 411 | WREG32_SOC15(THM, 0, mmCG_FDO_CTRL2, |
433 | mmCG_FDO_CTRL2_BASE_IDX, mmCG_FDO_CTRL2); | 412 | REG_SET_FIELD(RREG32_SOC15(THM, 0, mmCG_FDO_CTRL2), |
434 | cgs_write_register(hwmgr->device, reg, | ||
435 | CGS_REG_SET_FIELD(cgs_read_register(hwmgr->device, reg), | ||
436 | CG_FDO_CTRL2, TACH_PWM_RESP_RATE, 0x28)); | 413 | CG_FDO_CTRL2, TACH_PWM_RESP_RATE, 0x28)); |
437 | 414 | ||
438 | return 0; | 415 | return 0; |
@@ -445,9 +422,9 @@ static int vega10_thermal_initialize(struct pp_hwmgr *hwmgr) | |||
445 | */ | 422 | */ |
446 | static int vega10_thermal_enable_alert(struct pp_hwmgr *hwmgr) | 423 | static int vega10_thermal_enable_alert(struct pp_hwmgr *hwmgr) |
447 | { | 424 | { |
425 | struct amdgpu_device *adev = hwmgr->adev; | ||
448 | struct vega10_hwmgr *data = hwmgr->backend; | 426 | struct vega10_hwmgr *data = hwmgr->backend; |
449 | uint32_t val = 0; | 427 | uint32_t val = 0; |
450 | uint32_t reg; | ||
451 | 428 | ||
452 | if (data->smu_features[GNLD_FW_CTF].supported) { | 429 | if (data->smu_features[GNLD_FW_CTF].supported) { |
453 | if (data->smu_features[GNLD_FW_CTF].enabled) | 430 | if (data->smu_features[GNLD_FW_CTF].enabled) |
@@ -465,8 +442,7 @@ static int vega10_thermal_enable_alert(struct pp_hwmgr *hwmgr) | |||
465 | val |= (1 << THM_THERMAL_INT_ENA__THERM_INTL_CLR__SHIFT); | 442 | val |= (1 << THM_THERMAL_INT_ENA__THERM_INTL_CLR__SHIFT); |
466 | val |= (1 << THM_THERMAL_INT_ENA__THERM_TRIGGER_CLR__SHIFT); | 443 | val |= (1 << THM_THERMAL_INT_ENA__THERM_TRIGGER_CLR__SHIFT); |
467 | 444 | ||
468 | reg = soc15_get_register_offset(THM_HWID, 0, mmTHM_THERMAL_INT_ENA_BASE_IDX, mmTHM_THERMAL_INT_ENA); | 445 | WREG32_SOC15(THM, 0, mmTHM_THERMAL_INT_ENA, val); |
469 | cgs_write_register(hwmgr->device, reg, val); | ||
470 | 446 | ||
471 | return 0; | 447 | return 0; |
472 | } | 448 | } |
@@ -477,8 +453,8 @@ static int vega10_thermal_enable_alert(struct pp_hwmgr *hwmgr) | |||
477 | */ | 453 | */ |
478 | int vega10_thermal_disable_alert(struct pp_hwmgr *hwmgr) | 454 | int vega10_thermal_disable_alert(struct pp_hwmgr *hwmgr) |
479 | { | 455 | { |
456 | struct amdgpu_device *adev = hwmgr->adev; | ||
480 | struct vega10_hwmgr *data = hwmgr->backend; | 457 | struct vega10_hwmgr *data = hwmgr->backend; |
481 | uint32_t reg; | ||
482 | 458 | ||
483 | if (data->smu_features[GNLD_FW_CTF].supported) { | 459 | if (data->smu_features[GNLD_FW_CTF].supported) { |
484 | if (!data->smu_features[GNLD_FW_CTF].enabled) | 460 | if (!data->smu_features[GNLD_FW_CTF].enabled) |
@@ -493,8 +469,7 @@ int vega10_thermal_disable_alert(struct pp_hwmgr *hwmgr) | |||
493 | data->smu_features[GNLD_FW_CTF].enabled = false; | 469 | data->smu_features[GNLD_FW_CTF].enabled = false; |
494 | } | 470 | } |
495 | 471 | ||
496 | reg = soc15_get_register_offset(THM_HWID, 0, mmTHM_THERMAL_INT_ENA_BASE_IDX, mmTHM_THERMAL_INT_ENA); | 472 | WREG32_SOC15(THM, 0, mmTHM_THERMAL_INT_ENA, 0); |
497 | cgs_write_register(hwmgr->device, reg, 0); | ||
498 | 473 | ||
499 | return 0; | 474 | return 0; |
500 | } | 475 | } |
diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/vega12_hwmgr.c b/drivers/gpu/drm/amd/powerplay/hwmgr/vega12_hwmgr.c index 6a85238ae20f..7dca75cdf722 100644 --- a/drivers/gpu/drm/amd/powerplay/hwmgr/vega12_hwmgr.c +++ b/drivers/gpu/drm/amd/powerplay/hwmgr/vega12_hwmgr.c | |||
@@ -34,7 +34,6 @@ | |||
34 | #include "atomfirmware.h" | 34 | #include "atomfirmware.h" |
35 | #include "cgs_common.h" | 35 | #include "cgs_common.h" |
36 | #include "vega12_inc.h" | 36 | #include "vega12_inc.h" |
37 | #include "pp_soc15.h" | ||
38 | #include "pppcielanes.h" | 37 | #include "pppcielanes.h" |
39 | #include "vega12_hwmgr.h" | 38 | #include "vega12_hwmgr.h" |
40 | #include "vega12_processpptables.h" | 39 | #include "vega12_processpptables.h" |
diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/vega12_thermal.c b/drivers/gpu/drm/amd/powerplay/hwmgr/vega12_thermal.c index df0fa815cd6e..cfd9e6ccb790 100644 --- a/drivers/gpu/drm/amd/powerplay/hwmgr/vega12_thermal.c +++ b/drivers/gpu/drm/amd/powerplay/hwmgr/vega12_thermal.c | |||
@@ -26,7 +26,7 @@ | |||
26 | #include "vega12_smumgr.h" | 26 | #include "vega12_smumgr.h" |
27 | #include "vega12_ppsmc.h" | 27 | #include "vega12_ppsmc.h" |
28 | #include "vega12_inc.h" | 28 | #include "vega12_inc.h" |
29 | #include "pp_soc15.h" | 29 | #include "soc15_common.h" |
30 | #include "pp_debug.h" | 30 | #include "pp_debug.h" |
31 | 31 | ||
32 | static int vega12_get_current_rpm(struct pp_hwmgr *hwmgr, uint32_t *current_rpm) | 32 | static int vega12_get_current_rpm(struct pp_hwmgr *hwmgr, uint32_t *current_rpm) |
@@ -147,13 +147,10 @@ int vega12_fan_ctrl_reset_fan_speed_to_default(struct pp_hwmgr *hwmgr) | |||
147 | */ | 147 | */ |
148 | int vega12_thermal_get_temperature(struct pp_hwmgr *hwmgr) | 148 | int vega12_thermal_get_temperature(struct pp_hwmgr *hwmgr) |
149 | { | 149 | { |
150 | struct amdgpu_device *adev = hwmgr->adev; | ||
150 | int temp = 0; | 151 | int temp = 0; |
151 | uint32_t reg; | ||
152 | 152 | ||
153 | reg = soc15_get_register_offset(THM_HWID, 0, | 153 | temp = RREG32_SOC15(THM, 0, mmCG_MULT_THERMAL_STATUS); |
154 | mmCG_MULT_THERMAL_STATUS_BASE_IDX, mmCG_MULT_THERMAL_STATUS); | ||
155 | |||
156 | temp = cgs_read_register(hwmgr->device, reg); | ||
157 | 154 | ||
158 | temp = (temp & CG_MULT_THERMAL_STATUS__CTF_TEMP_MASK) >> | 155 | temp = (temp & CG_MULT_THERMAL_STATUS__CTF_TEMP_MASK) >> |
159 | CG_MULT_THERMAL_STATUS__CTF_TEMP__SHIFT; | 156 | CG_MULT_THERMAL_STATUS__CTF_TEMP__SHIFT; |
@@ -175,11 +172,12 @@ int vega12_thermal_get_temperature(struct pp_hwmgr *hwmgr) | |||
175 | static int vega12_thermal_set_temperature_range(struct pp_hwmgr *hwmgr, | 172 | static int vega12_thermal_set_temperature_range(struct pp_hwmgr *hwmgr, |
176 | struct PP_TemperatureRange *range) | 173 | struct PP_TemperatureRange *range) |
177 | { | 174 | { |
175 | struct amdgpu_device *adev = hwmgr->adev; | ||
178 | int low = VEGA12_THERMAL_MINIMUM_ALERT_TEMP * | 176 | int low = VEGA12_THERMAL_MINIMUM_ALERT_TEMP * |
179 | PP_TEMPERATURE_UNITS_PER_CENTIGRADES; | 177 | PP_TEMPERATURE_UNITS_PER_CENTIGRADES; |
180 | int high = VEGA12_THERMAL_MAXIMUM_ALERT_TEMP * | 178 | int high = VEGA12_THERMAL_MAXIMUM_ALERT_TEMP * |
181 | PP_TEMPERATURE_UNITS_PER_CENTIGRADES; | 179 | PP_TEMPERATURE_UNITS_PER_CENTIGRADES; |
182 | uint32_t val, reg; | 180 | uint32_t val; |
183 | 181 | ||
184 | if (low < range->min) | 182 | if (low < range->min) |
185 | low = range->min; | 183 | low = range->min; |
@@ -189,18 +187,15 @@ static int vega12_thermal_set_temperature_range(struct pp_hwmgr *hwmgr, | |||
189 | if (low > high) | 187 | if (low > high) |
190 | return -EINVAL; | 188 | return -EINVAL; |
191 | 189 | ||
192 | reg = soc15_get_register_offset(THM_HWID, 0, | 190 | val = RREG32_SOC15(THM, 0, mmTHM_THERMAL_INT_CTRL); |
193 | mmTHM_THERMAL_INT_CTRL_BASE_IDX, mmTHM_THERMAL_INT_CTRL); | ||
194 | |||
195 | val = cgs_read_register(hwmgr->device, reg); | ||
196 | 191 | ||
197 | val = CGS_REG_SET_FIELD(val, THM_THERMAL_INT_CTRL, MAX_IH_CREDIT, 5); | 192 | val = REG_SET_FIELD(val, THM_THERMAL_INT_CTRL, MAX_IH_CREDIT, 5); |
198 | val = CGS_REG_SET_FIELD(val, THM_THERMAL_INT_CTRL, THERM_IH_HW_ENA, 1); | 193 | val = REG_SET_FIELD(val, THM_THERMAL_INT_CTRL, THERM_IH_HW_ENA, 1); |
199 | val = CGS_REG_SET_FIELD(val, THM_THERMAL_INT_CTRL, DIG_THERM_INTH, (high / PP_TEMPERATURE_UNITS_PER_CENTIGRADES)); | 194 | val = REG_SET_FIELD(val, THM_THERMAL_INT_CTRL, DIG_THERM_INTH, (high / PP_TEMPERATURE_UNITS_PER_CENTIGRADES)); |
200 | val = CGS_REG_SET_FIELD(val, THM_THERMAL_INT_CTRL, DIG_THERM_INTL, (low / PP_TEMPERATURE_UNITS_PER_CENTIGRADES)); | 195 | val = REG_SET_FIELD(val, THM_THERMAL_INT_CTRL, DIG_THERM_INTL, (low / PP_TEMPERATURE_UNITS_PER_CENTIGRADES)); |
201 | val = val & (~THM_THERMAL_INT_CTRL__THERM_TRIGGER_MASK_MASK); | 196 | val = val & (~THM_THERMAL_INT_CTRL__THERM_TRIGGER_MASK_MASK); |
202 | 197 | ||
203 | cgs_write_register(hwmgr->device, reg, val); | 198 | WREG32_SOC15(THM, 0, mmTHM_THERMAL_INT_CTRL, val); |
204 | 199 | ||
205 | return 0; | 200 | return 0; |
206 | } | 201 | } |
@@ -212,15 +207,14 @@ static int vega12_thermal_set_temperature_range(struct pp_hwmgr *hwmgr, | |||
212 | */ | 207 | */ |
213 | static int vega12_thermal_enable_alert(struct pp_hwmgr *hwmgr) | 208 | static int vega12_thermal_enable_alert(struct pp_hwmgr *hwmgr) |
214 | { | 209 | { |
210 | struct amdgpu_device *adev = hwmgr->adev; | ||
215 | uint32_t val = 0; | 211 | uint32_t val = 0; |
216 | uint32_t reg; | ||
217 | 212 | ||
218 | val |= (1 << THM_THERMAL_INT_ENA__THERM_INTH_CLR__SHIFT); | 213 | val |= (1 << THM_THERMAL_INT_ENA__THERM_INTH_CLR__SHIFT); |
219 | val |= (1 << THM_THERMAL_INT_ENA__THERM_INTL_CLR__SHIFT); | 214 | val |= (1 << THM_THERMAL_INT_ENA__THERM_INTL_CLR__SHIFT); |
220 | val |= (1 << THM_THERMAL_INT_ENA__THERM_TRIGGER_CLR__SHIFT); | 215 | val |= (1 << THM_THERMAL_INT_ENA__THERM_TRIGGER_CLR__SHIFT); |
221 | 216 | ||
222 | reg = soc15_get_register_offset(THM_HWID, 0, mmTHM_THERMAL_INT_ENA_BASE_IDX, mmTHM_THERMAL_INT_ENA); | 217 | WREG32_SOC15(THM, 0, mmTHM_THERMAL_INT_ENA, val); |
223 | cgs_write_register(hwmgr->device, reg, val); | ||
224 | 218 | ||
225 | return 0; | 219 | return 0; |
226 | } | 220 | } |
@@ -231,10 +225,9 @@ static int vega12_thermal_enable_alert(struct pp_hwmgr *hwmgr) | |||
231 | */ | 225 | */ |
232 | int vega12_thermal_disable_alert(struct pp_hwmgr *hwmgr) | 226 | int vega12_thermal_disable_alert(struct pp_hwmgr *hwmgr) |
233 | { | 227 | { |
234 | uint32_t reg; | 228 | struct amdgpu_device *adev = hwmgr->adev; |
235 | 229 | ||
236 | reg = soc15_get_register_offset(THM_HWID, 0, mmTHM_THERMAL_INT_ENA_BASE_IDX, mmTHM_THERMAL_INT_ENA); | 230 | WREG32_SOC15(THM, 0, mmTHM_THERMAL_INT_ENA, 0); |
237 | cgs_write_register(hwmgr->device, reg, 0); | ||
238 | 231 | ||
239 | return 0; | 232 | return 0; |
240 | } | 233 | } |
diff --git a/drivers/gpu/drm/amd/powerplay/inc/pp_soc15.h b/drivers/gpu/drm/amd/powerplay/inc/pp_soc15.h deleted file mode 100644 index 214f370c5efd..000000000000 --- a/drivers/gpu/drm/amd/powerplay/inc/pp_soc15.h +++ /dev/null | |||
@@ -1,52 +0,0 @@ | |||
1 | /* | ||
2 | * Copyright 2016 Advanced Micro Devices, Inc. | ||
3 | * | ||
4 | * Permission is hereby granted, free of charge, to any person obtaining a | ||
5 | * copy of this software and associated documentation files (the "Software"), | ||
6 | * to deal in the Software without restriction, including without limitation | ||
7 | * the rights to use, copy, modify, merge, publish, distribute, sublicense, | ||
8 | * and/or sell copies of the Software, and to permit persons to whom the | ||
9 | * Software is furnished to do so, subject to the following conditions: | ||
10 | * | ||
11 | * The above copyright notice and this permission notice shall be included in | ||
12 | * all copies or substantial portions of the Software. | ||
13 | * | ||
14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
15 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
16 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL | ||
17 | * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR | ||
18 | * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, | ||
19 | * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR | ||
20 | * OTHER DEALINGS IN THE SOFTWARE. | ||
21 | * | ||
22 | */ | ||
23 | #ifndef PP_SOC15_H | ||
24 | #define PP_SOC15_H | ||
25 | |||
26 | #include "soc15_hw_ip.h" | ||
27 | #include "vega10_ip_offset.h" | ||
28 | |||
29 | inline static uint32_t soc15_get_register_offset( | ||
30 | uint32_t hw_id, | ||
31 | uint32_t inst, | ||
32 | uint32_t segment, | ||
33 | uint32_t offset) | ||
34 | { | ||
35 | uint32_t reg = 0; | ||
36 | |||
37 | if (hw_id == THM_HWID) | ||
38 | reg = THM_BASE.instance[inst].segment[segment] + offset; | ||
39 | else if (hw_id == NBIF_HWID) | ||
40 | reg = NBIF_BASE.instance[inst].segment[segment] + offset; | ||
41 | else if (hw_id == MP1_HWID) | ||
42 | reg = MP1_BASE.instance[inst].segment[segment] + offset; | ||
43 | else if (hw_id == DF_HWID) | ||
44 | reg = DF_BASE.instance[inst].segment[segment] + offset; | ||
45 | else if (hw_id == GC_HWID) | ||
46 | reg = GC_BASE.instance[inst].segment[segment] + offset; | ||
47 | else if (hw_id == SMUIO_HWID) | ||
48 | reg = SMUIO_BASE.instance[inst].segment[segment] + offset; | ||
49 | return reg; | ||
50 | } | ||
51 | |||
52 | #endif | ||
diff --git a/drivers/gpu/drm/amd/powerplay/smumgr/smu10_smumgr.c b/drivers/gpu/drm/amd/powerplay/smumgr/smu10_smumgr.c index bc53f2beda30..9adea7263774 100644 --- a/drivers/gpu/drm/amd/powerplay/smumgr/smu10_smumgr.c +++ b/drivers/gpu/drm/amd/powerplay/smumgr/smu10_smumgr.c | |||
@@ -23,7 +23,7 @@ | |||
23 | 23 | ||
24 | #include "smumgr.h" | 24 | #include "smumgr.h" |
25 | #include "smu10_inc.h" | 25 | #include "smu10_inc.h" |
26 | #include "pp_soc15.h" | 26 | #include "soc15_common.h" |
27 | #include "smu10_smumgr.h" | 27 | #include "smu10_smumgr.h" |
28 | #include "ppatomctrl.h" | 28 | #include "ppatomctrl.h" |
29 | #include "rv_ppsmc.h" | 29 | #include "rv_ppsmc.h" |
@@ -49,48 +49,41 @@ | |||
49 | 49 | ||
50 | static uint32_t smu10_wait_for_response(struct pp_hwmgr *hwmgr) | 50 | static uint32_t smu10_wait_for_response(struct pp_hwmgr *hwmgr) |
51 | { | 51 | { |
52 | struct amdgpu_device *adev = hwmgr->adev; | ||
52 | uint32_t reg; | 53 | uint32_t reg; |
53 | 54 | ||
54 | reg = soc15_get_register_offset(MP1_HWID, 0, | 55 | reg = SOC15_REG_OFFSET(MP1, 0, mmMP1_SMN_C2PMSG_90); |
55 | mmMP1_SMN_C2PMSG_90_BASE_IDX, mmMP1_SMN_C2PMSG_90); | ||
56 | 56 | ||
57 | phm_wait_for_register_unequal(hwmgr, reg, | 57 | phm_wait_for_register_unequal(hwmgr, reg, |
58 | 0, MP1_C2PMSG_90__CONTENT_MASK); | 58 | 0, MP1_C2PMSG_90__CONTENT_MASK); |
59 | 59 | ||
60 | return cgs_read_register(hwmgr->device, reg); | 60 | return RREG32_SOC15(MP1, 0, mmMP1_SMN_C2PMSG_90); |
61 | } | 61 | } |
62 | 62 | ||
63 | static int smu10_send_msg_to_smc_without_waiting(struct pp_hwmgr *hwmgr, | 63 | static int smu10_send_msg_to_smc_without_waiting(struct pp_hwmgr *hwmgr, |
64 | uint16_t msg) | 64 | uint16_t msg) |
65 | { | 65 | { |
66 | uint32_t reg; | 66 | struct amdgpu_device *adev = hwmgr->adev; |
67 | 67 | ||
68 | reg = soc15_get_register_offset(MP1_HWID, 0, | 68 | WREG32_SOC15(MP1, 0, mmMP1_SMN_C2PMSG_66, msg); |
69 | mmMP1_SMN_C2PMSG_66_BASE_IDX, mmMP1_SMN_C2PMSG_66); | ||
70 | cgs_write_register(hwmgr->device, reg, msg); | ||
71 | 69 | ||
72 | return 0; | 70 | return 0; |
73 | } | 71 | } |
74 | 72 | ||
75 | static int smu10_read_arg_from_smc(struct pp_hwmgr *hwmgr) | 73 | static int smu10_read_arg_from_smc(struct pp_hwmgr *hwmgr) |
76 | { | 74 | { |
77 | uint32_t reg; | 75 | struct amdgpu_device *adev = hwmgr->adev; |
78 | |||
79 | reg = soc15_get_register_offset(MP1_HWID, 0, | ||
80 | mmMP1_SMN_C2PMSG_82_BASE_IDX, mmMP1_SMN_C2PMSG_82); | ||
81 | 76 | ||
82 | return cgs_read_register(hwmgr->device, reg); | 77 | return RREG32_SOC15(MP1, 0, mmMP1_SMN_C2PMSG_82); |
83 | } | 78 | } |
84 | 79 | ||
85 | static int smu10_send_msg_to_smc(struct pp_hwmgr *hwmgr, uint16_t msg) | 80 | static int smu10_send_msg_to_smc(struct pp_hwmgr *hwmgr, uint16_t msg) |
86 | { | 81 | { |
87 | uint32_t reg; | 82 | struct amdgpu_device *adev = hwmgr->adev; |
88 | 83 | ||
89 | smu10_wait_for_response(hwmgr); | 84 | smu10_wait_for_response(hwmgr); |
90 | 85 | ||
91 | reg = soc15_get_register_offset(MP1_HWID, 0, | 86 | WREG32_SOC15(MP1, 0, mmMP1_SMN_C2PMSG_90, 0); |
92 | mmMP1_SMN_C2PMSG_90_BASE_IDX, mmMP1_SMN_C2PMSG_90); | ||
93 | cgs_write_register(hwmgr->device, reg, 0); | ||
94 | 87 | ||
95 | smu10_send_msg_to_smc_without_waiting(hwmgr, msg); | 88 | smu10_send_msg_to_smc_without_waiting(hwmgr, msg); |
96 | 89 | ||
@@ -104,17 +97,13 @@ static int smu10_send_msg_to_smc(struct pp_hwmgr *hwmgr, uint16_t msg) | |||
104 | static int smu10_send_msg_to_smc_with_parameter(struct pp_hwmgr *hwmgr, | 97 | static int smu10_send_msg_to_smc_with_parameter(struct pp_hwmgr *hwmgr, |
105 | uint16_t msg, uint32_t parameter) | 98 | uint16_t msg, uint32_t parameter) |
106 | { | 99 | { |
107 | uint32_t reg; | 100 | struct amdgpu_device *adev = hwmgr->adev; |
108 | 101 | ||
109 | smu10_wait_for_response(hwmgr); | 102 | smu10_wait_for_response(hwmgr); |
110 | 103 | ||
111 | reg = soc15_get_register_offset(MP1_HWID, 0, | 104 | WREG32_SOC15(MP1, 0, mmMP1_SMN_C2PMSG_90, 0); |
112 | mmMP1_SMN_C2PMSG_90_BASE_IDX, mmMP1_SMN_C2PMSG_90); | ||
113 | cgs_write_register(hwmgr->device, reg, 0); | ||
114 | 105 | ||
115 | reg = soc15_get_register_offset(MP1_HWID, 0, | 106 | WREG32_SOC15(MP1, 0, mmMP1_SMN_C2PMSG_82, parameter); |
116 | mmMP1_SMN_C2PMSG_82_BASE_IDX, mmMP1_SMN_C2PMSG_82); | ||
117 | cgs_write_register(hwmgr->device, reg, parameter); | ||
118 | 107 | ||
119 | smu10_send_msg_to_smc_without_waiting(hwmgr, msg); | 108 | smu10_send_msg_to_smc_without_waiting(hwmgr, msg); |
120 | 109 | ||
diff --git a/drivers/gpu/drm/amd/powerplay/smumgr/vega10_smumgr.c b/drivers/gpu/drm/amd/powerplay/smumgr/vega10_smumgr.c index 4aafb043bcb0..14ac6d15c7a7 100644 --- a/drivers/gpu/drm/amd/powerplay/smumgr/vega10_smumgr.c +++ b/drivers/gpu/drm/amd/powerplay/smumgr/vega10_smumgr.c | |||
@@ -23,7 +23,7 @@ | |||
23 | 23 | ||
24 | #include "smumgr.h" | 24 | #include "smumgr.h" |
25 | #include "vega10_inc.h" | 25 | #include "vega10_inc.h" |
26 | #include "pp_soc15.h" | 26 | #include "soc15_common.h" |
27 | #include "vega10_smumgr.h" | 27 | #include "vega10_smumgr.h" |
28 | #include "vega10_hwmgr.h" | 28 | #include "vega10_hwmgr.h" |
29 | #include "vega10_ppsmc.h" | 29 | #include "vega10_ppsmc.h" |
@@ -54,18 +54,13 @@ | |||
54 | 54 | ||
55 | static bool vega10_is_smc_ram_running(struct pp_hwmgr *hwmgr) | 55 | static bool vega10_is_smc_ram_running(struct pp_hwmgr *hwmgr) |
56 | { | 56 | { |
57 | uint32_t mp1_fw_flags, reg; | 57 | struct amdgpu_device *adev = hwmgr->adev; |
58 | 58 | uint32_t mp1_fw_flags; | |
59 | reg = soc15_get_register_offset(NBIF_HWID, 0, | ||
60 | mmPCIE_INDEX2_BASE_IDX, mmPCIE_INDEX2); | ||
61 | 59 | ||
62 | cgs_write_register(hwmgr->device, reg, | 60 | WREG32_SOC15(NBIF, 0, mmPCIE_INDEX2, |
63 | (MP1_Public | (smnMP1_FIRMWARE_FLAGS & 0xffffffff))); | 61 | (MP1_Public | (smnMP1_FIRMWARE_FLAGS & 0xffffffff))); |
64 | 62 | ||
65 | reg = soc15_get_register_offset(NBIF_HWID, 0, | 63 | mp1_fw_flags = RREG32_SOC15(NBIF, 0, mmPCIE_DATA2); |
66 | mmPCIE_DATA2_BASE_IDX, mmPCIE_DATA2); | ||
67 | |||
68 | mp1_fw_flags = cgs_read_register(hwmgr->device, reg); | ||
69 | 64 | ||
70 | if (mp1_fw_flags & MP1_FIRMWARE_FLAGS__INTERRUPTS_ENABLED_MASK) | 65 | if (mp1_fw_flags & MP1_FIRMWARE_FLAGS__INTERRUPTS_ENABLED_MASK) |
71 | return true; | 66 | return true; |
@@ -81,11 +76,11 @@ static bool vega10_is_smc_ram_running(struct pp_hwmgr *hwmgr) | |||
81 | */ | 76 | */ |
82 | static uint32_t vega10_wait_for_response(struct pp_hwmgr *hwmgr) | 77 | static uint32_t vega10_wait_for_response(struct pp_hwmgr *hwmgr) |
83 | { | 78 | { |
79 | struct amdgpu_device *adev = hwmgr->adev; | ||
84 | uint32_t reg; | 80 | uint32_t reg; |
85 | uint32_t ret; | 81 | uint32_t ret; |
86 | 82 | ||
87 | reg = soc15_get_register_offset(MP1_HWID, 0, | 83 | reg = SOC15_REG_OFFSET(MP1, 0, mmMP1_SMN_C2PMSG_90); |
88 | mmMP1_SMN_C2PMSG_90_BASE_IDX, mmMP1_SMN_C2PMSG_90); | ||
89 | 84 | ||
90 | ret = phm_wait_for_register_unequal(hwmgr, reg, | 85 | ret = phm_wait_for_register_unequal(hwmgr, reg, |
91 | 0, MP1_C2PMSG_90__CONTENT_MASK); | 86 | 0, MP1_C2PMSG_90__CONTENT_MASK); |
@@ -93,7 +88,7 @@ static uint32_t vega10_wait_for_response(struct pp_hwmgr *hwmgr) | |||
93 | if (ret) | 88 | if (ret) |
94 | pr_err("No response from smu\n"); | 89 | pr_err("No response from smu\n"); |
95 | 90 | ||
96 | return cgs_read_register(hwmgr->device, reg); | 91 | return RREG32_SOC15(MP1, 0, mmMP1_SMN_C2PMSG_90); |
97 | } | 92 | } |
98 | 93 | ||
99 | /* | 94 | /* |
@@ -105,11 +100,9 @@ static uint32_t vega10_wait_for_response(struct pp_hwmgr *hwmgr) | |||
105 | static int vega10_send_msg_to_smc_without_waiting(struct pp_hwmgr *hwmgr, | 100 | static int vega10_send_msg_to_smc_without_waiting(struct pp_hwmgr *hwmgr, |
106 | uint16_t msg) | 101 | uint16_t msg) |
107 | { | 102 | { |
108 | uint32_t reg; | 103 | struct amdgpu_device *adev = hwmgr->adev; |
109 | 104 | ||
110 | reg = soc15_get_register_offset(MP1_HWID, 0, | 105 | WREG32_SOC15(MP1, 0, mmMP1_SMN_C2PMSG_66, msg); |
111 | mmMP1_SMN_C2PMSG_66_BASE_IDX, mmMP1_SMN_C2PMSG_66); | ||
112 | cgs_write_register(hwmgr->device, reg, msg); | ||
113 | 106 | ||
114 | return 0; | 107 | return 0; |
115 | } | 108 | } |
@@ -122,14 +115,12 @@ static int vega10_send_msg_to_smc_without_waiting(struct pp_hwmgr *hwmgr, | |||
122 | */ | 115 | */ |
123 | static int vega10_send_msg_to_smc(struct pp_hwmgr *hwmgr, uint16_t msg) | 116 | static int vega10_send_msg_to_smc(struct pp_hwmgr *hwmgr, uint16_t msg) |
124 | { | 117 | { |
125 | uint32_t reg; | 118 | struct amdgpu_device *adev = hwmgr->adev; |
126 | uint32_t ret; | 119 | uint32_t ret; |
127 | 120 | ||
128 | vega10_wait_for_response(hwmgr); | 121 | vega10_wait_for_response(hwmgr); |
129 | 122 | ||
130 | reg = soc15_get_register_offset(MP1_HWID, 0, | 123 | WREG32_SOC15(MP1, 0, mmMP1_SMN_C2PMSG_90, 0); |
131 | mmMP1_SMN_C2PMSG_90_BASE_IDX, mmMP1_SMN_C2PMSG_90); | ||
132 | cgs_write_register(hwmgr->device, reg, 0); | ||
133 | 124 | ||
134 | vega10_send_msg_to_smc_without_waiting(hwmgr, msg); | 125 | vega10_send_msg_to_smc_without_waiting(hwmgr, msg); |
135 | 126 | ||
@@ -150,18 +141,14 @@ static int vega10_send_msg_to_smc(struct pp_hwmgr *hwmgr, uint16_t msg) | |||
150 | static int vega10_send_msg_to_smc_with_parameter(struct pp_hwmgr *hwmgr, | 141 | static int vega10_send_msg_to_smc_with_parameter(struct pp_hwmgr *hwmgr, |
151 | uint16_t msg, uint32_t parameter) | 142 | uint16_t msg, uint32_t parameter) |
152 | { | 143 | { |
153 | uint32_t reg; | 144 | struct amdgpu_device *adev = hwmgr->adev; |
154 | uint32_t ret; | 145 | uint32_t ret; |
155 | 146 | ||
156 | vega10_wait_for_response(hwmgr); | 147 | vega10_wait_for_response(hwmgr); |
157 | 148 | ||
158 | reg = soc15_get_register_offset(MP1_HWID, 0, | 149 | WREG32_SOC15(MP1, 0, mmMP1_SMN_C2PMSG_90, 0); |
159 | mmMP1_SMN_C2PMSG_90_BASE_IDX, mmMP1_SMN_C2PMSG_90); | ||
160 | cgs_write_register(hwmgr->device, reg, 0); | ||
161 | 150 | ||
162 | reg = soc15_get_register_offset(MP1_HWID, 0, | 151 | WREG32_SOC15(MP1, 0, mmMP1_SMN_C2PMSG_82, parameter); |
163 | mmMP1_SMN_C2PMSG_82_BASE_IDX, mmMP1_SMN_C2PMSG_82); | ||
164 | cgs_write_register(hwmgr->device, reg, parameter); | ||
165 | 152 | ||
166 | vega10_send_msg_to_smc_without_waiting(hwmgr, msg); | 153 | vega10_send_msg_to_smc_without_waiting(hwmgr, msg); |
167 | 154 | ||
@@ -174,12 +161,9 @@ static int vega10_send_msg_to_smc_with_parameter(struct pp_hwmgr *hwmgr, | |||
174 | 161 | ||
175 | static int vega10_get_argument(struct pp_hwmgr *hwmgr) | 162 | static int vega10_get_argument(struct pp_hwmgr *hwmgr) |
176 | { | 163 | { |
177 | uint32_t reg; | 164 | struct amdgpu_device *adev = hwmgr->adev; |
178 | |||
179 | reg = soc15_get_register_offset(MP1_HWID, 0, | ||
180 | mmMP1_SMN_C2PMSG_82_BASE_IDX, mmMP1_SMN_C2PMSG_82); | ||
181 | 165 | ||
182 | return cgs_read_register(hwmgr->device, reg); | 166 | return RREG32_SOC15(MP1, 0, mmMP1_SMN_C2PMSG_82); |
183 | } | 167 | } |
184 | 168 | ||
185 | static int vega10_copy_table_from_smc(struct pp_hwmgr *hwmgr, | 169 | static int vega10_copy_table_from_smc(struct pp_hwmgr *hwmgr, |
diff --git a/drivers/gpu/drm/amd/powerplay/smumgr/vega12_smumgr.c b/drivers/gpu/drm/amd/powerplay/smumgr/vega12_smumgr.c index 651a3f28734b..7d9b40e8b1bf 100644 --- a/drivers/gpu/drm/amd/powerplay/smumgr/vega12_smumgr.c +++ b/drivers/gpu/drm/amd/powerplay/smumgr/vega12_smumgr.c | |||
@@ -23,7 +23,7 @@ | |||
23 | 23 | ||
24 | #include "smumgr.h" | 24 | #include "smumgr.h" |
25 | #include "vega12_inc.h" | 25 | #include "vega12_inc.h" |
26 | #include "pp_soc15.h" | 26 | #include "soc15_common.h" |
27 | #include "vega12_smumgr.h" | 27 | #include "vega12_smumgr.h" |
28 | #include "vega12_ppsmc.h" | 28 | #include "vega12_ppsmc.h" |
29 | #include "vega12/smu9_driver_if.h" | 29 | #include "vega12/smu9_driver_if.h" |
@@ -44,18 +44,13 @@ | |||
44 | 44 | ||
45 | static bool vega12_is_smc_ram_running(struct pp_hwmgr *hwmgr) | 45 | static bool vega12_is_smc_ram_running(struct pp_hwmgr *hwmgr) |
46 | { | 46 | { |
47 | uint32_t mp1_fw_flags, reg; | 47 | struct amdgpu_device *adev = hwmgr->adev; |
48 | uint32_t mp1_fw_flags; | ||
48 | 49 | ||
49 | reg = soc15_get_register_offset(NBIF_HWID, 0, | 50 | WREG32_SOC15(NBIF, 0, mmPCIE_INDEX2, |
50 | mmPCIE_INDEX2_BASE_IDX, mmPCIE_INDEX2); | ||
51 | |||
52 | cgs_write_register(hwmgr->device, reg, | ||
53 | (MP1_Public | (smnMP1_FIRMWARE_FLAGS & 0xffffffff))); | 51 | (MP1_Public | (smnMP1_FIRMWARE_FLAGS & 0xffffffff))); |
54 | 52 | ||
55 | reg = soc15_get_register_offset(NBIF_HWID, 0, | 53 | mp1_fw_flags = RREG32_SOC15(NBIF, 0, mmPCIE_DATA2); |
56 | mmPCIE_DATA2_BASE_IDX, mmPCIE_DATA2); | ||
57 | |||
58 | mp1_fw_flags = cgs_read_register(hwmgr->device, reg); | ||
59 | 54 | ||
60 | if ((mp1_fw_flags & MP1_FIRMWARE_FLAGS__INTERRUPTS_ENABLED_MASK) >> | 55 | if ((mp1_fw_flags & MP1_FIRMWARE_FLAGS__INTERRUPTS_ENABLED_MASK) >> |
61 | MP1_FIRMWARE_FLAGS__INTERRUPTS_ENABLED__SHIFT) | 56 | MP1_FIRMWARE_FLAGS__INTERRUPTS_ENABLED__SHIFT) |
@@ -72,15 +67,15 @@ static bool vega12_is_smc_ram_running(struct pp_hwmgr *hwmgr) | |||
72 | */ | 67 | */ |
73 | static uint32_t vega12_wait_for_response(struct pp_hwmgr *hwmgr) | 68 | static uint32_t vega12_wait_for_response(struct pp_hwmgr *hwmgr) |
74 | { | 69 | { |
70 | struct amdgpu_device *adev = hwmgr->adev; | ||
75 | uint32_t reg; | 71 | uint32_t reg; |
76 | 72 | ||
77 | reg = soc15_get_register_offset(MP1_HWID, 0, | 73 | reg = SOC15_REG_OFFSET(MP1, 0, mmMP1_SMN_C2PMSG_90); |
78 | mmMP1_SMN_C2PMSG_90_BASE_IDX, mmMP1_SMN_C2PMSG_90); | ||
79 | 74 | ||
80 | phm_wait_for_register_unequal(hwmgr, reg, | 75 | phm_wait_for_register_unequal(hwmgr, reg, |
81 | 0, MP1_C2PMSG_90__CONTENT_MASK); | 76 | 0, MP1_C2PMSG_90__CONTENT_MASK); |
82 | 77 | ||
83 | return cgs_read_register(hwmgr->device, reg); | 78 | return RREG32_SOC15(MP1, 0, mmMP1_SMN_C2PMSG_90); |
84 | } | 79 | } |
85 | 80 | ||
86 | /* | 81 | /* |
@@ -92,11 +87,9 @@ static uint32_t vega12_wait_for_response(struct pp_hwmgr *hwmgr) | |||
92 | int vega12_send_msg_to_smc_without_waiting(struct pp_hwmgr *hwmgr, | 87 | int vega12_send_msg_to_smc_without_waiting(struct pp_hwmgr *hwmgr, |
93 | uint16_t msg) | 88 | uint16_t msg) |
94 | { | 89 | { |
95 | uint32_t reg; | 90 | struct amdgpu_device *adev = hwmgr->adev; |
96 | 91 | ||
97 | reg = soc15_get_register_offset(MP1_HWID, 0, | 92 | WREG32_SOC15(MP1, 0, mmMP1_SMN_C2PMSG_66, msg); |
98 | mmMP1_SMN_C2PMSG_66_BASE_IDX, mmMP1_SMN_C2PMSG_66); | ||
99 | cgs_write_register(hwmgr->device, reg, msg); | ||
100 | 93 | ||
101 | return 0; | 94 | return 0; |
102 | } | 95 | } |
@@ -109,13 +102,11 @@ int vega12_send_msg_to_smc_without_waiting(struct pp_hwmgr *hwmgr, | |||
109 | */ | 102 | */ |
110 | int vega12_send_msg_to_smc(struct pp_hwmgr *hwmgr, uint16_t msg) | 103 | int vega12_send_msg_to_smc(struct pp_hwmgr *hwmgr, uint16_t msg) |
111 | { | 104 | { |
112 | uint32_t reg; | 105 | struct amdgpu_device *adev = hwmgr->adev; |
113 | 106 | ||
114 | vega12_wait_for_response(hwmgr); | 107 | vega12_wait_for_response(hwmgr); |
115 | 108 | ||
116 | reg = soc15_get_register_offset(MP1_HWID, 0, | 109 | WREG32_SOC15(MP1, 0, mmMP1_SMN_C2PMSG_90, 0); |
117 | mmMP1_SMN_C2PMSG_90_BASE_IDX, mmMP1_SMN_C2PMSG_90); | ||
118 | cgs_write_register(hwmgr->device, reg, 0); | ||
119 | 110 | ||
120 | vega12_send_msg_to_smc_without_waiting(hwmgr, msg); | 111 | vega12_send_msg_to_smc_without_waiting(hwmgr, msg); |
121 | 112 | ||
@@ -135,17 +126,13 @@ int vega12_send_msg_to_smc(struct pp_hwmgr *hwmgr, uint16_t msg) | |||
135 | int vega12_send_msg_to_smc_with_parameter(struct pp_hwmgr *hwmgr, | 126 | int vega12_send_msg_to_smc_with_parameter(struct pp_hwmgr *hwmgr, |
136 | uint16_t msg, uint32_t parameter) | 127 | uint16_t msg, uint32_t parameter) |
137 | { | 128 | { |
138 | uint32_t reg; | 129 | struct amdgpu_device *adev = hwmgr->adev; |
139 | 130 | ||
140 | vega12_wait_for_response(hwmgr); | 131 | vega12_wait_for_response(hwmgr); |
141 | 132 | ||
142 | reg = soc15_get_register_offset(MP1_HWID, 0, | 133 | WREG32_SOC15(MP1, 0, mmMP1_SMN_C2PMSG_90, 0); |
143 | mmMP1_SMN_C2PMSG_90_BASE_IDX, mmMP1_SMN_C2PMSG_90); | ||
144 | cgs_write_register(hwmgr->device, reg, 0); | ||
145 | 134 | ||
146 | reg = soc15_get_register_offset(MP1_HWID, 0, | 135 | WREG32_SOC15(MP1, 0, mmMP1_SMN_C2PMSG_82, parameter); |
147 | mmMP1_SMN_C2PMSG_82_BASE_IDX, mmMP1_SMN_C2PMSG_82); | ||
148 | cgs_write_register(hwmgr->device, reg, parameter); | ||
149 | 136 | ||
150 | vega12_send_msg_to_smc_without_waiting(hwmgr, msg); | 137 | vega12_send_msg_to_smc_without_waiting(hwmgr, msg); |
151 | 138 | ||
@@ -166,11 +153,9 @@ int vega12_send_msg_to_smc_with_parameter(struct pp_hwmgr *hwmgr, | |||
166 | int vega12_send_msg_to_smc_with_parameter_without_waiting( | 153 | int vega12_send_msg_to_smc_with_parameter_without_waiting( |
167 | struct pp_hwmgr *hwmgr, uint16_t msg, uint32_t parameter) | 154 | struct pp_hwmgr *hwmgr, uint16_t msg, uint32_t parameter) |
168 | { | 155 | { |
169 | uint32_t reg; | 156 | struct amdgpu_device *adev = hwmgr->adev; |
170 | 157 | ||
171 | reg = soc15_get_register_offset(MP1_HWID, 0, | 158 | WREG32_SOC15(MP1, 0, mmMP1_SMN_C2PMSG_66, parameter); |
172 | mmMP1_SMN_C2PMSG_66_BASE_IDX, mmMP1_SMN_C2PMSG_66); | ||
173 | cgs_write_register(hwmgr->device, reg, parameter); | ||
174 | 159 | ||
175 | return vega12_send_msg_to_smc_without_waiting(hwmgr, msg); | 160 | return vega12_send_msg_to_smc_without_waiting(hwmgr, msg); |
176 | } | 161 | } |
@@ -183,12 +168,9 @@ int vega12_send_msg_to_smc_with_parameter_without_waiting( | |||
183 | */ | 168 | */ |
184 | int vega12_read_arg_from_smc(struct pp_hwmgr *hwmgr, uint32_t *arg) | 169 | int vega12_read_arg_from_smc(struct pp_hwmgr *hwmgr, uint32_t *arg) |
185 | { | 170 | { |
186 | uint32_t reg; | 171 | struct amdgpu_device *adev = hwmgr->adev; |
187 | |||
188 | reg = soc15_get_register_offset(MP1_HWID, 0, | ||
189 | mmMP1_SMN_C2PMSG_82_BASE_IDX, mmMP1_SMN_C2PMSG_82); | ||
190 | 172 | ||
191 | *arg = cgs_read_register(hwmgr->device, reg); | 173 | *arg = RREG32_SOC15(MP1, 0, mmMP1_SMN_C2PMSG_82); |
192 | 174 | ||
193 | return 0; | 175 | return 0; |
194 | } | 176 | } |