From: mark.rutland@arm.com (Mark Rutland)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 06/13] arm64: Add new routine read_cpu_properties
Date: Mon, 15 Sep 2014 19:42:18 +0100 [thread overview]
Message-ID: <20140915184217.GA14191@leverpostej> (raw)
In-Reply-To: <b68073fb2e816f97311b9a3547e3656164ae85d0.1410302383.git.geoff@infradead.org>
Hi Geoff,
On Tue, Sep 09, 2014 at 11:49:04PM +0100, Geoff Levand wrote:
> The kexec re-boot support that will be added in a subsequent patch in this
> series will need to read the device tree CPU properties, and it is expected
> that a rework of the SMP spin table code to handle cpu_die will also need this
> functionality, so add two new common arm64 files cpu-properties.h and
> cpu-properties.c that define a new structure cpu_properties that hold the
> various CPU properties from a device tree, and the new routine
> read_cpu_properties() that fills the structure from a device tree CPU node.
I'm very much not keen on placing all this information in a single
structure -- that adds a new tight coupling that we didn't have before,
and it looks like it's going to be painful to maintain.
If kexec uses the existing high-level hotplug infrastructure, it has no
reason to go anywhere near this information.
So I really don't like this patch.
Why do you think we need this information to be centralized in this way?
Thanks,
Mark.
>
> Signed-off-by: Geoff Levand <geoff@infradead.org>
> ---
> arch/arm64/kernel/cpu-properties.c | 58 ++++++++++++++++++++++++++++++++++++++
> arch/arm64/kernel/cpu-properties.h | 39 +++++++++++++++++++++++++
> 2 files changed, 97 insertions(+)
> create mode 100644 arch/arm64/kernel/cpu-properties.c
> create mode 100644 arch/arm64/kernel/cpu-properties.h
>
> diff --git a/arch/arm64/kernel/cpu-properties.c b/arch/arm64/kernel/cpu-properties.c
> new file mode 100644
> index 0000000..e64b34b
> --- /dev/null
> +++ b/arch/arm64/kernel/cpu-properties.c
> @@ -0,0 +1,58 @@
> +/*
> + * Copyright (C) Linaro.
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License version 2 as
> + * published by the Free Software Foundation.
> + */
> +
> +#include "cpu-properties.h"
> +
> +int read_cpu_properties(struct cpu_properties *p, const struct device_node *dn)
> +{
> + const u32 *cell;
> +
> + memset(p, 0, sizeof(*p));
> + p->hwid = INVALID_HWID;
> + p->cpu_release_addr = INVALID_ADDR;
> +
> + cell = of_get_property(dn, "reg", NULL);
> +
> + if (!cell) {
> + pr_err("%s: Error: %s: invalid reg property\n",
> + __func__, dn->full_name);
> + return -1;
> + }
> +
> + p->hwid = of_read_number(cell,
> + of_n_addr_cells((struct device_node *)dn)) & MPIDR_HWID_BITMASK;
> +
> + p->enable_method = of_get_property(dn, "enable-method", NULL);
> +
> + if (!p->enable_method) {
> + pr_err("%s: Error: %s: invalid enable-method\n",
> + __func__, dn->full_name);
> + return -1;
> + }
> +
> + if (!strcmp(p->enable_method, "psci")) {
> + p->type = cpu_enable_method_psci;
> + return 0;
> + }
> +
> + if (strcmp(p->enable_method, "spin-table")) {
> + p->type = cpu_enable_method_unknown;
> + return -1;
> + }
> +
> + p->type = cpu_enable_method_spin_table;
> +
> + if (of_property_read_u64(dn, "cpu-release-addr",
> + &p->cpu_release_addr)) {
> + pr_err("%s: Error: %s: invalid cpu-return-addr property\n",
> + __func__, dn->full_name);
> + return -1;
> + }
> +
> + return 0;
> +}
> diff --git a/arch/arm64/kernel/cpu-properties.h b/arch/arm64/kernel/cpu-properties.h
> new file mode 100644
> index 0000000..b4218ef
> --- /dev/null
> +++ b/arch/arm64/kernel/cpu-properties.h
> @@ -0,0 +1,39 @@
> +/*
> + * Copyright (C) Linaro.
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License version 2 as
> + * published by the Free Software Foundation.
> + */
> +
> +#if !defined(__ARM64_CPU_PROPERTIES_H)
> +#define __ARM64_CPU_PROPERTIES_H
> +
> +#include <asm/memory.h>
> +#include <asm/cputype.h>
> +
> +#define INVALID_ADDR UL(~0)
> +
> +#if !defined(__ASSEMBLY__)
> +
> +#include <linux/kernel.h>
> +#include <linux/of.h>
> +
> +enum cpu_enable_method {
> + cpu_enable_method_unknown,
> + cpu_enable_method_psci,
> + cpu_enable_method_spin_table,
> +};
> +
> +struct cpu_properties {
> + u64 hwid;
> + u64 cpu_release_addr;
> + const char *enable_method;
> + enum cpu_enable_method type;
> +};
> +
> +int read_cpu_properties(struct cpu_properties *p, const struct device_node *dn);
> +
> +#endif /* !defined(__ASSEMBLY__) */
> +
> +#endif
> --
> 1.9.1
>
>
>
> _______________________________________________
> linux-arm-kernel mailing list
> linux-arm-kernel at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
>
next prev parent reply other threads:[~2014-09-15 18:42 UTC|newest]
Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-09-09 22:51 [PATCH 00/13] arm64 kexec kernel patches V2 Geoff Levand
2014-09-09 22:49 ` [PATCH 04/13] arm64: Add new hcall HVC_CALL_FUNC Geoff Levand
2014-09-10 17:07 ` Will Deacon
2014-09-10 17:23 ` Geoff Levand
2014-09-10 17:35 ` Will Deacon
2014-09-10 18:11 ` [PATCH V2 " Geoff Levand
2014-09-15 18:11 ` [PATCH " Mark Rutland
2014-09-25 0:24 ` Geoff Levand
2014-09-09 22:49 ` [PATCH 03/13] arm64: Convert hcalls to use ISS field Geoff Levand
2014-09-11 16:14 ` Arun Chandran
2014-09-15 17:57 ` Mark Rutland
2014-09-22 21:46 ` Geoff Levand
2014-09-09 22:49 ` [PATCH 06/13] arm64: Add new routine read_cpu_properties Geoff Levand
2014-09-15 18:42 ` Mark Rutland [this message]
2014-09-25 0:23 ` Geoff Levand
2014-09-09 22:49 ` [PATCH 07/13] arm64: Add new routine local_disable Geoff Levand
2014-09-15 18:56 ` Mark Rutland
2014-09-25 0:24 ` Geoff Levand
2014-09-09 22:49 ` [PATCH 01/13] arm64: Add ESR_EL2_EC macros to hyp-stub Geoff Levand
2014-09-15 16:10 ` Mark Rutland
2014-09-22 21:45 ` Geoff Levand
2014-09-09 22:49 ` [PATCH 05/13] arm64: Add EL2 switch to soft_restart Geoff Levand
2014-09-09 22:49 ` [PATCH 02/13] arm64/kvm: Fix assembler compatibility of macros Geoff Levand
2014-09-10 8:40 ` Ard Biesheuvel
2014-09-10 16:35 ` Geoff Levand
2014-09-10 17:09 ` Ard Biesheuvel
2014-09-15 16:14 ` Mark Rutland
2014-09-10 18:04 ` [PATCH V2 " Geoff Levand
2014-09-09 22:49 ` [PATCH 10/13] arm64/kexec: Revert change to machine_shutdown() Geoff Levand
2014-09-15 19:20 ` Mark Rutland
2014-09-09 22:49 ` [PATCH 09/13] arm64/kexec: Kexec expects cpu_die Geoff Levand
2014-09-15 19:10 ` Mark Rutland
2014-09-09 22:49 ` [PATCH 08/13] arm64: Use cpu_ops for smp_stop Geoff Levand
2014-09-15 19:06 ` Mark Rutland
2014-09-25 0:24 ` Geoff Levand
2014-09-09 22:49 ` [PATCH 11/13] arm64/kexec: Add core kexec support Geoff Levand
2014-09-18 1:13 ` Mark Rutland
2014-09-25 0:25 ` Geoff Levand
2014-09-09 22:49 ` [PATCH 12/13] arm64/kexec: Enable kexec in the arm64 defconfig Geoff Levand
2014-09-09 22:49 ` [PATCH 13/13] arm64/kexec: Add kexec_ignore_compat_check param Geoff Levand
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=20140915184217.GA14191@leverpostej \
--to=mark.rutland@arm.com \
--cc=linux-arm-kernel@lists.infradead.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).