Problem: qxl switches from native mode back into vga compatibility mode when it notices someone is accessing vga registers. And vgacon does exactly that before fbcon takes over. So make sure we kick out vgacon early enough that it wouldn't disturb us. Signed-off-by: Gerd Hoffmann <kraxel at redhat.com> --- drivers/gpu/drm/qxl/qxl_drv.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/gpu/drm/qxl/qxl_drv.c b/drivers/gpu/drm/qxl/qxl_drv.c index bb81e310eb..08446561aa 100644 --- a/drivers/gpu/drm/qxl/qxl_drv.c +++ b/drivers/gpu/drm/qxl/qxl_drv.c @@ -95,6 +95,7 @@ qxl_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent) goto modeset_cleanup; drm_fb_helper_remove_conflicting_pci_framebuffers(pdev, 0, "qxl"); + drm_fb_helper_kick_out_vgacon(); drm_fbdev_generic_setup(&qdev->ddev, 32); return 0; -- 2.9.3
On Thu, Feb 21, 2019 at 12:35:34PM +0100, Gerd Hoffmann wrote:> Problem: qxl switches from native mode back into vga compatibility mode > when it notices someone is accessing vga registers. And vgacon does > exactly that before fbcon takes over. So make sure we kick out vgacon > early enough that it wouldn't disturb us. > > Signed-off-by: Gerd Hoffmann <kraxel at redhat.com> > --- > drivers/gpu/drm/qxl/qxl_drv.c | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/drivers/gpu/drm/qxl/qxl_drv.c b/drivers/gpu/drm/qxl/qxl_drv.c > index bb81e310eb..08446561aa 100644 > --- a/drivers/gpu/drm/qxl/qxl_drv.c > +++ b/drivers/gpu/drm/qxl/qxl_drv.c > @@ -95,6 +95,7 @@ qxl_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent) > goto modeset_cleanup; > > drm_fb_helper_remove_conflicting_pci_framebuffers(pdev, 0, "qxl"); > + drm_fb_helper_kick_out_vgacon();I was thinking of checking whether pdev is a VGA class device and whether it decodes vga access, and in that case automatically calling kick_out_vgacon from remove_conflicting_pci_framebuffer. Since that's what drivers want anyway, and those who don't can open code it. Or is there an issue with that? -Daniel> drm_fbdev_generic_setup(&qdev->ddev, 32); > return 0; > > -- > 2.9.3 >-- Daniel Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch
On Thu, Feb 21, 2019 at 01:20:11PM +0100, Daniel Vetter wrote:> On Thu, Feb 21, 2019 at 12:35:34PM +0100, Gerd Hoffmann wrote: > > Problem: qxl switches from native mode back into vga compatibility mode > > when it notices someone is accessing vga registers. And vgacon does > > exactly that before fbcon takes over. So make sure we kick out vgacon > > early enough that it wouldn't disturb us. > > > > Signed-off-by: Gerd Hoffmann <kraxel at redhat.com> > > --- > > drivers/gpu/drm/qxl/qxl_drv.c | 1 + > > 1 file changed, 1 insertion(+) > > > > diff --git a/drivers/gpu/drm/qxl/qxl_drv.c b/drivers/gpu/drm/qxl/qxl_drv.c > > index bb81e310eb..08446561aa 100644 > > --- a/drivers/gpu/drm/qxl/qxl_drv.c > > +++ b/drivers/gpu/drm/qxl/qxl_drv.c > > @@ -95,6 +95,7 @@ qxl_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent) > > goto modeset_cleanup; > > > > drm_fb_helper_remove_conflicting_pci_framebuffers(pdev, 0, "qxl"); > > + drm_fb_helper_kick_out_vgacon(); > > I was thinking of checking whether pdev is a VGA class device and whether > it decodes vga access, and in that case automatically calling > kick_out_vgacon from remove_conflicting_pci_framebuffer. Since that's what > drivers want anyway, and those who don't can open code it. > > Or is there an issue with that?It'll need more careful testing to make sure we don't have unwanted side effects when just doing it for everyone. And I guess most drivers don't care much because their hardware ignores vga port writes once they are switched out of vga text mode. Dunno why i915 needs this. In case of qxl it is more a historical leftover. The very first qxl device revision had no explicit qxl command to switch from qxl native mode back to vga compatibility mode, vga port access was used for that instead. It's long fixed, but the qxl device still has that quirk for compatibility with very old guest drivers. cheers, Gerd
Hi,> I was thinking of checking whether pdev is a VGA class device and whether > it decodes vga access, and in that case automatically callingHow can I figure that? Ok, class is easy, but decode? pci.h offers functions to set vga decode but not to get that info ... thanks, Gerd