From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:60946) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1at7ET-00067M-Sf for qemu-devel@nongnu.org; Thu, 21 Apr 2016 01:32:55 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1at7ES-0007qv-KA for qemu-devel@nongnu.org; Thu, 21 Apr 2016 01:32:53 -0400 Received: from mail-pf0-x230.google.com ([2607:f8b0:400e:c00::230]:33038) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1at7ES-0007qi-AW for qemu-devel@nongnu.org; Thu, 21 Apr 2016 01:32:52 -0400 Received: by mail-pf0-x230.google.com with SMTP id 184so26387700pff.0 for ; Wed, 20 Apr 2016 22:32:52 -0700 (PDT) References: <1461119601-4936-1-git-send-email-david@gibson.dropbear.id.au> <1461119601-4936-10-git-send-email-david@gibson.dropbear.id.au> From: Alexey Kardashevskiy Message-ID: <571865FE.8000208@ozlabs.ru> Date: Thu, 21 Apr 2016 15:32:46 +1000 MIME-Version: 1.0 In-Reply-To: <1461119601-4936-10-git-send-email-david@gibson.dropbear.id.au> Content-Type: text/plain; charset=koi8-r; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [RFC for-2.7 09/11] pseries: Consolidate construction of /chosen device tree node List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: David Gibson , agraf@suse.de, crosthwaite.peter@gmail.com Cc: qemu-ppc@nongnu.org, qemu-devel@nongnu.org On 04/20/2016 12:33 PM, David Gibson wrote: > For historical reasons construction of the /chosen node in the device tree > (amongst others) is split into several places. This patch brings these > pieces back together to make things clearer. > > Signed-off-by: David Gibson Reviewed-by: Alexey Kardashevskiy > --- > hw/ppc/spapr.c | 59 ++++++++++++++++++++-------------------------- > hw/ppc/spapr_vio.c | 16 +++---------- > include/hw/ppc/spapr_vio.h | 2 +- > 3 files changed, 30 insertions(+), 47 deletions(-) > > diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c > index d04d403..a000056 100644 > --- a/hw/ppc/spapr.c > +++ b/hw/ppc/spapr.c > @@ -707,9 +707,7 @@ static void *spapr_build_fdt(sPAPRMachineState *spapr, > MachineState *machine = MACHINE(spapr); > sPAPRMachineClass *smc = SPAPR_MACHINE_GET_CLASS(machine); > const char *boot_device = machine->boot_order; > - int ret, i; > - size_t cb = 0; > - char *bootlist; > + int ret; > void *fdt; > sPAPRPHBState *phb; > char *buf; > @@ -759,6 +757,8 @@ static void *spapr_build_fdt(sPAPRMachineState *spapr, > /* /chosen */ > { > QDTNode *chosen = qdt_add_subnode(root, "chosen"); > + char *bootlist; > + size_t cb = 0, i; > > /* Set Form1_affinity */ > qdt_setprop_bytes(chosen, "ibm,architecture-vec-5", > @@ -782,6 +782,29 @@ static void *spapr_build_fdt(sPAPRMachineState *spapr, > qdt_setprop_cells(chosen, "qemu,graphic-width", graphic_width); > qdt_setprop_cells(chosen, "qemu,graphic-height", graphic_height); > qdt_setprop_cells(chosen, "qemu,graphic-depth", graphic_depth); > + > + bootlist = get_boot_devices_list(&cb, true); > + if (cb && bootlist) { > + for (i = 0; i < cb; i++) { > + if (bootlist[i] == '\n') { > + bootlist[i] = ' '; > + } > + > + } > + qdt_setprop_string(chosen, "qemu,boot-list", bootlist); > + } > + g_free(bootlist); > + > + if (boot_device && strlen(boot_device)) { > + qdt_setprop_string(chosen, "qemu,boot-device", boot_device); > + } > + > + if (!spapr->has_graphics) { > + char *stdout = spapr_vio_stdout_path(spapr->vio_bus); > + > + qdt_setprop_string(chosen, "linux,stdout-path", stdout); > + g_free(stdout); > + } > } > > /* RTAS */ > @@ -933,40 +956,10 @@ static void *spapr_build_fdt(sPAPRMachineState *spapr, > /* cpus */ > spapr_populate_cpus_dt_node(fdt, spapr); > > - bootlist = get_boot_devices_list(&cb, true); > - if (cb && bootlist) { > - int offset = fdt_path_offset(fdt, "/chosen"); > - if (offset < 0) { > - exit(1); > - } > - for (i = 0; i < cb; i++) { > - if (bootlist[i] == '\n') { > - bootlist[i] = ' '; > - } > - > - } > - ret = fdt_setprop_string(fdt, offset, "qemu,boot-list", bootlist); > - } > - > - if (boot_device && strlen(boot_device)) { > - int offset = fdt_path_offset(fdt, "/chosen"); > - > - if (offset < 0) { > - exit(1); > - } > - fdt_setprop_string(fdt, offset, "qemu,boot-device", boot_device); > - } > - > - if (!spapr->has_graphics) { > - spapr_populate_chosen_stdout(fdt, spapr->vio_bus); > - } > - > if (smc->dr_lmb_enabled) { > _FDT(spapr_drc_populate_dt(fdt, 0, NULL, SPAPR_DR_CONNECTOR_TYPE_LMB)); > } > > - g_free(bootlist); > - > /* Build memory reserve map */ > if (spapr->kernel_size) { > _FDT((fdt_add_mem_rsv(fdt, KERNEL_LOAD_ADDR, spapr->kernel_size))); > diff --git a/hw/ppc/spapr_vio.c b/hw/ppc/spapr_vio.c > index 8aa021f..18b07e0 100644 > --- a/hw/ppc/spapr_vio.c > +++ b/hw/ppc/spapr_vio.c > @@ -679,28 +679,18 @@ out: > return ret; > } > > -int spapr_populate_chosen_stdout(void *fdt, VIOsPAPRBus *bus) > +gchar *spapr_vio_stdout_path(VIOsPAPRBus *bus) > { > VIOsPAPRDevice *dev; > char *name, *path; > - int ret, offset; > > dev = spapr_vty_get_default(bus); > if (!dev) > - return 0; > - > - offset = fdt_path_offset(fdt, "/chosen"); > - if (offset < 0) { > - return offset; > - } > + return NULL; > > name = spapr_vio_get_dev_name(DEVICE(dev)); > path = g_strdup_printf("/vdevice/%s", name); > - > - ret = fdt_setprop_string(fdt, offset, "linux,stdout-path", path); > - > g_free(name); > - g_free(path); > > - return ret; > + return path; > } > diff --git a/include/hw/ppc/spapr_vio.h b/include/hw/ppc/spapr_vio.h > index c9733e7..ea00c3b 100644 > --- a/include/hw/ppc/spapr_vio.h > +++ b/include/hw/ppc/spapr_vio.h > @@ -82,7 +82,7 @@ struct VIOsPAPRBus { > extern VIOsPAPRBus *spapr_vio_bus_init(void); > extern VIOsPAPRDevice *spapr_vio_find_by_reg(VIOsPAPRBus *bus, uint32_t reg); > extern int spapr_populate_vdevice(VIOsPAPRBus *bus, void *fdt); > -extern int spapr_populate_chosen_stdout(void *fdt, VIOsPAPRBus *bus); > +gchar *spapr_vio_stdout_path(VIOsPAPRBus *bus); > > extern int spapr_vio_signal(VIOsPAPRDevice *dev, target_ulong mode); > > -- Alexey