Re: [PATCH 1/5] drm/vblank: Introduce drm_crtc_vblank_crtc()

2024-04-18 Thread Ville Syrjälä
On Tue, Apr 09, 2024 at 06:02:49PM +0300, Dmitry Baryshkov wrote:
> On Mon, Apr 08, 2024 at 10:06:07PM +0300, Ville Syrjala wrote:
> > From: Ville Syrjälä 
> > 
> > Make life easier by providing a function that hands
> > out the the correct drm_vblank_crtc for a given a drm_crtc.
> > 
> > Also abstract the lower level internals of the vblank
> > code in a similar fashion.
> > 
> > Signed-off-by: Ville Syrjälä 
> > ---
> >  drivers/gpu/drm/drm_vblank.c  | 58 ++-
> >  drivers/gpu/drm/drm_vblank_work.c |  2 +-
> >  include/drm/drm_vblank.h  |  1 +
> >  3 files changed, 36 insertions(+), 25 deletions(-)
> 
> 
> Reviewed-by: Dmitry Baryshkov 
> 
> I'm looking forward to using this in drm/msm

This+nouveau+vkms parts push to the drm-misc-next.
Thanks for the reviews.

amdgpu and i915 parts still pending.

-- 
Ville Syrjälä
Intel


Re: [PATCH 1/5] drm/vblank: Introduce drm_crtc_vblank_crtc()

2024-04-09 Thread Dmitry Baryshkov
On Mon, Apr 08, 2024 at 10:06:07PM +0300, Ville Syrjala wrote:
> From: Ville Syrjälä 
> 
> Make life easier by providing a function that hands
> out the the correct drm_vblank_crtc for a given a drm_crtc.
> 
> Also abstract the lower level internals of the vblank
> code in a similar fashion.
> 
> Signed-off-by: Ville Syrjälä 
> ---
>  drivers/gpu/drm/drm_vblank.c  | 58 ++-
>  drivers/gpu/drm/drm_vblank_work.c |  2 +-
>  include/drm/drm_vblank.h  |  1 +
>  3 files changed, 36 insertions(+), 25 deletions(-)


Reviewed-by: Dmitry Baryshkov 

I'm looking forward to using this in drm/msm

