aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3657-drm-amdgpu-nbio-add-functions-to-query-ras-specific-.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3657-drm-amdgpu-nbio-add-functions-to-query-ras-specific-.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3657-drm-amdgpu-nbio-add-functions-to-query-ras-specific-.patch82
1 files changed, 82 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3657-drm-amdgpu-nbio-add-functions-to-query-ras-specific-.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3657-drm-amdgpu-nbio-add-functions-to-query-ras-specific-.patch
new file mode 100644
index 00000000..897ecf20
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3657-drm-amdgpu-nbio-add-functions-to-query-ras-specific-.patch
@@ -0,0 +1,82 @@
+From cc0ce0007f8ee6749ec5e6ed63532fbfa65c1305 Mon Sep 17 00:00:00 2001
+From: Hawking Zhang <Hawking.Zhang@amd.com>
+Date: Thu, 30 May 2019 11:57:20 +0800
+Subject: [PATCH 3657/4256] drm/amdgpu/nbio: add functions to query ras
+ specific interrupt status
+
+ras_controller_interrupt and err_event_interrupt are ras specific interrupts.
+add functions to check their status and ack them if they are generated. both
+funcitons should only be invoked in ISR when BIF ring is disabled or even not
+initialized.
+
+Signed-off-by: Hawking Zhang <Hawking.Zhang@amd.com>
+Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
+---
+ drivers/gpu/drm/amd/amdgpu/amdgpu_nbio.h | 2 ++
+ drivers/gpu/drm/amd/amdgpu/nbio_v7_4.c | 32 ++++++++++++++++++++++++
+ 2 files changed, 34 insertions(+)
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_nbio.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_nbio.h
+index 0563476b1242..28417e485c58 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_nbio.h
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_nbio.h
+@@ -77,6 +77,8 @@ struct amdgpu_nbio_funcs {
+ void (*init_registers)(struct amdgpu_device *adev);
+ void (*detect_hw_virt)(struct amdgpu_device *adev);
+ void (*remap_hdp_registers)(struct amdgpu_device *adev);
++ void (*handle_ras_controller_intr_no_bifring)(struct amdgpu_device *adev);
++ void (*handle_ras_err_event_athub_intr_no_bifring)(struct amdgpu_device *adev);
+ };
+
+ struct amdgpu_nbio {
+diff --git a/drivers/gpu/drm/amd/amdgpu/nbio_v7_4.c b/drivers/gpu/drm/amd/amdgpu/nbio_v7_4.c
+index c416ab8ab1c3..6ecdd5e3ca3f 100644
+--- a/drivers/gpu/drm/amd/amdgpu/nbio_v7_4.c
++++ b/drivers/gpu/drm/amd/amdgpu/nbio_v7_4.c
+@@ -315,6 +315,36 @@ static void nbio_v7_4_init_registers(struct amdgpu_device *adev)
+ WREG32_PCIE(smnPCIE_CI_CNTL, data);
+ }
+
++static void nbio_v7_4_handle_ras_controller_intr_no_bifring(struct amdgpu_device *adev)
++{
++ uint32_t bif_doorbell_intr_cntl;
++
++ bif_doorbell_intr_cntl = RREG32_SOC15(NBIO, 0, mmBIF_DOORBELL_INT_CNTL);
++ if (REG_GET_FIELD(bif_doorbell_intr_cntl,
++ BIF_DOORBELL_INT_CNTL, RAS_CNTLR_INTERRUPT_STATUS)) {
++ /* driver has to clear the interrupt status when bif ring is disabled */
++ bif_doorbell_intr_cntl = REG_SET_FIELD(bif_doorbell_intr_cntl,
++ BIF_DOORBELL_INT_CNTL,
++ RAS_CNTLR_INTERRUPT_CLEAR, 1);
++ WREG32_SOC15(NBIO, 0, mmBIF_DOORBELL_INT_CNTL, bif_doorbell_intr_cntl);
++ }
++}
++
++static void nbio_v7_4_handle_ras_err_event_athub_intr_no_bifring(struct amdgpu_device *adev)
++{
++ uint32_t bif_doorbell_intr_cntl;
++
++ bif_doorbell_intr_cntl = RREG32_SOC15(NBIO, 0, mmBIF_DOORBELL_INT_CNTL);
++ if (REG_GET_FIELD(bif_doorbell_intr_cntl,
++ BIF_DOORBELL_INT_CNTL, RAS_ATHUB_ERR_EVENT_INTERRUPT_STATUS)) {
++ /* driver has to clear the interrupt status when bif ring is disabled */
++ bif_doorbell_intr_cntl = REG_SET_FIELD(bif_doorbell_intr_cntl,
++ BIF_DOORBELL_INT_CNTL,
++ RAS_ATHUB_ERR_EVENT_INTERRUPT_CLEAR, 1);
++ WREG32_SOC15(NBIO, 0, mmBIF_DOORBELL_INT_CNTL, bif_doorbell_intr_cntl);
++ }
++}
++
+ const struct amdgpu_nbio_funcs nbio_v7_4_funcs = {
+ .get_hdp_flush_req_offset = nbio_v7_4_get_hdp_flush_req_offset,
+ .get_hdp_flush_done_offset = nbio_v7_4_get_hdp_flush_done_offset,
+@@ -336,4 +366,6 @@ const struct amdgpu_nbio_funcs nbio_v7_4_funcs = {
+ .init_registers = nbio_v7_4_init_registers,
+ .detect_hw_virt = nbio_v7_4_detect_hw_virt,
+ .remap_hdp_registers = nbio_v7_4_remap_hdp_registers,
++ .handle_ras_controller_intr_no_bifring = nbio_v7_4_handle_ras_controller_intr_no_bifring,
++ .handle_ras_err_event_athub_intr_no_bifring = nbio_v7_4_handle_ras_err_event_athub_intr_no_bifring,
+ };
+--
+2.17.1
+