mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-08 05:43:28 -04:00
drm/amdgpu/powerplay: add initial swSMU support for sienna_cichlid (v2)
SMU11 based similar to navi1x. v2: squash in SMU IF updates Signed-off-by: Likun Gao <Likun.Gao@amd.com> Reviewed-by: Evan Quan <evan.quan@amd.com> Reviewed-by: Kevin Wang <kevin1.wang@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
@@ -35,7 +35,7 @@ AMD_POWERPLAY = $(addsuffix /Makefile,$(addprefix $(FULL_AMD_PATH)/powerplay/,$(
|
||||
|
||||
include $(AMD_POWERPLAY)
|
||||
|
||||
POWER_MGR = amd_powerplay.o amdgpu_smu.o smu_v11_0.o smu_v12_0.o arcturus_ppt.o navi10_ppt.o renoir_ppt.o
|
||||
POWER_MGR = amd_powerplay.o amdgpu_smu.o smu_v11_0.o smu_v12_0.o arcturus_ppt.o navi10_ppt.o renoir_ppt.o sienna_cichlid_ppt.o
|
||||
|
||||
AMD_PP_POWER = $(addprefix $(AMD_PP_PATH)/,$(POWER_MGR))
|
||||
|
||||
|
||||
@@ -31,6 +31,7 @@
|
||||
#include "atom.h"
|
||||
#include "arcturus_ppt.h"
|
||||
#include "navi10_ppt.h"
|
||||
#include "sienna_cichlid_ppt.h"
|
||||
#include "renoir_ppt.h"
|
||||
|
||||
#undef __SMU_DUMMY_MAP
|
||||
@@ -762,6 +763,9 @@ static int smu_set_funcs(struct amdgpu_device *adev)
|
||||
/* OD is not supported on Arcturus */
|
||||
smu->od_enabled =false;
|
||||
break;
|
||||
case CHIP_SIENNA_CICHLID:
|
||||
sienna_cichlid_set_ppt_funcs(smu);
|
||||
break;
|
||||
case CHIP_RENOIR:
|
||||
renoir_set_ppt_funcs(smu);
|
||||
break;
|
||||
@@ -1051,7 +1055,8 @@ static int smu_smc_table_hw_init(struct smu_context *smu,
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (adev->asic_type != CHIP_ARCTURUS) {
|
||||
if (adev->asic_type != CHIP_ARCTURUS &&
|
||||
adev->asic_type != CHIP_SIENNA_CICHLID) {
|
||||
ret = smu_init_display_count(smu, 0);
|
||||
if (ret)
|
||||
return ret;
|
||||
@@ -1157,7 +1162,8 @@ static int smu_smc_table_hw_init(struct smu_context *smu,
|
||||
}
|
||||
}
|
||||
|
||||
if (adev->asic_type != CHIP_ARCTURUS) {
|
||||
if (adev->asic_type != CHIP_ARCTURUS &&
|
||||
adev->asic_type != CHIP_SIENNA_CICHLID) {
|
||||
ret = smu_notify_display_change(smu);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
1209
drivers/gpu/drm/amd/powerplay/inc/smu11_driver_if_sienna_cichlid.h
Normal file
1209
drivers/gpu/drm/amd/powerplay/inc/smu11_driver_if_sienna_cichlid.h
Normal file
File diff suppressed because it is too large
Load Diff
@@ -185,6 +185,8 @@ enum smu_clk_type {
|
||||
SMU_GFXCLK,
|
||||
SMU_VCLK,
|
||||
SMU_DCLK,
|
||||
SMU_VCLK1,
|
||||
SMU_DCLK1,
|
||||
SMU_ECLK,
|
||||
SMU_SOCCLK,
|
||||
SMU_UCLK,
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
#define SMU11_DRIVER_IF_VERSION_NV10 0x36
|
||||
#define SMU11_DRIVER_IF_VERSION_NV12 0x33
|
||||
#define SMU11_DRIVER_IF_VERSION_NV14 0x36
|
||||
#define SMU11_DRIVER_IF_VERSION_Sienna_Cichlid 0x30
|
||||
|
||||
/* MP Apertures */
|
||||
#define MP0_Public 0x03800000
|
||||
|
||||
139
drivers/gpu/drm/amd/powerplay/inc/smu_v11_0_7_ppsmc.h
Normal file
139
drivers/gpu/drm/amd/powerplay/inc/smu_v11_0_7_ppsmc.h
Normal file
@@ -0,0 +1,139 @@
|
||||
/*
|
||||
* Copyright 2020 Advanced Micro Devices, Inc.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
||||
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
||||
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
* OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef SMU_V11_0_7_PPSMC_H
|
||||
#define SMU_V11_0_7_PPSMC_H
|
||||
|
||||
#define PPSMC_VERSION 0x1
|
||||
|
||||
// SMU Response Codes:
|
||||
#define PPSMC_Result_OK 0x1
|
||||
#define PPSMC_Result_Failed 0xFF
|
||||
#define PPSMC_Result_UnknownCmd 0xFE
|
||||
#define PPSMC_Result_CmdRejectedPrereq 0xFD
|
||||
#define PPSMC_Result_CmdRejectedBusy 0xFC
|
||||
|
||||
// Message Definitions:
|
||||
// BASIC
|
||||
#define PPSMC_MSG_TestMessage 0x1
|
||||
#define PPSMC_MSG_GetSmuVersion 0x2
|
||||
#define PPSMC_MSG_GetDriverIfVersion 0x3
|
||||
#define PPSMC_MSG_SetAllowedFeaturesMaskLow 0x4
|
||||
#define PPSMC_MSG_SetAllowedFeaturesMaskHigh 0x5
|
||||
#define PPSMC_MSG_EnableAllSmuFeatures 0x6
|
||||
#define PPSMC_MSG_DisableAllSmuFeatures 0x7
|
||||
#define PPSMC_MSG_EnableSmuFeaturesLow 0x8
|
||||
#define PPSMC_MSG_EnableSmuFeaturesHigh 0x9
|
||||
#define PPSMC_MSG_DisableSmuFeaturesLow 0xA
|
||||
#define PPSMC_MSG_DisableSmuFeaturesHigh 0xB
|
||||
#define PPSMC_MSG_GetRunningSmuFeaturesLow 0xC
|
||||
#define PPSMC_MSG_GetRunningSmuFeaturesHigh 0xD
|
||||
#define PPSMC_MSG_SetDriverDramAddrHigh 0xE
|
||||
#define PPSMC_MSG_SetDriverDramAddrLow 0xF
|
||||
#define PPSMC_MSG_SetToolsDramAddrHigh 0x10
|
||||
#define PPSMC_MSG_SetToolsDramAddrLow 0x11
|
||||
#define PPSMC_MSG_TransferTableSmu2Dram 0x12
|
||||
#define PPSMC_MSG_TransferTableDram2Smu 0x13
|
||||
#define PPSMC_MSG_UseDefaultPPTable 0x14
|
||||
|
||||
//BACO/BAMACO/BOMACO
|
||||
#define PPSMC_MSG_EnterBaco 0x15
|
||||
#define PPSMC_MSG_ExitBaco 0x16
|
||||
#define PPSMC_MSG_ArmD3 0x17
|
||||
#define PPSMC_MSG_BacoAudioD3PME 0x18
|
||||
|
||||
//DPM
|
||||
#define PPSMC_MSG_SetSoftMinByFreq 0x19
|
||||
#define PPSMC_MSG_SetSoftMaxByFreq 0x1A
|
||||
#define PPSMC_MSG_SetHardMinByFreq 0x1B
|
||||
#define PPSMC_MSG_SetHardMaxByFreq 0x1C
|
||||
#define PPSMC_MSG_GetMinDpmFreq 0x1D
|
||||
#define PPSMC_MSG_GetMaxDpmFreq 0x1E
|
||||
#define PPSMC_MSG_GetDpmFreqByIndex 0x1F
|
||||
#define PPSMC_MSG_OverridePcieParameters 0x20
|
||||
|
||||
//DramLog Set DramAddrHigh
|
||||
#define PPSMC_MSG_DramLogSetDramAddrHigh 0x21
|
||||
|
||||
#define PPSMC_MSG_SetWorkloadMask 0x22
|
||||
#define PPSMC_MSG_SetUclkFastSwitch 0x23
|
||||
#define PPSMC_MSG_GetVoltageByDpm 0x24
|
||||
#define PPSMC_MSG_SetVideoFps 0x25
|
||||
#define PPSMC_MSG_GetDcModeMaxDpmFreq 0x26
|
||||
|
||||
//DramLog Set DramAddrLow
|
||||
#define PPSMC_MSG_DramLogSetDramAddrLow 0x27
|
||||
|
||||
//Power Gating
|
||||
#define PPSMC_MSG_AllowGfxOff 0x28
|
||||
#define PPSMC_MSG_DisallowGfxOff 0x29
|
||||
#define PPSMC_MSG_PowerUpVcn 0x2A
|
||||
#define PPSMC_MSG_PowerDownVcn 0x2B
|
||||
#define PPSMC_MSG_PowerUpJpeg 0x2C
|
||||
#define PPSMC_MSG_PowerDownJpeg 0x2D
|
||||
|
||||
//Resets
|
||||
#define PPSMC_MSG_PrepareMp1ForUnload 0x2E
|
||||
|
||||
//DramLog Set DramLog SetDramSize
|
||||
#define PPSMC_MSG_DramLogSetDramSize 0x2F
|
||||
|
||||
#define PPSMC_MSG_Mode1Reset 0x30
|
||||
|
||||
//Set SystemVirtual DramAddrHigh
|
||||
#define PPSMC_MSG_SetSystemVirtualDramAddrHigh 0x31
|
||||
|
||||
//ACDC Power Source
|
||||
#define PPSMC_MSG_SetPptLimit 0x32
|
||||
#define PPSMC_MSG_GetPptLimit 0x33
|
||||
#define PPSMC_MSG_ReenableAcDcInterrupt 0x34
|
||||
#define PPSMC_MSG_NotifyPowerSource 0x35
|
||||
|
||||
//BTC
|
||||
#define PPSMC_MSG_RunDcBtc 0x36
|
||||
|
||||
//Set SystemVirtual DramAddrLow
|
||||
#define PPSMC_MSG_SetSystemVirtualDramAddrLow 0x38
|
||||
|
||||
//Others
|
||||
#define PPSMC_MSG_SetMemoryChannelEnable 0x39
|
||||
#define PPSMC_MSG_SetDramBitWidth 0x3A
|
||||
#define PPSMC_MSG_SetGeminiMode 0x3B
|
||||
#define PPSMC_MSG_SetGeminiApertureHigh 0x3C
|
||||
#define PPSMC_MSG_SetGeminiApertureLow 0x3D
|
||||
|
||||
#define PPSMC_MSG_SetTemperatureInputSelect 0x3E
|
||||
#define PPSMC_MSG_SetFwDstatesMask 0x3F
|
||||
#define PPSMC_MSG_SetThrottlerMask 0x40
|
||||
|
||||
#define PPSMC_MSG_SetExternalClientDfCstateAllow 0x41
|
||||
#define PPSMC_MSG_EnableOutOfBandMonTesting 0x42
|
||||
#define PPSMC_MSG_SetMGpuFanBoostLimitRpm 0x43
|
||||
|
||||
#define PPSMC_MSG_SetNumBadHbmPagesRetired 0x44
|
||||
#define PPSMC_MSG_SetGpoFeaturePMask 0x45
|
||||
#define PPSMC_MSG_SetSMBUSInterrupt 0x46
|
||||
|
||||
#define PPSMC_Message_Count 0x47
|
||||
|
||||
#endif
|
||||
2080
drivers/gpu/drm/amd/powerplay/sienna_cichlid_ppt.c
Normal file
2080
drivers/gpu/drm/amd/powerplay/sienna_cichlid_ppt.c
Normal file
File diff suppressed because it is too large
Load Diff
28
drivers/gpu/drm/amd/powerplay/sienna_cichlid_ppt.h
Normal file
28
drivers/gpu/drm/amd/powerplay/sienna_cichlid_ppt.h
Normal file
@@ -0,0 +1,28 @@
|
||||
/*
|
||||
* Copyright 2019 Advanced Micro Devices, Inc.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
||||
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
||||
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
* OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
*/
|
||||
#ifndef __SIENNA_CICHLID_PPT_H__
|
||||
#define __SIENNA_CICHLID_PPT_H__
|
||||
|
||||
extern void sienna_cichlid_set_ppt_funcs(struct smu_context *smu);
|
||||
|
||||
#endif
|
||||
@@ -50,6 +50,7 @@ MODULE_FIRMWARE("amdgpu/arcturus_smc.bin");
|
||||
MODULE_FIRMWARE("amdgpu/navi10_smc.bin");
|
||||
MODULE_FIRMWARE("amdgpu/navi14_smc.bin");
|
||||
MODULE_FIRMWARE("amdgpu/navi12_smc.bin");
|
||||
MODULE_FIRMWARE("amdgpu/sienna_cichlid_smc.bin");
|
||||
|
||||
#define SMU11_VOLTAGE_SCALE 4
|
||||
|
||||
@@ -159,6 +160,9 @@ int smu_v11_0_init_microcode(struct smu_context *smu)
|
||||
case CHIP_NAVI12:
|
||||
chip_name = "navi12";
|
||||
break;
|
||||
case CHIP_SIENNA_CICHLID:
|
||||
chip_name = "sienna_cichlid";
|
||||
break;
|
||||
default:
|
||||
BUG();
|
||||
}
|
||||
@@ -278,6 +282,9 @@ int smu_v11_0_check_fw_version(struct smu_context *smu)
|
||||
case CHIP_NAVI14:
|
||||
smu->smc_driver_if_version = SMU11_DRIVER_IF_VERSION_NV14;
|
||||
break;
|
||||
case CHIP_SIENNA_CICHLID:
|
||||
smu->smc_driver_if_version = SMU11_DRIVER_IF_VERSION_Sienna_Cichlid;
|
||||
break;
|
||||
default:
|
||||
pr_err("smu unsupported asic type:%d.\n", smu->adev->asic_type);
|
||||
smu->smc_driver_if_version = SMU11_DRIVER_IF_VERSION_INV;
|
||||
@@ -359,7 +366,8 @@ int smu_v11_0_setup_pptable(struct smu_context *smu)
|
||||
hdr = (const struct smc_firmware_header_v1_0 *) adev->pm.fw->data;
|
||||
version_major = le16_to_cpu(hdr->header.header_version_major);
|
||||
version_minor = le16_to_cpu(hdr->header.header_version_minor);
|
||||
if (version_major == 2 && smu->smu_table.boot_values.pp_table_id > 0) {
|
||||
if ((version_major == 2 && smu->smu_table.boot_values.pp_table_id > 0) ||
|
||||
adev->asic_type == CHIP_SIENNA_CICHLID) {
|
||||
pr_info("use driver provided pptable %d\n", smu->smu_table.boot_values.pp_table_id);
|
||||
switch (version_minor) {
|
||||
case 0:
|
||||
@@ -829,6 +837,11 @@ int smu_v11_0_set_tool_table_location(struct smu_context *smu)
|
||||
int smu_v11_0_init_display_count(struct smu_context *smu, uint32_t count)
|
||||
{
|
||||
int ret = 0;
|
||||
struct amdgpu_device *adev = smu->adev;
|
||||
|
||||
/* Sienna_Cichlid do not support to change display num currently */
|
||||
if (adev->asic_type == CHIP_SIENNA_CICHLID)
|
||||
return 0;
|
||||
|
||||
if (!smu->pm_enabled)
|
||||
return ret;
|
||||
|
||||
Reference in New Issue
Block a user