On 2017-09-15 11:28 AM, Christian König wrote: > Am 15.09.2017 um 17:26 schrieb Deucher, Alexander: >>> -----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. >> Another option would be to tie the dc debug levels to drm debug levels. > > Which actually sounds like the correct solution to me. > > I mean we have drm debug levels for display debugging stuff for years, > why do we need an extra logging for DC now? > I agree, but one of the issues we've faced is that there's a whole lot of log-spam that's unrelated to DC which often prevents people seeing DC problems. Does DRM have log levels that can be used more fine-grained than DEBUG_KMS/DRIVER/etc? Harry > Christian. > >> >> 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) | \ >>>> >