All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH v3] pciinit: Enable default VGA device
@ 2013-03-20 16:58 Alex Williamson
  2013-03-20 18:05 ` [Qemu-devel] [SeaBIOS] " Paul Menzel
                   ` (2 more replies)
  0 siblings, 3 replies; 5+ messages in thread
From: Alex Williamson @ 2013-03-20 16:58 UTC (permalink / raw)
  To: kevin, seabios; +Cc: qemu-devel, kraxel

As QEMU gains PCI bridge and PCIe root port support, we won't always
find the VGA device on the root bus.  We therefore need to add support
to find and enable a VGA device and the path to it through the VGA
Enable support in the PCI bridge control register.

Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
---

v3: use pci_config_maskw() to trim out some code
v2: move to qemu specific pciinit.c

 src/optionroms.c |    2 +-
 src/pciinit.c    |   40 ++++++++++++++++++++++++++++++++++++++++
 src/util.h       |    1 +
 3 files changed, 42 insertions(+), 1 deletion(-)

diff --git a/src/optionroms.c b/src/optionroms.c
index caa2151..ac92613 100644
--- a/src/optionroms.c
+++ b/src/optionroms.c
@@ -213,7 +213,7 @@ run_file_roms(const char *prefix, int isvga, u64 *sources)
  ****************************************************************/
 
 // Verify device is a vga device with legacy address decoding enabled.
-static int
+int
 is_pci_vga(struct pci_device *pci)
 {
     if (pci->class != PCI_CLASS_DISPLAY_VGA)
diff --git a/src/pciinit.c b/src/pciinit.c
index ce0a4cc..bb9355f 100644
--- a/src/pciinit.c
+++ b/src/pciinit.c
@@ -316,6 +316,44 @@ static void pci_bios_init_devices(void)
     }
 }
 
