11// Copyright (c) 2018-2025 Advanced Micro Devices, Inc. All Rights Reserved.
22// SPDX-License-Identifier: MIT
33
4- // Enable SDMA support for unit tests (we're using mocks, not real AMD SMI)
5- #ifndef AMD_SMI_SDMA_SUPPORTED
6- # define AMD_SMI_SDMA_SUPPORTED 1
7- #endif
4+ // Include amd_smi.hpp first to get proper AMD_SMI_SDMA_SUPPORTED detection
5+ // based on the actual AMD SMI library version
6+ #include " core/amd_smi.hpp"
87
98#include " library/pmc/collectors/gpu/device.hpp"
109#include " library/pmc/device_providers/amd_smi/drivers/tests/mock_driver.hpp"
@@ -59,13 +58,17 @@ class DeviceTest : public ::testing::Test
5958 /* *
6059 * @brief Setup SDMA mock expectations for any device mock.
6160 * Call this for any mock that will have devices constructed with it.
61+ * No-op when SDMA is not supported.
6262 */
6363 template <typename MockPtr>
64- static void SetupSDMAExpectations (MockPtr& mock, amdsmi_processor_handle handle)
64+ static void SetupSDMAExpectations ([[maybe_unused]] MockPtr& mock,
65+ [[maybe_unused]] amdsmi_processor_handle handle)
6566 {
67+ #if defined(AMD_SMI_SDMA_SUPPORTED) && AMD_SMI_SDMA_SUPPORTED == 1
6668 EXPECT_CALL (*mock, get_gpu_process_list (handle, _, _))
6769 .Times (AnyNumber ())
6870 .WillRepeatedly (DoAll (SetArgPointee<1 >(1 ), Return (AMDSMI_STATUS_SUCCESS)));
71+ #endif
6972 }
7073
7174 /* *
@@ -88,9 +91,11 @@ class DeviceTest : public ::testing::Test
8891
8992 // SDMA support - allow any number of calls (happens during construction and
9093 // metrics collection)
94+ #if defined(AMD_SMI_SDMA_SUPPORTED) && AMD_SMI_SDMA_SUPPORTED == 1
9195 EXPECT_CALL (*mock_driver, get_gpu_process_list (test_handle, _, _))
9296 .Times (AnyNumber ())
9397 .WillRepeatedly (DoAll (SetArgPointee<1 >(1 ), Return (AMDSMI_STATUS_SUCCESS)));
98+ #endif
9499 }
95100
96101 /* *
@@ -112,9 +117,11 @@ class DeviceTest : public ::testing::Test
112117 DoAll (SetArgPointee<2 >(sentinel_mem), Return (AMDSMI_STATUS_SUCCESS)));
113118
114119 // SDMA support
120+ #if defined(AMD_SMI_SDMA_SUPPORTED) && AMD_SMI_SDMA_SUPPORTED == 1
115121 EXPECT_CALL (*mock_driver, get_gpu_process_list (test_handle, _, _))
116122 .Times (AnyNumber ())
117123 .WillRepeatedly (Return (AMDSMI_STATUS_NOT_SUPPORTED));
124+ #endif
118125 }
119126
120127 /* *
@@ -148,9 +155,11 @@ class DeviceTest : public ::testing::Test
148155 DoAll (SetArgPointee<2 >(sentinel_mem), Return (AMDSMI_STATUS_SUCCESS)));
149156
150157 // SDMA support
158+ #if defined(AMD_SMI_SDMA_SUPPORTED) && AMD_SMI_SDMA_SUPPORTED == 1
151159 EXPECT_CALL (*mock_driver, get_gpu_process_list (test_handle, _, _))
152160 .Times (AnyNumber ())
153161 .WillRepeatedly (DoAll (SetArgPointee<1 >(1 ), Return (AMDSMI_STATUS_SUCCESS)));
162+ #endif
154163 }
155164
156165 /* *
@@ -180,7 +189,7 @@ class DeviceTest : public ::testing::Test
180189 {
181190 metrics.xcp_stats [xcp].vcn_busy [i] = static_cast <uint16_t >(50 + i);
182191 }
183- for (size_t i = 0 ; i < ROCPROFSYS_MAX_NUM_JPEG_ENGINES ; ++i)
192+ for (size_t i = 0 ; i < ROCPROFSYS_AMDSMI_JPEG_ENGINE_COUNT ; ++i)
184193 {
185194 metrics.xcp_stats [xcp].jpeg_busy [i] = static_cast <uint16_t >(30 + i);
186195 }
@@ -229,7 +238,7 @@ class DeviceTest : public ::testing::Test
229238 {
230239 metrics.xcp_stats [xcp].vcn_busy [i] = 0xFFFF ;
231240 }
232- for (size_t i = 0 ; i < ROCPROFSYS_MAX_NUM_JPEG_ENGINES ; ++i)
241+ for (size_t i = 0 ; i < ROCPROFSYS_AMDSMI_JPEG_ENGINE_COUNT ; ++i)
233242 {
234243 metrics.xcp_stats [xcp].jpeg_busy [i] = 0xFFFF ;
235244 }
@@ -934,7 +943,7 @@ TEST_F(DeviceTest, jpeg_activity_collection_all_xcps)
934943 // Set JPEG activity values for all XCP instances
935944 for (size_t xcp = 0 ; xcp < AMDSMI_MAX_NUM_XCP; ++xcp)
936945 {
937- for (size_t jpeg = 0 ; jpeg < ROCPROFSYS_MAX_NUM_JPEG_ENGINES ; ++jpeg)
946+ for (size_t jpeg = 0 ; jpeg < ROCPROFSYS_AMDSMI_JPEG_ENGINE_COUNT ; ++jpeg)
938947 {
939948 metrics.xcp_stats [xcp].jpeg_busy [jpeg] =
940949 static_cast <uint16_t >(30 + xcp + jpeg);
@@ -968,7 +977,7 @@ TEST_F(DeviceTest, jpeg_activity_collection_all_xcps)
968977 // Verify all XCP JPEG arrays were copied correctly
969978 for (size_t xcp = 0 ; xcp < AMDSMI_MAX_NUM_XCP; ++xcp)
970979 {
971- for (size_t jpeg = 0 ; jpeg < ROCPROFSYS_MAX_NUM_JPEG_ENGINES ; ++jpeg)
980+ for (size_t jpeg = 0 ; jpeg < ROCPROFSYS_AMDSMI_JPEG_ENGINE_COUNT ; ++jpeg)
972981 {
973982 EXPECT_EQ (collected_metrics.xcp_stats [xcp].jpeg_busy [jpeg],
974983 static_cast <uint16_t >(30 + xcp + jpeg));
@@ -1007,7 +1016,7 @@ TEST_F(DeviceTest, xcp_metrics_not_collected_when_unsupported)
10071016 {
10081017 EXPECT_EQ (collected_metrics.xcp_stats [xcp].vcn_busy [vcn], 0 );
10091018 }
1010- for (size_t jpeg = 0 ; jpeg < ROCPROFSYS_MAX_NUM_JPEG_ENGINES ; ++jpeg)
1019+ for (size_t jpeg = 0 ; jpeg < ROCPROFSYS_AMDSMI_JPEG_ENGINE_COUNT ; ++jpeg)
10111020 {
10121021 EXPECT_EQ (collected_metrics.xcp_stats [xcp].jpeg_busy [jpeg], 0 );
10131022 }
@@ -1074,7 +1083,7 @@ TEST_F(DeviceTest, mixed_vcn_jpeg_support)
10741083 // Verify JPEG arrays remain default-initialized (zeros)
10751084 for (size_t xcp = 0 ; xcp < AMDSMI_MAX_NUM_XCP; ++xcp)
10761085 {
1077- for (size_t jpeg = 0 ; jpeg < ROCPROFSYS_MAX_NUM_JPEG_ENGINES ; ++jpeg)
1086+ for (size_t jpeg = 0 ; jpeg < ROCPROFSYS_AMDSMI_JPEG_ENGINE_COUNT ; ++jpeg)
10781087 {
10791088 EXPECT_EQ (collected_metrics.xcp_stats [xcp].jpeg_busy [jpeg], 0 );
10801089 }
@@ -2224,12 +2233,12 @@ TEST_F(DeviceTest, large_array_indices_xcp)
22242233 */
22252234TEST_F (DeviceTest, large_array_indices_jpeg)
22262235{
2227- // Setup: Set all ROCPROFSYS_MAX_NUM_JPEG_ENGINES entries
2236+ // Setup: Set all ROCPROFSYS_AMDSMI_JPEG_ENGINE_COUNT entries
22282237 amdsmi_gpu_metrics_t metrics = CreateSentinelMetrics ();
22292238
22302239 for (size_t xcp = 0 ; xcp < AMDSMI_MAX_NUM_XCP; ++xcp)
22312240 {
2232- for (size_t jpeg = 0 ; jpeg < ROCPROFSYS_MAX_NUM_JPEG_ENGINES ; ++jpeg)
2241+ for (size_t jpeg = 0 ; jpeg < ROCPROFSYS_AMDSMI_JPEG_ENGINE_COUNT ; ++jpeg)
22332242 {
22342243 metrics.xcp_stats [xcp].jpeg_busy [jpeg] =
22352244 static_cast <uint16_t >(xcp * 100 + jpeg);
@@ -2258,7 +2267,7 @@ TEST_F(DeviceTest, large_array_indices_jpeg)
22582267 // Verify all JPEG engines were processed correctly
22592268 for (size_t xcp = 0 ; xcp < AMDSMI_MAX_NUM_XCP; ++xcp)
22602269 {
2261- for (size_t jpeg = 0 ; jpeg < ROCPROFSYS_MAX_NUM_JPEG_ENGINES ; ++jpeg)
2270+ for (size_t jpeg = 0 ; jpeg < ROCPROFSYS_AMDSMI_JPEG_ENGINE_COUNT ; ++jpeg)
22622271 {
22632272 EXPECT_EQ (collected_metrics.xcp_stats [xcp].jpeg_busy [jpeg],
22642273 static_cast <uint16_t >(xcp * 100 + jpeg));
@@ -2461,8 +2470,9 @@ TEST_F(DeviceTest, full_lifecycle_with_realistic_data)
24612470 *
24622471 * Objective: Verify SDMA usage percentage is computed correctly from deltas.
24632472 *
2464- * NOTE: AMD_SMI_SDMA_SUPPORTED is defined at the top of this file for testing .
2473+ * NOTE: This test is only compiled when AMD_SMI_SDMA_SUPPORTED is defined .
24652474 */
2475+ #if defined(AMD_SMI_SDMA_SUPPORTED) && AMD_SMI_SDMA_SUPPORTED == 1
24662476TEST_F (DeviceTest, sdma_delta_computation)
24672477{
24682478 // Setup: Mock SDMA process data
@@ -2512,5 +2522,6 @@ TEST_F(DeviceTest, sdma_delta_computation)
25122522 EXPECT_GE (metrics2.sdma_usage , 0U );
25132523 EXPECT_LE (metrics2.sdma_usage , 100U );
25142524}
2525+ #endif
25152526
25162527} // namespace rocprofsys::pmc::collectors::gpu::testing
0 commit comments