> 
> diff --git a/drivers/gpu/drm/drm_vblank.c b/drivers/gpu/drm/drm_vblank.c
> index 702a12bc93bd..cc3571e25a9a 100644
> --- a/drivers/gpu/drm/drm_vblank.c
> +++ b/drivers/gpu/drm/drm_vblank.c
> @@ -166,11 +166,24 @@ module_param_named(timestamp_precision_usec, 
> drm_timestamp_precision, int, 0600)
>  MODULE_PARM_DESC(vblankoffdelay, "Delay until vblank irq auto-disable 
> [msecs] (0: never disable, <0: disable immediately)");
>  MODULE_PARM_DESC(timestamp_precision_usec, "Max. error on timestamps 
> [usecs]");
>  
> +static struct drm_vblank_crtc *
> +drm_vblank_crtc(struct drm_device *dev, unsigned int pipe)
> +{
> + return >vblank[pipe];
> +}
> +
> +struct drm_vblank_crtc *
> +drm_crtc_vblank_crtc(struct drm_crtc *crtc)
> +{
> + return drm_vblank_crtc(crtc->dev, drm_crtc_index(crtc));
> +}
> +EXPORT_SYMBOL(drm_crtc_vblank_crtc);
> +
>  static void store_vblank(struct drm_device *dev, unsigned int pipe,
>u32 vblank_count_inc,
>ktime_t t_vblank, u32 last)
>  {
> - struct drm_vblank_crtc *vblank = >vblank[pipe];
> + struct drm_vblank_crtc *vblank = drm_vblank_crtc(dev, pipe);
>  
>   assert_spin_locked(>vblank_time_lock);
>  
> @@ -184,7 +197,7 @@ static void store_vblank(struct drm_device *dev, unsigned 
> int pipe,
>  
>  static u32 drm_max_vblank_count(struct drm_device *dev, unsigned int pipe)
>  {
> - struct drm_vblank_crtc *vblank = >vblank[pipe];
> + struct drm_vblank_crtc *vblank = drm_vblank_crtc(dev, pipe);
>  
>   return vblank->max_vblank_count ?: dev->max_vblank_count;
>  }
> @@ -273,7 +286,7 @@ static void drm_reset_vblank_timestamp(struct drm_device 
> *dev, unsigned int pipe
>  static void drm_update_vblank_count(struct drm_device *dev, unsigned int 
> pipe,
>   bool in_vblank_irq)
>  {
> - struct drm_vblank_crtc *vblank = >vblank[pipe];
> + struct drm_vblank_crtc *vblank = drm_vblank_crtc(dev, pipe);
>   u32 cur_vblank, diff;
>   bool rc;
>   ktime_t t_vblank;
> @@ -364,7 +377,7 @@ static void drm_update_vblank_count(struct drm_device 
> *dev, unsigned int pipe,
>  
>  u64 drm_vblank_count(struct drm_device *dev, unsigned int pipe)
>  {
> - struct drm_vblank_crtc *vblank = >vblank[pipe];
> + struct drm_vblank_crtc *vblank = drm_vblank_crtc(dev, pipe);
>   u64 count;
>  
>   if (drm_WARN_ON(dev, pipe >= dev->num_crtcs))
> @@ -438,7 +451,7 @@ static void __disable_vblank(struct drm_device *dev, 
> unsigned int pipe)
>   */
>  void drm_vblank_disable_and_save(struct drm_device *dev, unsigned int pipe)
>  {
> - struct drm_vblank_crtc *vblank = >vblank[pipe];
> + struct drm_vblank_crtc *vblank = drm_vblank_crtc(dev, pipe);
>   unsigned long irqflags;
>  
>   assert_spin_locked(>vbl_lock);
> @@ -600,7 +613,7 @@ void drm_calc_timestamping_constants(struct drm_crtc 
> *crtc,
>  {
>   struct drm_device *dev = crtc->dev;
>   unsigned int pipe = drm_crtc_index(crtc);
> - struct drm_vblank_crtc *vblank = >vblank[pipe];
> + struct drm_vblank_crtc *vblank = drm_crtc_vblank_crtc(crtc);
>   int linedur_ns = 0, framedur_ns = 0;
>   int dotclock = mode->crtc_clock;
>  
> @@ -930,7 +943,7 @@ EXPORT_SYMBOL(drm_crtc_vblank_count);
>  static u64 drm_vblank_count_and_time(struct drm_device *dev, unsigned int 
> pipe,
>ktime_t *vblanktime)
>  {
> - struct drm_vblank_crtc *vblank = >vblank[pipe];
> + struct drm_vblank_crtc *vblank = drm_vblank_crtc(dev, pipe);
>   u64 vblank_count;
>   unsigned int seq;
>  
> @@ -985,7 +998,6 @@ EXPORT_SYMBOL(drm_crtc_vblank_count_and_time);
>   */
>  int drm_crtc_next_vblank_start(struct drm_crtc *crtc, ktime_t *vblanktime)
>  {
> - unsigned int pipe = drm_crtc_index(crtc);
>   struct drm_vblank_crtc *vblank;
>   struct drm_display_mode *mode;
>   u64 vblank_start;
> @@ -993,7 +1005,7 @@ int drm_crtc_next_vblank_start(struct drm_crtc *crtc, 
> ktime_t *vblanktime)
>   if (!drm_dev_has_vblank(crtc->dev))
>   return -EINVAL;
>  
> - vblank = >dev->vblank[pipe];
> + vblank = drm_crtc_vblank_crtc(crtc);
>   mode = >hwmode;
>  
>   if (!vblank->framedur_ns || !vblank->linedur_ns)
> @@ -1147,7 +1159,7 @@ static int __enable_vblank(struct drm_device *dev, 
> unsigned int pipe)
>  
> 

[PATCH 1/5] drm/vblank: Introduce drm_crtc_vblank_crtc()

2024-04-08 Thread Ville Syrjala
From: Ville Syrjälä 

Make life easier by providing a function that hands
out the the correct drm_vblank_crtc for a given a drm_crtc.

Also abstract the lower level internals of the vblank
code in a similar fashion.

Signed-off-by: Ville Syrjälä 
---
 drivers/gpu/drm/drm_vblank.c  | 58 ++-
 drivers/gpu/drm/drm_vblank_work.c |  2 +-
 include/drm/drm_vblank.h  |  1 +
 3 files changed, 36 insertions(+), 25 deletions(-)

diff --git a/drivers/gpu/drm/drm_vblank.c b/drivers/gpu/drm/drm_vblank.c
index 702a12bc93bd..cc3571e25a9a 100644
--- a/drivers/gpu/drm/drm_vblank.c
+++ b/drivers/gpu/drm/drm_vblank.c
@@ -166,11 +166,24 @@ module_param_named(timestamp_precision_usec, 
drm_timestamp_precision, int, 0600)
 MODULE_PARM_DESC(vblankoffdelay, "Delay until vblank irq auto-disable [msecs] 
(0: never disable, <0: disable immediately)");
 MODULE_PARM_DESC(timestamp_precision_usec, "Max. error on timestamps [usecs]");
 
+static struct drm_vblank_crtc *
+drm_vblank_crtc(struct drm_device *dev, unsigned int pipe)
+{
+   return >vblank[pipe];
+}
+
+struct drm_vblank_crtc *
+drm_crtc_vblank_crtc(struct drm_crtc *crtc)
+{
+   return drm_vblank_crtc(crtc->dev, drm_crtc_index(crtc));
+}
+EXPORT_SYMBOL(drm_crtc_vblank_crtc);
+
 static void store_vblank(struct drm_device *dev, unsigned int pipe,
 u32 vblank_count_inc,
 ktime_t t_vblank, u32 last)
 {
-   struct drm_vblank_crtc *vblank = >vblank[pipe];
+   struct drm_vblank_crtc *vblank = drm_vblank_crtc(dev, pipe);
 
assert_spin_locked(>vblank_time_lock);
 
@@ -184,7 +197,7 @@ static void store_vblank(struct drm_device *dev, unsigned 
int pipe,
 
 static u32 drm_max_vblank_count(struct drm_device *dev, unsigned int pipe)
 {
-   struct drm_vblank_crtc *vblank = >vblank[pipe];
+   struct drm_vblank_crtc *vblank = drm_vblank_crtc(dev, pipe);
 
return vblank->max_vblank_count ?: dev->max_vblank_count;
 }
@@ -273,7 +286,7 @@ static void drm_reset_vblank_timestamp(struct drm_device 
*dev, unsigned int pipe
 static void drm_update_vblank_count(struct drm_device *dev, unsigned int pipe,
bool in_vblank_irq)
 {
-   struct drm_vblank_crtc *vblank = >vblank[pipe];
+   struct drm_vblank_crtc *vblank = drm_vblank_crtc(dev, pipe);
u32 cur_vblank, diff;
bool rc;
ktime_t t_vblank;
@@ -364,7 +377,7 @@ static void drm_update_vblank_count(struct drm_device *dev, 
unsigned int pipe,
 
 u64 drm_vblank_count(struct drm_device *dev, unsigned int pipe)
 {
-   struct drm_vblank_crtc *vblank = >vblank[pipe];
+   struct drm_vblank_crtc *vblank = drm_vblank_crtc(dev, pipe);
u64 count;
 
if (drm_WARN_ON(dev, pipe >= dev->num_crtcs))
@@ -438,7 +451,7 @@ static void __disable_vblank(struct drm_device *dev, 
unsigned int pipe)
  */
 void drm_vblank_disable_and_save(struct drm_device *dev, unsigned int pipe)
 {
-   struct drm_vblank_crtc *vblank = >vblank[pipe];
+   struct drm_vblank_crtc *vblank = drm_vblank_crtc(dev, pipe);
unsigned long irqflags;
 
assert_spin_locked(>vbl_lock);
@@ -600,7 +613,7 @@ void drm_calc_timestamping_constants(struct drm_crtc *crtc,
 {
struct drm_device *dev = crtc->dev;
unsigned int pipe = drm_crtc_index(crtc);
-   struct drm_vblank_crtc *vblank = >vblank[pipe];
+   struct drm_vblank_crtc *vblank = drm_crtc_vblank_crtc(crtc);
int linedur_ns = 0, framedur_ns = 0;
int dotclock = mode->crtc_clock;
 
@@ -930,7 +943,7 @@ EXPORT_SYMBOL(drm_crtc_vblank_count);
 static u64 drm_vblank_count_and_time(struct drm_device *dev, unsigned int pipe,
 ktime_t *vblanktime)
 {
-   struct drm_vblank_crtc *vblank = >vblank[pipe];
+   struct drm_vblank_crtc *vblank = drm_vblank_crtc(dev, pipe);
u64 vblank_count;
unsigned int seq;
 
@@ -985,7 +998,6 @@ EXPORT_SYMBOL(drm_crtc_vblank_count_and_time);
  */
 int drm_crtc_next_vblank_start(struct drm_crtc *crtc, ktime_t *vblanktime)
 {
-   unsigned int pipe = drm_crtc_index(crtc);
struct drm_vblank_crtc *vblank;
struct drm_display_mode *mode;
u64 vblank_start;
@@ -993,7 +1005,7 @@ int drm_crtc_next_vblank_start(struct drm_crtc *crtc, 
ktime_t *vblanktime)
if (!drm_dev_has_vblank(crtc->dev))
return -EINVAL;
 
-   vblank = >dev->vblank[pipe];
+   vblank = drm_crtc_vblank_crtc(crtc);
mode = >hwmode;
 
if (!vblank->framedur_ns || !vblank->linedur_ns)
@@ -1147,7 +1159,7 @@ static int __enable_vblank(struct drm_device *dev, 
unsigned int pipe)
 
 static int drm_vblank_enable(struct drm_device *dev, unsigned int pipe)
 {
-   struct drm_vblank_crtc *vblank = >vblank[pipe];
+   struct drm_vblank_crtc *vblank = drm_vblank_crtc(dev, pipe);
int ret = 0;
 
assert_spin_locked(>vbl_lock);
@@ -1185,7 +1197,7 @@ static int