[igt-dev] [PATCH 2/3] tests/amdgpu/amd_mall: remove UMR dependency
Aurabindo Pillai
aurabindo.pillai at amd.com
Thu Aug 24 16:15:03 UTC 2023
Remove the dependency on the userspace tool UMR to check MALL status
and fully rely on debugfs for simplicity of test setup.
Signed-off-by: Aurabindo Pillai <aurabindo.pillai at amd.com>
---
lib/igt_amd.c | 26 +++++++++++++-------------
lib/igt_amd.h | 2 +-
tests/amdgpu/amd_mall.c | 31 +++++++------------------------
3 files changed, 21 insertions(+), 38 deletions(-)
diff --git a/lib/igt_amd.c b/lib/igt_amd.c
index 1a720ff56..49ca9e6d9 100644
--- a/lib/igt_amd.c
+++ b/lib/igt_amd.c
@@ -1182,27 +1182,27 @@ static bool get_dm_capabilites(int drm_fd, char *buf, size_t size) {
* @brief check if AMDGPU mall_capable interface entry exist and defined
*
* @param drm_fd DRM file descriptor
- * @return true if mall_capable debugfs interface exists and defined
- * @return false otherwise
+ * @return true if dm capabilities interface exists and MALL is supported
+ * @return false if capabilites could not be read.
*/
-bool igt_amd_is_mall_capable(int drm_fd)
+void igt_amd_get_mall_status(int drm_fd, u32 *supported, u32 *enabled)
{
- char buf[1024], mall_read[10];
+ char buf[1024];
char *mall_loc;
- if (!get_dm_capabilites(drm_fd, buf, 1024))
- return false;
+ *supported = false;
+ *enabled = false;
- mall_loc = strstr(buf,"mall: ");
- if (!mall_loc)
+ if (!get_dm_capabilites(drm_fd, buf, 1024))
return false;
- sscanf(mall_loc, "mall: %s", mall_read);
-
- if (!strcmp(mall_read, "yes"))
- return true;
+ mall_loc = strstr(buf, "mall supported: yes");
+ if (mall_loc)
+ *supported = true;
- return false;
+ mall_loc = strstr(buf, "enabled: yes");
+ if (mall_loc && *supported)
+ *enabled = true;
}
/**
diff --git a/lib/igt_amd.h b/lib/igt_amd.h
index c05b4b730..db226e0d0 100644
--- a/lib/igt_amd.h
+++ b/lib/igt_amd.h
@@ -199,6 +199,6 @@ bool igt_amd_has_visual_confirm(int drm_fd);
int igt_amd_get_visual_confirm(int drm_fd);
bool igt_amd_set_visual_confirm(int drm_fd, enum amdgpu_debug_visual_confirm option);
-bool igt_amd_is_mall_capable(int drm_fd);
+void igt_amd_get_mall_status(int drm_fd, u32 *supported, u32 *enabled);
bool igt_amd_output_has_odm_combine_segments(int drm_fd, char *connector_name);
#endif /* IGT_AMD_H */
diff --git a/tests/amdgpu/amd_mall.c b/tests/amdgpu/amd_mall.c
index 6016d5e8c..178203e8b 100644
--- a/tests/amdgpu/amd_mall.c
+++ b/tests/amdgpu/amd_mall.c
@@ -57,7 +57,8 @@ struct line_check {
static void test_init(data_t *data)
{
igt_display_t *display = &data->display;
- bool mall_capable = false;
+ u32 mall_capable = false;
+ u32 mall_en = false;
/* It doesn't matter which pipe we choose on amdpgu. */
data->pipe_id = PIPE_A;
@@ -65,7 +66,7 @@ static void test_init(data_t *data)
igt_display_reset(display);
- mall_capable = igt_amd_is_mall_capable(data->fd);
+ igt_amd_get_mall_status(data->fd, &mall_capable, &mall_en);
igt_require_f(mall_capable, "Requires hardware that supports MALL cache\n");
/* find a connected output */
@@ -101,44 +102,26 @@ static void test_fini(data_t *data)
igt_display_commit_atomic(&data->display, DRM_MODE_ATOMIC_ALLOW_MODESET, 0);
}
-static bool check_cmd_output(const char *line, void *data)
-{
- struct line_check *check = data;
-
- if (strstr(line, check->substr)) {
- check->found++;
- }
-
- return false;
-}
static void test_mall_ss(data_t *data)
{
igt_display_t *display = &data->display;
igt_fb_t rfb;
- int exec_ret;
- struct line_check line = {0};
igt_crc_t test_crc, ref_crc;
+ u32 mall_supp, mall_en;
test_init(data);
igt_create_pattern_fb(data->fd, data->w, data->h, DRM_FORMAT_XRGB8888, 0, &rfb);
igt_plane_set_fb(data->primary, &rfb);
igt_display_commit_atomic(display, DRM_MODE_ATOMIC_ALLOW_MODESET, NULL);
-
igt_pipe_crc_collect_crc(data->pipe_crc, &ref_crc);
- sleep(MALL_SETTLE_DELAY);
-
- igt_system_cmd(exec_ret, "umr -O bits -r *.*.HUBP0_HUBP_MALL_STATUS | grep MALL_IN_USE");
-
- igt_skip_on_f(exec_ret != IGT_EXIT_SUCCESS, "Error running UMR\n");
- line.substr = "1 (0x00000001)";
- igt_log_buffer_inspect(check_cmd_output, &line);
+ sleep(MALL_SETTLE_DELAY);
- igt_assert_eq(line.found, 1);
+ igt_amd_get_mall_status(data->fd, &mall_supp, &mall_en);
+ igt_fail_on_f(!(mall_supp && mall_en), "MALL did not get enabled\n");
igt_pipe_crc_collect_crc(data->pipe_crc, &test_crc);
-
igt_assert_crc_equal(&ref_crc, &test_crc);
igt_remove_fb(data->fd, &rfb);
--
2.41.0
More information about the igt-dev
mailing list