qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Alexey Kardashevskiy <aik@ozlabs.ru>
To: David Gibson <david@gibson.dropbear.id.au>,
	agraf@suse.de, crosthwaite.peter@gmail.com
Cc: qemu-ppc@nongnu.org, qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [RFC for-2.7 04/11] pseries: Make spapr_create_fdt_skel() get information from machine state
Date: Thu, 21 Apr 2016 15:32:14 +1000	[thread overview]
Message-ID: <571865DE.5030103@ozlabs.ru> (raw)
In-Reply-To: <1461119601-4936-5-git-send-email-david@gibson.dropbear.id.au>

On 04/20/2016 12:33 PM, David Gibson wrote:
> Currently spapr_create_fdt_skel() takes a bunch of individual parameters
> for various things it will put in the device tree.  Some of these can
> already be taken directly from sPAPRMachineState.  This patch alters it so
> that all of them can be taken from there, which will allow this code to
> be moved away from its current caller in future.
>
> Signed-off-by: David Gibson <david@gibson.dropbear.id.au>



Reviewed-by: Alexey Kardashevskiy <aik@ozlabs.ru>


> ---
>   hw/ppc/spapr.c         | 81 ++++++++++++++++++++++----------------------------
>   include/hw/ppc/spapr.h |  4 +++
>   2 files changed, 40 insertions(+), 45 deletions(-)
>
> diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
> index b123078..da10136 100644
> --- a/hw/ppc/spapr.c
> +++ b/hw/ppc/spapr.c
> @@ -312,16 +312,12 @@ static void add_str(GString *s, const gchar *s1)
>       g_string_append_len(s, s1, strlen(s1) + 1);
>   }
>
> -static void *spapr_create_fdt_skel(hwaddr initrd_base,
> -                                   hwaddr initrd_size,
> -                                   hwaddr kernel_size,
> -                                   bool little_endian,
> -                                   const char *kernel_cmdline,
> -                                   uint32_t epow_irq)
> +static void *spapr_create_fdt_skel(sPAPRMachineState *spapr)
>   {
> +    MachineState *machine = MACHINE(spapr);
>       void *fdt;
> -    uint32_t start_prop = cpu_to_be32(initrd_base);
> -    uint32_t end_prop = cpu_to_be32(initrd_base + initrd_size);
> +    uint32_t start_prop = cpu_to_be32(spapr->initrd_base);
> +    uint32_t end_prop = cpu_to_be32(spapr->initrd_base + spapr->initrd_size);
>       GString *hypertas = g_string_sized_new(256);
>       GString *qemu_hypertas = g_string_sized_new(256);
>       uint32_t refpoints[] = {cpu_to_be32(0x4), cpu_to_be32(0x4)};
> @@ -343,11 +339,13 @@ static void *spapr_create_fdt_skel(hwaddr initrd_base,
>       fdt = g_malloc0(FDT_MAX_SIZE);
>       _FDT((fdt_create(fdt, FDT_MAX_SIZE)));
>
> -    if (kernel_size) {
> -        _FDT((fdt_add_reservemap_entry(fdt, KERNEL_LOAD_ADDR, kernel_size)));
> +    if (spapr->kernel_size) {
> +        _FDT((fdt_add_reservemap_entry(fdt, KERNEL_LOAD_ADDR,
> +                                       spapr->kernel_size)));
>       }
> -    if (initrd_size) {
> -        _FDT((fdt_add_reservemap_entry(fdt, initrd_base, initrd_size)));
> +    if (spapr->initrd_size) {
> +        _FDT((fdt_add_reservemap_entry(fdt, spapr->initrd_base,
> +                                       spapr->initrd_size)));
>       }
>       _FDT((fdt_finish_reservemap(fdt)));
>
> @@ -397,17 +395,17 @@ static void *spapr_create_fdt_skel(hwaddr initrd_base,
>       /* Set Form1_affinity */
>       _FDT((fdt_property(fdt, "ibm,architecture-vec-5", vec5, sizeof(vec5))));
>
> -    _FDT((fdt_property_string(fdt, "bootargs", kernel_cmdline)));
> +    _FDT((fdt_property_string(fdt, "bootargs", machine->kernel_cmdline)));
>       _FDT((fdt_property(fdt, "linux,initrd-start",
>                          &start_prop, sizeof(start_prop))));
>       _FDT((fdt_property(fdt, "linux,initrd-end",
>                          &end_prop, sizeof(end_prop))));
> -    if (kernel_size) {
> +    if (spapr->kernel_size) {
>           uint64_t kprop[2] = { cpu_to_be64(KERNEL_LOAD_ADDR),
> -                              cpu_to_be64(kernel_size) };
> +                              cpu_to_be64(spapr->kernel_size) };
>
>           _FDT((fdt_property(fdt, "qemu,boot-kernel", &kprop, sizeof(kprop))));
> -        if (little_endian) {
> +        if (spapr->kernel_le) {
>               _FDT((fdt_property(fdt, "qemu,boot-kernel-le", NULL, 0)));
>           }
>       }
> @@ -484,7 +482,7 @@ static void *spapr_create_fdt_skel(hwaddr initrd_base,
>       _FDT((fdt_end_node(fdt)));
>
>       /* event-sources */
> -    spapr_events_fdt_skel(fdt, epow_irq);
> +    spapr_events_fdt_skel(fdt, spapr->check_exception_irq);
>
>       /* /hypervisor node */
>       if (kvm_enabled()) {
> @@ -1714,7 +1712,6 @@ static void ppc_spapr_init(MachineState *machine)
>       sPAPRMachineState *spapr = SPAPR_MACHINE(machine);
>       sPAPRMachineClass *smc = SPAPR_MACHINE_GET_CLASS(machine);
>       const char *kernel_filename = machine->kernel_filename;
> -    const char *kernel_cmdline = machine->kernel_cmdline;
>       const char *initrd_filename = machine->initrd_filename;
>       PowerPCCPU *cpu;
>       PCIHostState *phb;
> @@ -1725,10 +1722,7 @@ static void ppc_spapr_init(MachineState *machine)
>       void *rma = NULL;
>       hwaddr rma_alloc_size;
>       hwaddr node0_size = spapr_node0_size();
> -    uint32_t initrd_base = 0;
> -    long kernel_size = 0, initrd_size = 0;
>       long load_limit, fw_size;
> -    bool kernel_le = false;
>       char *filename;
>
>       msi_nonbroken = true;
> @@ -1929,19 +1923,19 @@ static void ppc_spapr_init(MachineState *machine)
>       if (kernel_filename) {
>           uint64_t lowaddr = 0;
>
> -        kernel_size = load_elf(kernel_filename, translate_kernel_address, NULL,
> -                               NULL, &lowaddr, NULL, 1, PPC_ELF_MACHINE,
> -                               0, 0);
> -        if (kernel_size == ELF_LOAD_WRONG_ENDIAN) {
> -            kernel_size = load_elf(kernel_filename,
> -                                   translate_kernel_address, NULL,
> -                                   NULL, &lowaddr, NULL, 0, PPC_ELF_MACHINE,
> -                                   0, 0);
> -            kernel_le = kernel_size > 0;
> -        }
> -        if (kernel_size < 0) {
> -            error_report("error loading %s: %s",
> -                         kernel_filename, load_elf_strerror(kernel_size));
> +        spapr->kernel_size = load_elf(kernel_filename, translate_kernel_address,
> +                                      NULL, NULL, &lowaddr, NULL, 1,
> +                                      PPC_ELF_MACHINE, 0, 0);
> +        if (spapr->kernel_size == ELF_LOAD_WRONG_ENDIAN) {
> +            spapr->kernel_size = load_elf(kernel_filename,
> +                                          translate_kernel_address, NULL, NULL,
> +                                          &lowaddr, NULL, 0, PPC_ELF_MACHINE,
> +                                          0, 0);
> +            spapr->kernel_le = spapr->kernel_size > 0;
> +        }
> +        if (spapr->kernel_size < 0) {
> +            error_report("error loading %s: %s", kernel_filename,
> +                         load_elf_strerror(spapr->kernel_size));
>               exit(1);
>           }
>
> @@ -1950,17 +1944,17 @@ static void ppc_spapr_init(MachineState *machine)
>               /* Try to locate the initrd in the gap between the kernel
>                * and the firmware. Add a bit of space just in case
>                */
> -            initrd_base = (KERNEL_LOAD_ADDR + kernel_size + 0x1ffff) & ~0xffff;
> -            initrd_size = load_image_targphys(initrd_filename, initrd_base,
> -                                              load_limit - initrd_base);
> -            if (initrd_size < 0) {
> +            spapr->initrd_base = (KERNEL_LOAD_ADDR + spapr->kernel_size
> +                                  + 0x1ffff) & ~0xffff;
> +            spapr->initrd_size = load_image_targphys(initrd_filename,
> +                                                     spapr->initrd_base,
> +                                                     load_limit
> +                                                     - spapr->initrd_base);
> +            if (spapr->initrd_size < 0) {
>                   error_report("could not load initial ram disk '%s'",
>                                initrd_filename);
>                   exit(1);
>               }
> -        } else {
> -            initrd_base = 0;
> -            initrd_size = 0;
>           }
>       }
>
> @@ -1987,10 +1981,7 @@ static void ppc_spapr_init(MachineState *machine)
>                            &savevm_htab_handlers, spapr);
>
>       /* Prepare the device tree */
> -    spapr->fdt_skel = spapr_create_fdt_skel(initrd_base, initrd_size,
> -                                            kernel_size, kernel_le,
> -                                            kernel_cmdline,
> -                                            spapr->check_exception_irq);
> +    spapr->fdt_skel = spapr_create_fdt_skel(spapr);
>       assert(spapr->fdt_skel != NULL);
>
>       /* used by RTAS */
> diff --git a/include/hw/ppc/spapr.h b/include/hw/ppc/spapr.h
> index 655ffe9..88f29a8 100644
> --- a/include/hw/ppc/spapr.h
> +++ b/include/hw/ppc/spapr.h
> @@ -58,6 +58,10 @@ struct sPAPRMachineState {
>       int vrma_adjust;
>       ssize_t rtas_size;
>       void *rtas_blob;
> +    long kernel_size;
> +    bool kernel_le;
> +    uint32_t initrd_base;
> +    long initrd_size;
>       void *fdt_skel;
>       uint64_t rtc_offset; /* Now used only during incoming migration */
>       struct PPCTimebase tb;
>


-- 
Alexey

  reply	other threads:[~2016-04-21  5:32 UTC|newest]

Thread overview: 44+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-04-20  2:33 [Qemu-devel] [RFC for-2.7 00/11] A new infrastructure for guest device trees David Gibson
2016-04-20  2:33 ` [Qemu-devel] [RFC for-2.7 01/11] qdt: IEEE1275-style device tree utility code David Gibson
2016-04-21  6:01   ` Alexey Kardashevskiy
2016-04-22  4:15     ` David Gibson
2016-04-26 11:00   ` Thomas Huth
2016-04-27  6:02     ` David Gibson
2016-04-27  6:43       ` Markus Armbruster
2016-04-27  7:06         ` Thomas Huth
2016-04-27  7:28           ` Markus Armbruster
2016-04-27  7:56             ` Thomas Huth
2016-04-27  8:36               ` Markus Armbruster
2016-04-27 23:49             ` David Gibson
2016-04-20  2:33 ` [Qemu-devel] [RFC for-2.7 02/11] pseries: Split device tree construction from device tree load David Gibson
2016-04-20 18:15   ` Thomas Huth
2016-04-21  5:31   ` Alexey Kardashevskiy
2016-04-20  2:33 ` [Qemu-devel] [RFC for-2.7 03/11] pseries: Remove rtas_addr and fdt_addr fields from machinestate David Gibson
2016-04-20 18:19   ` Thomas Huth
2016-04-21  5:32   ` Alexey Kardashevskiy
2016-04-20  2:33 ` [Qemu-devel] [RFC for-2.7 04/11] pseries: Make spapr_create_fdt_skel() get information from machine state David Gibson
2016-04-21  5:32   ` Alexey Kardashevskiy [this message]
2016-04-26 17:41   ` Thomas Huth
2016-04-20  2:33 ` [Qemu-devel] [RFC for-2.7 05/11] pseries: Build device tree only at reset time David Gibson
2016-04-21  5:32   ` Alexey Kardashevskiy
2016-04-26 18:13   ` Thomas Huth
2016-04-27  6:07     ` David Gibson
2016-04-20  2:33 ` [Qemu-devel] [RFC for-2.7 06/11] pseries: Consolidate RTAS loading David Gibson
2016-04-21  5:32   ` Alexey Kardashevskiy
2016-04-27  9:12   ` Thomas Huth
2016-04-20  2:33 ` [Qemu-devel] [RFC for-2.7 07/11] pseries: Move adding of fdt reserve map entries David Gibson
2016-04-21  5:14   ` Alexey Kardashevskiy
2016-04-21  5:52     ` David Gibson
2016-04-21  6:03       ` Alexey Kardashevskiy
2016-04-22  4:22         ` David Gibson
2016-04-27  9:19   ` Thomas Huth
2016-04-20  2:33 ` [Qemu-devel] [RFC for-2.7 08/11] pseries: Start using qdt library for building device tree David Gibson
2016-04-21  4:04   ` Alexey Kardashevskiy
2016-04-27  6:13     ` David Gibson
2016-04-20  2:33 ` [Qemu-devel] [RFC for-2.7 09/11] pseries: Consolidate construction of /chosen device tree node David Gibson
2016-04-21  5:32   ` Alexey Kardashevskiy
2016-04-20  2:33 ` [Qemu-devel] [RFC for-2.7 10/11] pseries: Consolidate construction of /rtas " David Gibson
2016-04-21  5:32   ` Alexey Kardashevskiy
2016-04-20  2:33 ` [Qemu-devel] [RFC for-2.7 11/11] pseries: Remove unused callbacks from sPAPR VIO bus state David Gibson
2016-04-21  5:31   ` Alexey Kardashevskiy
2016-04-27  6:22     ` David Gibson

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=571865DE.5030103@ozlabs.ru \
    --to=aik@ozlabs.ru \
    --cc=agraf@suse.de \
    --cc=crosthwaite.peter@gmail.com \
    --cc=david@gibson.dropbear.id.au \
    --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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).