[PATCH 3/3] drm/amd/display: Reduce DC chattiness

Harry Wentland harry.wentland at amd.com
Fri Sep 15 15:42:57 UTC 2017


On 2017-09-15 11:27 AM, Deucher, Alexander wrote:
>> -----Original Message-----
>> From: Wentland, Harry
>> Sent: Friday, September 15, 2017 11:21 AM
>> To: Koenig, Christian; amd-gfx at lists.freedesktop.org
>> Cc: Deucher, Alexander; Grodzovsky, Andrey; Cheng, Tony
>> Subject: Re: [PATCH 3/3] drm/amd/display: Reduce DC chattiness
>>
>>
>>
>> On 2017-09-15 11:08 AM, Christian König wrote:
>>> Am 15.09.2017 um 16:32 schrieb Harry Wentland:
>>>> Log DC init but default log level to 0 (default for
>>>> amdgpu_dc_log) otherwise. Bug reporters can still make
>>>> DC more chatty like so
>>>>      amdgpu.dc_log = 1
>>>
>>> Which is exactly the reason why I think this patch is superfluous.
>>>
>>> Either have a compile time option or a run time option, but please not
>>> both that's just confusing.
>>>
>>
>> True. Thanks for the input.
>>
>> Gonna leave out the run time option for now.
> 
> I'd rather leave the runtime option and remove the compile option.  It's easier to get logs by changing a runtime option than to ask a user to recompile their kernel.
> 

True. Right now I was shooting for simplicity for internal teams and
know what a struggle it can be to teach some people how to pass a module
parameter. Enabling this in internal builds (to avoid this) plus giving
people a runtime option would be the ideal case in the short term.

I'll also look at Felix's suggestions but won't be able to fit this in
in a short period of time. I definitely realize that config option and
module param aren't quite the right way to go about this.

Harry

