diff options
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/1330-drm-amd-powerplay-add-new-smu-ip-block.patch')
-rw-r--r-- | meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/1330-drm-amd-powerplay-add-new-smu-ip-block.patch | 280 |
1 files changed, 280 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/1330-drm-amd-powerplay-add-new-smu-ip-block.patch b/meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/1330-drm-amd-powerplay-add-new-smu-ip-block.patch new file mode 100644 index 00000000..742aa134 --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/1330-drm-amd-powerplay-add-new-smu-ip-block.patch @@ -0,0 +1,280 @@ +From 8a9b92772b478b7a11600cc49be6b3109b214860 Mon Sep 17 00:00:00 2001 +From: Huang Rui <ray.huang@amd.com> +Date: Thu, 29 Nov 2018 13:56:06 +0800 +Subject: [PATCH 1330/2940] drm/amd/powerplay: add new smu ip block + +This patch add amdgpu_smu ip block skeleton as placeholder. +We plan use new smu ip block from Vega20. + +Signed-off-by: Huang Rui <ray.huang@amd.com> +Acked-by: Alex Deucher <alexander.deucher@amd.com> +--- + drivers/gpu/drm/amd/amdgpu/amdgpu.h | 4 + + drivers/gpu/drm/amd/powerplay/Makefile | 2 +- + drivers/gpu/drm/amd/powerplay/amdgpu_smu.c | 166 ++++++++++++++++++ + .../gpu/drm/amd/powerplay/inc/amdgpu_smu.h | 45 +++++ + 4 files changed, 216 insertions(+), 1 deletion(-) + create mode 100644 drivers/gpu/drm/amd/powerplay/amdgpu_smu.c + create mode 100644 drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h + +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h +index 441a912e9676..6544d73523db 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h +@@ -83,6 +83,7 @@ + #include "amdgpu_bo_list.h" + #include "amdgpu_gem.h" + #include "amdgpu_doorbell.h" ++#include "amdgpu_smu.h" + + #define MAX_GPU_INSTANCE 16 + +@@ -882,6 +883,9 @@ struct amdgpu_device { + struct amd_powerplay powerplay; + bool pp_force_state_enabled; + ++ /* smu */ ++ struct smu_context smu; ++ + /* dpm */ + struct amdgpu_pm pm; + u32 cg_flags; +diff --git a/drivers/gpu/drm/amd/powerplay/Makefile b/drivers/gpu/drm/amd/powerplay/Makefile +index 231785a9e24c..a2ebda492beb 100644 +--- a/drivers/gpu/drm/amd/powerplay/Makefile ++++ b/drivers/gpu/drm/amd/powerplay/Makefile +@@ -35,7 +35,7 @@ AMD_POWERPLAY = $(addsuffix /Makefile,$(addprefix $(FULL_AMD_PATH)/powerplay/,$( + + include $(AMD_POWERPLAY) + +-POWER_MGR = amd_powerplay.o ++POWER_MGR = amd_powerplay.o amdgpu_smu.o + + AMD_PP_POWER = $(addprefix $(AMD_PP_PATH)/,$(POWER_MGR)) + +diff --git a/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c b/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c +new file mode 100644 +index 000000000000..291cc31a8496 +--- /dev/null ++++ b/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c +@@ -0,0 +1,166 @@ ++/* ++ * 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 "pp_debug.h" ++#include <linux/firmware.h> ++#include <drm/drmP.h> ++#include "amdgpu.h" ++#include "amdgpu_smu.h" ++#include "soc15_common.h" ++ ++static int smu_set_funcs(struct amdgpu_device *adev) ++{ ++ return 0; ++} ++ ++static int smu_early_init(void *handle) ++{ ++ struct amdgpu_device *adev = (struct amdgpu_device *)handle; ++ struct smu_context *smu = &adev->smu; ++ int ret; ++ ++ ret = smu_set_funcs(adev); ++ if (ret) ++ return ret; ++ ++ smu->adev = adev; ++ mutex_init(&smu->mutex); ++ ++ return 0; ++} ++ ++static int smu_sw_init(void *handle) ++{ ++ struct amdgpu_device *adev = (struct amdgpu_device *)handle; ++ struct smu_context *smu = &adev->smu; ++ int ret; ++ ++ if (adev->asic_type < CHIP_VEGA20) ++ return -EINVAL; ++ ++ ret = smu_init_microcode(smu); ++ if (ret) { ++ pr_err("Failed to load smu firmware!\n"); ++ return ret; ++ } ++ ++ return 0; ++} ++ ++static int smu_sw_fini(void *handle) ++{ ++ struct amdgpu_device *adev = (struct amdgpu_device *)handle; ++ ++ if (adev->asic_type < CHIP_VEGA20) ++ return -EINVAL; ++ ++ return 0; ++} ++ ++static int smu_hw_init(void *handle) ++{ ++ int ret; ++ struct amdgpu_device *adev = (struct amdgpu_device *)handle; ++ struct smu_context *smu = &adev->smu; ++ ++ if (adev->asic_type < CHIP_VEGA20) ++ return -EINVAL; ++ ++ mutex_lock(&smu->mutex); ++ ++ /* TODO */ ++ ++ mutex_unlock(&smu->mutex); ++ ++ pr_info("SMU is initialized successfully!\n"); ++ ++ return 0; ++} ++ ++static int smu_hw_fini(void *handle) ++{ ++ struct amdgpu_device *adev = (struct amdgpu_device *)handle; ++ struct smu_context *smu = &adev->smu; ++ ++ if (adev->asic_type < CHIP_VEGA20) ++ return -EINVAL; ++ ++ return 0; ++} ++ ++static int smu_suspend(void *handle) ++{ ++ struct amdgpu_device *adev = (struct amdgpu_device *)handle; ++ ++ if (adev->asic_type < CHIP_VEGA20) ++ return -EINVAL; ++ ++ return 0; ++} ++ ++static int smu_resume(void *handle) ++{ ++ int ret; ++ struct amdgpu_device *adev = (struct amdgpu_device *)handle; ++ struct smu_context *smu = &adev->smu; ++ ++ if (adev->asic_type < CHIP_VEGA20) ++ return -EINVAL; ++ ++ mutex_lock(&smu->mutex); ++ ++ /* TODO */ ++ ++ mutex_unlock(&smu->mutex); ++ ++ return 0; ++} ++ ++static int smu_set_clockgating_state(void *handle, ++ enum amd_clockgating_state state) ++{ ++ return 0; ++} ++ ++static int smu_set_powergating_state(void *handle, ++ enum amd_powergating_state state) ++{ ++ return 0; ++} ++ ++const struct amd_ip_funcs smu_ip_funcs = { ++ .name = "smu", ++ .early_init = smu_early_init, ++ .late_init = NULL, ++ .sw_init = smu_sw_init, ++ .sw_fini = smu_sw_fini, ++ .hw_init = smu_hw_init, ++ .hw_fini = smu_hw_fini, ++ .suspend = smu_suspend, ++ .resume = smu_resume, ++ .is_idle = NULL, ++ .check_soft_reset = NULL, ++ .wait_for_idle = NULL, ++ .soft_reset = NULL, ++ .set_clockgating_state = smu_set_clockgating_state, ++ .set_powergating_state = smu_set_powergating_state, ++}; +diff --git a/drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h b/drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h +new file mode 100644 +index 000000000000..5fb685c5be51 +--- /dev/null ++++ b/drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h +@@ -0,0 +1,45 @@ ++/* ++ * 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 __AMDGPU_SMU_H__ ++#define __AMDGPU_SMU_H__ ++ ++#include "amdgpu.h" ++ ++struct smu_context ++{ ++ struct amdgpu_device *adev; ++ ++ const struct smu_funcs *funcs; ++ struct mutex mutex; ++}; ++ ++struct smu_funcs ++{ ++ int (*init_microcode)(struct smu_context *smu); ++}; ++ ++#define smu_init_microcode(smu) \ ++ ((smu)->funcs->init_microcode ? (smu)->funcs->init_microcode((smu)) : 0) ++ ++extern const struct amd_ip_funcs smu_ip_funcs; ++ ++#endif +-- +2.17.1 + |