aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Huang <JinHuiEric.Huang@amd.com>2017-09-15 16:43:38 -0400
committerAlex Deucher <alexander.deucher@amd.com>2017-09-26 15:14:17 -0400
commita1665a55c87eb711d23806a56e39e8116f1f4242 (patch)
treef83067d4be3f0d6a4854085a14c0d7f3ec2bba6c
parent2a5b64c9fcd7adf6133e76966250ef3ab139f98b (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.c33
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
4997static 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
4997static const struct pp_hwmgr_func vega10_hwmgr_funcs = { 5029static 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
5052int vega10_hwmgr_init(struct pp_hwmgr *hwmgr) 5085int vega10_hwmgr_init(struct pp_hwmgr *hwmgr)