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 10/11] pseries: Consolidate construction of /rtas device tree node
Date: Thu, 21 Apr 2016 15:32:59 +1000 [thread overview]
Message-ID: <5718660B.4050801@ozlabs.ru> (raw)
In-Reply-To: <1461119601-4936-11-git-send-email-david@gibson.dropbear.id.au>
On 04/20/2016 12:33 PM, David Gibson wrote:
> For historical reasons construction of the /rtas node in the device tree
> (amongst others) is split into several places. In particular it's split
> between spapr_build_fdt() and spapr_rtas_device_tree_setup().
>
> In fact, as well as adding the actual RTAS tokens to the device tree,
> spapr_rtas_device_tree_setup() just adds the ibm,lrdr-capacity property,
> which despite going in the /rtas node, doesn't have a lot to do with RTAS.
>
> This patch consolidates the code constructing /rtas together. Most of it
> goes inline (but together) into spapr_build_fdt(), and
> spapr_rtas_device_tree_setup() is renamed to spapr_rtas_dt_tokens() and
> now only adds the token properties.
>
> Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
Reviewed-by: Alexey Kardashevskiy <aik@ozlabs.ru>
> ---
> hw/ppc/spapr.c | 18 +++++++++++-------
> hw/ppc/spapr_rtas.c | 32 ++------------------------------
> include/hw/ppc/spapr.h | 4 ++--
> 3 files changed, 15 insertions(+), 39 deletions(-)
>
> diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
> index a000056..f52add7 100644
> --- a/hw/ppc/spapr.c
> +++ b/hw/ppc/spapr.c
> @@ -807,11 +807,13 @@ static void *spapr_build_fdt(sPAPRMachineState *spapr,
> }
> }
>
> - /* RTAS */
> + /* /rtas */
> {
> QDTNode *rtas = qdt_add_subnode(root, "rtas");
> GString *hypertas = g_string_sized_new(256);
> GString *qemu_hypertas = g_string_sized_new(256);
> + uint64_t max_hotplug_addr = spapr->hotplug_memory.base
> + + memory_region_size(&spapr->hotplug_memory.mr);
>
> add_str(hypertas, "hcall-pft");
> add_str(hypertas, "hcall-term");
> @@ -851,6 +853,14 @@ static void *spapr_build_fdt(sPAPRMachineState *spapr,
> * that rtas call return will always occur. Set this property.
> */
> qdt_setprop_empty(rtas, "ibm,extended-os-term");
> +
> + qdt_setprop_cells(rtas, "ibm,lrdr-capacity",
> + max_hotplug_addr >> 32,
> + max_hotplug_addr & 0xffffffff,
> + 0, SPAPR_MEMORY_BLOCK_SIZE,
> + max_cpus / smp_threads);
> +
> + spapr_rtas_dt_tokens(rtas);
> }
>
> /* /interrupt controller */
> @@ -947,12 +957,6 @@ static void *spapr_build_fdt(sPAPRMachineState *spapr,
> exit(1);
> }
>
> - /* RTAS */
> - ret = spapr_rtas_device_tree_setup(fdt, rtas_addr, rtas_size);
> - if (ret < 0) {
> - fprintf(stderr, "Couldn't set up RTAS device tree properties\n");
> - }
> -
> /* cpus */
> spapr_populate_cpus_dt_node(fdt, spapr);
>
> diff --git a/hw/ppc/spapr_rtas.c b/hw/ppc/spapr_rtas.c
> index c0cb41e..806a7b0 100644
> --- a/hw/ppc/spapr_rtas.c
> +++ b/hw/ppc/spapr_rtas.c
> @@ -677,16 +677,9 @@ void spapr_rtas_register(int token, const char *name, spapr_rtas_fn fn)
> rtas_table[token].fn = fn;
> }
>
> -int spapr_rtas_device_tree_setup(void *fdt, hwaddr rtas_addr,
> - hwaddr rtas_size)
> +void spapr_rtas_dt_tokens(QDTNode *node)
> {
> - int ret;
> int i;
> - uint32_t lrdr_capacity[5];
> - MachineState *machine = MACHINE(qdev_get_machine());
> - sPAPRMachineState *spapr = SPAPR_MACHINE(machine);
> - uint64_t max_hotplug_addr = spapr->hotplug_memory.base +
> - memory_region_size(&spapr->hotplug_memory.mr);
>
> for (i = 0; i < RTAS_TOKEN_MAX - RTAS_TOKEN_BASE; i++) {
> struct rtas_call *call = &rtas_table[i];
> @@ -695,29 +688,8 @@ int spapr_rtas_device_tree_setup(void *fdt, hwaddr rtas_addr,
> continue;
> }
>
> - ret = qemu_fdt_setprop_cell(fdt, "/rtas", call->name,
> - i + RTAS_TOKEN_BASE);
> - if (ret < 0) {
> - fprintf(stderr, "Couldn't add rtas token for %s: %s\n",
> - call->name, fdt_strerror(ret));
> - return ret;
> - }
> -
> + qdt_setprop_cells(node, call->name, i + RTAS_TOKEN_BASE);
> }
> -
> - lrdr_capacity[0] = cpu_to_be32(max_hotplug_addr >> 32);
> - lrdr_capacity[1] = cpu_to_be32(max_hotplug_addr & 0xffffffff);
> - lrdr_capacity[2] = 0;
> - lrdr_capacity[3] = cpu_to_be32(SPAPR_MEMORY_BLOCK_SIZE);
> - lrdr_capacity[4] = cpu_to_be32(max_cpus/smp_threads);
> - ret = qemu_fdt_setprop(fdt, "/rtas", "ibm,lrdr-capacity", lrdr_capacity,
> - sizeof(lrdr_capacity));
> - if (ret < 0) {
> - fprintf(stderr, "Couldn't add ibm,lrdr-capacity rtas property\n");
> - return ret;
> - }
> -
> - return 0;
> }
>
> void spapr_load_rtas(sPAPRMachineState *spapr, void *fdt, hwaddr addr)
> diff --git a/include/hw/ppc/spapr.h b/include/hw/ppc/spapr.h
> index 40d3724..1e609a0 100644
> --- a/include/hw/ppc/spapr.h
> +++ b/include/hw/ppc/spapr.h
> @@ -6,6 +6,7 @@
> #include "hw/ppc/xics.h"
> #include "hw/ppc/spapr_drc.h"
> #include "hw/mem/pc-dimm.h"
> +#include "qemu/qdt.h"
>
> struct VIOsPAPRBus;
> struct sPAPRPHBState;
> @@ -510,8 +511,7 @@ void spapr_rtas_register(int token, const char *name, spapr_rtas_fn fn);
> target_ulong spapr_rtas_call(PowerPCCPU *cpu, sPAPRMachineState *sm,
> uint32_t token, uint32_t nargs, target_ulong args,
> uint32_t nret, target_ulong rets);
> -int spapr_rtas_device_tree_setup(void *fdt, hwaddr rtas_addr,
> - hwaddr rtas_size);
> +void spapr_rtas_dt_tokens(QDTNode *node);
> void spapr_load_rtas(sPAPRMachineState *spapr, void *fdt, hwaddr addr);
>
> #define SPAPR_TCE_PAGE_SHIFT 12
>
--
Alexey
next prev parent reply other threads:[~2016-04-21 5:33 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
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 [this message]
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=5718660B.4050801@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 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.