[igt-dev] [PATCH 2/3] tests/amdgpu/amd_mall: remove UMR dependency
Aurabindo Pillai
aurabindo.pillai at amd.com
Fri Aug 25 13:51:14 UTC 2023
On 2023-08-24 23:49, Alex Hung wrote:
>
>
> On 2023-08-24 10:15, Aurabindo Pillai wrote:
>> 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;
>
> supported and enabled are u32 but assigned false and true. Why can't
> they be boolean?
In driver we use u32* for reading any reg fields of sizes less than u32
as well, but there is no need to follow that in IGT. Just sent an
updated v2
>
>> - 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;
>
> Same here. Why are boolean values assigned to u32?
>
>> /* 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);
--
--
Thanks & Regards,
Jay
More information about the igt-dev
mailing list