[igt-dev] [V2 1/5] lib/igt_kms: Add helper functions to read few debugfs

Sharma, Swati2 swati2.sharma at intel.com
Tue May 10 10:41:25 UTC 2022


LGTM
Reviewed-by: Swati Sharma <swati2.sharma at intel.com>

On 11-Apr-22 3:11 PM, Bhanuprakash Modem wrote:
> Add helper functions:
>      - Read maximum bpc from connector debugfs
>      - Read Current bpc from crtc debugfs
>      - Compare/Assert if Current & Requested bpc are not equal
> 
> V2:
> * New function to compare current & requested bpc
> 
> Cc: Mark Yacoub <markyacoub at chromium.org>
> Cc: Petri Latvala <petri.latvala at intel.com>
> Cc: Harry Wentland <harry.wentland at amd.com>
> Signed-off-by: Bhanuprakash Modem <bhanuprakash.modem at intel.com>
> ---
>   lib/igt_kms.c | 110 ++++++++++++++++++++++++++++++++++++++++++++++++++
>   lib/igt_kms.h |   7 ++++
>   2 files changed, 117 insertions(+)
> 
> diff --git a/lib/igt_kms.c b/lib/igt_kms.c
> index 7838ff28..014401f6 100644
> --- a/lib/igt_kms.c
> +++ b/lib/igt_kms.c
> @@ -5379,3 +5379,113 @@ int igt_get_dsc_debugfs_fd(int drmfd, drmModeConnector *connector)
> 
>   	return openat(igt_debugfs_dir(drmfd), file_name, O_WRONLY);
>   }
> +
> +/*
> + * igt_get_output_max_bpc:
> + * @drmfd: A drm file descriptor
> + * @output_name: Name of the libdrm connector we're going to use
> + *
> + * Returns: The maximum bpc from the connector debugfs.
> + */
> +unsigned int igt_get_output_max_bpc(int drmfd, char *connector_name)
> +{
> +	char buf[24];
> +	char *start_loc;
> +	int fd, res;
> +	unsigned int maximum;
> +
> +	fd = igt_debugfs_connector_dir(drmfd, connector_name, O_RDONLY);
> +	igt_assert(fd >= 0);
> +
> +	res = igt_debugfs_simple_read(fd, "output_bpc", buf, sizeof(buf));
> +	igt_require(res > 0);
> +
> +	close(fd);
> +
> +	igt_assert(start_loc = strstr(buf, "Maximum: "));
> +	igt_assert_eq(sscanf(start_loc, "Maximum: %u", &maximum), 1);
> +
> +	return maximum;
> +}
> +
> +/*
> + * igt_get_pipe_current_bpc:
> + * @drmfd: A drm file descriptor
> + * @pipe: Display pipe
> + *
> + * Returns: The current bpc from the crtc debugfs.
> + */
> +unsigned int igt_get_pipe_current_bpc(int drmfd, enum pipe pipe)
> +{
> +	char buf[24];
> +	char debugfs_name[24];
> +	char *start_loc;
> +	int fd, res;
> +	unsigned int current;
> +
> +	fd = igt_debugfs_pipe_dir(drmfd, pipe, O_RDONLY);
> +	igt_assert(fd >= 0);
> +
> +	if (is_i915_device(drmfd))
> +		strcpy(debugfs_name, "i915_current_bpc");
> +	else if (is_amdgpu_device(drmfd))
> +		strcpy(debugfs_name, "amdgpu_current_bpc");
> +
> +	res = igt_debugfs_simple_read(fd, debugfs_name, buf, sizeof(buf));
> +	igt_require(res > 0);
> +
> +	close(fd);
> +
> +	igt_assert(start_loc = strstr(buf, "Current: "));
> +	igt_assert_eq(sscanf(start_loc, "Current: %u", &current), 1);
> +
> +	return current;
> +}
> +
> +static unsigned int get_current_bpc(int drmfd, enum pipe pipe,
> +				    char *output_name, unsigned int bpc)
> +{
> +	unsigned int maximum = igt_get_output_max_bpc(drmfd, output_name);
> +	unsigned int current = igt_get_pipe_current_bpc(drmfd, pipe);
> +
> +	igt_require_f(maximum >= bpc,
> +		      "Monitor doesn't support %u bpc, max is %u\n", bpc,
> +		      maximum);
> +
> +	return current;
> +}
> +
> +/*
> + * igt_assert_output_bpc_equal:
> + * @drmfd: A drm file descriptor
> + * @pipe: Display pipe
> + * @output_name: Name of the libdrm connector we're going to use
> + * @bpc: BPC to compare with max & current bpc
> + *
> + * Assert if crtc's current bpc is not matched with the requested one.
> + */
> +void igt_assert_output_bpc_equal(int drmfd, enum pipe pipe,
> +				 char *output_name, unsigned int bpc)
> +{
> +	unsigned int current = get_current_bpc(drmfd, pipe, output_name, bpc);
> +
> +	igt_assert_eq(current, bpc);
> +}
> +
> +/*
> + * igt_check_output_bpc_equal:
> + * @drmfd: A drm file descriptor
> + * @pipe: Display pipe
> + * @output_name: Name of the libdrm connector we're going to use
> + * @bpc: BPC to compare with max & current bpc
> + *
> + * This is similar to igt_assert_output_bpc_equal, instead of assert
> + * it'll return True if crtc has the correct requested bpc, else False.
> + */
> +bool igt_check_output_bpc_equal(int drmfd, enum pipe pipe,
> +				char *output_name, unsigned int bpc)
> +{
> +	unsigned int current = get_current_bpc(drmfd, pipe, output_name, bpc);
> +
> +	return (current == bpc);
> +}
> diff --git a/lib/igt_kms.h b/lib/igt_kms.h
> index e9ecd21e..26922095 100644
> --- a/lib/igt_kms.h
> +++ b/lib/igt_kms.h
> @@ -948,4 +948,11 @@ int igt_force_dsc_enable_bpp(int drmfd, drmModeConnector *connector,
>   				int bpp);
>   int igt_get_dsc_debugfs_fd(int drmfd, drmModeConnector *connector);
> 
> +unsigned int igt_get_output_max_bpc(int drmfd, char *connector_name);
> +unsigned int igt_get_pipe_current_bpc(int drmfd, enum pipe pipe);
> +void igt_assert_output_bpc_equal(int drmfd, enum pipe pipe,
> +				char *output_name, unsigned int bpc);
> +bool igt_check_output_bpc_equal(int drmfd, enum pipe pipe,
> +				char *output_name, unsigned int bpc);
> +
>   #endif /* __IGT_KMS_H__ */
> --
> 2.35.1
> 

-- 
~Swati Sharma


More information about the igt-dev mailing list