diff options
author | Eric Huang <JinHuiEric.Huang@amd.com> | 2017-09-15 16:43:38 -0400 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2017-09-26 15:14:17 -0400 |
commit | a1665a55c87eb711d23806a56e39e8116f1f4242 (patch) | |
tree | f83067d4be3f0d6a4854085a14c0d7f3ec2bba6c | |
parent | 2a5b64c9fcd7adf6133e76966250ef3ab139f98b (diff) |
drm/amd/powerplay: implement register thermal interrupt for Vega10
Signed-off-by: Eric Huang <JinHuiEric.Huang@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
-rw-r--r-- | drivers/gpu/drm/amd/powerplay/hwmgr/vega10_hwmgr.c | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_hwmgr.c b/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_hwmgr.c index bd20d551e719..439cb371c56a 100644 --- a/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_hwmgr.c +++ b/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_hwmgr.c | |||
@@ -4994,6 +4994,38 @@ static int vega10_set_mclk_od(struct pp_hwmgr *hwmgr, uint32_t value) | |||
4994 | return 0; | 4994 | return 0; |
4995 | } | 4995 | } |
4996 | 4996 | ||
4997 | static int vega10_register_thermal_interrupt(struct pp_hwmgr *hwmgr, | ||
4998 | const void *info) | ||
4999 | { | ||
5000 | struct cgs_irq_src_funcs *irq_src = | ||
5001 | (struct cgs_irq_src_funcs *)info; | ||
5002 | |||
5003 | if (hwmgr->thermal_controller.ucType == | ||
5004 | ATOM_VEGA10_PP_THERMALCONTROLLER_VEGA10 || | ||
5005 | hwmgr->thermal_controller.ucType == | ||
5006 | ATOM_VEGA10_PP_THERMALCONTROLLER_EMC2103_WITH_INTERNAL) { | ||
5007 | PP_ASSERT_WITH_CODE(!cgs_add_irq_source(hwmgr->device, | ||
5008 | 0xf, /* AMDGPU_IH_CLIENTID_THM */ | ||
5009 | 0, 0, irq_src[0].set, irq_src[0].handler, hwmgr), | ||
5010 | "Failed to register high thermal interrupt!", | ||
5011 | return -EINVAL); | ||
5012 | PP_ASSERT_WITH_CODE(!cgs_add_irq_source(hwmgr->device, | ||
5013 | 0xf, /* AMDGPU_IH_CLIENTID_THM */ | ||
5014 | 1, 0, irq_src[1].set, irq_src[1].handler, hwmgr), | ||
5015 | "Failed to register low thermal interrupt!", | ||
5016 | return -EINVAL); | ||
5017 | } | ||
5018 | |||
5019 | /* Register CTF(GPIO_19) interrupt */ | ||
5020 | PP_ASSERT_WITH_CODE(!cgs_add_irq_source(hwmgr->device, | ||
5021 | 0x16, /* AMDGPU_IH_CLIENTID_ROM_SMUIO, */ | ||
5022 | 83, 0, irq_src[2].set, irq_src[2].handler, hwmgr), | ||
5023 | "Failed to register CTF thermal interrupt!", | ||
5024 | return -EINVAL); | ||
5025 | |||
5026 | return 0; | ||
5027 | } | ||
5028 | |||
4997 | static const struct pp_hwmgr_func vega10_hwmgr_funcs = { | 5029 | static const struct pp_hwmgr_func vega10_hwmgr_funcs = { |
4998 | .backend_init = vega10_hwmgr_backend_init, | 5030 | .backend_init = vega10_hwmgr_backend_init, |
4999 | .backend_fini = vega10_hwmgr_backend_fini, | 5031 | .backend_fini = vega10_hwmgr_backend_fini, |
@@ -5047,6 +5079,7 @@ static const struct pp_hwmgr_func vega10_hwmgr_funcs = { | |||
5047 | .get_mclk_od = vega10_get_mclk_od, | 5079 | .get_mclk_od = vega10_get_mclk_od, |
5048 | .set_mclk_od = vega10_set_mclk_od, | 5080 | .set_mclk_od = vega10_set_mclk_od, |
5049 | .avfs_control = vega10_avfs_enable, | 5081 | .avfs_control = vega10_avfs_enable, |
5082 | .register_internal_thermal_interrupt = vega10_register_thermal_interrupt, | ||
5050 | }; | 5083 | }; |
5051 | 5084 | ||
5052 | int vega10_hwmgr_init(struct pp_hwmgr *hwmgr) | 5085 | int vega10_hwmgr_init(struct pp_hwmgr *hwmgr) |