All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jani Nikula <jani.nikula@intel.com>
To: "Golani,
	Mitulkumar Ajitkumar" <mitulkumar.ajitkumar.golani@intel.com>,
	Nathan Chancellor <nathan@kernel.org>
Cc: "intel-gfx@lists.freedesktop.org"
	<intel-gfx@lists.freedesktop.org>,
	"Nautiyal, Ankit K" <ankit.k.nautiyal@intel.com>,
	"intel-xe@lists.freedesktop.org" <intel-xe@lists.freedesktop.org>,
	"Kurmi, Suresh Kumar" <suresh.kumar.kurmi@intel.com>,
	"Shankar, Uma" <uma.shankar@intel.com>
Subject: RE: [PATCH v16 9/9] drm/i915: Compute CMRR and calculate vtotal
Date: Thu, 20 Jun 2024 15:59:03 +0300	[thread overview]
Message-ID: <87r0crepns.fsf@intel.com> (raw)
In-Reply-To: <CY5PR11MB634479A21B6F8212A291F61AB2C82@CY5PR11MB6344.namprd11.prod.outlook.com>

On Thu, 20 Jun 2024, "Golani, Mitulkumar Ajitkumar" <mitulkumar.ajitkumar.golani@intel.com> wrote:
> Hi @Nathan Chancellor,
>
> Yes, with do_div, we are expecting the remainder value. Regarding the
> warning related to the adjusted_pixel_rate type cast, I haven't been
> able to reproduce this locally, possibly due to differences in the
> cross-compiler. We should consider typecasting adjusted_pixel_rate or
> treating it as unsigned ?

Please avoid top-posting on the mailing lists.

I'm guessing this will be enough.

