From: "Kandpal, Suraj" <suraj.kandpal@intel.com>
To: Jani Nikula <jani.nikula@linux.intel.com>,
"intel-gfx@lists.freedesktop.org"
<intel-gfx@lists.freedesktop.org>
Cc: "Murthy, Arun R" <arun.r.murthy@intel.com>
Subject: Re: [Intel-gfx] [PATCH 4/4] drm/i915: Enabling WD Transcoder
Date: Thu, 6 Jan 2022 09:24:50 +0000 [thread overview]
Message-ID: <BN6PR11MB1348488B4439A15FEA595DA8E34C9@BN6PR11MB1348.namprd11.prod.outlook.com> (raw)
In-Reply-To: <87fsqr35tg.fsf@intel.com>
> > Adding support for writeback transcoder to start capturing frames using
> > interrupt mechanism
>
> I stopped reviewing this after a while, because there's just way too
> much unrelated noise in the patch to even be able to focus on what's
> actually being done functionally here. There are some comments inline
> before I stopped.
>
> Please don't do random superfluous whitespace or checkpatch changes in
> the same patch. It's just a distraction.
>
> Functionally the most questionable thing I spotted is adding the
> intel_crtc and intel_wd pointer members in struct
> drm_i915_private. That's not the kind of design we'll want. It should
> all be in the atomic state.
Will remove the checkpatch changes from this and reduce the noise
>
> Also, what is this in intel_wd.c:
>
> > +static const struct drm_display_mode drm_dmt_modes[] = {
>
> Please no.
>
This will be removed in the next series of patches
>
> BR,
> Jani.
>
>
>
> > diff --git a/drivers/gpu/drm/i915/Makefile
> b/drivers/gpu/drm/i915/Makefile
> > index 5c8e022a7383..5472bb48196b 100644
> > --- a/drivers/gpu/drm/i915/Makefile
> > +++ b/drivers/gpu/drm/i915/Makefile
> > @@ -206,6 +206,7 @@ i915-y += \
> > display/intel_connector.o \
> > display/intel_crtc.o \
> > display/intel_cursor.o \
> > + display/intel_wd.o \
>
> Adding it twice?
Typo will remove it
>
> > display/intel_display.o \
> > display/intel_display_power.o \
> > display/intel_dmc.o \
> > @@ -276,6 +277,7 @@ i915-y += \
> > display/intel_tv.o \
> > display/intel_vdsc.o \
> > display/intel_vrr.o \
> > + display/intel_wd.o \
> > display/vlv_dsi.o \
> > display/vlv_dsi_pll.o
> >
> > diff --git a/drivers/gpu/drm/i915/display/intel_acpi.c
> b/drivers/gpu/drm/i915/display/intel_acpi.c
> > index 72cac55c0f0f..98537c7de20c 100644
> > --- a/drivers/gpu/drm/i915/display/intel_acpi.c
> > +++ b/drivers/gpu/drm/i915/display/intel_acpi.c
> > @@ -244,6 +244,7 @@ static u32 acpi_display_type(struct intel_connector
> *connector)
> > case DRM_MODE_CONNECTOR_LVDS:
> > case DRM_MODE_CONNECTOR_eDP:
> > case DRM_MODE_CONNECTOR_DSI:
> > + case DRM_MODE_CONNECTOR_WRITEBACK:
> > display_type = ACPI_DISPLAY_TYPE_INTERNAL_DIGITAL;
> > break;
> > case DRM_MODE_CONNECTOR_Unknown:
> > diff --git a/drivers/gpu/drm/i915/display/intel_display.c
> b/drivers/gpu/drm/i915/display/intel_display.c
> > index f27c294beb92..4a9e5972f381 100644
> > --- a/drivers/gpu/drm/i915/display/intel_display.c
> > +++ b/drivers/gpu/drm/i915/display/intel_display.c
> > @@ -105,6 +105,7 @@
> > #include "intel_tc.h"
> > #include "intel_vga.h"
> > #include "i9xx_plane.h"
> > +#include "intel_wd.h"
>
> Please keep include lists sorted.
Noted will change the order
>
> > #include "skl_scaler.h"
> > #include "skl_universal_plane.h"
> >
> > @@ -195,10 +196,13 @@ skl_wa_827(struct drm_i915_private *dev_priv,
> enum pipe pipe, bool enable)
> > {
> > if (enable)
> > intel_de_write(dev_priv, CLKGATE_DIS_PSL(pipe),
> > - intel_de_read(dev_priv, CLKGATE_DIS_PSL(pipe)) |
> DUPS1_GATING_DIS | DUPS2_GATING_DIS);
> > + intel_de_read(dev_priv, CLKGATE_DIS_PSL(pipe)) |
> > + DUPS1_GATING_DIS |
> > + DUPS2_GATING_DIS);
> > else
> > intel_de_write(dev_priv, CLKGATE_DIS_PSL(pipe),
> > - intel_de_read(dev_priv, CLKGATE_DIS_PSL(pipe)) &
> ~(DUPS1_GATING_DIS | DUPS2_GATING_DIS));
> > + intel_de_read(dev_priv, CLKGATE_DIS_PSL(pipe)) &
> > + ~(DUPS1_GATING_DIS | DUPS2_GATING_DIS));
> > }
>
> Superfluous changes that should not be part of this patch.
>
> >
> > /* Wa_2006604312:icl,ehl */
> > @@ -208,10 +212,10 @@ icl_wa_scalerclkgating(struct drm_i915_private
> *dev_priv, enum pipe pipe,
> > {
> > if (enable)
> > intel_de_write(dev_priv, CLKGATE_DIS_PSL(pipe),
> > - intel_de_read(dev_priv, CLKGATE_DIS_PSL(pipe)) |
> DPFR_GATING_DIS);
> > + intel_de_read(dev_priv, CLKGATE_DIS_PSL(pipe))
> | DPFR_GATING_DIS);
> > else
> > intel_de_write(dev_priv, CLKGATE_DIS_PSL(pipe),
> > - intel_de_read(dev_priv, CLKGATE_DIS_PSL(pipe)) &
> ~DPFR_GATING_DIS);
> > + intel_de_read(dev_priv, CLKGATE_DIS_PSL(pipe))
> & ~DPFR_GATING_DIS);
> > }
> >
> > static bool
> > @@ -342,6 +346,7 @@ static void assert_fdi_tx(struct drm_i915_private
> *dev_priv,
> > cur_state = !!(val & TRANS_DDI_FUNC_ENABLE);
> > } else {
> > u32 val = intel_de_read(dev_priv, FDI_TX_CTL(pipe));
> > +
> > cur_state = !!(val & FDI_TX_ENABLE);
> > }
> > I915_STATE_WARN(cur_state != state,
> > @@ -469,6 +474,7 @@ void assert_transcoder(struct drm_i915_private
> *dev_priv,
> > wakeref = intel_display_power_get_if_enabled(dev_priv,
> power_domain);
> > if (wakeref) {
> > u32 val = intel_de_read(dev_priv,
> PIPECONF(cpu_transcoder));
> > +
> > cur_state = !!(val & PIPECONF_ENABLE);
> >
> > intel_display_power_put(dev_priv, power_domain,
> wakeref);
> > @@ -1850,6 +1856,7 @@ bool intel_has_pending_fb_unpin(struct
> drm_i915_private *dev_priv)
> >
> > drm_for_each_crtc(crtc, &dev_priv->drm) {
> > struct drm_crtc_commit *commit;
> > +
> > spin_lock(&crtc->commit_lock);
> > commit = list_first_entry_or_null(&crtc->commit_list,
> > struct drm_crtc_commit,
> commit_entry);
> > @@ -1895,7 +1902,7 @@ static void lpt_program_iclkip(const struct
> intel_crtc_state *crtc_state)
> > lpt_disable_iclkip(dev_priv);
> >
> > /* The iCLK virtual clock root frequency is in MHz,
> > - * but the adjusted_mode->crtc_clock in in KHz. To get the
> > + * but the adjusted_mode->crtc_clock in KHz. To get the
> > * divisors, it is necessary to divide one by another, so we
> > * convert the virtual clock precision to KHz here for higher
> > * precision.
> > @@ -2571,7 +2578,7 @@ static void intel_crtc_disable_planes(struct
> intel_atomic_state *state,
> > unsigned int update_mask = new_crtc_state->update_planes;
> > const struct intel_plane_state *old_plane_state;
> > struct intel_plane *plane;
> > - unsigned fb_bits = 0;
> > + unsigned int fb_bits = 0;
> > int i;
> >
>
> Ditto for all of the above hunks.
>
> > intel_crtc_dpms_overlay_disable(crtc);
> > @@ -2665,6 +2672,66 @@ static void
> intel_encoders_update_complete(struct intel_atomic_state *state)
> > }
> > }
> >
> > +static void intel_queue_writeback_job(struct intel_atomic_state *state,
> > + struct drm_i915_private *dev_priv, struct intel_crtc
> *intel_crtc,
> > + struct intel_crtc_state *crtc_state)
> > +{
>
> No need to pass dev_priv around, you can get at it via the other
> pointers. Also, for new code the variable should be named i915.
>
Will change the variable names and will derive dev_priv rather than passing it around
> > + struct drm_connector_state *new_conn_state;
> > + struct drm_connector *connector;
> > + struct drm_device *dev = &dev_priv->drm;
>
> Usually we only have i915 local var, no struct drm_device. Look around.
>
> > + int i;
> > +
> > + drm_dbg(dev, "[%s]:%d ", __func__, __LINE__);
>
> What? Why?
>
> All kms debugs should use drm_dbg_kms().
>
> Please don't add any of this __func__ and __LINE__ nonsense. The
> function gets added by drm_dbg_* anyway.
>
> Same applies all over the place.
Got it will update drm_dbg to drm_dbg_kms()
>
> > + if (dev_priv->wd_crtc != intel_crtc) {
>
> Oh noes, we won't be adding random crtc pointers in drm_i915_private!
>
> > + drm_dbg(dev, "not the wd crtc");
> > + return;
> > + }
> > +
> > + for_each_new_connector_in_state(&state->base, connector,
> new_conn_state,
> > + i) {
> > + if (!new_conn_state->writeback_job)
> > + continue;
> > +
> > + drm_writeback_queue_job(connector->wb_connector,
> new_conn_state);
> > + drm_dbg(dev, "[%s]:%d queueing writeback job", __func__,
> __LINE__);
> > + }
> > +}
> > +
> > +static void intel_find_writeback_connector(struct intel_atomic_state
> *state,
> > + struct drm_i915_private *dev_priv,
> > + struct intel_crtc *intel_crtc, struct intel_crtc_state *crtc_state)
> > +{
> > + struct drm_connector_state *new_conn_state;
> > + struct drm_connector *connector;
> > + struct drm_device *dev = &dev_priv->drm;
> > + int i;
> > +
> > + drm_dbg(dev, "[%s]:%d ", __func__, __LINE__);
> > + if (dev_priv->wd_crtc != intel_crtc) {
> > + drm_dbg(dev, "not the wd crtc");
> > + return;
> > + }
> > +
> > + for_each_new_connector_in_state(&state->base, connector,
> new_conn_state,
> > + i) {
> > + struct intel_connector *intel_connector;
> > + struct intel_encoder *encoder;
> > +
> > + drm_dbg(dev, "[%s]:%d ", __func__, __LINE__);
> > +
> > + intel_connector = to_intel_connector(connector);
> > + drm_dbg(dev, "[CONNECTOR:%d:%s]: status: %s\n",
> > + connector->base.id, connector->name,
> > + drm_get_connector_status_name(connector-
> >status));
> > + encoder =
> intel_connector_primary_encoder(intel_connector);
> > + if (encoder->type == INTEL_OUTPUT_WD) {
> > + drm_dbg(dev, "encoder intel_output_wd found");
> > + intel_wd_enable_capture(dev_priv, encoder,
> crtc_state, new_conn_state);
> > + }
> > + }
> > +
> > +}
> > +
> > static void intel_encoders_pre_pll_enable(struct intel_atomic_state *state,
> > struct intel_crtc *crtc)
> > {
> > @@ -2728,6 +2795,7 @@ static void intel_encoders_enable(struct
> intel_atomic_state *state,
> > if (encoder->enable)
> > encoder->enable(state, encoder,
> > crtc_state, conn_state);
> > +
>
> No superfluous whitespace changes please. Same all over the place. It's
> just noise in the patch.
>
> > intel_opregion_notify_encoder(encoder, true);
> > }
> > }
> > @@ -2751,6 +2819,7 @@ static void intel_encoders_pre_disable(struct
> intel_atomic_state *state,
> > if (encoder->pre_disable)
> > encoder->pre_disable(state, encoder, old_crtc_state,
> > old_conn_state);
> > +
> > }
> > }
> >
> > @@ -2774,6 +2843,7 @@ static void intel_encoders_disable(struct
> intel_atomic_state *state,
> > if (encoder->disable)
> > encoder->disable(state, encoder,
> > old_crtc_state, old_conn_state);
> > +
> > }
> > }
> >
> > @@ -3078,7 +3148,8 @@ static void hsw_crtc_enable(struct
> intel_atomic_state *state,
> > if (DISPLAY_VER(dev_priv) >= 9 || IS_BROADWELL(dev_priv))
> > bdw_set_pipemisc(new_crtc_state);
> >
> > - if (!new_crtc_state->bigjoiner_slave &&
> !transcoder_is_dsi(cpu_transcoder)) {
> > + if (!new_crtc_state->bigjoiner_slave &&
> !transcoder_is_dsi(cpu_transcoder)
> > + && !transcoder_is_wd(cpu_transcoder)) {
> > intel_set_transcoder_timings(new_crtc_state);
> >
> > if (cpu_transcoder != TRANSCODER_EDP)
> > @@ -4307,7 +4378,7 @@ static void intel_set_transcoder_timings(const
> struct intel_crtc_state *crtc_sta
> >
> > if (DISPLAY_VER(dev_priv) > 3)
> > intel_de_write(dev_priv, VSYNCSHIFT(cpu_transcoder),
> > - vsyncshift);
> > + vsyncshift);
> >
> > intel_de_write(dev_priv, HTOTAL(cpu_transcoder),
> > (adjusted_mode->crtc_hdisplay - 1) | ((adjusted_mode-
> >crtc_htotal - 1) << 16));
> > @@ -4330,7 +4401,7 @@ static void intel_set_transcoder_timings(const
> struct intel_crtc_state *crtc_sta
> > if (IS_HASWELL(dev_priv) && cpu_transcoder == TRANSCODER_EDP
> &&
> > (pipe == PIPE_B || pipe == PIPE_C))
> > intel_de_write(dev_priv, VTOTAL(pipe),
> > - intel_de_read(dev_priv, VTOTAL(cpu_transcoder)));
> > + intel_de_read(dev_priv,
> VTOTAL(cpu_transcoder)));
> >
> > }
> >
> > @@ -4980,18 +5051,18 @@ void lpt_disable_clkout_dp(struct
> drm_i915_private *dev_priv)
> > #define BEND_IDX(steps) ((50 + (steps)) / 5)
> >
> > static const u16 sscdivintphase[] = {
> > - [BEND_IDX( 50)] = 0x3B23,
> > - [BEND_IDX( 45)] = 0x3B23,
> > - [BEND_IDX( 40)] = 0x3C23,
> > - [BEND_IDX( 35)] = 0x3C23,
> > - [BEND_IDX( 30)] = 0x3D23,
> > - [BEND_IDX( 25)] = 0x3D23,
> > - [BEND_IDX( 20)] = 0x3E23,
> > - [BEND_IDX( 15)] = 0x3E23,
> > - [BEND_IDX( 10)] = 0x3F23,
> > - [BEND_IDX( 5)] = 0x3F23,
> > - [BEND_IDX( 0)] = 0x0025,
> > - [BEND_IDX( -5)] = 0x0025,
> > + [BEND_IDX(50)] = 0x3B23,
> > + [BEND_IDX(45)] = 0x3B23,
> > + [BEND_IDX(40)] = 0x3C23,
> > + [BEND_IDX(35)] = 0x3C23,
> > + [BEND_IDX(30)] = 0x3D23,
> > + [BEND_IDX(25)] = 0x3D23,
> > + [BEND_IDX(20)] = 0x3E23,
> > + [BEND_IDX(15)] = 0x3E23,
> > + [BEND_IDX(10)] = 0x3F23,
> > + [BEND_IDX(5)] = 0x3F23,
> > + [BEND_IDX(0)] = 0x0025,
> > + [BEND_IDX(-5)] = 0x0025,
> > [BEND_IDX(-10)] = 0x0125,
> > [BEND_IDX(-15)] = 0x0125,
> > [BEND_IDX(-20)] = 0x0225,
> > @@ -5335,6 +5406,7 @@ int ilk_get_lanes_required(int target_clock, int
> link_bw, int bpp)
> > * is 2.5%; use 5% for safety's sake.
> > */
> > u32 bps = target_clock * bpp * 21 / 20;
> > +
> > return DIV_ROUND_UP(bps, link_bw * 8);
> > }
> >
> > @@ -5572,7 +5644,7 @@ static bool ilk_get_pipe_config(struct intel_crtc
> *crtc,
> > if (tmp & TRANS_DPLLB_SEL(crtc->pipe))
> > pll_id = DPLL_ID_PCH_PLL_B;
> > else
> > - pll_id= DPLL_ID_PCH_PLL_A;
> > + pll_id = DPLL_ID_PCH_PLL_A;
>
> Useful change, but does not belong in this patch.
>
> Stopping review here.
Will work on the comments and address them in next set of patches
Regards,
Suraj Kandpal
next prev parent reply other threads:[~2022-01-06 9:24 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-12-17 7:13 [Intel-gfx] [PATCH 0/4] Adding writeback support for i915 Kandpal, Suraj
2021-12-17 7:13 ` [Intel-gfx] [PATCH 1/4] drm: add writeback pointers to drm_connector Kandpal, Suraj
2021-12-17 10:08 ` Jani Nikula
2022-01-06 8:54 ` Kandpal, Suraj
2022-01-07 12:28 ` Jani Nikula
2021-12-17 7:13 ` [Intel-gfx] [PATCH 2/4] drm/komeda: change driver to use drm_writeback_connector.base pointer Kandpal, Suraj
2021-12-17 10:11 ` Jani Nikula
2022-01-06 9:11 ` Kandpal, Suraj
2021-12-17 7:13 ` [Intel-gfx] [PATCH 3/4] drm/i915: Define WD trancoder for i915 Kandpal, Suraj
2021-12-17 10:12 ` Jani Nikula
2022-01-06 9:12 ` Kandpal, Suraj
2021-12-17 7:13 ` [Intel-gfx] [PATCH 4/4] drm/i915: Enabling WD Transcoder Kandpal, Suraj
2021-12-17 10:04 ` Jani Nikula
2022-01-06 9:24 ` Kandpal, Suraj [this message]
2021-12-17 12:17 ` [Intel-gfx] ✗ Fi.CI.BUILD: failure for Adding writeback support for i915 Patchwork
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=BN6PR11MB1348488B4439A15FEA595DA8E34C9@BN6PR11MB1348.namprd11.prod.outlook.com \
--to=suraj.kandpal@intel.com \
--cc=arun.r.murthy@intel.com \
--cc=intel-gfx@lists.freedesktop.org \
--cc=jani.nikula@linux.intel.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.