* [PATCH 1/6] drm/amd/powerplay: added index gc cac read/write apis for vega10
@ 2017-07-07 1:59 Evan Quan
[not found] ` <1499392755-23507-1-git-send-email-evan.quan-5C7GfCeVMHo@public.gmane.org>
0 siblings, 1 reply; 7+ messages in thread
From: Evan Quan @ 2017-07-07 1:59 UTC (permalink / raw)
To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW
Cc: alexander.deucher-5C7GfCeVMHo, Evan Quan
Change-Id: I1a62db8c764d368e6ba08440ad1761adb55d85fd
Signed-off-by: Evan Quan <evan.quan@amd.com>
---
drivers/gpu/drm/amd/amdgpu/soc15.c | 24 ++++++++++++++++++++++++
1 file changed, 24 insertions(+)
diff --git a/drivers/gpu/drm/amd/amdgpu/soc15.c b/drivers/gpu/drm/amd/amdgpu/soc15.c
index f5669af..c0a5250 100644
--- a/drivers/gpu/drm/amd/amdgpu/soc15.c
+++ b/drivers/gpu/drm/amd/amdgpu/soc15.c
@@ -196,6 +196,28 @@ static void soc15_didt_wreg(struct amdgpu_device *adev, u32 reg, u32 v)
spin_unlock_irqrestore(&adev->didt_idx_lock, flags);
}
+static u32 soc15_gc_cac_rreg(struct amdgpu_device *adev, u32 reg)
+{
+ unsigned long flags;
+ u32 r;
+
+ spin_lock_irqsave(&adev->gc_cac_idx_lock, flags);
+ WREG32_SOC15(GC, 0, mmGC_CAC_IND_INDEX, (reg));
+ r = RREG32_SOC15(GC, 0, mmGC_CAC_IND_DATA);
+ spin_unlock_irqrestore(&adev->gc_cac_idx_lock, flags);
+ return r;
+}
+
+static void soc15_gc_cac_wreg(struct amdgpu_device *adev, u32 reg, u32 v)
+{
+ unsigned long flags;
+
+ spin_lock_irqsave(&adev->gc_cac_idx_lock, flags);
+ WREG32_SOC15(GC, 0, mmGC_CAC_IND_INDEX, (reg));
+ WREG32_SOC15(GC, 0, mmGC_CAC_IND_DATA, (v));
+ spin_unlock_irqrestore(&adev->gc_cac_idx_lock, flags);
+}
+
static u32 soc15_get_config_memsize(struct amdgpu_device *adev)
{
if (adev->flags & AMD_IS_APU)
@@ -567,6 +589,8 @@ static int soc15_common_early_init(void *handle)
adev->uvd_ctx_wreg = &soc15_uvd_ctx_wreg;
adev->didt_rreg = &soc15_didt_rreg;
adev->didt_wreg = &soc15_didt_wreg;
+ adev->gc_cac_rreg = &soc15_gc_cac_rreg;
+ adev->gc_cac_wreg = &soc15_gc_cac_wreg;
adev->asic_funcs = &soc15_asic_funcs;
--
2.7.4
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 2/6] drm/amd/powerplay: added new se_cac_idx r/w APIs v2 - v2: added missing spinlock init
[not found] ` <1499392755-23507-1-git-send-email-evan.quan-5C7GfCeVMHo@public.gmane.org>
@ 2017-07-07 1:59 ` Evan Quan
2017-07-07 1:59 ` [PATCH 3/6] drm/amd/powerplay: added soc15 support for new se_cac_idx APIs Evan Quan
` (3 subsequent siblings)
4 siblings, 0 replies; 7+ messages in thread
From: Evan Quan @ 2017-07-07 1:59 UTC (permalink / raw)
To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW
Cc: alexander.deucher-5C7GfCeVMHo, Evan Quan
Change-Id: I9f16ec9f5bab9abe83e9df01609893b38bb691fe
Signed-off-by: Evan Quan <evan.quan@amd.com>
---
drivers/gpu/drm/amd/amdgpu/amdgpu.h | 6 ++++++
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 1 +
2 files changed, 7 insertions(+)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
index fdf6599..6a5021f 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
@@ -1562,6 +1562,10 @@ struct amdgpu_device {
spinlock_t gc_cac_idx_lock;
amdgpu_rreg_t gc_cac_rreg;
amdgpu_wreg_t gc_cac_wreg;
+ /* protects concurrent se_cac register access */
+ spinlock_t se_cac_idx_lock;
+ amdgpu_rreg_t se_cac_rreg;
+ amdgpu_wreg_t se_cac_wreg;
/* protects concurrent ENDPOINT (audio) register access */
spinlock_t audio_endpt_idx_lock;
amdgpu_block_rreg_t audio_endpt_rreg;
@@ -1756,6 +1760,8 @@ bool amdgpu_device_has_dc_support(struct amdgpu_device *adev);
#define WREG32_DIDT(reg, v) adev->didt_wreg(adev, (reg), (v))
#define RREG32_GC_CAC(reg) adev->gc_cac_rreg(adev, (reg))
#define WREG32_GC_CAC(reg, v) adev->gc_cac_wreg(adev, (reg), (v))
+#define RREG32_SE_CAC(reg) adev->se_cac_rreg(adev, (reg))
+#define WREG32_SE_CAC(reg, v) adev->se_cac_wreg(adev, (reg), (v))
#define RREG32_AUDIO_ENDPT(block, reg) adev->audio_endpt_rreg(adev, (block), (reg))
#define WREG32_AUDIO_ENDPT(block, reg, v) adev->audio_endpt_wreg(adev, (block), (reg), (v))
#define WREG32_P(reg, val, mask) \
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
index 7233800..1392f44 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
@@ -2119,6 +2119,7 @@ int amdgpu_device_init(struct amdgpu_device *adev,
spin_lock_init(&adev->uvd_ctx_idx_lock);
spin_lock_init(&adev->didt_idx_lock);
spin_lock_init(&adev->gc_cac_idx_lock);
+ spin_lock_init(&adev->se_cac_idx_lock);
spin_lock_init(&adev->audio_endpt_idx_lock);
spin_lock_init(&adev->mm_stats.lock);
--
2.7.4
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 3/6] drm/amd/powerplay: added soc15 support for new se_cac_idx APIs
[not found] ` <1499392755-23507-1-git-send-email-evan.quan-5C7GfCeVMHo@public.gmane.org>
2017-07-07 1:59 ` [PATCH 2/6] drm/amd/powerplay: added new se_cac_idx r/w APIs v2 - v2: added missing spinlock init Evan Quan
@ 2017-07-07 1:59 ` Evan Quan
2017-07-07 1:59 ` [PATCH 4/6] drm/amd/powerplay: added support for new se_cac_idx APIs to cgs Evan Quan
` (2 subsequent siblings)
4 siblings, 0 replies; 7+ messages in thread
From: Evan Quan @ 2017-07-07 1:59 UTC (permalink / raw)
To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW
Cc: alexander.deucher-5C7GfCeVMHo, Evan Quan
Change-Id: I9b925397d7ac61bcf9f0e8850f2d8b3dabd4a105
Signed-off-by: Evan Quan <evan.quan@amd.com>
---
drivers/gpu/drm/amd/amdgpu/soc15.c | 24 ++++++++++++++++++++++++
1 file changed, 24 insertions(+)
diff --git a/drivers/gpu/drm/amd/amdgpu/soc15.c b/drivers/gpu/drm/amd/amdgpu/soc15.c
index c0a5250..9cf7fb4 100644
--- a/drivers/gpu/drm/amd/amdgpu/soc15.c
+++ b/drivers/gpu/drm/amd/amdgpu/soc15.c
@@ -218,6 +218,28 @@ static void soc15_gc_cac_wreg(struct amdgpu_device *adev, u32 reg, u32 v)
spin_unlock_irqrestore(&adev->gc_cac_idx_lock, flags);
}
+static u32 soc15_se_cac_rreg(struct amdgpu_device *adev, u32 reg)
+{
+ unsigned long flags;
+ u32 r;
+
+ spin_lock_irqsave(&adev->se_cac_idx_lock, flags);
+ WREG32_SOC15(GC, 0, mmSE_CAC_IND_INDEX, (reg));
+ r = RREG32_SOC15(GC, 0, mmSE_CAC_IND_DATA);
+ spin_unlock_irqrestore(&adev->se_cac_idx_lock, flags);
+ return r;
+}
+
+static void soc15_se_cac_wreg(struct amdgpu_device *adev, u32 reg, u32 v)
+{
+ unsigned long flags;
+
+ spin_lock_irqsave(&adev->se_cac_idx_lock, flags);
+ WREG32_SOC15(GC, 0, mmSE_CAC_IND_INDEX, (reg));
+ WREG32_SOC15(GC, 0, mmSE_CAC_IND_DATA, (v));
+ spin_unlock_irqrestore(&adev->se_cac_idx_lock, flags);
+}
+
static u32 soc15_get_config_memsize(struct amdgpu_device *adev)
{
if (adev->flags & AMD_IS_APU)
@@ -591,6 +613,8 @@ static int soc15_common_early_init(void *handle)
adev->didt_wreg = &soc15_didt_wreg;
adev->gc_cac_rreg = &soc15_gc_cac_rreg;
adev->gc_cac_wreg = &soc15_gc_cac_wreg;
+ adev->se_cac_rreg = &soc15_se_cac_rreg;
+ adev->se_cac_wreg = &soc15_se_cac_wreg;
adev->asic_funcs = &soc15_asic_funcs;
--
2.7.4
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 4/6] drm/amd/powerplay: added support for new se_cac_idx APIs to cgs
[not found] ` <1499392755-23507-1-git-send-email-evan.quan-5C7GfCeVMHo@public.gmane.org>
2017-07-07 1:59 ` [PATCH 2/6] drm/amd/powerplay: added new se_cac_idx r/w APIs v2 - v2: added missing spinlock init Evan Quan
2017-07-07 1:59 ` [PATCH 3/6] drm/amd/powerplay: added soc15 support for new se_cac_idx APIs Evan Quan
@ 2017-07-07 1:59 ` Evan Quan
2017-07-07 1:59 ` [PATCH 5/6] drm/amd/powerplay: added grbm_idx_mutex lock/unlock to cgs v2 - v2: rename param 'en' as 'lock' Evan Quan
2017-07-07 1:59 ` [PATCH 6/6] drm/amd/powerplay: added didt support for vega10 Evan Quan
4 siblings, 0 replies; 7+ messages in thread
From: Evan Quan @ 2017-07-07 1:59 UTC (permalink / raw)
To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW
Cc: alexander.deucher-5C7GfCeVMHo, Evan Quan
Change-Id: If2ac93808d1922fe3dbec64a58f674a9c342088d
Signed-off-by: Evan Quan <evan.quan@amd.com>
---
drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c | 4 ++++
drivers/gpu/drm/amd/include/cgs_common.h | 1 +
2 files changed, 5 insertions(+)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c
index 02b469b..8016f90 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c
@@ -240,6 +240,8 @@ static uint32_t amdgpu_cgs_read_ind_register(struct cgs_device *cgs_device,
return RREG32_DIDT(index);
case CGS_IND_REG_GC_CAC:
return RREG32_GC_CAC(index);
+ case CGS_IND_REG_SE_CAC:
+ return RREG32_SE_CAC(index);
case CGS_IND_REG__AUDIO_ENDPT:
DRM_ERROR("audio endpt register access not implemented.\n");
return 0;
@@ -266,6 +268,8 @@ static void amdgpu_cgs_write_ind_register(struct cgs_device *cgs_device,
return WREG32_DIDT(index, value);
case CGS_IND_REG_GC_CAC:
return WREG32_GC_CAC(index, value);
+ case CGS_IND_REG_SE_CAC:
+ return WREG32_SE_CAC(index, value);
case CGS_IND_REG__AUDIO_ENDPT:
DRM_ERROR("audio endpt register access not implemented.\n");
return;
diff --git a/drivers/gpu/drm/amd/include/cgs_common.h b/drivers/gpu/drm/amd/include/cgs_common.h
index 0a94f74..b46d12d 100644
--- a/drivers/gpu/drm/amd/include/cgs_common.h
+++ b/drivers/gpu/drm/amd/include/cgs_common.h
@@ -50,6 +50,7 @@ enum cgs_ind_reg {
CGS_IND_REG__UVD_CTX,
CGS_IND_REG__DIDT,
CGS_IND_REG_GC_CAC,
+ CGS_IND_REG_SE_CAC,
CGS_IND_REG__AUDIO_ENDPT
};
--
2.7.4
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 5/6] drm/amd/powerplay: added grbm_idx_mutex lock/unlock to cgs v2 - v2: rename param 'en' as 'lock'
[not found] ` <1499392755-23507-1-git-send-email-evan.quan-5C7GfCeVMHo@public.gmane.org>
` (2 preceding siblings ...)
2017-07-07 1:59 ` [PATCH 4/6] drm/amd/powerplay: added support for new se_cac_idx APIs to cgs Evan Quan
@ 2017-07-07 1:59 ` Evan Quan
2017-07-07 1:59 ` [PATCH 6/6] drm/amd/powerplay: added didt support for vega10 Evan Quan
4 siblings, 0 replies; 7+ messages in thread
From: Evan Quan @ 2017-07-07 1:59 UTC (permalink / raw)
To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW
Cc: alexander.deucher-5C7GfCeVMHo, Evan Quan
Change-Id: If7088d6046c84355b8f1308d584ab6524ceab724
Signed-off-by: Evan Quan <evan.quan@amd.com>
---
drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c | 12 ++++++++++++
drivers/gpu/drm/amd/include/cgs_common.h | 5 +++++
2 files changed, 17 insertions(+)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c
index 8016f90..3d41cd4 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c
@@ -614,6 +614,17 @@ static int amdgpu_cgs_enter_safe_mode(struct cgs_device *cgs_device,
return 0;
}
+static void amdgpu_cgs_lock_grbm_idx(struct cgs_device *cgs_device,
+ bool lock)
+{
+ CGS_FUNC_ADEV;
+
+ if (lock)
+ mutex_lock(&adev->grbm_idx_mutex);
+ else
+ mutex_unlock(&adev->grbm_idx_mutex);
+}
+
static int amdgpu_cgs_get_firmware_info(struct cgs_device *cgs_device,
enum cgs_ucode_id type,
struct cgs_firmware_info *info)
@@ -1136,6 +1147,7 @@ static const struct cgs_ops amdgpu_cgs_ops = {
.query_system_info = amdgpu_cgs_query_system_info,
.is_virtualization_enabled = amdgpu_cgs_is_virtualization_enabled,
.enter_safe_mode = amdgpu_cgs_enter_safe_mode,
+ .lock_grbm_idx = amdgpu_cgs_lock_grbm_idx,
};
static const struct cgs_os_ops amdgpu_cgs_os_ops = {
diff --git a/drivers/gpu/drm/amd/include/cgs_common.h b/drivers/gpu/drm/amd/include/cgs_common.h
index b46d12d..0214f63 100644
--- a/drivers/gpu/drm/amd/include/cgs_common.h
+++ b/drivers/gpu/drm/amd/include/cgs_common.h
@@ -407,6 +407,8 @@ typedef int (*cgs_is_virtualization_enabled_t)(void *cgs_device);
typedef int (*cgs_enter_safe_mode)(struct cgs_device *cgs_device, bool en);
+typedef void (*cgs_lock_grbm_idx)(struct cgs_device *cgs_device, bool lock);
+
struct cgs_ops {
/* memory management calls (similar to KFD interface) */
cgs_alloc_gpu_mem_t alloc_gpu_mem;
@@ -442,6 +444,7 @@ struct cgs_ops {
cgs_query_system_info query_system_info;
cgs_is_virtualization_enabled_t is_virtualization_enabled;
cgs_enter_safe_mode enter_safe_mode;
+ cgs_lock_grbm_idx lock_grbm_idx;
};
struct cgs_os_ops; /* To be define in OS-specific CGS header */
@@ -518,4 +521,6 @@ struct cgs_device
#define cgs_enter_safe_mode(cgs_device, en) \
CGS_CALL(enter_safe_mode, cgs_device, en)
+#define cgs_lock_grbm_idx(cgs_device, lock) \
+ CGS_CALL(lock_grbm_idx, cgs_device, lock)
#endif /* _CGS_COMMON_H */
--
2.7.4
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 6/6] drm/amd/powerplay: added didt support for vega10
[not found] ` <1499392755-23507-1-git-send-email-evan.quan-5C7GfCeVMHo@public.gmane.org>
` (3 preceding siblings ...)
2017-07-07 1:59 ` [PATCH 5/6] drm/amd/powerplay: added grbm_idx_mutex lock/unlock to cgs v2 - v2: rename param 'en' as 'lock' Evan Quan
@ 2017-07-07 1:59 ` Evan Quan
[not found] ` <1499392755-23507-6-git-send-email-evan.quan-5C7GfCeVMHo@public.gmane.org>
4 siblings, 1 reply; 7+ messages in thread
From: Evan Quan @ 2017-07-07 1:59 UTC (permalink / raw)
To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW
Cc: alexander.deucher-5C7GfCeVMHo, Evan Quan
Change-Id: If2f955469e5b037e0726999b10eb10c08740b208
Signed-off-by: Evan Quan <evan.quan@amd.com>
---
drivers/gpu/drm/amd/powerplay/hwmgr/vega10_hwmgr.c | 56 +
drivers/gpu/drm/amd/powerplay/hwmgr/vega10_hwmgr.h | 5 +
.../gpu/drm/amd/powerplay/hwmgr/vega10_powertune.c | 1291 ++++++++++++++++++++
.../gpu/drm/amd/powerplay/hwmgr/vega10_powertune.h | 16 +
.../gpu/drm/amd/powerplay/inc/hardwaremanager.h | 5 +
drivers/gpu/drm/amd/powerplay/inc/pp_debug.h | 6 +
drivers/gpu/drm/amd/powerplay/inc/pp_soc15.h | 2 +
7 files changed, 1381 insertions(+)
diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_hwmgr.c b/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_hwmgr.c
index 780efaf..ae11d30 100644
--- a/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_hwmgr.c
+++ b/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_hwmgr.c
@@ -145,6 +145,19 @@ static void vega10_set_default_registry_data(struct pp_hwmgr *hwmgr)
data->registry_data.vr1hot_enabled = 1;
data->registry_data.regulator_hot_gpio_support = 1;
+ data->registry_data.didt_support = 1;
+ if (data->registry_data.didt_support) {
+ data->registry_data.didt_mode = 6;
+ data->registry_data.sq_ramping_support = 1;
+ data->registry_data.db_ramping_support = 0;
+ data->registry_data.td_ramping_support = 0;
+ data->registry_data.tcp_ramping_support = 0;
+ data->registry_data.dbr_ramping_support = 0;
+ data->registry_data.edc_didt_support = 1;
+ data->registry_data.gc_didt_support = 0;
+ data->registry_data.psm_didt_support = 0;
+ }
+
data->display_voltage_mode = PPVEGA10_VEGA10DISPLAYVOLTAGEMODE_DFLT;
data->dcef_clk_quad_eqn_a = PPREGKEY_VEGA10QUADRATICEQUATION_DFLT;
data->dcef_clk_quad_eqn_b = PPREGKEY_VEGA10QUADRATICEQUATION_DFLT;
@@ -222,6 +235,8 @@ static int vega10_set_features_platform_caps(struct pp_hwmgr *hwmgr)
phm_cap_unset(hwmgr->platform_descriptor.platformCaps,
PHM_PlatformCaps_PowerContainment);
phm_cap_unset(hwmgr->platform_descriptor.platformCaps,
+ PHM_PlatformCaps_DiDtSupport);
+ phm_cap_unset(hwmgr->platform_descriptor.platformCaps,
PHM_PlatformCaps_SQRamping);
phm_cap_unset(hwmgr->platform_descriptor.platformCaps,
PHM_PlatformCaps_DBRamping);
@@ -229,6 +244,34 @@ static int vega10_set_features_platform_caps(struct pp_hwmgr *hwmgr)
PHM_PlatformCaps_TDRamping);
phm_cap_unset(hwmgr->platform_descriptor.platformCaps,
PHM_PlatformCaps_TCPRamping);
+ phm_cap_unset(hwmgr->platform_descriptor.platformCaps,
+ PHM_PlatformCaps_DBRRamping);
+ phm_cap_unset(hwmgr->platform_descriptor.platformCaps,
+ PHM_PlatformCaps_DiDtEDCEnable);
+ phm_cap_unset(hwmgr->platform_descriptor.platformCaps,
+ PHM_PlatformCaps_GCEDC);
+ phm_cap_unset(hwmgr->platform_descriptor.platformCaps,
+ PHM_PlatformCaps_PSM);
+
+ if (data->registry_data.didt_support) {
+ phm_cap_set(hwmgr->platform_descriptor.platformCaps, PHM_PlatformCaps_DiDtSupport);
+ if (data->registry_data.sq_ramping_support)
+ phm_cap_set(hwmgr->platform_descriptor.platformCaps, PHM_PlatformCaps_SQRamping);
+ if (data->registry_data.db_ramping_support)
+ phm_cap_set(hwmgr->platform_descriptor.platformCaps, PHM_PlatformCaps_DBRamping);
+ if (data->registry_data.td_ramping_support)
+ phm_cap_set(hwmgr->platform_descriptor.platformCaps, PHM_PlatformCaps_TDRamping);
+ if (data->registry_data.tcp_ramping_support)
+ phm_cap_set(hwmgr->platform_descriptor.platformCaps, PHM_PlatformCaps_TCPRamping);
+ if (data->registry_data.dbr_ramping_support)
+ phm_cap_set(hwmgr->platform_descriptor.platformCaps, PHM_PlatformCaps_DBRRamping);
+ if (data->registry_data.edc_didt_support)
+ phm_cap_set(hwmgr->platform_descriptor.platformCaps, PHM_PlatformCaps_DiDtEDCEnable);
+ if (data->registry_data.gc_didt_support)
+ phm_cap_set(hwmgr->platform_descriptor.platformCaps, PHM_PlatformCaps_GCEDC);
+ if (data->registry_data.psm_didt_support)
+ phm_cap_set(hwmgr->platform_descriptor.platformCaps, PHM_PlatformCaps_PSM);
+ }
if (data->registry_data.power_containment_support)
phm_cap_set(hwmgr->platform_descriptor.platformCaps,
@@ -321,6 +364,7 @@ static void vega10_init_dpm_defaults(struct pp_hwmgr *hwmgr)
data->smu_features[GNLD_FAN_CONTROL].smu_feature_id =
FEATURE_FAN_CONTROL_BIT;
data->smu_features[GNLD_ACG].smu_feature_id = FEATURE_ACG_BIT;
+ data->smu_features[GNLD_DIDT].smu_feature_id = FEATURE_GFX_EDC_BIT;
if (!data->registry_data.prefetcher_dpm_key_disabled)
data->smu_features[GNLD_DPM_PREFETCHER].supported = true;
@@ -390,6 +434,9 @@ static void vega10_init_dpm_defaults(struct pp_hwmgr *hwmgr)
if ((data->smu_version & 0xff000000) == 0x5000000)
data->smu_features[GNLD_ACG].supported = true;
+ if (data->registry_data.didt_support)
+ data->smu_features[GNLD_DIDT].supported = true;
+
}
#ifdef PPLIB_VEGA10_EVV_SUPPORT
@@ -2906,6 +2953,11 @@ static int vega10_enable_dpm_tasks(struct pp_hwmgr *hwmgr)
PP_ASSERT_WITH_CODE(!tmp_result,
"Failed to start DPM!", result = tmp_result);
+ /* enable didt, do not abort if failed didt */
+ tmp_result = vega10_enable_didt_config(hwmgr);
+ PP_ASSERT(!tmp_result,
+ "Failed to enable didt config!");
+
tmp_result = vega10_enable_power_containment(hwmgr);
PP_ASSERT_WITH_CODE(!tmp_result,
"Failed to enable power containment!",
@@ -4735,6 +4787,10 @@ static int vega10_disable_dpm_tasks(struct pp_hwmgr *hwmgr)
PP_ASSERT_WITH_CODE((tmp_result == 0),
"Failed to disable power containment!", result = tmp_result);
+ tmp_result = vega10_disable_didt_config(hwmgr);
+ PP_ASSERT_WITH_CODE((tmp_result == 0),
+ "Failed to disable didt config!", result = tmp_result);
+
tmp_result = vega10_avfs_enable(hwmgr, false);
PP_ASSERT_WITH_CODE((tmp_result == 0),
"Failed to disable AVFS!", result = tmp_result);
diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_hwmgr.h b/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_hwmgr.h
index 4150801..5c97a8b 100644
--- a/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_hwmgr.h
+++ b/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_hwmgr.h
@@ -232,7 +232,9 @@ struct vega10_registry_data {
uint8_t cac_support;
uint8_t clock_stretcher_support;
uint8_t db_ramping_support;
+ uint8_t didt_mode;
uint8_t didt_support;
+ uint8_t edc_didt_support;
uint8_t dynamic_state_patching_support;
uint8_t enable_pkg_pwr_tracking_feature;
uint8_t enable_tdc_limit_feature;
@@ -265,6 +267,9 @@ struct vega10_registry_data {
uint8_t tcp_ramping_support;
uint8_t tdc_support;
uint8_t td_ramping_support;
+ uint8_t dbr_ramping_support;
+ uint8_t gc_didt_support;
+ uint8_t psm_didt_support;
uint8_t thermal_out_gpio_support;
uint8_t thermal_support;
uint8_t fw_ctf_enabled;
diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_powertune.c b/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_powertune.c
index 3f72268..22334a1 100644
--- a/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_powertune.c
+++ b/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_powertune.c
@@ -26,7 +26,1298 @@
#include "vega10_powertune.h"
#include "vega10_smumgr.h"
#include "vega10_ppsmc.h"
+#include "vega10_inc.h"
#include "pp_debug.h"
+#include "pp_soc15.h"
+
+static const struct vega10_didt_config_reg SEDiDtTuningCtrlConfig_Vega10[] =
+{
+/* ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ * Offset Mask Shift Value
+ * ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ */
+ /* DIDT_SQ */
+ { ixDIDT_SQ_TUNING_CTRL, DIDT_SQ_TUNING_CTRL__MAX_POWER_DELTA_HI_MASK, DIDT_SQ_TUNING_CTRL__MAX_POWER_DELTA_HI__SHIFT, 0x3853 },
+ { ixDIDT_SQ_TUNING_CTRL, DIDT_SQ_TUNING_CTRL__MAX_POWER_DELTA_LO_MASK, DIDT_SQ_TUNING_CTRL__MAX_POWER_DELTA_LO__SHIFT, 0x3153 },
+
+ /* DIDT_TD */
+ { ixDIDT_TD_TUNING_CTRL, DIDT_TD_TUNING_CTRL__MAX_POWER_DELTA_HI_MASK, DIDT_TD_TUNING_CTRL__MAX_POWER_DELTA_HI__SHIFT, 0x0dde },
+ { ixDIDT_TD_TUNING_CTRL, DIDT_TD_TUNING_CTRL__MAX_POWER_DELTA_LO_MASK, DIDT_TD_TUNING_CTRL__MAX_POWER_DELTA_LO__SHIFT, 0x0dde },
+
+ /* DIDT_TCP */
+ { ixDIDT_TCP_TUNING_CTRL, DIDT_TCP_TUNING_CTRL__MAX_POWER_DELTA_HI_MASK, DIDT_TCP_TUNING_CTRL__MAX_POWER_DELTA_HI__SHIFT, 0x3dde },
+ { ixDIDT_TCP_TUNING_CTRL, DIDT_TCP_TUNING_CTRL__MAX_POWER_DELTA_LO_MASK, DIDT_TCP_TUNING_CTRL__MAX_POWER_DELTA_LO__SHIFT, 0x3dde },
+
+ /* DIDT_DB */
+ { ixDIDT_DB_TUNING_CTRL, DIDT_DB_TUNING_CTRL__MAX_POWER_DELTA_HI_MASK, DIDT_DB_TUNING_CTRL__MAX_POWER_DELTA_HI__SHIFT, 0x3dde },
+ { ixDIDT_DB_TUNING_CTRL, DIDT_DB_TUNING_CTRL__MAX_POWER_DELTA_LO_MASK, DIDT_DB_TUNING_CTRL__MAX_POWER_DELTA_LO__SHIFT, 0x3dde },
+
+ { 0xFFFFFFFF } /* End of list */
+};
+
+static const struct vega10_didt_config_reg SEDiDtCtrl3Config_vega10[] =
+{
+/* ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ * Offset Mask Shift Value
+ * ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ */
+ /*DIDT_SQ_CTRL3 */
+ { ixDIDT_SQ_CTRL3, DIDT_SQ_CTRL3__GC_DIDT_ENABLE_MASK, DIDT_SQ_CTRL3__GC_DIDT_ENABLE__SHIFT, 0x0000 },
+ { ixDIDT_SQ_CTRL3, DIDT_SQ_CTRL3__GC_DIDT_CLK_EN_OVERRIDE_MASK, DIDT_SQ_CTRL3__GC_DIDT_CLK_EN_OVERRIDE__SHIFT, 0x0000 },
+ { ixDIDT_SQ_CTRL3, DIDT_SQ_CTRL3__THROTTLE_POLICY_MASK, DIDT_SQ_CTRL3__THROTTLE_POLICY__SHIFT, 0x0003 },
+ { ixDIDT_SQ_CTRL3, DIDT_SQ_CTRL3__DIDT_TRIGGER_THROTTLE_LOWBIT_MASK, DIDT_SQ_CTRL3__DIDT_TRIGGER_THROTTLE_LOWBIT__SHIFT, 0x0000 },
+ { ixDIDT_SQ_CTRL3, DIDT_SQ_CTRL3__DIDT_POWER_LEVEL_LOWBIT_MASK, DIDT_SQ_CTRL3__DIDT_POWER_LEVEL_LOWBIT__SHIFT, 0x0000 },
+ { ixDIDT_SQ_CTRL3, DIDT_SQ_CTRL3__DIDT_STALL_PATTERN_BIT_NUMS_MASK, DIDT_SQ_CTRL3__DIDT_STALL_PATTERN_BIT_NUMS__SHIFT, 0x0003 },
+ { ixDIDT_SQ_CTRL3, DIDT_SQ_CTRL3__GC_DIDT_LEVEL_COMB_EN_MASK, DIDT_SQ_CTRL3__GC_DIDT_LEVEL_COMB_EN__SHIFT, 0x0000 },
+ { ixDIDT_SQ_CTRL3, DIDT_SQ_CTRL3__SE_DIDT_LEVEL_COMB_EN_MASK, DIDT_SQ_CTRL3__SE_DIDT_LEVEL_COMB_EN__SHIFT, 0x0000 },
+ { ixDIDT_SQ_CTRL3, DIDT_SQ_CTRL3__QUALIFY_STALL_EN_MASK, DIDT_SQ_CTRL3__QUALIFY_STALL_EN__SHIFT, 0x0000 },
+ { ixDIDT_SQ_CTRL3, DIDT_SQ_CTRL3__DIDT_STALL_SEL_MASK, DIDT_SQ_CTRL3__DIDT_STALL_SEL__SHIFT, 0x0000 },
+ { ixDIDT_SQ_CTRL3, DIDT_SQ_CTRL3__DIDT_FORCE_STALL_MASK, DIDT_SQ_CTRL3__DIDT_FORCE_STALL__SHIFT, 0x0000 },
+ { ixDIDT_SQ_CTRL3, DIDT_SQ_CTRL3__DIDT_STALL_DELAY_EN_MASK, DIDT_SQ_CTRL3__DIDT_STALL_DELAY_EN__SHIFT, 0x0000 },
+
+ /*DIDT_TCP_CTRL3 */
+ { ixDIDT_TCP_CTRL3, DIDT_TCP_CTRL3__GC_DIDT_ENABLE_MASK, DIDT_TCP_CTRL3__GC_DIDT_ENABLE__SHIFT, 0x0000 },
+ { ixDIDT_TCP_CTRL3, DIDT_TCP_CTRL3__GC_DIDT_CLK_EN_OVERRIDE_MASK, DIDT_TCP_CTRL3__GC_DIDT_CLK_EN_OVERRIDE__SHIFT, 0x0000 },
+ { ixDIDT_TCP_CTRL3, DIDT_TCP_CTRL3__THROTTLE_POLICY_MASK, DIDT_TCP_CTRL3__THROTTLE_POLICY__SHIFT, 0x0003 },
+ { ixDIDT_TCP_CTRL3, DIDT_TCP_CTRL3__DIDT_TRIGGER_THROTTLE_LOWBIT_MASK, DIDT_TCP_CTRL3__DIDT_TRIGGER_THROTTLE_LOWBIT__SHIFT, 0x0000 },
+ { ixDIDT_TCP_CTRL3, DIDT_TCP_CTRL3__DIDT_POWER_LEVEL_LOWBIT_MASK, DIDT_TCP_CTRL3__DIDT_POWER_LEVEL_LOWBIT__SHIFT, 0x0000 },
+ { ixDIDT_TCP_CTRL3, DIDT_TCP_CTRL3__DIDT_STALL_PATTERN_BIT_NUMS_MASK, DIDT_TCP_CTRL3__DIDT_STALL_PATTERN_BIT_NUMS__SHIFT, 0x0003 },
+ { ixDIDT_TCP_CTRL3, DIDT_TCP_CTRL3__GC_DIDT_LEVEL_COMB_EN_MASK, DIDT_TCP_CTRL3__GC_DIDT_LEVEL_COMB_EN__SHIFT, 0x0000 },
+ { ixDIDT_TCP_CTRL3, DIDT_TCP_CTRL3__SE_DIDT_LEVEL_COMB_EN_MASK, DIDT_TCP_CTRL3__SE_DIDT_LEVEL_COMB_EN__SHIFT, 0x0000 },
+ { ixDIDT_TCP_CTRL3, DIDT_TCP_CTRL3__QUALIFY_STALL_EN_MASK, DIDT_TCP_CTRL3__QUALIFY_STALL_EN__SHIFT, 0x0000 },
+ { ixDIDT_TCP_CTRL3, DIDT_TCP_CTRL3__DIDT_STALL_SEL_MASK, DIDT_TCP_CTRL3__DIDT_STALL_SEL__SHIFT, 0x0000 },
+ { ixDIDT_TCP_CTRL3, DIDT_TCP_CTRL3__DIDT_FORCE_STALL_MASK, DIDT_TCP_CTRL3__DIDT_FORCE_STALL__SHIFT, 0x0000 },
+ { ixDIDT_TCP_CTRL3, DIDT_TCP_CTRL3__DIDT_STALL_DELAY_EN_MASK, DIDT_TCP_CTRL3__DIDT_STALL_DELAY_EN__SHIFT, 0x0000 },
+
+ /*DIDT_TD_CTRL3 */
+ { ixDIDT_TD_CTRL3, DIDT_TD_CTRL3__GC_DIDT_ENABLE_MASK, DIDT_TD_CTRL3__GC_DIDT_ENABLE__SHIFT, 0x0000 },
+ { ixDIDT_TD_CTRL3, DIDT_TD_CTRL3__GC_DIDT_CLK_EN_OVERRIDE_MASK, DIDT_TD_CTRL3__GC_DIDT_CLK_EN_OVERRIDE__SHIFT, 0x0000 },
+ { ixDIDT_TD_CTRL3, DIDT_TD_CTRL3__THROTTLE_POLICY_MASK, DIDT_TD_CTRL3__THROTTLE_POLICY__SHIFT, 0x0003 },
+ { ixDIDT_TD_CTRL3, DIDT_TD_CTRL3__DIDT_TRIGGER_THROTTLE_LOWBIT_MASK, DIDT_TD_CTRL3__DIDT_TRIGGER_THROTTLE_LOWBIT__SHIFT, 0x0000 },
+ { ixDIDT_TD_CTRL3, DIDT_TD_CTRL3__DIDT_POWER_LEVEL_LOWBIT_MASK, DIDT_TD_CTRL3__DIDT_POWER_LEVEL_LOWBIT__SHIFT, 0x0000 },
+ { ixDIDT_TD_CTRL3, DIDT_TD_CTRL3__DIDT_STALL_PATTERN_BIT_NUMS_MASK, DIDT_TD_CTRL3__DIDT_STALL_PATTERN_BIT_NUMS__SHIFT, 0x0003 },
+ { ixDIDT_TD_CTRL3, DIDT_TD_CTRL3__GC_DIDT_LEVEL_COMB_EN_MASK, DIDT_TD_CTRL3__GC_DIDT_LEVEL_COMB_EN__SHIFT, 0x0000 },
+ { ixDIDT_TD_CTRL3, DIDT_TD_CTRL3__SE_DIDT_LEVEL_COMB_EN_MASK, DIDT_TD_CTRL3__SE_DIDT_LEVEL_COMB_EN__SHIFT, 0x0000 },
+ { ixDIDT_TD_CTRL3, DIDT_TD_CTRL3__QUALIFY_STALL_EN_MASK, DIDT_TD_CTRL3__QUALIFY_STALL_EN__SHIFT, 0x0000 },
+ { ixDIDT_TD_CTRL3, DIDT_TD_CTRL3__DIDT_STALL_SEL_MASK, DIDT_TD_CTRL3__DIDT_STALL_SEL__SHIFT, 0x0000 },
+ { ixDIDT_TD_CTRL3, DIDT_TD_CTRL3__DIDT_FORCE_STALL_MASK, DIDT_TD_CTRL3__DIDT_FORCE_STALL__SHIFT, 0x0000 },
+ { ixDIDT_TD_CTRL3, DIDT_TD_CTRL3__DIDT_STALL_DELAY_EN_MASK, DIDT_TD_CTRL3__DIDT_STALL_DELAY_EN__SHIFT, 0x0000 },
+
+ /*DIDT_DB_CTRL3 */
+ { ixDIDT_DB_CTRL3, DIDT_DB_CTRL3__GC_DIDT_ENABLE_MASK, DIDT_DB_CTRL3__GC_DIDT_ENABLE__SHIFT, 0x0000 },
+ { ixDIDT_DB_CTRL3, DIDT_DB_CTRL3__GC_DIDT_CLK_EN_OVERRIDE_MASK, DIDT_DB_CTRL3__GC_DIDT_CLK_EN_OVERRIDE__SHIFT, 0x0000 },
+ { ixDIDT_DB_CTRL3, DIDT_DB_CTRL3__THROTTLE_POLICY_MASK, DIDT_DB_CTRL3__THROTTLE_POLICY__SHIFT, 0x0003 },
+ { ixDIDT_DB_CTRL3, DIDT_DB_CTRL3__DIDT_TRIGGER_THROTTLE_LOWBIT_MASK, DIDT_DB_CTRL3__DIDT_TRIGGER_THROTTLE_LOWBIT__SHIFT, 0x0000 },
+ { ixDIDT_DB_CTRL3, DIDT_DB_CTRL3__DIDT_POWER_LEVEL_LOWBIT_MASK, DIDT_DB_CTRL3__DIDT_POWER_LEVEL_LOWBIT__SHIFT, 0x0000 },
+ { ixDIDT_DB_CTRL3, DIDT_DB_CTRL3__DIDT_STALL_PATTERN_BIT_NUMS_MASK, DIDT_DB_CTRL3__DIDT_STALL_PATTERN_BIT_NUMS__SHIFT, 0x0003 },
+ { ixDIDT_DB_CTRL3, DIDT_DB_CTRL3__GC_DIDT_LEVEL_COMB_EN_MASK, DIDT_DB_CTRL3__GC_DIDT_LEVEL_COMB_EN__SHIFT, 0x0000 },
+ { ixDIDT_DB_CTRL3, DIDT_DB_CTRL3__SE_DIDT_LEVEL_COMB_EN_MASK, DIDT_DB_CTRL3__SE_DIDT_LEVEL_COMB_EN__SHIFT, 0x0000 },
+ { ixDIDT_DB_CTRL3, DIDT_DB_CTRL3__QUALIFY_STALL_EN_MASK, DIDT_DB_CTRL3__QUALIFY_STALL_EN__SHIFT, 0x0000 },
+ { ixDIDT_DB_CTRL3, DIDT_DB_CTRL3__DIDT_STALL_SEL_MASK, DIDT_DB_CTRL3__DIDT_STALL_SEL__SHIFT, 0x0000 },
+ { ixDIDT_DB_CTRL3, DIDT_DB_CTRL3__DIDT_FORCE_STALL_MASK, DIDT_DB_CTRL3__DIDT_FORCE_STALL__SHIFT, 0x0000 },
+ { ixDIDT_DB_CTRL3, DIDT_DB_CTRL3__DIDT_STALL_DELAY_EN_MASK, DIDT_DB_CTRL3__DIDT_STALL_DELAY_EN__SHIFT, 0x0000 },
+
+ { 0xFFFFFFFF } /* End of list */
+};
+
+static const struct vega10_didt_config_reg SEDiDtCtrl2Config_Vega10[] =
+{
+/* ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ * Offset Mask Shift Value
+ * ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ */
+ /* DIDT_SQ */
+ { ixDIDT_SQ_CTRL2, DIDT_SQ_CTRL2__MAX_POWER_DELTA_MASK, DIDT_SQ_CTRL2__MAX_POWER_DELTA__SHIFT, 0x3853 },
+ { ixDIDT_SQ_CTRL2, DIDT_SQ_CTRL2__SHORT_TERM_INTERVAL_SIZE_MASK, DIDT_SQ_CTRL2__SHORT_TERM_INTERVAL_SIZE__SHIFT, 0x00c0 },
+ { ixDIDT_SQ_CTRL2, DIDT_SQ_CTRL2__LONG_TERM_INTERVAL_RATIO_MASK, DIDT_SQ_CTRL2__LONG_TERM_INTERVAL_RATIO__SHIFT, 0x0000 },
+
+ /* DIDT_TD */
+ { ixDIDT_TD_CTRL2, DIDT_TD_CTRL2__MAX_POWER_DELTA_MASK, DIDT_TD_CTRL2__MAX_POWER_DELTA__SHIFT, 0x3fff },
+ { ixDIDT_TD_CTRL2, DIDT_TD_CTRL2__SHORT_TERM_INTERVAL_SIZE_MASK, DIDT_TD_CTRL2__SHORT_TERM_INTERVAL_SIZE__SHIFT, 0x00c0 },
+ { ixDIDT_TD_CTRL2, DIDT_TD_CTRL2__LONG_TERM_INTERVAL_RATIO_MASK, DIDT_TD_CTRL2__LONG_TERM_INTERVAL_RATIO__SHIFT, 0x0001 },
+
+ /* DIDT_TCP */
+ { ixDIDT_TCP_CTRL2, DIDT_TCP_CTRL2__MAX_POWER_DELTA_MASK, DIDT_TCP_CTRL2__MAX_POWER_DELTA__SHIFT, 0x3dde },
+ { ixDIDT_TCP_CTRL2, DIDT_TCP_CTRL2__SHORT_TERM_INTERVAL_SIZE_MASK, DIDT_TCP_CTRL2__SHORT_TERM_INTERVAL_SIZE__SHIFT, 0x00c0 },
+ { ixDIDT_TCP_CTRL2, DIDT_TCP_CTRL2__LONG_TERM_INTERVAL_RATIO_MASK, DIDT_TCP_CTRL2__LONG_TERM_INTERVAL_RATIO__SHIFT, 0x0001 },
+
+ /* DIDT_DB */
+ { ixDIDT_DB_CTRL2, DIDT_DB_CTRL2__MAX_POWER_DELTA_MASK, DIDT_DB_CTRL2__MAX_POWER_DELTA__SHIFT, 0x3dde },
+ { ixDIDT_DB_CTRL2, DIDT_DB_CTRL2__SHORT_TERM_INTERVAL_SIZE_MASK, DIDT_DB_CTRL2__SHORT_TERM_INTERVAL_SIZE__SHIFT, 0x00c0 },
+ { ixDIDT_DB_CTRL2, DIDT_DB_CTRL2__LONG_TERM_INTERVAL_RATIO_MASK, DIDT_DB_CTRL2__LONG_TERM_INTERVAL_RATIO__SHIFT, 0x0001 },
+
+ { 0xFFFFFFFF } /* End of list */
+};
+
+static const struct vega10_didt_config_reg SEDiDtCtrl1Config_Vega10[] =
+{
+/* ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ * Offset Mask Shift Value
+ * ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ */
+ /* DIDT_SQ */
+ { ixDIDT_SQ_CTRL1, DIDT_SQ_CTRL1__MIN_POWER_MASK, DIDT_SQ_CTRL1__MIN_POWER__SHIFT, 0x0000 },
+ { ixDIDT_SQ_CTRL1, DIDT_SQ_CTRL1__MAX_POWER_MASK, DIDT_SQ_CTRL1__MAX_POWER__SHIFT, 0xffff },
+ /* DIDT_TD */
+ { ixDIDT_TD_CTRL1, DIDT_TD_CTRL1__MIN_POWER_MASK, DIDT_TD_CTRL1__MIN_POWER__SHIFT, 0x0000 },
+ { ixDIDT_TD_CTRL1, DIDT_TD_CTRL1__MAX_POWER_MASK, DIDT_TD_CTRL1__MAX_POWER__SHIFT, 0xffff },
+ /* DIDT_TCP */
+ { ixDIDT_TCP_CTRL1, DIDT_TCP_CTRL1__MIN_POWER_MASK, DIDT_TCP_CTRL1__MIN_POWER__SHIFT, 0x0000 },
+ { ixDIDT_TCP_CTRL1, DIDT_TCP_CTRL1__MAX_POWER_MASK, DIDT_TCP_CTRL1__MAX_POWER__SHIFT, 0xffff },
+ /* DIDT_DB */
+ { ixDIDT_DB_CTRL1, DIDT_DB_CTRL1__MIN_POWER_MASK, DIDT_DB_CTRL1__MIN_POWER__SHIFT, 0x0000 },
+ { ixDIDT_DB_CTRL1, DIDT_DB_CTRL1__MAX_POWER_MASK, DIDT_DB_CTRL1__MAX_POWER__SHIFT, 0xffff },
+
+ { 0xFFFFFFFF } /* End of list */
+};
+
+
+static const struct vega10_didt_config_reg SEDiDtWeightConfig_Vega10[] =
+{
+/* ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ * Offset Mask Shift Value
+ * ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ */
+ /* DIDT_SQ */
+ { ixDIDT_SQ_WEIGHT0_3, 0xFFFFFFFF, 0, 0x2B363B1A },
+ { ixDIDT_SQ_WEIGHT4_7, 0xFFFFFFFF, 0, 0x270B2432 },
+ { ixDIDT_SQ_WEIGHT8_11, 0xFFFFFFFF, 0, 0x00000018 },
+
+ /* DIDT_TD */
+ { ixDIDT_TD_WEIGHT0_3, 0xFFFFFFFF, 0, 0x2B1D220F },
+ { ixDIDT_TD_WEIGHT4_7, 0xFFFFFFFF, 0, 0x00007558 },
+ { ixDIDT_TD_WEIGHT8_11, 0xFFFFFFFF, 0, 0x00000000 },
+
+ /* DIDT_TCP */
+ { ixDIDT_TCP_WEIGHT0_3, 0xFFFFFFFF, 0, 0x5ACE160D },
+ { ixDIDT_TCP_WEIGHT4_7, 0xFFFFFFFF, 0, 0x00000000 },
+ { ixDIDT_TCP_WEIGHT8_11, 0xFFFFFFFF, 0, 0x00000000 },
+
+ /* DIDT_DB */
+ { ixDIDT_DB_WEIGHT0_3, 0xFFFFFFFF, 0, 0x0E152A0F },
+ { ixDIDT_DB_WEIGHT4_7, 0xFFFFFFFF, 0, 0x09061813 },
+ { ixDIDT_DB_WEIGHT8_11, 0xFFFFFFFF, 0, 0x00000013 },
+
+ { 0xFFFFFFFF } /* End of list */
+};
+
+static const struct vega10_didt_config_reg SEDiDtCtrl0Config_Vega10[] =
+{
+/* ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ * Offset Mask Shift Value
+ * ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ */
+ /* DIDT_SQ */
+ { ixDIDT_SQ_CTRL0, DIDT_SQ_CTRL0__DIDT_CTRL_EN_MASK, DIDT_SQ_CTRL0__DIDT_CTRL_EN__SHIFT, 0x0000 },
+ { ixDIDT_SQ_CTRL0, DIDT_SQ_CTRL0__PHASE_OFFSET_MASK, DIDT_SQ_CTRL0__PHASE_OFFSET__SHIFT, 0x0000 },
+ { ixDIDT_SQ_CTRL0, DIDT_SQ_CTRL0__DIDT_CTRL_RST_MASK, DIDT_SQ_CTRL0__DIDT_CTRL_RST__SHIFT, 0x0000 },
+ { ixDIDT_SQ_CTRL0, DIDT_SQ_CTRL0__DIDT_CLK_EN_OVERRIDE_MASK, DIDT_SQ_CTRL0__DIDT_CLK_EN_OVERRIDE__SHIFT, 0x0000 },
+ { ixDIDT_SQ_CTRL0, DIDT_SQ_CTRL0__DIDT_STALL_CTRL_EN_MASK, DIDT_SQ_CTRL0__DIDT_STALL_CTRL_EN__SHIFT, 0x0001 },
+ { ixDIDT_SQ_CTRL0, DIDT_SQ_CTRL0__DIDT_TUNING_CTRL_EN_MASK, DIDT_SQ_CTRL0__DIDT_TUNING_CTRL_EN__SHIFT, 0x0001 },
+ { ixDIDT_SQ_CTRL0, DIDT_SQ_CTRL0__DIDT_STALL_AUTO_RELEASE_EN_MASK, DIDT_SQ_CTRL0__DIDT_STALL_AUTO_RELEASE_EN__SHIFT, 0x0001 },
+ { ixDIDT_SQ_CTRL0, DIDT_SQ_CTRL0__DIDT_HI_POWER_THRESHOLD_MASK, DIDT_SQ_CTRL0__DIDT_HI_POWER_THRESHOLD__SHIFT, 0xffff },
+ { ixDIDT_SQ_CTRL0, DIDT_SQ_CTRL0__DIDT_AUTO_MPD_EN_MASK, DIDT_SQ_CTRL0__DIDT_AUTO_MPD_EN__SHIFT, 0x0000 },
+ { ixDIDT_SQ_CTRL0, DIDT_SQ_CTRL0__DIDT_STALL_EVENT_EN_MASK, DIDT_SQ_CTRL0__DIDT_STALL_EVENT_EN__SHIFT, 0x0000 },
+ { ixDIDT_SQ_CTRL0, DIDT_SQ_CTRL0__DIDT_STALL_EVENT_COUNTER_CLEAR_MASK, DIDT_SQ_CTRL0__DIDT_STALL_EVENT_COUNTER_CLEAR__SHIFT, 0x0000 },
+ /* DIDT_TD */
+ { ixDIDT_TD_CTRL0, DIDT_TD_CTRL0__DIDT_CTRL_EN_MASK, DIDT_TD_CTRL0__DIDT_CTRL_EN__SHIFT, 0x0000 },
+ { ixDIDT_TD_CTRL0, DIDT_TD_CTRL0__PHASE_OFFSET_MASK, DIDT_TD_CTRL0__PHASE_OFFSET__SHIFT, 0x0000 },
+ { ixDIDT_TD_CTRL0, DIDT_TD_CTRL0__DIDT_CTRL_RST_MASK, DIDT_TD_CTRL0__DIDT_CTRL_RST__SHIFT, 0x0000 },
+ { ixDIDT_TD_CTRL0, DIDT_TD_CTRL0__DIDT_CLK_EN_OVERRIDE_MASK, DIDT_TD_CTRL0__DIDT_CLK_EN_OVERRIDE__SHIFT, 0x0000 },
+ { ixDIDT_TD_CTRL0, DIDT_TD_CTRL0__DIDT_STALL_CTRL_EN_MASK, DIDT_TD_CTRL0__DIDT_STALL_CTRL_EN__SHIFT, 0x0001 },
+ { ixDIDT_TD_CTRL0, DIDT_TD_CTRL0__DIDT_TUNING_CTRL_EN_MASK, DIDT_TD_CTRL0__DIDT_TUNING_CTRL_EN__SHIFT, 0x0001 },
+ { ixDIDT_TD_CTRL0, DIDT_TD_CTRL0__DIDT_STALL_AUTO_RELEASE_EN_MASK, DIDT_TD_CTRL0__DIDT_STALL_AUTO_RELEASE_EN__SHIFT, 0x0001 },
+ { ixDIDT_TD_CTRL0, DIDT_TD_CTRL0__DIDT_HI_POWER_THRESHOLD_MASK, DIDT_TD_CTRL0__DIDT_HI_POWER_THRESHOLD__SHIFT, 0xffff },
+ { ixDIDT_TD_CTRL0, DIDT_TD_CTRL0__DIDT_AUTO_MPD_EN_MASK, DIDT_TD_CTRL0__DIDT_AUTO_MPD_EN__SHIFT, 0x0000 },
+ { ixDIDT_TD_CTRL0, DIDT_TD_CTRL0__DIDT_STALL_EVENT_EN_MASK, DIDT_TD_CTRL0__DIDT_STALL_EVENT_EN__SHIFT, 0x0000 },
+ { ixDIDT_TD_CTRL0, DIDT_TD_CTRL0__DIDT_STALL_EVENT_COUNTER_CLEAR_MASK, DIDT_TD_CTRL0__DIDT_STALL_EVENT_COUNTER_CLEAR__SHIFT, 0x0000 },
+ /* DIDT_TCP */
+ { ixDIDT_TCP_CTRL0, DIDT_TCP_CTRL0__DIDT_CTRL_EN_MASK, DIDT_TCP_CTRL0__DIDT_CTRL_EN__SHIFT, 0x0000 },
+ { ixDIDT_TCP_CTRL0, DIDT_TCP_CTRL0__PHASE_OFFSET_MASK, DIDT_TCP_CTRL0__PHASE_OFFSET__SHIFT, 0x0000 },
+ { ixDIDT_TCP_CTRL0, DIDT_TCP_CTRL0__DIDT_CTRL_RST_MASK, DIDT_TCP_CTRL0__DIDT_CTRL_RST__SHIFT, 0x0000 },
+ { ixDIDT_TCP_CTRL0, DIDT_TCP_CTRL0__DIDT_CLK_EN_OVERRIDE_MASK, DIDT_TCP_CTRL0__DIDT_CLK_EN_OVERRIDE__SHIFT, 0x0000 },
+ { ixDIDT_TCP_CTRL0, DIDT_TCP_CTRL0__DIDT_STALL_CTRL_EN_MASK, DIDT_TCP_CTRL0__DIDT_STALL_CTRL_EN__SHIFT, 0x0001 },
+ { ixDIDT_TCP_CTRL0, DIDT_TCP_CTRL0__DIDT_TUNING_CTRL_EN_MASK, DIDT_TCP_CTRL0__DIDT_TUNING_CTRL_EN__SHIFT, 0x0001 },
+ { ixDIDT_TCP_CTRL0, DIDT_TCP_CTRL0__DIDT_STALL_AUTO_RELEASE_EN_MASK, DIDT_TCP_CTRL0__DIDT_STALL_AUTO_RELEASE_EN__SHIFT, 0x0001 },
+ { ixDIDT_TCP_CTRL0, DIDT_TCP_CTRL0__DIDT_HI_POWER_THRESHOLD_MASK, DIDT_TCP_CTRL0__DIDT_HI_POWER_THRESHOLD__SHIFT, 0xffff },
+ { ixDIDT_TCP_CTRL0, DIDT_TCP_CTRL0__DIDT_AUTO_MPD_EN_MASK, DIDT_TCP_CTRL0__DIDT_AUTO_MPD_EN__SHIFT, 0x0000 },
+ { ixDIDT_TCP_CTRL0, DIDT_TCP_CTRL0__DIDT_STALL_EVENT_EN_MASK, DIDT_TCP_CTRL0__DIDT_STALL_EVENT_EN__SHIFT, 0x0000 },
+ { ixDIDT_TCP_CTRL0, DIDT_TCP_CTRL0__DIDT_STALL_EVENT_COUNTER_CLEAR_MASK, DIDT_TCP_CTRL0__DIDT_STALL_EVENT_COUNTER_CLEAR__SHIFT, 0x0000 },
+ /* DIDT_DB */
+ { ixDIDT_DB_CTRL0, DIDT_DB_CTRL0__DIDT_CTRL_EN_MASK, DIDT_DB_CTRL0__DIDT_CTRL_EN__SHIFT, 0x0000 },
+ { ixDIDT_DB_CTRL0, DIDT_DB_CTRL0__PHASE_OFFSET_MASK, DIDT_DB_CTRL0__PHASE_OFFSET__SHIFT, 0x0000 },
+ { ixDIDT_DB_CTRL0, DIDT_DB_CTRL0__DIDT_CTRL_RST_MASK, DIDT_DB_CTRL0__DIDT_CTRL_RST__SHIFT, 0x0000 },
+ { ixDIDT_DB_CTRL0, DIDT_DB_CTRL0__DIDT_CLK_EN_OVERRIDE_MASK, DIDT_DB_CTRL0__DIDT_CLK_EN_OVERRIDE__SHIFT, 0x0000 },
+ { ixDIDT_DB_CTRL0, DIDT_DB_CTRL0__DIDT_STALL_CTRL_EN_MASK, DIDT_DB_CTRL0__DIDT_STALL_CTRL_EN__SHIFT, 0x0001 },
+ { ixDIDT_DB_CTRL0, DIDT_DB_CTRL0__DIDT_TUNING_CTRL_EN_MASK, DIDT_DB_CTRL0__DIDT_TUNING_CTRL_EN__SHIFT, 0x0001 },
+ { ixDIDT_DB_CTRL0, DIDT_DB_CTRL0__DIDT_STALL_AUTO_RELEASE_EN_MASK, DIDT_DB_CTRL0__DIDT_STALL_AUTO_RELEASE_EN__SHIFT, 0x0001 },
+ { ixDIDT_DB_CTRL0, DIDT_DB_CTRL0__DIDT_HI_POWER_THRESHOLD_MASK, DIDT_DB_CTRL0__DIDT_HI_POWER_THRESHOLD__SHIFT, 0xffff },
+ { ixDIDT_DB_CTRL0, DIDT_DB_CTRL0__DIDT_AUTO_MPD_EN_MASK, DIDT_DB_CTRL0__DIDT_AUTO_MPD_EN__SHIFT, 0x0000 },
+ { ixDIDT_DB_CTRL0, DIDT_DB_CTRL0__DIDT_STALL_EVENT_EN_MASK, DIDT_DB_CTRL0__DIDT_STALL_EVENT_EN__SHIFT, 0x0000 },
+ { ixDIDT_DB_CTRL0, DIDT_DB_CTRL0__DIDT_STALL_EVENT_COUNTER_CLEAR_MASK, DIDT_DB_CTRL0__DIDT_STALL_EVENT_COUNTER_CLEAR__SHIFT, 0x0000 },
+
+ { 0xFFFFFFFF } /* End of list */
+};
+
+
+static const struct vega10_didt_config_reg SEDiDtStallCtrlConfig_vega10[] =
+{
+/* ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ * Offset Mask Shift Value
+ * ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ */
+ /* DIDT_SQ */
+ { ixDIDT_SQ_STALL_CTRL, DIDT_SQ_STALL_CTRL__DIDT_STALL_DELAY_HI_MASK, DIDT_SQ_STALL_CTRL__DIDT_STALL_DELAY_HI__SHIFT, 0x0004 },
+ { ixDIDT_SQ_STALL_CTRL, DIDT_SQ_STALL_CTRL__DIDT_STALL_DELAY_LO_MASK, DIDT_SQ_STALL_CTRL__DIDT_STALL_DELAY_LO__SHIFT, 0x0004 },
+ { ixDIDT_SQ_STALL_CTRL, DIDT_SQ_STALL_CTRL__DIDT_MAX_STALLS_ALLOWED_HI_MASK, DIDT_SQ_STALL_CTRL__DIDT_MAX_STALLS_ALLOWED_HI__SHIFT, 0x000a },
+ { ixDIDT_SQ_STALL_CTRL, DIDT_SQ_STALL_CTRL__DIDT_MAX_STALLS_ALLOWED_LO_MASK, DIDT_SQ_STALL_CTRL__DIDT_MAX_STALLS_ALLOWED_LO__SHIFT, 0x000a },
+
+ /* DIDT_TD */
+ { ixDIDT_TD_STALL_CTRL, DIDT_TD_STALL_CTRL__DIDT_STALL_DELAY_HI_MASK, DIDT_TD_STALL_CTRL__DIDT_STALL_DELAY_HI__SHIFT, 0x0001 },
+ { ixDIDT_TD_STALL_CTRL, DIDT_TD_STALL_CTRL__DIDT_STALL_DELAY_LO_MASK, DIDT_TD_STALL_CTRL__DIDT_STALL_DELAY_LO__SHIFT, 0x0001 },
+ { ixDIDT_TD_STALL_CTRL, DIDT_TD_STALL_CTRL__DIDT_MAX_STALLS_ALLOWED_HI_MASK, DIDT_TD_STALL_CTRL__DIDT_MAX_STALLS_ALLOWED_HI__SHIFT, 0x000a },
+ { ixDIDT_TD_STALL_CTRL, DIDT_TD_STALL_CTRL__DIDT_MAX_STALLS_ALLOWED_LO_MASK, DIDT_TD_STALL_CTRL__DIDT_MAX_STALLS_ALLOWED_LO__SHIFT, 0x000a },
+
+ /* DIDT_TCP */
+ { ixDIDT_TCP_STALL_CTRL, DIDT_TCP_STALL_CTRL__DIDT_STALL_DELAY_HI_MASK, DIDT_TCP_STALL_CTRL__DIDT_STALL_DELAY_HI__SHIFT, 0x0001 },
+ { ixDIDT_TCP_STALL_CTRL, DIDT_TCP_STALL_CTRL__DIDT_STALL_DELAY_LO_MASK, DIDT_TCP_STALL_CTRL__DIDT_STALL_DELAY_LO__SHIFT, 0x0001 },
+ { ixDIDT_TCP_STALL_CTRL, DIDT_TCP_STALL_CTRL__DIDT_MAX_STALLS_ALLOWED_HI_MASK, DIDT_TCP_STALL_CTRL__DIDT_MAX_STALLS_ALLOWED_HI__SHIFT, 0x000a },
+ { ixDIDT_TCP_STALL_CTRL, DIDT_TCP_STALL_CTRL__DIDT_MAX_STALLS_ALLOWED_LO_MASK, DIDT_TCP_STALL_CTRL__DIDT_MAX_STALLS_ALLOWED_LO__SHIFT, 0x000a },
+
+ /* DIDT_DB */
+ { ixDIDT_DB_STALL_CTRL, DIDT_DB_STALL_CTRL__DIDT_STALL_DELAY_HI_MASK, DIDT_DB_STALL_CTRL__DIDT_STALL_DELAY_HI__SHIFT, 0x0004 },
+ { ixDIDT_DB_STALL_CTRL, DIDT_DB_STALL_CTRL__DIDT_STALL_DELAY_LO_MASK, DIDT_DB_STALL_CTRL__DIDT_STALL_DELAY_LO__SHIFT, 0x0004 },
+ { ixDIDT_DB_STALL_CTRL, DIDT_DB_STALL_CTRL__DIDT_MAX_STALLS_ALLOWED_HI_MASK, DIDT_DB_STALL_CTRL__DIDT_MAX_STALLS_ALLOWED_HI__SHIFT, 0x000a },
+ { ixDIDT_DB_STALL_CTRL, DIDT_DB_STALL_CTRL__DIDT_MAX_STALLS_ALLOWED_LO_MASK, DIDT_DB_STALL_CTRL__DIDT_MAX_STALLS_ALLOWED_LO__SHIFT, 0x000a },
+
+ { 0xFFFFFFFF } /* End of list */
+};
+
+static const struct vega10_didt_config_reg SEDiDtStallPatternConfig_vega10[] =
+{
+/* ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ * Offset Mask Shift Value
+ * ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ */
+ /* DIDT_SQ_STALL_PATTERN_1_2 */
+ { ixDIDT_SQ_STALL_PATTERN_1_2, DIDT_SQ_STALL_PATTERN_1_2__DIDT_STALL_PATTERN_1_MASK, DIDT_SQ_STALL_PATTERN_1_2__DIDT_STALL_PATTERN_1__SHIFT, 0x0001 },
+ { ixDIDT_SQ_STALL_PATTERN_1_2, DIDT_SQ_STALL_PATTERN_1_2__DIDT_STALL_PATTERN_2_MASK, DIDT_SQ_STALL_PATTERN_1_2__DIDT_STALL_PATTERN_2__SHIFT, 0x0001 },
+
+ /* DIDT_SQ_STALL_PATTERN_3_4 */
+ { ixDIDT_SQ_STALL_PATTERN_3_4, DIDT_SQ_STALL_PATTERN_3_4__DIDT_STALL_PATTERN_3_MASK, DIDT_SQ_STALL_PATTERN_3_4__DIDT_STALL_PATTERN_3__SHIFT, 0x0001 },
+ { ixDIDT_SQ_STALL_PATTERN_3_4, DIDT_SQ_STALL_PATTERN_3_4__DIDT_STALL_PATTERN_4_MASK, DIDT_SQ_STALL_PATTERN_3_4__DIDT_STALL_PATTERN_4__SHIFT, 0x0001 },
+
+ /* DIDT_SQ_STALL_PATTERN_5_6 */
+ { ixDIDT_SQ_STALL_PATTERN_5_6, DIDT_SQ_STALL_PATTERN_5_6__DIDT_STALL_PATTERN_5_MASK, DIDT_SQ_STALL_PATTERN_5_6__DIDT_STALL_PATTERN_5__SHIFT, 0x0000 },
+ { ixDIDT_SQ_STALL_PATTERN_5_6, DIDT_SQ_STALL_PATTERN_5_6__DIDT_STALL_PATTERN_6_MASK, DIDT_SQ_STALL_PATTERN_5_6__DIDT_STALL_PATTERN_6__SHIFT, 0x0000 },
+
+ /* DIDT_SQ_STALL_PATTERN_7 */
+ { ixDIDT_SQ_STALL_PATTERN_7, DIDT_SQ_STALL_PATTERN_7__DIDT_STALL_PATTERN_7_MASK, DIDT_SQ_STALL_PATTERN_7__DIDT_STALL_PATTERN_7__SHIFT, 0x0000 },
+
+ /* DIDT_TCP_STALL_PATTERN_1_2 */
+ { ixDIDT_TCP_STALL_PATTERN_1_2, DIDT_TCP_STALL_PATTERN_1_2__DIDT_STALL_PATTERN_1_MASK, DIDT_TCP_STALL_PATTERN_1_2__DIDT_STALL_PATTERN_1__SHIFT, 0x0001 },
+ { ixDIDT_TCP_STALL_PATTERN_1_2, DIDT_TCP_STALL_PATTERN_1_2__DIDT_STALL_PATTERN_2_MASK, DIDT_TCP_STALL_PATTERN_1_2__DIDT_STALL_PATTERN_2__SHIFT, 0x0001 },
+
+ /* DIDT_TCP_STALL_PATTERN_3_4 */
+ { ixDIDT_TCP_STALL_PATTERN_3_4, DIDT_TCP_STALL_PATTERN_3_4__DIDT_STALL_PATTERN_3_MASK, DIDT_TCP_STALL_PATTERN_3_4__DIDT_STALL_PATTERN_3__SHIFT, 0x0001 },
+ { ixDIDT_TCP_STALL_PATTERN_3_4, DIDT_TCP_STALL_PATTERN_3_4__DIDT_STALL_PATTERN_4_MASK, DIDT_TCP_STALL_PATTERN_3_4__DIDT_STALL_PATTERN_4__SHIFT, 0x0001 },
+
+ /* DIDT_TCP_STALL_PATTERN_5_6 */
+ { ixDIDT_TCP_STALL_PATTERN_5_6, DIDT_TCP_STALL_PATTERN_5_6__DIDT_STALL_PATTERN_5_MASK, DIDT_TCP_STALL_PATTERN_5_6__DIDT_STALL_PATTERN_5__SHIFT, 0x0000 },
+ { ixDIDT_TCP_STALL_PATTERN_5_6, DIDT_TCP_STALL_PATTERN_5_6__DIDT_STALL_PATTERN_6_MASK, DIDT_TCP_STALL_PATTERN_5_6__DIDT_STALL_PATTERN_6__SHIFT, 0x0000 },
+
+ /* DIDT_TCP_STALL_PATTERN_7 */
+ { ixDIDT_TCP_STALL_PATTERN_7, DIDT_TCP_STALL_PATTERN_7__DIDT_STALL_PATTERN_7_MASK, DIDT_TCP_STALL_PATTERN_7__DIDT_STALL_PATTERN_7__SHIFT, 0x0000 },
+
+ /* DIDT_TD_STALL_PATTERN_1_2 */
+ { ixDIDT_TD_STALL_PATTERN_1_2, DIDT_TD_STALL_PATTERN_1_2__DIDT_STALL_PATTERN_1_MASK, DIDT_TD_STALL_PATTERN_1_2__DIDT_STALL_PATTERN_1__SHIFT, 0x0001 },
+ { ixDIDT_TD_STALL_PATTERN_1_2, DIDT_TD_STALL_PATTERN_1_2__DIDT_STALL_PATTERN_2_MASK, DIDT_TD_STALL_PATTERN_1_2__DIDT_STALL_PATTERN_2__SHIFT, 0x0001 },
+
+ /* DIDT_TD_STALL_PATTERN_3_4 */
+ { ixDIDT_TD_STALL_PATTERN_3_4, DIDT_TD_STALL_PATTERN_3_4__DIDT_STALL_PATTERN_3_MASK, DIDT_TD_STALL_PATTERN_3_4__DIDT_STALL_PATTERN_3__SHIFT, 0x0001 },
+ { ixDIDT_TD_STALL_PATTERN_3_4, DIDT_TD_STALL_PATTERN_3_4__DIDT_STALL_PATTERN_4_MASK, DIDT_TD_STALL_PATTERN_3_4__DIDT_STALL_PATTERN_4__SHIFT, 0x0001 },
+
+ /* DIDT_TD_STALL_PATTERN_5_6 */
+ { ixDIDT_TD_STALL_PATTERN_5_6, DIDT_TD_STALL_PATTERN_5_6__DIDT_STALL_PATTERN_5_MASK, DIDT_TD_STALL_PATTERN_5_6__DIDT_STALL_PATTERN_5__SHIFT, 0x0000 },
+ { ixDIDT_TD_STALL_PATTERN_5_6, DIDT_TD_STALL_PATTERN_5_6__DIDT_STALL_PATTERN_6_MASK, DIDT_TD_STALL_PATTERN_5_6__DIDT_STALL_PATTERN_6__SHIFT, 0x0000 },
+
+ /* DIDT_TD_STALL_PATTERN_7 */
+ { ixDIDT_TD_STALL_PATTERN_7, DIDT_TD_STALL_PATTERN_7__DIDT_STALL_PATTERN_7_MASK, DIDT_TD_STALL_PATTERN_7__DIDT_STALL_PATTERN_7__SHIFT, 0x0000 },
+
+ /* DIDT_DB_STALL_PATTERN_1_2 */
+ { ixDIDT_DB_STALL_PATTERN_1_2, DIDT_DB_STALL_PATTERN_1_2__DIDT_STALL_PATTERN_1_MASK, DIDT_DB_STALL_PATTERN_1_2__DIDT_STALL_PATTERN_1__SHIFT, 0x0001 },
+ { ixDIDT_DB_STALL_PATTERN_1_2, DIDT_DB_STALL_PATTERN_1_2__DIDT_STALL_PATTERN_2_MASK, DIDT_DB_STALL_PATTERN_1_2__DIDT_STALL_PATTERN_2__SHIFT, 0x0001 },
+
+ /* DIDT_DB_STALL_PATTERN_3_4 */
+ { ixDIDT_DB_STALL_PATTERN_3_4, DIDT_DB_STALL_PATTERN_3_4__DIDT_STALL_PATTERN_3_MASK, DIDT_DB_STALL_PATTERN_3_4__DIDT_STALL_PATTERN_3__SHIFT, 0x0001 },
+ { ixDIDT_DB_STALL_PATTERN_3_4, DIDT_DB_STALL_PATTERN_3_4__DIDT_STALL_PATTERN_4_MASK, DIDT_DB_STALL_PATTERN_3_4__DIDT_STALL_PATTERN_4__SHIFT, 0x0001 },
+
+ /* DIDT_DB_STALL_PATTERN_5_6 */
+ { ixDIDT_DB_STALL_PATTERN_5_6, DIDT_DB_STALL_PATTERN_5_6__DIDT_STALL_PATTERN_5_MASK, DIDT_DB_STALL_PATTERN_5_6__DIDT_STALL_PATTERN_5__SHIFT, 0x0000 },
+ { ixDIDT_DB_STALL_PATTERN_5_6, DIDT_DB_STALL_PATTERN_5_6__DIDT_STALL_PATTERN_6_MASK, DIDT_DB_STALL_PATTERN_5_6__DIDT_STALL_PATTERN_6__SHIFT, 0x0000 },
+
+ /* DIDT_DB_STALL_PATTERN_7 */
+ { ixDIDT_DB_STALL_PATTERN_7, DIDT_DB_STALL_PATTERN_7__DIDT_STALL_PATTERN_7_MASK, DIDT_DB_STALL_PATTERN_7__DIDT_STALL_PATTERN_7__SHIFT, 0x0000 },
+
+ { 0xFFFFFFFF } /* End of list */
+};
+
+static const struct vega10_didt_config_reg SELCacConfig_Vega10[] =
+{
+/* ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ * Offset Mask Shift Value
+ * ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ */
+ /* SQ */
+ { ixSE_CAC_CNTL, 0xFFFFFFFF, 0, 0x00060021 },
+ { ixSE_CAC_CNTL, 0xFFFFFFFF, 0, 0x00860021 },
+ { ixSE_CAC_CNTL, 0xFFFFFFFF, 0, 0x01060021 },
+ { ixSE_CAC_CNTL, 0xFFFFFFFF, 0, 0x01860021 },
+ { ixSE_CAC_CNTL, 0xFFFFFFFF, 0, 0x02060021 },
+ { ixSE_CAC_CNTL, 0xFFFFFFFF, 0, 0x02860021 },
+ { ixSE_CAC_CNTL, 0xFFFFFFFF, 0, 0x03060021 },
+ { ixSE_CAC_CNTL, 0xFFFFFFFF, 0, 0x03860021 },
+ { ixSE_CAC_CNTL, 0xFFFFFFFF, 0, 0x04060021 },
+ /* TD */
+ { ixSE_CAC_CNTL, 0xFFFFFFFF, 0, 0x000E0020 },
+ { ixSE_CAC_CNTL, 0xFFFFFFFF, 0, 0x008E0020 },
+ { ixSE_CAC_CNTL, 0xFFFFFFFF, 0, 0x010E0020 },
+ { ixSE_CAC_CNTL, 0xFFFFFFFF, 0, 0x018E0020 },
+ { ixSE_CAC_CNTL, 0xFFFFFFFF, 0, 0x020E0020 },
+ { ixSE_CAC_CNTL, 0xFFFFFFFF, 0, 0x028E0020 },
+ /* TCP */
+ { ixSE_CAC_CNTL, 0xFFFFFFFF, 0, 0x001c0020 },
+ { ixSE_CAC_CNTL, 0xFFFFFFFF, 0, 0x009c0020 },
+ { ixSE_CAC_CNTL, 0xFFFFFFFF, 0, 0x011c0020 },
+ { ixSE_CAC_CNTL, 0xFFFFFFFF, 0, 0x019c0020 },
+ { ixSE_CAC_CNTL, 0xFFFFFFFF, 0, 0x021c0020 },
+ /* DB */
+ { ixSE_CAC_CNTL, 0xFFFFFFFF, 0, 0x00200008 },
+ { ixSE_CAC_CNTL, 0xFFFFFFFF, 0, 0x00820008 },
+ { ixSE_CAC_CNTL, 0xFFFFFFFF, 0, 0x01020008 },
+ { ixSE_CAC_CNTL, 0xFFFFFFFF, 0, 0x01820008 },
+
+ { 0xFFFFFFFF } /* End of list */
+};
+
+
+static const struct vega10_didt_config_reg SEEDCStallPatternConfig_Vega10[] =
+{
+/* ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ * Offset Mask Shift Value
+ * ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ */
+ /* SQ */
+ { ixDIDT_SQ_EDC_STALL_PATTERN_1_2, 0xFFFFFFFF, 0, 0x00030001 },
+ { ixDIDT_SQ_EDC_STALL_PATTERN_3_4, 0xFFFFFFFF, 0, 0x000F0007 },
+ { ixDIDT_SQ_EDC_STALL_PATTERN_5_6, 0xFFFFFFFF, 0, 0x003F001F },
+ { ixDIDT_SQ_EDC_STALL_PATTERN_7, 0xFFFFFFFF, 0, 0x0000007F },
+ /* TD */
+ { ixDIDT_TD_EDC_STALL_PATTERN_1_2, 0xFFFFFFFF, 0, 0x00000000 },
+ { ixDIDT_TD_EDC_STALL_PATTERN_3_4, 0xFFFFFFFF, 0, 0x00000000 },
+ { ixDIDT_TD_EDC_STALL_PATTERN_5_6, 0xFFFFFFFF, 0, 0x00000000 },
+ { ixDIDT_TD_EDC_STALL_PATTERN_7, 0xFFFFFFFF, 0, 0x00000000 },
+ /* TCP */
+ { ixDIDT_TCP_EDC_STALL_PATTERN_1_2, 0xFFFFFFFF, 0, 0x00000000 },
+ { ixDIDT_TCP_EDC_STALL_PATTERN_3_4, 0xFFFFFFFF, 0, 0x00000000 },
+ { ixDIDT_TCP_EDC_STALL_PATTERN_5_6, 0xFFFFFFFF, 0, 0x00000000 },
+ { ixDIDT_TCP_EDC_STALL_PATTERN_7, 0xFFFFFFFF, 0, 0x00000000 },
+ /* DB */
+ { ixDIDT_DB_EDC_STALL_PATTERN_1_2, 0xFFFFFFFF, 0, 0x00000000 },
+ { ixDIDT_DB_EDC_STALL_PATTERN_3_4, 0xFFFFFFFF, 0, 0x00000000 },
+ { ixDIDT_DB_EDC_STALL_PATTERN_5_6, 0xFFFFFFFF, 0, 0x00000000 },
+ { ixDIDT_DB_EDC_STALL_PATTERN_7, 0xFFFFFFFF, 0, 0x00000000 },
+
+ { 0xFFFFFFFF } /* End of list */
+};
+
+static const struct vega10_didt_config_reg SEEDCForceStallPatternConfig_Vega10[] =
+{
+/* ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ * Offset Mask Shift Value
+ * ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ */
+ /* SQ */
+ { ixDIDT_SQ_EDC_STALL_PATTERN_1_2, 0xFFFFFFFF, 0, 0x00000015 },
+ { ixDIDT_SQ_EDC_STALL_PATTERN_3_4, 0xFFFFFFFF, 0, 0x00000000 },
+ { ixDIDT_SQ_EDC_STALL_PATTERN_5_6, 0xFFFFFFFF, 0, 0x00000000 },
+ { ixDIDT_SQ_EDC_STALL_PATTERN_7, 0xFFFFFFFF, 0, 0x00000000 },
+ /* TD */
+ { ixDIDT_TD_EDC_STALL_PATTERN_1_2, 0xFFFFFFFF, 0, 0x00000015 },
+ { ixDIDT_TD_EDC_STALL_PATTERN_3_4, 0xFFFFFFFF, 0, 0x00000000 },
+ { ixDIDT_TD_EDC_STALL_PATTERN_5_6, 0xFFFFFFFF, 0, 0x00000000 },
+ { ixDIDT_TD_EDC_STALL_PATTERN_7, 0xFFFFFFFF, 0, 0x00000000 },
+
+ { 0xFFFFFFFF } /* End of list */
+};
+
+static const struct vega10_didt_config_reg SEEDCStallDelayConfig_Vega10[] =
+{
+/* ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ * Offset Mask Shift Value
+ * ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ */
+ /* SQ */
+ { ixDIDT_SQ_EDC_STALL_DELAY_1, 0xFFFFFFFF, 0, 0x00000000 },
+ { ixDIDT_SQ_EDC_STALL_DELAY_2, 0xFFFFFFFF, 0, 0x00000000 },
+ { ixDIDT_SQ_EDC_STALL_DELAY_3, 0xFFFFFFFF, 0, 0x00000000 },
+ { ixDIDT_SQ_EDC_STALL_DELAY_4, 0xFFFFFFFF, 0, 0x00000000 },
+ /* TD */
+ { ixDIDT_TD_EDC_STALL_DELAY_1, 0xFFFFFFFF, 0, 0x00000000 },
+ { ixDIDT_TD_EDC_STALL_DELAY_2, 0xFFFFFFFF, 0, 0x00000000 },
+ { ixDIDT_TD_EDC_STALL_DELAY_3, 0xFFFFFFFF, 0, 0x00000000 },
+ { ixDIDT_TD_EDC_STALL_DELAY_4, 0xFFFFFFFF, 0, 0x00000000 },
+ /* TCP */
+ { ixDIDT_TCP_EDC_STALL_DELAY_1, 0xFFFFFFFF, 0, 0x00000000 },
+ { ixDIDT_TCP_EDC_STALL_DELAY_2, 0xFFFFFFFF, 0, 0x00000000 },
+ { ixDIDT_TCP_EDC_STALL_DELAY_3, 0xFFFFFFFF, 0, 0x00000000 },
+ { ixDIDT_TCP_EDC_STALL_DELAY_4, 0xFFFFFFFF, 0, 0x00000000 },
+ /* DB */
+ { ixDIDT_DB_EDC_STALL_DELAY_1, 0xFFFFFFFF, 0, 0x00000000 },
+
+ { 0xFFFFFFFF } /* End of list */
+};
+
+static const struct vega10_didt_config_reg SEEDCThresholdConfig_Vega10[] =
+{
+/* ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ * Offset Mask Shift Value
+ * ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ */
+ { ixDIDT_SQ_EDC_THRESHOLD, 0xFFFFFFFF, 0, 0x0000010E },
+ { ixDIDT_TD_EDC_THRESHOLD, 0xFFFFFFFF, 0, 0xFFFFFFFF },
+ { ixDIDT_TCP_EDC_THRESHOLD, 0xFFFFFFFF, 0, 0xFFFFFFFF },
+ { ixDIDT_DB_EDC_THRESHOLD, 0xFFFFFFFF, 0, 0xFFFFFFFF },
+
+ { 0xFFFFFFFF } /* End of list */
+};
+
+static const struct vega10_didt_config_reg SEEDCCtrlResetConfig_Vega10[] =
+{
+/* ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ * Offset Mask Shift Value
+ * ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ */
+ /* SQ */
+ { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__EDC_EN_MASK, DIDT_SQ_EDC_CTRL__EDC_EN__SHIFT, 0x0000 },
+ { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__EDC_SW_RST_MASK, DIDT_SQ_EDC_CTRL__EDC_SW_RST__SHIFT, 0x0001 },
+ { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__EDC_CLK_EN_OVERRIDE_MASK, DIDT_SQ_EDC_CTRL__EDC_CLK_EN_OVERRIDE__SHIFT, 0x0000 },
+ { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__EDC_FORCE_STALL_MASK, DIDT_SQ_EDC_CTRL__EDC_FORCE_STALL__SHIFT, 0x0000 },
+ { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__EDC_TRIGGER_THROTTLE_LOWBIT_MASK, DIDT_SQ_EDC_CTRL__EDC_TRIGGER_THROTTLE_LOWBIT__SHIFT, 0x0000 },
+ { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__EDC_STALL_PATTERN_BIT_NUMS_MASK, DIDT_SQ_EDC_CTRL__EDC_STALL_PATTERN_BIT_NUMS__SHIFT, 0x0000 },
+ { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__EDC_ALLOW_WRITE_PWRDELTA_MASK, DIDT_SQ_EDC_CTRL__EDC_ALLOW_WRITE_PWRDELTA__SHIFT, 0x0000 },
+ { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__GC_EDC_EN_MASK, DIDT_SQ_EDC_CTRL__GC_EDC_EN__SHIFT, 0x0000 },
+ { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__GC_EDC_STALL_POLICY_MASK, DIDT_SQ_EDC_CTRL__GC_EDC_STALL_POLICY__SHIFT, 0x0000 },
+ { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__GC_EDC_LEVEL_COMB_EN_MASK, DIDT_SQ_EDC_CTRL__GC_EDC_LEVEL_COMB_EN__SHIFT, 0x0000 },
+ { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__SE_EDC_LEVEL_COMB_EN_MASK, DIDT_SQ_EDC_CTRL__SE_EDC_LEVEL_COMB_EN__SHIFT, 0x0000 },
+
+ { 0xFFFFFFFF } /* End of list */
+};
+
+static const struct vega10_didt_config_reg SEEDCCtrlConfig_Vega10[] =
+{
+/* ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ * Offset Mask Shift Value
+ * ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ */
+ /* SQ */
+ { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__EDC_EN_MASK, DIDT_SQ_EDC_CTRL__EDC_EN__SHIFT, 0x0001 },
+ { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__EDC_SW_RST_MASK, DIDT_SQ_EDC_CTRL__EDC_SW_RST__SHIFT, 0x0000 },
+ { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__EDC_CLK_EN_OVERRIDE_MASK, DIDT_SQ_EDC_CTRL__EDC_CLK_EN_OVERRIDE__SHIFT, 0x0000 },
+ { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__EDC_FORCE_STALL_MASK, DIDT_SQ_EDC_CTRL__EDC_FORCE_STALL__SHIFT, 0x0000 },
+ { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__EDC_TRIGGER_THROTTLE_LOWBIT_MASK, DIDT_SQ_EDC_CTRL__EDC_TRIGGER_THROTTLE_LOWBIT__SHIFT, 0x0004 },
+ { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__EDC_STALL_PATTERN_BIT_NUMS_MASK, DIDT_SQ_EDC_CTRL__EDC_STALL_PATTERN_BIT_NUMS__SHIFT, 0x0006 },
+ { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__EDC_ALLOW_WRITE_PWRDELTA_MASK, DIDT_SQ_EDC_CTRL__EDC_ALLOW_WRITE_PWRDELTA__SHIFT, 0x0000 },
+ { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__GC_EDC_EN_MASK, DIDT_SQ_EDC_CTRL__GC_EDC_EN__SHIFT, 0x0000 },
+ { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__GC_EDC_STALL_POLICY_MASK, DIDT_SQ_EDC_CTRL__GC_EDC_STALL_POLICY__SHIFT, 0x0000 },
+ { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__GC_EDC_LEVEL_COMB_EN_MASK, DIDT_SQ_EDC_CTRL__GC_EDC_LEVEL_COMB_EN__SHIFT, 0x0001 },
+ { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__SE_EDC_LEVEL_COMB_EN_MASK, DIDT_SQ_EDC_CTRL__SE_EDC_LEVEL_COMB_EN__SHIFT, 0x0000 },
+
+ { 0xFFFFFFFF } /* End of list */
+};
+
+static const struct vega10_didt_config_reg SEEDCCtrlForceStallConfig_Vega10[] =
+{
+/* ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ * Offset Mask Shift Value
+ * ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ */
+ /* SQ */
+ { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__EDC_EN_MASK, DIDT_SQ_EDC_CTRL__EDC_EN__SHIFT, 0x0001 },
+ { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__EDC_SW_RST_MASK, DIDT_SQ_EDC_CTRL__EDC_SW_RST__SHIFT, 0x0000 },
+ { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__EDC_CLK_EN_OVERRIDE_MASK, DIDT_SQ_EDC_CTRL__EDC_CLK_EN_OVERRIDE__SHIFT, 0x0000 },
+ { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__EDC_FORCE_STALL_MASK, DIDT_SQ_EDC_CTRL__EDC_FORCE_STALL__SHIFT, 0x0001 },
+ { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__EDC_TRIGGER_THROTTLE_LOWBIT_MASK, DIDT_SQ_EDC_CTRL__EDC_TRIGGER_THROTTLE_LOWBIT__SHIFT, 0x0001 },
+ { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__EDC_STALL_PATTERN_BIT_NUMS_MASK, DIDT_SQ_EDC_CTRL__EDC_STALL_PATTERN_BIT_NUMS__SHIFT, 0x000C },
+ { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__EDC_ALLOW_WRITE_PWRDELTA_MASK, DIDT_SQ_EDC_CTRL__EDC_ALLOW_WRITE_PWRDELTA__SHIFT, 0x0000 },
+ { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__GC_EDC_EN_MASK, DIDT_SQ_EDC_CTRL__GC_EDC_EN__SHIFT, 0x0000 },
+ { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__GC_EDC_STALL_POLICY_MASK, DIDT_SQ_EDC_CTRL__GC_EDC_STALL_POLICY__SHIFT, 0x0000 },
+ { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__GC_EDC_LEVEL_COMB_EN_MASK, DIDT_SQ_EDC_CTRL__GC_EDC_LEVEL_COMB_EN__SHIFT, 0x0000 },
+ { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__SE_EDC_LEVEL_COMB_EN_MASK, DIDT_SQ_EDC_CTRL__SE_EDC_LEVEL_COMB_EN__SHIFT, 0x0001 },
+
+ /* TD */
+ { ixDIDT_TD_EDC_CTRL, DIDT_TD_EDC_CTRL__EDC_EN_MASK, DIDT_TD_EDC_CTRL__EDC_EN__SHIFT, 0x0001 },
+ { ixDIDT_TD_EDC_CTRL, DIDT_TD_EDC_CTRL__EDC_SW_RST_MASK, DIDT_TD_EDC_CTRL__EDC_SW_RST__SHIFT, 0x0000 },
+ { ixDIDT_TD_EDC_CTRL, DIDT_TD_EDC_CTRL__EDC_CLK_EN_OVERRIDE_MASK, DIDT_TD_EDC_CTRL__EDC_CLK_EN_OVERRIDE__SHIFT, 0x0000 },
+ { ixDIDT_TD_EDC_CTRL, DIDT_TD_EDC_CTRL__EDC_FORCE_STALL_MASK, DIDT_TD_EDC_CTRL__EDC_FORCE_STALL__SHIFT, 0x0001 },
+ { ixDIDT_TD_EDC_CTRL, DIDT_TD_EDC_CTRL__EDC_TRIGGER_THROTTLE_LOWBIT_MASK, DIDT_TD_EDC_CTRL__EDC_TRIGGER_THROTTLE_LOWBIT__SHIFT, 0x0001 },
+ { ixDIDT_TD_EDC_CTRL, DIDT_TD_EDC_CTRL__EDC_STALL_PATTERN_BIT_NUMS_MASK, DIDT_TD_EDC_CTRL__EDC_STALL_PATTERN_BIT_NUMS__SHIFT, 0x000E },
+ { ixDIDT_TD_EDC_CTRL, DIDT_TD_EDC_CTRL__EDC_ALLOW_WRITE_PWRDELTA_MASK, DIDT_TD_EDC_CTRL__EDC_ALLOW_WRITE_PWRDELTA__SHIFT, 0x0000 },
+ { ixDIDT_TD_EDC_CTRL, DIDT_TD_EDC_CTRL__GC_EDC_EN_MASK, DIDT_TD_EDC_CTRL__GC_EDC_EN__SHIFT, 0x0000 },
+ { ixDIDT_TD_EDC_CTRL, DIDT_TD_EDC_CTRL__GC_EDC_STALL_POLICY_MASK, DIDT_TD_EDC_CTRL__GC_EDC_STALL_POLICY__SHIFT, 0x0000 },
+ { ixDIDT_TD_EDC_CTRL, DIDT_TD_EDC_CTRL__GC_EDC_LEVEL_COMB_EN_MASK, DIDT_TD_EDC_CTRL__GC_EDC_LEVEL_COMB_EN__SHIFT, 0x0000 },
+ { ixDIDT_TD_EDC_CTRL, DIDT_TD_EDC_CTRL__SE_EDC_LEVEL_COMB_EN_MASK, DIDT_TD_EDC_CTRL__SE_EDC_LEVEL_COMB_EN__SHIFT, 0x0001 },
+
+ { 0xFFFFFFFF } /* End of list */
+};
+
+static const struct vega10_didt_config_reg GCDiDtDroopCtrlConfig_vega10[] =
+{
+/* ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ * Offset Mask Shift Value
+ * ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ */
+ { mmGC_DIDT_DROOP_CTRL, GC_DIDT_DROOP_CTRL__DIDT_DROOP_LEVEL_EN_MASK, GC_DIDT_DROOP_CTRL__DIDT_DROOP_LEVEL_EN__SHIFT, 0x0000 },
+ { mmGC_DIDT_DROOP_CTRL, GC_DIDT_DROOP_CTRL__DIDT_DROOP_THRESHOLD_MASK, GC_DIDT_DROOP_CTRL__DIDT_DROOP_THRESHOLD__SHIFT, 0x0000 },
+ { mmGC_DIDT_DROOP_CTRL, GC_DIDT_DROOP_CTRL__DIDT_DROOP_LEVEL_INDEX_MASK, GC_DIDT_DROOP_CTRL__DIDT_DROOP_LEVEL_INDEX__SHIFT, 0x0000 },
+ { mmGC_DIDT_DROOP_CTRL, GC_DIDT_DROOP_CTRL__DIDT_LEVEL_SEL_MASK, GC_DIDT_DROOP_CTRL__DIDT_LEVEL_SEL__SHIFT, 0x0000 },
+ { mmGC_DIDT_DROOP_CTRL, GC_DIDT_DROOP_CTRL__DIDT_DROOP_LEVEL_OVERFLOW_MASK, GC_DIDT_DROOP_CTRL__DIDT_DROOP_LEVEL_OVERFLOW__SHIFT, 0x0000 },
+
+ { 0xFFFFFFFF } /* End of list */
+};
+
+static const struct vega10_didt_config_reg GCDiDtCtrl0Config_vega10[] =
+{
+/* ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ * Offset Mask Shift Value
+ * ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ */
+ { mmGC_DIDT_CTRL0, GC_DIDT_CTRL0__DIDT_CTRL_EN_MASK, GC_DIDT_CTRL0__DIDT_CTRL_EN__SHIFT, 0x0000 },
+ { mmGC_DIDT_CTRL0, GC_DIDT_CTRL0__PHASE_OFFSET_MASK, GC_DIDT_CTRL0__PHASE_OFFSET__SHIFT, 0x0000 },
+ { mmGC_DIDT_CTRL0, GC_DIDT_CTRL0__DIDT_SW_RST_MASK, GC_DIDT_CTRL0__DIDT_SW_RST__SHIFT, 0x0000 },
+ { mmGC_DIDT_CTRL0, GC_DIDT_CTRL0__DIDT_CLK_EN_OVERRIDE_MASK, GC_DIDT_CTRL0__DIDT_CLK_EN_OVERRIDE__SHIFT, 0x0000 },
+ { mmGC_DIDT_CTRL0, GC_DIDT_CTRL0__DIDT_TRIGGER_THROTTLE_LOWBIT_MASK, GC_DIDT_CTRL0__DIDT_TRIGGER_THROTTLE_LOWBIT__SHIFT, 0x0000 },
+ { 0xFFFFFFFF } /* End of list */
+};
+
+
+static const struct vega10_didt_config_reg PSMSEEDCStallPatternConfig_Vega10[] =
+{
+/* ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ * Offset Mask Shift Value
+ * ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ */
+ /* SQ EDC STALL PATTERNs */
+ { ixDIDT_SQ_EDC_STALL_PATTERN_1_2, DIDT_SQ_EDC_STALL_PATTERN_1_2__EDC_STALL_PATTERN_1_MASK, DIDT_SQ_EDC_STALL_PATTERN_1_2__EDC_STALL_PATTERN_1__SHIFT, 0x0101 },
+ { ixDIDT_SQ_EDC_STALL_PATTERN_1_2, DIDT_SQ_EDC_STALL_PATTERN_1_2__EDC_STALL_PATTERN_2_MASK, DIDT_SQ_EDC_STALL_PATTERN_1_2__EDC_STALL_PATTERN_2__SHIFT, 0x0101 },
+ { ixDIDT_SQ_EDC_STALL_PATTERN_3_4, DIDT_SQ_EDC_STALL_PATTERN_3_4__EDC_STALL_PATTERN_3_MASK, DIDT_SQ_EDC_STALL_PATTERN_3_4__EDC_STALL_PATTERN_3__SHIFT, 0x1111 },
+ { ixDIDT_SQ_EDC_STALL_PATTERN_3_4, DIDT_SQ_EDC_STALL_PATTERN_3_4__EDC_STALL_PATTERN_4_MASK, DIDT_SQ_EDC_STALL_PATTERN_3_4__EDC_STALL_PATTERN_4__SHIFT, 0x1111 },
+
+ { ixDIDT_SQ_EDC_STALL_PATTERN_5_6, DIDT_SQ_EDC_STALL_PATTERN_5_6__EDC_STALL_PATTERN_5_MASK, DIDT_SQ_EDC_STALL_PATTERN_5_6__EDC_STALL_PATTERN_5__SHIFT, 0x1515 },
+ { ixDIDT_SQ_EDC_STALL_PATTERN_5_6, DIDT_SQ_EDC_STALL_PATTERN_5_6__EDC_STALL_PATTERN_6_MASK, DIDT_SQ_EDC_STALL_PATTERN_5_6__EDC_STALL_PATTERN_6__SHIFT, 0x1515 },
+
+ { ixDIDT_SQ_EDC_STALL_PATTERN_7, DIDT_SQ_EDC_STALL_PATTERN_7__EDC_STALL_PATTERN_7_MASK, DIDT_SQ_EDC_STALL_PATTERN_7__EDC_STALL_PATTERN_7__SHIFT, 0x5555 },
+
+ { 0xFFFFFFFF } /* End of list */
+};
+
+static const struct vega10_didt_config_reg PSMSEEDCStallDelayConfig_Vega10[] =
+{
+/* ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ * Offset Mask Shift Value
+ * ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ */
+ /* SQ EDC STALL DELAYs */
+ { ixDIDT_SQ_EDC_STALL_DELAY_1, DIDT_SQ_EDC_STALL_DELAY_1__EDC_STALL_DELAY_SQ0_MASK, DIDT_SQ_EDC_STALL_DELAY_1__EDC_STALL_DELAY_SQ0__SHIFT, 0x0000 },
+ { ixDIDT_SQ_EDC_STALL_DELAY_1, DIDT_SQ_EDC_STALL_DELAY_1__EDC_STALL_DELAY_SQ1_MASK, DIDT_SQ_EDC_STALL_DELAY_1__EDC_STALL_DELAY_SQ1__SHIFT, 0x0000 },
+ { ixDIDT_SQ_EDC_STALL_DELAY_1, DIDT_SQ_EDC_STALL_DELAY_1__EDC_STALL_DELAY_SQ2_MASK, DIDT_SQ_EDC_STALL_DELAY_1__EDC_STALL_DELAY_SQ2__SHIFT, 0x0000 },
+ { ixDIDT_SQ_EDC_STALL_DELAY_1, DIDT_SQ_EDC_STALL_DELAY_1__EDC_STALL_DELAY_SQ3_MASK, DIDT_SQ_EDC_STALL_DELAY_1__EDC_STALL_DELAY_SQ3__SHIFT, 0x0000 },
+
+ { ixDIDT_SQ_EDC_STALL_DELAY_2, DIDT_SQ_EDC_STALL_DELAY_2__EDC_STALL_DELAY_SQ4_MASK, DIDT_SQ_EDC_STALL_DELAY_2__EDC_STALL_DELAY_SQ4__SHIFT, 0x0000 },
+ { ixDIDT_SQ_EDC_STALL_DELAY_2, DIDT_SQ_EDC_STALL_DELAY_2__EDC_STALL_DELAY_SQ5_MASK, DIDT_SQ_EDC_STALL_DELAY_2__EDC_STALL_DELAY_SQ5__SHIFT, 0x0000 },
+ { ixDIDT_SQ_EDC_STALL_DELAY_2, DIDT_SQ_EDC_STALL_DELAY_2__EDC_STALL_DELAY_SQ6_MASK, DIDT_SQ_EDC_STALL_DELAY_2__EDC_STALL_DELAY_SQ6__SHIFT, 0x0000 },
+ { ixDIDT_SQ_EDC_STALL_DELAY_2, DIDT_SQ_EDC_STALL_DELAY_2__EDC_STALL_DELAY_SQ7_MASK, DIDT_SQ_EDC_STALL_DELAY_2__EDC_STALL_DELAY_SQ7__SHIFT, 0x0000 },
+
+ { ixDIDT_SQ_EDC_STALL_DELAY_3, DIDT_SQ_EDC_STALL_DELAY_3__EDC_STALL_DELAY_SQ8_MASK, DIDT_SQ_EDC_STALL_DELAY_3__EDC_STALL_DELAY_SQ8__SHIFT, 0x0000 },
+ { ixDIDT_SQ_EDC_STALL_DELAY_3, DIDT_SQ_EDC_STALL_DELAY_3__EDC_STALL_DELAY_SQ9_MASK, DIDT_SQ_EDC_STALL_DELAY_3__EDC_STALL_DELAY_SQ9__SHIFT, 0x0000 },
+ { ixDIDT_SQ_EDC_STALL_DELAY_3, DIDT_SQ_EDC_STALL_DELAY_3__EDC_STALL_DELAY_SQ10_MASK, DIDT_SQ_EDC_STALL_DELAY_3__EDC_STALL_DELAY_SQ10__SHIFT, 0x0000 },
+ { ixDIDT_SQ_EDC_STALL_DELAY_3, DIDT_SQ_EDC_STALL_DELAY_3__EDC_STALL_DELAY_SQ11_MASK, DIDT_SQ_EDC_STALL_DELAY_3__EDC_STALL_DELAY_SQ11__SHIFT, 0x0000 },
+
+ { ixDIDT_SQ_EDC_STALL_DELAY_4, DIDT_SQ_EDC_STALL_DELAY_4__EDC_STALL_DELAY_SQ12_MASK, DIDT_SQ_EDC_STALL_DELAY_4__EDC_STALL_DELAY_SQ12__SHIFT, 0x0000 },
+ { ixDIDT_SQ_EDC_STALL_DELAY_4, DIDT_SQ_EDC_STALL_DELAY_4__EDC_STALL_DELAY_SQ12_MASK, DIDT_SQ_EDC_STALL_DELAY_4__EDC_STALL_DELAY_SQ13__SHIFT, 0x0000 },
+ { ixDIDT_SQ_EDC_STALL_DELAY_4, DIDT_SQ_EDC_STALL_DELAY_4__EDC_STALL_DELAY_SQ14_MASK, DIDT_SQ_EDC_STALL_DELAY_4__EDC_STALL_DELAY_SQ14__SHIFT, 0x0000 },
+ { ixDIDT_SQ_EDC_STALL_DELAY_4, DIDT_SQ_EDC_STALL_DELAY_4__EDC_STALL_DELAY_SQ15_MASK, DIDT_SQ_EDC_STALL_DELAY_4__EDC_STALL_DELAY_SQ15__SHIFT, 0x0000 },
+
+ { 0xFFFFFFFF } /* End of list */
+};
+
+static const struct vega10_didt_config_reg PSMSEEDCThresholdConfig_Vega10[] =
+{
+/* ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ * Offset Mask Shift Value
+ * ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ */
+ /* SQ EDC THRESHOLD */
+ { ixDIDT_SQ_EDC_THRESHOLD, DIDT_SQ_EDC_THRESHOLD__EDC_THRESHOLD_MASK, DIDT_SQ_EDC_THRESHOLD__EDC_THRESHOLD__SHIFT, 0x0000 },
+
+ { 0xFFFFFFFF } /* End of list */
+};
+
+static const struct vega10_didt_config_reg PSMSEEDCCtrlResetConfig_Vega10[] =
+{
+/* ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ * Offset Mask Shift Value
+ * ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ */
+ /* SQ EDC CTRL */
+ { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__EDC_EN_MASK, DIDT_SQ_EDC_CTRL__EDC_EN__SHIFT, 0x0000 },
+ { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__EDC_SW_RST_MASK, DIDT_SQ_EDC_CTRL__EDC_SW_RST__SHIFT, 0x0001 },
+ { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__EDC_CLK_EN_OVERRIDE_MASK, DIDT_SQ_EDC_CTRL__EDC_CLK_EN_OVERRIDE__SHIFT, 0x0000 },
+ { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__EDC_FORCE_STALL_MASK, DIDT_SQ_EDC_CTRL__EDC_FORCE_STALL__SHIFT, 0x0000 },
+ { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__EDC_TRIGGER_THROTTLE_LOWBIT_MASK, DIDT_SQ_EDC_CTRL__EDC_TRIGGER_THROTTLE_LOWBIT__SHIFT, 0x0000 },
+ { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__EDC_STALL_PATTERN_BIT_NUMS_MASK, DIDT_SQ_EDC_CTRL__EDC_STALL_PATTERN_BIT_NUMS__SHIFT, 0x0000 },
+ { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__EDC_ALLOW_WRITE_PWRDELTA_MASK, DIDT_SQ_EDC_CTRL__EDC_ALLOW_WRITE_PWRDELTA__SHIFT, 0x0000 },
+ { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__GC_EDC_EN_MASK, DIDT_SQ_EDC_CTRL__GC_EDC_EN__SHIFT, 0x0000 },
+ { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__GC_EDC_STALL_POLICY_MASK, DIDT_SQ_EDC_CTRL__GC_EDC_STALL_POLICY__SHIFT, 0x0000 },
+ { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__GC_EDC_LEVEL_COMB_EN_MASK, DIDT_SQ_EDC_CTRL__GC_EDC_LEVEL_COMB_EN__SHIFT, 0x0000 },
+ { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__SE_EDC_LEVEL_COMB_EN_MASK, DIDT_SQ_EDC_CTRL__SE_EDC_LEVEL_COMB_EN__SHIFT, 0x0000 },
+
+ { 0xFFFFFFFF } /* End of list */
+};
+
+static const struct vega10_didt_config_reg PSMSEEDCCtrlConfig_Vega10[] =
+{
+/* ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ * Offset Mask Shift Value
+ * ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ */
+ /* SQ EDC CTRL */
+ { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__EDC_EN_MASK, DIDT_SQ_EDC_CTRL__EDC_EN__SHIFT, 0x0001 },
+ { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__EDC_SW_RST_MASK, DIDT_SQ_EDC_CTRL__EDC_SW_RST__SHIFT, 0x0000 },
+ { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__EDC_CLK_EN_OVERRIDE_MASK, DIDT_SQ_EDC_CTRL__EDC_CLK_EN_OVERRIDE__SHIFT, 0x0000 },
+ { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__EDC_FORCE_STALL_MASK, DIDT_SQ_EDC_CTRL__EDC_FORCE_STALL__SHIFT, 0x0000 },
+ { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__EDC_TRIGGER_THROTTLE_LOWBIT_MASK, DIDT_SQ_EDC_CTRL__EDC_TRIGGER_THROTTLE_LOWBIT__SHIFT, 0x0000 },
+ { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__EDC_STALL_PATTERN_BIT_NUMS_MASK, DIDT_SQ_EDC_CTRL__EDC_STALL_PATTERN_BIT_NUMS__SHIFT, 0x000E },
+ { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__EDC_ALLOW_WRITE_PWRDELTA_MASK, DIDT_SQ_EDC_CTRL__EDC_ALLOW_WRITE_PWRDELTA__SHIFT, 0x0000 },
+ { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__GC_EDC_EN_MASK, DIDT_SQ_EDC_CTRL__GC_EDC_EN__SHIFT, 0x0001 },
+ { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__GC_EDC_STALL_POLICY_MASK, DIDT_SQ_EDC_CTRL__GC_EDC_STALL_POLICY__SHIFT, 0x0003 },
+ { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__GC_EDC_LEVEL_COMB_EN_MASK, DIDT_SQ_EDC_CTRL__GC_EDC_LEVEL_COMB_EN__SHIFT, 0x0001 },
+ { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__SE_EDC_LEVEL_COMB_EN_MASK, DIDT_SQ_EDC_CTRL__SE_EDC_LEVEL_COMB_EN__SHIFT, 0x0000 },
+
+ { 0xFFFFFFFF } /* End of list */
+};
+
+static const struct vega10_didt_config_reg PSMGCEDCThresholdConfig_vega10[] =
+{
+/* ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ * Offset Mask Shift Value
+ * ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ */
+ { mmGC_EDC_THRESHOLD, GC_EDC_THRESHOLD__EDC_THRESHOLD_MASK, GC_EDC_THRESHOLD__EDC_THRESHOLD__SHIFT, 0x0000000 },
+
+ { 0xFFFFFFFF } /* End of list */
+};
+
+static const struct vega10_didt_config_reg PSMGCEDCDroopCtrlConfig_vega10[] =
+{
+/* ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ * Offset Mask Shift Value
+ * ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ */
+ { mmGC_EDC_DROOP_CTRL, GC_EDC_DROOP_CTRL__EDC_DROOP_LEVEL_EN_MASK, GC_EDC_DROOP_CTRL__EDC_DROOP_LEVEL_EN__SHIFT, 0x0001 },
+ { mmGC_EDC_DROOP_CTRL, GC_EDC_DROOP_CTRL__EDC_DROOP_THRESHOLD_MASK, GC_EDC_DROOP_CTRL__EDC_DROOP_THRESHOLD__SHIFT, 0x0384 },
+ { mmGC_EDC_DROOP_CTRL, GC_EDC_DROOP_CTRL__EDC_DROOP_LEVEL_INDEX_MASK, GC_EDC_DROOP_CTRL__EDC_DROOP_LEVEL_INDEX__SHIFT, 0x0001 },
+ { mmGC_EDC_DROOP_CTRL, GC_EDC_DROOP_CTRL__AVG_PSM_SEL_MASK, GC_EDC_DROOP_CTRL__AVG_PSM_SEL__SHIFT, 0x0001 },
+ { mmGC_EDC_DROOP_CTRL, GC_EDC_DROOP_CTRL__EDC_LEVEL_SEL_MASK, GC_EDC_DROOP_CTRL__EDC_LEVEL_SEL__SHIFT, 0x0001 },
+
+ { 0xFFFFFFFF } /* End of list */
+};
+
+static const struct vega10_didt_config_reg PSMGCEDCCtrlResetConfig_vega10[] =
+{
+/* ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ * Offset Mask Shift Value
+ * ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ */
+ { mmGC_EDC_CTRL, GC_EDC_CTRL__EDC_EN_MASK, GC_EDC_CTRL__EDC_EN__SHIFT, 0x0000 },
+ { mmGC_EDC_CTRL, GC_EDC_CTRL__EDC_SW_RST_MASK, GC_EDC_CTRL__EDC_SW_RST__SHIFT, 0x0001 },
+ { mmGC_EDC_CTRL, GC_EDC_CTRL__EDC_CLK_EN_OVERRIDE_MASK, GC_EDC_CTRL__EDC_CLK_EN_OVERRIDE__SHIFT, 0x0000 },
+ { mmGC_EDC_CTRL, GC_EDC_CTRL__EDC_FORCE_STALL_MASK, GC_EDC_CTRL__EDC_FORCE_STALL__SHIFT, 0x0000 },
+ { mmGC_EDC_CTRL, GC_EDC_CTRL__EDC_TRIGGER_THROTTLE_LOWBIT_MASK, GC_EDC_CTRL__EDC_TRIGGER_THROTTLE_LOWBIT__SHIFT, 0x0000 },
+ { mmGC_EDC_CTRL, GC_EDC_CTRL__EDC_ALLOW_WRITE_PWRDELTA_MASK, GC_EDC_CTRL__EDC_ALLOW_WRITE_PWRDELTA__SHIFT, 0x0000 },
+
+ { 0xFFFFFFFF } /* End of list */
+};
+
+static const struct vega10_didt_config_reg PSMGCEDCCtrlConfig_vega10[] =
+{
+/* ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ * Offset Mask Shift Value
+ * ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ */
+ { mmGC_EDC_CTRL, GC_EDC_CTRL__EDC_EN_MASK, GC_EDC_CTRL__EDC_EN__SHIFT, 0x0001 },
+ { mmGC_EDC_CTRL, GC_EDC_CTRL__EDC_SW_RST_MASK, GC_EDC_CTRL__EDC_SW_RST__SHIFT, 0x0000 },
+ { mmGC_EDC_CTRL, GC_EDC_CTRL__EDC_CLK_EN_OVERRIDE_MASK, GC_EDC_CTRL__EDC_CLK_EN_OVERRIDE__SHIFT, 0x0000 },
+ { mmGC_EDC_CTRL, GC_EDC_CTRL__EDC_FORCE_STALL_MASK, GC_EDC_CTRL__EDC_FORCE_STALL__SHIFT, 0x0000 },
+ { mmGC_EDC_CTRL, GC_EDC_CTRL__EDC_TRIGGER_THROTTLE_LOWBIT_MASK, GC_EDC_CTRL__EDC_TRIGGER_THROTTLE_LOWBIT__SHIFT, 0x0000 },
+ { mmGC_EDC_CTRL, GC_EDC_CTRL__EDC_ALLOW_WRITE_PWRDELTA_MASK, GC_EDC_CTRL__EDC_ALLOW_WRITE_PWRDELTA__SHIFT, 0x0000 },
+
+ { 0xFFFFFFFF } /* End of list */
+};
+
+static const struct vega10_didt_config_reg AvfsPSMResetConfig_vega10[]=
+{
+/* ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ * Offset Mask Shift Value
+ * ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ */
+ { 0x16A02, 0xFFFFFFFF, 0x0, 0x0000005F },
+ { 0x16A05, 0xFFFFFFFF, 0x0, 0x00000001 },
+ { 0x16A06, 0x00000001, 0x0, 0x02000000 },
+ { 0x16A01, 0xFFFFFFFF, 0x0, 0x00003027 },
+
+ { 0xFFFFFFFF } /* End of list */
+};
+
+static const struct vega10_didt_config_reg AvfsPSMInitConfig_vega10[] =
+{
+/* ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ * Offset Mask Shift Value
+ * ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ */
+ { 0x16A05, 0xFFFFFFFF, 0x18, 0x00000001 },
+ { 0x16A05, 0xFFFFFFFF, 0x8, 0x00000003 },
+ { 0x16A05, 0xFFFFFFFF, 0xa, 0x00000006 },
+ { 0x16A05, 0xFFFFFFFF, 0x7, 0x00000000 },
+ { 0x16A06, 0xFFFFFFFF, 0x18, 0x00000001 },
+ { 0x16A06, 0xFFFFFFFF, 0x19, 0x00000001 },
+ { 0x16A01, 0xFFFFFFFF, 0x0, 0x00003027 },
+
+ { 0xFFFFFFFF } /* End of list */
+};
+
+static int vega10_program_didt_config_registers(struct pp_hwmgr *hwmgr, const struct vega10_didt_config_reg *config_regs, enum vega10_didt_config_reg_type reg_type)
+{
+ uint32_t data;
+
+ PP_ASSERT_WITH_CODE((config_regs != NULL), "[vega10_program_didt_config_registers] Invalid config register table!", return -EINVAL);
+
+ while (config_regs->offset != 0xFFFFFFFF) {
+ switch (reg_type) {
+ case VEGA10_CONFIGREG_DIDT:
+ data = cgs_read_ind_register(hwmgr->device, CGS_IND_REG__DIDT, config_regs->offset);
+ data &= ~config_regs->mask;
+ data |= ((config_regs->value << config_regs->shift) & config_regs->mask);
+ cgs_write_ind_register(hwmgr->device, CGS_IND_REG__DIDT, config_regs->offset, data);
+ break;
+ case VEGA10_CONFIGREG_GCCAC:
+ data = cgs_read_ind_register(hwmgr->device, CGS_IND_REG_GC_CAC, config_regs->offset);
+ data &= ~config_regs->mask;
+ data |= ((config_regs->value << config_regs->shift) & config_regs->mask);
+ cgs_write_ind_register(hwmgr->device, CGS_IND_REG_GC_CAC, config_regs->offset, data);
+ break;
+ case VEGA10_CONFIGREG_SECAC:
+ data = cgs_read_ind_register(hwmgr->device, CGS_IND_REG_SE_CAC, config_regs->offset);
+ data &= ~config_regs->mask;
+ data |= ((config_regs->value << config_regs->shift) & config_regs->mask);
+ cgs_write_ind_register(hwmgr->device, CGS_IND_REG_SE_CAC, config_regs->offset, data);
+ break;
+ default:
+ return -EINVAL;
+ }
+
+ config_regs++;
+ }
+
+ return 0;
+}
+
+static int vega10_program_gc_didt_config_registers(struct pp_hwmgr *hwmgr, const struct vega10_didt_config_reg *config_regs)
+{
+ uint32_t data;
+
+ while (config_regs->offset != 0xFFFFFFFF) {
+ data = cgs_read_register(hwmgr->device, config_regs->offset);
+ data &= ~config_regs->mask;
+ data |= ((config_regs->value << config_regs->shift) & config_regs->mask);
+ cgs_write_register(hwmgr->device, config_regs->offset, data);
+ config_regs++;
+ }
+
+ return 0;
+}
+
+static void vega10_didt_set_mask(struct pp_hwmgr *hwmgr, const bool enable)
+{
+ uint32_t data;
+ int result;
+ uint32_t en = (enable ? 1 : 0);
+ uint32_t didt_block_info = SQ_IR_MASK | TCP_IR_MASK | TD_PCC_MASK;
+
+ if (phm_cap_enabled(hwmgr->platform_descriptor.platformCaps, PHM_PlatformCaps_SQRamping)) {
+ data = cgs_read_ind_register(hwmgr->device, CGS_IND_REG__DIDT, ixDIDT_SQ_CTRL0);
+ data &= ~DIDT_SQ_CTRL0__DIDT_CTRL_EN_MASK;
+ data |= ((en << DIDT_SQ_CTRL0__DIDT_CTRL_EN__SHIFT) & DIDT_SQ_CTRL0__DIDT_CTRL_EN_MASK);
+ cgs_write_ind_register(hwmgr->device, CGS_IND_REG__DIDT, ixDIDT_SQ_CTRL0, data);
+ didt_block_info &= ~SQ_Enable_MASK;
+ didt_block_info |= en << SQ_Enable_SHIFT;
+ }
+
+ if (phm_cap_enabled(hwmgr->platform_descriptor.platformCaps, PHM_PlatformCaps_DBRamping)) {
+ data = cgs_read_ind_register(hwmgr->device, CGS_IND_REG__DIDT, ixDIDT_DB_CTRL0);
+ data &= ~DIDT_DB_CTRL0__DIDT_CTRL_EN_MASK;
+ data |= ((en << DIDT_DB_CTRL0__DIDT_CTRL_EN__SHIFT) & DIDT_DB_CTRL0__DIDT_CTRL_EN_MASK);
+ cgs_write_ind_register(hwmgr->device, CGS_IND_REG__DIDT, ixDIDT_DB_CTRL0, data);
+ didt_block_info &= ~DB_Enable_MASK;
+ didt_block_info |= en << DB_Enable_SHIFT;
+ }
+
+ if (phm_cap_enabled(hwmgr->platform_descriptor.platformCaps, PHM_PlatformCaps_TDRamping)) {
+ data = cgs_read_ind_register(hwmgr->device, CGS_IND_REG__DIDT, ixDIDT_TD_CTRL0);
+ data &= ~DIDT_TD_CTRL0__DIDT_CTRL_EN_MASK;
+ data |= ((en << DIDT_TD_CTRL0__DIDT_CTRL_EN__SHIFT) & DIDT_TD_CTRL0__DIDT_CTRL_EN_MASK);
+ cgs_write_ind_register(hwmgr->device, CGS_IND_REG__DIDT, ixDIDT_TD_CTRL0, data);
+ didt_block_info &= ~TD_Enable_MASK;
+ didt_block_info |= en << TD_Enable_SHIFT;
+ }
+
+ if (phm_cap_enabled(hwmgr->platform_descriptor.platformCaps, PHM_PlatformCaps_TCPRamping)) {
+ data = cgs_read_ind_register(hwmgr->device, CGS_IND_REG__DIDT, ixDIDT_TCP_CTRL0);
+ data &= ~DIDT_TCP_CTRL0__DIDT_CTRL_EN_MASK;
+ data |= ((en << DIDT_TCP_CTRL0__DIDT_CTRL_EN__SHIFT) & DIDT_TCP_CTRL0__DIDT_CTRL_EN_MASK);
+ cgs_write_ind_register(hwmgr->device, CGS_IND_REG__DIDT, ixDIDT_TCP_CTRL0, data);
+ didt_block_info &= ~TCP_Enable_MASK;
+ didt_block_info |= en << TCP_Enable_SHIFT;
+ }
+
+ if (phm_cap_enabled(hwmgr->platform_descriptor.platformCaps, PHM_PlatformCaps_DBRRamping)) {
+ data = cgs_read_ind_register(hwmgr->device, CGS_IND_REG__DIDT, ixDIDT_DBR_CTRL0);
+ data &= ~DIDT_DBR_CTRL0__DIDT_CTRL_EN_MASK;
+ data |= ((en << DIDT_DBR_CTRL0__DIDT_CTRL_EN__SHIFT) & DIDT_DBR_CTRL0__DIDT_CTRL_EN_MASK);
+ cgs_write_ind_register(hwmgr->device, CGS_IND_REG__DIDT, ixDIDT_DBR_CTRL0, data);
+ }
+
+ if (phm_cap_enabled(hwmgr->platform_descriptor.platformCaps, PHM_PlatformCaps_DiDtEDCEnable)) {
+ if (phm_cap_enabled(hwmgr->platform_descriptor.platformCaps, PHM_PlatformCaps_SQRamping)) {
+ data = cgs_read_ind_register(hwmgr->device, CGS_IND_REG__DIDT, ixDIDT_SQ_EDC_CTRL);
+ data &= ~DIDT_SQ_EDC_CTRL__EDC_EN_MASK;
+ data |= ((en << DIDT_SQ_EDC_CTRL__EDC_EN__SHIFT) & DIDT_SQ_EDC_CTRL__EDC_EN_MASK);
+ data &= ~DIDT_SQ_EDC_CTRL__EDC_SW_RST_MASK;
+ data |= ((~en << DIDT_SQ_EDC_CTRL__EDC_SW_RST__SHIFT) & DIDT_SQ_EDC_CTRL__EDC_SW_RST_MASK);
+ cgs_write_ind_register(hwmgr->device, CGS_IND_REG__DIDT, ixDIDT_SQ_EDC_CTRL, data);
+ }
+
+ if (phm_cap_enabled(hwmgr->platform_descriptor.platformCaps, PHM_PlatformCaps_DBRamping)) {
+ data = cgs_read_ind_register(hwmgr->device, CGS_IND_REG__DIDT, ixDIDT_DB_EDC_CTRL);
+ data &= ~DIDT_DB_EDC_CTRL__EDC_EN_MASK;
+ data |= ((en << DIDT_DB_EDC_CTRL__EDC_EN__SHIFT) & DIDT_DB_EDC_CTRL__EDC_EN_MASK);
+ data &= ~DIDT_DB_EDC_CTRL__EDC_SW_RST_MASK;
+ data |= ((~en << DIDT_DB_EDC_CTRL__EDC_SW_RST__SHIFT) & DIDT_DB_EDC_CTRL__EDC_SW_RST_MASK);
+ cgs_write_ind_register(hwmgr->device, CGS_IND_REG__DIDT, ixDIDT_DB_EDC_CTRL, data);
+ }
+
+ if (phm_cap_enabled(hwmgr->platform_descriptor.platformCaps, PHM_PlatformCaps_TDRamping)) {
+ data = cgs_read_ind_register(hwmgr->device, CGS_IND_REG__DIDT, ixDIDT_TD_EDC_CTRL);
+ data &= ~DIDT_TD_EDC_CTRL__EDC_EN_MASK;
+ data |= ((en << DIDT_TD_EDC_CTRL__EDC_EN__SHIFT) & DIDT_TD_EDC_CTRL__EDC_EN_MASK);
+ data &= ~DIDT_TD_EDC_CTRL__EDC_SW_RST_MASK;
+ data |= ((~en << DIDT_TD_EDC_CTRL__EDC_SW_RST__SHIFT) & DIDT_TD_EDC_CTRL__EDC_SW_RST_MASK);
+ cgs_write_ind_register(hwmgr->device, CGS_IND_REG__DIDT, ixDIDT_TD_EDC_CTRL, data);
+ }
+
+ if (phm_cap_enabled(hwmgr->platform_descriptor.platformCaps, PHM_PlatformCaps_TCPRamping)) {
+ data = cgs_read_ind_register(hwmgr->device, CGS_IND_REG__DIDT, ixDIDT_TCP_EDC_CTRL);
+ data &= ~DIDT_TCP_EDC_CTRL__EDC_EN_MASK;
+ data |= ((en << DIDT_TCP_EDC_CTRL__EDC_EN__SHIFT) & DIDT_TCP_EDC_CTRL__EDC_EN_MASK);
+ data &= ~DIDT_TCP_EDC_CTRL__EDC_SW_RST_MASK;
+ data |= ((~en << DIDT_TCP_EDC_CTRL__EDC_SW_RST__SHIFT) & DIDT_TCP_EDC_CTRL__EDC_SW_RST_MASK);
+ cgs_write_ind_register(hwmgr->device, CGS_IND_REG__DIDT, ixDIDT_TCP_EDC_CTRL, data);
+ }
+
+ if (phm_cap_enabled(hwmgr->platform_descriptor.platformCaps, PHM_PlatformCaps_DBRRamping)) {
+ data = cgs_read_ind_register(hwmgr->device, CGS_IND_REG__DIDT, ixDIDT_DBR_EDC_CTRL);
+ data &= ~DIDT_DBR_EDC_CTRL__EDC_EN_MASK;
+ data |= ((en << DIDT_DBR_EDC_CTRL__EDC_EN__SHIFT) & DIDT_DBR_EDC_CTRL__EDC_EN_MASK);
+ data &= ~DIDT_DBR_EDC_CTRL__EDC_SW_RST_MASK;
+ data |= ((~en << DIDT_DBR_EDC_CTRL__EDC_SW_RST__SHIFT) & DIDT_DBR_EDC_CTRL__EDC_SW_RST_MASK);
+ cgs_write_ind_register(hwmgr->device, CGS_IND_REG__DIDT, ixDIDT_DBR_EDC_CTRL, data);
+ }
+ }
+
+ if (enable) {
+ /* For Vega10, SMC does not support any mask yet. */
+ result = smum_send_msg_to_smc_with_parameter(hwmgr->smumgr, PPSMC_MSG_ConfigureGfxDidt, didt_block_info);
+ PP_ASSERT((0 == result), "[EnableDiDtConfig] SMC Configure Gfx Didt Failed!");
+ }
+}
+
+static int vega10_enable_cac_driving_se_didt_config(struct pp_hwmgr *hwmgr)
+{
+ int result;
+ uint32_t num_se, count, data;
+ struct cgs_system_info sys_info = {0};
+ uint32_t reg;
+
+ sys_info.size = sizeof(struct cgs_system_info);
+ sys_info.info_id = CGS_SYSTEM_INFO_GFX_SE_INFO;
+ if (cgs_query_system_info(hwmgr->device, &sys_info) == 0)
+ num_se = sys_info.value;
+
+ cgs_enter_safe_mode(hwmgr->device, true);
+
+ cgs_lock_grbm_idx(hwmgr->device, true);
+ reg = soc15_get_register_offset(GC_HWID, 0, mmGRBM_GFX_INDEX_BASE_IDX, mmGRBM_GFX_INDEX);
+ for (count = 0; count < num_se; count++) {
+ data = GRBM_GFX_INDEX__INSTANCE_BROADCAST_WRITES_MASK | GRBM_GFX_INDEX__SH_BROADCAST_WRITES_MASK | ( count << GRBM_GFX_INDEX__SE_INDEX__SHIFT);
+ cgs_write_register(hwmgr->device, reg, data);
+
+ result = vega10_program_didt_config_registers(hwmgr, SEDiDtStallCtrlConfig_vega10, VEGA10_CONFIGREG_DIDT);
+ result |= vega10_program_didt_config_registers(hwmgr, SEDiDtStallPatternConfig_vega10, VEGA10_CONFIGREG_DIDT);
+ result |= vega10_program_didt_config_registers(hwmgr, SEDiDtWeightConfig_Vega10, VEGA10_CONFIGREG_DIDT);
+ result |= vega10_program_didt_config_registers(hwmgr, SEDiDtCtrl1Config_Vega10, VEGA10_CONFIGREG_DIDT);
+ result |= vega10_program_didt_config_registers(hwmgr, SEDiDtCtrl2Config_Vega10, VEGA10_CONFIGREG_DIDT);
+ result |= vega10_program_didt_config_registers(hwmgr, SEDiDtCtrl3Config_vega10, VEGA10_CONFIGREG_DIDT);
+ result |= vega10_program_didt_config_registers(hwmgr, SEDiDtTuningCtrlConfig_Vega10, VEGA10_CONFIGREG_DIDT);
+ result |= vega10_program_didt_config_registers(hwmgr, SELCacConfig_Vega10, VEGA10_CONFIGREG_SECAC);
+ result |= vega10_program_didt_config_registers(hwmgr, SEDiDtCtrl0Config_Vega10, VEGA10_CONFIGREG_DIDT);
+
+ if (0 != result)
+ break;
+ }
+ cgs_write_register(hwmgr->device, reg, 0xE0000000);
+ cgs_lock_grbm_idx(hwmgr->device, false);
+
+ vega10_didt_set_mask(hwmgr, true);
+
+ cgs_enter_safe_mode(hwmgr->device, false);
+
+ return 0;
+}
+
+static int vega10_disable_cac_driving_se_didt_config(struct pp_hwmgr *hwmgr)
+{
+ cgs_enter_safe_mode(hwmgr->device, true);
+
+ vega10_didt_set_mask(hwmgr, false);
+
+ cgs_enter_safe_mode(hwmgr->device, false);
+
+ return 0;
+}
+
+static int vega10_enable_psm_gc_didt_config(struct pp_hwmgr *hwmgr)
+{
+ int result;
+ uint32_t num_se, count, data;
+ struct cgs_system_info sys_info = {0};
+ uint32_t reg;
+
+ sys_info.size = sizeof(struct cgs_system_info);
+ sys_info.info_id = CGS_SYSTEM_INFO_GFX_SE_INFO;
+ if (cgs_query_system_info(hwmgr->device, &sys_info) == 0)
+ num_se = sys_info.value;
+
+ cgs_enter_safe_mode(hwmgr->device, true);
+
+ cgs_lock_grbm_idx(hwmgr->device, true);
+ reg = soc15_get_register_offset(GC_HWID, 0, mmGRBM_GFX_INDEX_BASE_IDX, mmGRBM_GFX_INDEX);
+ for (count = 0; count < num_se; count++) {
+ data = GRBM_GFX_INDEX__INSTANCE_BROADCAST_WRITES_MASK | GRBM_GFX_INDEX__SH_BROADCAST_WRITES_MASK | ( count << GRBM_GFX_INDEX__SE_INDEX__SHIFT);
+ cgs_write_register(hwmgr->device, reg, data);
+
+ result = vega10_program_didt_config_registers(hwmgr, SEDiDtStallCtrlConfig_vega10, VEGA10_CONFIGREG_DIDT);
+ result |= vega10_program_didt_config_registers(hwmgr, SEDiDtStallPatternConfig_vega10, VEGA10_CONFIGREG_DIDT);
+ result |= vega10_program_didt_config_registers(hwmgr, SEDiDtCtrl3Config_vega10, VEGA10_CONFIGREG_DIDT);
+ result |= vega10_program_didt_config_registers(hwmgr, SEDiDtCtrl0Config_Vega10, VEGA10_CONFIGREG_DIDT);
+ if (0 != result)
+ break;
+ }
+ cgs_write_register(hwmgr->device, reg, 0xE0000000);
+ cgs_lock_grbm_idx(hwmgr->device, false);
+
+ vega10_didt_set_mask(hwmgr, true);
+
+ cgs_enter_safe_mode(hwmgr->device, false);
+
+ vega10_program_gc_didt_config_registers(hwmgr, GCDiDtDroopCtrlConfig_vega10);
+ if (phm_cap_enabled(hwmgr->platform_descriptor.platformCaps, PHM_PlatformCaps_GCEDC))
+ vega10_program_gc_didt_config_registers(hwmgr, GCDiDtCtrl0Config_vega10);
+
+ if (phm_cap_enabled(hwmgr->platform_descriptor.platformCaps, PHM_PlatformCaps_PSM))
+ vega10_program_gc_didt_config_registers(hwmgr, AvfsPSMInitConfig_vega10);
+
+ return 0;
+}
+
+static int vega10_disable_psm_gc_didt_config(struct pp_hwmgr *hwmgr)
+{
+ uint32_t data;
+
+ cgs_enter_safe_mode(hwmgr->device, true);
+
+ vega10_didt_set_mask(hwmgr, false);
+
+ cgs_enter_safe_mode(hwmgr->device, false);
+
+ if (phm_cap_enabled(hwmgr->platform_descriptor.platformCaps, PHM_PlatformCaps_GCEDC)) {
+ data = 0x00000000;
+ cgs_write_register(hwmgr->device, mmGC_DIDT_CTRL0, data);
+ }
+
+ if (phm_cap_enabled(hwmgr->platform_descriptor.platformCaps, PHM_PlatformCaps_PSM))
+ vega10_program_gc_didt_config_registers(hwmgr, AvfsPSMResetConfig_vega10);
+
+ return 0;
+}
+
+static int vega10_enable_se_edc_config(struct pp_hwmgr *hwmgr)
+{
+ int result;
+ uint32_t num_se, count, data;
+ struct cgs_system_info sys_info = {0};
+ uint32_t reg;
+
+ sys_info.size = sizeof(struct cgs_system_info);
+ sys_info.info_id = CGS_SYSTEM_INFO_GFX_SE_INFO;
+ if (cgs_query_system_info(hwmgr->device, &sys_info) == 0)
+ num_se = sys_info.value;
+
+ cgs_enter_safe_mode(hwmgr->device, true);
+
+ cgs_lock_grbm_idx(hwmgr->device, true);
+ reg = soc15_get_register_offset(GC_HWID, 0, mmGRBM_GFX_INDEX_BASE_IDX, mmGRBM_GFX_INDEX);
+ for (count = 0; count < num_se; count++) {
+ data = GRBM_GFX_INDEX__INSTANCE_BROADCAST_WRITES_MASK | GRBM_GFX_INDEX__SH_BROADCAST_WRITES_MASK | ( count << GRBM_GFX_INDEX__SE_INDEX__SHIFT);
+ cgs_write_register(hwmgr->device, reg, data);
+ result = vega10_program_didt_config_registers(hwmgr, SEDiDtWeightConfig_Vega10, VEGA10_CONFIGREG_DIDT);
+ result |= vega10_program_didt_config_registers(hwmgr, SEEDCStallPatternConfig_Vega10, VEGA10_CONFIGREG_DIDT);
+ result |= vega10_program_didt_config_registers(hwmgr, SEEDCStallDelayConfig_Vega10, VEGA10_CONFIGREG_DIDT);
+ result |= vega10_program_didt_config_registers(hwmgr, SEEDCThresholdConfig_Vega10, VEGA10_CONFIGREG_DIDT);
+ result |= vega10_program_didt_config_registers(hwmgr, SEEDCCtrlResetConfig_Vega10, VEGA10_CONFIGREG_DIDT);
+ result |= vega10_program_didt_config_registers(hwmgr, SEEDCCtrlConfig_Vega10, VEGA10_CONFIGREG_DIDT);
+
+ if (0 != result)
+ break;
+ }
+ cgs_write_register(hwmgr->device, reg, 0xE0000000);
+ cgs_lock_grbm_idx(hwmgr->device, false);
+
+ vega10_didt_set_mask(hwmgr, true);
+
+ cgs_enter_safe_mode(hwmgr->device, false);
+
+ return 0;
+}
+
+static int vega10_disable_se_edc_config(struct pp_hwmgr *hwmgr)
+{
+ cgs_enter_safe_mode(hwmgr->device, true);
+
+ vega10_didt_set_mask(hwmgr, false);
+
+ cgs_enter_safe_mode(hwmgr->device, false);
+
+ return 0;
+}
+
+static int vega10_enable_psm_gc_edc_config(struct pp_hwmgr *hwmgr)
+{
+ int result;
+ uint32_t num_se;
+ uint32_t count, data;
+ struct cgs_system_info sys_info = {0};
+ uint32_t reg;
+
+ sys_info.size = sizeof(struct cgs_system_info);
+ sys_info.info_id = CGS_SYSTEM_INFO_GFX_SE_INFO;
+ if (cgs_query_system_info(hwmgr->device, &sys_info) == 0)
+ num_se = sys_info.value;
+
+ cgs_enter_safe_mode(hwmgr->device, true);
+
+ vega10_program_gc_didt_config_registers(hwmgr, AvfsPSMResetConfig_vega10);
+
+ cgs_lock_grbm_idx(hwmgr->device, true);
+ reg = soc15_get_register_offset(GC_HWID, 0, mmGRBM_GFX_INDEX_BASE_IDX, mmGRBM_GFX_INDEX);
+ for (count = 0; count < num_se; count++) {
+ data = GRBM_GFX_INDEX__INSTANCE_BROADCAST_WRITES_MASK | GRBM_GFX_INDEX__SH_BROADCAST_WRITES_MASK | ( count << GRBM_GFX_INDEX__SE_INDEX__SHIFT);
+ cgs_write_register(hwmgr->device, reg, data);
+ result |= vega10_program_didt_config_registers(hwmgr, PSMSEEDCStallPatternConfig_Vega10, VEGA10_CONFIGREG_DIDT);
+ result |= vega10_program_didt_config_registers(hwmgr, PSMSEEDCStallDelayConfig_Vega10, VEGA10_CONFIGREG_DIDT);
+ result |= vega10_program_didt_config_registers(hwmgr, PSMSEEDCCtrlResetConfig_Vega10, VEGA10_CONFIGREG_DIDT);
+ result |= vega10_program_didt_config_registers(hwmgr, PSMSEEDCCtrlConfig_Vega10, VEGA10_CONFIGREG_DIDT);
+
+ if (0 != result)
+ break;
+ }
+ cgs_write_register(hwmgr->device, reg, 0xE0000000);
+ cgs_lock_grbm_idx(hwmgr->device, false);
+
+ vega10_didt_set_mask(hwmgr, true);
+
+ cgs_enter_safe_mode(hwmgr->device, false);
+
+ vega10_program_gc_didt_config_registers(hwmgr, PSMGCEDCDroopCtrlConfig_vega10);
+
+ if (phm_cap_enabled(hwmgr->platform_descriptor.platformCaps, PHM_PlatformCaps_GCEDC)) {
+ vega10_program_gc_didt_config_registers(hwmgr, PSMGCEDCCtrlResetConfig_vega10);
+ vega10_program_gc_didt_config_registers(hwmgr, PSMGCEDCCtrlConfig_vega10);
+ }
+
+ if (phm_cap_enabled(hwmgr->platform_descriptor.platformCaps, PHM_PlatformCaps_PSM))
+ vega10_program_gc_didt_config_registers(hwmgr, AvfsPSMInitConfig_vega10);
+
+ return 0;
+}
+
+static int vega10_disable_psm_gc_edc_config(struct pp_hwmgr *hwmgr)
+{
+ uint32_t data;
+
+ cgs_enter_safe_mode(hwmgr->device, true);
+
+ vega10_didt_set_mask(hwmgr, false);
+
+ cgs_enter_safe_mode(hwmgr->device, false);
+
+ if (phm_cap_enabled(hwmgr->platform_descriptor.platformCaps, PHM_PlatformCaps_GCEDC)) {
+ data = 0x00000000;
+ cgs_write_register(hwmgr->device, mmGC_EDC_CTRL, data);
+ }
+
+ if (phm_cap_enabled(hwmgr->platform_descriptor.platformCaps, PHM_PlatformCaps_PSM))
+ vega10_program_gc_didt_config_registers(hwmgr, AvfsPSMResetConfig_vega10);
+
+ return 0;
+}
+
+static int vega10_enable_se_edc_force_stall_config(struct pp_hwmgr *hwmgr)
+{
+ uint32_t reg;
+ int result;
+
+ cgs_enter_safe_mode(hwmgr->device, true);
+
+ cgs_lock_grbm_idx(hwmgr->device, true);
+ reg = soc15_get_register_offset(GC_HWID, 0, mmGRBM_GFX_INDEX_BASE_IDX, mmGRBM_GFX_INDEX);
+ cgs_write_register(hwmgr->device, reg, 0xE0000000);
+ cgs_lock_grbm_idx(hwmgr->device, false);
+
+ result = vega10_program_didt_config_registers(hwmgr, SEEDCForceStallPatternConfig_Vega10, VEGA10_CONFIGREG_DIDT);
+ result |= vega10_program_didt_config_registers(hwmgr, SEEDCCtrlForceStallConfig_Vega10, VEGA10_CONFIGREG_DIDT);
+ if (0 != result)
+ return result;
+
+ vega10_didt_set_mask(hwmgr, true);
+
+ cgs_enter_safe_mode(hwmgr->device, false);
+
+ return 0;
+}
+
+static int vega10_disable_se_edc_force_stall_config(struct pp_hwmgr *hwmgr)
+{
+ int result;
+
+ result = vega10_disable_se_edc_config(hwmgr);
+ PP_ASSERT_WITH_CODE((0 == result), "[DisableDiDtConfig] Pre DIDT disable clock gating failed!", return result);
+
+ return 0;
+}
+
+int vega10_enable_didt_config(struct pp_hwmgr *hwmgr)
+{
+ int result = 0;
+ struct vega10_hwmgr *data = (struct vega10_hwmgr *)(hwmgr->backend);
+
+ if (data->smu_features[GNLD_DIDT].supported) {
+ if (data->smu_features[GNLD_DIDT].enabled)
+ PP_DBG_LOG("[EnableDiDtConfig] Feature DiDt Already enabled!\n");
+
+ switch (data->registry_data.didt_mode) {
+ case 0:
+ result = vega10_enable_cac_driving_se_didt_config(hwmgr);
+ PP_ASSERT_WITH_CODE((0 == result), "[EnableDiDt] Attempt to enable DiDt Mode 0 Failed!", return result);
+ break;
+ case 2:
+ result = vega10_enable_psm_gc_didt_config(hwmgr);
+ PP_ASSERT_WITH_CODE((0 == result), "[EnableDiDt] Attempt to enable DiDt Mode 2 Failed!", return result);
+ break;
+ case 3:
+ result = vega10_enable_se_edc_config(hwmgr);
+ PP_ASSERT_WITH_CODE((0 == result), "[EnableDiDt] Attempt to enable DiDt Mode 3 Failed!", return result);
+ break;
+ case 1:
+ case 4:
+ case 5:
+ result = vega10_enable_psm_gc_edc_config(hwmgr);
+ PP_ASSERT_WITH_CODE((0 == result), "[EnableDiDt] Attempt to enable DiDt Mode 5 Failed!", return result);
+ break;
+ case 6:
+ result = vega10_enable_se_edc_force_stall_config(hwmgr);
+ PP_ASSERT_WITH_CODE((0 == result), "[EnableDiDt] Attempt to enable DiDt Mode 6 Failed!", return result);
+ break;
+ default:
+ result = -EINVAL;
+ break;
+ }
+
+ if (0 == result) {
+ PP_ASSERT_WITH_CODE((!vega10_enable_smc_features(hwmgr->smumgr, true, data->smu_features[GNLD_DIDT].smu_feature_bitmap)),
+ "[EnableDiDtConfig] Attempt to Enable DiDt feature Failed!", return result);
+ data->smu_features[GNLD_DIDT].enabled = true;
+ }
+ }
+
+ return result;
+}
+
+int vega10_disable_didt_config(struct pp_hwmgr *hwmgr)
+{
+ int result = 0;
+ struct vega10_hwmgr *data = (struct vega10_hwmgr *)(hwmgr->backend);
+
+ if (data->smu_features[GNLD_DIDT].supported) {
+ if (!data->smu_features[GNLD_DIDT].enabled)
+ PP_DBG_LOG("[DisableDiDtConfig] Feature DiDt Already Disabled!\n");
+
+ switch (data->registry_data.didt_mode) {
+ case 0:
+ result = vega10_disable_cac_driving_se_didt_config(hwmgr);
+ PP_ASSERT_WITH_CODE((0 == result), "[DisableDiDt] Attempt to disable DiDt Mode 0 Failed!", return result);
+ break;
+ case 2:
+ result = vega10_disable_psm_gc_didt_config(hwmgr);
+ PP_ASSERT_WITH_CODE((0 == result), "[DisableDiDt] Attempt to disable DiDt Mode 2 Failed!", return result);
+ break;
+ case 3:
+ result = vega10_disable_se_edc_config(hwmgr);
+ PP_ASSERT_WITH_CODE((0 == result), "[DisableDiDt] Attempt to disable DiDt Mode 3 Failed!", return result);
+ break;
+ case 1:
+ case 4:
+ case 5:
+ result = vega10_disable_psm_gc_edc_config(hwmgr);
+ PP_ASSERT_WITH_CODE((0 == result), "[DisableDiDt] Attempt to disable DiDt Mode 5 Failed!", return result);
+ break;
+ case 6:
+ result = vega10_disable_se_edc_force_stall_config(hwmgr);
+ PP_ASSERT_WITH_CODE((0 == result), "[DisableDiDt] Attempt to disable DiDt Mode 6 Failed!", return result);
+ break;
+ default:
+ result = -EINVAL;
+ break;
+ }
+
+ if (0 == result) {
+ PP_ASSERT_WITH_CODE((0 != vega10_enable_smc_features(hwmgr->smumgr, false, data->smu_features[GNLD_DIDT].smu_feature_bitmap)),
+ "[DisableDiDtConfig] Attempt to Disable DiDt feature Failed!", return result);
+ data->smu_features[GNLD_DIDT].enabled = false;
+ }
+ }
+
+ return result;
+}
void vega10_initialize_power_tune_defaults(struct pp_hwmgr *hwmgr)
{
diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_powertune.h b/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_powertune.h
index 9ecaa27..b95771a 100644
--- a/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_powertune.h
+++ b/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_powertune.h
@@ -31,6 +31,12 @@ enum vega10_pt_config_reg_type {
VEGA10_CONFIGREG_MAX
};
+enum vega10_didt_config_reg_type {
+ VEGA10_CONFIGREG_DIDT = 0,
+ VEGA10_CONFIGREG_GCCAC,
+ VEGA10_CONFIGREG_SECAC
+};
+
/* PowerContainment Features */
#define POWERCONTAINMENT_FEATURE_DTE 0x00000001
#define POWERCONTAINMENT_FEATURE_TDCLimit 0x00000002
@@ -44,6 +50,13 @@ struct vega10_pt_config_reg {
enum vega10_pt_config_reg_type type;
};
+struct vega10_didt_config_reg {
+ uint32_t offset;
+ uint32_t mask;
+ uint32_t shift;
+ uint32_t value;
+};
+
struct vega10_pt_defaults {
uint8_t SviLoadLineEn;
uint8_t SviLoadLineVddC;
@@ -62,5 +75,8 @@ int vega10_set_power_limit(struct pp_hwmgr *hwmgr, uint32_t n);
int vega10_power_control_set_level(struct pp_hwmgr *hwmgr);
int vega10_disable_power_containment(struct pp_hwmgr *hwmgr);
+int vega10_enable_didt_config(struct pp_hwmgr *hwmgr);
+int vega10_disable_didt_config(struct pp_hwmgr *hwmgr);
+
#endif /* _VEGA10_POWERTUNE_H_ */
diff --git a/drivers/gpu/drm/amd/powerplay/inc/hardwaremanager.h b/drivers/gpu/drm/amd/powerplay/inc/hardwaremanager.h
index a1ebe10..a4c8b09 100644
--- a/drivers/gpu/drm/amd/powerplay/inc/hardwaremanager.h
+++ b/drivers/gpu/drm/amd/powerplay/inc/hardwaremanager.h
@@ -164,9 +164,14 @@ enum phm_platform_caps {
PHM_PlatformCaps_EnablePlatformPowerManagement, /* indicates that Platform Power Management feature is supported */
PHM_PlatformCaps_SurpriseRemoval, /* indicates that surprise removal feature is requested */
PHM_PlatformCaps_NewCACVoltage, /* indicates new CAC voltage table support */
+ PHM_PlatformCaps_DiDtSupport, /* for dI/dT feature */
PHM_PlatformCaps_DBRamping, /* for dI/dT feature */
PHM_PlatformCaps_TDRamping, /* for dI/dT feature */
PHM_PlatformCaps_TCPRamping, /* for dI/dT feature */
+ PHM_PlatformCaps_DBRRamping, /* for dI/dT feature */
+ PHM_PlatformCaps_DiDtEDCEnable, /* for dI/dT feature */
+ PHM_PlatformCaps_GCEDC, /* for dI/dT feature */
+ PHM_PlatformCaps_PSM, /* for dI/dT feature */
PHM_PlatformCaps_EnableSMU7ThermalManagement, /* SMC will manage thermal events */
PHM_PlatformCaps_FPS, /* FPS support */
PHM_PlatformCaps_ACP, /* ACP support */
diff --git a/drivers/gpu/drm/amd/powerplay/inc/pp_debug.h b/drivers/gpu/drm/amd/powerplay/inc/pp_debug.h
index f3f9ebb..822cd8b 100644
--- a/drivers/gpu/drm/amd/powerplay/inc/pp_debug.h
+++ b/drivers/gpu/drm/amd/powerplay/inc/pp_debug.h
@@ -42,6 +42,12 @@
} \
} while (0)
+#define PP_ASSERT(cond, msg) \
+ do { \
+ if (!(cond)) { \
+ pr_warn("%s\n", msg); \
+ } \
+ } while (0)
#define PP_DBG_LOG(fmt, ...) \
do { \
diff --git a/drivers/gpu/drm/amd/powerplay/inc/pp_soc15.h b/drivers/gpu/drm/amd/powerplay/inc/pp_soc15.h
index 227d999..a511611 100644
--- a/drivers/gpu/drm/amd/powerplay/inc/pp_soc15.h
+++ b/drivers/gpu/drm/amd/powerplay/inc/pp_soc15.h
@@ -41,6 +41,8 @@ inline static uint32_t soc15_get_register_offset(
reg = MP1_BASE.instance[inst].segment[segment] + offset;
else if (hw_id == DF_HWID)
reg = DF_BASE.instance[inst].segment[segment] + offset;
+ else if (hw_id == GC_HWID)
+ reg = GC_BASE.instance[inst].segment[segment] + offset;
return reg;
}
--
2.7.4
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx
^ permalink raw reply related [flat|nested] 7+ messages in thread
* RE: [PATCH 6/6] drm/amd/powerplay: added didt support for vega10
[not found] ` <1499392755-23507-6-git-send-email-evan.quan-5C7GfCeVMHo@public.gmane.org>
@ 2017-07-07 3:30 ` Deucher, Alexander
0 siblings, 0 replies; 7+ messages in thread
From: Deucher, Alexander @ 2017-07-07 3:30 UTC (permalink / raw)
To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW; +Cc: Quan, Evan
> -----Original Message-----
> From: amd-gfx [mailto:amd-gfx-bounces@lists.freedesktop.org] On Behalf
> Of Evan Quan
> Sent: Thursday, July 06, 2017 9:59 PM
> To: amd-gfx@lists.freedesktop.org
> Cc: Deucher, Alexander; Quan, Evan
> Subject: [PATCH 6/6] drm/amd/powerplay: added didt support for vega10
>
> Change-Id: If2f955469e5b037e0726999b10eb10c08740b208
> Signed-off-by: Evan Quan <evan.quan@amd.com>
Series is:
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
> ---
> drivers/gpu/drm/amd/powerplay/hwmgr/vega10_hwmgr.c | 56 +
> drivers/gpu/drm/amd/powerplay/hwmgr/vega10_hwmgr.h | 5 +
> .../gpu/drm/amd/powerplay/hwmgr/vega10_powertune.c | 1291
> ++++++++++++++++++++
> .../gpu/drm/amd/powerplay/hwmgr/vega10_powertune.h | 16 +
> .../gpu/drm/amd/powerplay/inc/hardwaremanager.h | 5 +
> drivers/gpu/drm/amd/powerplay/inc/pp_debug.h | 6 +
> drivers/gpu/drm/amd/powerplay/inc/pp_soc15.h | 2 +
> 7 files changed, 1381 insertions(+)
>
> diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_hwmgr.c
> b/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_hwmgr.c
> index 780efaf..ae11d30 100644
> --- a/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_hwmgr.c
> +++ b/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_hwmgr.c
> @@ -145,6 +145,19 @@ static void vega10_set_default_registry_data(struct
> pp_hwmgr *hwmgr)
> data->registry_data.vr1hot_enabled = 1;
> data->registry_data.regulator_hot_gpio_support = 1;
>
> + data->registry_data.didt_support = 1;
> + if (data->registry_data.didt_support) {
> + data->registry_data.didt_mode = 6;
> + data->registry_data.sq_ramping_support = 1;
> + data->registry_data.db_ramping_support = 0;
> + data->registry_data.td_ramping_support = 0;
> + data->registry_data.tcp_ramping_support = 0;
> + data->registry_data.dbr_ramping_support = 0;
> + data->registry_data.edc_didt_support = 1;
> + data->registry_data.gc_didt_support = 0;
> + data->registry_data.psm_didt_support = 0;
> + }
> +
> data->display_voltage_mode =
> PPVEGA10_VEGA10DISPLAYVOLTAGEMODE_DFLT;
> data->dcef_clk_quad_eqn_a =
> PPREGKEY_VEGA10QUADRATICEQUATION_DFLT;
> data->dcef_clk_quad_eqn_b =
> PPREGKEY_VEGA10QUADRATICEQUATION_DFLT;
> @@ -222,6 +235,8 @@ static int vega10_set_features_platform_caps(struct
> pp_hwmgr *hwmgr)
> phm_cap_unset(hwmgr->platform_descriptor.platformCaps,
> PHM_PlatformCaps_PowerContainment);
> phm_cap_unset(hwmgr->platform_descriptor.platformCaps,
> + PHM_PlatformCaps_DiDtSupport);
> + phm_cap_unset(hwmgr->platform_descriptor.platformCaps,
> PHM_PlatformCaps_SQRamping);
> phm_cap_unset(hwmgr->platform_descriptor.platformCaps,
> PHM_PlatformCaps_DBRamping);
> @@ -229,6 +244,34 @@ static int vega10_set_features_platform_caps(struct
> pp_hwmgr *hwmgr)
> PHM_PlatformCaps_TDRamping);
> phm_cap_unset(hwmgr->platform_descriptor.platformCaps,
> PHM_PlatformCaps_TCPRamping);
> + phm_cap_unset(hwmgr->platform_descriptor.platformCaps,
> + PHM_PlatformCaps_DBRRamping);
> + phm_cap_unset(hwmgr->platform_descriptor.platformCaps,
> + PHM_PlatformCaps_DiDtEDCEnable);
> + phm_cap_unset(hwmgr->platform_descriptor.platformCaps,
> + PHM_PlatformCaps_GCEDC);
> + phm_cap_unset(hwmgr->platform_descriptor.platformCaps,
> + PHM_PlatformCaps_PSM);
> +
> + if (data->registry_data.didt_support) {
> + phm_cap_set(hwmgr->platform_descriptor.platformCaps,
> PHM_PlatformCaps_DiDtSupport);
> + if (data->registry_data.sq_ramping_support)
> + phm_cap_set(hwmgr-
> >platform_descriptor.platformCaps, PHM_PlatformCaps_SQRamping);
> + if (data->registry_data.db_ramping_support)
> + phm_cap_set(hwmgr-
> >platform_descriptor.platformCaps, PHM_PlatformCaps_DBRamping);
> + if (data->registry_data.td_ramping_support)
> + phm_cap_set(hwmgr-
> >platform_descriptor.platformCaps, PHM_PlatformCaps_TDRamping);
> + if (data->registry_data.tcp_ramping_support)
> + phm_cap_set(hwmgr-
> >platform_descriptor.platformCaps, PHM_PlatformCaps_TCPRamping);
> + if (data->registry_data.dbr_ramping_support)
> + phm_cap_set(hwmgr-
> >platform_descriptor.platformCaps, PHM_PlatformCaps_DBRRamping);
> + if (data->registry_data.edc_didt_support)
> + phm_cap_set(hwmgr-
> >platform_descriptor.platformCaps, PHM_PlatformCaps_DiDtEDCEnable);
> + if (data->registry_data.gc_didt_support)
> + phm_cap_set(hwmgr-
> >platform_descriptor.platformCaps, PHM_PlatformCaps_GCEDC);
> + if (data->registry_data.psm_didt_support)
> + phm_cap_set(hwmgr-
> >platform_descriptor.platformCaps, PHM_PlatformCaps_PSM);
> + }
>
> if (data->registry_data.power_containment_support)
> phm_cap_set(hwmgr->platform_descriptor.platformCaps,
> @@ -321,6 +364,7 @@ static void vega10_init_dpm_defaults(struct
> pp_hwmgr *hwmgr)
> data->smu_features[GNLD_FAN_CONTROL].smu_feature_id =
> FEATURE_FAN_CONTROL_BIT;
> data->smu_features[GNLD_ACG].smu_feature_id =
> FEATURE_ACG_BIT;
> + data->smu_features[GNLD_DIDT].smu_feature_id =
> FEATURE_GFX_EDC_BIT;
>
> if (!data->registry_data.prefetcher_dpm_key_disabled)
> data->smu_features[GNLD_DPM_PREFETCHER].supported =
> true;
> @@ -390,6 +434,9 @@ static void vega10_init_dpm_defaults(struct
> pp_hwmgr *hwmgr)
> if ((data->smu_version & 0xff000000) == 0x5000000)
> data->smu_features[GNLD_ACG].supported = true;
>
> + if (data->registry_data.didt_support)
> + data->smu_features[GNLD_DIDT].supported = true;
> +
> }
>
> #ifdef PPLIB_VEGA10_EVV_SUPPORT
> @@ -2906,6 +2953,11 @@ static int vega10_enable_dpm_tasks(struct
> pp_hwmgr *hwmgr)
> PP_ASSERT_WITH_CODE(!tmp_result,
> "Failed to start DPM!", result = tmp_result);
>
> + /* enable didt, do not abort if failed didt */
> + tmp_result = vega10_enable_didt_config(hwmgr);
> + PP_ASSERT(!tmp_result,
> + "Failed to enable didt config!");
> +
> tmp_result = vega10_enable_power_containment(hwmgr);
> PP_ASSERT_WITH_CODE(!tmp_result,
> "Failed to enable power containment!",
> @@ -4735,6 +4787,10 @@ static int vega10_disable_dpm_tasks(struct
> pp_hwmgr *hwmgr)
> PP_ASSERT_WITH_CODE((tmp_result == 0),
> "Failed to disable power containment!", result =
> tmp_result);
>
> + tmp_result = vega10_disable_didt_config(hwmgr);
> + PP_ASSERT_WITH_CODE((tmp_result == 0),
> + "Failed to disable didt config!", result = tmp_result);
> +
> tmp_result = vega10_avfs_enable(hwmgr, false);
> PP_ASSERT_WITH_CODE((tmp_result == 0),
> "Failed to disable AVFS!", result = tmp_result);
> diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_hwmgr.h
> b/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_hwmgr.h
> index 4150801..5c97a8b 100644
> --- a/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_hwmgr.h
> +++ b/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_hwmgr.h
> @@ -232,7 +232,9 @@ struct vega10_registry_data {
> uint8_t cac_support;
> uint8_t clock_stretcher_support;
> uint8_t db_ramping_support;
> + uint8_t didt_mode;
> uint8_t didt_support;
> + uint8_t edc_didt_support;
> uint8_t dynamic_state_patching_support;
> uint8_t enable_pkg_pwr_tracking_feature;
> uint8_t enable_tdc_limit_feature;
> @@ -265,6 +267,9 @@ struct vega10_registry_data {
> uint8_t tcp_ramping_support;
> uint8_t tdc_support;
> uint8_t td_ramping_support;
> + uint8_t dbr_ramping_support;
> + uint8_t gc_didt_support;
> + uint8_t psm_didt_support;
> uint8_t thermal_out_gpio_support;
> uint8_t thermal_support;
> uint8_t fw_ctf_enabled;
> diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_powertune.c
> b/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_powertune.c
> index 3f72268..22334a1 100644
> --- a/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_powertune.c
> +++ b/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_powertune.c
> @@ -26,7 +26,1298 @@
> #include "vega10_powertune.h"
> #include "vega10_smumgr.h"
> #include "vega10_ppsmc.h"
> +#include "vega10_inc.h"
> #include "pp_debug.h"
> +#include "pp_soc15.h"
> +
> +static const struct vega10_didt_config_reg
> SEDiDtTuningCtrlConfig_Vega10[] =
> +{
> +/* -----------------------------------------------------------------------------------------
> ----------------------------------------------------------------------------------------
> + * Offset Mask Shift
> Value
> + * -----------------------------------------------------------------------------------------
> ----------------------------------------------------------------------------------------
> + */
> + /* DIDT_SQ */
> + { ixDIDT_SQ_TUNING_CTRL,
> DIDT_SQ_TUNING_CTRL__MAX_POWER_DELTA_HI_MASK,
> DIDT_SQ_TUNING_CTRL__MAX_POWER_DELTA_HI__SHIFT, 0x3853 },
> + { ixDIDT_SQ_TUNING_CTRL,
> DIDT_SQ_TUNING_CTRL__MAX_POWER_DELTA_LO_MASK,
> DIDT_SQ_TUNING_CTRL__MAX_POWER_DELTA_LO__SHIFT, 0x3153 },
> +
> + /* DIDT_TD */
> + { ixDIDT_TD_TUNING_CTRL,
> DIDT_TD_TUNING_CTRL__MAX_POWER_DELTA_HI_MASK,
> DIDT_TD_TUNING_CTRL__MAX_POWER_DELTA_HI__SHIFT, 0x0dde },
> + { ixDIDT_TD_TUNING_CTRL,
> DIDT_TD_TUNING_CTRL__MAX_POWER_DELTA_LO_MASK,
> DIDT_TD_TUNING_CTRL__MAX_POWER_DELTA_LO__SHIFT, 0x0dde },
> +
> + /* DIDT_TCP */
> + { ixDIDT_TCP_TUNING_CTRL,
> DIDT_TCP_TUNING_CTRL__MAX_POWER_DELTA_HI_MASK,
> DIDT_TCP_TUNING_CTRL__MAX_POWER_DELTA_HI__SHIFT, 0x3dde },
> + { ixDIDT_TCP_TUNING_CTRL,
> DIDT_TCP_TUNING_CTRL__MAX_POWER_DELTA_LO_MASK,
> DIDT_TCP_TUNING_CTRL__MAX_POWER_DELTA_LO__SHIFT, 0x3dde },
> +
> + /* DIDT_DB */
> + { ixDIDT_DB_TUNING_CTRL,
> DIDT_DB_TUNING_CTRL__MAX_POWER_DELTA_HI_MASK,
> DIDT_DB_TUNING_CTRL__MAX_POWER_DELTA_HI__SHIFT, 0x3dde },
> + { ixDIDT_DB_TUNING_CTRL,
> DIDT_DB_TUNING_CTRL__MAX_POWER_DELTA_LO_MASK,
> DIDT_DB_TUNING_CTRL__MAX_POWER_DELTA_LO__SHIFT, 0x3dde },
> +
> + { 0xFFFFFFFF } /* End of list */
> +};
> +
> +static const struct vega10_didt_config_reg SEDiDtCtrl3Config_vega10[] =
> +{
> +/* -----------------------------------------------------------------------------------------
> ----------------------------------------------------------------------------------------
> + * Offset Mask Shift
> Value
> + * -----------------------------------------------------------------------------------------
> ----------------------------------------------------------------------------------------
> + */
> + /*DIDT_SQ_CTRL3 */
> + { ixDIDT_SQ_CTRL3, DIDT_SQ_CTRL3__GC_DIDT_ENABLE_MASK,
> DIDT_SQ_CTRL3__GC_DIDT_ENABLE__SHIFT, 0x0000 },
> + { ixDIDT_SQ_CTRL3,
> DIDT_SQ_CTRL3__GC_DIDT_CLK_EN_OVERRIDE_MASK,
> DIDT_SQ_CTRL3__GC_DIDT_CLK_EN_OVERRIDE__SHIFT, 0x0000 },
> + { ixDIDT_SQ_CTRL3, DIDT_SQ_CTRL3__THROTTLE_POLICY_MASK,
> DIDT_SQ_CTRL3__THROTTLE_POLICY__SHIFT, 0x0003 },
> + { ixDIDT_SQ_CTRL3,
> DIDT_SQ_CTRL3__DIDT_TRIGGER_THROTTLE_LOWBIT_MASK,
> DIDT_SQ_CTRL3__DIDT_TRIGGER_THROTTLE_LOWBIT__SHIFT, 0x0000
> },
> + { ixDIDT_SQ_CTRL3,
> DIDT_SQ_CTRL3__DIDT_POWER_LEVEL_LOWBIT_MASK,
> DIDT_SQ_CTRL3__DIDT_POWER_LEVEL_LOWBIT__SHIFT, 0x0000 },
> + { ixDIDT_SQ_CTRL3,
> DIDT_SQ_CTRL3__DIDT_STALL_PATTERN_BIT_NUMS_MASK,
> DIDT_SQ_CTRL3__DIDT_STALL_PATTERN_BIT_NUMS__SHIFT, 0x0003
> },
> + { ixDIDT_SQ_CTRL3,
> DIDT_SQ_CTRL3__GC_DIDT_LEVEL_COMB_EN_MASK,
> DIDT_SQ_CTRL3__GC_DIDT_LEVEL_COMB_EN__SHIFT, 0x0000 },
> + { ixDIDT_SQ_CTRL3,
> DIDT_SQ_CTRL3__SE_DIDT_LEVEL_COMB_EN_MASK,
> DIDT_SQ_CTRL3__SE_DIDT_LEVEL_COMB_EN__SHIFT, 0x0000 },
> + { ixDIDT_SQ_CTRL3,
> DIDT_SQ_CTRL3__QUALIFY_STALL_EN_MASK,
> DIDT_SQ_CTRL3__QUALIFY_STALL_EN__SHIFT, 0x0000 },
> + { ixDIDT_SQ_CTRL3, DIDT_SQ_CTRL3__DIDT_STALL_SEL_MASK,
> DIDT_SQ_CTRL3__DIDT_STALL_SEL__SHIFT, 0x0000 },
> + { ixDIDT_SQ_CTRL3,
> DIDT_SQ_CTRL3__DIDT_FORCE_STALL_MASK,
> DIDT_SQ_CTRL3__DIDT_FORCE_STALL__SHIFT, 0x0000 },
> + { ixDIDT_SQ_CTRL3,
> DIDT_SQ_CTRL3__DIDT_STALL_DELAY_EN_MASK,
> DIDT_SQ_CTRL3__DIDT_STALL_DELAY_EN__SHIFT, 0x0000 },
> +
> + /*DIDT_TCP_CTRL3 */
> + { ixDIDT_TCP_CTRL3,
> DIDT_TCP_CTRL3__GC_DIDT_ENABLE_MASK,
> DIDT_TCP_CTRL3__GC_DIDT_ENABLE__SHIFT, 0x0000 },
> + { ixDIDT_TCP_CTRL3,
> DIDT_TCP_CTRL3__GC_DIDT_CLK_EN_OVERRIDE_MASK,
> DIDT_TCP_CTRL3__GC_DIDT_CLK_EN_OVERRIDE__SHIFT, 0x0000 },
> + { ixDIDT_TCP_CTRL3,
> DIDT_TCP_CTRL3__THROTTLE_POLICY_MASK,
> DIDT_TCP_CTRL3__THROTTLE_POLICY__SHIFT, 0x0003 },
> + { ixDIDT_TCP_CTRL3,
> DIDT_TCP_CTRL3__DIDT_TRIGGER_THROTTLE_LOWBIT_MASK,
> DIDT_TCP_CTRL3__DIDT_TRIGGER_THROTTLE_LOWBIT__SHIFT, 0x0000
> },
> + { ixDIDT_TCP_CTRL3,
> DIDT_TCP_CTRL3__DIDT_POWER_LEVEL_LOWBIT_MASK,
> DIDT_TCP_CTRL3__DIDT_POWER_LEVEL_LOWBIT__SHIFT, 0x0000 },
> + { ixDIDT_TCP_CTRL3,
> DIDT_TCP_CTRL3__DIDT_STALL_PATTERN_BIT_NUMS_MASK,
> DIDT_TCP_CTRL3__DIDT_STALL_PATTERN_BIT_NUMS__SHIFT, 0x0003
> },
> + { ixDIDT_TCP_CTRL3,
> DIDT_TCP_CTRL3__GC_DIDT_LEVEL_COMB_EN_MASK,
> DIDT_TCP_CTRL3__GC_DIDT_LEVEL_COMB_EN__SHIFT, 0x0000 },
> + { ixDIDT_TCP_CTRL3,
> DIDT_TCP_CTRL3__SE_DIDT_LEVEL_COMB_EN_MASK,
> DIDT_TCP_CTRL3__SE_DIDT_LEVEL_COMB_EN__SHIFT, 0x0000 },
> + { ixDIDT_TCP_CTRL3,
> DIDT_TCP_CTRL3__QUALIFY_STALL_EN_MASK,
> DIDT_TCP_CTRL3__QUALIFY_STALL_EN__SHIFT, 0x0000 },
> + { ixDIDT_TCP_CTRL3, DIDT_TCP_CTRL3__DIDT_STALL_SEL_MASK,
> DIDT_TCP_CTRL3__DIDT_STALL_SEL__SHIFT, 0x0000 },
> + { ixDIDT_TCP_CTRL3,
> DIDT_TCP_CTRL3__DIDT_FORCE_STALL_MASK,
> DIDT_TCP_CTRL3__DIDT_FORCE_STALL__SHIFT, 0x0000 },
> + { ixDIDT_TCP_CTRL3,
> DIDT_TCP_CTRL3__DIDT_STALL_DELAY_EN_MASK,
> DIDT_TCP_CTRL3__DIDT_STALL_DELAY_EN__SHIFT, 0x0000 },
> +
> + /*DIDT_TD_CTRL3 */
> + { ixDIDT_TD_CTRL3, DIDT_TD_CTRL3__GC_DIDT_ENABLE_MASK,
> DIDT_TD_CTRL3__GC_DIDT_ENABLE__SHIFT, 0x0000 },
> + { ixDIDT_TD_CTRL3,
> DIDT_TD_CTRL3__GC_DIDT_CLK_EN_OVERRIDE_MASK,
> DIDT_TD_CTRL3__GC_DIDT_CLK_EN_OVERRIDE__SHIFT, 0x0000 },
> + { ixDIDT_TD_CTRL3, DIDT_TD_CTRL3__THROTTLE_POLICY_MASK,
> DIDT_TD_CTRL3__THROTTLE_POLICY__SHIFT, 0x0003 },
> + { ixDIDT_TD_CTRL3,
> DIDT_TD_CTRL3__DIDT_TRIGGER_THROTTLE_LOWBIT_MASK,
> DIDT_TD_CTRL3__DIDT_TRIGGER_THROTTLE_LOWBIT__SHIFT, 0x0000
> },
> + { ixDIDT_TD_CTRL3,
> DIDT_TD_CTRL3__DIDT_POWER_LEVEL_LOWBIT_MASK,
> DIDT_TD_CTRL3__DIDT_POWER_LEVEL_LOWBIT__SHIFT, 0x0000 },
> + { ixDIDT_TD_CTRL3,
> DIDT_TD_CTRL3__DIDT_STALL_PATTERN_BIT_NUMS_MASK,
> DIDT_TD_CTRL3__DIDT_STALL_PATTERN_BIT_NUMS__SHIFT, 0x0003
> },
> + { ixDIDT_TD_CTRL3,
> DIDT_TD_CTRL3__GC_DIDT_LEVEL_COMB_EN_MASK,
> DIDT_TD_CTRL3__GC_DIDT_LEVEL_COMB_EN__SHIFT, 0x0000 },
> + { ixDIDT_TD_CTRL3,
> DIDT_TD_CTRL3__SE_DIDT_LEVEL_COMB_EN_MASK,
> DIDT_TD_CTRL3__SE_DIDT_LEVEL_COMB_EN__SHIFT, 0x0000 },
> + { ixDIDT_TD_CTRL3,
> DIDT_TD_CTRL3__QUALIFY_STALL_EN_MASK,
> DIDT_TD_CTRL3__QUALIFY_STALL_EN__SHIFT, 0x0000 },
> + { ixDIDT_TD_CTRL3, DIDT_TD_CTRL3__DIDT_STALL_SEL_MASK,
> DIDT_TD_CTRL3__DIDT_STALL_SEL__SHIFT, 0x0000 },
> + { ixDIDT_TD_CTRL3, DIDT_TD_CTRL3__DIDT_FORCE_STALL_MASK,
> DIDT_TD_CTRL3__DIDT_FORCE_STALL__SHIFT, 0x0000 },
> + { ixDIDT_TD_CTRL3,
> DIDT_TD_CTRL3__DIDT_STALL_DELAY_EN_MASK,
> DIDT_TD_CTRL3__DIDT_STALL_DELAY_EN__SHIFT, 0x0000 },
> +
> + /*DIDT_DB_CTRL3 */
> + { ixDIDT_DB_CTRL3, DIDT_DB_CTRL3__GC_DIDT_ENABLE_MASK,
> DIDT_DB_CTRL3__GC_DIDT_ENABLE__SHIFT, 0x0000 },
> + { ixDIDT_DB_CTRL3,
> DIDT_DB_CTRL3__GC_DIDT_CLK_EN_OVERRIDE_MASK,
> DIDT_DB_CTRL3__GC_DIDT_CLK_EN_OVERRIDE__SHIFT, 0x0000 },
> + { ixDIDT_DB_CTRL3, DIDT_DB_CTRL3__THROTTLE_POLICY_MASK,
> DIDT_DB_CTRL3__THROTTLE_POLICY__SHIFT, 0x0003 },
> + { ixDIDT_DB_CTRL3,
> DIDT_DB_CTRL3__DIDT_TRIGGER_THROTTLE_LOWBIT_MASK,
> DIDT_DB_CTRL3__DIDT_TRIGGER_THROTTLE_LOWBIT__SHIFT, 0x0000
> },
> + { ixDIDT_DB_CTRL3,
> DIDT_DB_CTRL3__DIDT_POWER_LEVEL_LOWBIT_MASK,
> DIDT_DB_CTRL3__DIDT_POWER_LEVEL_LOWBIT__SHIFT, 0x0000 },
> + { ixDIDT_DB_CTRL3,
> DIDT_DB_CTRL3__DIDT_STALL_PATTERN_BIT_NUMS_MASK,
> DIDT_DB_CTRL3__DIDT_STALL_PATTERN_BIT_NUMS__SHIFT, 0x0003
> },
> + { ixDIDT_DB_CTRL3,
> DIDT_DB_CTRL3__GC_DIDT_LEVEL_COMB_EN_MASK,
> DIDT_DB_CTRL3__GC_DIDT_LEVEL_COMB_EN__SHIFT, 0x0000 },
> + { ixDIDT_DB_CTRL3,
> DIDT_DB_CTRL3__SE_DIDT_LEVEL_COMB_EN_MASK,
> DIDT_DB_CTRL3__SE_DIDT_LEVEL_COMB_EN__SHIFT, 0x0000 },
> + { ixDIDT_DB_CTRL3,
> DIDT_DB_CTRL3__QUALIFY_STALL_EN_MASK,
> DIDT_DB_CTRL3__QUALIFY_STALL_EN__SHIFT, 0x0000 },
> + { ixDIDT_DB_CTRL3, DIDT_DB_CTRL3__DIDT_STALL_SEL_MASK,
> DIDT_DB_CTRL3__DIDT_STALL_SEL__SHIFT, 0x0000 },
> + { ixDIDT_DB_CTRL3,
> DIDT_DB_CTRL3__DIDT_FORCE_STALL_MASK,
> DIDT_DB_CTRL3__DIDT_FORCE_STALL__SHIFT, 0x0000 },
> + { ixDIDT_DB_CTRL3,
> DIDT_DB_CTRL3__DIDT_STALL_DELAY_EN_MASK,
> DIDT_DB_CTRL3__DIDT_STALL_DELAY_EN__SHIFT, 0x0000 },
> +
> + { 0xFFFFFFFF } /* End of list */
> +};
> +
> +static const struct vega10_didt_config_reg SEDiDtCtrl2Config_Vega10[] =
> +{
> +/* -----------------------------------------------------------------------------------------
> ----------------------------------------------------------------------------------------
> + * Offset Mask Shift
> Value
> + * -----------------------------------------------------------------------------------------
> ----------------------------------------------------------------------------------------
> + */
> + /* DIDT_SQ */
> + { ixDIDT_SQ_CTRL2,
> DIDT_SQ_CTRL2__MAX_POWER_DELTA_MASK,
> DIDT_SQ_CTRL2__MAX_POWER_DELTA__SHIFT, 0x3853 },
> + { ixDIDT_SQ_CTRL2,
> DIDT_SQ_CTRL2__SHORT_TERM_INTERVAL_SIZE_MASK,
> DIDT_SQ_CTRL2__SHORT_TERM_INTERVAL_SIZE__SHIFT, 0x00c0 },
> + { ixDIDT_SQ_CTRL2,
> DIDT_SQ_CTRL2__LONG_TERM_INTERVAL_RATIO_MASK,
> DIDT_SQ_CTRL2__LONG_TERM_INTERVAL_RATIO__SHIFT, 0x0000 },
> +
> + /* DIDT_TD */
> + { ixDIDT_TD_CTRL2,
> DIDT_TD_CTRL2__MAX_POWER_DELTA_MASK,
> DIDT_TD_CTRL2__MAX_POWER_DELTA__SHIFT, 0x3fff },
> + { ixDIDT_TD_CTRL2,
> DIDT_TD_CTRL2__SHORT_TERM_INTERVAL_SIZE_MASK,
> DIDT_TD_CTRL2__SHORT_TERM_INTERVAL_SIZE__SHIFT, 0x00c0 },
> + { ixDIDT_TD_CTRL2,
> DIDT_TD_CTRL2__LONG_TERM_INTERVAL_RATIO_MASK,
> DIDT_TD_CTRL2__LONG_TERM_INTERVAL_RATIO__SHIFT, 0x0001 },
> +
> + /* DIDT_TCP */
> + { ixDIDT_TCP_CTRL2,
> DIDT_TCP_CTRL2__MAX_POWER_DELTA_MASK,
> DIDT_TCP_CTRL2__MAX_POWER_DELTA__SHIFT, 0x3dde },
> + { ixDIDT_TCP_CTRL2,
> DIDT_TCP_CTRL2__SHORT_TERM_INTERVAL_SIZE_MASK,
> DIDT_TCP_CTRL2__SHORT_TERM_INTERVAL_SIZE__SHIFT, 0x00c0 },
> + { ixDIDT_TCP_CTRL2,
> DIDT_TCP_CTRL2__LONG_TERM_INTERVAL_RATIO_MASK,
> DIDT_TCP_CTRL2__LONG_TERM_INTERVAL_RATIO__SHIFT, 0x0001 },
> +
> + /* DIDT_DB */
> + { ixDIDT_DB_CTRL2,
> DIDT_DB_CTRL2__MAX_POWER_DELTA_MASK,
> DIDT_DB_CTRL2__MAX_POWER_DELTA__SHIFT, 0x3dde },
> + { ixDIDT_DB_CTRL2,
> DIDT_DB_CTRL2__SHORT_TERM_INTERVAL_SIZE_MASK,
> DIDT_DB_CTRL2__SHORT_TERM_INTERVAL_SIZE__SHIFT, 0x00c0 },
> + { ixDIDT_DB_CTRL2,
> DIDT_DB_CTRL2__LONG_TERM_INTERVAL_RATIO_MASK,
> DIDT_DB_CTRL2__LONG_TERM_INTERVAL_RATIO__SHIFT, 0x0001 },
> +
> + { 0xFFFFFFFF } /* End of list */
> +};
> +
> +static const struct vega10_didt_config_reg SEDiDtCtrl1Config_Vega10[] =
> +{
> +/* -----------------------------------------------------------------------------------------
> ----------------------------------------------------------------------------------------
> + * Offset Mask Shift
> Value
> + * -----------------------------------------------------------------------------------------
> ----------------------------------------------------------------------------------------
> + */
> + /* DIDT_SQ */
> + { ixDIDT_SQ_CTRL1,
> DIDT_SQ_CTRL1__MIN_POWER_MASK,
> DIDT_SQ_CTRL1__MIN_POWER__SHIFT, 0x0000 },
> + { ixDIDT_SQ_CTRL1,
> DIDT_SQ_CTRL1__MAX_POWER_MASK,
> DIDT_SQ_CTRL1__MAX_POWER__SHIFT, 0xffff },
> + /* DIDT_TD */
> + { ixDIDT_TD_CTRL1,
> DIDT_TD_CTRL1__MIN_POWER_MASK,
> DIDT_TD_CTRL1__MIN_POWER__SHIFT, 0x0000 },
> + { ixDIDT_TD_CTRL1,
> DIDT_TD_CTRL1__MAX_POWER_MASK,
> DIDT_TD_CTRL1__MAX_POWER__SHIFT, 0xffff },
> + /* DIDT_TCP */
> + { ixDIDT_TCP_CTRL1,
> DIDT_TCP_CTRL1__MIN_POWER_MASK,
> DIDT_TCP_CTRL1__MIN_POWER__SHIFT, 0x0000 },
> + { ixDIDT_TCP_CTRL1,
> DIDT_TCP_CTRL1__MAX_POWER_MASK,
> DIDT_TCP_CTRL1__MAX_POWER__SHIFT, 0xffff },
> + /* DIDT_DB */
> + { ixDIDT_DB_CTRL1,
> DIDT_DB_CTRL1__MIN_POWER_MASK,
> DIDT_DB_CTRL1__MIN_POWER__SHIFT, 0x0000 },
> + { ixDIDT_DB_CTRL1,
> DIDT_DB_CTRL1__MAX_POWER_MASK,
> DIDT_DB_CTRL1__MAX_POWER__SHIFT, 0xffff },
> +
> + { 0xFFFFFFFF } /* End of list */
> +};
> +
> +
> +static const struct vega10_didt_config_reg SEDiDtWeightConfig_Vega10[] =
> +{
> +/* -----------------------------------------------------------------------------------------
> ----------------------------------------------------------------------------------------
> + * Offset Mask Shift
> Value
> + * -----------------------------------------------------------------------------------------
> ----------------------------------------------------------------------------------------
> + */
> + /* DIDT_SQ */
> + { ixDIDT_SQ_WEIGHT0_3, 0xFFFFFFFF, 0,
> 0x2B363B1A },
> + { ixDIDT_SQ_WEIGHT4_7, 0xFFFFFFFF, 0,
> 0x270B2432 },
> + { ixDIDT_SQ_WEIGHT8_11, 0xFFFFFFFF,
> 0, 0x00000018 },
> +
> + /* DIDT_TD */
> + { ixDIDT_TD_WEIGHT0_3, 0xFFFFFFFF, 0,
> 0x2B1D220F },
> + { ixDIDT_TD_WEIGHT4_7, 0xFFFFFFFF, 0,
> 0x00007558 },
> + { ixDIDT_TD_WEIGHT8_11, 0xFFFFFFFF,
> 0, 0x00000000 },
> +
> + /* DIDT_TCP */
> + { ixDIDT_TCP_WEIGHT0_3, 0xFFFFFFFF,
> 0, 0x5ACE160D },
> + { ixDIDT_TCP_WEIGHT4_7, 0xFFFFFFFF,
> 0, 0x00000000 },
> + { ixDIDT_TCP_WEIGHT8_11, 0xFFFFFFFF,
> 0, 0x00000000 },
> +
> + /* DIDT_DB */
> + { ixDIDT_DB_WEIGHT0_3, 0xFFFFFFFF, 0,
> 0x0E152A0F },
> + { ixDIDT_DB_WEIGHT4_7, 0xFFFFFFFF, 0,
> 0x09061813 },
> + { ixDIDT_DB_WEIGHT8_11, 0xFFFFFFFF,
> 0, 0x00000013 },
> +
> + { 0xFFFFFFFF } /* End of list */
> +};
> +
> +static const struct vega10_didt_config_reg SEDiDtCtrl0Config_Vega10[] =
> +{
> +/* -----------------------------------------------------------------------------------------
> ----------------------------------------------------------------------------------------
> + * Offset Mask Shift
> Value
> + * -----------------------------------------------------------------------------------------
> ----------------------------------------------------------------------------------------
> + */
> + /* DIDT_SQ */
> + { ixDIDT_SQ_CTRL0,
> DIDT_SQ_CTRL0__DIDT_CTRL_EN_MASK,
> DIDT_SQ_CTRL0__DIDT_CTRL_EN__SHIFT, 0x0000 },
> + { ixDIDT_SQ_CTRL0,
> DIDT_SQ_CTRL0__PHASE_OFFSET_MASK,
> DIDT_SQ_CTRL0__PHASE_OFFSET__SHIFT, 0x0000 },
> + { ixDIDT_SQ_CTRL0,
> DIDT_SQ_CTRL0__DIDT_CTRL_RST_MASK,
> DIDT_SQ_CTRL0__DIDT_CTRL_RST__SHIFT, 0x0000 },
> + { ixDIDT_SQ_CTRL0,
> DIDT_SQ_CTRL0__DIDT_CLK_EN_OVERRIDE_MASK,
> DIDT_SQ_CTRL0__DIDT_CLK_EN_OVERRIDE__SHIFT, 0x0000 },
> + { ixDIDT_SQ_CTRL0,
> DIDT_SQ_CTRL0__DIDT_STALL_CTRL_EN_MASK,
> DIDT_SQ_CTRL0__DIDT_STALL_CTRL_EN__SHIFT, 0x0001 },
> + { ixDIDT_SQ_CTRL0,
> DIDT_SQ_CTRL0__DIDT_TUNING_CTRL_EN_MASK,
> DIDT_SQ_CTRL0__DIDT_TUNING_CTRL_EN__SHIFT, 0x0001 },
> + { ixDIDT_SQ_CTRL0,
> DIDT_SQ_CTRL0__DIDT_STALL_AUTO_RELEASE_EN_MASK,
> DIDT_SQ_CTRL0__DIDT_STALL_AUTO_RELEASE_EN__SHIFT, 0x0001 },
> + { ixDIDT_SQ_CTRL0,
> DIDT_SQ_CTRL0__DIDT_HI_POWER_THRESHOLD_MASK,
> DIDT_SQ_CTRL0__DIDT_HI_POWER_THRESHOLD__SHIFT, 0xffff },
> + { ixDIDT_SQ_CTRL0,
> DIDT_SQ_CTRL0__DIDT_AUTO_MPD_EN_MASK,
> DIDT_SQ_CTRL0__DIDT_AUTO_MPD_EN__SHIFT, 0x0000 },
> + { ixDIDT_SQ_CTRL0,
> DIDT_SQ_CTRL0__DIDT_STALL_EVENT_EN_MASK,
> DIDT_SQ_CTRL0__DIDT_STALL_EVENT_EN__SHIFT, 0x0000 },
> + { ixDIDT_SQ_CTRL0,
> DIDT_SQ_CTRL0__DIDT_STALL_EVENT_COUNTER_CLEAR_MASK,
> DIDT_SQ_CTRL0__DIDT_STALL_EVENT_COUNTER_CLEAR__SHIFT, 0x0000 },
> + /* DIDT_TD */
> + { ixDIDT_TD_CTRL0,
> DIDT_TD_CTRL0__DIDT_CTRL_EN_MASK,
> DIDT_TD_CTRL0__DIDT_CTRL_EN__SHIFT, 0x0000 },
> + { ixDIDT_TD_CTRL0,
> DIDT_TD_CTRL0__PHASE_OFFSET_MASK,
> DIDT_TD_CTRL0__PHASE_OFFSET__SHIFT, 0x0000 },
> + { ixDIDT_TD_CTRL0,
> DIDT_TD_CTRL0__DIDT_CTRL_RST_MASK,
> DIDT_TD_CTRL0__DIDT_CTRL_RST__SHIFT, 0x0000 },
> + { ixDIDT_TD_CTRL0,
> DIDT_TD_CTRL0__DIDT_CLK_EN_OVERRIDE_MASK,
> DIDT_TD_CTRL0__DIDT_CLK_EN_OVERRIDE__SHIFT, 0x0000 },
> + { ixDIDT_TD_CTRL0,
> DIDT_TD_CTRL0__DIDT_STALL_CTRL_EN_MASK,
> DIDT_TD_CTRL0__DIDT_STALL_CTRL_EN__SHIFT, 0x0001 },
> + { ixDIDT_TD_CTRL0,
> DIDT_TD_CTRL0__DIDT_TUNING_CTRL_EN_MASK,
> DIDT_TD_CTRL0__DIDT_TUNING_CTRL_EN__SHIFT, 0x0001 },
> + { ixDIDT_TD_CTRL0,
> DIDT_TD_CTRL0__DIDT_STALL_AUTO_RELEASE_EN_MASK,
> DIDT_TD_CTRL0__DIDT_STALL_AUTO_RELEASE_EN__SHIFT, 0x0001 },
> + { ixDIDT_TD_CTRL0,
> DIDT_TD_CTRL0__DIDT_HI_POWER_THRESHOLD_MASK,
> DIDT_TD_CTRL0__DIDT_HI_POWER_THRESHOLD__SHIFT, 0xffff },
> + { ixDIDT_TD_CTRL0,
> DIDT_TD_CTRL0__DIDT_AUTO_MPD_EN_MASK,
> DIDT_TD_CTRL0__DIDT_AUTO_MPD_EN__SHIFT, 0x0000 },
> + { ixDIDT_TD_CTRL0,
> DIDT_TD_CTRL0__DIDT_STALL_EVENT_EN_MASK,
> DIDT_TD_CTRL0__DIDT_STALL_EVENT_EN__SHIFT, 0x0000 },
> + { ixDIDT_TD_CTRL0,
> DIDT_TD_CTRL0__DIDT_STALL_EVENT_COUNTER_CLEAR_MASK,
> DIDT_TD_CTRL0__DIDT_STALL_EVENT_COUNTER_CLEAR__SHIFT, 0x0000 },
> + /* DIDT_TCP */
> + { ixDIDT_TCP_CTRL0,
> DIDT_TCP_CTRL0__DIDT_CTRL_EN_MASK,
> DIDT_TCP_CTRL0__DIDT_CTRL_EN__SHIFT, 0x0000 },
> + { ixDIDT_TCP_CTRL0,
> DIDT_TCP_CTRL0__PHASE_OFFSET_MASK,
> DIDT_TCP_CTRL0__PHASE_OFFSET__SHIFT, 0x0000 },
> + { ixDIDT_TCP_CTRL0,
> DIDT_TCP_CTRL0__DIDT_CTRL_RST_MASK,
> DIDT_TCP_CTRL0__DIDT_CTRL_RST__SHIFT, 0x0000 },
> + { ixDIDT_TCP_CTRL0,
> DIDT_TCP_CTRL0__DIDT_CLK_EN_OVERRIDE_MASK,
> DIDT_TCP_CTRL0__DIDT_CLK_EN_OVERRIDE__SHIFT, 0x0000 },
> + { ixDIDT_TCP_CTRL0,
> DIDT_TCP_CTRL0__DIDT_STALL_CTRL_EN_MASK,
> DIDT_TCP_CTRL0__DIDT_STALL_CTRL_EN__SHIFT, 0x0001 },
> + { ixDIDT_TCP_CTRL0,
> DIDT_TCP_CTRL0__DIDT_TUNING_CTRL_EN_MASK,
> DIDT_TCP_CTRL0__DIDT_TUNING_CTRL_EN__SHIFT, 0x0001 },
> + { ixDIDT_TCP_CTRL0,
> DIDT_TCP_CTRL0__DIDT_STALL_AUTO_RELEASE_EN_MASK,
> DIDT_TCP_CTRL0__DIDT_STALL_AUTO_RELEASE_EN__SHIFT, 0x0001 },
> + { ixDIDT_TCP_CTRL0,
> DIDT_TCP_CTRL0__DIDT_HI_POWER_THRESHOLD_MASK,
> DIDT_TCP_CTRL0__DIDT_HI_POWER_THRESHOLD__SHIFT, 0xffff },
> + { ixDIDT_TCP_CTRL0,
> DIDT_TCP_CTRL0__DIDT_AUTO_MPD_EN_MASK,
> DIDT_TCP_CTRL0__DIDT_AUTO_MPD_EN__SHIFT, 0x0000 },
> + { ixDIDT_TCP_CTRL0,
> DIDT_TCP_CTRL0__DIDT_STALL_EVENT_EN_MASK,
> DIDT_TCP_CTRL0__DIDT_STALL_EVENT_EN__SHIFT, 0x0000 },
> + { ixDIDT_TCP_CTRL0,
> DIDT_TCP_CTRL0__DIDT_STALL_EVENT_COUNTER_CLEAR_MASK,
> DIDT_TCP_CTRL0__DIDT_STALL_EVENT_COUNTER_CLEAR__SHIFT, 0x0000 },
> + /* DIDT_DB */
> + { ixDIDT_DB_CTRL0,
> DIDT_DB_CTRL0__DIDT_CTRL_EN_MASK,
> DIDT_DB_CTRL0__DIDT_CTRL_EN__SHIFT, 0x0000 },
> + { ixDIDT_DB_CTRL0,
> DIDT_DB_CTRL0__PHASE_OFFSET_MASK,
> DIDT_DB_CTRL0__PHASE_OFFSET__SHIFT, 0x0000 },
> + { ixDIDT_DB_CTRL0,
> DIDT_DB_CTRL0__DIDT_CTRL_RST_MASK,
> DIDT_DB_CTRL0__DIDT_CTRL_RST__SHIFT, 0x0000 },
> + { ixDIDT_DB_CTRL0,
> DIDT_DB_CTRL0__DIDT_CLK_EN_OVERRIDE_MASK,
> DIDT_DB_CTRL0__DIDT_CLK_EN_OVERRIDE__SHIFT, 0x0000 },
> + { ixDIDT_DB_CTRL0,
> DIDT_DB_CTRL0__DIDT_STALL_CTRL_EN_MASK,
> DIDT_DB_CTRL0__DIDT_STALL_CTRL_EN__SHIFT, 0x0001 },
> + { ixDIDT_DB_CTRL0,
> DIDT_DB_CTRL0__DIDT_TUNING_CTRL_EN_MASK,
> DIDT_DB_CTRL0__DIDT_TUNING_CTRL_EN__SHIFT, 0x0001 },
> + { ixDIDT_DB_CTRL0,
> DIDT_DB_CTRL0__DIDT_STALL_AUTO_RELEASE_EN_MASK,
> DIDT_DB_CTRL0__DIDT_STALL_AUTO_RELEASE_EN__SHIFT, 0x0001 },
> + { ixDIDT_DB_CTRL0,
> DIDT_DB_CTRL0__DIDT_HI_POWER_THRESHOLD_MASK,
> DIDT_DB_CTRL0__DIDT_HI_POWER_THRESHOLD__SHIFT, 0xffff },
> + { ixDIDT_DB_CTRL0,
> DIDT_DB_CTRL0__DIDT_AUTO_MPD_EN_MASK,
> DIDT_DB_CTRL0__DIDT_AUTO_MPD_EN__SHIFT, 0x0000 },
> + { ixDIDT_DB_CTRL0,
> DIDT_DB_CTRL0__DIDT_STALL_EVENT_EN_MASK,
> DIDT_DB_CTRL0__DIDT_STALL_EVENT_EN__SHIFT, 0x0000 },
> + { ixDIDT_DB_CTRL0,
> DIDT_DB_CTRL0__DIDT_STALL_EVENT_COUNTER_CLEAR_MASK,
> DIDT_DB_CTRL0__DIDT_STALL_EVENT_COUNTER_CLEAR__SHIFT, 0x0000 },
> +
> + { 0xFFFFFFFF } /* End of list */
> +};
> +
> +
> +static const struct vega10_didt_config_reg SEDiDtStallCtrlConfig_vega10[] =
> +{
> +/* -----------------------------------------------------------------------------------------
> ----------------------------------------------------------------------------------------
> + * Offset Mask Shift
> Value
> + * -----------------------------------------------------------------------------------------
> ----------------------------------------------------------------------------------------
> + */
> + /* DIDT_SQ */
> + { ixDIDT_SQ_STALL_CTRL,
> DIDT_SQ_STALL_CTRL__DIDT_STALL_DELAY_HI_MASK,
> DIDT_SQ_STALL_CTRL__DIDT_STALL_DELAY_HI__SHIFT, 0x0004 },
> + { ixDIDT_SQ_STALL_CTRL,
> DIDT_SQ_STALL_CTRL__DIDT_STALL_DELAY_LO_MASK,
> DIDT_SQ_STALL_CTRL__DIDT_STALL_DELAY_LO__SHIFT, 0x0004 },
> + { ixDIDT_SQ_STALL_CTRL,
> DIDT_SQ_STALL_CTRL__DIDT_MAX_STALLS_ALLOWED_HI_MASK,
> DIDT_SQ_STALL_CTRL__DIDT_MAX_STALLS_ALLOWED_HI__SHIFT, 0x000a
> },
> + { ixDIDT_SQ_STALL_CTRL,
> DIDT_SQ_STALL_CTRL__DIDT_MAX_STALLS_ALLOWED_LO_MASK,
> DIDT_SQ_STALL_CTRL__DIDT_MAX_STALLS_ALLOWED_LO__SHIFT, 0x000a
> },
> +
> + /* DIDT_TD */
> + { ixDIDT_TD_STALL_CTRL,
> DIDT_TD_STALL_CTRL__DIDT_STALL_DELAY_HI_MASK,
> DIDT_TD_STALL_CTRL__DIDT_STALL_DELAY_HI__SHIFT, 0x0001 },
> + { ixDIDT_TD_STALL_CTRL,
> DIDT_TD_STALL_CTRL__DIDT_STALL_DELAY_LO_MASK,
> DIDT_TD_STALL_CTRL__DIDT_STALL_DELAY_LO__SHIFT, 0x0001 },
> + { ixDIDT_TD_STALL_CTRL,
> DIDT_TD_STALL_CTRL__DIDT_MAX_STALLS_ALLOWED_HI_MASK,
> DIDT_TD_STALL_CTRL__DIDT_MAX_STALLS_ALLOWED_HI__SHIFT, 0x000a
> },
> + { ixDIDT_TD_STALL_CTRL,
> DIDT_TD_STALL_CTRL__DIDT_MAX_STALLS_ALLOWED_LO_MASK,
> DIDT_TD_STALL_CTRL__DIDT_MAX_STALLS_ALLOWED_LO__SHIFT, 0x000a
> },
> +
> + /* DIDT_TCP */
> + { ixDIDT_TCP_STALL_CTRL,
> DIDT_TCP_STALL_CTRL__DIDT_STALL_DELAY_HI_MASK,
> DIDT_TCP_STALL_CTRL__DIDT_STALL_DELAY_HI__SHIFT, 0x0001 },
> + { ixDIDT_TCP_STALL_CTRL,
> DIDT_TCP_STALL_CTRL__DIDT_STALL_DELAY_LO_MASK,
> DIDT_TCP_STALL_CTRL__DIDT_STALL_DELAY_LO__SHIFT, 0x0001 },
> + { ixDIDT_TCP_STALL_CTRL,
> DIDT_TCP_STALL_CTRL__DIDT_MAX_STALLS_ALLOWED_HI_MASK,
> DIDT_TCP_STALL_CTRL__DIDT_MAX_STALLS_ALLOWED_HI__SHIFT, 0x000a
> },
> + { ixDIDT_TCP_STALL_CTRL,
> DIDT_TCP_STALL_CTRL__DIDT_MAX_STALLS_ALLOWED_LO_MASK,
> DIDT_TCP_STALL_CTRL__DIDT_MAX_STALLS_ALLOWED_LO__SHIFT,
> 0x000a },
> +
> + /* DIDT_DB */
> + { ixDIDT_DB_STALL_CTRL,
> DIDT_DB_STALL_CTRL__DIDT_STALL_DELAY_HI_MASK,
> DIDT_DB_STALL_CTRL__DIDT_STALL_DELAY_HI__SHIFT, 0x0004 },
> + { ixDIDT_DB_STALL_CTRL,
> DIDT_DB_STALL_CTRL__DIDT_STALL_DELAY_LO_MASK,
> DIDT_DB_STALL_CTRL__DIDT_STALL_DELAY_LO__SHIFT, 0x0004 },
> + { ixDIDT_DB_STALL_CTRL,
> DIDT_DB_STALL_CTRL__DIDT_MAX_STALLS_ALLOWED_HI_MASK,
> DIDT_DB_STALL_CTRL__DIDT_MAX_STALLS_ALLOWED_HI__SHIFT, 0x000a
> },
> + { ixDIDT_DB_STALL_CTRL,
> DIDT_DB_STALL_CTRL__DIDT_MAX_STALLS_ALLOWED_LO_MASK,
> DIDT_DB_STALL_CTRL__DIDT_MAX_STALLS_ALLOWED_LO__SHIFT, 0x000a
> },
> +
> + { 0xFFFFFFFF } /* End of list */
> +};
> +
> +static const struct vega10_didt_config_reg
> SEDiDtStallPatternConfig_vega10[] =
> +{
> +/* -----------------------------------------------------------------------------------------
> ----------------------------------------------------------------------------------------
> + * Offset Mask Shift
> Value
> + * -----------------------------------------------------------------------------------------
> ----------------------------------------------------------------------------------------
> + */
> + /* DIDT_SQ_STALL_PATTERN_1_2 */
> + { ixDIDT_SQ_STALL_PATTERN_1_2,
> DIDT_SQ_STALL_PATTERN_1_2__DIDT_STALL_PATTERN_1_MASK,
> DIDT_SQ_STALL_PATTERN_1_2__DIDT_STALL_PATTERN_1__SHIFT, 0x0001
> },
> + { ixDIDT_SQ_STALL_PATTERN_1_2,
> DIDT_SQ_STALL_PATTERN_1_2__DIDT_STALL_PATTERN_2_MASK,
> DIDT_SQ_STALL_PATTERN_1_2__DIDT_STALL_PATTERN_2__SHIFT, 0x0001
> },
> +
> + /* DIDT_SQ_STALL_PATTERN_3_4 */
> + { ixDIDT_SQ_STALL_PATTERN_3_4,
> DIDT_SQ_STALL_PATTERN_3_4__DIDT_STALL_PATTERN_3_MASK,
> DIDT_SQ_STALL_PATTERN_3_4__DIDT_STALL_PATTERN_3__SHIFT, 0x0001
> },
> + { ixDIDT_SQ_STALL_PATTERN_3_4,
> DIDT_SQ_STALL_PATTERN_3_4__DIDT_STALL_PATTERN_4_MASK,
> DIDT_SQ_STALL_PATTERN_3_4__DIDT_STALL_PATTERN_4__SHIFT, 0x0001
> },
> +
> + /* DIDT_SQ_STALL_PATTERN_5_6 */
> + { ixDIDT_SQ_STALL_PATTERN_5_6,
> DIDT_SQ_STALL_PATTERN_5_6__DIDT_STALL_PATTERN_5_MASK,
> DIDT_SQ_STALL_PATTERN_5_6__DIDT_STALL_PATTERN_5__SHIFT, 0x0000
> },
> + { ixDIDT_SQ_STALL_PATTERN_5_6,
> DIDT_SQ_STALL_PATTERN_5_6__DIDT_STALL_PATTERN_6_MASK,
> DIDT_SQ_STALL_PATTERN_5_6__DIDT_STALL_PATTERN_6__SHIFT, 0x0000
> },
> +
> + /* DIDT_SQ_STALL_PATTERN_7 */
> + { ixDIDT_SQ_STALL_PATTERN_7,
> DIDT_SQ_STALL_PATTERN_7__DIDT_STALL_PATTERN_7_MASK,
> DIDT_SQ_STALL_PATTERN_7__DIDT_STALL_PATTERN_7__SHIFT, 0x0000 },
> +
> + /* DIDT_TCP_STALL_PATTERN_1_2 */
> + { ixDIDT_TCP_STALL_PATTERN_1_2,
> DIDT_TCP_STALL_PATTERN_1_2__DIDT_STALL_PATTERN_1_MASK,
> DIDT_TCP_STALL_PATTERN_1_2__DIDT_STALL_PATTERN_1__SHIFT, 0x0001
> },
> + { ixDIDT_TCP_STALL_PATTERN_1_2,
> DIDT_TCP_STALL_PATTERN_1_2__DIDT_STALL_PATTERN_2_MASK,
> DIDT_TCP_STALL_PATTERN_1_2__DIDT_STALL_PATTERN_2__SHIFT, 0x0001
> },
> +
> + /* DIDT_TCP_STALL_PATTERN_3_4 */
> + { ixDIDT_TCP_STALL_PATTERN_3_4,
> DIDT_TCP_STALL_PATTERN_3_4__DIDT_STALL_PATTERN_3_MASK,
> DIDT_TCP_STALL_PATTERN_3_4__DIDT_STALL_PATTERN_3__SHIFT, 0x0001
> },
> + { ixDIDT_TCP_STALL_PATTERN_3_4,
> DIDT_TCP_STALL_PATTERN_3_4__DIDT_STALL_PATTERN_4_MASK,
> DIDT_TCP_STALL_PATTERN_3_4__DIDT_STALL_PATTERN_4__SHIFT, 0x0001
> },
> +
> + /* DIDT_TCP_STALL_PATTERN_5_6 */
> + { ixDIDT_TCP_STALL_PATTERN_5_6,
> DIDT_TCP_STALL_PATTERN_5_6__DIDT_STALL_PATTERN_5_MASK,
> DIDT_TCP_STALL_PATTERN_5_6__DIDT_STALL_PATTERN_5__SHIFT, 0x0000
> },
> + { ixDIDT_TCP_STALL_PATTERN_5_6,
> DIDT_TCP_STALL_PATTERN_5_6__DIDT_STALL_PATTERN_6_MASK,
> DIDT_TCP_STALL_PATTERN_5_6__DIDT_STALL_PATTERN_6__SHIFT, 0x0000
> },
> +
> + /* DIDT_TCP_STALL_PATTERN_7 */
> + { ixDIDT_TCP_STALL_PATTERN_7,
> DIDT_TCP_STALL_PATTERN_7__DIDT_STALL_PATTERN_7_MASK,
> DIDT_TCP_STALL_PATTERN_7__DIDT_STALL_PATTERN_7__SHIFT, 0x0000 },
> +
> + /* DIDT_TD_STALL_PATTERN_1_2 */
> + { ixDIDT_TD_STALL_PATTERN_1_2,
> DIDT_TD_STALL_PATTERN_1_2__DIDT_STALL_PATTERN_1_MASK,
> DIDT_TD_STALL_PATTERN_1_2__DIDT_STALL_PATTERN_1__SHIFT, 0x0001
> },
> + { ixDIDT_TD_STALL_PATTERN_1_2,
> DIDT_TD_STALL_PATTERN_1_2__DIDT_STALL_PATTERN_2_MASK,
> DIDT_TD_STALL_PATTERN_1_2__DIDT_STALL_PATTERN_2__SHIFT, 0x0001
> },
> +
> + /* DIDT_TD_STALL_PATTERN_3_4 */
> + { ixDIDT_TD_STALL_PATTERN_3_4,
> DIDT_TD_STALL_PATTERN_3_4__DIDT_STALL_PATTERN_3_MASK,
> DIDT_TD_STALL_PATTERN_3_4__DIDT_STALL_PATTERN_3__SHIFT, 0x0001
> },
> + { ixDIDT_TD_STALL_PATTERN_3_4,
> DIDT_TD_STALL_PATTERN_3_4__DIDT_STALL_PATTERN_4_MASK,
> DIDT_TD_STALL_PATTERN_3_4__DIDT_STALL_PATTERN_4__SHIFT, 0x0001
> },
> +
> + /* DIDT_TD_STALL_PATTERN_5_6 */
> + { ixDIDT_TD_STALL_PATTERN_5_6,
> DIDT_TD_STALL_PATTERN_5_6__DIDT_STALL_PATTERN_5_MASK,
> DIDT_TD_STALL_PATTERN_5_6__DIDT_STALL_PATTERN_5__SHIFT, 0x0000
> },
> + { ixDIDT_TD_STALL_PATTERN_5_6,
> DIDT_TD_STALL_PATTERN_5_6__DIDT_STALL_PATTERN_6_MASK,
> DIDT_TD_STALL_PATTERN_5_6__DIDT_STALL_PATTERN_6__SHIFT, 0x0000
> },
> +
> + /* DIDT_TD_STALL_PATTERN_7 */
> + { ixDIDT_TD_STALL_PATTERN_7,
> DIDT_TD_STALL_PATTERN_7__DIDT_STALL_PATTERN_7_MASK,
> DIDT_TD_STALL_PATTERN_7__DIDT_STALL_PATTERN_7__SHIFT, 0x0000 },
> +
> + /* DIDT_DB_STALL_PATTERN_1_2 */
> + { ixDIDT_DB_STALL_PATTERN_1_2,
> DIDT_DB_STALL_PATTERN_1_2__DIDT_STALL_PATTERN_1_MASK,
> DIDT_DB_STALL_PATTERN_1_2__DIDT_STALL_PATTERN_1__SHIFT, 0x0001
> },
> + { ixDIDT_DB_STALL_PATTERN_1_2,
> DIDT_DB_STALL_PATTERN_1_2__DIDT_STALL_PATTERN_2_MASK,
> DIDT_DB_STALL_PATTERN_1_2__DIDT_STALL_PATTERN_2__SHIFT, 0x0001
> },
> +
> + /* DIDT_DB_STALL_PATTERN_3_4 */
> + { ixDIDT_DB_STALL_PATTERN_3_4,
> DIDT_DB_STALL_PATTERN_3_4__DIDT_STALL_PATTERN_3_MASK,
> DIDT_DB_STALL_PATTERN_3_4__DIDT_STALL_PATTERN_3__SHIFT, 0x0001
> },
> + { ixDIDT_DB_STALL_PATTERN_3_4,
> DIDT_DB_STALL_PATTERN_3_4__DIDT_STALL_PATTERN_4_MASK,
> DIDT_DB_STALL_PATTERN_3_4__DIDT_STALL_PATTERN_4__SHIFT, 0x0001
> },
> +
> + /* DIDT_DB_STALL_PATTERN_5_6 */
> + { ixDIDT_DB_STALL_PATTERN_5_6,
> DIDT_DB_STALL_PATTERN_5_6__DIDT_STALL_PATTERN_5_MASK,
> DIDT_DB_STALL_PATTERN_5_6__DIDT_STALL_PATTERN_5__SHIFT, 0x0000
> },
> + { ixDIDT_DB_STALL_PATTERN_5_6,
> DIDT_DB_STALL_PATTERN_5_6__DIDT_STALL_PATTERN_6_MASK,
> DIDT_DB_STALL_PATTERN_5_6__DIDT_STALL_PATTERN_6__SHIFT, 0x0000
> },
> +
> + /* DIDT_DB_STALL_PATTERN_7 */
> + { ixDIDT_DB_STALL_PATTERN_7,
> DIDT_DB_STALL_PATTERN_7__DIDT_STALL_PATTERN_7_MASK,
> DIDT_DB_STALL_PATTERN_7__DIDT_STALL_PATTERN_7__SHIFT, 0x0000 },
> +
> + { 0xFFFFFFFF } /* End of list */
> +};
> +
> +static const struct vega10_didt_config_reg SELCacConfig_Vega10[] =
> +{
> +/* -----------------------------------------------------------------------------------------
> ----------------------------------------------------------------------------------------
> + * Offset Mask Shift
> Value
> + * -----------------------------------------------------------------------------------------
> ----------------------------------------------------------------------------------------
> + */
> + /* SQ */
> + { ixSE_CAC_CNTL, 0xFFFFFFFF, 0,
> 0x00060021 },
> + { ixSE_CAC_CNTL, 0xFFFFFFFF, 0,
> 0x00860021 },
> + { ixSE_CAC_CNTL, 0xFFFFFFFF, 0,
> 0x01060021 },
> + { ixSE_CAC_CNTL, 0xFFFFFFFF, 0,
> 0x01860021 },
> + { ixSE_CAC_CNTL, 0xFFFFFFFF, 0,
> 0x02060021 },
> + { ixSE_CAC_CNTL, 0xFFFFFFFF, 0,
> 0x02860021 },
> + { ixSE_CAC_CNTL, 0xFFFFFFFF, 0,
> 0x03060021 },
> + { ixSE_CAC_CNTL, 0xFFFFFFFF, 0,
> 0x03860021 },
> + { ixSE_CAC_CNTL, 0xFFFFFFFF, 0,
> 0x04060021 },
> + /* TD */
> + { ixSE_CAC_CNTL, 0xFFFFFFFF, 0,
> 0x000E0020 },
> + { ixSE_CAC_CNTL, 0xFFFFFFFF, 0,
> 0x008E0020 },
> + { ixSE_CAC_CNTL, 0xFFFFFFFF, 0,
> 0x010E0020 },
> + { ixSE_CAC_CNTL, 0xFFFFFFFF, 0,
> 0x018E0020 },
> + { ixSE_CAC_CNTL, 0xFFFFFFFF, 0,
> 0x020E0020 },
> + { ixSE_CAC_CNTL, 0xFFFFFFFF, 0,
> 0x028E0020 },
> + /* TCP */
> + { ixSE_CAC_CNTL, 0xFFFFFFFF, 0,
> 0x001c0020 },
> + { ixSE_CAC_CNTL, 0xFFFFFFFF, 0,
> 0x009c0020 },
> + { ixSE_CAC_CNTL, 0xFFFFFFFF, 0,
> 0x011c0020 },
> + { ixSE_CAC_CNTL, 0xFFFFFFFF, 0,
> 0x019c0020 },
> + { ixSE_CAC_CNTL, 0xFFFFFFFF, 0,
> 0x021c0020 },
> + /* DB */
> + { ixSE_CAC_CNTL, 0xFFFFFFFF, 0,
> 0x00200008 },
> + { ixSE_CAC_CNTL, 0xFFFFFFFF, 0,
> 0x00820008 },
> + { ixSE_CAC_CNTL, 0xFFFFFFFF, 0,
> 0x01020008 },
> + { ixSE_CAC_CNTL, 0xFFFFFFFF, 0,
> 0x01820008 },
> +
> + { 0xFFFFFFFF } /* End of list */
> +};
> +
> +
> +static const struct vega10_didt_config_reg
> SEEDCStallPatternConfig_Vega10[] =
> +{
> +/* -----------------------------------------------------------------------------------------
> ----------------------------------------------------------------------------------------
> + * Offset Mask Shift
> Value
> + * -----------------------------------------------------------------------------------------
> ----------------------------------------------------------------------------------------
> + */
> + /* SQ */
> + { ixDIDT_SQ_EDC_STALL_PATTERN_1_2, 0xFFFFFFFF,
> 0, 0x00030001 },
> + { ixDIDT_SQ_EDC_STALL_PATTERN_3_4, 0xFFFFFFFF,
> 0, 0x000F0007 },
> + { ixDIDT_SQ_EDC_STALL_PATTERN_5_6, 0xFFFFFFFF,
> 0, 0x003F001F },
> + { ixDIDT_SQ_EDC_STALL_PATTERN_7, 0xFFFFFFFF,
> 0, 0x0000007F },
> + /* TD */
> + { ixDIDT_TD_EDC_STALL_PATTERN_1_2, 0xFFFFFFFF,
> 0, 0x00000000 },
> + { ixDIDT_TD_EDC_STALL_PATTERN_3_4, 0xFFFFFFFF,
> 0, 0x00000000 },
> + { ixDIDT_TD_EDC_STALL_PATTERN_5_6, 0xFFFFFFFF,
> 0, 0x00000000 },
> + { ixDIDT_TD_EDC_STALL_PATTERN_7, 0xFFFFFFFF,
> 0, 0x00000000 },
> + /* TCP */
> + { ixDIDT_TCP_EDC_STALL_PATTERN_1_2, 0xFFFFFFFF,
> 0, 0x00000000 },
> + { ixDIDT_TCP_EDC_STALL_PATTERN_3_4, 0xFFFFFFFF,
> 0, 0x00000000 },
> + { ixDIDT_TCP_EDC_STALL_PATTERN_5_6, 0xFFFFFFFF,
> 0, 0x00000000 },
> + { ixDIDT_TCP_EDC_STALL_PATTERN_7, 0xFFFFFFFF,
> 0, 0x00000000 },
> + /* DB */
> + { ixDIDT_DB_EDC_STALL_PATTERN_1_2, 0xFFFFFFFF,
> 0, 0x00000000 },
> + { ixDIDT_DB_EDC_STALL_PATTERN_3_4, 0xFFFFFFFF,
> 0, 0x00000000 },
> + { ixDIDT_DB_EDC_STALL_PATTERN_5_6, 0xFFFFFFFF,
> 0, 0x00000000 },
> + { ixDIDT_DB_EDC_STALL_PATTERN_7, 0xFFFFFFFF,
> 0, 0x00000000 },
> +
> + { 0xFFFFFFFF } /* End of list */
> +};
> +
> +static const struct vega10_didt_config_reg
> SEEDCForceStallPatternConfig_Vega10[] =
> +{
> +/* -----------------------------------------------------------------------------------------
> ----------------------------------------------------------------------------------------
> + * Offset Mask Shift
> Value
> + * -----------------------------------------------------------------------------------------
> ----------------------------------------------------------------------------------------
> + */
> + /* SQ */
> + { ixDIDT_SQ_EDC_STALL_PATTERN_1_2, 0xFFFFFFFF,
> 0, 0x00000015 },
> + { ixDIDT_SQ_EDC_STALL_PATTERN_3_4, 0xFFFFFFFF,
> 0, 0x00000000 },
> + { ixDIDT_SQ_EDC_STALL_PATTERN_5_6, 0xFFFFFFFF,
> 0, 0x00000000 },
> + { ixDIDT_SQ_EDC_STALL_PATTERN_7, 0xFFFFFFFF,
> 0, 0x00000000 },
> + /* TD */
> + { ixDIDT_TD_EDC_STALL_PATTERN_1_2, 0xFFFFFFFF,
> 0, 0x00000015 },
> + { ixDIDT_TD_EDC_STALL_PATTERN_3_4, 0xFFFFFFFF,
> 0, 0x00000000 },
> + { ixDIDT_TD_EDC_STALL_PATTERN_5_6, 0xFFFFFFFF,
> 0, 0x00000000 },
> + { ixDIDT_TD_EDC_STALL_PATTERN_7, 0xFFFFFFFF,
> 0, 0x00000000 },
> +
> + { 0xFFFFFFFF } /* End of list */
> +};
> +
> +static const struct vega10_didt_config_reg SEEDCStallDelayConfig_Vega10[]
> =
> +{
> +/* -----------------------------------------------------------------------------------------
> ----------------------------------------------------------------------------------------
> + * Offset Mask Shift
> Value
> + * -----------------------------------------------------------------------------------------
> ----------------------------------------------------------------------------------------
> + */
> + /* SQ */
> + { ixDIDT_SQ_EDC_STALL_DELAY_1, 0xFFFFFFFF,
> 0, 0x00000000 },
> + { ixDIDT_SQ_EDC_STALL_DELAY_2, 0xFFFFFFFF,
> 0, 0x00000000 },
> + { ixDIDT_SQ_EDC_STALL_DELAY_3, 0xFFFFFFFF,
> 0, 0x00000000 },
> + { ixDIDT_SQ_EDC_STALL_DELAY_4, 0xFFFFFFFF,
> 0, 0x00000000 },
> + /* TD */
> + { ixDIDT_TD_EDC_STALL_DELAY_1, 0xFFFFFFFF,
> 0, 0x00000000 },
> + { ixDIDT_TD_EDC_STALL_DELAY_2, 0xFFFFFFFF,
> 0, 0x00000000 },
> + { ixDIDT_TD_EDC_STALL_DELAY_3, 0xFFFFFFFF,
> 0, 0x00000000 },
> + { ixDIDT_TD_EDC_STALL_DELAY_4, 0xFFFFFFFF,
> 0, 0x00000000 },
> + /* TCP */
> + { ixDIDT_TCP_EDC_STALL_DELAY_1, 0xFFFFFFFF,
> 0, 0x00000000 },
> + { ixDIDT_TCP_EDC_STALL_DELAY_2, 0xFFFFFFFF,
> 0, 0x00000000 },
> + { ixDIDT_TCP_EDC_STALL_DELAY_3, 0xFFFFFFFF,
> 0, 0x00000000 },
> + { ixDIDT_TCP_EDC_STALL_DELAY_4, 0xFFFFFFFF,
> 0, 0x00000000 },
> + /* DB */
> + { ixDIDT_DB_EDC_STALL_DELAY_1, 0xFFFFFFFF,
> 0, 0x00000000 },
> +
> + { 0xFFFFFFFF } /* End of list */
> +};
> +
> +static const struct vega10_didt_config_reg SEEDCThresholdConfig_Vega10[]
> =
> +{
> +/* -----------------------------------------------------------------------------------------
> ----------------------------------------------------------------------------------------
> + * Offset Mask Shift
> Value
> + * -----------------------------------------------------------------------------------------
> ----------------------------------------------------------------------------------------
> + */
> + { ixDIDT_SQ_EDC_THRESHOLD, 0xFFFFFFFF,
> 0, 0x0000010E },
> + { ixDIDT_TD_EDC_THRESHOLD, 0xFFFFFFFF,
> 0, 0xFFFFFFFF },
> + { ixDIDT_TCP_EDC_THRESHOLD, 0xFFFFFFFF,
> 0, 0xFFFFFFFF },
> + { ixDIDT_DB_EDC_THRESHOLD, 0xFFFFFFFF,
> 0, 0xFFFFFFFF },
> +
> + { 0xFFFFFFFF } /* End of list */
> +};
> +
> +static const struct vega10_didt_config_reg SEEDCCtrlResetConfig_Vega10[]
> =
> +{
> +/* -----------------------------------------------------------------------------------------
> ----------------------------------------------------------------------------------------
> + * Offset Mask Shift
> Value
> + * -----------------------------------------------------------------------------------------
> ----------------------------------------------------------------------------------------
> + */
> + /* SQ */
> + { ixDIDT_SQ_EDC_CTRL,
> DIDT_SQ_EDC_CTRL__EDC_EN_MASK,
> DIDT_SQ_EDC_CTRL__EDC_EN__SHIFT, 0x0000 },
> + { ixDIDT_SQ_EDC_CTRL,
> DIDT_SQ_EDC_CTRL__EDC_SW_RST_MASK,
> DIDT_SQ_EDC_CTRL__EDC_SW_RST__SHIFT, 0x0001 },
> + { ixDIDT_SQ_EDC_CTRL,
> DIDT_SQ_EDC_CTRL__EDC_CLK_EN_OVERRIDE_MASK,
> DIDT_SQ_EDC_CTRL__EDC_CLK_EN_OVERRIDE__SHIFT, 0x0000 },
> + { ixDIDT_SQ_EDC_CTRL,
> DIDT_SQ_EDC_CTRL__EDC_FORCE_STALL_MASK,
> DIDT_SQ_EDC_CTRL__EDC_FORCE_STALL__SHIFT, 0x0000 },
> + { ixDIDT_SQ_EDC_CTRL,
> DIDT_SQ_EDC_CTRL__EDC_TRIGGER_THROTTLE_LOWBIT_MASK,
> DIDT_SQ_EDC_CTRL__EDC_TRIGGER_THROTTLE_LOWBIT__SHIFT, 0x0000 },
> + { ixDIDT_SQ_EDC_CTRL,
> DIDT_SQ_EDC_CTRL__EDC_STALL_PATTERN_BIT_NUMS_MASK,
> DIDT_SQ_EDC_CTRL__EDC_STALL_PATTERN_BIT_NUMS__SHIFT, 0x0000 },
> + { ixDIDT_SQ_EDC_CTRL,
> DIDT_SQ_EDC_CTRL__EDC_ALLOW_WRITE_PWRDELTA_MASK,
> DIDT_SQ_EDC_CTRL__EDC_ALLOW_WRITE_PWRDELTA__SHIFT, 0x0000 },
> + { ixDIDT_SQ_EDC_CTRL,
> DIDT_SQ_EDC_CTRL__GC_EDC_EN_MASK,
> DIDT_SQ_EDC_CTRL__GC_EDC_EN__SHIFT, 0x0000 },
> + { ixDIDT_SQ_EDC_CTRL,
> DIDT_SQ_EDC_CTRL__GC_EDC_STALL_POLICY_MASK,
> DIDT_SQ_EDC_CTRL__GC_EDC_STALL_POLICY__SHIFT, 0x0000 },
> + { ixDIDT_SQ_EDC_CTRL,
> DIDT_SQ_EDC_CTRL__GC_EDC_LEVEL_COMB_EN_MASK,
> DIDT_SQ_EDC_CTRL__GC_EDC_LEVEL_COMB_EN__SHIFT, 0x0000 },
> + { ixDIDT_SQ_EDC_CTRL,
> DIDT_SQ_EDC_CTRL__SE_EDC_LEVEL_COMB_EN_MASK,
> DIDT_SQ_EDC_CTRL__SE_EDC_LEVEL_COMB_EN__SHIFT, 0x0000 },
> +
> + { 0xFFFFFFFF } /* End of list */
> +};
> +
> +static const struct vega10_didt_config_reg SEEDCCtrlConfig_Vega10[] =
> +{
> +/* -----------------------------------------------------------------------------------------
> ----------------------------------------------------------------------------------------
> + * Offset Mask Shift
> Value
> + * -----------------------------------------------------------------------------------------
> ----------------------------------------------------------------------------------------
> + */
> + /* SQ */
> + { ixDIDT_SQ_EDC_CTRL,
> DIDT_SQ_EDC_CTRL__EDC_EN_MASK,
> DIDT_SQ_EDC_CTRL__EDC_EN__SHIFT, 0x0001 },
> + { ixDIDT_SQ_EDC_CTRL,
> DIDT_SQ_EDC_CTRL__EDC_SW_RST_MASK,
> DIDT_SQ_EDC_CTRL__EDC_SW_RST__SHIFT, 0x0000 },
> + { ixDIDT_SQ_EDC_CTRL,
> DIDT_SQ_EDC_CTRL__EDC_CLK_EN_OVERRIDE_MASK,
> DIDT_SQ_EDC_CTRL__EDC_CLK_EN_OVERRIDE__SHIFT, 0x0000 },
> + { ixDIDT_SQ_EDC_CTRL,
> DIDT_SQ_EDC_CTRL__EDC_FORCE_STALL_MASK,
> DIDT_SQ_EDC_CTRL__EDC_FORCE_STALL__SHIFT, 0x0000 },
> + { ixDIDT_SQ_EDC_CTRL,
> DIDT_SQ_EDC_CTRL__EDC_TRIGGER_THROTTLE_LOWBIT_MASK,
> DIDT_SQ_EDC_CTRL__EDC_TRIGGER_THROTTLE_LOWBIT__SHIFT, 0x0004 },
> + { ixDIDT_SQ_EDC_CTRL,
> DIDT_SQ_EDC_CTRL__EDC_STALL_PATTERN_BIT_NUMS_MASK,
> DIDT_SQ_EDC_CTRL__EDC_STALL_PATTERN_BIT_NUMS__SHIFT, 0x0006 },
> + { ixDIDT_SQ_EDC_CTRL,
> DIDT_SQ_EDC_CTRL__EDC_ALLOW_WRITE_PWRDELTA_MASK,
> DIDT_SQ_EDC_CTRL__EDC_ALLOW_WRITE_PWRDELTA__SHIFT, 0x0000 },
> + { ixDIDT_SQ_EDC_CTRL,
> DIDT_SQ_EDC_CTRL__GC_EDC_EN_MASK,
> DIDT_SQ_EDC_CTRL__GC_EDC_EN__SHIFT, 0x0000 },
> + { ixDIDT_SQ_EDC_CTRL,
> DIDT_SQ_EDC_CTRL__GC_EDC_STALL_POLICY_MASK,
> DIDT_SQ_EDC_CTRL__GC_EDC_STALL_POLICY__SHIFT, 0x0000 },
> + { ixDIDT_SQ_EDC_CTRL,
> DIDT_SQ_EDC_CTRL__GC_EDC_LEVEL_COMB_EN_MASK,
> DIDT_SQ_EDC_CTRL__GC_EDC_LEVEL_COMB_EN__SHIFT, 0x0001 },
> + { ixDIDT_SQ_EDC_CTRL,
> DIDT_SQ_EDC_CTRL__SE_EDC_LEVEL_COMB_EN_MASK,
> DIDT_SQ_EDC_CTRL__SE_EDC_LEVEL_COMB_EN__SHIFT, 0x0000 },
> +
> + { 0xFFFFFFFF } /* End of list */
> +};
> +
> +static const struct vega10_didt_config_reg
> SEEDCCtrlForceStallConfig_Vega10[] =
> +{
> +/* -----------------------------------------------------------------------------------------
> ----------------------------------------------------------------------------------------
> + * Offset Mask Shift
> Value
> + * -----------------------------------------------------------------------------------------
> ----------------------------------------------------------------------------------------
> + */
> + /* SQ */
> + { ixDIDT_SQ_EDC_CTRL,
> DIDT_SQ_EDC_CTRL__EDC_EN_MASK,
> DIDT_SQ_EDC_CTRL__EDC_EN__SHIFT, 0x0001 },
> + { ixDIDT_SQ_EDC_CTRL,
> DIDT_SQ_EDC_CTRL__EDC_SW_RST_MASK,
> DIDT_SQ_EDC_CTRL__EDC_SW_RST__SHIFT, 0x0000 },
> + { ixDIDT_SQ_EDC_CTRL,
> DIDT_SQ_EDC_CTRL__EDC_CLK_EN_OVERRIDE_MASK,
> DIDT_SQ_EDC_CTRL__EDC_CLK_EN_OVERRIDE__SHIFT, 0x0000 },
> + { ixDIDT_SQ_EDC_CTRL,
> DIDT_SQ_EDC_CTRL__EDC_FORCE_STALL_MASK,
> DIDT_SQ_EDC_CTRL__EDC_FORCE_STALL__SHIFT, 0x0001 },
> + { ixDIDT_SQ_EDC_CTRL,
> DIDT_SQ_EDC_CTRL__EDC_TRIGGER_THROTTLE_LOWBIT_MASK,
> DIDT_SQ_EDC_CTRL__EDC_TRIGGER_THROTTLE_LOWBIT__SHIFT, 0x0001 },
> + { ixDIDT_SQ_EDC_CTRL,
> DIDT_SQ_EDC_CTRL__EDC_STALL_PATTERN_BIT_NUMS_MASK,
> DIDT_SQ_EDC_CTRL__EDC_STALL_PATTERN_BIT_NUMS__SHIFT, 0x000C },
> + { ixDIDT_SQ_EDC_CTRL,
> DIDT_SQ_EDC_CTRL__EDC_ALLOW_WRITE_PWRDELTA_MASK,
> DIDT_SQ_EDC_CTRL__EDC_ALLOW_WRITE_PWRDELTA__SHIFT, 0x0000 },
> + { ixDIDT_SQ_EDC_CTRL,
> DIDT_SQ_EDC_CTRL__GC_EDC_EN_MASK,
> DIDT_SQ_EDC_CTRL__GC_EDC_EN__SHIFT, 0x0000 },
> + { ixDIDT_SQ_EDC_CTRL,
> DIDT_SQ_EDC_CTRL__GC_EDC_STALL_POLICY_MASK,
> DIDT_SQ_EDC_CTRL__GC_EDC_STALL_POLICY__SHIFT, 0x0000 },
> + { ixDIDT_SQ_EDC_CTRL,
> DIDT_SQ_EDC_CTRL__GC_EDC_LEVEL_COMB_EN_MASK,
> DIDT_SQ_EDC_CTRL__GC_EDC_LEVEL_COMB_EN__SHIFT, 0x0000 },
> + { ixDIDT_SQ_EDC_CTRL,
> DIDT_SQ_EDC_CTRL__SE_EDC_LEVEL_COMB_EN_MASK,
> DIDT_SQ_EDC_CTRL__SE_EDC_LEVEL_COMB_EN__SHIFT, 0x0001 },
> +
> + /* TD */
> + { ixDIDT_TD_EDC_CTRL,
> DIDT_TD_EDC_CTRL__EDC_EN_MASK,
> DIDT_TD_EDC_CTRL__EDC_EN__SHIFT, 0x0001 },
> + { ixDIDT_TD_EDC_CTRL,
> DIDT_TD_EDC_CTRL__EDC_SW_RST_MASK,
> DIDT_TD_EDC_CTRL__EDC_SW_RST__SHIFT, 0x0000 },
> + { ixDIDT_TD_EDC_CTRL,
> DIDT_TD_EDC_CTRL__EDC_CLK_EN_OVERRIDE_MASK,
> DIDT_TD_EDC_CTRL__EDC_CLK_EN_OVERRIDE__SHIFT, 0x0000 },
> + { ixDIDT_TD_EDC_CTRL,
> DIDT_TD_EDC_CTRL__EDC_FORCE_STALL_MASK,
> DIDT_TD_EDC_CTRL__EDC_FORCE_STALL__SHIFT, 0x0001 },
> + { ixDIDT_TD_EDC_CTRL,
> DIDT_TD_EDC_CTRL__EDC_TRIGGER_THROTTLE_LOWBIT_MASK,
> DIDT_TD_EDC_CTRL__EDC_TRIGGER_THROTTLE_LOWBIT__SHIFT, 0x0001 },
> + { ixDIDT_TD_EDC_CTRL,
> DIDT_TD_EDC_CTRL__EDC_STALL_PATTERN_BIT_NUMS_MASK,
> DIDT_TD_EDC_CTRL__EDC_STALL_PATTERN_BIT_NUMS__SHIFT, 0x000E },
> + { ixDIDT_TD_EDC_CTRL,
> DIDT_TD_EDC_CTRL__EDC_ALLOW_WRITE_PWRDELTA_MASK,
> DIDT_TD_EDC_CTRL__EDC_ALLOW_WRITE_PWRDELTA__SHIFT, 0x0000 },
> + { ixDIDT_TD_EDC_CTRL,
> DIDT_TD_EDC_CTRL__GC_EDC_EN_MASK,
> DIDT_TD_EDC_CTRL__GC_EDC_EN__SHIFT, 0x0000 },
> + { ixDIDT_TD_EDC_CTRL,
> DIDT_TD_EDC_CTRL__GC_EDC_STALL_POLICY_MASK,
> DIDT_TD_EDC_CTRL__GC_EDC_STALL_POLICY__SHIFT, 0x0000 },
> + { ixDIDT_TD_EDC_CTRL,
> DIDT_TD_EDC_CTRL__GC_EDC_LEVEL_COMB_EN_MASK,
> DIDT_TD_EDC_CTRL__GC_EDC_LEVEL_COMB_EN__SHIFT, 0x0000 },
> + { ixDIDT_TD_EDC_CTRL,
> DIDT_TD_EDC_CTRL__SE_EDC_LEVEL_COMB_EN_MASK,
> DIDT_TD_EDC_CTRL__SE_EDC_LEVEL_COMB_EN__SHIFT, 0x0001 },
> +
> + { 0xFFFFFFFF } /* End of list */
> +};
> +
> +static const struct vega10_didt_config_reg
> GCDiDtDroopCtrlConfig_vega10[] =
> +{
> +/* -----------------------------------------------------------------------------------------
> ----------------------------------------------------------------------------------------
> + * Offset Mask Shift
> Value
> + * -----------------------------------------------------------------------------------------
> ----------------------------------------------------------------------------------------
> + */
> + { mmGC_DIDT_DROOP_CTRL,
> GC_DIDT_DROOP_CTRL__DIDT_DROOP_LEVEL_EN_MASK,
> GC_DIDT_DROOP_CTRL__DIDT_DROOP_LEVEL_EN__SHIFT, 0x0000 },
> + { mmGC_DIDT_DROOP_CTRL,
> GC_DIDT_DROOP_CTRL__DIDT_DROOP_THRESHOLD_MASK,
> GC_DIDT_DROOP_CTRL__DIDT_DROOP_THRESHOLD__SHIFT, 0x0000 },
> + { mmGC_DIDT_DROOP_CTRL,
> GC_DIDT_DROOP_CTRL__DIDT_DROOP_LEVEL_INDEX_MASK,
> GC_DIDT_DROOP_CTRL__DIDT_DROOP_LEVEL_INDEX__SHIFT, 0x0000 },
> + { mmGC_DIDT_DROOP_CTRL,
> GC_DIDT_DROOP_CTRL__DIDT_LEVEL_SEL_MASK,
> GC_DIDT_DROOP_CTRL__DIDT_LEVEL_SEL__SHIFT, 0x0000 },
> + { mmGC_DIDT_DROOP_CTRL,
> GC_DIDT_DROOP_CTRL__DIDT_DROOP_LEVEL_OVERFLOW_MASK,
> GC_DIDT_DROOP_CTRL__DIDT_DROOP_LEVEL_OVERFLOW__SHIFT, 0x0000
> },
> +
> + { 0xFFFFFFFF } /* End of list */
> +};
> +
> +static const struct vega10_didt_config_reg GCDiDtCtrl0Config_vega10[] =
> +{
> +/* -----------------------------------------------------------------------------------------
> ----------------------------------------------------------------------------------------
> + * Offset Mask Shift
> Value
> + * -----------------------------------------------------------------------------------------
> ----------------------------------------------------------------------------------------
> + */
> + { mmGC_DIDT_CTRL0,
> GC_DIDT_CTRL0__DIDT_CTRL_EN_MASK,
> GC_DIDT_CTRL0__DIDT_CTRL_EN__SHIFT, 0x0000 },
> + { mmGC_DIDT_CTRL0,
> GC_DIDT_CTRL0__PHASE_OFFSET_MASK,
> GC_DIDT_CTRL0__PHASE_OFFSET__SHIFT, 0x0000 },
> + { mmGC_DIDT_CTRL0,
> GC_DIDT_CTRL0__DIDT_SW_RST_MASK,
> GC_DIDT_CTRL0__DIDT_SW_RST__SHIFT, 0x0000 },
> + { mmGC_DIDT_CTRL0,
> GC_DIDT_CTRL0__DIDT_CLK_EN_OVERRIDE_MASK,
> GC_DIDT_CTRL0__DIDT_CLK_EN_OVERRIDE__SHIFT, 0x0000 },
> + { mmGC_DIDT_CTRL0,
> GC_DIDT_CTRL0__DIDT_TRIGGER_THROTTLE_LOWBIT_MASK,
> GC_DIDT_CTRL0__DIDT_TRIGGER_THROTTLE_LOWBIT__SHIFT, 0x0000 },
> + { 0xFFFFFFFF } /* End of list */
> +};
> +
> +
> +static const struct vega10_didt_config_reg
> PSMSEEDCStallPatternConfig_Vega10[] =
> +{
> +/* -----------------------------------------------------------------------------------------
> ----------------------------------------------------------------------------------------
> + * Offset Mask Shift
> Value
> + * -----------------------------------------------------------------------------------------
> ----------------------------------------------------------------------------------------
> + */
> + /* SQ EDC STALL PATTERNs */
> + { ixDIDT_SQ_EDC_STALL_PATTERN_1_2,
> DIDT_SQ_EDC_STALL_PATTERN_1_2__EDC_STALL_PATTERN_1_MASK,
> DIDT_SQ_EDC_STALL_PATTERN_1_2__EDC_STALL_PATTERN_1__SHIFT,
> 0x0101 },
> + { ixDIDT_SQ_EDC_STALL_PATTERN_1_2,
> DIDT_SQ_EDC_STALL_PATTERN_1_2__EDC_STALL_PATTERN_2_MASK,
> DIDT_SQ_EDC_STALL_PATTERN_1_2__EDC_STALL_PATTERN_2__SHIFT,
> 0x0101 },
> + { ixDIDT_SQ_EDC_STALL_PATTERN_3_4,
> DIDT_SQ_EDC_STALL_PATTERN_3_4__EDC_STALL_PATTERN_3_MASK,
> DIDT_SQ_EDC_STALL_PATTERN_3_4__EDC_STALL_PATTERN_3__SHIFT,
> 0x1111 },
> + { ixDIDT_SQ_EDC_STALL_PATTERN_3_4,
> DIDT_SQ_EDC_STALL_PATTERN_3_4__EDC_STALL_PATTERN_4_MASK,
> DIDT_SQ_EDC_STALL_PATTERN_3_4__EDC_STALL_PATTERN_4__SHIFT,
> 0x1111 },
> +
> + { ixDIDT_SQ_EDC_STALL_PATTERN_5_6,
> DIDT_SQ_EDC_STALL_PATTERN_5_6__EDC_STALL_PATTERN_5_MASK,
> DIDT_SQ_EDC_STALL_PATTERN_5_6__EDC_STALL_PATTERN_5__SHIFT,
> 0x1515 },
> + { ixDIDT_SQ_EDC_STALL_PATTERN_5_6,
> DIDT_SQ_EDC_STALL_PATTERN_5_6__EDC_STALL_PATTERN_6_MASK,
> DIDT_SQ_EDC_STALL_PATTERN_5_6__EDC_STALL_PATTERN_6__SHIFT,
> 0x1515 },
> +
> + { ixDIDT_SQ_EDC_STALL_PATTERN_7,
> DIDT_SQ_EDC_STALL_PATTERN_7__EDC_STALL_PATTERN_7_MASK,
> DIDT_SQ_EDC_STALL_PATTERN_7__EDC_STALL_PATTERN_7__SHIFT,
> 0x5555 },
> +
> + { 0xFFFFFFFF } /* End of list */
> +};
> +
> +static const struct vega10_didt_config_reg
> PSMSEEDCStallDelayConfig_Vega10[] =
> +{
> +/* -----------------------------------------------------------------------------------------
> ----------------------------------------------------------------------------------------
> + * Offset Mask Shift
> Value
> + * -----------------------------------------------------------------------------------------
> ----------------------------------------------------------------------------------------
> + */
> + /* SQ EDC STALL DELAYs */
> + { ixDIDT_SQ_EDC_STALL_DELAY_1,
> DIDT_SQ_EDC_STALL_DELAY_1__EDC_STALL_DELAY_SQ0_MASK,
> DIDT_SQ_EDC_STALL_DELAY_1__EDC_STALL_DELAY_SQ0__SHIFT, 0x0000 },
> + { ixDIDT_SQ_EDC_STALL_DELAY_1,
> DIDT_SQ_EDC_STALL_DELAY_1__EDC_STALL_DELAY_SQ1_MASK,
> DIDT_SQ_EDC_STALL_DELAY_1__EDC_STALL_DELAY_SQ1__SHIFT, 0x0000 },
> + { ixDIDT_SQ_EDC_STALL_DELAY_1,
> DIDT_SQ_EDC_STALL_DELAY_1__EDC_STALL_DELAY_SQ2_MASK,
> DIDT_SQ_EDC_STALL_DELAY_1__EDC_STALL_DELAY_SQ2__SHIFT, 0x0000 },
> + { ixDIDT_SQ_EDC_STALL_DELAY_1,
> DIDT_SQ_EDC_STALL_DELAY_1__EDC_STALL_DELAY_SQ3_MASK,
> DIDT_SQ_EDC_STALL_DELAY_1__EDC_STALL_DELAY_SQ3__SHIFT, 0x0000 },
> +
> + { ixDIDT_SQ_EDC_STALL_DELAY_2,
> DIDT_SQ_EDC_STALL_DELAY_2__EDC_STALL_DELAY_SQ4_MASK,
> DIDT_SQ_EDC_STALL_DELAY_2__EDC_STALL_DELAY_SQ4__SHIFT, 0x0000 },
> + { ixDIDT_SQ_EDC_STALL_DELAY_2,
> DIDT_SQ_EDC_STALL_DELAY_2__EDC_STALL_DELAY_SQ5_MASK,
> DIDT_SQ_EDC_STALL_DELAY_2__EDC_STALL_DELAY_SQ5__SHIFT, 0x0000 },
> + { ixDIDT_SQ_EDC_STALL_DELAY_2,
> DIDT_SQ_EDC_STALL_DELAY_2__EDC_STALL_DELAY_SQ6_MASK,
> DIDT_SQ_EDC_STALL_DELAY_2__EDC_STALL_DELAY_SQ6__SHIFT, 0x0000 },
> + { ixDIDT_SQ_EDC_STALL_DELAY_2,
> DIDT_SQ_EDC_STALL_DELAY_2__EDC_STALL_DELAY_SQ7_MASK,
> DIDT_SQ_EDC_STALL_DELAY_2__EDC_STALL_DELAY_SQ7__SHIFT, 0x0000 },
> +
> + { ixDIDT_SQ_EDC_STALL_DELAY_3,
> DIDT_SQ_EDC_STALL_DELAY_3__EDC_STALL_DELAY_SQ8_MASK,
> DIDT_SQ_EDC_STALL_DELAY_3__EDC_STALL_DELAY_SQ8__SHIFT, 0x0000 },
> + { ixDIDT_SQ_EDC_STALL_DELAY_3,
> DIDT_SQ_EDC_STALL_DELAY_3__EDC_STALL_DELAY_SQ9_MASK,
> DIDT_SQ_EDC_STALL_DELAY_3__EDC_STALL_DELAY_SQ9__SHIFT, 0x0000 },
> + { ixDIDT_SQ_EDC_STALL_DELAY_3,
> DIDT_SQ_EDC_STALL_DELAY_3__EDC_STALL_DELAY_SQ10_MASK,
> DIDT_SQ_EDC_STALL_DELAY_3__EDC_STALL_DELAY_SQ10__SHIFT, 0x0000 },
> + { ixDIDT_SQ_EDC_STALL_DELAY_3,
> DIDT_SQ_EDC_STALL_DELAY_3__EDC_STALL_DELAY_SQ11_MASK,
> DIDT_SQ_EDC_STALL_DELAY_3__EDC_STALL_DELAY_SQ11__SHIFT, 0x0000 },
> +
> + { ixDIDT_SQ_EDC_STALL_DELAY_4,
> DIDT_SQ_EDC_STALL_DELAY_4__EDC_STALL_DELAY_SQ12_MASK,
> DIDT_SQ_EDC_STALL_DELAY_4__EDC_STALL_DELAY_SQ12__SHIFT, 0x0000 },
> + { ixDIDT_SQ_EDC_STALL_DELAY_4,
> DIDT_SQ_EDC_STALL_DELAY_4__EDC_STALL_DELAY_SQ12_MASK,
> DIDT_SQ_EDC_STALL_DELAY_4__EDC_STALL_DELAY_SQ13__SHIFT, 0x0000 },
> + { ixDIDT_SQ_EDC_STALL_DELAY_4,
> DIDT_SQ_EDC_STALL_DELAY_4__EDC_STALL_DELAY_SQ14_MASK,
> DIDT_SQ_EDC_STALL_DELAY_4__EDC_STALL_DELAY_SQ14__SHIFT, 0x0000 },
> + { ixDIDT_SQ_EDC_STALL_DELAY_4,
> DIDT_SQ_EDC_STALL_DELAY_4__EDC_STALL_DELAY_SQ15_MASK,
> DIDT_SQ_EDC_STALL_DELAY_4__EDC_STALL_DELAY_SQ15__SHIFT, 0x0000 },
> +
> + { 0xFFFFFFFF } /* End of list */
> +};
> +
> +static const struct vega10_didt_config_reg
> PSMSEEDCThresholdConfig_Vega10[] =
> +{
> +/* -----------------------------------------------------------------------------------------
> ----------------------------------------------------------------------------------------
> + * Offset Mask Shift
> Value
> + * -----------------------------------------------------------------------------------------
> ----------------------------------------------------------------------------------------
> + */
> + /* SQ EDC THRESHOLD */
> + { ixDIDT_SQ_EDC_THRESHOLD,
> DIDT_SQ_EDC_THRESHOLD__EDC_THRESHOLD_MASK,
> DIDT_SQ_EDC_THRESHOLD__EDC_THRESHOLD__SHIFT, 0x0000 },
> +
> + { 0xFFFFFFFF } /* End of list */
> +};
> +
> +static const struct vega10_didt_config_reg
> PSMSEEDCCtrlResetConfig_Vega10[] =
> +{
> +/* -----------------------------------------------------------------------------------------
> ----------------------------------------------------------------------------------------
> + * Offset Mask Shift
> Value
> + * -----------------------------------------------------------------------------------------
> ----------------------------------------------------------------------------------------
> + */
> + /* SQ EDC CTRL */
> + { ixDIDT_SQ_EDC_CTRL,
> DIDT_SQ_EDC_CTRL__EDC_EN_MASK,
> DIDT_SQ_EDC_CTRL__EDC_EN__SHIFT, 0x0000 },
> + { ixDIDT_SQ_EDC_CTRL,
> DIDT_SQ_EDC_CTRL__EDC_SW_RST_MASK,
> DIDT_SQ_EDC_CTRL__EDC_SW_RST__SHIFT, 0x0001 },
> + { ixDIDT_SQ_EDC_CTRL,
> DIDT_SQ_EDC_CTRL__EDC_CLK_EN_OVERRIDE_MASK,
> DIDT_SQ_EDC_CTRL__EDC_CLK_EN_OVERRIDE__SHIFT, 0x0000 },
> + { ixDIDT_SQ_EDC_CTRL,
> DIDT_SQ_EDC_CTRL__EDC_FORCE_STALL_MASK,
> DIDT_SQ_EDC_CTRL__EDC_FORCE_STALL__SHIFT, 0x0000 },
> + { ixDIDT_SQ_EDC_CTRL,
> DIDT_SQ_EDC_CTRL__EDC_TRIGGER_THROTTLE_LOWBIT_MASK,
> DIDT_SQ_EDC_CTRL__EDC_TRIGGER_THROTTLE_LOWBIT__SHIFT, 0x0000 },
> + { ixDIDT_SQ_EDC_CTRL,
> DIDT_SQ_EDC_CTRL__EDC_STALL_PATTERN_BIT_NUMS_MASK,
> DIDT_SQ_EDC_CTRL__EDC_STALL_PATTERN_BIT_NUMS__SHIFT, 0x0000 },
> + { ixDIDT_SQ_EDC_CTRL,
> DIDT_SQ_EDC_CTRL__EDC_ALLOW_WRITE_PWRDELTA_MASK,
> DIDT_SQ_EDC_CTRL__EDC_ALLOW_WRITE_PWRDELTA__SHIFT, 0x0000 },
> + { ixDIDT_SQ_EDC_CTRL,
> DIDT_SQ_EDC_CTRL__GC_EDC_EN_MASK,
> DIDT_SQ_EDC_CTRL__GC_EDC_EN__SHIFT, 0x0000 },
> + { ixDIDT_SQ_EDC_CTRL,
> DIDT_SQ_EDC_CTRL__GC_EDC_STALL_POLICY_MASK,
> DIDT_SQ_EDC_CTRL__GC_EDC_STALL_POLICY__SHIFT, 0x0000 },
> + { ixDIDT_SQ_EDC_CTRL,
> DIDT_SQ_EDC_CTRL__GC_EDC_LEVEL_COMB_EN_MASK,
> DIDT_SQ_EDC_CTRL__GC_EDC_LEVEL_COMB_EN__SHIFT, 0x0000 },
> + { ixDIDT_SQ_EDC_CTRL,
> DIDT_SQ_EDC_CTRL__SE_EDC_LEVEL_COMB_EN_MASK,
> DIDT_SQ_EDC_CTRL__SE_EDC_LEVEL_COMB_EN__SHIFT, 0x0000 },
> +
> + { 0xFFFFFFFF } /* End of list */
> +};
> +
> +static const struct vega10_didt_config_reg PSMSEEDCCtrlConfig_Vega10[]
> =
> +{
> +/* -----------------------------------------------------------------------------------------
> ----------------------------------------------------------------------------------------
> + * Offset Mask Shift
> Value
> + * -----------------------------------------------------------------------------------------
> ----------------------------------------------------------------------------------------
> + */
> + /* SQ EDC CTRL */
> + { ixDIDT_SQ_EDC_CTRL,
> DIDT_SQ_EDC_CTRL__EDC_EN_MASK,
> DIDT_SQ_EDC_CTRL__EDC_EN__SHIFT, 0x0001 },
> + { ixDIDT_SQ_EDC_CTRL,
> DIDT_SQ_EDC_CTRL__EDC_SW_RST_MASK,
> DIDT_SQ_EDC_CTRL__EDC_SW_RST__SHIFT, 0x0000 },
> + { ixDIDT_SQ_EDC_CTRL,
> DIDT_SQ_EDC_CTRL__EDC_CLK_EN_OVERRIDE_MASK,
> DIDT_SQ_EDC_CTRL__EDC_CLK_EN_OVERRIDE__SHIFT, 0x0000 },
> + { ixDIDT_SQ_EDC_CTRL,
> DIDT_SQ_EDC_CTRL__EDC_FORCE_STALL_MASK,
> DIDT_SQ_EDC_CTRL__EDC_FORCE_STALL__SHIFT, 0x0000 },
> + { ixDIDT_SQ_EDC_CTRL,
> DIDT_SQ_EDC_CTRL__EDC_TRIGGER_THROTTLE_LOWBIT_MASK,
> DIDT_SQ_EDC_CTRL__EDC_TRIGGER_THROTTLE_LOWBIT__SHIFT, 0x0000 },
> + { ixDIDT_SQ_EDC_CTRL,
> DIDT_SQ_EDC_CTRL__EDC_STALL_PATTERN_BIT_NUMS_MASK,
> DIDT_SQ_EDC_CTRL__EDC_STALL_PATTERN_BIT_NUMS__SHIFT, 0x000E },
> + { ixDIDT_SQ_EDC_CTRL,
> DIDT_SQ_EDC_CTRL__EDC_ALLOW_WRITE_PWRDELTA_MASK,
> DIDT_SQ_EDC_CTRL__EDC_ALLOW_WRITE_PWRDELTA__SHIFT, 0x0000 },
> + { ixDIDT_SQ_EDC_CTRL,
> DIDT_SQ_EDC_CTRL__GC_EDC_EN_MASK,
> DIDT_SQ_EDC_CTRL__GC_EDC_EN__SHIFT, 0x0001 },
> + { ixDIDT_SQ_EDC_CTRL,
> DIDT_SQ_EDC_CTRL__GC_EDC_STALL_POLICY_MASK,
> DIDT_SQ_EDC_CTRL__GC_EDC_STALL_POLICY__SHIFT, 0x0003 },
> + { ixDIDT_SQ_EDC_CTRL,
> DIDT_SQ_EDC_CTRL__GC_EDC_LEVEL_COMB_EN_MASK,
> DIDT_SQ_EDC_CTRL__GC_EDC_LEVEL_COMB_EN__SHIFT, 0x0001 },
> + { ixDIDT_SQ_EDC_CTRL,
> DIDT_SQ_EDC_CTRL__SE_EDC_LEVEL_COMB_EN_MASK,
> DIDT_SQ_EDC_CTRL__SE_EDC_LEVEL_COMB_EN__SHIFT, 0x0000 },
> +
> + { 0xFFFFFFFF } /* End of list */
> +};
> +
> +static const struct vega10_didt_config_reg
> PSMGCEDCThresholdConfig_vega10[] =
> +{
> +/* -----------------------------------------------------------------------------------------
> ----------------------------------------------------------------------------------------
> + * Offset Mask Shift
> Value
> + * -----------------------------------------------------------------------------------------
> ----------------------------------------------------------------------------------------
> + */
> + { mmGC_EDC_THRESHOLD,
> GC_EDC_THRESHOLD__EDC_THRESHOLD_MASK,
> GC_EDC_THRESHOLD__EDC_THRESHOLD__SHIFT, 0x0000000 },
> +
> + { 0xFFFFFFFF } /* End of list */
> +};
> +
> +static const struct vega10_didt_config_reg
> PSMGCEDCDroopCtrlConfig_vega10[] =
> +{
> +/* -----------------------------------------------------------------------------------------
> ----------------------------------------------------------------------------------------
> + * Offset Mask Shift
> Value
> + * -----------------------------------------------------------------------------------------
> ----------------------------------------------------------------------------------------
> + */
> + { mmGC_EDC_DROOP_CTRL,
> GC_EDC_DROOP_CTRL__EDC_DROOP_LEVEL_EN_MASK,
> GC_EDC_DROOP_CTRL__EDC_DROOP_LEVEL_EN__SHIFT, 0x0001 },
> + { mmGC_EDC_DROOP_CTRL,
> GC_EDC_DROOP_CTRL__EDC_DROOP_THRESHOLD_MASK,
> GC_EDC_DROOP_CTRL__EDC_DROOP_THRESHOLD__SHIFT, 0x0384 },
> + { mmGC_EDC_DROOP_CTRL,
> GC_EDC_DROOP_CTRL__EDC_DROOP_LEVEL_INDEX_MASK,
> GC_EDC_DROOP_CTRL__EDC_DROOP_LEVEL_INDEX__SHIFT, 0x0001 },
> + { mmGC_EDC_DROOP_CTRL,
> GC_EDC_DROOP_CTRL__AVG_PSM_SEL_MASK,
> GC_EDC_DROOP_CTRL__AVG_PSM_SEL__SHIFT, 0x0001 },
> + { mmGC_EDC_DROOP_CTRL,
> GC_EDC_DROOP_CTRL__EDC_LEVEL_SEL_MASK,
> GC_EDC_DROOP_CTRL__EDC_LEVEL_SEL__SHIFT, 0x0001 },
> +
> + { 0xFFFFFFFF } /* End of list */
> +};
> +
> +static const struct vega10_didt_config_reg
> PSMGCEDCCtrlResetConfig_vega10[] =
> +{
> +/* -----------------------------------------------------------------------------------------
> ----------------------------------------------------------------------------------------
> + * Offset Mask Shift
> Value
> + * -----------------------------------------------------------------------------------------
> ----------------------------------------------------------------------------------------
> + */
> + { mmGC_EDC_CTRL, GC_EDC_CTRL__EDC_EN_MASK,
> GC_EDC_CTRL__EDC_EN__SHIFT, 0x0000 },
> + { mmGC_EDC_CTRL,
> GC_EDC_CTRL__EDC_SW_RST_MASK,
> GC_EDC_CTRL__EDC_SW_RST__SHIFT, 0x0001 },
> + { mmGC_EDC_CTRL,
> GC_EDC_CTRL__EDC_CLK_EN_OVERRIDE_MASK,
> GC_EDC_CTRL__EDC_CLK_EN_OVERRIDE__SHIFT, 0x0000 },
> + { mmGC_EDC_CTRL,
> GC_EDC_CTRL__EDC_FORCE_STALL_MASK,
> GC_EDC_CTRL__EDC_FORCE_STALL__SHIFT, 0x0000 },
> + { mmGC_EDC_CTRL,
> GC_EDC_CTRL__EDC_TRIGGER_THROTTLE_LOWBIT_MASK,
> GC_EDC_CTRL__EDC_TRIGGER_THROTTLE_LOWBIT__SHIFT, 0x0000 },
> + { mmGC_EDC_CTRL,
> GC_EDC_CTRL__EDC_ALLOW_WRITE_PWRDELTA_MASK,
> GC_EDC_CTRL__EDC_ALLOW_WRITE_PWRDELTA__SHIFT, 0x0000 },
> +
> + { 0xFFFFFFFF } /* End of list */
> +};
> +
> +static const struct vega10_didt_config_reg PSMGCEDCCtrlConfig_vega10[]
> =
> +{
> +/* -----------------------------------------------------------------------------------------
> ----------------------------------------------------------------------------------------
> + * Offset Mask Shift
> Value
> + * -----------------------------------------------------------------------------------------
> ----------------------------------------------------------------------------------------
> + */
> + { mmGC_EDC_CTRL, GC_EDC_CTRL__EDC_EN_MASK,
> GC_EDC_CTRL__EDC_EN__SHIFT, 0x0001 },
> + { mmGC_EDC_CTRL,
> GC_EDC_CTRL__EDC_SW_RST_MASK,
> GC_EDC_CTRL__EDC_SW_RST__SHIFT, 0x0000 },
> + { mmGC_EDC_CTRL,
> GC_EDC_CTRL__EDC_CLK_EN_OVERRIDE_MASK,
> GC_EDC_CTRL__EDC_CLK_EN_OVERRIDE__SHIFT, 0x0000 },
> + { mmGC_EDC_CTRL,
> GC_EDC_CTRL__EDC_FORCE_STALL_MASK,
> GC_EDC_CTRL__EDC_FORCE_STALL__SHIFT, 0x0000 },
> + { mmGC_EDC_CTRL,
> GC_EDC_CTRL__EDC_TRIGGER_THROTTLE_LOWBIT_MASK,
> GC_EDC_CTRL__EDC_TRIGGER_THROTTLE_LOWBIT__SHIFT, 0x0000 },
> + { mmGC_EDC_CTRL,
> GC_EDC_CTRL__EDC_ALLOW_WRITE_PWRDELTA_MASK,
> GC_EDC_CTRL__EDC_ALLOW_WRITE_PWRDELTA__SHIFT, 0x0000 },
> +
> + { 0xFFFFFFFF } /* End of list */
> +};
> +
> +static const struct vega10_didt_config_reg
> AvfsPSMResetConfig_vega10[]=
> +{
> +/* -----------------------------------------------------------------------------------------
> ----------------------------------------------------------------------------------------
> + * Offset Mask Shift
> Value
> + * -----------------------------------------------------------------------------------------
> ----------------------------------------------------------------------------------------
> + */
> + { 0x16A02, 0xFFFFFFFF, 0x0,
> 0x0000005F },
> + { 0x16A05, 0xFFFFFFFF, 0x0,
> 0x00000001 },
> + { 0x16A06, 0x00000001, 0x0,
> 0x02000000 },
> + { 0x16A01, 0xFFFFFFFF, 0x0,
> 0x00003027 },
> +
> + { 0xFFFFFFFF } /* End of list */
> +};
> +
> +static const struct vega10_didt_config_reg AvfsPSMInitConfig_vega10[] =
> +{
> +/* -----------------------------------------------------------------------------------------
> ----------------------------------------------------------------------------------------
> + * Offset Mask Shift
> Value
> + * -----------------------------------------------------------------------------------------
> ----------------------------------------------------------------------------------------
> + */
> + { 0x16A05, 0xFFFFFFFF, 0x18,
> 0x00000001 },
> + { 0x16A05, 0xFFFFFFFF, 0x8,
> 0x00000003 },
> + { 0x16A05, 0xFFFFFFFF, 0xa,
> 0x00000006 },
> + { 0x16A05, 0xFFFFFFFF, 0x7,
> 0x00000000 },
> + { 0x16A06, 0xFFFFFFFF, 0x18,
> 0x00000001 },
> + { 0x16A06, 0xFFFFFFFF, 0x19,
> 0x00000001 },
> + { 0x16A01, 0xFFFFFFFF, 0x0,
> 0x00003027 },
> +
> + { 0xFFFFFFFF } /* End of list */
> +};
> +
> +static int vega10_program_didt_config_registers(struct pp_hwmgr
> *hwmgr, const struct vega10_didt_config_reg *config_regs, enum
> vega10_didt_config_reg_type reg_type)
> +{
> + uint32_t data;
> +
> + PP_ASSERT_WITH_CODE((config_regs != NULL),
> "[vega10_program_didt_config_registers] Invalid config register table!",
> return -EINVAL);
> +
> + while (config_regs->offset != 0xFFFFFFFF) {
> + switch (reg_type) {
> + case VEGA10_CONFIGREG_DIDT:
> + data = cgs_read_ind_register(hwmgr->device,
> CGS_IND_REG__DIDT, config_regs->offset);
> + data &= ~config_regs->mask;
> + data |= ((config_regs->value << config_regs->shift) &
> config_regs->mask);
> + cgs_write_ind_register(hwmgr->device,
> CGS_IND_REG__DIDT, config_regs->offset, data);
> + break;
> + case VEGA10_CONFIGREG_GCCAC:
> + data = cgs_read_ind_register(hwmgr->device,
> CGS_IND_REG_GC_CAC, config_regs->offset);
> + data &= ~config_regs->mask;
> + data |= ((config_regs->value << config_regs->shift) &
> config_regs->mask);
> + cgs_write_ind_register(hwmgr->device,
> CGS_IND_REG_GC_CAC, config_regs->offset, data);
> + break;
> + case VEGA10_CONFIGREG_SECAC:
> + data = cgs_read_ind_register(hwmgr->device,
> CGS_IND_REG_SE_CAC, config_regs->offset);
> + data &= ~config_regs->mask;
> + data |= ((config_regs->value << config_regs->shift) &
> config_regs->mask);
> + cgs_write_ind_register(hwmgr->device,
> CGS_IND_REG_SE_CAC, config_regs->offset, data);
> + break;
> + default:
> + return -EINVAL;
> + }
> +
> + config_regs++;
> + }
> +
> + return 0;
> +}
> +
> +static int vega10_program_gc_didt_config_registers(struct pp_hwmgr
> *hwmgr, const struct vega10_didt_config_reg *config_regs)
> +{
> + uint32_t data;
> +
> + while (config_regs->offset != 0xFFFFFFFF) {
> + data = cgs_read_register(hwmgr->device, config_regs-
> >offset);
> + data &= ~config_regs->mask;
> + data |= ((config_regs->value << config_regs->shift) &
> config_regs->mask);
> + cgs_write_register(hwmgr->device, config_regs->offset,
> data);
> + config_regs++;
> + }
> +
> + return 0;
> +}
> +
> +static void vega10_didt_set_mask(struct pp_hwmgr *hwmgr, const bool
> enable)
> +{
> + uint32_t data;
> + int result;
> + uint32_t en = (enable ? 1 : 0);
> + uint32_t didt_block_info = SQ_IR_MASK | TCP_IR_MASK |
> TD_PCC_MASK;
> +
> + if (phm_cap_enabled(hwmgr->platform_descriptor.platformCaps,
> PHM_PlatformCaps_SQRamping)) {
> + data = cgs_read_ind_register(hwmgr->device,
> CGS_IND_REG__DIDT, ixDIDT_SQ_CTRL0);
> + data &= ~DIDT_SQ_CTRL0__DIDT_CTRL_EN_MASK;
> + data |= ((en << DIDT_SQ_CTRL0__DIDT_CTRL_EN__SHIFT) &
> DIDT_SQ_CTRL0__DIDT_CTRL_EN_MASK);
> + cgs_write_ind_register(hwmgr->device,
> CGS_IND_REG__DIDT, ixDIDT_SQ_CTRL0, data);
> + didt_block_info &= ~SQ_Enable_MASK;
> + didt_block_info |= en << SQ_Enable_SHIFT;
> + }
> +
> + if (phm_cap_enabled(hwmgr->platform_descriptor.platformCaps,
> PHM_PlatformCaps_DBRamping)) {
> + data = cgs_read_ind_register(hwmgr->device,
> CGS_IND_REG__DIDT, ixDIDT_DB_CTRL0);
> + data &= ~DIDT_DB_CTRL0__DIDT_CTRL_EN_MASK;
> + data |= ((en << DIDT_DB_CTRL0__DIDT_CTRL_EN__SHIFT) &
> DIDT_DB_CTRL0__DIDT_CTRL_EN_MASK);
> + cgs_write_ind_register(hwmgr->device,
> CGS_IND_REG__DIDT, ixDIDT_DB_CTRL0, data);
> + didt_block_info &= ~DB_Enable_MASK;
> + didt_block_info |= en << DB_Enable_SHIFT;
> + }
> +
> + if (phm_cap_enabled(hwmgr->platform_descriptor.platformCaps,
> PHM_PlatformCaps_TDRamping)) {
> + data = cgs_read_ind_register(hwmgr->device,
> CGS_IND_REG__DIDT, ixDIDT_TD_CTRL0);
> + data &= ~DIDT_TD_CTRL0__DIDT_CTRL_EN_MASK;
> + data |= ((en << DIDT_TD_CTRL0__DIDT_CTRL_EN__SHIFT) &
> DIDT_TD_CTRL0__DIDT_CTRL_EN_MASK);
> + cgs_write_ind_register(hwmgr->device,
> CGS_IND_REG__DIDT, ixDIDT_TD_CTRL0, data);
> + didt_block_info &= ~TD_Enable_MASK;
> + didt_block_info |= en << TD_Enable_SHIFT;
> + }
> +
> + if (phm_cap_enabled(hwmgr->platform_descriptor.platformCaps,
> PHM_PlatformCaps_TCPRamping)) {
> + data = cgs_read_ind_register(hwmgr->device,
> CGS_IND_REG__DIDT, ixDIDT_TCP_CTRL0);
> + data &= ~DIDT_TCP_CTRL0__DIDT_CTRL_EN_MASK;
> + data |= ((en << DIDT_TCP_CTRL0__DIDT_CTRL_EN__SHIFT)
> & DIDT_TCP_CTRL0__DIDT_CTRL_EN_MASK);
> + cgs_write_ind_register(hwmgr->device,
> CGS_IND_REG__DIDT, ixDIDT_TCP_CTRL0, data);
> + didt_block_info &= ~TCP_Enable_MASK;
> + didt_block_info |= en << TCP_Enable_SHIFT;
> + }
> +
> + if (phm_cap_enabled(hwmgr->platform_descriptor.platformCaps,
> PHM_PlatformCaps_DBRRamping)) {
> + data = cgs_read_ind_register(hwmgr->device,
> CGS_IND_REG__DIDT, ixDIDT_DBR_CTRL0);
> + data &= ~DIDT_DBR_CTRL0__DIDT_CTRL_EN_MASK;
> + data |= ((en << DIDT_DBR_CTRL0__DIDT_CTRL_EN__SHIFT)
> & DIDT_DBR_CTRL0__DIDT_CTRL_EN_MASK);
> + cgs_write_ind_register(hwmgr->device,
> CGS_IND_REG__DIDT, ixDIDT_DBR_CTRL0, data);
> + }
> +
> + if (phm_cap_enabled(hwmgr->platform_descriptor.platformCaps,
> PHM_PlatformCaps_DiDtEDCEnable)) {
> + if (phm_cap_enabled(hwmgr-
> >platform_descriptor.platformCaps, PHM_PlatformCaps_SQRamping)) {
> + data = cgs_read_ind_register(hwmgr->device,
> CGS_IND_REG__DIDT, ixDIDT_SQ_EDC_CTRL);
> + data &= ~DIDT_SQ_EDC_CTRL__EDC_EN_MASK;
> + data |= ((en <<
> DIDT_SQ_EDC_CTRL__EDC_EN__SHIFT) &
> DIDT_SQ_EDC_CTRL__EDC_EN_MASK);
> + data &=
> ~DIDT_SQ_EDC_CTRL__EDC_SW_RST_MASK;
> + data |= ((~en <<
> DIDT_SQ_EDC_CTRL__EDC_SW_RST__SHIFT) &
> DIDT_SQ_EDC_CTRL__EDC_SW_RST_MASK);
> + cgs_write_ind_register(hwmgr->device,
> CGS_IND_REG__DIDT, ixDIDT_SQ_EDC_CTRL, data);
> + }
> +
> + if (phm_cap_enabled(hwmgr-
> >platform_descriptor.platformCaps, PHM_PlatformCaps_DBRamping)) {
> + data = cgs_read_ind_register(hwmgr->device,
> CGS_IND_REG__DIDT, ixDIDT_DB_EDC_CTRL);
> + data &= ~DIDT_DB_EDC_CTRL__EDC_EN_MASK;
> + data |= ((en <<
> DIDT_DB_EDC_CTRL__EDC_EN__SHIFT) &
> DIDT_DB_EDC_CTRL__EDC_EN_MASK);
> + data &=
> ~DIDT_DB_EDC_CTRL__EDC_SW_RST_MASK;
> + data |= ((~en <<
> DIDT_DB_EDC_CTRL__EDC_SW_RST__SHIFT) &
> DIDT_DB_EDC_CTRL__EDC_SW_RST_MASK);
> + cgs_write_ind_register(hwmgr->device,
> CGS_IND_REG__DIDT, ixDIDT_DB_EDC_CTRL, data);
> + }
> +
> + if (phm_cap_enabled(hwmgr-
> >platform_descriptor.platformCaps, PHM_PlatformCaps_TDRamping)) {
> + data = cgs_read_ind_register(hwmgr->device,
> CGS_IND_REG__DIDT, ixDIDT_TD_EDC_CTRL);
> + data &= ~DIDT_TD_EDC_CTRL__EDC_EN_MASK;
> + data |= ((en <<
> DIDT_TD_EDC_CTRL__EDC_EN__SHIFT) &
> DIDT_TD_EDC_CTRL__EDC_EN_MASK);
> + data &=
> ~DIDT_TD_EDC_CTRL__EDC_SW_RST_MASK;
> + data |= ((~en <<
> DIDT_TD_EDC_CTRL__EDC_SW_RST__SHIFT) &
> DIDT_TD_EDC_CTRL__EDC_SW_RST_MASK);
> + cgs_write_ind_register(hwmgr->device,
> CGS_IND_REG__DIDT, ixDIDT_TD_EDC_CTRL, data);
> + }
> +
> + if (phm_cap_enabled(hwmgr-
> >platform_descriptor.platformCaps, PHM_PlatformCaps_TCPRamping)) {
> + data = cgs_read_ind_register(hwmgr->device,
> CGS_IND_REG__DIDT, ixDIDT_TCP_EDC_CTRL);
> + data &= ~DIDT_TCP_EDC_CTRL__EDC_EN_MASK;
> + data |= ((en <<
> DIDT_TCP_EDC_CTRL__EDC_EN__SHIFT) &
> DIDT_TCP_EDC_CTRL__EDC_EN_MASK);
> + data &=
> ~DIDT_TCP_EDC_CTRL__EDC_SW_RST_MASK;
> + data |= ((~en <<
> DIDT_TCP_EDC_CTRL__EDC_SW_RST__SHIFT) &
> DIDT_TCP_EDC_CTRL__EDC_SW_RST_MASK);
> + cgs_write_ind_register(hwmgr->device,
> CGS_IND_REG__DIDT, ixDIDT_TCP_EDC_CTRL, data);
> + }
> +
> + if (phm_cap_enabled(hwmgr-
> >platform_descriptor.platformCaps, PHM_PlatformCaps_DBRRamping)) {
> + data = cgs_read_ind_register(hwmgr->device,
> CGS_IND_REG__DIDT, ixDIDT_DBR_EDC_CTRL);
> + data &= ~DIDT_DBR_EDC_CTRL__EDC_EN_MASK;
> + data |= ((en <<
> DIDT_DBR_EDC_CTRL__EDC_EN__SHIFT) &
> DIDT_DBR_EDC_CTRL__EDC_EN_MASK);
> + data &=
> ~DIDT_DBR_EDC_CTRL__EDC_SW_RST_MASK;
> + data |= ((~en <<
> DIDT_DBR_EDC_CTRL__EDC_SW_RST__SHIFT) &
> DIDT_DBR_EDC_CTRL__EDC_SW_RST_MASK);
> + cgs_write_ind_register(hwmgr->device,
> CGS_IND_REG__DIDT, ixDIDT_DBR_EDC_CTRL, data);
> + }
> + }
> +
> + if (enable) {
> + /* For Vega10, SMC does not support any mask yet. */
> + result = smum_send_msg_to_smc_with_parameter(hwmgr-
> >smumgr, PPSMC_MSG_ConfigureGfxDidt, didt_block_info);
> + PP_ASSERT((0 == result), "[EnableDiDtConfig] SMC Configure
> Gfx Didt Failed!");
> + }
> +}
> +
> +static int vega10_enable_cac_driving_se_didt_config(struct pp_hwmgr
> *hwmgr)
> +{
> + int result;
> + uint32_t num_se, count, data;
> + struct cgs_system_info sys_info = {0};
> + uint32_t reg;
> +
> + sys_info.size = sizeof(struct cgs_system_info);
> + sys_info.info_id = CGS_SYSTEM_INFO_GFX_SE_INFO;
> + if (cgs_query_system_info(hwmgr->device, &sys_info) == 0)
> + num_se = sys_info.value;
> +
> + cgs_enter_safe_mode(hwmgr->device, true);
> +
> + cgs_lock_grbm_idx(hwmgr->device, true);
> + reg = soc15_get_register_offset(GC_HWID, 0,
> mmGRBM_GFX_INDEX_BASE_IDX, mmGRBM_GFX_INDEX);
> + for (count = 0; count < num_se; count++) {
> + data =
> GRBM_GFX_INDEX__INSTANCE_BROADCAST_WRITES_MASK |
> GRBM_GFX_INDEX__SH_BROADCAST_WRITES_MASK | ( count <<
> GRBM_GFX_INDEX__SE_INDEX__SHIFT);
> + cgs_write_register(hwmgr->device, reg, data);
> +
> + result = vega10_program_didt_config_registers(hwmgr,
> SEDiDtStallCtrlConfig_vega10, VEGA10_CONFIGREG_DIDT);
> + result |= vega10_program_didt_config_registers(hwmgr,
> SEDiDtStallPatternConfig_vega10, VEGA10_CONFIGREG_DIDT);
> + result |= vega10_program_didt_config_registers(hwmgr,
> SEDiDtWeightConfig_Vega10, VEGA10_CONFIGREG_DIDT);
> + result |= vega10_program_didt_config_registers(hwmgr,
> SEDiDtCtrl1Config_Vega10, VEGA10_CONFIGREG_DIDT);
> + result |= vega10_program_didt_config_registers(hwmgr,
> SEDiDtCtrl2Config_Vega10, VEGA10_CONFIGREG_DIDT);
> + result |= vega10_program_didt_config_registers(hwmgr,
> SEDiDtCtrl3Config_vega10, VEGA10_CONFIGREG_DIDT);
> + result |= vega10_program_didt_config_registers(hwmgr,
> SEDiDtTuningCtrlConfig_Vega10, VEGA10_CONFIGREG_DIDT);
> + result |= vega10_program_didt_config_registers(hwmgr,
> SELCacConfig_Vega10, VEGA10_CONFIGREG_SECAC);
> + result |= vega10_program_didt_config_registers(hwmgr,
> SEDiDtCtrl0Config_Vega10, VEGA10_CONFIGREG_DIDT);
> +
> + if (0 != result)
> + break;
> + }
> + cgs_write_register(hwmgr->device, reg, 0xE0000000);
> + cgs_lock_grbm_idx(hwmgr->device, false);
> +
> + vega10_didt_set_mask(hwmgr, true);
> +
> + cgs_enter_safe_mode(hwmgr->device, false);
> +
> + return 0;
> +}
> +
> +static int vega10_disable_cac_driving_se_didt_config(struct pp_hwmgr
> *hwmgr)
> +{
> + cgs_enter_safe_mode(hwmgr->device, true);
> +
> + vega10_didt_set_mask(hwmgr, false);
> +
> + cgs_enter_safe_mode(hwmgr->device, false);
> +
> + return 0;
> +}
> +
> +static int vega10_enable_psm_gc_didt_config(struct pp_hwmgr *hwmgr)
> +{
> + int result;
> + uint32_t num_se, count, data;
> + struct cgs_system_info sys_info = {0};
> + uint32_t reg;
> +
> + sys_info.size = sizeof(struct cgs_system_info);
> + sys_info.info_id = CGS_SYSTEM_INFO_GFX_SE_INFO;
> + if (cgs_query_system_info(hwmgr->device, &sys_info) == 0)
> + num_se = sys_info.value;
> +
> + cgs_enter_safe_mode(hwmgr->device, true);
> +
> + cgs_lock_grbm_idx(hwmgr->device, true);
> + reg = soc15_get_register_offset(GC_HWID, 0,
> mmGRBM_GFX_INDEX_BASE_IDX, mmGRBM_GFX_INDEX);
> + for (count = 0; count < num_se; count++) {
> + data =
> GRBM_GFX_INDEX__INSTANCE_BROADCAST_WRITES_MASK |
> GRBM_GFX_INDEX__SH_BROADCAST_WRITES_MASK | ( count <<
> GRBM_GFX_INDEX__SE_INDEX__SHIFT);
> + cgs_write_register(hwmgr->device, reg, data);
> +
> + result = vega10_program_didt_config_registers(hwmgr,
> SEDiDtStallCtrlConfig_vega10, VEGA10_CONFIGREG_DIDT);
> + result |= vega10_program_didt_config_registers(hwmgr,
> SEDiDtStallPatternConfig_vega10, VEGA10_CONFIGREG_DIDT);
> + result |= vega10_program_didt_config_registers(hwmgr,
> SEDiDtCtrl3Config_vega10, VEGA10_CONFIGREG_DIDT);
> + result |= vega10_program_didt_config_registers(hwmgr,
> SEDiDtCtrl0Config_Vega10, VEGA10_CONFIGREG_DIDT);
> + if (0 != result)
> + break;
> + }
> + cgs_write_register(hwmgr->device, reg, 0xE0000000);
> + cgs_lock_grbm_idx(hwmgr->device, false);
> +
> + vega10_didt_set_mask(hwmgr, true);
> +
> + cgs_enter_safe_mode(hwmgr->device, false);
> +
> + vega10_program_gc_didt_config_registers(hwmgr,
> GCDiDtDroopCtrlConfig_vega10);
> + if (phm_cap_enabled(hwmgr->platform_descriptor.platformCaps,
> PHM_PlatformCaps_GCEDC))
> + vega10_program_gc_didt_config_registers(hwmgr,
> GCDiDtCtrl0Config_vega10);
> +
> + if (phm_cap_enabled(hwmgr->platform_descriptor.platformCaps,
> PHM_PlatformCaps_PSM))
> + vega10_program_gc_didt_config_registers(hwmgr,
> AvfsPSMInitConfig_vega10);
> +
> + return 0;
> +}
> +
> +static int vega10_disable_psm_gc_didt_config(struct pp_hwmgr *hwmgr)
> +{
> + uint32_t data;
> +
> + cgs_enter_safe_mode(hwmgr->device, true);
> +
> + vega10_didt_set_mask(hwmgr, false);
> +
> + cgs_enter_safe_mode(hwmgr->device, false);
> +
> + if (phm_cap_enabled(hwmgr->platform_descriptor.platformCaps,
> PHM_PlatformCaps_GCEDC)) {
> + data = 0x00000000;
> + cgs_write_register(hwmgr->device, mmGC_DIDT_CTRL0,
> data);
> + }
> +
> + if (phm_cap_enabled(hwmgr->platform_descriptor.platformCaps,
> PHM_PlatformCaps_PSM))
> + vega10_program_gc_didt_config_registers(hwmgr,
> AvfsPSMResetConfig_vega10);
> +
> + return 0;
> +}
> +
> +static int vega10_enable_se_edc_config(struct pp_hwmgr *hwmgr)
> +{
> + int result;
> + uint32_t num_se, count, data;
> + struct cgs_system_info sys_info = {0};
> + uint32_t reg;
> +
> + sys_info.size = sizeof(struct cgs_system_info);
> + sys_info.info_id = CGS_SYSTEM_INFO_GFX_SE_INFO;
> + if (cgs_query_system_info(hwmgr->device, &sys_info) == 0)
> + num_se = sys_info.value;
> +
> + cgs_enter_safe_mode(hwmgr->device, true);
> +
> + cgs_lock_grbm_idx(hwmgr->device, true);
> + reg = soc15_get_register_offset(GC_HWID, 0,
> mmGRBM_GFX_INDEX_BASE_IDX, mmGRBM_GFX_INDEX);
> + for (count = 0; count < num_se; count++) {
> + data =
> GRBM_GFX_INDEX__INSTANCE_BROADCAST_WRITES_MASK |
> GRBM_GFX_INDEX__SH_BROADCAST_WRITES_MASK | ( count <<
> GRBM_GFX_INDEX__SE_INDEX__SHIFT);
> + cgs_write_register(hwmgr->device, reg, data);
> + result = vega10_program_didt_config_registers(hwmgr,
> SEDiDtWeightConfig_Vega10, VEGA10_CONFIGREG_DIDT);
> + result |= vega10_program_didt_config_registers(hwmgr,
> SEEDCStallPatternConfig_Vega10, VEGA10_CONFIGREG_DIDT);
> + result |= vega10_program_didt_config_registers(hwmgr,
> SEEDCStallDelayConfig_Vega10, VEGA10_CONFIGREG_DIDT);
> + result |= vega10_program_didt_config_registers(hwmgr,
> SEEDCThresholdConfig_Vega10, VEGA10_CONFIGREG_DIDT);
> + result |= vega10_program_didt_config_registers(hwmgr,
> SEEDCCtrlResetConfig_Vega10, VEGA10_CONFIGREG_DIDT);
> + result |= vega10_program_didt_config_registers(hwmgr,
> SEEDCCtrlConfig_Vega10, VEGA10_CONFIGREG_DIDT);
> +
> + if (0 != result)
> + break;
> + }
> + cgs_write_register(hwmgr->device, reg, 0xE0000000);
> + cgs_lock_grbm_idx(hwmgr->device, false);
> +
> + vega10_didt_set_mask(hwmgr, true);
> +
> + cgs_enter_safe_mode(hwmgr->device, false);
> +
> + return 0;
> +}
> +
> +static int vega10_disable_se_edc_config(struct pp_hwmgr *hwmgr)
> +{
> + cgs_enter_safe_mode(hwmgr->device, true);
> +
> + vega10_didt_set_mask(hwmgr, false);
> +
> + cgs_enter_safe_mode(hwmgr->device, false);
> +
> + return 0;
> +}
> +
> +static int vega10_enable_psm_gc_edc_config(struct pp_hwmgr *hwmgr)
> +{
> + int result;
> + uint32_t num_se;
> + uint32_t count, data;
> + struct cgs_system_info sys_info = {0};
> + uint32_t reg;
> +
> + sys_info.size = sizeof(struct cgs_system_info);
> + sys_info.info_id = CGS_SYSTEM_INFO_GFX_SE_INFO;
> + if (cgs_query_system_info(hwmgr->device, &sys_info) == 0)
> + num_se = sys_info.value;
> +
> + cgs_enter_safe_mode(hwmgr->device, true);
> +
> + vega10_program_gc_didt_config_registers(hwmgr,
> AvfsPSMResetConfig_vega10);
> +
> + cgs_lock_grbm_idx(hwmgr->device, true);
> + reg = soc15_get_register_offset(GC_HWID, 0,
> mmGRBM_GFX_INDEX_BASE_IDX, mmGRBM_GFX_INDEX);
> + for (count = 0; count < num_se; count++) {
> + data =
> GRBM_GFX_INDEX__INSTANCE_BROADCAST_WRITES_MASK |
> GRBM_GFX_INDEX__SH_BROADCAST_WRITES_MASK | ( count <<
> GRBM_GFX_INDEX__SE_INDEX__SHIFT);
> + cgs_write_register(hwmgr->device, reg, data);
> + result |= vega10_program_didt_config_registers(hwmgr,
> PSMSEEDCStallPatternConfig_Vega10, VEGA10_CONFIGREG_DIDT);
> + result |= vega10_program_didt_config_registers(hwmgr,
> PSMSEEDCStallDelayConfig_Vega10, VEGA10_CONFIGREG_DIDT);
> + result |= vega10_program_didt_config_registers(hwmgr,
> PSMSEEDCCtrlResetConfig_Vega10, VEGA10_CONFIGREG_DIDT);
> + result |= vega10_program_didt_config_registers(hwmgr,
> PSMSEEDCCtrlConfig_Vega10, VEGA10_CONFIGREG_DIDT);
> +
> + if (0 != result)
> + break;
> + }
> + cgs_write_register(hwmgr->device, reg, 0xE0000000);
> + cgs_lock_grbm_idx(hwmgr->device, false);
> +
> + vega10_didt_set_mask(hwmgr, true);
> +
> + cgs_enter_safe_mode(hwmgr->device, false);
> +
> + vega10_program_gc_didt_config_registers(hwmgr,
> PSMGCEDCDroopCtrlConfig_vega10);
> +
> + if (phm_cap_enabled(hwmgr->platform_descriptor.platformCaps,
> PHM_PlatformCaps_GCEDC)) {
> + vega10_program_gc_didt_config_registers(hwmgr,
> PSMGCEDCCtrlResetConfig_vega10);
> + vega10_program_gc_didt_config_registers(hwmgr,
> PSMGCEDCCtrlConfig_vega10);
> + }
> +
> + if (phm_cap_enabled(hwmgr->platform_descriptor.platformCaps,
> PHM_PlatformCaps_PSM))
> + vega10_program_gc_didt_config_registers(hwmgr,
> AvfsPSMInitConfig_vega10);
> +
> + return 0;
> +}
> +
> +static int vega10_disable_psm_gc_edc_config(struct pp_hwmgr *hwmgr)
> +{
> + uint32_t data;
> +
> + cgs_enter_safe_mode(hwmgr->device, true);
> +
> + vega10_didt_set_mask(hwmgr, false);
> +
> + cgs_enter_safe_mode(hwmgr->device, false);
> +
> + if (phm_cap_enabled(hwmgr->platform_descriptor.platformCaps,
> PHM_PlatformCaps_GCEDC)) {
> + data = 0x00000000;
> + cgs_write_register(hwmgr->device, mmGC_EDC_CTRL,
> data);
> + }
> +
> + if (phm_cap_enabled(hwmgr->platform_descriptor.platformCaps,
> PHM_PlatformCaps_PSM))
> + vega10_program_gc_didt_config_registers(hwmgr,
> AvfsPSMResetConfig_vega10);
> +
> + return 0;
> +}
> +
> +static int vega10_enable_se_edc_force_stall_config(struct pp_hwmgr
> *hwmgr)
> +{
> + uint32_t reg;
> + int result;
> +
> + cgs_enter_safe_mode(hwmgr->device, true);
> +
> + cgs_lock_grbm_idx(hwmgr->device, true);
> + reg = soc15_get_register_offset(GC_HWID, 0,
> mmGRBM_GFX_INDEX_BASE_IDX, mmGRBM_GFX_INDEX);
> + cgs_write_register(hwmgr->device, reg, 0xE0000000);
> + cgs_lock_grbm_idx(hwmgr->device, false);
> +
> + result = vega10_program_didt_config_registers(hwmgr,
> SEEDCForceStallPatternConfig_Vega10, VEGA10_CONFIGREG_DIDT);
> + result |= vega10_program_didt_config_registers(hwmgr,
> SEEDCCtrlForceStallConfig_Vega10, VEGA10_CONFIGREG_DIDT);
> + if (0 != result)
> + return result;
> +
> + vega10_didt_set_mask(hwmgr, true);
> +
> + cgs_enter_safe_mode(hwmgr->device, false);
> +
> + return 0;
> +}
> +
> +static int vega10_disable_se_edc_force_stall_config(struct pp_hwmgr
> *hwmgr)
> +{
> + int result;
> +
> + result = vega10_disable_se_edc_config(hwmgr);
> + PP_ASSERT_WITH_CODE((0 == result), "[DisableDiDtConfig] Pre DIDT
> disable clock gating failed!", return result);
> +
> + return 0;
> +}
> +
> +int vega10_enable_didt_config(struct pp_hwmgr *hwmgr)
> +{
> + int result = 0;
> + struct vega10_hwmgr *data = (struct vega10_hwmgr *)(hwmgr-
> >backend);
> +
> + if (data->smu_features[GNLD_DIDT].supported) {
> + if (data->smu_features[GNLD_DIDT].enabled)
> + PP_DBG_LOG("[EnableDiDtConfig] Feature DiDt
> Already enabled!\n");
> +
> + switch (data->registry_data.didt_mode) {
> + case 0:
> + result =
> vega10_enable_cac_driving_se_didt_config(hwmgr);
> + PP_ASSERT_WITH_CODE((0 == result), "[EnableDiDt]
> Attempt to enable DiDt Mode 0 Failed!", return result);
> + break;
> + case 2:
> + result =
> vega10_enable_psm_gc_didt_config(hwmgr);
> + PP_ASSERT_WITH_CODE((0 == result), "[EnableDiDt]
> Attempt to enable DiDt Mode 2 Failed!", return result);
> + break;
> + case 3:
> + result = vega10_enable_se_edc_config(hwmgr);
> + PP_ASSERT_WITH_CODE((0 == result), "[EnableDiDt]
> Attempt to enable DiDt Mode 3 Failed!", return result);
> + break;
> + case 1:
> + case 4:
> + case 5:
> + result =
> vega10_enable_psm_gc_edc_config(hwmgr);
> + PP_ASSERT_WITH_CODE((0 == result), "[EnableDiDt]
> Attempt to enable DiDt Mode 5 Failed!", return result);
> + break;
> + case 6:
> + result =
> vega10_enable_se_edc_force_stall_config(hwmgr);
> + PP_ASSERT_WITH_CODE((0 == result), "[EnableDiDt]
> Attempt to enable DiDt Mode 6 Failed!", return result);
> + break;
> + default:
> + result = -EINVAL;
> + break;
> + }
> +
> + if (0 == result) {
> +
> PP_ASSERT_WITH_CODE((!vega10_enable_smc_features(hwmgr-
> >smumgr, true, data->smu_features[GNLD_DIDT].smu_feature_bitmap)),
> + "[EnableDiDtConfig] Attempt to Enable DiDt
> feature Failed!", return result);
> + data->smu_features[GNLD_DIDT].enabled = true;
> + }
> + }
> +
> + return result;
> +}
> +
> +int vega10_disable_didt_config(struct pp_hwmgr *hwmgr)
> +{
> + int result = 0;
> + struct vega10_hwmgr *data = (struct vega10_hwmgr *)(hwmgr-
> >backend);
> +
> + if (data->smu_features[GNLD_DIDT].supported) {
> + if (!data->smu_features[GNLD_DIDT].enabled)
> + PP_DBG_LOG("[DisableDiDtConfig] Feature DiDt
> Already Disabled!\n");
> +
> + switch (data->registry_data.didt_mode) {
> + case 0:
> + result =
> vega10_disable_cac_driving_se_didt_config(hwmgr);
> + PP_ASSERT_WITH_CODE((0 == result), "[DisableDiDt]
> Attempt to disable DiDt Mode 0 Failed!", return result);
> + break;
> + case 2:
> + result =
> vega10_disable_psm_gc_didt_config(hwmgr);
> + PP_ASSERT_WITH_CODE((0 == result), "[DisableDiDt]
> Attempt to disable DiDt Mode 2 Failed!", return result);
> + break;
> + case 3:
> + result = vega10_disable_se_edc_config(hwmgr);
> + PP_ASSERT_WITH_CODE((0 == result), "[DisableDiDt]
> Attempt to disable DiDt Mode 3 Failed!", return result);
> + break;
> + case 1:
> + case 4:
> + case 5:
> + result =
> vega10_disable_psm_gc_edc_config(hwmgr);
> + PP_ASSERT_WITH_CODE((0 == result), "[DisableDiDt]
> Attempt to disable DiDt Mode 5 Failed!", return result);
> + break;
> + case 6:
> + result =
> vega10_disable_se_edc_force_stall_config(hwmgr);
> + PP_ASSERT_WITH_CODE((0 == result), "[DisableDiDt]
> Attempt to disable DiDt Mode 6 Failed!", return result);
> + break;
> + default:
> + result = -EINVAL;
> + break;
> + }
> +
> + if (0 == result) {
> + PP_ASSERT_WITH_CODE((0 !=
> vega10_enable_smc_features(hwmgr->smumgr, false, data-
> >smu_features[GNLD_DIDT].smu_feature_bitmap)),
> + "[DisableDiDtConfig] Attempt to
> Disable DiDt feature Failed!", return result);
> + data->smu_features[GNLD_DIDT].enabled = false;
> + }
> + }
> +
> + return result;
> +}
>
> void vega10_initialize_power_tune_defaults(struct pp_hwmgr *hwmgr)
> {
> diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_powertune.h
> b/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_powertune.h
> index 9ecaa27..b95771a 100644
> --- a/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_powertune.h
> +++ b/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_powertune.h
> @@ -31,6 +31,12 @@ enum vega10_pt_config_reg_type {
> VEGA10_CONFIGREG_MAX
> };
>
> +enum vega10_didt_config_reg_type {
> + VEGA10_CONFIGREG_DIDT = 0,
> + VEGA10_CONFIGREG_GCCAC,
> + VEGA10_CONFIGREG_SECAC
> +};
> +
> /* PowerContainment Features */
> #define POWERCONTAINMENT_FEATURE_DTE 0x00000001
> #define POWERCONTAINMENT_FEATURE_TDCLimit 0x00000002
> @@ -44,6 +50,13 @@ struct vega10_pt_config_reg {
> enum vega10_pt_config_reg_type type;
> };
>
> +struct vega10_didt_config_reg {
> + uint32_t offset;
> + uint32_t mask;
> + uint32_t shift;
> + uint32_t value;
> +};
> +
> struct vega10_pt_defaults {
> uint8_t SviLoadLineEn;
> uint8_t SviLoadLineVddC;
> @@ -62,5 +75,8 @@ int vega10_set_power_limit(struct pp_hwmgr *hwmgr,
> uint32_t n);
> int vega10_power_control_set_level(struct pp_hwmgr *hwmgr);
> int vega10_disable_power_containment(struct pp_hwmgr *hwmgr);
>
> +int vega10_enable_didt_config(struct pp_hwmgr *hwmgr);
> +int vega10_disable_didt_config(struct pp_hwmgr *hwmgr);
> +
> #endif /* _VEGA10_POWERTUNE_H_ */
>
> diff --git a/drivers/gpu/drm/amd/powerplay/inc/hardwaremanager.h
> b/drivers/gpu/drm/amd/powerplay/inc/hardwaremanager.h
> index a1ebe10..a4c8b09 100644
> --- a/drivers/gpu/drm/amd/powerplay/inc/hardwaremanager.h
> +++ b/drivers/gpu/drm/amd/powerplay/inc/hardwaremanager.h
> @@ -164,9 +164,14 @@ enum phm_platform_caps {
> PHM_PlatformCaps_EnablePlatformPowerManagement, /*
> indicates that Platform Power Management feature is supported */
> PHM_PlatformCaps_SurpriseRemoval, /* indicates that
> surprise removal feature is requested */
> PHM_PlatformCaps_NewCACVoltage, /* indicates new
> CAC voltage table support */
> + PHM_PlatformCaps_DiDtSupport, /* for dI/dT feature
> */
> PHM_PlatformCaps_DBRamping, /* for dI/dT feature
> */
> PHM_PlatformCaps_TDRamping, /* for dI/dT feature
> */
> PHM_PlatformCaps_TCPRamping, /* for dI/dT feature
> */
> + PHM_PlatformCaps_DBRRamping, /* for dI/dT feature
> */
> + PHM_PlatformCaps_DiDtEDCEnable, /* for dI/dT feature
> */
> + PHM_PlatformCaps_GCEDC, /* for dI/dT feature */
> + PHM_PlatformCaps_PSM, /* for dI/dT feature */
> PHM_PlatformCaps_EnableSMU7ThermalManagement, /* SMC
> will manage thermal events */
> PHM_PlatformCaps_FPS, /* FPS support */
> PHM_PlatformCaps_ACP, /* ACP support */
> diff --git a/drivers/gpu/drm/amd/powerplay/inc/pp_debug.h
> b/drivers/gpu/drm/amd/powerplay/inc/pp_debug.h
> index f3f9ebb..822cd8b 100644
> --- a/drivers/gpu/drm/amd/powerplay/inc/pp_debug.h
> +++ b/drivers/gpu/drm/amd/powerplay/inc/pp_debug.h
> @@ -42,6 +42,12 @@
> } \
> } while (0)
>
> +#define PP_ASSERT(cond, msg) \
> + do { \
> + if (!(cond)) { \
> + pr_warn("%s\n", msg); \
> + } \
> + } while (0)
>
> #define PP_DBG_LOG(fmt, ...) \
> do { \
> diff --git a/drivers/gpu/drm/amd/powerplay/inc/pp_soc15.h
> b/drivers/gpu/drm/amd/powerplay/inc/pp_soc15.h
> index 227d999..a511611 100644
> --- a/drivers/gpu/drm/amd/powerplay/inc/pp_soc15.h
> +++ b/drivers/gpu/drm/amd/powerplay/inc/pp_soc15.h
> @@ -41,6 +41,8 @@ inline static uint32_t soc15_get_register_offset(
> reg = MP1_BASE.instance[inst].segment[segment] + offset;
> else if (hw_id == DF_HWID)
> reg = DF_BASE.instance[inst].segment[segment] + offset;
> + else if (hw_id == GC_HWID)
> + reg = GC_BASE.instance[inst].segment[segment] + offset;
>
> return reg;
> }
> --
> 2.7.4
>
> _______________________________________________
> amd-gfx mailing list
> amd-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/amd-gfx
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2017-07-07 3:30 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-07-07 1:59 [PATCH 1/6] drm/amd/powerplay: added index gc cac read/write apis for vega10 Evan Quan
[not found] ` <1499392755-23507-1-git-send-email-evan.quan-5C7GfCeVMHo@public.gmane.org>
2017-07-07 1:59 ` [PATCH 2/6] drm/amd/powerplay: added new se_cac_idx r/w APIs v2 - v2: added missing spinlock init Evan Quan
2017-07-07 1:59 ` [PATCH 3/6] drm/amd/powerplay: added soc15 support for new se_cac_idx APIs Evan Quan
2017-07-07 1:59 ` [PATCH 4/6] drm/amd/powerplay: added support for new se_cac_idx APIs to cgs Evan Quan
2017-07-07 1:59 ` [PATCH 5/6] drm/amd/powerplay: added grbm_idx_mutex lock/unlock to cgs v2 - v2: rename param 'en' as 'lock' Evan Quan
2017-07-07 1:59 ` [PATCH 6/6] drm/amd/powerplay: added didt support for vega10 Evan Quan
[not found] ` <1499392755-23507-6-git-send-email-evan.quan-5C7GfCeVMHo@public.gmane.org>
2017-07-07 3:30 ` Deucher, Alexander
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.