On 2018-07-12 10:07 AM, David Francis wrote: > [Why] > When a dce100 asic was suspended, the clocks were not set to 0. > Upon resume, the new clock was compared to the existing clock, > they were found to be the same, and so the clock was not set. > This resulted in a pernicious blackscreen. > > [How] > In atomic commit, check to see if there are any active pipes. > If no, set clocks to 0 > Please add Fixes: tag with link to freedesktop bugzilla bug that this fixes. I believe the issue is older than 4.18. Can you confirm? If so, please add Cc: stable at vger.kernel.org Harry > Signed-off-by: David Francis <David.Francis at amd.com> > --- > .../amd/display/dc/dce100/dce100_resource.c | 19 ++++++++++++++++--- > 1 file changed, 16 insertions(+), 3 deletions(-) > > diff --git a/drivers/gpu/drm/amd/display/dc/dce100/dce100_resource.c b/drivers/gpu/drm/amd/display/dc/dce100/dce100_resource.c > index 8ed8eace42be..ad8ad4e1437c 100644 > --- a/drivers/gpu/drm/amd/display/dc/dce100/dce100_resource.c > +++ b/drivers/gpu/drm/amd/display/dc/dce100/dce100_resource.c > @@ -678,9 +678,22 @@ bool dce100_validate_bandwidth( > struct dc *dc, > struct dc_state *context) > { > - /* TODO implement when needed but for now hardcode max value*/ > - context->bw.dce.dispclk_khz = 681000; > - context->bw.dce.yclk_khz = 250000 * MEMORY_TYPE_MULTIPLIER; > + int i; > + bool at_least_one_pipe = false; > + > + for (i = 0; i < dc->res_pool->pipe_count; i++) { > + if (context->res_ctx.pipe_ctx[i].stream) > + at_least_one_pipe = true; > + } > + > + if (at_least_one_pipe) { > + /* TODO implement when needed but for now hardcode max value*/ > + context->bw.dce.dispclk_khz = 681000; > + context->bw.dce.yclk_khz = 250000 * MEMORY_TYPE_MULTIPLIER; > + } else { > + context->bw.dce.dispclk_khz = 0; > + context->bw.dce.yclk_khz = 0; > + } > > return true; > } >