mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-03 23:58:05 +00:00
drm/amd/display: Add debugfs to repress HPD and HPR_RX IRQs
[Why] For debugging reasons it can be beneficial to disable any hotplug and DP shortpulse interrupt handling. [How] Expose a debugfs to set a flag to bypass HPD IRQ handling and skip IRQ handling if flag is set. Signed-off-by: Harry Wentland <harry.wentland@amd.com> Acked-by: Bindu Ramamurthy <bindur12@amd.com> Tested-by: Daniel Wheeler <daniel.wheeler@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
83d76eeb7b
commit
b972b4f913
3 changed files with 45 additions and 2 deletions
|
@ -2552,11 +2552,14 @@ static void handle_hpd_irq(void *param)
|
||||||
struct drm_connector *connector = &aconnector->base;
|
struct drm_connector *connector = &aconnector->base;
|
||||||
struct drm_device *dev = connector->dev;
|
struct drm_device *dev = connector->dev;
|
||||||
enum dc_connection_type new_connection_type = dc_connection_none;
|
enum dc_connection_type new_connection_type = dc_connection_none;
|
||||||
#ifdef CONFIG_DRM_AMD_DC_HDCP
|
|
||||||
struct amdgpu_device *adev = drm_to_adev(dev);
|
struct amdgpu_device *adev = drm_to_adev(dev);
|
||||||
|
#ifdef CONFIG_DRM_AMD_DC_HDCP
|
||||||
struct dm_connector_state *dm_con_state = to_dm_connector_state(connector->state);
|
struct dm_connector_state *dm_con_state = to_dm_connector_state(connector->state);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
if (adev->dm.disable_hpd_irq)
|
||||||
|
return;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* In case of failure or MST no need to update connector status or notify the OS
|
* In case of failure or MST no need to update connector status or notify the OS
|
||||||
* since (for MST case) MST does this in its own context.
|
* since (for MST case) MST does this in its own context.
|
||||||
|
@ -2696,6 +2699,10 @@ static void handle_hpd_rx_irq(void *param)
|
||||||
|
|
||||||
memset(&hpd_irq_data, 0, sizeof(hpd_irq_data));
|
memset(&hpd_irq_data, 0, sizeof(hpd_irq_data));
|
||||||
|
|
||||||
|
if (adev->dm.disable_hpd_irq)
|
||||||
|
return;
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* TODO:Temporary add mutex to protect hpd interrupt not have a gpio
|
* TODO:Temporary add mutex to protect hpd interrupt not have a gpio
|
||||||
* conflict, after implement i2c helper, this mutex should be
|
* conflict, after implement i2c helper, this mutex should be
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2015 Advanced Micro Devices, Inc.
|
* Copyright (C) 2015-2020 Advanced Micro Devices, Inc. All rights reserved.
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||||
* copy of this software and associated documentation files (the "Software"),
|
* copy of this software and associated documentation files (the "Software"),
|
||||||
|
@ -410,6 +410,7 @@ struct amdgpu_display_manager {
|
||||||
*/
|
*/
|
||||||
struct amdgpu_encoder mst_encoders[AMDGPU_DM_MAX_CRTC];
|
struct amdgpu_encoder mst_encoders[AMDGPU_DM_MAX_CRTC];
|
||||||
bool force_timing_sync;
|
bool force_timing_sync;
|
||||||
|
bool disable_hpd_irq;
|
||||||
bool dmcub_trace_event_en;
|
bool dmcub_trace_event_en;
|
||||||
/**
|
/**
|
||||||
* @da_list:
|
* @da_list:
|
||||||
|
|
|
@ -3077,6 +3077,37 @@ static int force_timing_sync_get(void *data, u64 *val)
|
||||||
DEFINE_DEBUGFS_ATTRIBUTE(force_timing_sync_ops, force_timing_sync_get,
|
DEFINE_DEBUGFS_ATTRIBUTE(force_timing_sync_ops, force_timing_sync_get,
|
||||||
force_timing_sync_set, "%llu\n");
|
force_timing_sync_set, "%llu\n");
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Disables all HPD and HPD RX interrupt handling in the
|
||||||
|
* driver when set to 1. Default is 0.
|
||||||
|
*/
|
||||||
|
static int disable_hpd_set(void *data, u64 val)
|
||||||
|
{
|
||||||
|
struct amdgpu_device *adev = data;
|
||||||
|
|
||||||
|
adev->dm.disable_hpd_irq = (bool)val;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Returns 1 if HPD and HPRX interrupt handling is disabled,
|
||||||
|
* 0 otherwise.
|
||||||
|
*/
|
||||||
|
static int disable_hpd_get(void *data, u64 *val)
|
||||||
|
{
|
||||||
|
struct amdgpu_device *adev = data;
|
||||||
|
|
||||||
|
*val = adev->dm.disable_hpd_irq;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
DEFINE_DEBUGFS_ATTRIBUTE(disable_hpd_ops, disable_hpd_get,
|
||||||
|
disable_hpd_set, "%llu\n");
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Sets the DC visual confirm debug option from the given string.
|
* Sets the DC visual confirm debug option from the given string.
|
||||||
* Example usage: echo 1 > /sys/kernel/debug/dri/0/amdgpu_visual_confirm
|
* Example usage: echo 1 > /sys/kernel/debug/dri/0/amdgpu_visual_confirm
|
||||||
|
@ -3213,4 +3244,8 @@ void dtn_debugfs_init(struct amdgpu_device *adev)
|
||||||
|
|
||||||
debugfs_create_file_unsafe("amdgpu_dm_dcc_en", 0644, root, adev,
|
debugfs_create_file_unsafe("amdgpu_dm_dcc_en", 0644, root, adev,
|
||||||
&dcc_en_bits_fops);
|
&dcc_en_bits_fops);
|
||||||
|
|
||||||
|
debugfs_create_file_unsafe("amdgpu_dm_disable_hpd", 0644, root, adev,
|
||||||
|
&disable_hpd_ops);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue