[PATCH 2/2] drm/amdgpu: Add pci usage to nbio v7.9

Zhang, Hawking Hawking.Zhang at amd.com
Wed Aug 9 08:40:04 UTC 2023


[AMD Official Use Only - General]

Series is

Reviewed-by: Hawking Zhang <Hawking.Zhang at amd.com>

Regards,
Hawking
-----Original Message-----
From: Kamal, Asad <Asad.Kamal at amd.com>
Sent: Wednesday, August 9, 2023 16:30
To: amd-gfx at lists.freedesktop.org
Cc: Kamal, Asad <Asad.Kamal at amd.com>; Zhang, Hawking <Hawking.Zhang at amd.com>; Lazar, Lijo <Lijo.Lazar at amd.com>; Zhang, Morris <Shiwu.Zhang at amd.com>
Subject: [PATCH 2/2] drm/amdgpu: Add pci usage to nbio v7.9

Add implementation to get pcie usage for nbio v7.9.

Signed-off-by: Asad Kamal <asad.kamal at amd.com>
Reviewed-by: Lijo Lazar <lijo.lazar at amd.com>
Reviewed-by: Shiwu Zhang <shiwu.zhang at amd.com>
---
 drivers/gpu/drm/amd/amdgpu/nbio_v7_9.c        | 63 +++++++++++++++++++
 drivers/gpu/drm/amd/amdgpu/soc15.c            |  2 +-
 .../asic_reg/nbio/nbio_7_9_0_sh_mask.h        |  8 +++
 3 files changed, 72 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/nbio_v7_9.c b/drivers/gpu/drm/amd/amdgpu/nbio_v7_9.c
index cd1a02d30420..77c9625dfb8e 100644
--- a/drivers/gpu/drm/amd/amdgpu/nbio_v7_9.c
+++ b/drivers/gpu/drm/amd/amdgpu/nbio_v7_9.c
@@ -32,6 +32,15 @@

 #define NPS_MODE_MASK 0x000000FFL

+#define smnPCIE_PERF_CNTL_TXCLK3               0x1A38021c
+#define smnPCIE_PERF_CNTL_TXCLK7               0x1A380888
+#define smnPCIE_PERF_COUNT_CNTL                        0x1A380200
+#define smnPCIE_PERF_COUNT0_TXCLK3             0x1A380220
+#define smnPCIE_PERF_COUNT0_TXCLK7             0x1A38088C
+#define smnPCIE_PERF_COUNT0_UPVAL_TXCLK3       0x1A3808F8
+#define smnPCIE_PERF_COUNT0_UPVAL_TXCLK7       0x1A380918
+
+
 static void nbio_v7_9_remap_hdp_registers(struct amdgpu_device *adev)  {
        WREG32_SOC15(NBIO, 0, regBIF_BX0_REMAP_HDP_MEM_FLUSH_CNTL,
@@ -427,6 +436,59 @@ static void nbio_v7_9_init_registers(struct amdgpu_device *adev)
        }
 }

