diff options
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.2/0012-drm-amdgpu-add-mmhub-ras_late_init-callback-function.patch')
-rw-r--r-- | meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.2/0012-drm-amdgpu-add-mmhub-ras_late_init-callback-function.patch | 141 |
1 files changed, 141 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.2/0012-drm-amdgpu-add-mmhub-ras_late_init-callback-function.patch b/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.2/0012-drm-amdgpu-add-mmhub-ras_late_init-callback-function.patch new file mode 100644 index 00000000..36ab9762 --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.2/0012-drm-amdgpu-add-mmhub-ras_late_init-callback-function.patch @@ -0,0 +1,141 @@ +From 2bef766ffb48049a7e9df75a55524ef9c29673ef Mon Sep 17 00:00:00 2001 +From: Hawking Zhang <Hawking.Zhang@amd.com> +Date: Fri, 30 Aug 2019 13:34:38 +0800 +Subject: [PATCH 0012/1453] drm/amdgpu: add mmhub ras_late_init callback + function (v2) + +The function will be called in late init phase to do mmhub +ras init + +v2: check ras_late_init function pointer before invoking the +function + +Signed-off-by: Hawking Zhang <Hawking.Zhang@amd.com> +Reviewed-by: Alex Deucher <alexander.deucher@amd.com> +Reviewed-by: Tao Zhou <tao.zhou1@amd.com> +--- + drivers/gpu/drm/amd/amdgpu/amdgpu_mmhub.h | 1 + + drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c | 26 +++----------------- + drivers/gpu/drm/amd/amdgpu/mmhub_v1_0.c | 30 +++++++++++++++++++++++ + 3 files changed, 35 insertions(+), 22 deletions(-) + +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_mmhub.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_mmhub.h +index 2d75ecfa199b..df04c718dfab 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_mmhub.h ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_mmhub.h +@@ -23,6 +23,7 @@ + + struct amdgpu_mmhub_funcs { + void (*ras_init)(struct amdgpu_device *adev); ++ int (*ras_late_init)(struct amdgpu_device *adev); + void (*query_ras_error_count)(struct amdgpu_device *adev, + void *ras_error_status); + }; +diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c +index 007c2ba75ac1..b4eead9a0f6b 100644 +--- a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c ++++ b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c +@@ -766,7 +766,6 @@ static int gmc_v9_0_ecc_late_init(void *handle) + { + int r; + struct amdgpu_device *adev = (struct amdgpu_device *)handle; +- struct ras_ih_if mmhub_ih_info; + struct ras_fs_if umc_fs_info = { + .sysfs_name = "umc_err_count", + .debugfs_name = "umc_err_inject", +@@ -774,10 +773,6 @@ static int gmc_v9_0_ecc_late_init(void *handle) + struct ras_ih_if umc_ih_info = { + .cb = gmc_v9_0_process_ras_data_cb, + }; +- struct ras_fs_if mmhub_fs_info = { +- .sysfs_name = "mmhub_err_count", +- .debugfs_name = "mmhub_err_inject", +- }; + + if (!adev->gmc.umc_ras_if) { + adev->gmc.umc_ras_if = kmalloc(sizeof(struct ras_common_if), GFP_KERNEL); +@@ -801,29 +796,16 @@ static int gmc_v9_0_ecc_late_init(void *handle) + goto umc_late_fini; + } + +- 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"); ++ if (adev->mmhub_funcs->ras_late_init) { ++ r = adev->mmhub_funcs->ras_late_init(adev); ++ if (r) ++ return r; + } +- 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) +- goto mmhub_late_fini; +- + return 0; +-mmhub_late_fini: +- amdgpu_ras_late_fini(adev, adev->gmc.mmhub_ras_if, &mmhub_ih_info); + umc_late_fini: + amdgpu_ras_late_fini(adev, adev->gmc.umc_ras_if, &umc_ih_info); + free: + kfree(adev->gmc.umc_ras_if); +- kfree(adev->gmc.mmhub_ras_if); + return r; + } + +diff --git a/drivers/gpu/drm/amd/amdgpu/mmhub_v1_0.c b/drivers/gpu/drm/amd/amdgpu/mmhub_v1_0.c +index 04cd4b6f95d4..af15f4b8e3ad 100644 +--- a/drivers/gpu/drm/amd/amdgpu/mmhub_v1_0.c ++++ b/drivers/gpu/drm/amd/amdgpu/mmhub_v1_0.c +@@ -31,6 +31,7 @@ + #include "vega10_enum.h" + + #include "soc15_common.h" ++#include "amdgpu_ras.h" + + #define mmDAGB0_CNTL_MISC2_RV 0x008f + #define mmDAGB0_CNTL_MISC2_RV_BASE_IDX 0 +@@ -615,6 +616,35 @@ 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) ++ kfree(adev->gmc.mmhub_ras_if); ++ return r; ++} ++ + const struct amdgpu_mmhub_funcs mmhub_v1_0_funcs = { ++ .ras_late_init = mmhub_v1_0_ras_late_init, + .query_ras_error_count = mmhub_v1_0_query_ras_error_count, + }; +-- +2.17.1 + |