> Alex
> 
>>
>> Harry
>>
>>> Christian.
>>>
>>>>
>>>> Change-Id: Icdfb849fa678225e2460519fbd8066540feb451a
>>>> Signed-off-by: Harry Wentland <harry.wentland at amd.com>
>>>> ---
>>>>   drivers/gpu/drm/amd/display/Kconfig                | 10 +++
>>>>   drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c  | 77
>>>> ++++++++++++----------
>>>>   drivers/gpu/drm/amd/display/include/logger_types.h |  3 +
>>>>   3 files changed, 56 insertions(+), 34 deletions(-)
>>>>
>>>> diff --git a/drivers/gpu/drm/amd/display/Kconfig
>>>> b/drivers/gpu/drm/amd/display/Kconfig
>>>> index 1d1a5f807030..baab055dd362 100644
>>>> --- a/drivers/gpu/drm/amd/display/Kconfig
>>>> +++ b/drivers/gpu/drm/amd/display/Kconfig
>>>> @@ -31,4 +31,14 @@ config DEBUG_KERNEL_DC
>>>>         if you want to hit
>>>>         kdgb_break in assert.
>>>>   +config DRM_AMD_DC_CHATTY
>>>> +    bool "Make DC chatty again"
>>>> +    default n
>>>> +    depends on DRM_AMD_DC
>>>> +    help
>>>> +      Sometimes it's useful to have a chatty DC
>>>> +      without a ton of spam from DRM. This allows
>>>> +      for that and is recommended for anyone
>>>> +      reporting bugs to DC.
>>>> +
>>>>   endmenu
>>>> diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
>>>> b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
>>>> index abe89e3fed5b..6ecb420b2a63 100644
>>>> --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
>>>> +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
>>>> @@ -333,7 +333,6 @@ int amdgpu_dm_init(struct amdgpu_device
>> *adev)
>>>>       adev->dm.ddev = adev->ddev;
>>>>       adev->dm.adev = adev;
>>>>   -    DRM_INFO("DAL is enabled\n");
>>>>       /* Zero all the fields */
>>>>       memset(&init_data, 0, sizeof(init_data));
>>>>   @@ -373,7 +372,15 @@ int amdgpu_dm_init(struct amdgpu_device
>> *adev)
>>>>         init_data.dce_environment = DCE_ENV_PRODUCTION_DRV;
>>>>   +#ifdef CONFIG_DRM_AMD_DC_CHATTY
>>>> +    /* always be chatty */
>>>>       init_data.log_mask = DC_DEFAULT_LOG_MASK;
>>>> +#else
>>>> +    if (amdgpu_dc_log)
>>>> +        init_data.log_mask = DC_DEFAULT_LOG_MASK;
>>>> +    else
>>>> +        init_data.log_mask = DC_MIN_LOG_MASK;
>>>> +#endif
>>>>     #ifdef ENABLE_FBC
>>>>       if (adev->family == FAMILY_CZ)
>>>> @@ -383,7 +390,9 @@ int amdgpu_dm_init(struct amdgpu_device
>> *adev)
>>>>       /* Display Core create. */
>>>>       adev->dm.dc = dc_create(&init_data);
>>>>   -    if (!adev->dm.dc)
>>>> +    if (adev->dm.dc)
>>>> +        DRM_INFO("Display Core initialized!\n");
>>>> +    else
>>>>           DRM_INFO("Display Core failed to initialize!\n");
>>>>         INIT_WORK(&adev->dm.mst_hotplug_work,
>> hotplug_notify_work_func);
>>>> @@ -393,7 +402,7 @@ int amdgpu_dm_init(struct amdgpu_device
>> *adev)
>>>>           DRM_ERROR(
>>>>           "amdgpu: failed to initialize freesync_module.\n");
>>>>       } else
>>>> -        DRM_INFO("amdgpu: freesync_module init done %p.\n",
>>>> +        DRM_DEBUG_DRIVER("amdgpu: freesync_module init done %p.\n",
>>>>                   adev->dm.freesync_module);
>>>>         if (amdgpu_dm_initialize_drm_device(adev)) {
>>>> @@ -417,7 +426,7 @@ int amdgpu_dm_init(struct amdgpu_device
>> *adev)
>>>>           goto error;
>>>>       }
>>>>   -    DRM_INFO("KMS initialized.\n");
>>>> +    DRM_DEBUG_DRIVER("KMS initialized.\n");
>>>>         return 0;
>>>>   error:
>>>> @@ -475,7 +484,7 @@ static int
>>>> detect_mst_link_for_all_connectors(struct drm_device *dev)
>>>>       list_for_each_entry(connector, &dev->mode_config.connector_list,
>>>> head) {
>>>>              aconnector = to_amdgpu_dm_connector(connector);
>>>>           if (aconnector->dc_link->type == dc_connection_mst_branch) {
>>>> -            DRM_INFO("DM_MST: starting TM on aconnector: %p [id: %d]\n",
>>>> +            DRM_DEBUG_DRIVER("DM_MST: starting TM on aconnector: %p
>>>> [id: %d]\n",
>>>>                       aconnector, aconnector->base.base.id);
>>>>                 ret =
>>>> drm_dp_mst_topology_mgr_set_mst(&aconnector->mst_mgr, true);
>>>> @@ -819,12 +828,12 @@ void
>> amdgpu_dm_update_connector_after_detect(
>>>>       if (aconnector->dc_sink == sink) {
>>>>           /* We got a DP short pulse (Link Loss, DP CTS, etc...).
>>>>            * Do nothing!! */
>>>> -        DRM_INFO("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);
>>>>           return;
>>>>       }
>>>>   -    DRM_INFO("DCHPD: connector_id=%d: Old sink=%p New
>> sink=%p\n",
>>>> +    DRM_DEBUG_DRIVER("DCHPD: connector_id=%d: Old sink=%p New
>>>> sink=%p\n",
>>>>           aconnector->connector_id, aconnector->dc_sink, sink);
>>>>         mutex_lock(&dev->mode_config.mutex);
>>>> @@ -926,7 +935,7 @@ static void dm_handle_hpd_rx_irq(struct
>>>> amdgpu_dm_connector *aconnector)
>>>>             process_count++;
>>>>   -        DRM_DEBUG_KMS("ESI %02x %02x %02x\n", esi[0], esi[1], esi[2]);
>>>> +        DRM_DEBUG_DRIVER("ESI %02x %02x %02x\n", esi[0], esi[1],
>>>> esi[2]);
>>>>           /* handle HPD short pulse irq */
>>>>           if (aconnector->mst_mgr.mst_state)
>>>>               drm_dp_mst_hpd_irq(
>>>> @@ -964,7 +973,7 @@ static void dm_handle_hpd_rx_irq(struct
>>>> amdgpu_dm_connector *aconnector)
>>>>       }
>>>>         if (process_count == max_process_count)
>>>> -        DRM_DEBUG_KMS("Loop exceeded max iterations\n");
>>>> +        DRM_DEBUG_DRIVER("Loop exceeded max iterations\n");
>>>>   }
>>>>     static void handle_hpd_rx_irq(void *param)
>>>> @@ -1283,7 +1292,7 @@ void
>> amdgpu_dm_register_backlight_device(struct
>>>> amdgpu_display_manager *dm)
>>>>       if (NULL == dm->backlight_dev)
>>>>           DRM_ERROR("DM: Backlight registration failed!\n");
>>>>       else
>>>> -        DRM_INFO("DM: Registered Backlight device: %s\n", bl_name);
>>>> +        DRM_DEBUG_DRIVER("DM: Registered Backlight device: %s\n",
>>>> bl_name);
>>>>   }
>>>>     #endif
>>>> @@ -2064,7 +2073,7 @@ static void update_stream_scaling_settings(
>>>>       stream->src = src;
>>>>       stream->dst = dst;
>>>>   -    DRM_DEBUG_KMS("Destination Rectangle x:%d  y:%d  width:%d
>>>> height:%d\n",
>>>> +    DRM_DEBUG_DRIVER("Destination Rectangle x:%d  y:%d  width:%d
>>>> height:%d\n",
>>>>               dst.x, dst.y, dst.width, dst.height);
>>>>     }
>>>> @@ -2374,7 +2383,7 @@ static struct dc_stream_state
>>>> *create_stream_for_sink(
>>>>            * case, we call set mode ourselves to restore the previous
>>>> mode
>>>>            * and the modelist may not be filled in in time.
>>>>            */
>>>> -        DRM_INFO("No preferred mode found\n");
>>>> +        DRM_DEBUG_DRIVER("No preferred mode found\n");
>>>>       } else {
>>>>           decide_crtc_timing_for_drm_display_mode(
>>>>                   &mode, preferred_mode,
>>>> @@ -2749,7 +2758,7 @@ static struct drm_encoder *best_encoder(struct
>>>> drm_connector *connector)
>>>>       struct drm_mode_object *obj;
>>>>       struct drm_encoder *encoder;
>>>>   -    DRM_DEBUG_KMS("Finding the best encoder\n");
>>>> +    DRM_DEBUG_DRIVER("Finding the best encoder\n");
>>>>         /* pick the encoder ids */
>>>>       if (enc_id) {
>>>> @@ -3019,7 +3028,7 @@ static int dm_plane_helper_prepare_fb(
>>>>       dm_plane_state_new = to_dm_plane_state(new_state);
>>>>         if (!new_state->fb) {
>>>> -        DRM_DEBUG_KMS("No FB bound\n");
>>>> +        DRM_DEBUG_DRIVER("No FB bound\n");
>>>>           return 0;
>>>>       }
>>>>   @@ -3594,7 +3603,7 @@ int amdgpu_dm_connector_init(
>>>>       struct amdgpu_i2c_adapter *i2c;
>>>>       ((struct dc_link *)link)->priv = aconnector;
>>>>   -    DRM_DEBUG_KMS("%s()\n", __func__);
>>>> +    DRM_DEBUG_DRIVER("%s()\n", __func__);
>>>>         i2c = create_i2c(link->ddc, link->link_index, &res);
>>>>       aconnector->i2c = i2c;
>>>> @@ -3835,11 +3844,11 @@ static void handle_cursor_update(
>>>>       if (!plane->state->fb && !old_plane_state->fb)
>>>>           return;
>>>>   -    DRM_DEBUG_KMS("%s: crtc_id=%d with size %d to %d\n",
>>>> -              __func__,
>>>> -              amdgpu_crtc->crtc_id,
>>>> -              plane->state->crtc_w,
>>>> -              plane->state->crtc_h);
>>>> +    DRM_DEBUG_DRIVER("%s: crtc_id=%d with size %d to %d\n",
>>>> +                 __func__,
>>>> +                 amdgpu_crtc->crtc_id,
>>>> +                 plane->state->crtc_w,
>>>> +                 plane->state->crtc_h);
>>>>         ret = get_cursor_position(plane, crtc, &position);
>>>>       if (ret)
>>>> @@ -4142,7 +4151,7 @@ void amdgpu_dm_atomic_commit_tail(
>>>>           new_acrtc_state = to_dm_crtc_state(new_state);
>>>>           old_acrtc_state = to_dm_crtc_state(old_crtc_state);
>>>>   -        DRM_DEBUG_KMS(
>>>> +        DRM_DEBUG_DRIVER(
>>>>               "amdgpu_crtc id:%d crtc_state_flags: enable:%d,
>>>> active:%d, "
>>>>               "planes_changed:%d, mode_changed:%d,active_changed:%d,"
>>>>               "connectors_changed:%d\n",
>>>> @@ -4160,7 +4169,7 @@ void amdgpu_dm_atomic_commit_tail(
>>>>             if (modeset_required(new_state, new_acrtc_state->stream,
>>>> old_acrtc_state->stream)) {
>>>>   -            DRM_INFO("Atomic commit: SET crtc id %d: [%p]\n",
>>>> acrtc->crtc_id, acrtc);
>>>> +            DRM_DEBUG_DRIVER("Atomic commit: SET crtc id %d: [%p]\n",
>>>> acrtc->crtc_id, acrtc);
>>>>                 if (!new_acrtc_state->stream) {
>>>>                   /*
>>>> @@ -4178,7 +4187,7 @@ void amdgpu_dm_atomic_commit_tail(
>>>>                    * have a sink to keep the pipe running so that
>>>>                    * hw state is consistent with the sw state
>>>>                    */
>>>> -                DRM_DEBUG_KMS("%s: Failed to create new stream for
>>>> crtc %d\n",
>>>> +                DRM_DEBUG_DRIVER("%s: Failed to create new stream for
>>>> crtc %d\n",
>>>>                           __func__, acrtc->base.base.id);
>>>>                   continue;
>>>>               }
>>>> @@ -4205,7 +4214,7 @@ void amdgpu_dm_atomic_commit_tail(
>>>>               acrtc->hw_mode = crtc->state->mode;
>>>>               crtc->hwmode = crtc->state->mode;
>>>>           } else if (modereset_required(new_state)) {
>>>> -            DRM_INFO("Atomic commit: RESET. crtc id %d:[%p]\n",
>>>> acrtc->crtc_id, acrtc);
>>>> +            DRM_DEBUG_DRIVER("Atomic commit: RESET. crtc id
>>>> %d:[%p]\n", acrtc->crtc_id, acrtc);
>>>>                 /* i.e. reset mode */
>>>>               if (old_acrtc_state->stream)
>>>> @@ -4230,7 +4239,7 @@ void amdgpu_dm_atomic_commit_tail(
>>>>                       &new_crtcs[i]->base,
>>>>                       false);
>>>>               if (!aconnector) {
>>>> -                DRM_INFO("Atomic commit: Failed to find connector for
>>>> acrtc id:%d "
>>>> +                DRM_DEBUG_DRIVER("Atomic commit: Failed to find
>>>> connector for acrtc id:%d "
>>>>                        "skipping freesync init\n",
>>>>                        new_crtcs[i]->crtc_id);
>>>>                   continue;
>>>> @@ -4539,7 +4548,7 @@ static int dm_update_crtcs_state(
>>>>                */
>>>>                 if (!new_stream) {
>>>> -                DRM_DEBUG_KMS("%s: Failed to create new stream for
>>>> crtc %d\n",
>>>> +                DRM_DEBUG_DRIVER("%s: Failed to create new stream for
>>>> crtc %d\n",
>>>>                           __func__, acrtc->base.base.id);
>>>>                   break;
>>>>               }
>>>> @@ -4550,7 +4559,7 @@ static int dm_update_crtcs_state(
>>>>                     crtc_state->mode_changed = false;
>>>>   -                DRM_DEBUG_KMS("Mode change not required, setting
>>>> mode_changed to %d",
>>>> +                DRM_DEBUG_DRIVER("Mode change not required, setting
>>>> mode_changed to %d",
>>>>                             crtc_state->mode_changed);
>>>>           }
>>>>   @@ -4558,7 +4567,7 @@ static int dm_update_crtcs_state(
>>>>           if (!drm_atomic_crtc_needs_modeset(crtc_state))
>>>>               goto next_crtc;
>>>>   -        DRM_DEBUG_KMS(
>>>> +        DRM_DEBUG_DRIVER(
>>>>               "amdgpu_crtc id:%d crtc_state_flags: enable:%d,
>>>> active:%d, "
>>>>               "planes_changed:%d, mode_changed:%d,active_changed:%d,"
>>>>               "connectors_changed:%d\n",
>>>> @@ -4576,7 +4585,7 @@ static int dm_update_crtcs_state(
>>>>               if (!old_acrtc_state->stream)
>>>>                   goto next_crtc;
>>>>   -            DRM_DEBUG_KMS("Disabling DRM crtc: %d\n",
>>>> +            DRM_DEBUG_DRIVER("Disabling DRM crtc: %d\n",
>>>>                       crtc->base.id);
>>>>                 /* i.e. reset mode */
>>>> @@ -4606,7 +4615,7 @@ static int dm_update_crtcs_state(
>>>>                   new_acrtc_state->stream = new_stream;
>>>>                   dc_stream_retain(new_stream);
>>>>   -                DRM_DEBUG_KMS("Enabling DRM crtc: %d\n",
>>>> +                DRM_DEBUG_DRIVER("Enabling DRM crtc: %d\n",
>>>>                               crtc->base.id);
>>>>                     if (!dc_add_stream_to_ctx(
>>>> @@ -4681,7 +4690,7 @@ static int dm_update_planes_state(
>>>>               if (!old_acrtc_state->stream)
>>>>                   continue;
>>>>   -            DRM_DEBUG_KMS("Disabling DRM plane: %d on DRM crtc %d\n",
>>>> +            DRM_DEBUG_DRIVER("Disabling DRM plane: %d on DRM crtc
>> %d\n",
>>>>                       plane->base.id, old_plane_crtc->base.id);
>>>>                 if (!dc_remove_plane_from_context(
>>>> @@ -4719,7 +4728,7 @@ static int dm_update_planes_state(
>>>>                 new_dm_plane_state->dc_state = dc_create_plane_state(dc);
>>>>   -            DRM_DEBUG_KMS("Enabling DRM plane: %d on DRM crtc %d\n",
>>>> +            DRM_DEBUG_DRIVER("Enabling DRM plane: %d on DRM crtc
>> %d\n",
>>>>                       plane->base.id, new_plane_crtc->base.id);
>>>>                 if (!new_dm_plane_state->dc_state) {
>>>> @@ -4874,9 +4883,9 @@ int amdgpu_dm_atomic_check(struct
>> drm_device *dev,
>>>>     fail:
>>>>       if (ret == -EDEADLK)
>>>> -        DRM_DEBUG_KMS("Atomic check stopped due to to deadlock.\n");
>>>> +        DRM_DEBUG_DRIVER("Atomic check stopped due to to
>> deadlock.\n");
>>>>       else if (ret == -EINTR || ret == -EAGAIN || ret == -ERESTARTSYS)
>>>> -        DRM_DEBUG_KMS("Atomic check stopped due to to signal.\n");
>>>> +        DRM_DEBUG_DRIVER("Atomic check stopped due to to signal.\n");
>>>>       else
>>>>           DRM_ERROR("Atomic check failed with err: %d \n", ret);
>>>>   diff --git a/drivers/gpu/drm/amd/display/include/logger_types.h
>>>> b/drivers/gpu/drm/amd/display/include/logger_types.h
>>>> index 044805ccac25..1f22e84cedb9 100644
>>>> --- a/drivers/gpu/drm/amd/display/include/logger_types.h
>>>> +++ b/drivers/gpu/drm/amd/display/include/logger_types.h
>>>> @@ -70,6 +70,9 @@ enum dc_log_type {
>>>>       LOG_SECTION_TOTAL_COUNT
>>>>   };
>>>>   +#define DC_MIN_LOG_MASK ((1 << LOG_ERROR) | \
>>>> +        (1 << LOG_DETECTION_EDID_PARSER))
>>>> +
>>>>   #define DC_DEFAULT_LOG_MASK ((1 << LOG_ERROR) | \
>>>>           (1 << LOG_WARNING) | \
>>>>           (1 << LOG_EVENT_MODE_SET) | \
>>>
>>>


More information about the amd-gfx mailing list