diff mbox series

[v2,2/3] drm/fb-helper: Set framebuffer for vga-switcheroo clients

Message ID 20230112201156.26849-3-tzimmermann@suse.de (mailing list archive)
State New, archived
Headers show
Series drm: Generic fbdev and vga-switcheroo | expand

Commit Message

Thomas Zimmermann Jan. 12, 2023, 8:11 p.m. UTC
Set the framebuffer info for drivers that support VGA switcheroo. Only
affects the amdgpu and nouveau drivers, which use VGA switcheroo and
generic fbdev emulation. For other drivers, this does nothing.

This fixes a potential regression in the console code. Both, amdgpu and
nouveau, invoked vga_switcheroo_client_fb_set() from their internal fbdev
code. But the call got lost when the drivers switched to the generic
emulation.

Fixes: 087451f372bf ("drm/amdgpu: use generic fb helpers instead of setting up AMD own's.")
Fixes: 4a16dd9d18a0 ("drm/nouveau/kms: switch to drm fbdev helpers")
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Cc: Ben Skeggs <bskeggs@redhat.com>
Cc: Karol Herbst <kherbst@redhat.com>
Cc: Lyude Paul <lyude@redhat.com>
Cc: Thomas Zimmermann <tzimmermann@suse.de>
Cc: Javier Martinez Canillas <javierm@redhat.com>
Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Cc: Jani Nikula <jani.nikula@intel.com>
Cc: Dave Airlie <airlied@redhat.com>
Cc: Evan Quan <evan.quan@amd.com>
Cc: Christian König <christian.koenig@amd.com>
Cc: Alex Deucher <alexander.deucher@amd.com>
Cc: Hawking Zhang <Hawking.Zhang@amd.com>
Cc: Likun Gao <Likun.Gao@amd.com>
Cc: "Christian König" <christian.koenig@amd.com>
Cc: Stanley Yang <Stanley.Yang@amd.com>
Cc: "Tianci.Yin" <tianci.yin@amd.com>
Cc: Xiaojian Du <Xiaojian.Du@amd.com>
Cc: Andrey Grodzovsky <andrey.grodzovsky@amd.com>
Cc: YiPeng Chai <YiPeng.Chai@amd.com>
Cc: Somalapuram Amaranath <Amaranath.Somalapuram@amd.com>
Cc: Bokun Zhang <Bokun.Zhang@amd.com>
Cc: Guchun Chen <guchun.chen@amd.com>
Cc: Hamza Mahfooz <hamza.mahfooz@amd.com>
Cc: Aurabindo Pillai <aurabindo.pillai@amd.com>
Cc: Mario Limonciello <mario.limonciello@amd.com>
Cc: Solomon Chiu <solomon.chiu@amd.com>
Cc: Kai-Heng Feng <kai.heng.feng@canonical.com>
Cc: Felix Kuehling <Felix.Kuehling@amd.com>
Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
Cc: "Marek Olšák" <marek.olsak@amd.com>
Cc: Sam Ravnborg <sam@ravnborg.org>
Cc: Hans de Goede <hdegoede@redhat.com>
Cc: "Ville Syrjälä" <ville.syrjala@linux.intel.com>
Cc: dri-devel@lists.freedesktop.org
Cc: nouveau@lists.freedesktop.org
Cc: <stable@vger.kernel.org> # v5.17+
---
 drivers/gpu/drm/drm_fb_helper.c | 8 ++++++++
 1 file changed, 8 insertions(+)

Comments

