diff options
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/1090-drm-amdpgu-add-common-functions-for-BACO-feature-in-.patch')
-rw-r--r-- | meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/1090-drm-amdpgu-add-common-functions-for-BACO-feature-in-.patch | 199 |
1 files changed, 199 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/1090-drm-amdpgu-add-common-functions-for-BACO-feature-in-.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/1090-drm-amdpgu-add-common-functions-for-BACO-feature-in-.patch new file mode 100644 index 00000000..baa6662b --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/1090-drm-amdpgu-add-common-functions-for-BACO-feature-in-.patch @@ -0,0 +1,199 @@ +From 83e9b44e3fdcc33be5c1d4042e9d95b079ab6afb Mon Sep 17 00:00:00 2001 +From: Jim Qu <Jim.Qu@amd.com> +Date: Tue, 20 Nov 2018 10:58:25 +0800 +Subject: [PATCH 1090/2940] drm/amdpgu: add common functions for BACO feature + in PP (v2) + +V2: squash in crash fix for non-register commands (Alex) + +Signed-off-by: Jim Qu <Jim.Qu@amd.com> +Reviewed-by: Alex Deucher <alexander.deucher@amd.com> +Reviewed-by: Hawking Zhang <Hawking.Zhang@amd.com> +Signed-off-by: Alex Deucher <alexander.deucher@amd.com> +--- + drivers/gpu/drm/amd/powerplay/hwmgr/Makefile | 2 +- + .../gpu/drm/amd/powerplay/hwmgr/common_baco.c | 101 ++++++++++++++++++ + .../gpu/drm/amd/powerplay/hwmgr/common_baco.h | 50 +++++++++ + 3 files changed, 152 insertions(+), 1 deletion(-) + create mode 100644 drivers/gpu/drm/amd/powerplay/hwmgr/common_baco.c + create mode 100644 drivers/gpu/drm/amd/powerplay/hwmgr/common_baco.h + +diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/Makefile b/drivers/gpu/drm/amd/powerplay/hwmgr/Makefile +index ade8973b6f4d..5afec1a138ac 100644 +--- a/drivers/gpu/drm/amd/powerplay/hwmgr/Makefile ++++ b/drivers/gpu/drm/amd/powerplay/hwmgr/Makefile +@@ -35,7 +35,7 @@ HARDWARE_MGR = hwmgr.o processpptables.o \ + vega12_thermal.o \ + pp_overdriver.o smu_helper.o \ + vega20_processpptables.o vega20_hwmgr.o vega20_powertune.o \ +- vega20_thermal.o ++ vega20_thermal.o common_baco.o + + AMD_PP_HWMGR = $(addprefix $(AMD_PP_PATH)/hwmgr/,$(HARDWARE_MGR)) + +diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/common_baco.c b/drivers/gpu/drm/amd/powerplay/hwmgr/common_baco.c +new file mode 100644 +index 000000000000..9c57c1f67749 +--- /dev/null ++++ b/drivers/gpu/drm/amd/powerplay/hwmgr/common_baco.c +@@ -0,0 +1,101 @@ ++/* ++ * Copyright 2018 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 "common_baco.h" ++ ++ ++static bool baco_wait_register(struct pp_hwmgr *hwmgr, u32 reg, u32 mask, u32 value) ++{ ++ struct amdgpu_device *adev = (struct amdgpu_device *)(hwmgr->adev); ++ u32 timeout = 5000, data; ++ ++ do { ++ msleep(1); ++ data = RREG32(reg); ++ timeout--; ++ } while (value != (data & mask) && (timeout != 0)); ++ ++ if (timeout == 0) ++ return false; ++ ++ return true; ++} ++ ++static bool baco_cmd_handler(struct pp_hwmgr *hwmgr, u32 command, u32 reg, u32 mask, ++ u32 shift, u32 value, u32 timeout) ++{ ++ struct amdgpu_device *adev = (struct amdgpu_device *)(hwmgr->adev); ++ u32 data; ++ bool ret = true; ++ ++ switch (command) { ++ case CMD_WRITE: ++ WREG32(reg, value << shift); ++ break; ++ case CMD_READMODIFYWRITE: ++ data = RREG32(reg); ++ data = (data & (~mask)) | (value << shift); ++ WREG32(reg, data); ++ break; ++ case CMD_WAITFOR: ++ ret = baco_wait_register(hwmgr, reg, mask, value); ++ break; ++ case CMD_DELAY_MS: ++ if (timeout) ++ /* Delay in milli Seconds */ ++ msleep(timeout); ++ break; ++ case CMD_DELAY_US: ++ if (timeout) ++ /* Delay in micro Seconds */ ++ udelay(timeout); ++ break; ++ ++ default: ++ dev_warn(adev->dev, "Invalid BACO command.\n"); ++ ret = false; ++ } ++ ++ return ret; ++} ++ ++bool soc15_baco_program_registers(struct pp_hwmgr *hwmgr, ++ const struct soc15_baco_cmd_entry *entry, ++ const u32 array_size) ++{ ++ struct amdgpu_device *adev = (struct amdgpu_device *)(hwmgr->adev); ++ u32 i, reg = 0; ++ ++ for (i = 0; i < array_size; i++) { ++ if ((entry[i].cmd == CMD_WRITE) || ++ (entry[i].cmd == CMD_READMODIFYWRITE) || ++ (entry[i].cmd == CMD_WAITFOR)) ++ reg = adev->reg_offset[entry[i].hwip][entry[i].inst][entry[i].seg] ++ + entry[i].reg_offset; ++ if (!baco_cmd_handler(hwmgr, entry[i].cmd, reg, entry[i].mask, ++ entry[i].shift, entry[i].val, entry[i].timeout)) ++ return false; ++ } ++ ++ return true; ++} +diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/common_baco.h b/drivers/gpu/drm/amd/powerplay/hwmgr/common_baco.h +new file mode 100644 +index 000000000000..95296c916f4e +--- /dev/null ++++ b/drivers/gpu/drm/amd/powerplay/hwmgr/common_baco.h +@@ -0,0 +1,50 @@ ++/* ++ * Copyright 2018 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 __COMMON_BOCO_H__ ++#define __COMMON_BOCO_H__ ++#include "hwmgr.h" ++ ++ ++enum baco_cmd_type { ++ CMD_WRITE = 0, ++ CMD_READMODIFYWRITE, ++ CMD_WAITFOR, ++ CMD_DELAY_MS, ++ CMD_DELAY_US, ++}; ++ ++struct soc15_baco_cmd_entry { ++ enum baco_cmd_type cmd; ++ uint32_t hwip; ++ uint32_t inst; ++ uint32_t seg; ++ uint32_t reg_offset; ++ uint32_t mask; ++ uint32_t shift; ++ uint32_t timeout; ++ uint32_t val; ++}; ++extern bool soc15_baco_program_registers(struct pp_hwmgr *hwmgr, ++ const struct soc15_baco_cmd_entry *entry, ++ const u32 array_size); ++#endif +-- +2.17.1 + |