[igt-dev] [PATCH i-g-t 13/17] lib: Add helper functions to read/write dsc debugfs

Petri Latvala petri.latvala at intel.com
Tue Jun 15 09:13:10 UTC 2021


On Fri, Jun 11, 2021 at 10:50:01AM +0530, venkata.sai.patnana at intel.com wrote:
> From: Ankit Nautiyal <ankit.k.nautiyal at intel.com>
> 
> Reuse code for reading and writing dsc debugfs and provide helper
> functions to get dsc related parameters in lib igt_kms.
> 
> Cc: Petri Latvala <petri.latvala at intel.com>
> Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal at intel.com>
> ---
>  lib/igt_kms.c | 135 ++++++++++++++++++++++++++++++++++++++++++++++++++
>  lib/igt_kms.h |   9 ++++
>  2 files changed, 144 insertions(+)
> 
> diff --git a/lib/igt_kms.c b/lib/igt_kms.c
> index c7c69b6ea0..1520b2d16c 100644
> --- a/lib/igt_kms.c
> +++ b/lib/igt_kms.c
> @@ -5183,3 +5183,138 @@ void igt_dump_crtcs_fd(int drmfd)
>  
>  	drmModeFreeResources(mode_resources);
>  }
> +
> +static
> +bool check_dsc_debugfs(int drmfd, drmModeConnector *connector,
> +		       const char *check_str)
> +{
> +	char file_name[128] = {0};
> +	char buf[512];
> +
> +	sprintf(file_name, "%s-%d/i915_dsc_fec_support",
> +		kmstest_connector_type_str(connector->connector_type),
> +		connector->connector_type_id);
> +
> +	igt_debugfs_read(drmfd, file_name, buf);
> +
> +	return strstr(buf, check_str);
> +}
> +
> +static
> +int write_dsc_debugfs(int drmfd, drmModeConnector *connector,
> +		      const char *file_name,
> +		      const char *write_buf)
> +{
> +	int debugfs_fd = igt_debugfs_dir(drmfd);
> +	int len = strlen(write_buf);
> +	int ret;
> +	char file_path[128] = {0};
> +
> +	sprintf(file_path, "%s-%d/%s",
> +		kmstest_connector_type_str(connector->connector_type),
> +		connector->connector_type_id,
> +		file_name);
> +
> +	ret = igt_sysfs_write(debugfs_fd, file_path, write_buf, len);
> +
> +	close(debugfs_fd);
> +
> +	return ret;
> +}
> +
> +/*
> + * igt_is_dp_dsc_supported:
> + * @drmfd: A drm file descriptor
> + * @connector: Pointer to libdrm connector
> + *
> + * Returns: True if DSC is supported for the given connector, false otherwise.
> + */
> +bool igt_is_dp_dsc_supported(int drmfd, drmModeConnector *connector)
> +{
> +	return check_dsc_debugfs(drmfd, connector, "DSC_Sink_Support: yes");
> +}
> +
> +/*
> + * igt_is_dp_fec_supported:
> + * @drmfd: A drm file descriptor
> + * @connector: Pointer to libdrm connector
> + *
> + * Returns: True if FEC is supported for the given connector, false otherwise.
> + */
> +bool igt_is_dp_fec_supported(int drmfd, drmModeConnector *connector)
> +{
> +
> +	return check_dsc_debugfs(drmfd, connector, "FEC_Sink_Support: yes");

There's an extra newline here.

Otherwise,
Reviewed-by: Petri Latvala <petri.latvala at intel.com>



> +}
> +
> +/*
> + * igt_is_dp_dsc_enabled:
> + * @drmfd: A drm file descriptor
> + * @connector: Pointer to libdrm connector
> + *
> + * Returns: True if DSC is enabled for the given connector, false otherwise.
> + */
> +bool igt_is_dp_dsc_enabled(int drmfd, drmModeConnector *connector)
> +{
> +	return check_dsc_debugfs(drmfd, connector, "DSC_Enabled: yes");
> +}
> +
> +/*
> + * igt_is_force_dsc_enabled:
> + * @drmfd: A drm file descriptor
> + * @connector: Pointer to libdrm connector
> + *
> + * Returns: True if DSC is force enabled (via debugfs) for the given connector,
> + * false otherwise.
> + */
> +bool igt_is_force_dsc_enabled(int drmfd, drmModeConnector *connector)
> +{
> +	return check_dsc_debugfs(drmfd, connector, "Force_DSC_Enable: yes");
> +}
> +
> +/*
> + * igt_force_dp_dsc_enable:
> + * @drmfd: A drm file descriptor
> + * @connector: Pointer to libdrm connector
> + *
> + * Returns: 1 on success or negative error code, in case of failure.
> + */
> +int igt_force_dp_dsc_enable(int drmfd, drmModeConnector *connector)
> +{
> +	return write_dsc_debugfs(drmfd, connector, "i915_dsc_fec_support", "1");
> +}
> +
> +/*
> + * igt_force_dp_dsc_enable:
> + * @drmfd: A drm file descriptor
> + * @connector: Pointer to libdrm connector
> + * @bpp: Compressed bpp to be used with DSC
> + *
> + * Returns: No. of bytes written or negative error code, in case of failure.
> + */
> +int igt_force_dp_dsc_enable_bpp(int drmfd, drmModeConnector *connector, int bpp)
> +{
> +	char buf[20] = {0};
> +
> +	sprintf(buf, "%d", bpp);
> +
> +	return write_dsc_debugfs(drmfd, connector, "i915_dsc_bpp_support", buf);
> +}
> +
> +/*
> + * igt_get_dp_dsc_debugfs_fd:
> + * @drmfd: A drm file descriptor
> + * @connector: Pointer to libdrm connector
> + *
> + * Returns: fd of the DSC debugfs for the given connector, else returns -1.
> + */
> +int igt_get_dp_dsc_debugfs_fd(int drmfd, drmModeConnector *connector)
> +{
> +	char file_name[128] = {0};
> +
> +	sprintf(file_name, "%s-%d/i915_dsc_fec_support",
> +		kmstest_connector_type_str(connector->connector_type),
> +		connector->connector_type_id);
> +
> +	return openat(igt_debugfs_dir(drmfd), file_name, O_WRONLY);
> +}
> diff --git a/lib/igt_kms.h b/lib/igt_kms.h
> index 8cde24b791..e87d1913e5 100644
> --- a/lib/igt_kms.h
> +++ b/lib/igt_kms.h
> @@ -917,4 +917,13 @@ void igt_dump_connectors_fd(int drmfd);
>  void igt_dump_crtcs_fd(int drmfd);
>  bool igt_override_all_active_output_modes_to_fit_bw(igt_display_t *display);
>  
> +bool igt_is_dp_dsc_supported(int drmfd, drmModeConnector *connector);
> +bool igt_is_dp_fec_supported(int drmfd, drmModeConnector *connector);
> +bool igt_is_dp_dsc_enabled(int drmfd, drmModeConnector *connector);
> +bool igt_is_force_dsc_enabled(int drmfd, drmModeConnector *connector);
> +int igt_force_dp_dsc_enable(int drmfd, drmModeConnector *connector);
> +int igt_force_dp_dsc_enable_bpp(int drmfd, drmModeConnector *connector,
> +				int bpp);
> +int igt_get_dp_dsc_debugfs_fd(int drmfd, drmModeConnector *connector);
> +
>  #endif /* __IGT_KMS_H__ */
> -- 
> 2.25.1
> 


More information about the igt-dev mailing list