aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3744-drm-amdgpu-mmhub-switch-to-amdgpu_mmhub_ras_late_ini.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3744-drm-amdgpu-mmhub-switch-to-amdgpu_mmhub_ras_late_ini.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3744-drm-amdgpu-mmhub-switch-to-amdgpu_mmhub_ras_late_ini.patch157
1 files changed, 157 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3744-drm-amdgpu-mmhub-switch-to-amdgpu_mmhub_ras_late_ini.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3744-drm-amdgpu-mmhub-switch-to-amdgpu_mmhub_ras_late_ini.patch
new file mode 100644
index 00000000..cedd2870
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3744-drm-amdgpu-mmhub-switch-to-amdgpu_mmhub_ras_late_ini.patch
@@ -0,0 +1,157 @@
+From f9a34a087619c677c4cf6c33571ea95af27b6214 Mon Sep 17 00:00:00 2001
+From: Hawking Zhang <Hawking.Zhang@amd.com>
+Date: Tue, 3 Sep 2019 06:23:12 +0800
+Subject: [PATCH 3744/4256] drm/amdgpu/mmhub: switch to
+ amdgpu_mmhub_ras_late_init helper function
+
+amdgpu_mmhub_ras_late_init is used to init mmhub specfic
+ras debugfs/sysfs node and mmhub specific interrupt handler.
+It can be shared among mmhub generations
+
+Signed-off-by: Hawking Zhang <Hawking.Zhang@amd.com>
+Reviewed-by: Tao Zhou <tao.zhou1@amd.com>
+---
+ drivers/gpu/drm/amd/amdgpu/Makefile | 6 +--
+ drivers/gpu/drm/amd/amdgpu/amdgpu_mmhub.c | 56 +++++++++++++++++++++++
+ drivers/gpu/drm/amd/amdgpu/amdgpu_mmhub.h | 2 +
+ drivers/gpu/drm/amd/amdgpu/mmhub_v1_0.c | 32 +------------
+ 4 files changed, 62 insertions(+), 34 deletions(-)
+ create mode 100644 drivers/gpu/drm/amd/amdgpu/amdgpu_mmhub.c
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/Makefile b/drivers/gpu/drm/amd/amdgpu/Makefile
+index 5a38934c5c94..3baa143714ab 100644
+--- a/drivers/gpu/drm/amd/amdgpu/Makefile
++++ b/drivers/gpu/drm/amd/amdgpu/Makefile
+@@ -53,9 +53,9 @@ amdgpu-y += amdgpu_device.o amdgpu_kms.o \
+ amdgpu_ucode.o amdgpu_bo_list.o amdgpu_ctx.o amdgpu_sync.o \
+ amdgpu_gtt_mgr.o amdgpu_vram_mgr.o amdgpu_virt.o amdgpu_atomfirmware.o \
+ amdgpu_vf_error.o amdgpu_sched.o amdgpu_debugfs.o amdgpu_ids.o \
+- amdgpu_sem.o amdgpu_gmc.o amdgpu_xgmi.o amdgpu_csa.o amdgpu_ras.o \
+- amdgpu_vm_cpu.o amdgpu_vm_sdma.o amdgpu_pmu.o amdgpu_discovery.o \
+- amdgpu_ras_eeprom.o smu_v11_0_i2c.o
++ amdgpu_gmc.o amdgpu_mmhub.o amdgpu_xgmi.o amdgpu_csa.o amdgpu_sem.o \
++ amdgpu_ras.o amdgpu_vm_cpu.o amdgpu_vm_sdma.o amdgpu_pmu.o \
++ amdgpu_discovery.o amdgpu_ras_eeprom.o smu_v11_0_i2c.o
+
+ amdgpu-$(CONFIG_PERF_EVENTS) += amdgpu_pmu.o
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_mmhub.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_mmhub.c
+new file mode 100644
+index 000000000000..99ef6b1f8526
+--- /dev/null
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_mmhub.c
+@@ -0,0 +1,56 @@
++/*
++ * 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 "amdgpu_ras.h"
++
++int amdgpu_mmhub_ras_late_init(struct amdgpu_device *adev)
++{
++ int r;
++ struct ras_ih_if ih_info = {
++ .cb = NULL,
++ };
++ struct ras_fs_if fs_info = {
++ .sysfs_name = "mmhub_err_count",
++ .debugfs_name = "mmhub_err_inject",
++ };
++
++ if (!adev->gmc.mmhub_ras_if) {
++ adev->gmc.mmhub_ras_if = kmalloc(sizeof(struct ras_common_if), GFP_KERNEL);
++ if (!adev->gmc.mmhub_ras_if)
++ return -ENOMEM;
++ adev->gmc.mmhub_ras_if->block = AMDGPU_RAS_BLOCK__MMHUB;
++ adev->gmc.mmhub_ras_if->type = AMDGPU_RAS_ERROR__MULTI_UNCORRECTABLE;
++ adev->gmc.mmhub_ras_if->sub_block_index = 0;
++ strcpy(adev->gmc.mmhub_ras_if->name, "mmhub");
++ }
++ ih_info.head = fs_info.head = *adev->gmc.mmhub_ras_if;
++ r = amdgpu_ras_late_init(adev, adev->gmc.mmhub_ras_if,
++ &fs_info, &ih_info);
++ if (r || !amdgpu_ras_is_supported(adev, adev->gmc.mmhub_ras_if->block)) {
++ kfree(adev->gmc.mmhub_ras_if);
++ adev->gmc.mmhub_ras_if = NULL;
++ }
++
++ return r;
++}
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_mmhub.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_mmhub.h
+index df04c718dfab..685e54e58700 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_mmhub.h
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_mmhub.h
+@@ -28,5 +28,7 @@ struct amdgpu_mmhub_funcs {
+ void *ras_error_status);
+ };
+
++int amdgpu_mmhub_ras_late_init(struct amdgpu_device *adev);
++
+ #endif
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/mmhub_v1_0.c b/drivers/gpu/drm/amd/amdgpu/mmhub_v1_0.c
+index 57aae096947d..85fdd47e015f 100644
+--- a/drivers/gpu/drm/amd/amdgpu/mmhub_v1_0.c
++++ b/drivers/gpu/drm/amd/amdgpu/mmhub_v1_0.c
+@@ -618,37 +618,7 @@ static void mmhub_v1_0_query_ras_error_count(struct amdgpu_device *adev,
+ }
+ }
+
+-static int mmhub_v1_0_ras_late_init(struct amdgpu_device *adev)
+-{
+- int r;
+- struct ras_ih_if mmhub_ih_info = {
+- .cb = NULL,
+- };
+- struct ras_fs_if mmhub_fs_info = {
+- .sysfs_name = "mmhub_err_count",
+- .debugfs_name = "mmhub_err_inject",
+- };
+-
+- if (!adev->gmc.mmhub_ras_if) {
+- adev->gmc.mmhub_ras_if = kmalloc(sizeof(struct ras_common_if), GFP_KERNEL);
+- if (!adev->gmc.mmhub_ras_if)
+- return -ENOMEM;
+- adev->gmc.mmhub_ras_if->block = AMDGPU_RAS_BLOCK__MMHUB;
+- adev->gmc.mmhub_ras_if->type = AMDGPU_RAS_ERROR__MULTI_UNCORRECTABLE;
+- adev->gmc.mmhub_ras_if->sub_block_index = 0;
+- strcpy(adev->gmc.mmhub_ras_if->name, "mmhub");
+- }
+- mmhub_ih_info.head = mmhub_fs_info.head = *adev->gmc.mmhub_ras_if;
+- r = amdgpu_ras_late_init(adev, adev->gmc.mmhub_ras_if,
+- &mmhub_fs_info, &mmhub_ih_info);
+- if (r || !amdgpu_ras_is_supported(adev, adev->gmc.mmhub_ras_if->block)) {
+- kfree(adev->gmc.mmhub_ras_if);
+- adev->gmc.mmhub_ras_if = NULL;
+- }
+- return r;
+-}
+-
+ const struct amdgpu_mmhub_funcs mmhub_v1_0_funcs = {
+- .ras_late_init = mmhub_v1_0_ras_late_init,
++ .ras_late_init = amdgpu_mmhub_ras_late_init,
+ .query_ras_error_count = mmhub_v1_0_query_ras_error_count,
+ };
+--
+2.17.1
+