aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3816-drm-amd-pp-Move-functions-to-smu-backend-table-for-v.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3816-drm-amd-pp-Move-functions-to-smu-backend-table-for-v.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3816-drm-amd-pp-Move-functions-to-smu-backend-table-for-v.patch357
1 files changed, 357 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3816-drm-amd-pp-Move-functions-to-smu-backend-table-for-v.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3816-drm-amd-pp-Move-functions-to-smu-backend-table-for-v.patch
new file mode 100644
index 00000000..b5a934b5
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3816-drm-amd-pp-Move-functions-to-smu-backend-table-for-v.patch
@@ -0,0 +1,357 @@
+From ca278304c96d37e534c22e33b4a8f41d7b133269 Mon Sep 17 00:00:00 2001
+From: Rex Zhu <Rex.Zhu@amd.com>
+Date: Fri, 16 Mar 2018 15:16:10 +0800
+Subject: [PATCH 3816/4131] drm/amd/pp: Move functions to smu backend table for
+ vega10
+
+Change-Id: Ie0f0816ccdcd99309f5523408f98e1cb527137b2
+Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
+Reviewed-by: Evan Quan <evan.quan@amd.com>
+Signed-off-by: Rex Zhu <Rex.Zhu@amd.com>
+---
+ drivers/gpu/drm/amd/powerplay/hwmgr/vega10_hwmgr.c | 36 ++++++++---------
+ .../gpu/drm/amd/powerplay/hwmgr/vega10_thermal.c | 7 ++--
+ drivers/gpu/drm/amd/powerplay/inc/smumgr.h | 8 ++++
+ drivers/gpu/drm/amd/powerplay/smumgr/smu8_smumgr.c | 4 +-
+ .../gpu/drm/amd/powerplay/smumgr/vega10_smumgr.c | 45 ++++++++++------------
+ .../gpu/drm/amd/powerplay/smumgr/vega10_smumgr.h | 14 +------
+ 6 files changed, 53 insertions(+), 61 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_hwmgr.c b/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_hwmgr.c
+index e1e97cf..0e82f90 100644
+--- a/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_hwmgr.c
++++ b/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_hwmgr.c
+@@ -427,7 +427,7 @@ static void vega10_init_dpm_defaults(struct pp_hwmgr *hwmgr)
+ data->smu_features[GNLD_VR0HOT].supported = true;
+
+ smum_send_msg_to_smc(hwmgr, PPSMC_MSG_GetSmuVersion);
+- vega10_read_arg_from_smc(hwmgr, &(hwmgr->smu_version));
++ hwmgr->smu_version = smum_get_argument(hwmgr);
+ /* ACG firmware has major version 5 */
+ if ((hwmgr->smu_version & 0xff000000) == 0x5000000)
+ data->smu_features[GNLD_ACG].supported = true;
+@@ -2273,7 +2273,7 @@ static int vega10_acg_enable(struct pp_hwmgr *hwmgr)
+ smum_send_msg_to_smc(hwmgr, PPSMC_MSG_InitializeAcg);
+
+ smum_send_msg_to_smc(hwmgr, PPSMC_MSG_RunAcgBtc);
+- vega10_read_arg_from_smc(hwmgr, &agc_btc_response);
++ agc_btc_response = smum_get_argument(hwmgr);
+
+ if (1 == agc_btc_response) {
+ if (1 == data->acg_loop_state)
+@@ -2380,10 +2380,10 @@ static int vega10_populate_and_upload_avfs_fuse_override(struct pp_hwmgr *hwmgr)
+ AvfsFuseOverride_t *avfs_fuse_table = &(data->smc_state_table.avfs_fuse_override_table);
+
+ smum_send_msg_to_smc(hwmgr, PPSMC_MSG_ReadSerialNumTop32);
+- vega10_read_arg_from_smc(hwmgr, &top32);
++ top32 = smum_get_argument(hwmgr);
+
+ smum_send_msg_to_smc(hwmgr, PPSMC_MSG_ReadSerialNumBottom32);
+- vega10_read_arg_from_smc(hwmgr, &bottom32);
++ bottom32 = smum_get_argument(hwmgr);
+
+ serial_number = ((uint64_t)bottom32 << 32) | top32;
+
+@@ -2397,8 +2397,8 @@ static int vega10_populate_and_upload_avfs_fuse_override(struct pp_hwmgr *hwmgr)
+ avfs_fuse_table->VFT2_b = fuse.VFT2_b;
+ avfs_fuse_table->VFT2_m1 = fuse.VFT2_m1;
+ avfs_fuse_table->VFT2_m2 = fuse.VFT2_m2;
+- result = vega10_copy_table_to_smc(hwmgr,
+- (uint8_t *)avfs_fuse_table, AVFSFUSETABLE);
++ result = smum_smc_table_manager(hwmgr, (uint8_t *)avfs_fuse_table,
++ AVFSFUSETABLE, false);
+ PP_ASSERT_WITH_CODE(!result,
+ "Failed to upload FuseOVerride!",
+ );
+@@ -2541,8 +2541,8 @@ static int vega10_init_smc_table(struct pp_hwmgr *hwmgr)
+
+ vega10_populate_and_upload_avfs_fuse_override(hwmgr);
+
+- result = vega10_copy_table_to_smc(hwmgr,
+- (uint8_t *)pp_table, PPTABLE);
++ result = smum_smc_table_manager(hwmgr, (uint8_t *)pp_table, PPTABLE, false);
++
+ PP_ASSERT_WITH_CODE(!result,
+ "Failed to upload PPtable!", return result);
+
+@@ -3779,8 +3779,7 @@ static int vega10_set_power_state_tasks(struct pp_hwmgr *hwmgr,
+ "Failed to update SCLK threshold!",
+ result = tmp_result);
+
+- result = vega10_copy_table_to_smc(hwmgr,
+- (uint8_t *)pp_table, PPTABLE);
++ result = smum_smc_table_manager(hwmgr, (uint8_t *)pp_table, PPTABLE, false);
+ PP_ASSERT_WITH_CODE(!result,
+ "Failed to upload PPtable!", return result);
+
+@@ -3840,7 +3839,7 @@ static int vega10_get_gpu_power(struct pp_hwmgr *hwmgr,
+ uint32_t value;
+
+ smum_send_msg_to_smc(hwmgr, PPSMC_MSG_GetCurrPkgPwr);
+- vega10_read_arg_from_smc(hwmgr, &value);
++ value = smum_get_argument(hwmgr);
+
+ /* power value is an integer */
+ memset(query, 0, sizeof *query);
+@@ -3861,7 +3860,7 @@ static int vega10_read_sensor(struct pp_hwmgr *hwmgr, int idx,
+ switch (idx) {
+ case AMDGPU_PP_SENSOR_GFX_SCLK:
+ smum_send_msg_to_smc(hwmgr, PPSMC_MSG_GetCurrentGfxclkIndex);
+- vega10_read_arg_from_smc(hwmgr, &sclk_idx);
++ sclk_idx = smum_get_argument(hwmgr);
+ if (sclk_idx < dpm_table->gfx_table.count) {
+ *((uint32_t *)value) = dpm_table->gfx_table.dpm_levels[sclk_idx].value;
+ *size = 4;
+@@ -3871,7 +3870,7 @@ static int vega10_read_sensor(struct pp_hwmgr *hwmgr, int idx,
+ break;
+ case AMDGPU_PP_SENSOR_GFX_MCLK:
+ smum_send_msg_to_smc(hwmgr, PPSMC_MSG_GetCurrentUclkIndex);
+- vega10_read_arg_from_smc(hwmgr, &mclk_idx);
++ mclk_idx = smum_get_argument(hwmgr);
+ if (mclk_idx < dpm_table->mem_table.count) {
+ *((uint32_t *)value) = dpm_table->mem_table.dpm_levels[mclk_idx].value;
+ *size = 4;
+@@ -3881,7 +3880,7 @@ static int vega10_read_sensor(struct pp_hwmgr *hwmgr, int idx,
+ break;
+ case AMDGPU_PP_SENSOR_GPU_LOAD:
+ smum_send_msg_to_smc_with_parameter(hwmgr, PPSMC_MSG_GetAverageGfxActivity, 0);
+- vega10_read_arg_from_smc(hwmgr, &activity_percent);
++ activity_percent = smum_get_argument(hwmgr);
+ *((uint32_t *)value) = activity_percent > 100 ? 100 : activity_percent;
+ *size = 4;
+ break;
+@@ -4507,7 +4506,7 @@ static int vega10_print_clock_levels(struct pp_hwmgr *hwmgr,
+ break;
+
+ smum_send_msg_to_smc(hwmgr, PPSMC_MSG_GetCurrentGfxclkIndex);
+- vega10_read_arg_from_smc(hwmgr, &now);
++ now = smum_get_argument(hwmgr);
+
+ for (i = 0; i < sclk_table->count; i++)
+ size += sprintf(buf + size, "%d: %uMhz %s\n",
+@@ -4519,7 +4518,7 @@ static int vega10_print_clock_levels(struct pp_hwmgr *hwmgr,
+ break;
+
+ smum_send_msg_to_smc(hwmgr, PPSMC_MSG_GetCurrentUclkIndex);
+- vega10_read_arg_from_smc(hwmgr, &now);
++ now = smum_get_argument(hwmgr);
+
+ for (i = 0; i < mclk_table->count; i++)
+ size += sprintf(buf + size, "%d: %uMhz %s\n",
+@@ -4528,7 +4527,7 @@ static int vega10_print_clock_levels(struct pp_hwmgr *hwmgr,
+ break;
+ case PP_PCIE:
+ smum_send_msg_to_smc(hwmgr, PPSMC_MSG_GetCurrentLinkIndex);
+- vega10_read_arg_from_smc(hwmgr, &now);
++ now = smum_get_argument(hwmgr);
+
+ for (i = 0; i < pcie_table->count; i++)
+ size += sprintf(buf + size, "%d: %s %s\n", i,
+@@ -4553,8 +4552,7 @@ static int vega10_display_configuration_changed_task(struct pp_hwmgr *hwmgr)
+
+ if ((data->water_marks_bitmap & WaterMarksExist) &&
+ !(data->water_marks_bitmap & WaterMarksLoaded)) {
+- result = vega10_copy_table_to_smc(hwmgr,
+- (uint8_t *)wm_table, WMTABLE);
++ result = smum_smc_table_manager(hwmgr, (uint8_t *)wm_table, WMTABLE, false);
+ PP_ASSERT_WITH_CODE(result, "Failed to update WMTABLE!", return EINVAL);
+ data->water_marks_bitmap |= WaterMarksLoaded;
+ }
+diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_thermal.c b/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_thermal.c
+index fc2325e..0c1707a 100644
+--- a/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_thermal.c
++++ b/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_thermal.c
+@@ -32,7 +32,7 @@
+ static int vega10_get_current_rpm(struct pp_hwmgr *hwmgr, uint32_t *current_rpm)
+ {
+ smum_send_msg_to_smc(hwmgr, PPSMC_MSG_GetCurrentRpm);
+- vega10_read_arg_from_smc(hwmgr, current_rpm);
++ *current_rpm = smum_get_argument(hwmgr);
+ return 0;
+ }
+
+@@ -571,8 +571,9 @@ int vega10_thermal_setup_fan_table(struct pp_hwmgr *hwmgr)
+ table->FanStartTemp = hwmgr->thermal_controller.
+ advanceFanControlParameters.usZeroRPMStartTemperature;
+
+- ret = vega10_copy_table_to_smc(hwmgr,
+- (uint8_t *)(&(data->smc_state_table.pp_table)), PPTABLE);
++ ret = smum_smc_table_manager(hwmgr,
++ (uint8_t *)(&(data->smc_state_table.pp_table)),
++ PPTABLE, false);
+ if (ret)
+ pr_info("Failed to update Fan Control Table in PPTable!");
+
+diff --git a/drivers/gpu/drm/amd/powerplay/inc/smumgr.h b/drivers/gpu/drm/amd/powerplay/inc/smumgr.h
+index fc3a2a5..6c22ed9 100644
+--- a/drivers/gpu/drm/amd/powerplay/inc/smumgr.h
++++ b/drivers/gpu/drm/amd/powerplay/inc/smumgr.h
+@@ -69,6 +69,14 @@ enum SMU_MAC_DEFINITION {
+ SMU_UVD_MCLK_HANDSHAKE_DISABLE,
+ };
+
++enum SMU9_TABLE_ID {
++ PPTABLE = 0,
++ WMTABLE,
++ AVFSTABLE,
++ TOOLSTABLE,
++ AVFSFUSETABLE
++};
++
+ enum SMU10_TABLE_ID {
+ SMU10_WMTABLE = 0,
+ SMU10_CLOCKTABLE,
+diff --git a/drivers/gpu/drm/amd/powerplay/smumgr/smu8_smumgr.c b/drivers/gpu/drm/amd/powerplay/smumgr/smu8_smumgr.c
+index 8c49704..c861d30 100644
+--- a/drivers/gpu/drm/amd/powerplay/smumgr/smu8_smumgr.c
++++ b/drivers/gpu/drm/amd/powerplay/smumgr/smu8_smumgr.c
+@@ -52,7 +52,7 @@ static const enum smu8_scratch_entry firmware_list[] = {
+ SMU8_SCRATCH_ENTRY_UCODE_ID_RLC_G,
+ };
+
+-static int smu8_smum_get_argument(struct pp_hwmgr *hwmgr)
++static int smu8_get_argument(struct pp_hwmgr *hwmgr)
+ {
+ if (hwmgr == NULL || hwmgr->device == NULL)
+ return -EINVAL;
+@@ -881,7 +881,7 @@ const struct pp_smumgr_func smu8_smu_funcs = {
+ .check_fw_load_finish = smu8_check_fw_load_finish,
+ .request_smu_load_fw = NULL,
+ .request_smu_load_specific_fw = NULL,
+- .get_argument = smu8_smum_get_argument,
++ .get_argument = smu8_get_argument,
+ .send_msg_to_smc = smu8_send_msg_to_smc,
+ .send_msg_to_smc_with_parameter = smu8_send_msg_to_smc_with_parameter,
+ .download_pptable_settings = smu8_download_pptable_settings,
+diff --git a/drivers/gpu/drm/amd/powerplay/smumgr/vega10_smumgr.c b/drivers/gpu/drm/amd/powerplay/smumgr/vega10_smumgr.c
+index d40edd5..af848de 100644
+--- a/drivers/gpu/drm/amd/powerplay/smumgr/vega10_smumgr.c
++++ b/drivers/gpu/drm/amd/powerplay/smumgr/vega10_smumgr.c
+@@ -171,30 +171,17 @@ static int vega10_send_msg_to_smc_with_parameter(struct pp_hwmgr *hwmgr,
+ return 0;
+ }
+
+-/*
+- * Retrieve an argument from SMC.
+- * @param hwmgr the address of the powerplay hardware manager.
+- * @param arg pointer to store the argument from SMC.
+- * @return Always return 0.
+- */
+-int vega10_read_arg_from_smc(struct pp_hwmgr *hwmgr, uint32_t *arg)
++static int vega10_get_argument(struct pp_hwmgr *hwmgr)
+ {
+ uint32_t reg;
+
+ reg = soc15_get_register_offset(MP1_HWID, 0,
+ mmMP1_SMN_C2PMSG_82_BASE_IDX, mmMP1_SMN_C2PMSG_82);
+
+- *arg = cgs_read_register(hwmgr->device, reg);
+-
+- return 0;
++ return cgs_read_register(hwmgr->device, reg);
+ }
+
+-/*
+- * Copy table from SMC into driver FB
+- * @param hwmgr the address of the HW manager
+- * @param table_id the driver's table ID to copy from
+- */
+-int vega10_copy_table_from_smc(struct pp_hwmgr *hwmgr,
++static int vega10_copy_table_from_smc(struct pp_hwmgr *hwmgr,
+ uint8_t *table, int16_t table_id)
+ {
+ struct vega10_smumgr *priv =
+@@ -222,12 +209,7 @@ int vega10_copy_table_from_smc(struct pp_hwmgr *hwmgr,
+ return 0;
+ }
+
+-/*
+- * Copy table from Driver FB into SMC
+- * @param hwmgr the address of the HW manager
+- * @param table_id the table to copy from
+- */
+-int vega10_copy_table_to_smc(struct pp_hwmgr *hwmgr,
++static int vega10_copy_table_to_smc(struct pp_hwmgr *hwmgr,
+ uint8_t *table, int16_t table_id)
+ {
+ struct vega10_smumgr *priv =
+@@ -273,7 +255,8 @@ static int vega10_get_smc_features(struct pp_hwmgr *hwmgr,
+ return -EINVAL;
+
+ vega10_send_msg_to_smc(hwmgr, PPSMC_MSG_GetEnabledSmuFeatures);
+- vega10_read_arg_from_smc(hwmgr, features_enabled);
++ *features_enabled = vega10_get_argument(hwmgr);
++
+ return 0;
+ }
+
+@@ -316,7 +299,7 @@ static int vega10_verify_smc_interface(struct pp_hwmgr *hwmgr)
+ PPSMC_MSG_GetDriverIfVersion),
+ "Attempt to get SMC IF Version Number Failed!",
+ return -EINVAL);
+- vega10_read_arg_from_smc(hwmgr, &smc_driver_if_version);
++ smc_driver_if_version = vega10_get_argument(hwmgr);
+
+ dev_id = adev->pdev->device;
+ rev_id = adev->pdev->revision;
+@@ -501,6 +484,18 @@ static int vega10_start_smu(struct pp_hwmgr *hwmgr)
+ return 0;
+ }
+
++static int vega10_smc_table_manager(struct pp_hwmgr *hwmgr, uint8_t *table, uint16_t table_id, bool rw)
++{
++ int ret;
++
++ if (rw)
++ ret = vega10_copy_table_from_smc(hwmgr, table, table_id);
++ else
++ ret = vega10_copy_table_to_smc(hwmgr, table, table_id);
++
++ return ret;
++}
++
+ const struct pp_smumgr_func vega10_smu_funcs = {
+ .smu_init = &vega10_smu_init,
+ .smu_fini = &vega10_smu_fini,
+@@ -511,4 +506,6 @@ const struct pp_smumgr_func vega10_smu_funcs = {
+ .download_pptable_settings = NULL,
+ .upload_pptable_settings = NULL,
+ .is_dpm_running = vega10_is_dpm_running,
++ .get_argument = vega10_get_argument,
++ .smc_table_manager = vega10_smc_table_manager,
+ };
+diff --git a/drivers/gpu/drm/amd/powerplay/smumgr/vega10_smumgr.h b/drivers/gpu/drm/amd/powerplay/smumgr/vega10_smumgr.h
+index 1f7f137..e8f8f78 100644
+--- a/drivers/gpu/drm/amd/powerplay/smumgr/vega10_smumgr.h
++++ b/drivers/gpu/drm/amd/powerplay/smumgr/vega10_smumgr.h
+@@ -25,14 +25,7 @@
+
+ #include "vega10_hwmgr.h"
+
+-enum smu_table_id {
+- PPTABLE = 0,
+- WMTABLE,
+- AVFSTABLE,
+- TOOLSTABLE,
+- AVFSFUSETABLE,
+- MAX_SMU_TABLE,
+-};
++#define MAX_SMU_TABLE 5
+
+ struct smu_table_entry {
+ uint32_t version;
+@@ -51,11 +44,6 @@ struct vega10_smumgr {
+ struct smu_table_array smu_tables;
+ };
+
+-int vega10_read_arg_from_smc(struct pp_hwmgr *hwmgr, uint32_t *arg);
+-int vega10_copy_table_from_smc(struct pp_hwmgr *hwmgr,
+- uint8_t *table, int16_t table_id);
+-int vega10_copy_table_to_smc(struct pp_hwmgr *hwmgr,
+- uint8_t *table, int16_t table_id);
+ int vega10_enable_smc_features(struct pp_hwmgr *hwmgr,
+ bool enable, uint32_t feature_mask);
+
+--
+2.7.4
+