All of lore.kernel.org
 help / color / mirror / Atom feed
From: David Gibson <david@gibson.dropbear.id.au>
To: "Cédric Le Goater" <clg@kaod.org>
Cc: qemu-ppc@nongnu.org, qemu-devel@nongnu.org,
	Benjamin Herrenschmidt <benh@kernel.crashing.org>,
	Marcel Apfelbaum <marcel@redhat.com>,
	"Michael S. Tsirkin" <mst@redhat.com>
Subject: Re: [Qemu-devel] [PATCH 21/21] ppc/pnv: Create a default PCI layout
Date: Mon, 10 Apr 2017 18:16:46 +1000	[thread overview]
Message-ID: <20170410081646.GT27571@umbus> (raw)
In-Reply-To: <1491396106-26376-22-git-send-email-clg@kaod.org>

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

On Wed, Apr 05, 2017 at 02:41:46PM +0200, Cédric Le Goater wrote:
> From: Benjamin Herrenschmidt <benh@kernel.crashing.org>
> 
> This creates a legacy PCIe->PCI bridge under the PHB by default to which
> a bunch of standard devices are attached. Currently:
> 
>   - VGA (as specified by -vga)
>   - USB (with keyboard and mouse if graphcis is enabled)
>   - AHCI
>   - e1000
> 
> This gives us something close to a standard OpenPower platform.
> 
> Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
> [clg: updated for qemu-2.9
>       reworked pnv_create_pci_legacy_bridge() ]
> Signed-off-by: Cédric Le Goater <clg@kaod.org>

Reviewed-by: David Gibson <david@gibson.dropbear.id.au>

Apart from one nit below.

