drm/amd/display: Improve spelling, grammar, and formatting of amdgpu_dm.c comments
[Why] Good spelling and grammar makes comments more pleasant and clearer. Linux has coding standards for comments that we should try to follow. [How] Fix obvious spelling and grammar issues Ensure all comments use '/*' and '*/' and multi-line comments follow linux convention Remove line-of-stars comments that do not separate sections of code and comments referring to lines of code that have since been removed Signed-off-by: David Francis <David.Francis@amd.com> Reviewed-by: Nicholas Kazlauskas <Nicholas.Kazlauskas@amd.com> Acked-by: Leo Li <sunpeng.li@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
219097df0f
commit
1f6010a962
|
@ -75,7 +75,8 @@
|
||||||
static int amdgpu_dm_init(struct amdgpu_device *adev);
|
static int amdgpu_dm_init(struct amdgpu_device *adev);
|
||||||
static void amdgpu_dm_fini(struct amdgpu_device *adev);
|
static void amdgpu_dm_fini(struct amdgpu_device *adev);
|
||||||
|
|
||||||
/* initializes drm_device display related structures, based on the information
|
/*
|
||||||
|
* initializes drm_device display related structures, based on the information
|
||||||
* provided by DAL. The drm strcutures are: drm_crtc, drm_connector,
|
* provided by DAL. The drm strcutures are: drm_crtc, drm_connector,
|
||||||
* drm_encoder, drm_mode_config
|
* drm_encoder, drm_mode_config
|
||||||
*
|
*
|
||||||
|
@ -237,10 +238,6 @@ get_crtc_by_otg_inst(struct amdgpu_device *adev,
|
||||||
struct drm_crtc *crtc;
|
struct drm_crtc *crtc;
|
||||||
struct amdgpu_crtc *amdgpu_crtc;
|
struct amdgpu_crtc *amdgpu_crtc;
|
||||||
|
|
||||||
/*
|
|
||||||
* following if is check inherited from both functions where this one is
|
|
||||||
* used now. Need to be checked why it could happen.
|
|
||||||
*/
|
|
||||||
if (otg_inst == -1) {
|
if (otg_inst == -1) {
|
||||||
WARN_ON(1);
|
WARN_ON(1);
|
||||||
return adev->mode_info.crtcs[0];
|
return adev->mode_info.crtcs[0];
|
||||||
|
@ -266,7 +263,7 @@ static void dm_pflip_high_irq(void *interrupt_params)
|
||||||
amdgpu_crtc = get_crtc_by_otg_inst(adev, irq_params->irq_src - IRQ_TYPE_PFLIP);
|
amdgpu_crtc = get_crtc_by_otg_inst(adev, irq_params->irq_src - IRQ_TYPE_PFLIP);
|
||||||
|
|
||||||
/* IRQ could occur when in initial stage */
|
/* IRQ could occur when in initial stage */
|
||||||
/*TODO work and BO cleanup */
|
/* TODO work and BO cleanup */
|
||||||
if (amdgpu_crtc == NULL) {
|
if (amdgpu_crtc == NULL) {
|
||||||
DRM_DEBUG_DRIVER("CRTC is null, returning.\n");
|
DRM_DEBUG_DRIVER("CRTC is null, returning.\n");
|
||||||
return;
|
return;
|
||||||
|
@ -285,9 +282,9 @@ static void dm_pflip_high_irq(void *interrupt_params)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* wakeup usersapce */
|
/* wake up userspace */
|
||||||
if (amdgpu_crtc->event) {
|
if (amdgpu_crtc->event) {
|
||||||
/* Update to correct count/ts if racing with vblank irq */
|
/* Update to correct count(s) if racing with vblank irq */
|
||||||
drm_crtc_accurate_vblank_count(&amdgpu_crtc->base);
|
drm_crtc_accurate_vblank_count(&amdgpu_crtc->base);
|
||||||
|
|
||||||
drm_crtc_send_vblank_event(&amdgpu_crtc->base, amdgpu_crtc->event);
|
drm_crtc_send_vblank_event(&amdgpu_crtc->base, amdgpu_crtc->event);
|
||||||
|
@ -385,8 +382,8 @@ static void amdgpu_dm_fbc_init(struct drm_connector *connector)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
/* Init display KMS
|
* Init display KMS
|
||||||
*
|
*
|
||||||
* Returns 0 on success
|
* Returns 0 on success
|
||||||
*/
|
*/
|
||||||
|
@ -695,7 +692,7 @@ static int dm_resume(void *handle)
|
||||||
mutex_unlock(&aconnector->hpd_lock);
|
mutex_unlock(&aconnector->hpd_lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Force mode set in atomic comit */
|
/* Force mode set in atomic commit */
|
||||||
for_each_new_crtc_in_state(dm->cached_state, crtc, new_crtc_state, i)
|
for_each_new_crtc_in_state(dm->cached_state, crtc, new_crtc_state, i)
|
||||||
new_crtc_state->active_changed = true;
|
new_crtc_state->active_changed = true;
|
||||||
|
|
||||||
|
@ -826,24 +823,27 @@ amdgpu_dm_update_connector_after_detect(struct amdgpu_dm_connector *aconnector)
|
||||||
|
|
||||||
sink = aconnector->dc_link->local_sink;
|
sink = aconnector->dc_link->local_sink;
|
||||||
|
|
||||||
/* Edid mgmt connector gets first update only in mode_valid hook and then
|
/*
|
||||||
|
* Edid mgmt connector gets first update only in mode_valid hook and then
|
||||||
* the connector sink is set to either fake or physical sink depends on link status.
|
* the connector sink is set to either fake or physical sink depends on link status.
|
||||||
* don't do it here if u are during boot
|
* Skip if already done during boot.
|
||||||
*/
|
*/
|
||||||
if (aconnector->base.force != DRM_FORCE_UNSPECIFIED
|
if (aconnector->base.force != DRM_FORCE_UNSPECIFIED
|
||||||
&& aconnector->dc_em_sink) {
|
&& aconnector->dc_em_sink) {
|
||||||
|
|
||||||
/* For S3 resume with headless use eml_sink to fake stream
|
/*
|
||||||
* because on resume connecotr->sink is set ti NULL
|
* For S3 resume with headless use eml_sink to fake stream
|
||||||
|
* because on resume connector->sink is set to NULL
|
||||||
*/
|
*/
|
||||||
mutex_lock(&dev->mode_config.mutex);
|
mutex_lock(&dev->mode_config.mutex);
|
||||||
|
|
||||||
if (sink) {
|
if (sink) {
|
||||||
if (aconnector->dc_sink) {
|
if (aconnector->dc_sink) {
|
||||||
amdgpu_dm_update_freesync_caps(connector, NULL);
|
amdgpu_dm_update_freesync_caps(connector, NULL);
|
||||||
/* retain and release bellow are used for
|
/*
|
||||||
* bump up refcount for sink because the link don't point
|
* retain and release below are used to
|
||||||
* to it anymore after disconnect so on next crtc to connector
|
* bump up refcount for sink because the link doesn't point
|
||||||
|
* to it anymore after disconnect, so on next crtc to connector
|
||||||
* reshuffle by UMD we will get into unwanted dc_sink release
|
* reshuffle by UMD we will get into unwanted dc_sink release
|
||||||
*/
|
*/
|
||||||
if (aconnector->dc_sink != aconnector->dc_em_sink)
|
if (aconnector->dc_sink != aconnector->dc_em_sink)
|
||||||
|
@ -872,8 +872,10 @@ amdgpu_dm_update_connector_after_detect(struct amdgpu_dm_connector *aconnector)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (aconnector->dc_sink == sink) {
|
if (aconnector->dc_sink == sink) {
|
||||||
/* We got a DP short pulse (Link Loss, DP CTS, etc...).
|
/*
|
||||||
* Do nothing!! */
|
* We got a DP short pulse (Link Loss, DP CTS, etc...).
|
||||||
|
* Do nothing!!
|
||||||
|
*/
|
||||||
DRM_DEBUG_DRIVER("DCHPD: connector_id=%d: dc_sink didn't change.\n",
|
DRM_DEBUG_DRIVER("DCHPD: connector_id=%d: dc_sink didn't change.\n",
|
||||||
aconnector->connector_id);
|
aconnector->connector_id);
|
||||||
return;
|
return;
|
||||||
|
@ -884,11 +886,15 @@ amdgpu_dm_update_connector_after_detect(struct amdgpu_dm_connector *aconnector)
|
||||||
|
|
||||||
mutex_lock(&dev->mode_config.mutex);
|
mutex_lock(&dev->mode_config.mutex);
|
||||||
|
|
||||||
/* 1. Update status of the drm connector
|
/*
|
||||||
* 2. Send an event and let userspace tell us what to do */
|
* 1. Update status of the drm connector
|
||||||
|
* 2. Send an event and let userspace tell us what to do
|
||||||
|
*/
|
||||||
if (sink) {
|
if (sink) {
|
||||||
/* TODO: check if we still need the S3 mode update workaround.
|
/*
|
||||||
* If yes, put it here. */
|
* TODO: check if we still need the S3 mode update workaround.
|
||||||
|
* If yes, put it here.
|
||||||
|
*/
|
||||||
if (aconnector->dc_sink)
|
if (aconnector->dc_sink)
|
||||||
amdgpu_dm_update_freesync_caps(connector, NULL);
|
amdgpu_dm_update_freesync_caps(connector, NULL);
|
||||||
|
|
||||||
|
@ -922,8 +928,9 @@ 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;
|
||||||
|
|
||||||
/* In case of failure or MST no need to update connector status or notify the OS
|
/*
|
||||||
* since (for MST case) MST does this in it's own context.
|
* 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.
|
||||||
*/
|
*/
|
||||||
mutex_lock(&aconnector->hpd_lock);
|
mutex_lock(&aconnector->hpd_lock);
|
||||||
|
|
||||||
|
@ -1006,7 +1013,7 @@ static void dm_handle_hpd_rx_irq(struct amdgpu_dm_connector *aconnector)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* check if there is new irq to be handle */
|
/* check if there is new irq to be handled */
|
||||||
dret = drm_dp_dpcd_read(
|
dret = drm_dp_dpcd_read(
|
||||||
&aconnector->dm_dp_aux.aux,
|
&aconnector->dm_dp_aux.aux,
|
||||||
dpcd_addr,
|
dpcd_addr,
|
||||||
|
@ -1031,7 +1038,8 @@ static void handle_hpd_rx_irq(void *param)
|
||||||
struct dc_link *dc_link = aconnector->dc_link;
|
struct dc_link *dc_link = aconnector->dc_link;
|
||||||
bool is_mst_root_connector = aconnector->mst_mgr.mst_state;
|
bool is_mst_root_connector = aconnector->mst_mgr.mst_state;
|
||||||
|
|
||||||
/* 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
|
||||||
* retired.
|
* retired.
|
||||||
*/
|
*/
|
||||||
|
@ -1122,7 +1130,8 @@ static int dce110_register_irq_handlers(struct amdgpu_device *adev)
|
||||||
int_params.requested_polarity = INTERRUPT_POLARITY_DEFAULT;
|
int_params.requested_polarity = INTERRUPT_POLARITY_DEFAULT;
|
||||||
int_params.current_polarity = INTERRUPT_POLARITY_DEFAULT;
|
int_params.current_polarity = INTERRUPT_POLARITY_DEFAULT;
|
||||||
|
|
||||||
/* Actions of amdgpu_irq_add_id():
|
/*
|
||||||
|
* Actions of amdgpu_irq_add_id():
|
||||||
* 1. Register a set() function with base driver.
|
* 1. Register a set() function with base driver.
|
||||||
* Base driver will call set() function to enable/disable an
|
* Base driver will call set() function to enable/disable an
|
||||||
* interrupt in DC hardware.
|
* interrupt in DC hardware.
|
||||||
|
@ -1202,7 +1211,8 @@ static int dcn10_register_irq_handlers(struct amdgpu_device *adev)
|
||||||
int_params.requested_polarity = INTERRUPT_POLARITY_DEFAULT;
|
int_params.requested_polarity = INTERRUPT_POLARITY_DEFAULT;
|
||||||
int_params.current_polarity = INTERRUPT_POLARITY_DEFAULT;
|
int_params.current_polarity = INTERRUPT_POLARITY_DEFAULT;
|
||||||
|
|
||||||
/* Actions of amdgpu_irq_add_id():
|
/*
|
||||||
|
* Actions of amdgpu_irq_add_id():
|
||||||
* 1. Register a set() function with base driver.
|
* 1. Register a set() function with base driver.
|
||||||
* Base driver will call set() function to enable/disable an
|
* Base driver will call set() function to enable/disable an
|
||||||
* interrupt in DC hardware.
|
* interrupt in DC hardware.
|
||||||
|
@ -1211,7 +1221,7 @@ static int dcn10_register_irq_handlers(struct amdgpu_device *adev)
|
||||||
* coming from DC hardware.
|
* coming from DC hardware.
|
||||||
* amdgpu_dm_irq_handler() will re-direct the interrupt to DC
|
* amdgpu_dm_irq_handler() will re-direct the interrupt to DC
|
||||||
* for acknowledging and handling.
|
* for acknowledging and handling.
|
||||||
* */
|
*/
|
||||||
|
|
||||||
/* Use VSTARTUP interrupt */
|
/* Use VSTARTUP interrupt */
|
||||||
for (i = DCN_1_0__SRCID__DC_D1_OTG_VSTARTUP;
|
for (i = DCN_1_0__SRCID__DC_D1_OTG_VSTARTUP;
|
||||||
|
@ -1289,7 +1299,7 @@ static int amdgpu_dm_mode_config_init(struct amdgpu_device *adev)
|
||||||
|
|
||||||
adev->ddev->mode_config.preferred_depth = 24;
|
adev->ddev->mode_config.preferred_depth = 24;
|
||||||
adev->ddev->mode_config.prefer_shadow = 1;
|
adev->ddev->mode_config.prefer_shadow = 1;
|
||||||
/* indicate support of immediate flip */
|
/* indicates support for immediate flip */
|
||||||
adev->ddev->mode_config.async_page_flip = true;
|
adev->ddev->mode_config.async_page_flip = true;
|
||||||
|
|
||||||
adev->ddev->mode_config.fb_base = adev->gmc.aper_base;
|
adev->ddev->mode_config.fb_base = adev->gmc.aper_base;
|
||||||
|
@ -1375,7 +1385,7 @@ static int initialize_plane(struct amdgpu_display_manager *dm,
|
||||||
plane->base.type = mode_info->plane_type[plane_id];
|
plane->base.type = mode_info->plane_type[plane_id];
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* HACK: IGT tests expect that each plane can only have one
|
* HACK: IGT tests expect that each plane can only have
|
||||||
* one possible CRTC. For now, set one CRTC for each
|
* one possible CRTC. For now, set one CRTC for each
|
||||||
* plane that is not an underlay, but still allow multiple
|
* plane that is not an underlay, but still allow multiple
|
||||||
* CRTCs for underlay planes.
|
* CRTCs for underlay planes.
|
||||||
|
@ -1403,7 +1413,8 @@ static void register_backlight_device(struct amdgpu_display_manager *dm,
|
||||||
|
|
||||||
if ((link->connector_signal & (SIGNAL_TYPE_EDP | SIGNAL_TYPE_LVDS)) &&
|
if ((link->connector_signal & (SIGNAL_TYPE_EDP | SIGNAL_TYPE_LVDS)) &&
|
||||||
link->type != dc_connection_none) {
|
link->type != dc_connection_none) {
|
||||||
/* Event if registration failed, we should continue with
|
/*
|
||||||
|
* Event if registration failed, we should continue with
|
||||||
* DM initialization because not having a backlight control
|
* DM initialization because not having a backlight control
|
||||||
* is better then a black screen.
|
* is better then a black screen.
|
||||||
*/
|
*/
|
||||||
|
@ -1416,7 +1427,8 @@ static void register_backlight_device(struct amdgpu_display_manager *dm,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* In this architecture, the association
|
/*
|
||||||
|
* In this architecture, the association
|
||||||
* connector -> encoder -> crtc
|
* connector -> encoder -> crtc
|
||||||
* id not really requried. The crtc and connector will hold the
|
* id not really requried. The crtc and connector will hold the
|
||||||
* display_index as an abstraction to use with DAL component
|
* display_index as an abstraction to use with DAL component
|
||||||
|
@ -1564,7 +1576,7 @@ static void amdgpu_dm_destroy_drm_device(struct amdgpu_display_manager *dm)
|
||||||
* amdgpu_display_funcs functions
|
* amdgpu_display_funcs functions
|
||||||
*****************************************************************************/
|
*****************************************************************************/
|
||||||
|
|
||||||
/**
|
/*
|
||||||
* dm_bandwidth_update - program display watermarks
|
* dm_bandwidth_update - program display watermarks
|
||||||
*
|
*
|
||||||
* @adev: amdgpu_device pointer
|
* @adev: amdgpu_device pointer
|
||||||
|
@ -1773,9 +1785,11 @@ static int dm_early_init(void *handle)
|
||||||
if (adev->mode_info.funcs == NULL)
|
if (adev->mode_info.funcs == NULL)
|
||||||
adev->mode_info.funcs = &dm_display_funcs;
|
adev->mode_info.funcs = &dm_display_funcs;
|
||||||
|
|
||||||
/* Note: Do NOT change adev->audio_endpt_rreg and
|
/*
|
||||||
|
* Note: Do NOT change adev->audio_endpt_rreg and
|
||||||
* adev->audio_endpt_wreg because they are initialised in
|
* adev->audio_endpt_wreg because they are initialised in
|
||||||
* amdgpu_device_init() */
|
* amdgpu_device_init()
|
||||||
|
*/
|
||||||
#if defined(CONFIG_DEBUG_KERNEL_DC)
|
#if defined(CONFIG_DEBUG_KERNEL_DC)
|
||||||
device_create_file(
|
device_create_file(
|
||||||
adev->ddev->dev,
|
adev->ddev->dev,
|
||||||
|
@ -1821,7 +1835,7 @@ static bool fill_rects_from_plane_state(const struct drm_plane_state *state,
|
||||||
{
|
{
|
||||||
plane_state->src_rect.x = state->src_x >> 16;
|
plane_state->src_rect.x = state->src_x >> 16;
|
||||||
plane_state->src_rect.y = state->src_y >> 16;
|
plane_state->src_rect.y = state->src_y >> 16;
|
||||||
/*we ignore for now mantissa and do not to deal with floating pixels :(*/
|
/* we ignore the mantissa for now and do not deal with floating pixels :( */
|
||||||
plane_state->src_rect.width = state->src_w >> 16;
|
plane_state->src_rect.width = state->src_w >> 16;
|
||||||
|
|
||||||
if (plane_state->src_rect.width == 0)
|
if (plane_state->src_rect.width == 0)
|
||||||
|
@ -1873,7 +1887,7 @@ static int get_fb_info(const struct amdgpu_framebuffer *amdgpu_fb,
|
||||||
int r = amdgpu_bo_reserve(rbo, false);
|
int r = amdgpu_bo_reserve(rbo, false);
|
||||||
|
|
||||||
if (unlikely(r)) {
|
if (unlikely(r)) {
|
||||||
// Don't show error msg. when return -ERESTARTSYS
|
/* Don't show error message when returning -ERESTARTSYS */
|
||||||
if (r != -ERESTARTSYS)
|
if (r != -ERESTARTSYS)
|
||||||
DRM_ERROR("Unable to reserve buffer: %d\n", r);
|
DRM_ERROR("Unable to reserve buffer: %d\n", r);
|
||||||
return r;
|
return r;
|
||||||
|
@ -2069,8 +2083,6 @@ static int fill_plane_attributes(struct amdgpu_device *adev,
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
|
||||||
|
|
||||||
static void update_stream_scaling_settings(const struct drm_display_mode *mode,
|
static void update_stream_scaling_settings(const struct drm_display_mode *mode,
|
||||||
const struct dm_connector_state *dm_state,
|
const struct dm_connector_state *dm_state,
|
||||||
struct dc_stream_state *stream)
|
struct dc_stream_state *stream)
|
||||||
|
@ -2133,7 +2145,8 @@ convert_color_depth_from_display_info(const struct drm_connector *connector)
|
||||||
|
|
||||||
switch (bpc) {
|
switch (bpc) {
|
||||||
case 0:
|
case 0:
|
||||||
/* Temporary Work around, DRM don't parse color depth for
|
/*
|
||||||
|
* Temporary Work around, DRM doesn't parse color depth for
|
||||||
* EDID revision before 1.4
|
* EDID revision before 1.4
|
||||||
* TODO: Fix edid parsing
|
* TODO: Fix edid parsing
|
||||||
*/
|
*/
|
||||||
|
@ -2245,7 +2258,6 @@ static void adjust_colour_depth_from_display_info(struct dc_crtc_timing *timing_
|
||||||
} while (timing_out->display_color_depth > COLOR_DEPTH_888);
|
} while (timing_out->display_color_depth > COLOR_DEPTH_888);
|
||||||
|
|
||||||
}
|
}
|
||||||
/*****************************************************************************/
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
fill_stream_properties_from_drm_display_mode(struct dc_stream_state *stream,
|
fill_stream_properties_from_drm_display_mode(struct dc_stream_state *stream,
|
||||||
|
@ -2445,9 +2457,10 @@ static void dm_enable_per_frame_crtc_master_sync(struct dc_state *context)
|
||||||
for (i = 0; i < context->stream_count ; i++) {
|
for (i = 0; i < context->stream_count ; i++) {
|
||||||
if (!context->streams[i])
|
if (!context->streams[i])
|
||||||
continue;
|
continue;
|
||||||
/* TODO: add a function to read AMD VSDB bits and will set
|
/*
|
||||||
|
* TODO: add a function to read AMD VSDB bits and set
|
||||||
* crtc_sync_master.multi_sync_enabled flag
|
* crtc_sync_master.multi_sync_enabled flag
|
||||||
* For now its set to false
|
* For now it's set to false
|
||||||
*/
|
*/
|
||||||
set_multisync_trigger_params(context->streams[i]);
|
set_multisync_trigger_params(context->streams[i]);
|
||||||
}
|
}
|
||||||
|
@ -2510,7 +2523,8 @@ create_stream_for_sink(struct amdgpu_dm_connector *aconnector,
|
||||||
head);
|
head);
|
||||||
|
|
||||||
if (preferred_mode == NULL) {
|
if (preferred_mode == NULL) {
|
||||||
/* This may not be an error, the use case is when we we have no
|
/*
|
||||||
|
* This may not be an error, the use case is when we have no
|
||||||
* usermode calls to reset and set mode upon hotplug. In this
|
* usermode calls to reset and set mode upon hotplug. In this
|
||||||
* case, we call set mode ourselves to restore the previous mode
|
* case, we call set mode ourselves to restore the previous mode
|
||||||
* and the modelist may not be filled in in time.
|
* and the modelist may not be filled in in time.
|
||||||
|
@ -2654,10 +2668,12 @@ amdgpu_dm_connector_detect(struct drm_connector *connector, bool force)
|
||||||
bool connected;
|
bool connected;
|
||||||
struct amdgpu_dm_connector *aconnector = to_amdgpu_dm_connector(connector);
|
struct amdgpu_dm_connector *aconnector = to_amdgpu_dm_connector(connector);
|
||||||
|
|
||||||
/* Notes:
|
/*
|
||||||
|
* Notes:
|
||||||
* 1. This interface is NOT called in context of HPD irq.
|
* 1. This interface is NOT called in context of HPD irq.
|
||||||
* 2. This interface *is called* in context of user-mode ioctl. Which
|
* 2. This interface *is called* in context of user-mode ioctl. Which
|
||||||
* makes it a bad place for *any* MST-related activit. */
|
* makes it a bad place for *any* MST-related activity.
|
||||||
|
*/
|
||||||
|
|
||||||
if (aconnector->base.force == DRM_FORCE_UNSPECIFIED &&
|
if (aconnector->base.force == DRM_FORCE_UNSPECIFIED &&
|
||||||
!aconnector->fake_enable)
|
!aconnector->fake_enable)
|
||||||
|
@ -2901,7 +2917,8 @@ static void handle_edid_mgmt(struct amdgpu_dm_connector *aconnector)
|
||||||
{
|
{
|
||||||
struct dc_link *link = (struct dc_link *)aconnector->dc_link;
|
struct dc_link *link = (struct dc_link *)aconnector->dc_link;
|
||||||
|
|
||||||
/* In case of headless boot with force on for DP managed connector
|
/*
|
||||||
|
* In case of headless boot with force on for DP managed connector
|
||||||
* Those settings have to be != 0 to get initial modeset
|
* Those settings have to be != 0 to get initial modeset
|
||||||
*/
|
*/
|
||||||
if (link->connector_signal == SIGNAL_TYPE_DISPLAY_PORT) {
|
if (link->connector_signal == SIGNAL_TYPE_DISPLAY_PORT) {
|
||||||
|
@ -2929,7 +2946,8 @@ enum drm_mode_status amdgpu_dm_connector_mode_valid(struct drm_connector *connec
|
||||||
(mode->flags & DRM_MODE_FLAG_DBLSCAN))
|
(mode->flags & DRM_MODE_FLAG_DBLSCAN))
|
||||||
return result;
|
return result;
|
||||||
|
|
||||||
/* Only run this the first time mode_valid is called to initilialize
|
/*
|
||||||
|
* Only run this the first time mode_valid is called to initilialize
|
||||||
* EDID mgmt
|
* EDID mgmt
|
||||||
*/
|
*/
|
||||||
if (aconnector->base.force != DRM_FORCE_UNSPECIFIED &&
|
if (aconnector->base.force != DRM_FORCE_UNSPECIFIED &&
|
||||||
|
@ -2970,9 +2988,9 @@ fail:
|
||||||
static const struct drm_connector_helper_funcs
|
static const struct drm_connector_helper_funcs
|
||||||
amdgpu_dm_connector_helper_funcs = {
|
amdgpu_dm_connector_helper_funcs = {
|
||||||
/*
|
/*
|
||||||
* If hotplug a second bigger display in FB Con mode, bigger resolution
|
* If hotplugging a second bigger display in FB Con mode, bigger resolution
|
||||||
* modes will be filtered by drm_mode_validate_size(), and those modes
|
* modes will be filtered by drm_mode_validate_size(), and those modes
|
||||||
* is missing after user start lightdm. So we need to renew modes list.
|
* are missing after user start lightdm. So we need to renew modes list.
|
||||||
* in get_modes call back, not just return the modes count
|
* in get_modes call back, not just return the modes count
|
||||||
*/
|
*/
|
||||||
.get_modes = get_modes,
|
.get_modes = get_modes,
|
||||||
|
@ -2998,7 +3016,7 @@ static int dm_crtc_helper_atomic_check(struct drm_crtc *crtc,
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* In some use cases, like reset, no stream is attached */
|
/* In some use cases, like reset, no stream is attached */
|
||||||
if (!dm_crtc_state->stream)
|
if (!dm_crtc_state->stream)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
@ -3047,7 +3065,7 @@ static void dm_drm_plane_reset(struct drm_plane *plane)
|
||||||
|
|
||||||
amdgpu_state = kzalloc(sizeof(*amdgpu_state), GFP_KERNEL);
|
amdgpu_state = kzalloc(sizeof(*amdgpu_state), GFP_KERNEL);
|
||||||
WARN_ON(amdgpu_state == NULL);
|
WARN_ON(amdgpu_state == NULL);
|
||||||
|
|
||||||
if (amdgpu_state) {
|
if (amdgpu_state) {
|
||||||
plane->state = &amdgpu_state->base;
|
plane->state = &amdgpu_state->base;
|
||||||
plane->state->plane = plane;
|
plane->state->plane = plane;
|
||||||
|
@ -3225,7 +3243,7 @@ static const struct drm_plane_helper_funcs dm_plane_helper_funcs = {
|
||||||
* TODO: these are currently initialized to rgb formats only.
|
* TODO: these are currently initialized to rgb formats only.
|
||||||
* For future use cases we should either initialize them dynamically based on
|
* For future use cases we should either initialize them dynamically based on
|
||||||
* plane capabilities, or initialize this array to all formats, so internal drm
|
* plane capabilities, or initialize this array to all formats, so internal drm
|
||||||
* check will succeed, and let DC to implement proper check
|
* check will succeed, and let DC implement proper check
|
||||||
*/
|
*/
|
||||||
static const uint32_t rgb_formats[] = {
|
static const uint32_t rgb_formats[] = {
|
||||||
DRM_FORMAT_RGB888,
|
DRM_FORMAT_RGB888,
|
||||||
|
@ -3551,7 +3569,8 @@ void amdgpu_dm_connector_init_helper(struct amdgpu_display_manager *dm,
|
||||||
aconnector->hpd.hpd = AMDGPU_HPD_NONE; /* not used */
|
aconnector->hpd.hpd = AMDGPU_HPD_NONE; /* not used */
|
||||||
mutex_init(&aconnector->hpd_lock);
|
mutex_init(&aconnector->hpd_lock);
|
||||||
|
|
||||||
/* configure support HPD hot plug connector_>polled default value is 0
|
/*
|
||||||
|
* configure support HPD hot plug connector_>polled default value is 0
|
||||||
* which means HPD hot plug not supported
|
* which means HPD hot plug not supported
|
||||||
*/
|
*/
|
||||||
switch (connector_type) {
|
switch (connector_type) {
|
||||||
|
@ -3657,7 +3676,8 @@ create_i2c(struct ddc_service *ddc_service,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Note: this function assumes that dc_link_detect() was called for the
|
/*
|
||||||
|
* Note: this function assumes that dc_link_detect() was called for the
|
||||||
* dc_link which will be represented by this aconnector.
|
* dc_link which will be represented by this aconnector.
|
||||||
*/
|
*/
|
||||||
static int amdgpu_dm_connector_init(struct amdgpu_display_manager *dm,
|
static int amdgpu_dm_connector_init(struct amdgpu_display_manager *dm,
|
||||||
|
@ -3989,7 +4009,8 @@ static void amdgpu_dm_do_flip(struct drm_crtc *crtc,
|
||||||
target_vblank = target - (uint32_t)drm_crtc_vblank_count(crtc) +
|
target_vblank = target - (uint32_t)drm_crtc_vblank_count(crtc) +
|
||||||
amdgpu_get_vblank_counter_kms(crtc->dev, acrtc->crtc_id);
|
amdgpu_get_vblank_counter_kms(crtc->dev, acrtc->crtc_id);
|
||||||
|
|
||||||
/* TODO This might fail and hence better not used, wait
|
/*
|
||||||
|
* TODO This might fail and hence better not used, wait
|
||||||
* explicitly on fences instead
|
* explicitly on fences instead
|
||||||
* and in general should be called for
|
* and in general should be called for
|
||||||
* blocking commit to as per framework helpers
|
* blocking commit to as per framework helpers
|
||||||
|
@ -4006,7 +4027,8 @@ static void amdgpu_dm_do_flip(struct drm_crtc *crtc,
|
||||||
|
|
||||||
amdgpu_bo_unreserve(abo);
|
amdgpu_bo_unreserve(abo);
|
||||||
|
|
||||||
/* Wait until we're out of the vertical blank period before the one
|
/*
|
||||||
|
* Wait until we're out of the vertical blank period before the one
|
||||||
* targeted by the flip
|
* targeted by the flip
|
||||||
*/
|
*/
|
||||||
while ((acrtc->enabled &&
|
while ((acrtc->enabled &&
|
||||||
|
@ -4258,7 +4280,7 @@ static void amdgpu_dm_commit_planes(struct drm_atomic_state *state,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/*
|
||||||
* amdgpu_dm_crtc_copy_transient_flags - copy mirrored flags from DRM to DC
|
* amdgpu_dm_crtc_copy_transient_flags - copy mirrored flags from DRM to DC
|
||||||
* @crtc_state: the DRM CRTC state
|
* @crtc_state: the DRM CRTC state
|
||||||
* @stream_state: the DC stream state.
|
* @stream_state: the DC stream state.
|
||||||
|
@ -4295,8 +4317,10 @@ static int amdgpu_dm_atomic_commit(struct drm_device *dev,
|
||||||
if (drm_atomic_crtc_needs_modeset(new_crtc_state) && dm_old_crtc_state->stream)
|
if (drm_atomic_crtc_needs_modeset(new_crtc_state) && dm_old_crtc_state->stream)
|
||||||
manage_dm_interrupts(adev, acrtc, false);
|
manage_dm_interrupts(adev, acrtc, false);
|
||||||
}
|
}
|
||||||
/* Add check here for SoC's that support hardware cursor plane, to
|
/*
|
||||||
* unset legacy_cursor_update */
|
* Add check here for SoC's that support hardware cursor plane, to
|
||||||
|
* unset legacy_cursor_update
|
||||||
|
*/
|
||||||
|
|
||||||
return drm_atomic_helper_commit(dev, state, nonblock);
|
return drm_atomic_helper_commit(dev, state, nonblock);
|
||||||
|
|
||||||
|
@ -4361,8 +4385,8 @@ static void amdgpu_dm_atomic_commit_tail(struct drm_atomic_state *state)
|
||||||
* this could happen because of issues with
|
* this could happen because of issues with
|
||||||
* userspace notifications delivery.
|
* userspace notifications delivery.
|
||||||
* In this case userspace tries to set mode on
|
* In this case userspace tries to set mode on
|
||||||
* display which is disconnect in fact.
|
* display which is disconnected in fact.
|
||||||
* dc_sink in NULL in this case on aconnector.
|
* dc_sink is NULL in this case on aconnector.
|
||||||
* We expect reset mode will come soon.
|
* We expect reset mode will come soon.
|
||||||
*
|
*
|
||||||
* This can also happen when unplug is done
|
* This can also happen when unplug is done
|
||||||
|
@ -4431,7 +4455,7 @@ static void amdgpu_dm_atomic_commit_tail(struct drm_atomic_state *state)
|
||||||
if (!acrtc || drm_atomic_crtc_needs_modeset(new_crtc_state))
|
if (!acrtc || drm_atomic_crtc_needs_modeset(new_crtc_state))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
/* Skip any thing not scale or underscan changes */
|
/* Skip anything that is not scaling or underscan changes */
|
||||||
if (!is_scaling_state_different(dm_new_con_state, dm_old_con_state))
|
if (!is_scaling_state_different(dm_new_con_state, dm_old_con_state))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
@ -4516,7 +4540,8 @@ static void amdgpu_dm_atomic_commit_tail(struct drm_atomic_state *state)
|
||||||
|
|
||||||
drm_atomic_helper_cleanup_planes(dev, state);
|
drm_atomic_helper_cleanup_planes(dev, state);
|
||||||
|
|
||||||
/* Finally, drop a runtime PM reference for each newly disabled CRTC,
|
/*
|
||||||
|
* Finally, drop a runtime PM reference for each newly disabled CRTC,
|
||||||
* so we can put the GPU into runtime suspend if we're not driving any
|
* so we can put the GPU into runtime suspend if we're not driving any
|
||||||
* displays anymore
|
* displays anymore
|
||||||
*/
|
*/
|
||||||
|
@ -4584,9 +4609,9 @@ err:
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This functions handle all cases when set mode does not come upon hotplug.
|
* This function handles all cases when set mode does not come upon hotplug.
|
||||||
* This include when the same display is unplugged then plugged back into the
|
* This includes when a display is unplugged then plugged back into the
|
||||||
* same port and when we are running without usermode desktop manager supprot
|
* same port and when running without usermode desktop manager supprot
|
||||||
*/
|
*/
|
||||||
void dm_restore_drm_connector_state(struct drm_device *dev,
|
void dm_restore_drm_connector_state(struct drm_device *dev,
|
||||||
struct drm_connector *connector)
|
struct drm_connector *connector)
|
||||||
|
@ -4615,7 +4640,7 @@ void dm_restore_drm_connector_state(struct drm_device *dev,
|
||||||
dm_force_atomic_commit(&aconnector->base);
|
dm_force_atomic_commit(&aconnector->base);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*`
|
/*
|
||||||
* Grabs all modesetting locks to serialize against any blocking commits,
|
* Grabs all modesetting locks to serialize against any blocking commits,
|
||||||
* Waits for completion of all non blocking commits.
|
* Waits for completion of all non blocking commits.
|
||||||
*/
|
*/
|
||||||
|
@ -4626,7 +4651,8 @@ static int do_aquire_global_lock(struct drm_device *dev,
|
||||||
struct drm_crtc_commit *commit;
|
struct drm_crtc_commit *commit;
|
||||||
long ret;
|
long ret;
|
||||||
|
|
||||||
/* Adding all modeset locks to aquire_ctx will
|
/*
|
||||||
|
* Adding all modeset locks to aquire_ctx will
|
||||||
* ensure that when the framework release it the
|
* ensure that when the framework release it the
|
||||||
* extra locks we are locking here will get released to
|
* extra locks we are locking here will get released to
|
||||||
*/
|
*/
|
||||||
|
@ -4645,7 +4671,8 @@ static int do_aquire_global_lock(struct drm_device *dev,
|
||||||
if (!commit)
|
if (!commit)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
/* Make sure all pending HW programming completed and
|
/*
|
||||||
|
* Make sure all pending HW programming completed and
|
||||||
* page flips done
|
* page flips done
|
||||||
*/
|
*/
|
||||||
ret = wait_for_completion_interruptible_timeout(&commit->hw_done, 10*HZ);
|
ret = wait_for_completion_interruptible_timeout(&commit->hw_done, 10*HZ);
|
||||||
|
@ -4713,8 +4740,10 @@ static int dm_update_crtcs_state(struct amdgpu_display_manager *dm,
|
||||||
struct dc_stream_state *new_stream;
|
struct dc_stream_state *new_stream;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
/*TODO Move this code into dm_crtc_atomic_check once we get rid of dc_validation_set */
|
/*
|
||||||
/* update changed items */
|
* TODO Move this code into dm_crtc_atomic_check once we get rid of dc_validation_set
|
||||||
|
* update changed items
|
||||||
|
*/
|
||||||
for_each_oldnew_crtc_in_state(state, crtc, old_crtc_state, new_crtc_state, i) {
|
for_each_oldnew_crtc_in_state(state, crtc, old_crtc_state, new_crtc_state, i) {
|
||||||
struct amdgpu_crtc *acrtc = NULL;
|
struct amdgpu_crtc *acrtc = NULL;
|
||||||
struct amdgpu_dm_connector *aconnector = NULL;
|
struct amdgpu_dm_connector *aconnector = NULL;
|
||||||
|
@ -4739,7 +4768,7 @@ static int dm_update_crtcs_state(struct amdgpu_display_manager *dm,
|
||||||
|
|
||||||
/* TODO This hack should go away */
|
/* TODO This hack should go away */
|
||||||
if (aconnector && enable) {
|
if (aconnector && enable) {
|
||||||
// Make sure fake sink is created in plug-in scenario
|
/* Make sure fake sink is created in plug-in scenario */
|
||||||
drm_new_conn_state = drm_atomic_get_new_connector_state(state,
|
drm_new_conn_state = drm_atomic_get_new_connector_state(state,
|
||||||
&aconnector->base);
|
&aconnector->base);
|
||||||
drm_old_conn_state = drm_atomic_get_old_connector_state(state,
|
drm_old_conn_state = drm_atomic_get_old_connector_state(state,
|
||||||
|
@ -4759,9 +4788,9 @@ static int dm_update_crtcs_state(struct amdgpu_display_manager *dm,
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* we can have no stream on ACTION_SET if a display
|
* we can have no stream on ACTION_SET if a display
|
||||||
* was disconnected during S3, in this case it not and
|
* was disconnected during S3, in this case it is not an
|
||||||
* error, the OS will be updated after detection, and
|
* error, the OS will be updated after detection, and
|
||||||
* do the right thing on next atomic commit
|
* will do the right thing on next atomic commit
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (!new_stream) {
|
if (!new_stream) {
|
||||||
|
@ -5119,7 +5148,7 @@ static int amdgpu_dm_atomic_check(struct drm_device *dev,
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
/* Check scaling and underscan changes*/
|
/* Check scaling and underscan changes*/
|
||||||
/*TODO Removed scaling changes validation due to inability to commit
|
/* TODO Removed scaling changes validation due to inability to commit
|
||||||
* new stream into context w\o causing full reset. Need to
|
* new stream into context w\o causing full reset. Need to
|
||||||
* decide how to handle.
|
* decide how to handle.
|
||||||
*/
|
*/
|
||||||
|
@ -5142,7 +5171,7 @@ static int amdgpu_dm_atomic_check(struct drm_device *dev,
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* For full updates case when
|
* For full updates case when
|
||||||
* removing/adding/updating streams on once CRTC while flipping
|
* removing/adding/updating streams on one CRTC while flipping
|
||||||
* on another CRTC,
|
* on another CRTC,
|
||||||
* acquiring global lock will guarantee that any such full
|
* acquiring global lock will guarantee that any such full
|
||||||
* update commit
|
* update commit
|
||||||
|
|
Loading…
Reference in New Issue