drm/i915: Add bigjoiner force enable option to debugfs
For validation purposes, it might be useful to be able to force Bigjoiner mode, even if current dotclock/resolution do not require that. Lets add such to option to debugfs. v2: - Apparently intel_dp_need_bigjoiner can't be used, when debugfs entry is created so lets just check manually the DISPLAY_VER. v3: - Switch to intel_connector from drm_connector(Jani Nikula) - Remove redundant modeset lock(Jani Nikula) - Use kstrtobool_from_user for boolean value(Jani Nikula) v4: - Apply the changes to proper function(Jani Nikula) v5: - Removed unnecessary check from i915_bigjoiner_enable_show (Ville Syrjälä) - Added eDP connector check to intel_connector_debugfs_add (Ville Syrjälä) - Removed debug message in order to prevent dmesg flooding (Ville Syrjälä) v6: - Assume now always that m->private is intel_connector - Fixed other similar conflicts v7: - Move bigjoiner force option to intel_connector(Ville Syrjälä) - Use DEFINE_SHOW_STORE_ATTRIBUTE instead of defining fops manually.(Ville Syrjälä) v8: - Pass intel_connector to debugfs_create_file, instead of drm_connector. (Jani Nikula) Signed-off-by: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com> Acked-by: Jani Nikula <jani.nikula@intel.com> Signed-off-by: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20240212125011.66174-1-uma.shankar@intel.com
This commit is contained in:
parent
cd1f0d3df2
commit
00c3959d63
@ -1391,6 +1391,20 @@ out: drm_modeset_unlock(&i915->drm.mode_config.connection_mutex);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int i915_bigjoiner_enable_show(struct seq_file *m, void *data)
|
||||
{
|
||||
struct intel_connector *connector = m->private;
|
||||
struct drm_crtc *crtc;
|
||||
|
||||
crtc = connector->base.state->crtc;
|
||||
if (connector->base.status != connector_status_connected || !crtc)
|
||||
return -ENODEV;
|
||||
|
||||
seq_printf(m, "Bigjoiner enable: %d\n", connector->force_bigjoiner_enable);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static ssize_t i915_dsc_output_format_write(struct file *file,
|
||||
const char __user *ubuf,
|
||||
size_t len, loff_t *offp)
|
||||
@ -1412,6 +1426,30 @@ static ssize_t i915_dsc_output_format_write(struct file *file,
|
||||
return len;
|
||||
}
|
||||
|
||||
static ssize_t i915_bigjoiner_enable_write(struct file *file,
|
||||
const char __user *ubuf,
|
||||
size_t len, loff_t *offp)
|
||||
{
|
||||
struct seq_file *m = file->private_data;
|
||||
struct intel_connector *connector = m->private;
|
||||
struct drm_crtc *crtc;
|
||||
bool bigjoiner_en = 0;
|
||||
int ret;
|
||||
|
||||
crtc = connector->base.state->crtc;
|
||||
if (connector->base.status != connector_status_connected || !crtc)
|
||||
return -ENODEV;
|
||||
|
||||
ret = kstrtobool_from_user(ubuf, len, &bigjoiner_en);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
connector->force_bigjoiner_enable = bigjoiner_en;
|
||||
*offp += len;
|
||||
|
||||
return len;
|
||||
}
|
||||
|
||||
static int i915_dsc_output_format_open(struct inode *inode,
|
||||
struct file *file)
|
||||
{
|
||||
@ -1505,6 +1543,8 @@ static const struct file_operations i915_dsc_fractional_bpp_fops = {
|
||||
.write = i915_dsc_fractional_bpp_write
|
||||
};
|
||||
|
||||
DEFINE_SHOW_STORE_ATTRIBUTE(i915_bigjoiner_enable);
|
||||
|
||||
/*
|
||||
* Returns the Current CRTC's bpc.
|
||||
* Example usage: cat /sys/kernel/debug/dri/0/crtc-0/i915_current_bpc
|
||||
@ -1586,6 +1626,13 @@ void intel_connector_debugfs_add(struct intel_connector *connector)
|
||||
connector, &i915_dsc_fractional_bpp_fops);
|
||||
}
|
||||
|
||||
if (DISPLAY_VER(i915) >= 11 &&
|
||||
(connector_type == DRM_MODE_CONNECTOR_DisplayPort ||
|
||||
connector_type == DRM_MODE_CONNECTOR_eDP)) {
|
||||
debugfs_create_file("i915_bigjoiner_force_enable", 0644, root,
|
||||
connector, &i915_bigjoiner_enable_fops);
|
||||
}
|
||||
|
||||
if (connector_type == DRM_MODE_CONNECTOR_DSI ||
|
||||
connector_type == DRM_MODE_CONNECTOR_eDP ||
|
||||
connector_type == DRM_MODE_CONNECTOR_DisplayPort ||
|
||||
|
@ -626,6 +626,8 @@ struct intel_connector {
|
||||
|
||||
struct intel_dp *mst_port;
|
||||
|
||||
bool force_bigjoiner_enable;
|
||||
|
||||
struct {
|
||||
struct drm_dp_aux *dsc_decompression_aux;
|
||||
u8 dsc_dpcd[DP_DSC_RECEIVER_CAP_SIZE];
|
||||
|
@ -1205,11 +1205,13 @@ bool intel_dp_need_bigjoiner(struct intel_dp *intel_dp,
|
||||
int hdisplay, int clock)
|
||||
{
|
||||
struct drm_i915_private *i915 = dp_to_i915(intel_dp);
|
||||
struct intel_connector *connector = intel_dp->attached_connector;
|
||||
|
||||
if (!intel_dp_can_bigjoiner(intel_dp))
|
||||
return false;
|
||||
|
||||
return clock > i915->max_dotclk_freq || hdisplay > 5120;
|
||||
return clock > i915->max_dotclk_freq || hdisplay > 5120 ||
|
||||
connector->force_bigjoiner_enable;
|
||||
}
|
||||
|
||||
static enum drm_mode_status
|
||||
|
Loading…
x
Reference in New Issue
Block a user