From: Lyude Paul <lyude@redhat.com>
To: mikita.lipski@amd.com, amd-gfx@lists.freedesktop.org
Cc: Manasi Navare <manasi.d.navare@intel.com>,
Jerry Zuo <Jerry.Zuo@amd.com>,
Harry Wentland <harry.wentland@amd.com>,
dri-devel@lists.freedesktop.org
Subject: Re: [PATCH v8 15/17] drm/amd/display: Recalculate VCPI slots for new DSC connectors
Date: Fri, 06 Dec 2019 19:52:52 -0500 [thread overview]
Message-ID: <38c62a0d96c1368f22affd2d8a18eb6c78afee37.camel@redhat.com> (raw)
In-Reply-To: <20191203143530.27262-16-mikita.lipski@amd.com>
Reviewed-by: Lyude Paul <lyude@redhat.com>
On Tue, 2019-12-03 at 09:35 -0500, mikita.lipski@amd.com wrote:
> From: Mikita Lipski <mikita.lipski@amd.com>
>
> [why]
> Since for DSC MST connector's PBN is claculated differently
> due to compression, we have to recalculate both PBN and
> VCPI slots for that connector.
>
> [how]
> The function iterates through all the active streams to
> find, which have DSC enabled, then recalculates PBN for
> it and calls drm_dp_helper_update_vcpi_slots_for_dsc to
> update connector's VCPI slots.
>
> v2: - use drm_dp_mst_atomic_enable_dsc per port to
> enable/disable DSC
>
> v3: - Iterate through connector states from the state passed
> - On each connector state get stream from dc_state,
> instead CRTC state
>
> Cc: Jerry Zuo <Jerry.Zuo@amd.com>
> Cc: Harry Wentland <harry.wentland@amd.com>
> Cc: Lyude Paul <lyude@redhat.com>
> Cc: Manasi Navare <manasi.d.navare@intel.com>
> Signed-off-by: Mikita Lipski <mikita.lipski@amd.com>
> ---
> .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 76 +++++++++++++++++--
> 1 file changed, 71 insertions(+), 5 deletions(-)
>
> 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 93a230d956ee..2ac3a2f0b452 100644
> --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
> +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
> @@ -4986,6 +4986,69 @@ const struct drm_encoder_helper_funcs
> amdgpu_dm_encoder_helper_funcs = {
> .atomic_check = dm_encoder_helper_atomic_check
> };
>
> +static int dm_update_mst_vcpi_slots_for_dsc(struct drm_atomic_state *state,
> + struct dc_state *dc_state)
> +{
> + struct dc_stream_state *stream = NULL;
> + struct drm_connector *connector;
> + struct drm_connector_state *new_con_state, *old_con_state;
> + struct amdgpu_dm_connector *aconnector;
> + struct dm_connector_state *dm_conn_state;
> + int i, j, clock, bpp;
> + int vcpi, pbn_div, pbn = 0;
> +
> + for_each_oldnew_connector_in_state(state, connector, old_con_state,
> new_con_state, i) {
> +
> + aconnector = to_amdgpu_dm_connector(connector);
> +
> + if (!aconnector->port)
> + continue;
> +
> + if (!new_con_state || !new_con_state->crtc)
> + continue;
> +
> + dm_conn_state = to_dm_connector_state(new_con_state);
> +
> + for (j = 0; j < dc_state->stream_count; j++) {
> + stream = dc_state->streams[j];
> + if (!stream)
> + continue;
> +
> + if ((struct amdgpu_dm_connector*)stream-
> >dm_stream_context == aconnector)
> + break;
> +
> + stream = NULL;
> + }
> +
> + if (!stream)
> + continue;
> +
> + if (stream->timing.flags.DSC != 1) {
> + drm_dp_mst_atomic_enable_dsc(state,
> + aconnector->port,
> + dm_conn_state->pbn,
> + 0,
> + false);
> + continue;
> + }
> +
> + pbn_div = dm_mst_get_pbn_divider(stream->link);
> + bpp = stream->timing.dsc_cfg.bits_per_pixel;
> + clock = stream->timing.pix_clk_100hz / 10;
> + pbn = drm_dp_calc_pbn_mode(clock, bpp, true);
> + vcpi = drm_dp_mst_atomic_enable_dsc(state,
> + aconnector->port,
> + pbn, pbn_div,
> + true);
> + if (vcpi < 0)
> + return vcpi;
> +
> + dm_conn_state->pbn = pbn;
> + dm_conn_state->vcpi_slots = vcpi;
> + }
> + return 0;
> +}
> +
> static void dm_drm_plane_reset(struct drm_plane *plane)
> {
> struct dm_plane_state *amdgpu_state = NULL;
> @@ -8022,11 +8085,6 @@ static int amdgpu_dm_atomic_check(struct drm_device
> *dev,
> if (ret)
> goto fail;
>
> - /* Perform validation of MST topology in the state*/
> - ret = drm_dp_mst_atomic_check(state);
> - if (ret)
> - goto fail;
> -
> if (state->legacy_cursor_update) {
> /*
> * This is a fast cursor update coming from the plane update
> @@ -8098,6 +8156,10 @@ static int amdgpu_dm_atomic_check(struct drm_device
> *dev,
> if (!compute_mst_dsc_configs_for_state(state, dm_state-
> >context))
> goto fail;
>
> + ret = dm_update_mst_vcpi_slots_for_dsc(state, dm_state-
> >context);
> + if (ret)
> + goto fail;
> +
> if (dc_validate_global_state(dc, dm_state->context, false) !=
> DC_OK) {
> ret = -EINVAL;
> goto fail;
> @@ -8126,6 +8188,10 @@ static int amdgpu_dm_atomic_check(struct drm_device
> *dev,
> dc_retain_state(old_dm_state->context);
> }
> }
> + /* Perform validation of MST topology in the state*/
> + ret = drm_dp_mst_atomic_check(state);
> + if (ret)
> + goto fail;
>
> /* Store the overall update type for use later in atomic check. */
> for_each_new_crtc_in_state (state, crtc, new_crtc_state, i) {
--
Cheers,
Lyude Paul
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx
next prev parent reply other threads:[~2019-12-07 0:53 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-12-03 14:35 [PATCH v8 00/17] DSC MST support for DRM and AMDGPU mikita.lipski
2019-12-03 14:35 ` [PATCH v8 01/17] drm/dp_mst: Add PBN calculation for DSC modes mikita.lipski
2019-12-06 0:22 ` kbuild test robot
2019-12-07 0:17 ` Lyude Paul
2019-12-07 22:13 ` Lipski, Mikita
2019-12-03 14:35 ` [PATCH v8 02/17] drm/dp_mst: Parse FEC capability on MST ports mikita.lipski
2019-12-03 21:09 ` kbuild test robot
2019-12-03 14:35 ` [PATCH v8 03/17] drm/dp_mst: Add MST support to DP DPCD R/W functions mikita.lipski
2019-12-03 14:35 ` [PATCH v8 04/17] drm/dp_mst: Fill branch->num_ports mikita.lipski
2019-12-06 4:30 ` Harry Wentland
2019-12-03 14:35 ` [PATCH v8 05/17] drm/dp_mst: Add helpers for MST DSC and virtual DPCD aux mikita.lipski
2019-12-03 14:35 ` [PATCH v8 06/17] drm/dp_mst: Add new quirk for Synaptics MST hubs mikita.lipski
2019-12-03 14:35 ` [PATCH v8 07/17] drm/amd/display: Initialize DSC PPS variables to 0 mikita.lipski
2019-12-03 14:35 ` [PATCH v8 08/17] drm/amd/display: Validate DSC caps on MST endpoints mikita.lipski
2019-12-03 14:35 ` [PATCH v8 09/17] drm/amd/display: Write DSC enable to MST DPCD mikita.lipski
2019-12-03 14:35 ` [PATCH v8 10/17] drm/dp_mst: Manually overwrite PBN divider for calculating timeslots mikita.lipski
2019-12-03 14:35 ` [PATCH v8 11/17] drm/dp_mst: Add DSC enablement helpers to DRM mikita.lipski
2019-12-03 21:52 ` kbuild test robot
2019-12-07 0:24 ` Lyude Paul
2019-12-09 14:07 ` Mikita Lipski
2019-12-03 14:35 ` [PATCH v8 12/17] drm/dp_mst: Add branch bandwidth validation to MST atomic check mikita.lipski
2019-12-05 19:28 ` Harry Wentland
2019-12-07 0:30 ` Lyude Paul
2019-12-03 14:35 ` [PATCH v8 13/17] drm/amd/display: Add PBN per slot calculation for DSC mikita.lipski
2019-12-03 14:35 ` [PATCH v8 14/17] drm/amd/display: MST DSC compute fair share mikita.lipski
2019-12-07 0:53 ` Lyude Paul
2019-12-03 14:35 ` [PATCH v8 15/17] drm/amd/display: Recalculate VCPI slots for new DSC connectors mikita.lipski
2019-12-07 0:52 ` Lyude Paul [this message]
2019-12-03 14:35 ` [PATCH v8 16/17] drm/dp_mst: Add helper to trigger modeset on affected DSC MST CRTCs mikita.lipski
2019-12-03 22:40 ` kbuild test robot
2019-12-07 0:51 ` Lyude Paul
2019-12-03 14:35 ` [PATCH v8 17/17] drm/amd/display: Trigger modesets on MST DSC connectors mikita.lipski
2019-12-07 0:53 ` Lyude Paul
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=38c62a0d96c1368f22affd2d8a18eb6c78afee37.camel@redhat.com \
--to=lyude@redhat.com \
--cc=Jerry.Zuo@amd.com \
--cc=amd-gfx@lists.freedesktop.org \
--cc=dri-devel@lists.freedesktop.org \
--cc=harry.wentland@amd.com \
--cc=manasi.d.navare@intel.com \
--cc=mikita.lipski@amd.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox