Message ID | 20230911050549.763538-8-mitulkumar.ajitkumar.golani@intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Add DSC fractional bpp support | expand |
> Subject: [PATCH 7/8] drm/i915/dsc: Add debugfs entry to validate DSC fractional > bpp > > From: Swati Sharma <swati2.sharma@intel.com> > > DSC_Sink_BPP_Precision entry is added to i915_dsc_fec_support_show to > depict sink's precision. > Also, new debugfs entry is created to enforce fractional bpp. > If Force_DSC_Fractional_BPP_en is set then while iterating over output bpp > with fractional step size we will continue if output_bpp is computed as integer. > With this approach, we will be able to validate DSC with fractional bpp. > > Signed-off-by: Swati Sharma <swati2.sharma@intel.com> > Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com> > --- > .../drm/i915/display/intel_display_debugfs.c | 82 +++++++++++++++++++ > .../drm/i915/display/intel_display_types.h | 1 + > 2 files changed, 83 insertions(+) > > diff --git a/drivers/gpu/drm/i915/display/intel_display_debugfs.c > b/drivers/gpu/drm/i915/display/intel_display_debugfs.c > index f05b52381a83..d1b202e14e5f 100644 > --- a/drivers/gpu/drm/i915/display/intel_display_debugfs.c > +++ b/drivers/gpu/drm/i915/display/intel_display_debugfs.c > @@ -1244,6 +1244,8 @@ static int i915_dsc_fec_support_show(struct seq_file > *m, void *data) > > DP_DSC_YCbCr420_Native)), > > str_yes_no(drm_dp_dsc_sink_supports_format(intel_dp->dsc_dpcd, > > DP_DSC_YCbCr444))); > + seq_printf(m, "DSC_Sink_BPP_Precision: %d\n", > + drm_dp_dsc_sink_bpp_incr(intel_dp->dsc_dpcd)); > seq_printf(m, "Force_DSC_Enable: %s\n", > str_yes_no(intel_dp->force_dsc_en)); > if (!intel_dp_is_edp(intel_dp)) > @@ -1436,6 +1438,83 @@ static const struct file_operations > i915_dsc_output_format_fops = { > .write = i915_dsc_output_format_write > }; > > +static int i915_dsc_fractional_bpp_show(struct seq_file *m, void *data) > +{ > + struct drm_connector *connector = m->private; > + struct drm_device *dev = connector->dev; > + struct drm_crtc *crtc; > + struct intel_dp *intel_dp; > + struct intel_encoder *encoder = > intel_attached_encoder(to_intel_connector(connector)); > + int ret; > + > + if (!encoder) > + return -ENODEV; > + > + ret = drm_modeset_lock_single_interruptible(&dev- > >mode_config.connection_mutex); > + if (ret) > + return ret; > + > + crtc = connector->state->crtc; > + if (connector->status != connector_status_connected || !crtc) { > + ret = -ENODEV; > + goto out; > + } > + > + intel_dp = intel_attached_dp(to_intel_connector(connector)); > + seq_printf(m, "Force_DSC_Fractional_BPP_Enable: %s\n", > + str_yes_no(intel_dp->force_dsc_fractional_bpp_en)); > + > +out: drm_modeset_unlock(&dev->mode_config.connection_mutex); > + The above function should be on a new line and the extra new line can be removed return and modeset_unlock With that fixed LGTM. Reviewed-by: Suraj Kandpal <suraj.kandpal@intel.com> > + return ret; > +} > + > +static ssize_t i915_dsc_fractional_bpp_write(struct file *file, > + const char __user *ubuf, > + size_t len, loff_t *offp) > +{ > + struct drm_connector *connector = > + ((struct seq_file *)file->private_data)->private; > + struct intel_encoder *encoder = > intel_attached_encoder(to_intel_connector(connector)); > + struct drm_i915_private *i915 = to_i915(encoder->base.dev); > + struct intel_dp *intel_dp = enc_to_intel_dp(encoder); > + bool dsc_fractional_bpp_enable = false; > + int ret; > + > + if (len == 0) > + return 0; > + > + drm_dbg(&i915->drm, > + "Copied %zu bytes from user to force fractional bpp for > DSC\n", len); > + > + ret = kstrtobool_from_user(ubuf, len, &dsc_fractional_bpp_enable); > + if (ret < 0) > + return ret; > + > + drm_dbg(&i915->drm, "Got %s for DSC Fractional BPP Enable\n", > + (dsc_fractional_bpp_enable) ? "true" : "false"); > + intel_dp->force_dsc_fractional_bpp_en = dsc_fractional_bpp_enable; > + > + *offp += len; > + > + return len; > +} > + > +static int i915_dsc_fractional_bpp_open(struct inode *inode, > + struct file *file) > +{ > + return single_open(file, i915_dsc_fractional_bpp_show, > +inode->i_private); } > + > +static const struct file_operations i915_dsc_fractional_bpp_fops = { > + .owner = THIS_MODULE, > + .open = i915_dsc_fractional_bpp_open, > + .read = seq_read, > + .llseek = seq_lseek, > + .release = single_release, > + .write = i915_dsc_fractional_bpp_write }; > + > /* > * Returns the Current CRTC's bpc. > * Example usage: cat /sys/kernel/debug/dri/0/crtc-0/i915_current_bpc > @@ -1513,6 +1592,9 @@ void intel_connector_debugfs_add(struct > intel_connector *intel_connector) > > debugfs_create_file("i915_dsc_output_format", 0644, root, > connector, &i915_dsc_output_format_fops); > + > + debugfs_create_file("i915_dsc_fractional_bpp", 0644, root, > + connector, &i915_dsc_fractional_bpp_fops); > } > > if (connector->connector_type == DRM_MODE_CONNECTOR_DSI || > diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h > b/drivers/gpu/drm/i915/display/intel_display_types.h > index 9eb7b8912076..6e76f1274b0c 100644 > --- a/drivers/gpu/drm/i915/display/intel_display_types.h > +++ b/drivers/gpu/drm/i915/display/intel_display_types.h > @@ -1797,6 +1797,7 @@ struct intel_dp { > /* Display stream compression testing */ > bool force_dsc_en; > int force_dsc_output_format; > + bool force_dsc_fractional_bpp_en; > int force_dsc_bpc; > > bool hobl_failed; > -- > 2.25.1
diff --git a/drivers/gpu/drm/i915/display/intel_display_debugfs.c b/drivers/gpu/drm/i915/display/intel_display_debugfs.c index f05b52381a83..d1b202e14e5f 100644 --- a/drivers/gpu/drm/i915/display/intel_display_debugfs.c +++ b/drivers/gpu/drm/i915/display/intel_display_debugfs.c @@ -1244,6 +1244,8 @@ static int i915_dsc_fec_support_show(struct seq_file *m, void *data) DP_DSC_YCbCr420_Native)), str_yes_no(drm_dp_dsc_sink_supports_format(intel_dp->dsc_dpcd, DP_DSC_YCbCr444))); + seq_printf(m, "DSC_Sink_BPP_Precision: %d\n", + drm_dp_dsc_sink_bpp_incr(intel_dp->dsc_dpcd)); seq_printf(m, "Force_DSC_Enable: %s\n", str_yes_no(intel_dp->force_dsc_en)); if (!intel_dp_is_edp(intel_dp)) @@ -1436,6 +1438,83 @@ static const struct file_operations i915_dsc_output_format_fops = { .write = i915_dsc_output_format_write }; +static int i915_dsc_fractional_bpp_show(struct seq_file *m, void *data) +{ + struct drm_connector *connector = m->private; + struct drm_device *dev = connector->dev; + struct drm_crtc *crtc; + struct intel_dp *intel_dp; + struct intel_encoder *encoder = intel_attached_encoder(to_intel_connector(connector)); + int ret; + + if (!encoder) + return -ENODEV; + + ret = drm_modeset_lock_single_interruptible(&dev->mode_config.connection_mutex); + if (ret) + return ret; + + crtc = connector->state->crtc; + if (connector->status != connector_status_connected || !crtc) { + ret = -ENODEV; + goto out; + } + + intel_dp = intel_attached_dp(to_intel_connector(connector)); + seq_printf(m, "Force_DSC_Fractional_BPP_Enable: %s\n", + str_yes_no(intel_dp->force_dsc_fractional_bpp_en)); + +out: drm_modeset_unlock(&dev->mode_config.connection_mutex); + + return ret; +} + +static ssize_t i915_dsc_fractional_bpp_write(struct file *file, + const char __user *ubuf, + size_t len, loff_t *offp) +{ + struct drm_connector *connector = + ((struct seq_file *)file->private_data)->private; + struct intel_encoder *encoder = intel_attached_encoder(to_intel_connector(connector)); + struct drm_i915_private *i915 = to_i915(encoder->base.dev); + struct intel_dp *intel_dp = enc_to_intel_dp(encoder); + bool dsc_fractional_bpp_enable = false; + int ret; + + if (len == 0) + return 0; + + drm_dbg(&i915->drm, + "Copied %zu bytes from user to force fractional bpp for DSC\n", len); + + ret = kstrtobool_from_user(ubuf, len, &dsc_fractional_bpp_enable); + if (ret < 0) + return ret; + + drm_dbg(&i915->drm, "Got %s for DSC Fractional BPP Enable\n", + (dsc_fractional_bpp_enable) ? "true" : "false"); + intel_dp->force_dsc_fractional_bpp_en = dsc_fractional_bpp_enable; + + *offp += len; + + return len; +} + +static int i915_dsc_fractional_bpp_open(struct inode *inode, + struct file *file) +{ + return single_open(file, i915_dsc_fractional_bpp_show, inode->i_private); +} + +static const struct file_operations i915_dsc_fractional_bpp_fops = { + .owner = THIS_MODULE, + .open = i915_dsc_fractional_bpp_open, + .read = seq_read, + .llseek = seq_lseek, + .release = single_release, + .write = i915_dsc_fractional_bpp_write +}; + /* * Returns the Current CRTC's bpc. * Example usage: cat /sys/kernel/debug/dri/0/crtc-0/i915_current_bpc @@ -1513,6 +1592,9 @@ void intel_connector_debugfs_add(struct intel_connector *intel_connector) debugfs_create_file("i915_dsc_output_format", 0644, root, connector, &i915_dsc_output_format_fops); + + debugfs_create_file("i915_dsc_fractional_bpp", 0644, root, + connector, &i915_dsc_fractional_bpp_fops); } if (connector->connector_type == DRM_MODE_CONNECTOR_DSI || diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h b/drivers/gpu/drm/i915/display/intel_display_types.h index 9eb7b8912076..6e76f1274b0c 100644 --- a/drivers/gpu/drm/i915/display/intel_display_types.h +++ b/drivers/gpu/drm/i915/display/intel_display_types.h @@ -1797,6 +1797,7 @@ struct intel_dp { /* Display stream compression testing */ bool force_dsc_en; int force_dsc_output_format; + bool force_dsc_fractional_bpp_en; int force_dsc_bpc; bool hobl_failed;