+static void pci_enable_default_vga(void)
+{
+    struct pci_device *pci;
+
+    foreachpci(pci) {
+        if (is_pci_vga(pci)) {
+            dprintf(1, "PCI: Using %02x:%02x.%x for primary VGA\n",
+                    pci_bdf_to_bus(pci->bdf), pci_bdf_to_dev(pci->bdf),
+                    pci_bdf_to_fn(pci->bdf));
+            return;
+        }
+    }
+
+    pci = pci_find_class(PCI_CLASS_DISPLAY_VGA);
+    if (!pci) {
+        dprintf(1, "PCI: No VGA devices found\n");
+        return;
+    }
+
+    dprintf(1, "PCI: Enabling %02x:%02x.%x for primary VGA\n",
+            pci_bdf_to_bus(pci->bdf), pci_bdf_to_dev(pci->bdf),
+            pci_bdf_to_fn(pci->bdf));
+
+    pci_config_maskw(pci->bdf, PCI_COMMAND, 0,
+                     PCI_COMMAND_IO | PCI_COMMAND_MEMORY);
+
+    while (pci->parent) {
+        pci = pci->parent;
+
+        dprintf(1, "PCI: Setting VGA enable on bridge %02x:%02x.%x\n",
+                pci_bdf_to_bus(pci->bdf), pci_bdf_to_dev(pci->bdf),
+                pci_bdf_to_fn(pci->bdf));
+
+        pci_config_maskw(pci->bdf, PCI_BRIDGE_CONTROL, 0, PCI_BRIDGE_CTL_VGA);
+        pci_config_maskw(pci->bdf, PCI_COMMAND, 0,
+                         PCI_COMMAND_IO | PCI_COMMAND_MEMORY);
+    }
+}
 
 /****************************************************************
  * Platform device initialization
@@ -804,4 +842,6 @@ pci_setup(void)
     pci_bios_init_devices();
 
     free(busses);
+
+    pci_enable_default_vga();
 }
diff --git a/src/util.h b/src/util.h
index af029fc..99aff78 100644
--- a/src/util.h
+++ b/src/util.h
@@ -344,6 +344,7 @@ void vgahook_setup(struct pci_device *pci);
 
 // optionroms.c
 void call_bcv(u16 seg, u16 ip);
+int is_pci_vga(struct pci_device *pci);
 void optionrom_setup(void);
 void vgarom_setup(void);
 void s3_resume_vga(void);

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [Qemu-devel] [SeaBIOS] [PATCH v3] pciinit: Enable default VGA device
  2013-03-20 16:58 [Qemu-devel] [PATCH v3] pciinit: Enable default VGA device Alex Williamson
@ 2013-03-20 18:05 ` Paul Menzel
  2013-03-20 18:18   ` Alex Williamson
  2013-03-21  6:49 ` [Qemu-devel] " Gerd Hoffmann
  2013-03-23  0:50 ` Kevin O'Connor
  2 siblings, 1 reply; 5+ messages in thread
From: Paul Menzel @ 2013-03-20 18:05 UTC (permalink / raw)
  To: Alex Williamson; +Cc: kevin, seabios, qemu-devel, kraxel

[-- Attachment #1: Type: text/plain, Size: 2112 bytes --]

Dear Alex,


Am Mittwoch, den 20.03.2013, 10:58 -0600 schrieb Alex Williamson:
> As QEMU gains PCI bridge and PCIe root port support,

could you give a commit or version for QEMU please.

> we won't always find the VGA device on the root bus.  We therefore
> need to add support to find and enable a VGA device and the path to it
> through the VGA Enable support in the PCI bridge control register.

Just to be sure, did you test this with older QEMU too?

> Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
> ---
> 
> v3: use pci_config_maskw() to trim out some code
> v2: move to qemu specific pciinit.c
> 
>  src/optionroms.c |    2 +-
>  src/pciinit.c    |   40 ++++++++++++++++++++++++++++++++++++++++
>  src/util.h       |    1 +
>  3 files changed, 42 insertions(+), 1 deletion(-)
> 
> diff --git a/src/optionroms.c b/src/optionroms.c
> index caa2151..ac92613 100644
> --- a/src/optionroms.c
> +++ b/src/optionroms.c
> @@ -213,7 +213,7 @@ run_file_roms(const char *prefix, int isvga, u64 *sources)
>   ****************************************************************/
>  
>  // Verify device is a vga device with legacy address decoding enabled.
> -static int
> +int
>  is_pci_vga(struct pci_device *pci)
>  {
>      if (pci->class != PCI_CLASS_DISPLAY_VGA)
> diff --git a/src/pciinit.c b/src/pciinit.c
> index ce0a4cc..bb9355f 100644
> --- a/src/pciinit.c
> +++ b/src/pciinit.c
> @@ -316,6 +316,44 @@ static void pci_bios_init_devices(void)
>      }
>  }
>  
> +static void pci_enable_default_vga(void)
> +{
> +    struct pci_device *pci;
> +
> +    foreachpci(pci) {
> +        if (is_pci_vga(pci)) {
> +            dprintf(1, "PCI: Using %02x:%02x.%x for primary VGA\n",
> +                    pci_bdf_to_bus(pci->bdf), pci_bdf_to_dev(pci->bdf),
> +                    pci_bdf_to_fn(pci->bdf));

As this is used several times, a function returning a string with %02x:%
02x.%x would be handy.

> +            return;
> +        }
> +    }

[…]

Acked-by: Paul Menzel <paulepanter@users.sourceforge.net>


Thahks,

Paul

[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 198 bytes --]

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [Qemu-devel] [SeaBIOS] [PATCH v3] pciinit: Enable default VGA device
  2013-03-20 18:05 ` [Qemu-devel] [SeaBIOS] " Paul Menzel
@ 2013-03-20 18:18   ` Alex Williamson
  0 siblings, 0 replies; 5+ messages in thread
From: Alex Williamson @ 2013-03-20 18:18 UTC (permalink / raw)
  To: Paul Menzel; +Cc: kevin, seabios, qemu-devel, kraxel

On Wed, 2013-03-20 at 19:05 +0100, Paul Menzel wrote:
> Dear Alex,
> 
> 
> Am Mittwoch, den 20.03.2013, 10:58 -0600 schrieb Alex Williamson:
> > As QEMU gains PCI bridge and PCIe root port support,
> 
> could you give a commit or version for QEMU please.

This would be targeted towards QEMU 1.5.  Michael recently sent a pull
request with this patch to enable VGA routing in bridges:

https://git.kernel.org/cgit/virt/kvm/mst/qemu.git/commit/?h=pci&id=e475aeac3e2e7f6632c3ea7e83f4431c0ba3a467

It's difficult to make use of without an assigned VGA device, which I
plan to start posting soon.

> > we won't always find the VGA device on the root bus.  We therefore
> > need to add support to find and enable a VGA device and the path to it
> > through the VGA Enable support in the PCI bridge control register.
> 
> Just to be sure, did you test this with older QEMU too?

Yes, it works with the QEMU 1.2.x shipped in F18.  Any existing QEMU
configuration is going to have the VGA device on the host bridge and
therefore bail out on the first loop, having done nothing other than add
a debug print.

> > Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
> > ---
> > 
> > v3: use pci_config_maskw() to trim out some code
> > v2: move to qemu specific pciinit.c
> > 
> >  src/optionroms.c |    2 +-
> >  src/pciinit.c    |   40 ++++++++++++++++++++++++++++++++++++++++
> >  src/util.h       |    1 +
> >  3 files changed, 42 insertions(+), 1 deletion(-)
> > 
> > diff --git a/src/optionroms.c b/src/optionroms.c
> > index caa2151..ac92613 100644
> > --- a/src/optionroms.c
> > +++ b/src/optionroms.c
> > @@ -213,7 +213,7 @@ run_file_roms(const char *prefix, int isvga, u64 *sources)
> >   ****************************************************************/
> >  
> >  // Verify device is a vga device with legacy address decoding enabled.
> > -static int
> > +int
> >  is_pci_vga(struct pci_device *pci)
> >  {
> >      if (pci->class != PCI_CLASS_DISPLAY_VGA)
> > diff --git a/src/pciinit.c b/src/pciinit.c
> > index ce0a4cc..bb9355f 100644
> > --- a/src/pciinit.c
> > +++ b/src/pciinit.c
> > @@ -316,6 +316,44 @@ static void pci_bios_init_devices(void)
> >      }
> >  }
> >  
> > +static void pci_enable_default_vga(void)
> > +{
> > +    struct pci_device *pci;
> > +
> > +    foreachpci(pci) {
> > +        if (is_pci_vga(pci)) {
> > +            dprintf(1, "PCI: Using %02x:%02x.%x for primary VGA\n",
> > +                    pci_bdf_to_bus(pci->bdf), pci_bdf_to_dev(pci->bdf),
> > +                    pci_bdf_to_fn(pci->bdf));
> 
> As this is used several times, a function returning a string with %02x:%
> 02x.%x would be handy.
> 
> > +            return;
> > +        }
> > +    }
> 
> […]
> 
> Acked-by: Paul Menzel <paulepanter@users.sourceforge.net>

Thanks!

Alex

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [Qemu-devel] [PATCH v3] pciinit: Enable default VGA device
  2013-03-20 16:58 [Qemu-devel] [PATCH v3] pciinit: Enable default VGA device Alex Williamson
  2013-03-20 18:05 ` [Qemu-devel] [SeaBIOS] " Paul Menzel
@ 2013-03-21  6:49 ` Gerd Hoffmann
  2013-03-23  0:50 ` Kevin O'Connor
  2 siblings, 0 replies; 5+ messages in thread
From: Gerd Hoffmann @ 2013-03-21  6:49 UTC (permalink / raw)
  To: Alex Williamson; +Cc: kevin, seabios, qemu-devel

On 03/20/13 17:58, Alex Williamson wrote:
> As QEMU gains PCI bridge and PCIe root port support, we won't always
> find the VGA device on the root bus.  We therefore need to add support
> to find and enable a VGA device and the path to it through the VGA
> Enable support in the PCI bridge control register.
> 
> Signed-off-by: Alex Williamson <alex.williamson@redhat.com>

Looks good to me.

cheers,
  Gerd

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [Qemu-devel] [PATCH v3] pciinit: Enable default VGA device
  2013-03-20 16:58 [Qemu-devel] [PATCH v3] pciinit: Enable default VGA device Alex Williamson
  2013-03-20 18:05 ` [Qemu-devel] [SeaBIOS] " Paul Menzel
  2013-03-21  6:49 ` [Qemu-devel] " Gerd Hoffmann
@ 2013-03-23  0:50 ` Kevin O'Connor
  2 siblings, 0 replies; 5+ messages in thread
From: Kevin O'Connor @ 2013-03-23  0:50 UTC (permalink / raw)
  To: Alex Williamson; +Cc: seabios, qemu-devel, kraxel

On Wed, Mar 20, 2013 at 10:58:47AM -0600, Alex Williamson wrote:
> As QEMU gains PCI bridge and PCIe root port support, we won't always
> find the VGA device on the root bus.  We therefore need to add support
> to find and enable a VGA device and the path to it through the VGA
> Enable support in the PCI bridge control register.
> 
> Signed-off-by: Alex Williamson <alex.williamson@redhat.com>

Thanks.  I pushed this change.

-Kevin

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2013-03-23  0:50 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-03-20 16:58 [Qemu-devel] [PATCH v3] pciinit: Enable default VGA device Alex Williamson
2013-03-20 18:05 ` [Qemu-devel] [SeaBIOS] " Paul Menzel
2013-03-20 18:18   ` Alex Williamson
2013-03-21  6:49 ` [Qemu-devel] " Gerd Hoffmann
2013-03-23  0:50 ` Kevin O'Connor

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.