From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:39184) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YnXXx-0001oN-Bg for qemu-devel@nongnu.org; Wed, 29 Apr 2015 15:21:27 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YnXXr-0006HE-2q for qemu-devel@nongnu.org; Wed, 29 Apr 2015 15:21:25 -0400 Received: from e18.ny.us.ibm.com ([129.33.205.208]:39359) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YnXXq-0006H2-Tw for qemu-devel@nongnu.org; Wed, 29 Apr 2015 15:21:18 -0400 Received: from /spool/local by e18.ny.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Wed, 29 Apr 2015 15:21:18 -0400 From: Michael Roth Date: Wed, 29 Apr 2015 14:20:17 -0500 Message-Id: <1430335224-6716-9-git-send-email-mdroth@linux.vnet.ibm.com> In-Reply-To: <1430335224-6716-1-git-send-email-mdroth@linux.vnet.ibm.com> References: <1430335224-6716-1-git-send-email-mdroth@linux.vnet.ibm.com> Subject: [Qemu-devel] [RFC PATCH 08/15] spapr: create DR connectors for PHBs and register reset hooks List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: aik@ozlabs.ru, nfont@linux.vnet.ibm.com, bharata@linux.vnet.ibm.com, qemu-ppc@nongnu.org, david@gibson.dropbear.id.au Since we route hotplugged PHBs to their DR connector using their PHB.index value, we align the number of DR connectors with the maximum index value: SPAPR_PCI_MAX_INDEX. Signed-off-by: Michael Roth --- hw/ppc/spapr.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c index c8ad5b0..c539932 100644 --- a/hw/ppc/spapr.c +++ b/hw/ppc/spapr.c @@ -90,6 +90,9 @@ #define HTAB_SIZE(spapr) (1ULL << ((spapr)->htab_shift)) +/* maximum number of hotpluggable PHBs */ +#define SPAPR_DRC_MAX_PHB (SPAPR_PCI_MAX_INDEX + 1) + typedef struct sPAPRMachineClass sPAPRMachineClass; typedef struct sPAPRMachineState sPAPRMachineState; @@ -1387,6 +1390,16 @@ static SaveVMHandlers savevm_htab_handlers = { .load_state = htab_load, }; +static void spapr_drc_reset(void *opaque) +{ + sPAPRDRConnector *drc = opaque; + DeviceState *d = DEVICE(drc); + + if (d) { + device_reset(d); + } +} + /* pSeries LPAR / sPAPR hardware init */ static void ppc_spapr_init(MachineState *machine) { @@ -1561,6 +1574,21 @@ static void ppc_spapr_init(MachineState *machine) spapr->dr_phb_enabled = smc->dr_phb_enabled; + /* Setup hotplug / dynamic-reconfiguration connectors. top-level + * connectors (described in root DT node's "ibm,drc-types" property) + * are pre-initialized here. additional child connectors (such as + * connectors for a PHBs PCI slots) are added as needed during their + * parent's realization. + */ + if (spapr->dr_phb_enabled) { + for (i = 0; i < SPAPR_DRC_MAX_PHB; i++) { + sPAPRDRConnector *drc = + spapr_dr_connector_new(OBJECT(machine), + SPAPR_DR_CONNECTOR_TYPE_PHB, i); + qemu_register_reset(spapr_drc_reset, drc); + } + } + /* Set up PCI */ spapr_pci_rtas_init(); -- 1.9.1