aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3671-drm-amd-pp-Remove-the-wrap-functions-for-acpi-in-pow.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3671-drm-amd-pp-Remove-the-wrap-functions-for-acpi-in-pow.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3671-drm-amd-pp-Remove-the-wrap-functions-for-acpi-in-pow.patch500
1 files changed, 500 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3671-drm-amd-pp-Remove-the-wrap-functions-for-acpi-in-pow.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3671-drm-amd-pp-Remove-the-wrap-functions-for-acpi-in-pow.patch
new file mode 100644
index 00000000..eace1993
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3671-drm-amd-pp-Remove-the-wrap-functions-for-acpi-in-pow.patch
@@ -0,0 +1,500 @@
+From ef726996a1ac35d83fb25357aadae384ecfc99bf Mon Sep 17 00:00:00 2001
+From: Rex Zhu <Rex.Zhu@amd.com>
+Date: Tue, 27 Feb 2018 18:28:54 +0800
+Subject: [PATCH 3671/4131] drm/amd/pp: Remove the wrap functions for acpi in
+ powerplay
+
+Change-Id: I0712c268437780d5929fea97650d97c1cf8e5905
+Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Rex Zhu <Rex.Zhu@amd.com>
+---
+ drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c | 212 --------------------------
+ drivers/gpu/drm/amd/include/cgs_common.h | 44 ------
+ drivers/gpu/drm/amd/powerplay/hwmgr/Makefile | 2 +-
+ drivers/gpu/drm/amd/powerplay/hwmgr/pp_acpi.c | 114 --------------
+ drivers/gpu/drm/amd/powerplay/inc/pp_acpi.h | 26 ----
+ 5 files changed, 1 insertion(+), 397 deletions(-)
+ delete mode 100644 drivers/gpu/drm/amd/powerplay/hwmgr/pp_acpi.c
+ delete mode 100644 drivers/gpu/drm/amd/powerplay/inc/pp_acpi.h
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c
+index 9d6e1b0..795be958 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c
+@@ -24,7 +24,6 @@
+ #include <linux/list.h>
+ #include <linux/slab.h>
+ #include <linux/pci.h>
+-#include <linux/acpi.h>
+ #include <drm/drmP.h>
+ #include <linux/firmware.h>
+ #include <drm/amdgpu_drm.h>
+@@ -964,216 +963,6 @@ static int amdgpu_cgs_notify_dpm_enabled(struct cgs_device *cgs_device, bool ena
+ return 0;
+ }
+
+-/** \brief evaluate acpi namespace object, handle or pathname must be valid
+- * \param cgs_device
+- * \param info input/output arguments for the control method
+- * \return status
+- */
+-
+-#if defined(CONFIG_ACPI)
+-static int amdgpu_cgs_acpi_eval_object(struct cgs_device *cgs_device,
+- struct cgs_acpi_method_info *info)
+-{
+- CGS_FUNC_ADEV;
+- acpi_handle handle;
+- struct acpi_object_list input;
+- struct acpi_buffer output = { ACPI_ALLOCATE_BUFFER, NULL };
+- union acpi_object *params, *obj;
+- uint8_t name[5] = {'\0'};
+- struct cgs_acpi_method_argument *argument;
+- uint32_t i, count;
+- acpi_status status;
+- int result;
+-
+- handle = ACPI_HANDLE(&adev->pdev->dev);
+- if (!handle)
+- return -ENODEV;
+-
+- memset(&input, 0, sizeof(struct acpi_object_list));
+-
+- /* validate input info */
+- if (info->size != sizeof(struct cgs_acpi_method_info))
+- return -EINVAL;
+-
+- input.count = info->input_count;
+- if (info->input_count > 0) {
+- if (info->pinput_argument == NULL)
+- return -EINVAL;
+- argument = info->pinput_argument;
+- for (i = 0; i < info->input_count; i++) {
+- if (((argument->type == ACPI_TYPE_STRING) ||
+- (argument->type == ACPI_TYPE_BUFFER)) &&
+- (argument->pointer == NULL))
+- return -EINVAL;
+- argument++;
+- }
+- }
+-
+- if (info->output_count > 0) {
+- if (info->poutput_argument == NULL)
+- return -EINVAL;
+- argument = info->poutput_argument;
+- for (i = 0; i < info->output_count; i++) {
+- if (((argument->type == ACPI_TYPE_STRING) ||
+- (argument->type == ACPI_TYPE_BUFFER))
+- && (argument->pointer == NULL))
+- return -EINVAL;
+- argument++;
+- }
+- }
+-
+- /* The path name passed to acpi_evaluate_object should be null terminated */
+- if ((info->field & CGS_ACPI_FIELD_METHOD_NAME) != 0) {
+- strncpy(name, (char *)&(info->name), sizeof(uint32_t));
+- name[4] = '\0';
+- }
+-
+- /* parse input parameters */
+- if (input.count > 0) {
+- input.pointer = params =
+- kzalloc(sizeof(union acpi_object) * input.count, GFP_KERNEL);
+- if (params == NULL)
+- return -EINVAL;
+-
+- argument = info->pinput_argument;
+-
+- for (i = 0; i < input.count; i++) {
+- params->type = argument->type;
+- switch (params->type) {
+- case ACPI_TYPE_INTEGER:
+- params->integer.value = argument->value;
+- break;
+- case ACPI_TYPE_STRING:
+- params->string.length = argument->data_length;
+- params->string.pointer = argument->pointer;
+- break;
+- case ACPI_TYPE_BUFFER:
+- params->buffer.length = argument->data_length;
+- params->buffer.pointer = argument->pointer;
+- break;
+- default:
+- break;
+- }
+- params++;
+- argument++;
+- }
+- }
+-
+- /* parse output info */
+- count = info->output_count;
+- argument = info->poutput_argument;
+-
+- /* evaluate the acpi method */
+- status = acpi_evaluate_object(handle, name, &input, &output);
+-
+- if (ACPI_FAILURE(status)) {
+- result = -EIO;
+- goto free_input;
+- }
+-
+- /* return the output info */
+- obj = output.pointer;
+-
+- if (count > 1) {
+- if ((obj->type != ACPI_TYPE_PACKAGE) ||
+- (obj->package.count != count)) {
+- result = -EIO;
+- goto free_obj;
+- }
+- params = obj->package.elements;
+- } else
+- params = obj;
+-
+- if (params == NULL) {
+- result = -EIO;
+- goto free_obj;
+- }
+-
+- for (i = 0; i < count; i++) {
+- if (argument->type != params->type) {
+- result = -EIO;
+- goto free_obj;
+- }
+- switch (params->type) {
+- case ACPI_TYPE_INTEGER:
+- argument->value = params->integer.value;
+- break;
+- case ACPI_TYPE_STRING:
+- if ((params->string.length != argument->data_length) ||
+- (params->string.pointer == NULL)) {
+- result = -EIO;
+- goto free_obj;
+- }
+- strncpy(argument->pointer,
+- params->string.pointer,
+- params->string.length);
+- break;
+- case ACPI_TYPE_BUFFER:
+- if (params->buffer.pointer == NULL) {
+- result = -EIO;
+- goto free_obj;
+- }
+- memcpy(argument->pointer,
+- params->buffer.pointer,
+- argument->data_length);
+- break;
+- default:
+- break;
+- }
+- argument++;
+- params++;
+- }
+-
+- result = 0;
+-free_obj:
+- kfree(obj);
+-free_input:
+- kfree((void *)input.pointer);
+- return result;
+-}
+-#else
+-static int amdgpu_cgs_acpi_eval_object(struct cgs_device *cgs_device,
+- struct cgs_acpi_method_info *info)
+-{
+- return -EIO;
+-}
+-#endif
+-
+-static int amdgpu_cgs_call_acpi_method(struct cgs_device *cgs_device,
+- uint32_t acpi_method,
+- uint32_t acpi_function,
+- void *pinput, void *poutput,
+- uint32_t output_count,
+- uint32_t input_size,
+- uint32_t output_size)
+-{
+- struct cgs_acpi_method_argument acpi_input[2] = { {0}, {0} };
+- struct cgs_acpi_method_argument acpi_output = {0};
+- struct cgs_acpi_method_info info = {0};
+-
+- acpi_input[0].type = CGS_ACPI_TYPE_INTEGER;
+- acpi_input[0].data_length = sizeof(uint32_t);
+- acpi_input[0].value = acpi_function;
+-
+- acpi_input[1].type = CGS_ACPI_TYPE_BUFFER;
+- acpi_input[1].data_length = input_size;
+- acpi_input[1].pointer = pinput;
+-
+- acpi_output.type = CGS_ACPI_TYPE_BUFFER;
+- acpi_output.data_length = output_size;
+- acpi_output.pointer = poutput;
+-
+- info.size = sizeof(struct cgs_acpi_method_info);
+- info.field = CGS_ACPI_FIELD_METHOD_NAME | CGS_ACPI_FIELD_INPUT_ARGUMENT_COUNT;
+- info.input_count = 2;
+- info.name = acpi_method;
+- info.pinput_argument = acpi_input;
+- info.output_count = output_count;
+- info.poutput_argument = &acpi_output;
+-
+- return amdgpu_cgs_acpi_eval_object(cgs_device, &info);
+-}
+-
+ static int amdgpu_cgs_set_temperature_range(struct cgs_device *cgs_device,
+ int min_temperature,
+ int max_temperature)
+@@ -1207,7 +996,6 @@ static const struct cgs_ops amdgpu_cgs_ops = {
+ .set_clockgating_state = amdgpu_cgs_set_clockgating_state,
+ .get_active_displays_info = amdgpu_cgs_get_active_displays_info,
+ .notify_dpm_enabled = amdgpu_cgs_notify_dpm_enabled,
+- .call_acpi_method = amdgpu_cgs_call_acpi_method,
+ .query_system_info = amdgpu_cgs_query_system_info,
+ .is_virtualization_enabled = amdgpu_cgs_is_virtualization_enabled,
+ .enter_safe_mode = amdgpu_cgs_enter_safe_mode,
+diff --git a/drivers/gpu/drm/amd/include/cgs_common.h b/drivers/gpu/drm/amd/include/cgs_common.h
+index e5b4823..851168b 100644
+--- a/drivers/gpu/drm/amd/include/cgs_common.h
++++ b/drivers/gpu/drm/amd/include/cgs_common.h
+@@ -157,38 +157,6 @@ struct cgs_display_info {
+
+ typedef unsigned long cgs_handle_t;
+
+-#define CGS_ACPI_METHOD_ATCS 0x53435441
+-#define CGS_ACPI_METHOD_ATIF 0x46495441
+-#define CGS_ACPI_METHOD_ATPX 0x58505441
+-#define CGS_ACPI_FIELD_METHOD_NAME 0x00000001
+-#define CGS_ACPI_FIELD_INPUT_ARGUMENT_COUNT 0x00000002
+-#define CGS_ACPI_MAX_BUFFER_SIZE 256
+-#define CGS_ACPI_TYPE_ANY 0x00
+-#define CGS_ACPI_TYPE_INTEGER 0x01
+-#define CGS_ACPI_TYPE_STRING 0x02
+-#define CGS_ACPI_TYPE_BUFFER 0x03
+-#define CGS_ACPI_TYPE_PACKAGE 0x04
+-
+-struct cgs_acpi_method_argument {
+- uint32_t type;
+- uint32_t data_length;
+- union{
+- uint32_t value;
+- void *pointer;
+- };
+-};
+-
+-struct cgs_acpi_method_info {
+- uint32_t size;
+- uint32_t field;
+- uint32_t input_count;
+- uint32_t name;
+- struct cgs_acpi_method_argument *pinput_argument;
+- uint32_t output_count;
+- struct cgs_acpi_method_argument *poutput_argument;
+- uint32_t padding[9];
+-};
+-
+ /**
+ * cgs_alloc_gpu_mem() - Allocate GPU memory
+ * @cgs_device: opaque device handle
+@@ -407,14 +375,6 @@ typedef int(*cgs_get_active_displays_info)(
+
+ typedef int (*cgs_notify_dpm_enabled)(struct cgs_device *cgs_device, bool enabled);
+
+-typedef int (*cgs_call_acpi_method)(struct cgs_device *cgs_device,
+- uint32_t acpi_method,
+- uint32_t acpi_function,
+- void *pinput, void *poutput,
+- uint32_t output_count,
+- uint32_t input_size,
+- uint32_t output_size);
+-
+ typedef int (*cgs_query_system_info)(struct cgs_device *cgs_device,
+ struct cgs_system_info *sys_info);
+
+@@ -456,8 +416,6 @@ struct cgs_ops {
+ cgs_get_active_displays_info get_active_displays_info;
+ /* notify dpm enabled */
+ cgs_notify_dpm_enabled notify_dpm_enabled;
+- /* ACPI */
+- cgs_call_acpi_method call_acpi_method;
+ /* get system info */
+ cgs_query_system_info query_system_info;
+ cgs_is_virtualization_enabled_t is_virtualization_enabled;
+@@ -525,8 +483,6 @@ struct cgs_device
+ #define cgs_get_active_displays_info(dev, info) \
+ CGS_CALL(get_active_displays_info, dev, info)
+
+-#define cgs_call_acpi_method(dev, acpi_method, acpi_function, pintput, poutput, output_count, input_size, output_size) \
+- CGS_CALL(call_acpi_method, dev, acpi_method, acpi_function, pintput, poutput, output_count, input_size, output_size)
+ #define cgs_query_system_info(dev, sys_info) \
+ CGS_CALL(query_system_info, dev, sys_info)
+ #define cgs_get_pci_resource(cgs_device, resource_type, size, offset, \
+diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/Makefile b/drivers/gpu/drm/amd/powerplay/hwmgr/Makefile
+index 824fb6f..aa150c9 100644
+--- a/drivers/gpu/drm/amd/powerplay/hwmgr/Makefile
++++ b/drivers/gpu/drm/amd/powerplay/hwmgr/Makefile
+@@ -4,7 +4,7 @@
+ # It provides the hardware management services for the driver.
+
+ HARDWARE_MGR = hwmgr.o processpptables.o \
+- hardwaremanager.o pp_acpi.o cz_hwmgr.o \
++ hardwaremanager.o cz_hwmgr.o \
+ cz_clockpowergating.o pppcielanes.o\
+ process_pptables_v1_0.o ppatomctrl.o ppatomfwctrl.o \
+ smu7_hwmgr.o smu7_powertune.o smu7_thermal.o \
+diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/pp_acpi.c b/drivers/gpu/drm/amd/powerplay/hwmgr/pp_acpi.c
+deleted file mode 100644
+index f6b4dd9..0000000
+--- a/drivers/gpu/drm/amd/powerplay/hwmgr/pp_acpi.c
++++ /dev/null
+@@ -1,114 +0,0 @@
+-/*
+- * Copyright 2016 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 <linux/delay.h>
+-#include <linux/errno.h>
+-#include "hwmgr.h"
+-#include "amd_acpi.h"
+-#include "pp_acpi.h"
+-
+-bool acpi_atcs_functions_supported(void *device, uint32_t index)
+-{
+- int32_t result;
+- struct atcs_verify_interface output_buf = {0};
+-
+- int32_t temp_buffer = 1;
+-
+- result = cgs_call_acpi_method(device, CGS_ACPI_METHOD_ATCS,
+- ATCS_FUNCTION_VERIFY_INTERFACE,
+- &temp_buffer,
+- &output_buf,
+- 1,
+- sizeof(temp_buffer),
+- sizeof(output_buf));
+-
+- return result == 0 ? (output_buf.function_bits & (1 << (index - 1))) != 0 : false;
+-}
+-
+-bool acpi_atcs_notify_pcie_device_ready(void *device)
+-{
+- int32_t temp_buffer = 1;
+-
+- return cgs_call_acpi_method(device, CGS_ACPI_METHOD_ATCS,
+- ATCS_FUNCTION_PCIE_DEVICE_READY_NOTIFICATION,
+- &temp_buffer,
+- NULL,
+- 0,
+- sizeof(temp_buffer),
+- 0);
+-}
+-
+-
+-int acpi_pcie_perf_request(void *device, uint8_t perf_req, bool advertise)
+-{
+- struct atcs_pref_req_input atcs_input;
+- struct atcs_pref_req_output atcs_output;
+- u32 retry = 3;
+- int result;
+- struct cgs_system_info info = {0};
+-
+- if (acpi_atcs_notify_pcie_device_ready(device))
+- return -EINVAL;
+-
+- info.size = sizeof(struct cgs_system_info);
+- info.info_id = CGS_SYSTEM_INFO_ADAPTER_BDF_ID;
+- result = cgs_query_system_info(device, &info);
+- if (result != 0)
+- return -EINVAL;
+- atcs_input.client_id = (uint16_t)info.value;
+- atcs_input.size = sizeof(struct atcs_pref_req_input);
+- atcs_input.valid_flags_mask = ATCS_VALID_FLAGS_MASK;
+- atcs_input.flags = ATCS_WAIT_FOR_COMPLETION;
+- if (advertise)
+- atcs_input.flags |= ATCS_ADVERTISE_CAPS;
+- atcs_input.req_type = ATCS_PCIE_LINK_SPEED;
+- atcs_input.perf_req = perf_req;
+-
+- atcs_output.size = sizeof(struct atcs_pref_req_input);
+-
+- while (retry--) {
+- result = cgs_call_acpi_method(device,
+- CGS_ACPI_METHOD_ATCS,
+- ATCS_FUNCTION_PCIE_PERFORMANCE_REQUEST,
+- &atcs_input,
+- &atcs_output,
+- 1,
+- sizeof(atcs_input),
+- sizeof(atcs_output));
+- if (result != 0)
+- return -EIO;
+-
+- switch (atcs_output.ret_val) {
+- case ATCS_REQUEST_REFUSED:
+- default:
+- return -EINVAL;
+- case ATCS_REQUEST_COMPLETE:
+- return 0;
+- case ATCS_REQUEST_IN_PROGRESS:
+- udelay(10);
+- break;
+- }
+- }
+-
+- return 0;
+-}
+diff --git a/drivers/gpu/drm/amd/powerplay/inc/pp_acpi.h b/drivers/gpu/drm/amd/powerplay/inc/pp_acpi.h
+deleted file mode 100644
+index 8fe8ba9..0000000
+--- a/drivers/gpu/drm/amd/powerplay/inc/pp_acpi.h
++++ /dev/null
+@@ -1,26 +0,0 @@
+-/*
+- * Copyright 2015 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.
+- *
+- */
+-
+-bool acpi_atcs_functions_supported(void *device, uint32_t index);
+-int acpi_pcie_perf_request(void *device, uint8_t perf_req, bool advertise);
+-bool acpi_atcs_notify_pcie_device_ready(void *device);
+--
+2.7.4
+