diff options
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.patch | 157 |
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 + |