From patchwork Wed Feb 6 19:24:42 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dan Streetman X-Patchwork-Id: 1037715 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.ubuntu.com (client-ip=91.189.94.19; helo=huckleberry.canonical.com; envelope-from=kernel-team-bounces@lists.ubuntu.com; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=canonical.com Received: from huckleberry.canonical.com (huckleberry.canonical.com [91.189.94.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 43vrxb0nkjz9sNQ; Thu, 7 Feb 2019 06:25:07 +1100 (AEDT) Received: from localhost ([127.0.0.1] helo=huckleberry.canonical.com) by huckleberry.canonical.com with esmtp (Exim 4.86_2) (envelope-from ) id 1grSoe-0008Cf-NK; Wed, 06 Feb 2019 19:25:00 +0000 Received: from youngberry.canonical.com ([91.189.89.112]) by huckleberry.canonical.com with esmtps (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:128) (Exim 4.86_2) (envelope-from ) id 1grSob-0008Bd-SL for kernel-team@lists.ubuntu.com; Wed, 06 Feb 2019 19:24:57 +0000 Received: from mail-yw1-f70.google.com ([209.85.161.70]) by youngberry.canonical.com with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.76) (envelope-from ) id 1grSob-0006Ij-Hv for kernel-team@lists.ubuntu.com; Wed, 06 Feb 2019 19:24:57 +0000 Received: by mail-yw1-f70.google.com with SMTP id c8so5260197ywa.0 for ; Wed, 06 Feb 2019 11:24:57 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=U6WBZHk+exHc8/NX1jDMroDbdXguPoKoaJmSRZ/ogjk=; b=jTvgkyLn6gTgSivHiDW1Th8lGG7l8hdu5Q3QQ8sjgOvJu+ndDzPJigjCaKxZHQXpNY ZHFfB1M/yaZaGc4OwM6c5bbGFaQGwxRHwq1d3Mhltg9odeCy8tr+zEj/vZFeWHzd27dz QFWGhl1fm40wlZ/FwnSJM540zGPJd0RfIr8S3XPd2og6AW3CA1qV5fE/3nwDTNCbyGbR x6iqaghrTlfMlgMHDQ70SElrydWC8vAhvyUroDChSo+h0JLh5EEaeNAeuQJhXLk7Yt9y P6zRviEoHvkHNw7GH2YMcvvSvrqgMDM7Rw1UYDYCNicCd+yViEPPcgkbbHOb9wxcVwFt nd1g== X-Gm-Message-State: AHQUAuZV6bx8T5rrne+ShlRrJVQH7mtJzDeOcbdjdGayRtOe8jM+/4N/ etfndoG4QClwR4n6TiW9Sdhmvpw8i+IrZfv8pYeQLbXjQYMgSHBk4/grDAWei1cV70GoXYCC/IR oOY/Lze9cxB/O04HCAfTUoy6YeeLFukS+BTKTOjgQ/A== X-Received: by 2002:a25:a286:: with SMTP id c6mr9580606ybi.295.1549481096446; Wed, 06 Feb 2019 11:24:56 -0800 (PST) X-Google-Smtp-Source: AHgI3IaY2YLIO/30NdJ94ASgKxc8GqjcaWy1W4YgrkyhdLas/qoF7kQPZUvSv/19QR/7u7A/rK21mQ== X-Received: by 2002:a25:a286:: with SMTP id c6mr9580583ybi.295.1549481096097; Wed, 06 Feb 2019 11:24:56 -0800 (PST) Received: from thorin.lan (45-27-90-188.lightspeed.rlghnc.sbcglobal.net. [45.27.90.188]) by smtp.gmail.com with ESMTPSA id f67sm2778213ywa.93.2019.02.06.11.24.55 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 06 Feb 2019 11:24:55 -0800 (PST) From: Dan Streetman To: kernel-team@lists.ubuntu.com Subject: [PATCH 2/3][SRU][Bionic] drm/amd/display: eDP sequence BL off first then DP blank. Date: Wed, 6 Feb 2019 14:24:42 -0500 Message-Id: <20190206192443.9649-3-dan.streetman@canonical.com> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20190206192443.9649-1-dan.streetman@canonical.com> References: <20190206192443.9649-1-dan.streetman@canonical.com> MIME-Version: 1.0 X-BeenThere: kernel-team@lists.ubuntu.com X-Mailman-Version: 2.1.20 Precedence: list List-Id: Kernel team discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: kernel-team-bounces@lists.ubuntu.com Sender: "kernel-team" From: Charlene Liu BugLink: https://bugs.launchpad.net/bugs/1814308 Signed-off-by: Charlene Liu Reviewed-by: Anthony Koo Acked-by: Harry Wentland Signed-off-by: Alex Deucher (backported from commit 41b497421a1f07ab99814da740984f907747120b) Signed-off-by: Dan Streetman --- drivers/gpu/drm/amd/display/dc/core/dc_link.c | 7 ++----- .../drm/amd/display/dc/dce/dce_link_encoder.c | 3 +++ .../display/dc/dce110/dce110_hw_sequencer.c | 21 ++++++++++++++++++- .../display/dc/dce110/dce110_hw_sequencer.h | 1 + .../amd/display/dc/dcn10/dcn10_hw_sequencer.c | 1 + .../gpu/drm/amd/display/dc/inc/hw_sequencer.h | 1 + 6 files changed, 28 insertions(+), 6 deletions(-) diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_link.c b/drivers/gpu/drm/amd/display/dc/core/dc_link.c index ca0adf46d1e8..d3cfe467d43d 100644 --- a/drivers/gpu/drm/amd/display/dc/core/dc_link.c +++ b/drivers/gpu/drm/amd/display/dc/core/dc_link.c @@ -1279,13 +1279,12 @@ static enum dc_status enable_link_edp( struct dc_stream_state *stream = pipe_ctx->stream; struct dc_link *link = stream->sink->link; + /*in case it is not on*/ link->dc->hwss.edp_power_control(link->link_enc, true); link->dc->hwss.edp_wait_for_hpd_ready(link->link_enc, true); status = enable_link_dp(state, pipe_ctx); - link->dc->hwss.edp_backlight_control(link, true); - return status; } @@ -2428,7 +2427,6 @@ void core_link_enable_stream( if (pipe_ctx->stream->signal == SIGNAL_TYPE_DISPLAY_PORT_MST) allocate_mst_payload(pipe_ctx); - if (dc_is_dp_signal(pipe_ctx->stream->signal)) core_dc->hwss.unblank_stream(pipe_ctx, &pipe_ctx->stream->sink->link->cur_link_settings); } @@ -2440,8 +2438,7 @@ void core_link_disable_stream(struct pipe_ctx *pipe_ctx, int option) if (pipe_ctx->stream->signal == SIGNAL_TYPE_DISPLAY_PORT_MST) deallocate_mst_payload(pipe_ctx); - if (pipe_ctx->stream->signal == SIGNAL_TYPE_EDP) - core_dc->hwss.edp_backlight_control(pipe_ctx->stream->sink->link, false); + core_dc->hwss.blank_stream(pipe_ctx); core_dc->hwss.disable_stream(pipe_ctx, option); diff --git a/drivers/gpu/drm/amd/display/dc/dce/dce_link_encoder.c b/drivers/gpu/drm/amd/display/dc/dce/dce_link_encoder.c index b24f8c70ced8..5caff3aac9d7 100644 --- a/drivers/gpu/drm/amd/display/dc/dce/dce_link_encoder.c +++ b/drivers/gpu/drm/amd/display/dc/dce/dce_link_encoder.c @@ -838,6 +838,9 @@ void dce110_link_encoder_hw_init( cntl.coherent = false; cntl.hpd_sel = enc110->base.hpd_source; + if (enc110->base.connector.id == CONNECTOR_ID_EDP) + cntl.signal = SIGNAL_TYPE_EDP; + result = link_transmitter_control(enc110, &cntl); if (result != BP_RESULT_OK) { diff --git a/drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c b/drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c index 6847fbe8feff..a54765873b15 100644 --- a/drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c +++ b/drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c @@ -1038,12 +1038,30 @@ void dce110_unblank_stream(struct pipe_ctx *pipe_ctx, struct dc_link_settings *link_settings) { struct encoder_unblank_param params = { { 0 } }; + struct dc_stream_state *stream = pipe_ctx->stream; + struct dc_link *link = stream->sink->link; /* only 3 items below are used by unblank */ params.pixel_clk_khz = pipe_ctx->stream->timing.pix_clk_khz; params.link_settings.link_rate = link_settings->link_rate; - pipe_ctx->stream_res.stream_enc->funcs->dp_unblank(pipe_ctx->stream_res.stream_enc, ¶ms); + + if (dc_is_dp_signal(pipe_ctx->stream->signal)) + pipe_ctx->stream_res.stream_enc->funcs->dp_unblank(pipe_ctx->stream_res.stream_enc, ¶ms); + + if (link->local_sink && link->local_sink->sink_signal == SIGNAL_TYPE_EDP) + link->dc->hwss.edp_backlight_control(link, true); +} +void dce110_blank_stream(struct pipe_ctx *pipe_ctx) +{ + struct dc_stream_state *stream = pipe_ctx->stream; + struct dc_link *link = stream->sink->link; + + if (link->local_sink && link->local_sink->sink_signal == SIGNAL_TYPE_EDP) + link->dc->hwss.edp_backlight_control(link, false); + + if (dc_is_dp_signal(pipe_ctx->stream->signal)) + pipe_ctx->stream_res.stream_enc->funcs->dp_blank(pipe_ctx->stream_res.stream_enc); } @@ -2974,6 +2992,7 @@ static const struct hw_sequencer_funcs dce110_funcs = { .enable_stream = dce110_enable_stream, .disable_stream = dce110_disable_stream, .unblank_stream = dce110_unblank_stream, + .blank_stream = dce110_blank_stream, .enable_display_pipe_clock_gating = enable_display_pipe_clock_gating, .enable_display_power_gating = dce110_enable_display_power_gating, .power_down_front_end = dce110_power_down_fe, diff --git a/drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.h b/drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.h index 9e057148f3e1..5d5912f15205 100644 --- a/drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.h +++ b/drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.h @@ -52,6 +52,7 @@ void dce110_disable_stream(struct pipe_ctx *pipe_ctx, int option); void dce110_unblank_stream(struct pipe_ctx *pipe_ctx, struct dc_link_settings *link_settings); +void dce110_blank_stream(struct pipe_ctx *pipe_ctx); void dce110_update_info_frame(struct pipe_ctx *pipe_ctx); void dce110_set_avmute(struct pipe_ctx *pipe_ctx, bool enable); diff --git a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c index 50d9492b57a3..5e5f202a1ad1 100644 --- a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c +++ b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c @@ -2956,6 +2956,7 @@ static const struct hw_sequencer_funcs dcn10_funcs = { .enable_stream = dce110_enable_stream, .disable_stream = dce110_disable_stream, .unblank_stream = dce110_unblank_stream, + .blank_stream = dce110_blank_stream, .enable_display_power_gating = dcn10_dummy_display_power_gating, .power_down_front_end = dcn10_power_down_fe, .power_on_front_end = dcn10_power_on_fe, diff --git a/drivers/gpu/drm/amd/display/dc/inc/hw_sequencer.h b/drivers/gpu/drm/amd/display/dc/inc/hw_sequencer.h index 62837e176383..e8fd420120da 100644 --- a/drivers/gpu/drm/amd/display/dc/inc/hw_sequencer.h +++ b/drivers/gpu/drm/amd/display/dc/inc/hw_sequencer.h @@ -140,6 +140,7 @@ struct hw_sequencer_funcs { void (*unblank_stream)(struct pipe_ctx *pipe_ctx, struct dc_link_settings *link_settings); + void (*blank_stream)(struct pipe_ctx *pipe_ctx); void (*pipe_control_lock)( struct dc *dc, struct pipe_ctx *pipe,