aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/1090-drm-amdpgu-add-common-functions-for-BACO-feature-in-.patch
diff options
context:
space:
mode:
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-.patch199
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
+