Rodrigo Vivi Jan. 18, 2023, 7:21 p.m. UTC | #1
On Thu, Jan 12, 2023 at 09:11:55PM +0100, Thomas Zimmermann wrote:
> Set the framebuffer info for drivers that support VGA switcheroo. Only
> affects the amdgpu and nouveau drivers, which use VGA switcheroo and
> generic fbdev emulation. For other drivers, this does nothing.
> 
> This fixes a potential regression in the console code. Both, amdgpu and
> nouveau, invoked vga_switcheroo_client_fb_set() from their internal fbdev
> code. But the call got lost when the drivers switched to the generic
> emulation.
> 
> Fixes: 087451f372bf ("drm/amdgpu: use generic fb helpers instead of setting up AMD own's.")
> Fixes: 4a16dd9d18a0 ("drm/nouveau/kms: switch to drm fbdev helpers")
> Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
> Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
> Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
> Cc: Ben Skeggs <bskeggs@redhat.com>
> Cc: Karol Herbst <kherbst@redhat.com>
> Cc: Lyude Paul <lyude@redhat.com>
> Cc: Thomas Zimmermann <tzimmermann@suse.de>
> Cc: Javier Martinez Canillas <javierm@redhat.com>
> Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> Cc: Jani Nikula <jani.nikula@intel.com>
> Cc: Dave Airlie <airlied@redhat.com>
> Cc: Evan Quan <evan.quan@amd.com>
> Cc: Christian König <christian.koenig@amd.com>
> Cc: Alex Deucher <alexander.deucher@amd.com>
> Cc: Hawking Zhang <Hawking.Zhang@amd.com>
> Cc: Likun Gao <Likun.Gao@amd.com>
> Cc: "Christian König" <christian.koenig@amd.com>
> Cc: Stanley Yang <Stanley.Yang@amd.com>
> Cc: "Tianci.Yin" <tianci.yin@amd.com>
> Cc: Xiaojian Du <Xiaojian.Du@amd.com>
> Cc: Andrey Grodzovsky <andrey.grodzovsky@amd.com>
> Cc: YiPeng Chai <YiPeng.Chai@amd.com>
> Cc: Somalapuram Amaranath <Amaranath.Somalapuram@amd.com>
> Cc: Bokun Zhang <Bokun.Zhang@amd.com>
> Cc: Guchun Chen <guchun.chen@amd.com>
> Cc: Hamza Mahfooz <hamza.mahfooz@amd.com>
> Cc: Aurabindo Pillai <aurabindo.pillai@amd.com>
> Cc: Mario Limonciello <mario.limonciello@amd.com>
> Cc: Solomon Chiu <solomon.chiu@amd.com>
> Cc: Kai-Heng Feng <kai.heng.feng@canonical.com>
> Cc: Felix Kuehling <Felix.Kuehling@amd.com>
> Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
> Cc: "Marek Olšák" <marek.olsak@amd.com>
> Cc: Sam Ravnborg <sam@ravnborg.org>
> Cc: Hans de Goede <hdegoede@redhat.com>
> Cc: "Ville Syrjälä" <ville.syrjala@linux.intel.com>
> Cc: dri-devel@lists.freedesktop.org
> Cc: nouveau@lists.freedesktop.org
> Cc: <stable@vger.kernel.org> # v5.17+
> ---
>  drivers/gpu/drm/drm_fb_helper.c | 8 ++++++++
>  1 file changed, 8 insertions(+)
> 
> diff --git a/drivers/gpu/drm/drm_fb_helper.c b/drivers/gpu/drm/drm_fb_helper.c
> index 427631706128..5e445c61252d 100644
> --- a/drivers/gpu/drm/drm_fb_helper.c
> +++ b/drivers/gpu/drm/drm_fb_helper.c
> @@ -30,7 +30,9 @@
>  #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
>  
>  #include <linux/console.h>
> +#include <linux/pci.h>
>  #include <linux/sysrq.h>
> +#include <linux/vga_switcheroo.h>
>  
>  #include <drm/drm_atomic.h>
>  #include <drm/drm_drv.h>
> @@ -1940,6 +1942,7 @@ static int drm_fb_helper_single_fb_probe(struct drm_fb_helper *fb_helper,
>  					 int preferred_bpp)
>  {
>  	struct drm_client_dev *client = &fb_helper->client;
> +	struct drm_device *dev = fb_helper->dev;

On drm-tip, this commit has a silent conflict with
cff84bac9922 ("drm/fh-helper: Split fbdev single-probe helper")
that's already in drm-next.

I had created a fix-up patch in drm-tip re-introducing this line.

We probably need a backmerge from drm-next into drm-misc-fixes with
the resolution applied there. And probably propagated that resolution
later...

>  	struct drm_fb_helper_surface_size sizes;
>  	int ret;
>  
> @@ -1961,6 +1964,11 @@ static int drm_fb_helper_single_fb_probe(struct drm_fb_helper *fb_helper,
>  		return ret;
>  
>  	strcpy(fb_helper->fb->comm, "[fbcon]");
> +
> +	/* Set the fb info for vgaswitcheroo clients. Does nothing otherwise. */
> +	if (dev_is_pci(dev->dev))
> +		vga_switcheroo_client_fb_set(to_pci_dev(dev->dev), fb_helper->info);
> +
>  	return 0;
>  }
>  
> -- 
> 2.39.0
>
Thomas Zimmermann Jan. 19, 2023, 8:06 a.m. UTC | #2
Hi

Am 18.01.23 um 20:21 schrieb Rodrigo Vivi:
> On Thu, Jan 12, 2023 at 09:11:55PM +0100, Thomas Zimmermann wrote:
>> Set the framebuffer info for drivers that support VGA switcheroo. Only
>> affects the amdgpu and nouveau drivers, which use VGA switcheroo and
>> generic fbdev emulation. For other drivers, this does nothing.
>>
>> This fixes a potential regression in the console code. Both, amdgpu and
>> nouveau, invoked vga_switcheroo_client_fb_set() from their internal fbdev
>> code. But the call got lost when the drivers switched to the generic
>> emulation.
>>
>> Fixes: 087451f372bf ("drm/amdgpu: use generic fb helpers instead of setting up AMD own's.")
>> Fixes: 4a16dd9d18a0 ("drm/nouveau/kms: switch to drm fbdev helpers")
>> Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
>> Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
>> Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
>> Cc: Ben Skeggs <bskeggs@redhat.com>
>> Cc: Karol Herbst <kherbst@redhat.com>
>> Cc: Lyude Paul <lyude@redhat.com>
>> Cc: Thomas Zimmermann <tzimmermann@suse.de>
>> Cc: Javier Martinez Canillas <javierm@redhat.com>
>> Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
>> Cc: Jani Nikula <jani.nikula@intel.com>
>> Cc: Dave Airlie <airlied@redhat.com>
>> Cc: Evan Quan <evan.quan@amd.com>
>> Cc: Christian König <christian.koenig@amd.com>
>> Cc: Alex Deucher <alexander.deucher@amd.com>
>> Cc: Hawking Zhang <Hawking.Zhang@amd.com>
>> Cc: Likun Gao <Likun.Gao@amd.com>
>> Cc: "Christian König" <christian.koenig@amd.com>
>> Cc: Stanley Yang <Stanley.Yang@amd.com>
>> Cc: "Tianci.Yin" <tianci.yin@amd.com>
>> Cc: Xiaojian Du <Xiaojian.Du@amd.com>
>> Cc: Andrey Grodzovsky <andrey.grodzovsky@amd.com>
>> Cc: YiPeng Chai <YiPeng.Chai@amd.com>
>> Cc: Somalapuram Amaranath <Amaranath.Somalapuram@amd.com>
>> Cc: Bokun Zhang <Bokun.Zhang@amd.com>
>> Cc: Guchun Chen <guchun.chen@amd.com>
>> Cc: Hamza Mahfooz <hamza.mahfooz@amd.com>
>> Cc: Aurabindo Pillai <aurabindo.pillai@amd.com>
>> Cc: Mario Limonciello <mario.limonciello@amd.com>
>> Cc: Solomon Chiu <solomon.chiu@amd.com>
>> Cc: Kai-Heng Feng <kai.heng.feng@canonical.com>
>> Cc: Felix Kuehling <Felix.Kuehling@amd.com>
>> Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
>> Cc: "Marek Olšák" <marek.olsak@amd.com>
>> Cc: Sam Ravnborg <sam@ravnborg.org>
>> Cc: Hans de Goede <hdegoede@redhat.com>
>> Cc: "Ville Syrjälä" <ville.syrjala@linux.intel.com>
>> Cc: dri-devel@lists.freedesktop.org
>> Cc: nouveau@lists.freedesktop.org
>> Cc: <stable@vger.kernel.org> # v5.17+
>> ---
>>   drivers/gpu/drm/drm_fb_helper.c | 8 ++++++++
>>   1 file changed, 8 insertions(+)
>>
>> diff --git a/drivers/gpu/drm/drm_fb_helper.c b/drivers/gpu/drm/drm_fb_helper.c
>> index 427631706128..5e445c61252d 100644
>> --- a/drivers/gpu/drm/drm_fb_helper.c
>> +++ b/drivers/gpu/drm/drm_fb_helper.c
>> @@ -30,7 +30,9 @@
>>   #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
>>   
>>   #include <linux/console.h>
>> +#include <linux/pci.h>
>>   #include <linux/sysrq.h>
>> +#include <linux/vga_switcheroo.h>
>>   
>>   #include <drm/drm_atomic.h>
>>   #include <drm/drm_drv.h>
>> @@ -1940,6 +1942,7 @@ static int drm_fb_helper_single_fb_probe(struct drm_fb_helper *fb_helper,
>>   					 int preferred_bpp)
>>   {
>>   	struct drm_client_dev *client = &fb_helper->client;
>> +	struct drm_device *dev = fb_helper->dev;
> 
> On drm-tip, this commit has a silent conflict with
> cff84bac9922 ("drm/fh-helper: Split fbdev single-probe helper")
> that's already in drm-next.
> 
> I had created a fix-up patch in drm-tip re-introducing this line.

Thank you. Is it fixed for now?

> 
> We probably need a backmerge from drm-next into drm-misc-fixes with
> the resolution applied there. And probably propagated that resolution
> later...

Backmerging from -next into -fixes branches is a problem, as -fixes 
should be close to the latest release.

Can we solve this by merging -fixes into upstream and backmerging this 
into our -next branches?

Best regards
Thomas

> 
>>   	struct drm_fb_helper_surface_size sizes;
>>   	int ret;
>>   
>> @@ -1961,6 +1964,11 @@ static int drm_fb_helper_single_fb_probe(struct drm_fb_helper *fb_helper,
>>   		return ret;
>>   
>>   	strcpy(fb_helper->fb->comm, "[fbcon]");
>> +
>> +	/* Set the fb info for vgaswitcheroo clients. Does nothing otherwise. */
>> +	if (dev_is_pci(dev->dev))
>> +		vga_switcheroo_client_fb_set(to_pci_dev(dev->dev), fb_helper->info);
>> +
>>   	return 0;
>>   }
>>   
>> -- 
>> 2.39.0
>>
Rodrigo Vivi Jan. 19, 2023, 10:10 p.m. UTC | #3
On Thu, Jan 19, 2023 at 09:06:54AM +0100, Thomas Zimmermann wrote:
> Hi
> 
> Am 18.01.23 um 20:21 schrieb Rodrigo Vivi:
> > On Thu, Jan 12, 2023 at 09:11:55PM +0100, Thomas Zimmermann wrote:
> > > Set the framebuffer info for drivers that support VGA switcheroo. Only
> > > affects the amdgpu and nouveau drivers, which use VGA switcheroo and
> > > generic fbdev emulation. For other drivers, this does nothing.
> > > 
> > > This fixes a potential regression in the console code. Both, amdgpu and
> > > nouveau, invoked vga_switcheroo_client_fb_set() from their internal fbdev
> > > code. But the call got lost when the drivers switched to the generic
> > > emulation.
> > > 
> > > Fixes: 087451f372bf ("drm/amdgpu: use generic fb helpers instead of setting up AMD own's.")
> > > Fixes: 4a16dd9d18a0 ("drm/nouveau/kms: switch to drm fbdev helpers")
> > > Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
> > > Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
> > > Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
> > > Cc: Ben Skeggs <bskeggs@redhat.com>
> > > Cc: Karol Herbst <kherbst@redhat.com>
> > > Cc: Lyude Paul <lyude@redhat.com>
> > > Cc: Thomas Zimmermann <tzimmermann@suse.de>
> > > Cc: Javier Martinez Canillas <javierm@redhat.com>
> > > Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> > > Cc: Jani Nikula <jani.nikula@intel.com>
> > > Cc: Dave Airlie <airlied@redhat.com>
> > > Cc: Evan Quan <evan.quan@amd.com>
> > > Cc: Christian König <christian.koenig@amd.com>
> > > Cc: Alex Deucher <alexander.deucher@amd.com>
> > > Cc: Hawking Zhang <Hawking.Zhang@amd.com>
> > > Cc: Likun Gao <Likun.Gao@amd.com>
> > > Cc: "Christian König" <christian.koenig@amd.com>
> > > Cc: Stanley Yang <Stanley.Yang@amd.com>
> > > Cc: "Tianci.Yin" <tianci.yin@amd.com>
> > > Cc: Xiaojian Du <Xiaojian.Du@amd.com>
> > > Cc: Andrey Grodzovsky <andrey.grodzovsky@amd.com>
> > > Cc: YiPeng Chai <YiPeng.Chai@amd.com>
> > > Cc: Somalapuram Amaranath <Amaranath.Somalapuram@amd.com>
> > > Cc: Bokun Zhang <Bokun.Zhang@amd.com>
> > > Cc: Guchun Chen <guchun.chen@amd.com>
> > > Cc: Hamza Mahfooz <hamza.mahfooz@amd.com>
> > > Cc: Aurabindo Pillai <aurabindo.pillai@amd.com>
> > > Cc: Mario Limonciello <mario.limonciello@amd.com>
> > > Cc: Solomon Chiu <solomon.chiu@amd.com>
> > > Cc: Kai-Heng Feng <kai.heng.feng@canonical.com>
> > > Cc: Felix Kuehling <Felix.Kuehling@amd.com>
> > > Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
> > > Cc: "Marek Olšák" <marek.olsak@amd.com>
> > > Cc: Sam Ravnborg <sam@ravnborg.org>
> > > Cc: Hans de Goede <hdegoede@redhat.com>
> > > Cc: "Ville Syrjälä" <ville.syrjala@linux.intel.com>
> > > Cc: dri-devel@lists.freedesktop.org
> > > Cc: nouveau@lists.freedesktop.org
> > > Cc: <stable@vger.kernel.org> # v5.17+
> > > ---
> > >   drivers/gpu/drm/drm_fb_helper.c | 8 ++++++++
> > >   1 file changed, 8 insertions(+)
> > > 
> > > diff --git a/drivers/gpu/drm/drm_fb_helper.c b/drivers/gpu/drm/drm_fb_helper.c
> > > index 427631706128..5e445c61252d 100644
> > > --- a/drivers/gpu/drm/drm_fb_helper.c
> > > +++ b/drivers/gpu/drm/drm_fb_helper.c
> > > @@ -30,7 +30,9 @@
> > >   #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
> > >   #include <linux/console.h>
> > > +#include <linux/pci.h>
> > >   #include <linux/sysrq.h>
> > > +#include <linux/vga_switcheroo.h>
> > >   #include <drm/drm_atomic.h>
> > >   #include <drm/drm_drv.h>
> > > @@ -1940,6 +1942,7 @@ static int drm_fb_helper_single_fb_probe(struct drm_fb_helper *fb_helper,
> > >   					 int preferred_bpp)
> > >   {
> > >   	struct drm_client_dev *client = &fb_helper->client;
> > > +	struct drm_device *dev = fb_helper->dev;
> > 
> > On drm-tip, this commit has a silent conflict with
> > cff84bac9922 ("drm/fh-helper: Split fbdev single-probe helper")
> > that's already in drm-next.
> > 
> > I had created a fix-up patch in drm-tip re-introducing this line.
> 
> Thank you. Is it fixed for now?

Fixed in drm-tip, yes. But broke linux-next as well. This
resolution will need to go up with any merge...

> 
> > 
> > We probably need a backmerge from drm-next into drm-misc-fixes with
> > the resolution applied there. And probably propagated that resolution
> > later...
> 
> Backmerging from -next into -fixes branches is a problem, as -fixes should
> be close to the latest release.

doh! Indeed I should've known this by heart... -ENOTEHOUGHCOFFEE

> 
> Can we solve this by merging -fixes into upstream and backmerging this into
> our -next branches?

hmmm... probably better just wait and let folks know the resolution
when the patches are moving up...

> 
> Best regards
> Thomas
> 
> > 
> > >   	struct drm_fb_helper_surface_size sizes;
> > >   	int ret;
> > > @@ -1961,6 +1964,11 @@ static int drm_fb_helper_single_fb_probe(struct drm_fb_helper *fb_helper,
> > >   		return ret;
> > >   	strcpy(fb_helper->fb->comm, "[fbcon]");
> > > +
> > > +	/* Set the fb info for vgaswitcheroo clients. Does nothing otherwise. */
> > > +	if (dev_is_pci(dev->dev))
> > > +		vga_switcheroo_client_fb_set(to_pci_dev(dev->dev), fb_helper->info);
> > > +
> > >   	return 0;
> > >   }
> > > -- 
> > > 2.39.0
> > > 
> 
> -- 
> Thomas Zimmermann
> Graphics Driver Developer
> SUSE Software Solutions Germany GmbH
> Maxfeldstr. 5, 90409 Nürnberg, Germany
> (HRB 36809, AG Nürnberg)
> Geschäftsführer: Ivo Totev
diff mbox series

Patch

diff --git a/drivers/gpu/drm/drm_fb_helper.c b/drivers/gpu/drm/drm_fb_helper.c
index 427631706128..5e445c61252d 100644
--- a/drivers/gpu/drm/drm_fb_helper.c
+++ b/drivers/gpu/drm/drm_fb_helper.c
@@ -30,7 +30,9 @@ 
 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
 
 #include <linux/console.h>
+#include <linux/pci.h>
 #include <linux/sysrq.h>
+#include <linux/vga_switcheroo.h>
 
 #include <drm/drm_atomic.h>
 #include <drm/drm_drv.h>
@@ -1940,6 +1942,7 @@  static int drm_fb_helper_single_fb_probe(struct drm_fb_helper *fb_helper,
 					 int preferred_bpp)
 {
 	struct drm_client_dev *client = &fb_helper->client;
+	struct drm_device *dev = fb_helper->dev;
 	struct drm_fb_helper_surface_size sizes;
 	int ret;
 
@@ -1961,6 +1964,11 @@  static int drm_fb_helper_single_fb_probe(struct drm_fb_helper *fb_helper,
 		return ret;
 
 	strcpy(fb_helper->fb->comm, "[fbcon]");
+
+	/* Set the fb info for vgaswitcheroo clients. Does nothing otherwise. */
+	if (dev_is_pci(dev->dev))
+		vga_switcheroo_client_fb_set(to_pci_dev(dev->dev), fb_helper->info);
+
 	return 0;
 }