diff --git a/drivers/gpu/drm/i915/display/intel_vrr.c b/drivers/gpu/drm/i915/display/intel_vrr.c
index 6430da25957d..5a0da64c7db3 100644
--- a/drivers/gpu/drm/i915/display/intel_vrr.c
+++ b/drivers/gpu/drm/i915/display/intel_vrr.c
@@ -137,7 +137,7 @@ static unsigned int
 cmrr_get_vtotal(struct intel_crtc_state *crtc_state, bool video_mode_required)
 {
 	int multiplier_m = 1, multiplier_n = 1, vtotal, desired_refresh_rate;
-	long long adjusted_pixel_rate;
+	u64 adjusted_pixel_rate;
 	struct drm_display_mode *adjusted_mode = &crtc_state->hw.adjusted_mode;
 
 	desired_refresh_rate = drm_mode_vrefresh(adjusted_mode);


BR,
Jani.

>
> Adding @Nikula, Jani to suggest.
>
> Regards,
> Mitul
>> -----Original Message-----
>> From: Nathan Chancellor <nathan@kernel.org>
>> Sent: Wednesday, June 19, 2024 11:56 PM
>> To: Golani, Mitulkumar Ajitkumar <mitulkumar.ajitkumar.golani@intel.com>
>> Cc: intel-gfx@lists.freedesktop.org; Nautiyal, Ankit K
>> <ankit.k.nautiyal@intel.com>; intel-xe@lists.freedesktop.org
>> Subject: Re: [PATCH v16 9/9] drm/i915: Compute CMRR and calculate vtotal
>>
>> On Wed, Jun 19, 2024 at 06:10:34PM +0000, Golani, Mitulkumar Ajitkumar
>> wrote:
>> > Hi @Nathan Chancellor
>> >
>> > Probably fix is merged in drm-intel-next related patch:
>> > https://patchwork.freedesktop.org/series/134860/
>> >
>> > Can you please check and suggest if this patch is merged ?
>>
>> This is still reproducible at commit 851de367dede ("drm/i915: Enable
>> plane/pipeDMC ATS fault interrupts on mtl") in drm-intel-next, which includes
>> that change as commit e2dc7cb72b25 ("drm/i915/display: Update calculation
>> to avoid overflow"). The issue is the dividend in do_div() is required to be an
>> unsigned 64-bit type but you used a signed type.
>> Updating adjusted_pixel_rate to be a u64 should resolve the issue and match
>> the return type of mul_u32_u32(). I just wasn't sure if that was the only fix
>> this code would need, as do_div() is not typically used with an assignment.
>>
>> Cheers,
>> Nathan
>>
>> > > -----Original Message-----
>> > > From: Nathan Chancellor <nathan@kernel.org>
>> > > Sent: Wednesday, June 19, 2024 9:12 PM
>> > > To: Golani, Mitulkumar Ajitkumar
>> > > <mitulkumar.ajitkumar.golani@intel.com>
>> > > Cc: intel-gfx@lists.freedesktop.org; Nautiyal, Ankit K
>> > > <ankit.k.nautiyal@intel.com>; intel-xe@lists.freedesktop.org
>> > > Subject: Re: [PATCH v16 9/9] drm/i915: Compute CMRR and calculate
>> > > vtotal
>> > >
>> > > Hi Mitul,
>> > >
>> > > On Mon, Jun 10, 2024 at 12:52:02PM +0530, Mitul Golani wrote:
>> > > ...
>> > > > diff --git a/drivers/gpu/drm/i915/display/intel_vrr.c
>> > > > b/drivers/gpu/drm/i915/display/intel_vrr.c
>> > > > index 4ad99a54aa83..05f67dc9d98d 100644
>> > > > --- a/drivers/gpu/drm/i915/display/intel_vrr.c
>> > > > +++ b/drivers/gpu/drm/i915/display/intel_vrr.c
>> > > > @@ -12,6 +12,9 @@
>> > > >  #include "intel_vrr_regs.h"
>> > > >  #include "intel_dp.h"
>> > > >
>> > > > +#define FIXED_POINT_PRECISION          100
>> > > > +#define CMRR_PRECISION_TOLERANCE       10
>> > > > +
>> > > >  bool intel_vrr_is_capable(struct intel_connector *connector)  {
>> > > >         const struct drm_display_info *info =
>> > > > &connector->base.display_info; @@ -107,6 +110,52 @@ int
>> > > > intel_vrr_vmax_vblank_start(const struct
>> > > intel_crtc_state *crtc_state)
>> > > >         return crtc_state->vrr.vmax -
>> > > > intel_vrr_vblank_exit_length(crtc_state);
>> > > >  }
>> > > >
>> > > > +static bool
>> > > > +is_cmrr_frac_required(struct intel_crtc_state *crtc_state) {
>> > > > +       int calculated_refresh_k, actual_refresh_k, pixel_clock_per_line;
>> > > > +       struct drm_display_mode *adjusted_mode = &crtc_state-
>> > > >hw.adjusted_mode;
>> > > > +       struct drm_i915_private *i915 =
>> > > > +to_i915(crtc_state->uapi.crtc->dev);
>> > > > +
>> > > > +       if (!HAS_CMRR(i915))
>> > > > +               return false;
>> > > > +
>> > > > +       actual_refresh_k =
>> > > > +               drm_mode_vrefresh(adjusted_mode) *
>> > > FIXED_POINT_PRECISION;
>> > > > +       pixel_clock_per_line =
>> > > > +               adjusted_mode->crtc_clock * 1000 / adjusted_mode-
>> > > >crtc_htotal;
>> > > > +       calculated_refresh_k =
>> > > > +               pixel_clock_per_line * FIXED_POINT_PRECISION /
>> > > > +adjusted_mode->crtc_vtotal;
>> > > > +
>> > > > +       if ((actual_refresh_k - calculated_refresh_k) <
>> > > CMRR_PRECISION_TOLERANCE)
>> > > > +               return false;
>> > > > +
>> > > > +       return true;
>> > > > +}
>> > > > +
>> > > > +static unsigned int
>> > > > +cmrr_get_vtotal(struct intel_crtc_state *crtc_state, bool
>> > > > +video_mode_required) {
>> > > > +       int multiplier_m = 1, multiplier_n = 1, vtotal, desired_refresh_rate;
>> > > > +       long long adjusted_pixel_rate;
>> > > > +       struct drm_display_mode *adjusted_mode =
>> > > > +&crtc_state->hw.adjusted_mode;
>> > > > +
>> > > > +       desired_refresh_rate = drm_mode_vrefresh(adjusted_mode);
>> > > > +
>> > > > +       if (video_mode_required) {
>> > > > +               multiplier_m = 1001;
>> > > > +               multiplier_n = 1000;
>> > > > +       }
>> > > > +
>> > > > +       crtc_state->cmrr.cmrr_n =
>> > > > +               desired_refresh_rate * adjusted_mode->crtc_htotal *
>> > > multiplier_n;
>> > > > +       vtotal = (adjusted_mode->crtc_clock * 1000 * multiplier_n) /
>> > > crtc_state->cmrr.cmrr_n;
>> > > > +       adjusted_pixel_rate = adjusted_mode->crtc_clock * 1000 *
>> > > multiplier_m;
>> > > > +       crtc_state->cmrr.cmrr_m = do_div(adjusted_pixel_rate,
>> > > > +crtc_state->cmrr.cmrr_n);
>> > > > +
>> > > > +       return vtotal;
>> > > > +}
>> > >
>> > > This change is now in -next as commit 1676ecd303ac ("drm/i915:
>> > > Compute CMRR and calculate vtotal"), where it breaks the xe build
>> > > for 32-bit platforms
>> > > with:
>> > >
>> > >   $ make -skj"$(nproc)" ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-
>> > > allmodconfig drivers/gpu/drm/xe/i915-display/intel_vrr.o
>> > >   In file included from arch/arm/include/asm/div64.h:107,
>> > >                    from include/linux/math.h:6,
>> > >                    from include/linux/kernel.h:27,
>> > >                    from include/linux/cpumask.h:11,
>> > >                    from include/linux/smp.h:13,
>> > >                    from include/linux/lockdep.h:14,
>> > >                    from include/linux/spinlock.h:63,
>> > >                    from include/linux/kref.h:16,
>> > >                    from include/drm/drm_device.h:5,
>> > >                    from include/drm/drm_drv.h:35,
>> > >                    from drivers/gpu/drm/xe/compat-i915-headers/i915_drv.h:13,
>> > >                    from drivers/gpu/drm/i915/display/intel_vrr.c:7:
>> > >   drivers/gpu/drm/i915/display/intel_vrr.c: In function 'cmrr_get_vtotal':
>> > >   include/asm-generic/div64.h:222:35: error: comparison of distinct
>> > > pointer types lacks a cast [-Werror]
>> > >     222 |         (void)(((typeof((n)) *)0) == ((uint64_t *)0));  \
>> > >         |                                   ^~
>> > >   drivers/gpu/drm/i915/display/intel_vrr.c:155:35: note: in
>> > > expansion of macro 'do_div'
>> > >     155 |         crtc_state->cmrr.cmrr_m = do_div(adjusted_pixel_rate,
>> crtc_state-
>> > > >cmrr.cmrr_n);
>> > >         |                                   ^~~~~~
>> > >   cc1: all warnings being treated as errors
>> > >
>> > > Also, is do_div() correct here? It is different from the other
>> > > div_() macros in that the "return value" is the remainder, not the result of
>> the division.
>> > >
>> > > Cheers,
>> > > Nathan

-- 
Jani Nikula, Intel

  reply	other threads:[~2024-06-20 12:59 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-06-10  7:21 [PATCH v16 0/9] Implement CMRR Support Mitul Golani
2024-06-10  7:21 ` [PATCH v16 1/9] drm/i915: Update indentation for VRR registers and bits Mitul Golani
2024-06-10  7:21 ` [PATCH v16 2/9] drm/i915: Separate VRR related register definitions Mitul Golani
2024-06-11  2:57   ` Murthy, Arun R
2024-06-10  7:21 ` [PATCH v16 3/9] drm/i915: Define and compute Transcoder CMRR registers Mitul Golani
2024-06-10  7:21 ` [PATCH v16 4/9] drm/i915: Update trans_vrr_ctl flag when cmrr is computed Mitul Golani
2024-06-10  7:21 ` [PATCH v16 5/9] drm/dp: Add refresh rate divider to struct representing AS SDP Mitul Golani
2024-06-10  7:21 ` [PATCH v16 6/9] drm/i915/display: Add support for pack and unpack Mitul Golani
2024-06-10  7:22 ` [PATCH v16 7/9] drm/i915/display: Compute Adaptive sync SDP params Mitul Golani
2024-06-10  7:22 ` [PATCH v16 8/9] drm/i915/display: Compute vrr vsync params Mitul Golani
2024-06-10  7:22 ` [PATCH v16 9/9] drm/i915: Compute CMRR and calculate vtotal Mitul Golani
2024-06-19 15:42   ` Nathan Chancellor
2024-06-19 18:10     ` Golani, Mitulkumar Ajitkumar
2024-06-19 18:26       ` Nathan Chancellor
2024-06-20 10:05         ` Golani, Mitulkumar Ajitkumar
2024-06-20 12:59           ` Jani Nikula [this message]
2024-06-20 14:15             ` Nathan Chancellor
2024-06-10  7:57 ` ✗ Fi.CI.CHECKPATCH: warning for Implement CMRR Support (rev17) Patchwork
2024-06-10  7:57 ` ✗ Fi.CI.SPARSE: " Patchwork
2024-06-10  8:04 ` ✓ Fi.CI.BAT: success " Patchwork
2024-06-10  9:16 ` ✗ Fi.CI.IGT: failure " Patchwork
2024-06-10 10:49 ` ✓ Fi.CI.IGT: success " 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=87r0crepns.fsf@intel.com \
    --to=jani.nikula@intel.com \
    --cc=ankit.k.nautiyal@intel.com \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=intel-xe@lists.freedesktop.org \
    --cc=mitulkumar.ajitkumar.golani@intel.com \
    --cc=nathan@kernel.org \
    --cc=suresh.kumar.kurmi@intel.com \
    --cc=uma.shankar@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.