aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2177-drm-amdgpu-athub2-enable-athub2-clock-gating.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2177-drm-amdgpu-athub2-enable-athub2-clock-gating.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2177-drm-amdgpu-athub2-enable-athub2-clock-gating.patch209
1 files changed, 209 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2177-drm-amdgpu-athub2-enable-athub2-clock-gating.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2177-drm-amdgpu-athub2-enable-athub2-clock-gating.patch
new file mode 100644
index 00000000..3af909c7
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2177-drm-amdgpu-athub2-enable-athub2-clock-gating.patch
@@ -0,0 +1,209 @@
+From aa8c332b3fe84ce8f79b6f5a1f1150ebcdf642cf Mon Sep 17 00:00:00 2001
+From: Jack Xiao <Jack.Xiao@amd.com>
+Date: Wed, 13 Feb 2019 18:43:03 +0800
+Subject: [PATCH 2177/2940] drm/amdgpu/athub2: enable athub2 clock gating
+
+Enable athub2 clock gating and light sleep
+
+Signed-off-by: Jack Xiao <Jack.Xiao@amd.com>
+Reviewed-by: Hawking Zhang <Hawking.Zhang@amd.com>
+Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+---
+ drivers/gpu/drm/amd/amdgpu/Makefile | 4 +
+ drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c | 3 +
+ drivers/gpu/drm/amd/amdgpu/athub_v2_0.c | 101 +++++++++++++++++++++++
+ drivers/gpu/drm/amd/amdgpu/athub_v2_0.h | 30 +++++++
+ drivers/gpu/drm/amd/include/amd_shared.h | 2 +
+ 5 files changed, 140 insertions(+)
+ create mode 100644 drivers/gpu/drm/amd/amdgpu/athub_v2_0.c
+ create mode 100644 drivers/gpu/drm/amd/amdgpu/athub_v2_0.h
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/Makefile b/drivers/gpu/drm/amd/amdgpu/Makefile
+index c755a3d85f3c..4dad893a06dd 100644
+--- a/drivers/gpu/drm/amd/amdgpu/Makefile
++++ b/drivers/gpu/drm/amd/amdgpu/Makefile
+@@ -134,6 +134,10 @@ amdgpu-y += \
+ amdgpu_vcn.o \
+ vcn_v1_0.o
+
++# add ATHUB block
++amdgpu-y += \
++ athub_v2_0.o
++
+ # add amdkfd interfaces
+ amdgpu-y += amdgpu_amdkfd.o
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c
+index 469cda9728b0..7be32a6a4b9f 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c
+@@ -64,6 +64,9 @@ static const struct cg_flag_name clocks[] = {
+ {AMD_CG_SUPPORT_DRM_LS, "Digital Right Management Light Sleep"},
+ {AMD_CG_SUPPORT_ROM_MGCG, "Rom Medium Grain Clock Gating"},
+ {AMD_CG_SUPPORT_DF_MGCG, "Data Fabric Medium Grain Clock Gating"},
++
++ {AMD_CG_SUPPORT_ATHUB_MGCG, "Address Translation Hub Medium Grain Clock Gating"},
++ {AMD_CG_SUPPORT_ATHUB_LS, "Address Translation Hub Light Sleep"},
+ {0, NULL},
+ };
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/athub_v2_0.c b/drivers/gpu/drm/amd/amdgpu/athub_v2_0.c
+new file mode 100644
+index 000000000000..d3d7c2176933
+--- /dev/null
++++ b/drivers/gpu/drm/amd/amdgpu/athub_v2_0.c
+@@ -0,0 +1,101 @@
++/*
++ * Copyright 2019 Advanced Micro Devices, Inc.
++ *
++ * Permission is hereby granted, free of charge, to any person obtaining a
++ * copy of this software and associated documentation files (the "Software"),
++ * to deal in the Software without restriction, including without limitation
++ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
++ * and/or sell copies of the Software, and to permit persons to whom the
++ * Software is furnished to do so, subject to the following conditions:
++ *
++ * The above copyright notice and this permission notice shall be included in
++ * all copies or substantial portions of the Software.
++ *
++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
++ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
++ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
++ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
++ * OTHER DEALINGS IN THE SOFTWARE.
++ *
++ */
++
++#include "amdgpu.h"
++#include "athub_v2_0.h"
++
++#include "athub/athub_2_0_0_offset.h"
++#include "athub/athub_2_0_0_sh_mask.h"
++#include "athub/athub_2_0_0_default.h"
++#include "navi10_enum.h"
++
++#include "soc15_common.h"
++
++static void
++athub_v2_0_update_medium_grain_clock_gating(struct amdgpu_device *adev,
++ bool enable)
++{
++ uint32_t def, data;
++
++ def = data = RREG32_SOC15(ATHUB, 0, mmATHUB_MISC_CNTL);
++
++ if (enable && (adev->cg_flags & AMD_CG_SUPPORT_MC_MGCG))
++ data |= ATHUB_MISC_CNTL__CG_ENABLE_MASK;
++ else
++ data &= ~ATHUB_MISC_CNTL__CG_ENABLE_MASK;
++
++ if (def != data)
++ WREG32_SOC15(ATHUB, 0, mmATHUB_MISC_CNTL, data);
++}
++
++static void
++athub_v2_0_update_medium_grain_light_sleep(struct amdgpu_device *adev,
++ bool enable)
++{
++ uint32_t def, data;
++
++ def = data = RREG32_SOC15(ATHUB, 0, mmATHUB_MISC_CNTL);
++
++ if (enable && (adev->cg_flags & AMD_CG_SUPPORT_MC_LS) &&
++ (adev->cg_flags & AMD_CG_SUPPORT_HDP_LS))
++ data |= ATHUB_MISC_CNTL__CG_MEM_LS_ENABLE_MASK;
++ else
++ data &= ~ATHUB_MISC_CNTL__CG_MEM_LS_ENABLE_MASK;
++
++ if(def != data)
++ WREG32_SOC15(ATHUB, 0, mmATHUB_MISC_CNTL, data);
++}
++
++int athub_v2_0_set_clockgating(struct amdgpu_device *adev,
++ enum amd_clockgating_state state)
++{
++ if (amdgpu_sriov_vf(adev))
++ return 0;
++
++ switch (adev->asic_type) {
++ case CHIP_NAVI10:
++ athub_v2_0_update_medium_grain_clock_gating(adev,
++ state == AMD_CG_STATE_GATE ? true : false);
++ athub_v2_0_update_medium_grain_light_sleep(adev,
++ state == AMD_CG_STATE_GATE ? true : false);
++ break;
++ default:
++ break;
++ }
++
++ return 0;
++}
++
++void athub_v2_0_get_clockgating(struct amdgpu_device *adev, u32 *flags)
++{
++ int data;
++
++ /* AMD_CG_SUPPORT_ATHUB_MGCG */
++ data = RREG32_SOC15(ATHUB, 0, mmATHUB_MISC_CNTL);
++ if (data & ATHUB_MISC_CNTL__CG_ENABLE_MASK)
++ *flags |= AMD_CG_SUPPORT_ATHUB_MGCG;
++
++ /* AMD_CG_SUPPORT_ATHUB_LS */
++ if (data & ATHUB_MISC_CNTL__CG_MEM_LS_ENABLE_MASK)
++ *flags |= AMD_CG_SUPPORT_ATHUB_LS;
++}
+diff --git a/drivers/gpu/drm/amd/amdgpu/athub_v2_0.h b/drivers/gpu/drm/amd/amdgpu/athub_v2_0.h
+new file mode 100644
+index 000000000000..02932c1c8bab
+--- /dev/null
++++ b/drivers/gpu/drm/amd/amdgpu/athub_v2_0.h
+@@ -0,0 +1,30 @@
++/*
++ * Copyright 2019 Advanced Micro Devices, Inc.
++ *
++ * Permission is hereby granted, free of charge, to any person obtaining a
++ * copy of this software and associated documentation files (the "Software"),
++ * to deal in the Software without restriction, including without limitation
++ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
++ * and/or sell copies of the Software, and to permit persons to whom the
++ * Software is furnished to do so, subject to the following conditions:
++ *
++ * The above copyright notice and this permission notice shall be included in
++ * all copies or substantial portions of the Software.
++ *
++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
++ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
++ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
++ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
++ * OTHER DEALINGS IN THE SOFTWARE.
++ *
++ */
++#ifndef __ATHUB_V2_0_H__
++#define __ATHUB_V2_0_H__
++
++int athub_v2_0_set_clockgating(struct amdgpu_device *adev,
++ enum amd_clockgating_state state);
++void athub_v2_0_get_clockgating(struct amdgpu_device *adev, u32 *flags);
++
++#endif
+diff --git a/drivers/gpu/drm/amd/include/amd_shared.h b/drivers/gpu/drm/amd/include/amd_shared.h
+index 15fbb2dff462..1e638357c4a3 100644
+--- a/drivers/gpu/drm/amd/include/amd_shared.h
++++ b/drivers/gpu/drm/amd/include/amd_shared.h
+@@ -96,6 +96,8 @@ enum amd_powergating_state {
+ #define AMD_CG_SUPPORT_HDP_DS (1 << 25)
+ #define AMD_CG_SUPPORT_HDP_SD (1 << 26)
+ #define AMD_CG_SUPPORT_IH_CG (1 << 27)
++#define AMD_CG_SUPPORT_ATHUB_LS (1 << 28)
++#define AMD_CG_SUPPORT_ATHUB_MGCG (1 << 29)
+ /* PG flags */
+ #define AMD_PG_SUPPORT_GFX_PG (1 << 0)
+ #define AMD_PG_SUPPORT_GFX_SMG (1 << 1)
+--
+2.17.1
+