> ---
>  hw/ppc/pnv.c | 111 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 111 insertions(+)
> 
> diff --git a/hw/ppc/pnv.c b/hw/ppc/pnv.c
> index db6e078edcea..766e6cf4bc12 100644
> --- a/hw/ppc/pnv.c
> +++ b/hw/ppc/pnv.c
> @@ -48,6 +48,10 @@
>  #include "hw/pci/pci_bridge.h"
>  #include "hw/pci/msi.h"
>  #include "hw/pci-host/pnv_phb3.h"
> +#include "hw/usb.h"
> +#include "hw/ide/pci.h"
> +#include "hw/ide/ahci.h"
> +#include "net/net.h"
>  
>  #include <libfdt.h>
>  
> @@ -573,6 +577,87 @@ static ISABus *pnv_isa_create(PnvChip *chip)
>      return isa_bus;
>  }
>  
> +
> +/* Returns whether we want to use VGA or not */
> +static int pnv_vga_init(PCIBus *pci_bus)
> +{
> +    switch (vga_interface_type) {
> +    case VGA_NONE:
> +        return false;
> +    case VGA_DEVICE:
> +        return true;
> +    case VGA_STD:
> +    case VGA_VIRTIO:
> +        return pci_vga_init(pci_bus) != NULL;
> +    default:
> +        fprintf(stderr, "This vga model is not supported,"
> +                "currently it only supports -vga std\n");

This message doesn't appear to be entirely accurate, since virtio-vga
is apparently supported above as well.  Also this should probably be
an error_report().

> +        exit(0);
> +    }
> +}
> +
> +static void pnv_nic_init(PCIBus *pci_bus)
> +{
> +    int i;
> +
> +    for (i = 0; i < nb_nics; i++) {
> +        NICInfo *nd = &nd_table[i];
> +        DeviceState *dev;
> +        PCIDevice *pdev;
> +        Error *err = NULL;
> +
> +        pdev = pci_create(pci_bus, -1, "e1000");
> +        dev = &pdev->qdev;
> +        qdev_set_nic_properties(dev, nd);
> +        object_property_set_bool(OBJECT(dev), true, "realized", &err);
> +        if (err) {
> +            error_report_err(err);
> +            object_unparent(OBJECT(dev));
> +            exit(1);
> +        }
> +    }
> +}
> +
> +#define MAX_SATA_PORTS     6
> +
> +static void pnv_storage_init(PCIBus *pci_bus)
> +{
> +    DriveInfo *hd[MAX_SATA_PORTS];
> +    PCIDevice *ahci;
> +
> +    /* Add an AHCI device. We use an ICH9 since that's all we have
> +     * at hand for PCI AHCI but it shouldn't really matter
> +     */
> +    ahci = pci_create_simple(pci_bus, -1, "ich9-ahci");
> +    g_assert(MAX_SATA_PORTS == ICH_AHCI(ahci)->ahci.ports);
> +    ide_drive_get(hd, ICH_AHCI(ahci)->ahci.ports);
> +    ahci_ide_create_devs(ahci, hd);
> +}
> +
> +static PCIBus *pnv_create_pci_legacy_bridge(PnvPhb3State *phb,
> +                                            uint8_t chassis_nr)
> +{
> +    PCIDevice *dev;
> +    PCIHostState *pcih = PCI_HOST_BRIDGE(phb);
> +    PCIDevice *pdev;
> +    PCIBus *parent;
> +
> +    /* Add root complex */
> +    pdev = pci_create_multifunction(pcih->bus, 0, false, TYPE_PNV_PHB3_RC);
> +    qdev_prop_set_uint8(&pdev->qdev, "chassis", phb->chip_id * 4 + phb->phb_id);
> +    qdev_prop_set_uint16(&pdev->qdev, "slot", 1);
> +    qdev_init_nofail(&pdev->qdev);
> +
> +    /* Setup bus for that chip */
> +    parent = pci_bridge_get_sec_bus(PCI_BRIDGE(pdev));
> +
> +    dev = pci_create_multifunction(parent, 0, false, "pci-bridge");
> +    qdev_prop_set_uint8(&dev->qdev, "chassis_nr", chassis_nr);
> +    dev->qdev.id = "pci";
> +    qdev_init_nofail(&dev->qdev);
> +    return pci_bridge_get_sec_bus(PCI_BRIDGE(dev));
> +}
> +
>  static void ppc_powernv_init(MachineState *machine)
>  {
>      PnvMachineState *pnv = POWERNV_MACHINE(machine);
> @@ -581,6 +666,8 @@ static void ppc_powernv_init(MachineState *machine)
>      long fw_size;
>      int i;
>      char *chip_typename;
> +    PCIBus *pbus;
> +    bool has_gfx = false;
>  
>      /* allocate RAM */
>      if (machine->ram_size < (1 * G_BYTE)) {
> @@ -682,6 +769,30 @@ static void ppc_powernv_init(MachineState *machine)
>       * host to powerdown */
>      pnv->powerdown_notifier.notify = pnv_powerdown_notify;
>      qemu_register_powerdown_notifier(&pnv->powerdown_notifier);
> +
> +    /* Add a PCI switch */
> +    pbus = pnv_create_pci_legacy_bridge(pnv->chips[0]->phbs[0], 128);
> +
> +    /* Graphics & USB */
> +    if (pnv_vga_init(pbus)) {
> +        has_gfx = true;
> +        machine->usb |= defaults_enabled() && !machine->usb_disabled;
> +    }
> +    if (machine->usb) {
> +        pci_create_simple(pbus, -1, "nec-usb-xhci");
> +        if (has_gfx) {
> +            USBBus *usb_bus = usb_bus_find(-1);
> +
> +            usb_create_simple(usb_bus, "usb-kbd");
> +            usb_create_simple(usb_bus, "usb-mouse");
> +        }
> +    }
> +
> +    /* Add NIC */
> +    pnv_nic_init(pbus);
> +
> +    /* Add storage */
> +    pnv_storage_init(pbus);
>  }
>  
>  /*

-- 
David Gibson			| I'll have my music baroque, and my code
david AT gibson.dropbear.id.au	| minimalist, thank you.  NOT _the_ _other_
				| _way_ _around_!
http://www.ozlabs.org/~dgibson

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 819 bytes --]

  reply	other threads:[~2017-04-10 15:41 UTC|newest]

Thread overview: 66+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-04-05 12:41 [Qemu-devel] [PATCH 00/21] pnv: PSI, OCC, IPMI and PCI models Cédric Le Goater
2017-04-05 12:41 ` [Qemu-devel] [PATCH 01/21] ppc/pnv: Add cut down PSI bridge model and hookup external interrupt Cédric Le Goater
2017-04-05 12:41 ` [Qemu-devel] [PATCH 02/21] ppc/pnv: Add OCC model stub with interrupt support Cédric Le Goater
2017-04-05 12:41 ` [Qemu-devel] [PATCH 03/21] ppc/pnv: Add support for POWER8+ LPC Controller Cédric Le Goater
2017-04-06  2:02   ` David Gibson
2017-04-06 12:27     ` Cédric Le Goater
2017-04-06 12:44     ` Cédric Le Goater
2017-04-06 21:54       ` Benjamin Herrenschmidt
2017-04-07  6:12         ` Cédric Le Goater
2017-04-05 12:41 ` [Qemu-devel] [PATCH 04/21] ppc/pnv: enable only one LPC bus Cédric Le Goater
2017-04-06  4:23   ` David Gibson
2017-04-06  9:06     ` Cédric Le Goater
2017-04-06  9:16       ` Benjamin Herrenschmidt
2017-04-06 11:50         ` Cédric Le Goater
2017-04-06 12:01           ` Benjamin Herrenschmidt
2017-04-06 12:35             ` Cédric Le Goater
2017-04-06 21:53               ` Benjamin Herrenschmidt
2017-04-07  6:14                 ` Cédric Le Goater
2017-04-08  2:14                   ` David Gibson
2017-04-05 12:41 ` [Qemu-devel] [PATCH 05/21] ppc: add IPMI support Cédric Le Goater
2017-04-05 12:41 ` [Qemu-devel] [PATCH 06/21] ipmi: use a file to load SDRs Cédric Le Goater
2017-04-05 12:41 ` [Qemu-devel] [PATCH 07/21] ipmi: provide support for FRUs Cédric Le Goater
2017-04-05 12:41 ` [Qemu-devel] [PATCH 08/21] ipmi: introduce an ipmi_bmc_sdr_find() API Cédric Le Goater
2017-04-06  5:36   ` David Gibson
2017-04-06  7:36     ` Cédric Le Goater
2017-04-06  7:38       ` Cédric Le Goater
2017-04-05 12:41 ` [Qemu-devel] [PATCH 09/21] ipmi: introduce an ipmi_bmc_gen_event() API Cédric Le Goater
2017-04-05 12:41 ` [Qemu-devel] [PATCH 10/21] ipmi: add SET_SENSOR_READING command Cédric Le Goater
2017-04-05 14:41   ` Corey Minyard
2017-04-06  7:29     ` Cédric Le Goater
2017-04-05 12:41 ` [Qemu-devel] [PATCH 11/21] ppc/pnv: scan ISA bus to populate device tree Cédric Le Goater
2017-04-10  5:17   ` David Gibson
2017-04-10  9:08     ` Cédric Le Goater
2017-04-10 13:16   ` [Qemu-devel] [Qemu-ppc] " Greg Kurz
2017-04-10 13:21     ` Cédric Le Goater
2017-04-05 12:41 ` [Qemu-devel] [PATCH 12/21] ppc/pnv: populate device tree for RTC devices Cédric Le Goater
2017-04-10  5:18   ` David Gibson
2017-04-05 12:41 ` [Qemu-devel] [PATCH 13/21] ppc/pnv: populate device tree for serial devices Cédric Le Goater
2017-04-10  5:19   ` David Gibson
2017-04-05 12:41 ` [Qemu-devel] [PATCH 14/21] ppc/pnv: populate device tree for IPMI BT devices Cédric Le Goater
2017-04-10  5:23   ` David Gibson
2017-04-05 12:41 ` [Qemu-devel] [PATCH 15/21] ppc/pnv: add initial IPMI sensors for the BMC simulator Cédric Le Goater
2017-04-10  5:31   ` David Gibson
2017-04-10  9:25     ` Cédric Le Goater
2017-04-05 12:41 ` [Qemu-devel] [PATCH 16/21] ppc/pnv: generate an OEM SEL event on shutdown Cédric Le Goater
2017-04-10  5:32   ` David Gibson
2017-04-05 12:41 ` [Qemu-devel] [PATCH 17/21] qdev: Add a hook for a bus to device if it can add devices Cédric Le Goater
2017-04-10  5:36   ` David Gibson
2017-04-05 12:41 ` [Qemu-devel] [PATCH 18/21] pci: Use the new pci_can_add_device() to enforce devfn_min/max Cédric Le Goater
2017-04-10  5:41   ` David Gibson
2017-04-10 19:48   ` Michael S. Tsirkin
2017-04-05 12:41 ` [Qemu-devel] [PATCH 19/21] pci: Don't call pci_irq_handler() for a negative intx Cédric Le Goater
2017-04-10  5:59   ` David Gibson
2017-04-11 15:41     ` Cédric Le Goater
2017-04-05 12:41 ` [Qemu-devel] [PATCH 20/21] ppc/pnv: Add model for Power8 PHB3 PCIe Host bridge Cédric Le Goater
2017-04-10  8:14   ` David Gibson
2017-04-11  3:05     ` Benjamin Herrenschmidt
2017-04-11  6:06       ` David Gibson
2017-04-11 16:03       ` Cédric Le Goater
2017-04-11 16:35     ` Cédric Le Goater
2017-04-05 12:41 ` [Qemu-devel] [PATCH 21/21] ppc/pnv: Create a default PCI layout Cédric Le Goater
2017-04-10  8:16   ` David Gibson [this message]
2017-04-11 11:10   ` [Qemu-devel] [Qemu-ppc] " Andrea Bolognani
2017-04-11 16:50     ` Cédric Le Goater
2017-04-12  8:02       ` Andrea Bolognani
2017-04-12  9:01         ` Cédric Le Goater

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=20170410081646.GT27571@umbus \
    --to=david@gibson.dropbear.id.au \
    --cc=benh@kernel.crashing.org \
    --cc=clg@kaod.org \
    --cc=marcel@redhat.com \
    --cc=mst@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=qemu-ppc@nongnu.org \
    /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.