All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andy Shevchenko <andy.shevchenko@gmail.com>
To: Hans de Goede <hdegoede@redhat.com>
Cc: "dri-devel@lists.freedesktop.org"
	<dri-devel@lists.freedesktop.org>,
	Heikki Krogerus <heikki.krogerus@linux.intel.com>,
	Thomas Zimmermann <tzimmermann@suse.de>,
	David Airlie <airlied@linux.ie>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	intel-gfx <intel-gfx@lists.freedesktop.org>,
	"platform-driver-x86@vger.kernel.org"
	<platform-driver-x86@vger.kernel.org>,
	"linux-usb@vger.kernel.org" <linux-usb@vger.kernel.org>,
	Rodrigo Vivi <rodrigo.vivi@intel.com>,
	Guenter Roeck <linux@roeck-us.net>
Subject: Re: [PATCH 3/9] drm/connector: Add drm_connector_find_by_fwnode() function (v2)
Date: Tue, 4 May 2021 11:00:25 +0300	[thread overview]
Message-ID: <CAHp75Vcv=sUHafBMjV+BMJgmpsXF0iUn5gudb26E2xGapCiMxg@mail.gmail.com> (raw)
In-Reply-To: <20210503154647.142551-4-hdegoede@redhat.com>


[-- Attachment #1.1: Type: text/plain, Size: 5513 bytes --]

On Monday, May 3, 2021, Hans de Goede <hdegoede@redhat.com> wrote:

> Add a function to find a connector based on a fwnode.
>
> This will be used by the new drm_connector_oob_hotplug_event()
> function which is added by the next patch in this patch-set.
>
> Changes in v2:
> - Complete rewrite to use a global connector list in drm_connector.c
>   rather then using a class-dev-iter in drm_sysfs.c
>
> Signed-off-by: Hans de Goede <hdegoede@redhat.com>
> ---
>  drivers/gpu/drm/drm_connector.c     | 50 +++++++++++++++++++++++++++++
>  drivers/gpu/drm/drm_crtc_internal.h |  1 +
>  include/drm/drm_connector.h         |  8 +++++
>  3 files changed, 59 insertions(+)
>
> diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_
> connector.c
> index 87c68563e6c3..ef759d6add81 100644
> --- a/drivers/gpu/drm/drm_connector.c
> +++ b/drivers/gpu/drm/drm_connector.c
> @@ -66,6 +66,14 @@
>   * support can instead use e.g. drm_helper_hpd_irq_event().
>   */
>
> +/*
> + * Global connector list for drm_connector_find_by_fwnode().
> + * Note drm_connector_[un]register() first take connector->lock and then
> + * take the connector_list_lock.
> + */
> +static DEFINE_MUTEX(connector_list_lock);
> +static LIST_HEAD(connector_list);
> +
>  struct drm_conn_prop_enum_list {
>         int type;
>         const char *name;
> @@ -267,6 +275,7 @@ int drm_connector_init(struct drm_device *dev,
>                 goto out_put_type_id;
>         }
>
> +       INIT_LIST_HEAD(&connector->global_connector_list_entry);
>         INIT_LIST_HEAD(&connector->probed_modes);
>         INIT_LIST_HEAD(&connector->modes);
>         mutex_init(&connector->mutex);
> @@ -540,6 +549,9 @@ int drm_connector_register(struct drm_connector
> *connector)
>                 drm_privacy_screen_register_notifier(connector->privacy_
> screen,
>                                            &connector->privacy_screen_
> notifier);
>
> +       mutex_lock(&connector_list_lock);
> +       list_add_tail(&connector->global_connector_list_entry,
> &connector_list);
> +       mutex_unlock(&connector_list_lock);
>         goto unlock;
>
>  err_debugfs:
> @@ -568,6 +580,10 @@ void drm_connector_unregister(struct drm_connector
> *connector)
>                 return;
>         }
>
> +       mutex_lock(&connector_list_lock);
> +       list_del_init(&connector->global_connector_list_entry);
> +       mutex_unlock(&connector_list_lock);
> +
>         if (connector->privacy_screen)
>                 drm_privacy_screen_unregister_notifier(
>                                         connector->privacy_screen,
> @@ -2676,6 +2692,40 @@ int drm_mode_getconnector(struct drm_device *dev,
> void *data,
>         return ret;
>  }
>
> +/**
> + * drm_connector_find_by_fwnode - Find a connector based on the
> associated fwnode
> + * @fwnode: fwnode for which to find the matching drm_connector
> + *
> + * This functions looks up a drm_connector based on its associated
> fwnode. When
> + * a connector is found a reference to the connector is returned. The
> caller must
> + * call drm_connector_put() to release this reference when it is done
> with the
> + * connector.
> + *
> + * Returns: A reference to the found connector or an ERR_PTR().
> + */
> +struct drm_connector *drm_connector_find_by_fwnode(struct fwnode_handle
> *fwnode)
> +{
> +       struct drm_connector *connector, *found = ERR_PTR(-ENODEV);
> +
> +       if (!fwnode)
> +               return ERR_PTR(-ENODEV);
> +
> +       mutex_lock(&connector_list_lock);
> +
> +       list_for_each_entry(connector, &connector_list,
> global_connector_list_entry) {
> +               if (connector->fwnode == fwnode ||
> +                   (connector->fwnode && connector->fwnode->secondary ==
> fwnode)) {
> +                       drm_connector_get(connector);
> +                       found = connector;
> +                       break;
> +               }
> +       }
> +
> +       mutex_unlock(&connector_list_lock);
> +
> +       return found;



If I am not mistaken you can replace this with

return list_entry_is_head();

call and remove additional Boolean variable.


> +}
> +
>
>  /**
>   * DOC: Tile group
> diff --git a/drivers/gpu/drm/drm_crtc_internal.h
> b/drivers/gpu/drm/drm_crtc_internal.h
> index 54d4cf1233e9..6e28fc00a740 100644
> --- a/drivers/gpu/drm/drm_crtc_internal.h
> +++ b/drivers/gpu/drm/drm_crtc_internal.h
> @@ -185,6 +185,7 @@ int drm_connector_set_obj_prop(struct drm_mode_object
> *obj,
>  int drm_connector_create_standard_properties(struct drm_device *dev);
>  const char *drm_get_connector_force_name(enum drm_connector_force force);
>  void drm_connector_free_work_fn(struct work_struct *work);
> +struct drm_connector *drm_connector_find_by_fwnode(struct fwnode_handle
> *fwnode);
>
>  /* IOCTL */
>  int drm_connector_property_set_ioctl(struct drm_device *dev,
> diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h
> index d20bfd7576ed..ae377354e48e 100644
> --- a/include/drm/drm_connector.h
> +++ b/include/drm/drm_connector.h
> @@ -1267,6 +1267,14 @@ struct drm_connector {
>          */
>         struct list_head head;
>
> +       /**
> +        * @global_connector_list_entry:
> +        *
> +        * Connector entry in the global connector-list, used by
> +        * drm_connector_find_by_fwnode().
> +        */
> +       struct list_head global_connector_list_entry;
> +
>         /** @base: base KMS object */
>         struct drm_mode_object base;
>
> --
> 2.31.1
>
>

-- 
With Best Regards,
Andy Shevchenko

[-- Attachment #1.2: Type: text/html, Size: 6971 bytes --]

[-- Attachment #2: Type: text/plain, Size: 160 bytes --]

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

WARNING: multiple messages have this Message-ID (diff)
From: Andy Shevchenko <andy.shevchenko@gmail.com>
To: Hans de Goede <hdegoede@redhat.com>
Cc: "dri-devel@lists.freedesktop.org"
	<dri-devel@lists.freedesktop.org>,
	Heikki Krogerus <heikki.krogerus@linux.intel.com>,
	Thomas Zimmermann <tzimmermann@suse.de>,
	David Airlie <airlied@linux.ie>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	intel-gfx <intel-gfx@lists.freedesktop.org>,
	"platform-driver-x86@vger.kernel.org"
	<platform-driver-x86@vger.kernel.org>,
	"linux-usb@vger.kernel.org" <linux-usb@vger.kernel.org>,
	Maxime Ripard <mripard@kernel.org>,
	Guenter Roeck <linux@roeck-us.net>
Subject: Re: [Intel-gfx] [PATCH 3/9] drm/connector: Add drm_connector_find_by_fwnode() function (v2)
Date: Tue, 4 May 2021 11:00:25 +0300	[thread overview]
Message-ID: <CAHp75Vcv=sUHafBMjV+BMJgmpsXF0iUn5gudb26E2xGapCiMxg@mail.gmail.com> (raw)
In-Reply-To: <20210503154647.142551-4-hdegoede@redhat.com>


[-- Attachment #1.1: Type: text/plain, Size: 5513 bytes --]

On Monday, May 3, 2021, Hans de Goede <hdegoede@redhat.com> wrote:

> Add a function to find a connector based on a fwnode.
>
> This will be used by the new drm_connector_oob_hotplug_event()
> function which is added by the next patch in this patch-set.
>
> Changes in v2:
> - Complete rewrite to use a global connector list in drm_connector.c
>   rather then using a class-dev-iter in drm_sysfs.c
>
> Signed-off-by: Hans de Goede <hdegoede@redhat.com>
> ---
>  drivers/gpu/drm/drm_connector.c     | 50 +++++++++++++++++++++++++++++
>  drivers/gpu/drm/drm_crtc_internal.h |  1 +
>  include/drm/drm_connector.h         |  8 +++++
>  3 files changed, 59 insertions(+)
>
> diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_
> connector.c
> index 87c68563e6c3..ef759d6add81 100644
> --- a/drivers/gpu/drm/drm_connector.c
> +++ b/drivers/gpu/drm/drm_connector.c
> @@ -66,6 +66,14 @@
>   * support can instead use e.g. drm_helper_hpd_irq_event().
>   */
>
> +/*
> + * Global connector list for drm_connector_find_by_fwnode().
> + * Note drm_connector_[un]register() first take connector->lock and then
> + * take the connector_list_lock.
> + */
> +static DEFINE_MUTEX(connector_list_lock);
> +static LIST_HEAD(connector_list);
> +
>  struct drm_conn_prop_enum_list {
>         int type;
>         const char *name;
> @@ -267,6 +275,7 @@ int drm_connector_init(struct drm_device *dev,
>                 goto out_put_type_id;
>         }
>
> +       INIT_LIST_HEAD(&connector->global_connector_list_entry);
>         INIT_LIST_HEAD(&connector->probed_modes);
>         INIT_LIST_HEAD(&connector->modes);
>         mutex_init(&connector->mutex);
> @@ -540,6 +549,9 @@ int drm_connector_register(struct drm_connector
> *connector)
>                 drm_privacy_screen_register_notifier(connector->privacy_
> screen,
>                                            &connector->privacy_screen_
> notifier);
>
> +       mutex_lock(&connector_list_lock);
> +       list_add_tail(&connector->global_connector_list_entry,
> &connector_list);
> +       mutex_unlock(&connector_list_lock);
>         goto unlock;
>
>  err_debugfs:
> @@ -568,6 +580,10 @@ void drm_connector_unregister(struct drm_connector
> *connector)
>                 return;
>         }
>
> +       mutex_lock(&connector_list_lock);
> +       list_del_init(&connector->global_connector_list_entry);
> +       mutex_unlock(&connector_list_lock);
> +
>         if (connector->privacy_screen)
>                 drm_privacy_screen_unregister_notifier(
>                                         connector->privacy_screen,
> @@ -2676,6 +2692,40 @@ int drm_mode_getconnector(struct drm_device *dev,
> void *data,
>         return ret;
>  }
>
> +/**
> + * drm_connector_find_by_fwnode - Find a connector based on the
> associated fwnode
> + * @fwnode: fwnode for which to find the matching drm_connector
> + *
> + * This functions looks up a drm_connector based on its associated
> fwnode. When
> + * a connector is found a reference to the connector is returned. The
> caller must
> + * call drm_connector_put() to release this reference when it is done
> with the
> + * connector.
> + *
> + * Returns: A reference to the found connector or an ERR_PTR().
> + */
> +struct drm_connector *drm_connector_find_by_fwnode(struct fwnode_handle
> *fwnode)
> +{
> +       struct drm_connector *connector, *found = ERR_PTR(-ENODEV);
> +
> +       if (!fwnode)
> +               return ERR_PTR(-ENODEV);
> +
> +       mutex_lock(&connector_list_lock);
> +
> +       list_for_each_entry(connector, &connector_list,
> global_connector_list_entry) {
> +               if (connector->fwnode == fwnode ||
> +                   (connector->fwnode && connector->fwnode->secondary ==
> fwnode)) {
> +                       drm_connector_get(connector);
> +                       found = connector;
> +                       break;
> +               }
> +       }
> +
> +       mutex_unlock(&connector_list_lock);
> +
> +       return found;



If I am not mistaken you can replace this with

return list_entry_is_head();

call and remove additional Boolean variable.


> +}
> +
>
>  /**
>   * DOC: Tile group
> diff --git a/drivers/gpu/drm/drm_crtc_internal.h
> b/drivers/gpu/drm/drm_crtc_internal.h
> index 54d4cf1233e9..6e28fc00a740 100644
> --- a/drivers/gpu/drm/drm_crtc_internal.h
> +++ b/drivers/gpu/drm/drm_crtc_internal.h
> @@ -185,6 +185,7 @@ int drm_connector_set_obj_prop(struct drm_mode_object
> *obj,
>  int drm_connector_create_standard_properties(struct drm_device *dev);
>  const char *drm_get_connector_force_name(enum drm_connector_force force);
>  void drm_connector_free_work_fn(struct work_struct *work);
> +struct drm_connector *drm_connector_find_by_fwnode(struct fwnode_handle
> *fwnode);
>
>  /* IOCTL */
>  int drm_connector_property_set_ioctl(struct drm_device *dev,
> diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h
> index d20bfd7576ed..ae377354e48e 100644
> --- a/include/drm/drm_connector.h
> +++ b/include/drm/drm_connector.h
> @@ -1267,6 +1267,14 @@ struct drm_connector {
>          */
>         struct list_head head;
>
> +       /**
> +        * @global_connector_list_entry:
> +        *
> +        * Connector entry in the global connector-list, used by
> +        * drm_connector_find_by_fwnode().
> +        */
> +       struct list_head global_connector_list_entry;
> +
>         /** @base: base KMS object */
>         struct drm_mode_object base;
>
> --
> 2.31.1
>
>

-- 
With Best Regards,
Andy Shevchenko

[-- Attachment #1.2: Type: text/html, Size: 6971 bytes --]

[-- Attachment #2: Type: text/plain, Size: 160 bytes --]

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

  reply	other threads:[~2021-05-04  8:00 UTC|newest]

Thread overview: 91+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-05-03 15:46 [PATCH 0/9] drm + usb-type-c: Add support for out-of-band hotplug notification (v2) Hans de Goede
2021-05-03 15:46 ` [Intel-gfx] " Hans de Goede
2021-05-03 15:46 ` Hans de Goede
2021-05-03 15:46 ` [PATCH 1/9] drm/connector: Give connector sysfs devices there own device_type Hans de Goede
2021-05-03 15:46   ` [Intel-gfx] " Hans de Goede
2021-05-03 15:46   ` Hans de Goede
2021-05-03 15:46 ` [PATCH 2/9] drm/connector: Add a fwnode pointer to drm_connector and register with ACPI Hans de Goede
2021-05-03 15:46   ` [Intel-gfx] " Hans de Goede
2021-05-03 15:46   ` Hans de Goede
2021-05-04  7:57   ` Andy Shevchenko
2021-05-04  7:57     ` [Intel-gfx] " Andy Shevchenko
2021-05-03 15:46 ` [PATCH 3/9] drm/connector: Add drm_connector_find_by_fwnode() function (v2) Hans de Goede
2021-05-03 15:46   ` [Intel-gfx] " Hans de Goede
2021-05-03 15:46   ` Hans de Goede
2021-05-04  8:00   ` Andy Shevchenko [this message]
2021-05-04  8:00     ` [Intel-gfx] " Andy Shevchenko
2021-05-04 11:53     ` Hans de Goede
2021-05-04 11:53       ` [Intel-gfx] " Hans de Goede
2021-05-04 11:53       ` Hans de Goede
2021-05-04 12:35       ` Andy Shevchenko
2021-05-04 12:35         ` [Intel-gfx] " Andy Shevchenko
2021-05-04 12:35         ` Andy Shevchenko
2021-05-03 15:46 ` [PATCH 4/9] drm/connector: Add support for out-of-band hotplug notification (v2) Hans de Goede
2021-05-03 15:46   ` [Intel-gfx] " Hans de Goede
2021-05-03 15:46   ` Hans de Goede
2021-05-04 15:10   ` Heikki Krogerus
2021-05-04 15:10     ` [Intel-gfx] " Heikki Krogerus
2021-05-04 15:10     ` Heikki Krogerus
2021-05-04 15:35     ` Hans de Goede
2021-05-04 15:35       ` [Intel-gfx] " Hans de Goede
2021-05-04 15:35       ` Hans de Goede
2021-05-05  9:50       ` Heikki Krogerus
2021-05-05  9:50         ` [Intel-gfx] " Heikki Krogerus
2021-05-05  9:50         ` Heikki Krogerus
2021-05-05 10:42         ` Hans de Goede
2021-05-05 10:42           ` [Intel-gfx] " Hans de Goede
2021-05-05 10:42           ` Hans de Goede
2021-05-03 15:46 ` [PATCH 5/9] drm/i915: Associate ACPI connector nodes with connector entries Hans de Goede
2021-05-03 15:46   ` [Intel-gfx] " Hans de Goede
2021-05-03 15:46   ` Hans de Goede
2021-05-04  7:52   ` Andy Shevchenko
2021-05-04  7:52     ` [Intel-gfx] " Andy Shevchenko
2021-05-04 14:56     ` Heikki Krogerus
2021-05-04 14:56       ` [Intel-gfx] " Heikki Krogerus
2021-05-04 14:56       ` Heikki Krogerus
2021-05-05  9:07     ` Hans de Goede
2021-05-05  9:07       ` [Intel-gfx] " Hans de Goede
2021-05-05  9:07       ` Hans de Goede
2021-05-05  9:17       ` Andy Shevchenko
2021-05-05  9:17         ` [Intel-gfx] " Andy Shevchenko
2021-05-05  9:17         ` Andy Shevchenko
2021-05-05  9:28         ` Hans de Goede
2021-05-05  9:28           ` [Intel-gfx] " Hans de Goede
2021-05-05  9:28           ` Hans de Goede
2021-05-05 10:02           ` Andy Shevchenko
2021-05-05 10:02             ` [Intel-gfx] " Andy Shevchenko
2021-05-05 10:02             ` Andy Shevchenko
2021-05-05 10:30             ` Hans de Goede
2021-05-05 10:30               ` [Intel-gfx] " Hans de Goede
2021-05-05 10:30               ` Hans de Goede
2021-05-05 12:55               ` Andy Shevchenko
2021-05-05 12:55                 ` [Intel-gfx] " Andy Shevchenko
2021-05-05 12:55                 ` Andy Shevchenko
2021-05-05 10:28         ` Sakari Ailus
2021-05-05 10:28           ` [Intel-gfx] " Sakari Ailus
2021-05-05 10:28           ` Sakari Ailus
2021-05-03 15:46 ` [PATCH 6/9] drm/i915/dp: Add support for out-of-bound hotplug events Hans de Goede
2021-05-03 15:46   ` [Intel-gfx] " Hans de Goede
2021-05-03 15:46   ` Hans de Goede
2021-05-03 15:46 ` [PATCH 7/9] usb: typec: altmodes/displayport: Make dp_altmode_notify() more generic Hans de Goede
2021-05-03 15:46   ` [Intel-gfx] " Hans de Goede
2021-05-03 15:46   ` Hans de Goede
2021-05-03 15:46 ` [PATCH 8/9] usb: typec: altmodes/displayport: Notify drm subsys of hotplug events Hans de Goede
2021-05-03 15:46   ` [Intel-gfx] " Hans de Goede
2021-05-03 15:46   ` Hans de Goede
2021-05-05 10:17   ` Heikki Krogerus
2021-05-05 10:17     ` [Intel-gfx] " Heikki Krogerus
2021-05-05 10:17     ` Heikki Krogerus
2021-05-05 10:44     ` Hans de Goede
2021-05-05 10:44       ` [Intel-gfx] " Hans de Goede
2021-05-05 10:44       ` Hans de Goede
2021-05-03 15:46 ` [PATCH 9/9] platform/x86/intel_cht_int33fe: Correct "displayport" fwnode reference Hans de Goede
2021-05-03 15:46   ` [Intel-gfx] " Hans de Goede
2021-05-03 15:46   ` Hans de Goede
2021-05-19 13:37   ` Hans de Goede
2021-05-19 13:37     ` [Intel-gfx] " Hans de Goede
2021-05-19 13:37     ` Hans de Goede
2021-05-03 20:25 ` [Intel-gfx] ✗ Fi.CI.BUILD: failure for drm + usb-type-c: Add support for out-of-band hotplug notification (rev2) Patchwork
2021-05-04 15:22 ` [PATCH 0/9] drm + usb-type-c: Add support for out-of-band hotplug notification (v2) Heikki Krogerus
2021-05-04 15:22   ` [Intel-gfx] " Heikki Krogerus
2021-05-04 15:22   ` Heikki Krogerus

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='CAHp75Vcv=sUHafBMjV+BMJgmpsXF0iUn5gudb26E2xGapCiMxg@mail.gmail.com' \
    --to=andy.shevchenko@gmail.com \
    --cc=airlied@linux.ie \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=gregkh@linuxfoundation.org \
    --cc=hdegoede@redhat.com \
    --cc=heikki.krogerus@linux.intel.com \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=linux-usb@vger.kernel.org \
    --cc=linux@roeck-us.net \
    --cc=platform-driver-x86@vger.kernel.org \
    --cc=rodrigo.vivi@intel.com \
    --cc=tzimmermann@suse.de \
    /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.