From: Thomas Zimmermann <tzimmermann@suse.de>
To: "Hogander, Jouni" <jouni.hogander@intel.com>,
"Upadhyay, Tejas" <tejas.upadhyay@intel.com>,
"ville.syrjala@linux.intel.com" <ville.syrjala@linux.intel.com>,
"Vivi, Rodrigo" <rodrigo.vivi@intel.com>,
"joonas.lahtinen@linux.intel.com"
<joonas.lahtinen@linux.intel.com>,
"javierm@redhat.com" <javierm@redhat.com>,
"tvrtko.ursulin@linux.intel.com" <tvrtko.ursulin@linux.intel.com>,
"Deak, Imre" <imre.deak@intel.com>,
"airlied@gmail.com" <airlied@gmail.com>,
"jani.nikula@linux.intel.com" <jani.nikula@linux.intel.com>,
"daniel@ffwll.ch" <daniel@ffwll.ch>
Cc: "intel-gfx@lists.freedesktop.org"
<intel-gfx@lists.freedesktop.org>,
"dri-devel@lists.freedesktop.org"
<dri-devel@lists.freedesktop.org>
Subject: Re: [Intel-gfx] [PATCH v5 7/7] drm/i915: Implement fbdev emulation as in-kernel client
Date: Wed, 1 Nov 2023 09:33:41 +0100 [thread overview]
Message-ID: <99033596-d875-4cfe-9105-730a57cf6013@suse.de> (raw)
In-Reply-To: <199bdb57b0f48e6f77f7effc90dcffcae8213285.camel@intel.com>
[-- Attachment #1.1: Type: text/plain, Size: 7951 bytes --]
Hi
Am 25.10.23 um 13:36 schrieb Hogander, Jouni:
[...]
>> +
>> + if (!drm_drv_uses_atomic_modeset(dev))
>> + drm_helper_disable_unused_functions(dev);
>
> Can you please explain why this is needed here?
This disables some parts of the mode-setting pipeline and is required
for drivers with non-atomic commits. AFAICT atomic mode setting is not
supported on some very old Intel chips. [1] I'll leave a short comment
on the code.
[1]
https://elixir.bootlin.com/linux/v6.6/source/drivers/gpu/drm/i915/intel_device_info.c#L399
Best regard
Thomas
>
>> +
>> + ret = drm_fb_helper_initial_config(fb_helper);
>> + if (ret)
>> + goto err_drm_fb_helper_fini;
>> +
>> + vga_switcheroo_client_fb_set(pdev, fb_helper->info);
>>
>> return 0;
>> +
>> +err_drm_fb_helper_fini:
>> + drm_fb_helper_fini(fb_helper);
>> +err_drm_err:
>> + drm_err(dev, "Failed to setup i915 fbdev emulation
>> (ret=%d)\n", ret);
>> + return ret;
>> }
>>
>> static const struct drm_client_funcs intel_fbdev_client_funcs = {
>> @@ -703,22 +729,23 @@ static const struct drm_client_funcs
>> intel_fbdev_client_funcs = {
>> .hotplug = intel_fbdev_client_hotplug,
>> };
>>
>> -int intel_fbdev_init(struct drm_device *dev)
>> +void intel_fbdev_setup(struct drm_i915_private *dev_priv)
>
> Use i915 rather than dev_priv.
>
> BR,
>
> Jouni Högander
>
>> {
>> - struct drm_i915_private *dev_priv = to_i915(dev);
>> + struct drm_device *dev = &dev_priv->drm;
>> struct intel_fbdev *ifbdev;
>> int ret;
>>
>> - if (drm_WARN_ON(dev, !HAS_DISPLAY(dev_priv)))
>> - return -ENODEV;
>> + if (!HAS_DISPLAY(dev_priv))
>> + return;
>>
>> ifbdev = kzalloc(sizeof(*ifbdev), GFP_KERNEL);
>> if (!ifbdev)
>> - return -ENOMEM;
>> -
>> - mutex_init(&ifbdev->hpd_lock);
>> + return;
>> drm_fb_helper_prepare(dev, &ifbdev->helper, 32,
>> &intel_fb_helper_funcs);
>>
>> + dev_priv->display.fbdev.fbdev = ifbdev;
>> + INIT_WORK(&dev_priv->display.fbdev.suspend_work,
>> intel_fbdev_suspend_worker);
>> + mutex_init(&ifbdev->hpd_lock);
>> if (intel_fbdev_init_bios(dev, ifbdev))
>> ifbdev->helper.preferred_bpp = ifbdev->preferred_bpp;
>> else
>> @@ -726,68 +753,19 @@ int intel_fbdev_init(struct drm_device *dev)
>>
>> ret = drm_client_init(dev, &ifbdev->helper.client, "i915-
>> fbdev",
>> &intel_fbdev_client_funcs);
>> - if (ret)
>> + if (ret) {
>> + drm_err(dev, "Failed to register client: %d\n", ret);
>> goto err_drm_fb_helper_unprepare;
>> + }
>>
>> - ret = drm_fb_helper_init(dev, &ifbdev->helper);
>> - if (ret)
>> - goto err_drm_client_release;
>> -
>> - dev_priv->display.fbdev.fbdev = ifbdev;
>> - INIT_WORK(&dev_priv->display.fbdev.suspend_work,
>> intel_fbdev_suspend_worker);
>> + drm_client_register(&ifbdev->helper.client);
>>
>> - return 0;
>> + return;
>>
>> -err_drm_client_release:
>> - drm_client_release(&ifbdev->helper.client);
>> err_drm_fb_helper_unprepare:
>> drm_fb_helper_unprepare(&ifbdev->helper);
>> + mutex_destroy(&ifbdev->hpd_lock);
>> kfree(ifbdev);
>> - return ret;
>> -}
>> -
>> -static void intel_fbdev_initial_config(void *data, async_cookie_t
>> cookie)
>> -{
>> - struct intel_fbdev *ifbdev = data;
>> -
>> - /* Due to peculiar init order wrt to hpd handling this is
>> separate. */
>> - if (drm_fb_helper_initial_config(&ifbdev->helper))
>> - intel_fbdev_unregister(to_i915(ifbdev->helper.dev));
>> -}
>> -
>> -void intel_fbdev_initial_config_async(struct drm_i915_private
>> *dev_priv)
>> -{
>> - struct intel_fbdev *ifbdev = dev_priv->display.fbdev.fbdev;
>> -
>> - if (!ifbdev)
>> - return;
>> -
>> - ifbdev->cookie = async_schedule(intel_fbdev_initial_config,
>> ifbdev);
>> -}
>> -
>> -void intel_fbdev_unregister(struct drm_i915_private *dev_priv)
>> -{
>> - struct intel_fbdev *ifbdev = dev_priv->display.fbdev.fbdev;
>> -
>> - if (!ifbdev)
>> - return;
>> -
>> - intel_fbdev_set_suspend(&dev_priv->drm,
>> FBINFO_STATE_SUSPENDED, true);
>> -
>> - if (!current_is_async())
>> - intel_fbdev_sync(ifbdev);
>> -
>> - drm_fb_helper_unregister_info(&ifbdev->helper);
>> -}
>> -
>> -void intel_fbdev_fini(struct drm_i915_private *dev_priv)
>> -{
>> - struct intel_fbdev *ifbdev = fetch_and_zero(&dev_priv-
>>> display.fbdev.fbdev);
>> -
>> - if (!ifbdev)
>> - return;
>> -
>> - intel_fbdev_destroy(ifbdev);
>> }
>>
>> struct intel_framebuffer *intel_fbdev_framebuffer(struct intel_fbdev
>> *fbdev)
>> diff --git a/drivers/gpu/drm/i915/display/intel_fbdev.h
>> b/drivers/gpu/drm/i915/display/intel_fbdev.h
>> index 8c953f102ba22..08de2d5b34338 100644
>> --- a/drivers/gpu/drm/i915/display/intel_fbdev.h
>> +++ b/drivers/gpu/drm/i915/display/intel_fbdev.h
>> @@ -14,27 +14,11 @@ struct intel_fbdev;
>> struct intel_framebuffer;
>>
>> #ifdef CONFIG_DRM_FBDEV_EMULATION
>> -int intel_fbdev_init(struct drm_device *dev);
>> -void intel_fbdev_initial_config_async(struct drm_i915_private
>> *dev_priv);
>> -void intel_fbdev_unregister(struct drm_i915_private *dev_priv);
>> -void intel_fbdev_fini(struct drm_i915_private *dev_priv);
>> +void intel_fbdev_setup(struct drm_i915_private *dev_priv);
>> void intel_fbdev_set_suspend(struct drm_device *dev, int state, bool
>> synchronous);
>> struct intel_framebuffer *intel_fbdev_framebuffer(struct intel_fbdev
>> *fbdev);
>> #else
>> -static inline int intel_fbdev_init(struct drm_device *dev)
>> -{
>> - return 0;
>> -}
>> -
>> -static inline void intel_fbdev_initial_config_async(struct
>> drm_i915_private *dev_priv)
>> -{
>> -}
>> -
>> -static inline void intel_fbdev_unregister(struct drm_i915_private
>> *dev_priv)
>> -{
>> -}
>> -
>> -static inline void intel_fbdev_fini(struct drm_i915_private
>> *dev_priv)
>> +static inline void intel_fbdev_setup(struct drm_i915_private
>> *dev_priv)
>> {
>> }
>>
>> diff --git a/drivers/gpu/drm/i915/i915_driver.c
>> b/drivers/gpu/drm/i915/i915_driver.c
>> index 86460cd8167d1..53663c0cc3be4 100644
>> --- a/drivers/gpu/drm/i915/i915_driver.c
>> +++ b/drivers/gpu/drm/i915/i915_driver.c
>> @@ -817,6 +817,8 @@ int i915_driver_probe(struct pci_dev *pdev, const
>> struct pci_device_id *ent)
>>
>> i915->do_release = true;
>>
>> + intel_fbdev_setup(i915);
>> +
>> return 0;
>>
>> out_cleanup_gem:
>
--
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Frankenstrasse 146, 90461 Nuernberg, Germany
GF: Ivo Totev, Andrew Myers, Andrew McDonald, Boudien Moerman
HRB 36809 (AG Nuernberg)
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 840 bytes --]
WARNING: multiple messages have this Message-ID (diff)
From: Thomas Zimmermann <tzimmermann@suse.de>
To: "Hogander, Jouni" <jouni.hogander@intel.com>,
"Upadhyay, Tejas" <tejas.upadhyay@intel.com>,
"ville.syrjala@linux.intel.com" <ville.syrjala@linux.intel.com>,
"Vivi, Rodrigo" <rodrigo.vivi@intel.com>,
"joonas.lahtinen@linux.intel.com"
<joonas.lahtinen@linux.intel.com>,
"javierm@redhat.com" <javierm@redhat.com>,
"tvrtko.ursulin@linux.intel.com" <tvrtko.ursulin@linux.intel.com>,
"Deak, Imre" <imre.deak@intel.com>,
"airlied@gmail.com" <airlied@gmail.com>,
"jani.nikula@linux.intel.com" <jani.nikula@linux.intel.com>,
"daniel@ffwll.ch" <daniel@ffwll.ch>
Cc: "intel-gfx@lists.freedesktop.org"
<intel-gfx@lists.freedesktop.org>,
"dri-devel@lists.freedesktop.org"
<dri-devel@lists.freedesktop.org>
Subject: Re: [PATCH v5 7/7] drm/i915: Implement fbdev emulation as in-kernel client
Date: Wed, 1 Nov 2023 09:33:41 +0100 [thread overview]
Message-ID: <99033596-d875-4cfe-9105-730a57cf6013@suse.de> (raw)
In-Reply-To: <199bdb57b0f48e6f77f7effc90dcffcae8213285.camel@intel.com>
[-- Attachment #1.1: Type: text/plain, Size: 7951 bytes --]
Hi
Am 25.10.23 um 13:36 schrieb Hogander, Jouni:
[...]
>> +
>> + if (!drm_drv_uses_atomic_modeset(dev))
>> + drm_helper_disable_unused_functions(dev);
>
> Can you please explain why this is needed here?
This disables some parts of the mode-setting pipeline and is required
for drivers with non-atomic commits. AFAICT atomic mode setting is not
supported on some very old Intel chips. [1] I'll leave a short comment
on the code.
[1]
https://elixir.bootlin.com/linux/v6.6/source/drivers/gpu/drm/i915/intel_device_info.c#L399
Best regard
Thomas
>
>> +
>> + ret = drm_fb_helper_initial_config(fb_helper);
>> + if (ret)
>> + goto err_drm_fb_helper_fini;
>> +
>> + vga_switcheroo_client_fb_set(pdev, fb_helper->info);
>>
>> return 0;
>> +
>> +err_drm_fb_helper_fini:
>> + drm_fb_helper_fini(fb_helper);
>> +err_drm_err:
>> + drm_err(dev, "Failed to setup i915 fbdev emulation
>> (ret=%d)\n", ret);
>> + return ret;
>> }
>>
>> static const struct drm_client_funcs intel_fbdev_client_funcs = {
>> @@ -703,22 +729,23 @@ static const struct drm_client_funcs
>> intel_fbdev_client_funcs = {
>> .hotplug = intel_fbdev_client_hotplug,
>> };
>>
>> -int intel_fbdev_init(struct drm_device *dev)
>> +void intel_fbdev_setup(struct drm_i915_private *dev_priv)
>
> Use i915 rather than dev_priv.
>
> BR,
>
> Jouni Högander
>
>> {
>> - struct drm_i915_private *dev_priv = to_i915(dev);
>> + struct drm_device *dev = &dev_priv->drm;
>> struct intel_fbdev *ifbdev;
>> int ret;
>>
>> - if (drm_WARN_ON(dev, !HAS_DISPLAY(dev_priv)))
>> - return -ENODEV;
>> + if (!HAS_DISPLAY(dev_priv))
>> + return;
>>
>> ifbdev = kzalloc(sizeof(*ifbdev), GFP_KERNEL);
>> if (!ifbdev)
>> - return -ENOMEM;
>> -
>> - mutex_init(&ifbdev->hpd_lock);
>> + return;
>> drm_fb_helper_prepare(dev, &ifbdev->helper, 32,
>> &intel_fb_helper_funcs);
>>
>> + dev_priv->display.fbdev.fbdev = ifbdev;
>> + INIT_WORK(&dev_priv->display.fbdev.suspend_work,
>> intel_fbdev_suspend_worker);
>> + mutex_init(&ifbdev->hpd_lock);
>> if (intel_fbdev_init_bios(dev, ifbdev))
>> ifbdev->helper.preferred_bpp = ifbdev->preferred_bpp;
>> else
>> @@ -726,68 +753,19 @@ int intel_fbdev_init(struct drm_device *dev)
>>
>> ret = drm_client_init(dev, &ifbdev->helper.client, "i915-
>> fbdev",
>> &intel_fbdev_client_funcs);
>> - if (ret)
>> + if (ret) {
>> + drm_err(dev, "Failed to register client: %d\n", ret);
>> goto err_drm_fb_helper_unprepare;
>> + }
>>
>> - ret = drm_fb_helper_init(dev, &ifbdev->helper);
>> - if (ret)
>> - goto err_drm_client_release;
>> -
>> - dev_priv->display.fbdev.fbdev = ifbdev;
>> - INIT_WORK(&dev_priv->display.fbdev.suspend_work,
>> intel_fbdev_suspend_worker);
>> + drm_client_register(&ifbdev->helper.client);
>>
>> - return 0;
>> + return;
>>
>> -err_drm_client_release:
>> - drm_client_release(&ifbdev->helper.client);
>> err_drm_fb_helper_unprepare:
>> drm_fb_helper_unprepare(&ifbdev->helper);
>> + mutex_destroy(&ifbdev->hpd_lock);
>> kfree(ifbdev);
>> - return ret;
>> -}
>> -
>> -static void intel_fbdev_initial_config(void *data, async_cookie_t
>> cookie)
>> -{
>> - struct intel_fbdev *ifbdev = data;
>> -
>> - /* Due to peculiar init order wrt to hpd handling this is
>> separate. */
>> - if (drm_fb_helper_initial_config(&ifbdev->helper))
>> - intel_fbdev_unregister(to_i915(ifbdev->helper.dev));
>> -}
>> -
>> -void intel_fbdev_initial_config_async(struct drm_i915_private
>> *dev_priv)
>> -{
>> - struct intel_fbdev *ifbdev = dev_priv->display.fbdev.fbdev;
>> -
>> - if (!ifbdev)
>> - return;
>> -
>> - ifbdev->cookie = async_schedule(intel_fbdev_initial_config,
>> ifbdev);
>> -}
>> -
>> -void intel_fbdev_unregister(struct drm_i915_private *dev_priv)
>> -{
>> - struct intel_fbdev *ifbdev = dev_priv->display.fbdev.fbdev;
>> -
>> - if (!ifbdev)
>> - return;
>> -
>> - intel_fbdev_set_suspend(&dev_priv->drm,
>> FBINFO_STATE_SUSPENDED, true);
>> -
>> - if (!current_is_async())
>> - intel_fbdev_sync(ifbdev);
>> -
>> - drm_fb_helper_unregister_info(&ifbdev->helper);
>> -}
>> -
>> -void intel_fbdev_fini(struct drm_i915_private *dev_priv)
>> -{
>> - struct intel_fbdev *ifbdev = fetch_and_zero(&dev_priv-
>>> display.fbdev.fbdev);
>> -
>> - if (!ifbdev)
>> - return;
>> -
>> - intel_fbdev_destroy(ifbdev);
>> }
>>
>> struct intel_framebuffer *intel_fbdev_framebuffer(struct intel_fbdev
>> *fbdev)
>> diff --git a/drivers/gpu/drm/i915/display/intel_fbdev.h
>> b/drivers/gpu/drm/i915/display/intel_fbdev.h
>> index 8c953f102ba22..08de2d5b34338 100644
>> --- a/drivers/gpu/drm/i915/display/intel_fbdev.h
>> +++ b/drivers/gpu/drm/i915/display/intel_fbdev.h
>> @@ -14,27 +14,11 @@ struct intel_fbdev;
>> struct intel_framebuffer;
>>
>> #ifdef CONFIG_DRM_FBDEV_EMULATION
>> -int intel_fbdev_init(struct drm_device *dev);
>> -void intel_fbdev_initial_config_async(struct drm_i915_private
>> *dev_priv);
>> -void intel_fbdev_unregister(struct drm_i915_private *dev_priv);
>> -void intel_fbdev_fini(struct drm_i915_private *dev_priv);
>> +void intel_fbdev_setup(struct drm_i915_private *dev_priv);
>> void intel_fbdev_set_suspend(struct drm_device *dev, int state, bool
>> synchronous);
>> struct intel_framebuffer *intel_fbdev_framebuffer(struct intel_fbdev
>> *fbdev);
>> #else
>> -static inline int intel_fbdev_init(struct drm_device *dev)
>> -{
>> - return 0;
>> -}
>> -
>> -static inline void intel_fbdev_initial_config_async(struct
>> drm_i915_private *dev_priv)
>> -{
>> -}
>> -
>> -static inline void intel_fbdev_unregister(struct drm_i915_private
>> *dev_priv)
>> -{
>> -}
>> -
>> -static inline void intel_fbdev_fini(struct drm_i915_private
>> *dev_priv)
>> +static inline void intel_fbdev_setup(struct drm_i915_private
>> *dev_priv)
>> {
>> }
>>
>> diff --git a/drivers/gpu/drm/i915/i915_driver.c
>> b/drivers/gpu/drm/i915/i915_driver.c
>> index 86460cd8167d1..53663c0cc3be4 100644
>> --- a/drivers/gpu/drm/i915/i915_driver.c
>> +++ b/drivers/gpu/drm/i915/i915_driver.c
>> @@ -817,6 +817,8 @@ int i915_driver_probe(struct pci_dev *pdev, const
>> struct pci_device_id *ent)
>>
>> i915->do_release = true;
>>
>> + intel_fbdev_setup(i915);
>> +
>> return 0;
>>
>> out_cleanup_gem:
>
--
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Frankenstrasse 146, 90461 Nuernberg, Germany
GF: Ivo Totev, Andrew Myers, Andrew McDonald, Boudien Moerman
HRB 36809 (AG Nuernberg)
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 840 bytes --]
next prev parent reply other threads:[~2023-11-01 8:33 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-09-27 10:26 [Intel-gfx] [PATCH v5 0/7] drm/i915: Convert fbdev to DRM client Thomas Zimmermann
2023-09-27 10:26 ` Thomas Zimmermann
2023-09-27 10:26 ` [Intel-gfx] [PATCH v5 1/7] drm/i915: Unregister in-kernel clients Thomas Zimmermann
2023-09-27 10:26 ` Thomas Zimmermann
2023-10-25 7:28 ` [Intel-gfx] " Hogander, Jouni
2023-09-27 10:26 ` [Intel-gfx] [PATCH v5 2/7] drm/client: Do not acquire module reference Thomas Zimmermann
2023-09-27 10:26 ` Thomas Zimmermann
2023-11-01 12:01 ` [Intel-gfx] " Javier Martinez Canillas
2023-11-01 12:01 ` Javier Martinez Canillas
2023-09-27 10:26 ` [Intel-gfx] [PATCH v5 3/7] drm/client: Export drm_client_dev_unregister() Thomas Zimmermann
2023-09-27 10:26 ` Thomas Zimmermann
2023-09-27 10:26 ` [Intel-gfx] [PATCH v5 4/7] drm/i915: Move fbdev functions Thomas Zimmermann
2023-09-27 10:26 ` Thomas Zimmermann
2023-10-25 7:49 ` [Intel-gfx] " Hogander, Jouni
2023-10-25 7:49 ` Hogander, Jouni
2023-09-27 10:26 ` [Intel-gfx] [PATCH v5 5/7] drm/i915: Initialize fbdev DRM client with callback functions Thomas Zimmermann
2023-09-27 10:26 ` Thomas Zimmermann
2023-10-25 8:36 ` [Intel-gfx] " Hogander, Jouni
2023-11-01 8:11 ` Thomas Zimmermann
2023-11-01 9:10 ` Hogander, Jouni
2023-11-01 9:32 ` Thomas Zimmermann
2023-09-27 10:26 ` [Intel-gfx] [PATCH v5 6/7] drm/i915: Implement fbdev client callbacks Thomas Zimmermann
2023-09-27 10:26 ` Thomas Zimmermann
2023-10-25 9:36 ` [Intel-gfx] " Hogander, Jouni
2023-11-01 8:26 ` Thomas Zimmermann
2023-09-27 10:26 ` [Intel-gfx] [PATCH v5 7/7] drm/i915: Implement fbdev emulation as in-kernel client Thomas Zimmermann
2023-09-27 10:26 ` Thomas Zimmermann
2023-10-25 11:36 ` [Intel-gfx] " Hogander, Jouni
2023-10-25 11:36 ` Hogander, Jouni
2023-11-01 8:33 ` Thomas Zimmermann [this message]
2023-11-01 8:33 ` Thomas Zimmermann
2023-11-01 9:25 ` [Intel-gfx] " Ville Syrjälä
2023-11-01 9:25 ` Ville Syrjälä
2023-11-01 9:35 ` [Intel-gfx] " Thomas Zimmermann
2023-11-01 9:35 ` Thomas Zimmermann
2023-09-27 18:52 ` [Intel-gfx] ✗ Fi.CI.SPARSE: warning for drm/i915: Convert fbdev to DRM client (rev5) Patchwork
2023-09-27 19:06 ` [Intel-gfx] ✓ Fi.CI.BAT: success " Patchwork
2023-09-28 7:32 ` [Intel-gfx] ✗ Fi.CI.IGT: failure " 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=99033596-d875-4cfe-9105-730a57cf6013@suse.de \
--to=tzimmermann@suse.de \
--cc=airlied@gmail.com \
--cc=daniel@ffwll.ch \
--cc=dri-devel@lists.freedesktop.org \
--cc=imre.deak@intel.com \
--cc=intel-gfx@lists.freedesktop.org \
--cc=jani.nikula@linux.intel.com \
--cc=javierm@redhat.com \
--cc=joonas.lahtinen@linux.intel.com \
--cc=jouni.hogander@intel.com \
--cc=rodrigo.vivi@intel.com \
--cc=tejas.upadhyay@intel.com \
--cc=tvrtko.ursulin@linux.intel.com \
--cc=ville.syrjala@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.