+static void nbio_v7_9_get_pcie_usage(struct amdgpu_device *adev, uint64_t *count0,
+                                    uint64_t *count1)
+{
+       uint32_t perfctrrx = 0;
+       uint32_t perfctrtx = 0;
+
+       /* This reports 0 on APUs, so return to avoid writing/reading registers
+        * that may or may not be different from their GPU counterparts
+        */
+       if (adev->flags & AMD_IS_APU)
+               return;
+
+       /* Use TXCLK3 counter group for rx event */
+       /* Use TXCLK7 counter group for tx event */
+       /* Set the 2 events that we wish to watch, defined above */
+       /* 40 is event# for received msgs */
+       /* 2 is event# of posted requests sent */
+       perfctrrx = REG_SET_FIELD(perfctrrx, PCIE_PERF_CNTL_TXCLK3, EVENT0_SEL, 40);
+       perfctrtx = REG_SET_FIELD(perfctrtx, PCIE_PERF_CNTL_TXCLK7,
+EVENT0_SEL, 2);
+
+       /* Write to enable desired perf counters */
+       WREG32_PCIE(smnPCIE_PERF_CNTL_TXCLK3, perfctrrx);
+       WREG32_PCIE(smnPCIE_PERF_CNTL_TXCLK7, perfctrtx);
+
+       /* Zero out and enable SHADOW_WR
+        * Write 0x6:
+        * Bit 1 = Global Shadow wr(1)
+        * Bit 2 = Global counter reset enable(1)
+        */
+       WREG32_PCIE(smnPCIE_PERF_COUNT_CNTL, 0x00000006);
+
+       /* Enable Gloabl Counter
+        * Write 0x1:
+        * Bit 0 = Global Counter Enable(1)
+        */
+       WREG32_PCIE(smnPCIE_PERF_COUNT_CNTL, 0x00000001);
+
+       msleep(1000);
+
+       /* Disable Global Counter, Reset and enable SHADOW_WR
+        * Write 0x6:
+        * Bit 1 = Global Shadow wr(1)
+        * Bit 2 = Global counter reset enable(1)
+        */
+       WREG32_PCIE(smnPCIE_PERF_COUNT_CNTL, 0x00000006);
+
+       /* Get the upper and lower count  */
+       *count0 = RREG32_PCIE(smnPCIE_PERF_COUNT0_TXCLK3) |
+                 ((uint64_t)RREG32_PCIE(smnPCIE_PERF_COUNT0_UPVAL_TXCLK3) << 32);
+       *count1 = RREG32_PCIE(smnPCIE_PERF_COUNT0_TXCLK7) |
+                 ((uint64_t)RREG32_PCIE(smnPCIE_PERF_COUNT0_UPVAL_TXCLK7) << 32); }
+
 const struct amdgpu_nbio_funcs nbio_v7_9_funcs = {
        .get_hdp_flush_req_offset = nbio_v7_9_get_hdp_flush_req_offset,
        .get_hdp_flush_done_offset = nbio_v7_9_get_hdp_flush_done_offset,
@@ -450,4 +512,5 @@ const struct amdgpu_nbio_funcs nbio_v7_9_funcs = {
        .get_compute_partition_mode = nbio_v7_9_get_compute_partition_mode,
        .get_memory_partition_mode = nbio_v7_9_get_memory_partition_mode,
        .init_registers = nbio_v7_9_init_registers,
+       .get_pcie_usage = nbio_v7_9_get_pcie_usage,
 };
diff --git a/drivers/gpu/drm/amd/amdgpu/soc15.c b/drivers/gpu/drm/amd/amdgpu/soc15.c
index afcaeadda4c7..4b8dce091bcd 100644
--- a/drivers/gpu/drm/amd/amdgpu/soc15.c
+++ b/drivers/gpu/drm/amd/amdgpu/soc15.c
@@ -893,7 +893,7 @@ static const struct amdgpu_asic_funcs aqua_vanjaram_asic_funcs =
        .get_config_memsize = &soc15_get_config_memsize,
        .need_full_reset = &soc15_need_full_reset,
        .init_doorbell_index = &aqua_vanjaram_doorbell_index_init,
-       .get_pcie_usage = &vega20_get_pcie_usage,
+       .get_pcie_usage = &amdgpu_nbio_get_pcie_usage,
        .need_reset_on_init = &soc15_need_reset_on_init,
        .get_pcie_replay_count = &soc15_get_pcie_replay_count,
        .supports_baco = &soc15_supports_baco, diff --git a/drivers/gpu/drm/amd/include/asic_reg/nbio/nbio_7_9_0_sh_mask.h b/drivers/gpu/drm/amd/include/asic_reg/nbio/nbio_7_9_0_sh_mask.h
index a22481e7bcdb..e0c28c29ddb0 100644
--- a/drivers/gpu/drm/amd/include/asic_reg/nbio/nbio_7_9_0_sh_mask.h
+++ b/drivers/gpu/drm/amd/include/asic_reg/nbio/nbio_7_9_0_sh_mask.h
@@ -38896,5 +38896,13 @@
 #define RCC_DEV0_EPF0_VF7_GFXMSIX_PBA__MSIX_PENDING_BITS_0_MASK                                               0x00000001L
 #define RCC_DEV0_EPF0_VF7_GFXMSIX_PBA__MSIX_PENDING_BITS_1_MASK                                               0x00000002L

+//PCIE_PERF_CNTL_TXCLK3
+#define PCIE_PERF_CNTL_TXCLK3__EVENT0_SEL__SHIFT                                                             0x0
+#define PCIE_PERF_CNTL_TXCLK3__EVENT0_SEL_MASK                                                               0x000000FFL
+
+//PCIE_PERF_CNTL_TXCLK7
+#define PCIE_PERF_CNTL_TXCLK7__EVENT0_SEL__SHIFT                                                             0x0
+#define PCIE_PERF_CNTL_TXCLK7__EVENT0_SEL_MASK                                                               0x000000FFL
+

 #endif
--
2.34.1



More information about the amd-gfx mailing list