From: Andrew Jones <ajones@ventanamicro.com>
To: Sunil V L <sunilvl@ventanamicro.com>
Cc: Palmer Dabbelt <palmer@dabbelt.com>,
Albert Ou <aou@eecs.berkeley.edu>,
Paul Walmsley <paul.walmsley@sifive.com>,
"Rafael J . Wysocki" <rafael@kernel.org>,
Len Brown <lenb@kernel.org>, Thomas Gleixner <tglx@linutronix.de>,
Marc Zyngier <maz@kernel.org>, Jonathan Corbet <corbet@lwn.net>,
linux-riscv@lists.infradead.org, linux-acpi@vger.kernel.org,
linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org,
Conor Dooley <conor.dooley@microchip.com>,
Anup Patel <apatel@ventanamicro.com>,
Atish Patra <atishp@rivosinc.com>,
"Rafael J . Wysocki" <rafael.j.wysocki@intel.com>
Subject: Re: [PATCH V2 15/21] clocksource/timer-riscv: Refactor riscv_timer_init_dt()
Date: Mon, 20 Feb 2023 20:47:26 +0100 [thread overview]
Message-ID: <20230220194726.meppdac4y7qdjsoj@orel> (raw)
In-Reply-To: <20230216182043.1946553-16-sunilvl@ventanamicro.com>
On Thu, Feb 16, 2023 at 11:50:37PM +0530, Sunil V L wrote:
> Refactor the timer init function such that few things can be
> shared by both DT and ACPI based platforms.
>
> Co-developed-by: Anup Patel <apatel@ventanamicro.com>
> Signed-off-by: Anup Patel <apatel@ventanamicro.com>
> Signed-off-by: Sunil V L <sunilvl@ventanamicro.com>
> Acked-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
> ---
> drivers/clocksource/timer-riscv.c | 82 +++++++++++++++----------------
> 1 file changed, 40 insertions(+), 42 deletions(-)
>
> diff --git a/drivers/clocksource/timer-riscv.c b/drivers/clocksource/timer-riscv.c
> index 1b4b36df5484..2ae8e300d303 100644
> --- a/drivers/clocksource/timer-riscv.c
> +++ b/drivers/clocksource/timer-riscv.c
> @@ -119,61 +119,28 @@ static irqreturn_t riscv_timer_interrupt(int irq, void *dev_id)
> return IRQ_HANDLED;
> }
>
> -static int __init riscv_timer_init_dt(struct device_node *n)
> +static int __init riscv_timer_init_common(void)
> {
> - int cpuid, error;
> - unsigned long hartid;
> - struct device_node *child;
> - struct irq_domain *domain;
> + int error;
> + struct irq_domain *domain = NULL;
domain is always assigned below, so we don't need to set it NULL here.
> + struct fwnode_handle *intc_fwnode = riscv_get_intc_hwnode();
>
> - error = riscv_of_processor_hartid(n, &hartid);
> - if (error < 0) {
> - pr_warn("Not valid hartid for node [%pOF] error = [%lu]\n",
> - n, hartid);
> - return error;
> - }
> -
> - cpuid = riscv_hartid_to_cpuid(hartid);
> - if (cpuid < 0) {
> - pr_warn("Invalid cpuid for hartid [%lu]\n", hartid);
> - return cpuid;
> - }
> -
> - if (cpuid != smp_processor_id())
> - return 0;
> -
> - child = of_find_compatible_node(NULL, NULL, "riscv,timer");
> - if (child) {
> - riscv_timer_cannot_wake_cpu = of_property_read_bool(child,
> - "riscv,timer-cannot-wake-cpu");
> - of_node_put(child);
> - }
> -
> - domain = NULL;
> - child = of_get_compatible_child(n, "riscv,cpu-intc");
> - if (!child) {
> - pr_err("Failed to find INTC node [%pOF]\n", n);
> - return -ENODEV;
> - }
> - domain = irq_find_host(child);
> - of_node_put(child);
> + domain = irq_find_matching_fwnode(intc_fwnode, DOMAIN_BUS_ANY);
> if (!domain) {
> - pr_err("Failed to find IRQ domain for node [%pOF]\n", n);
> + pr_err("Failed to find irq_domain for INTC node [%pfwP]\n",
> + intc_fwnode);
> return -ENODEV;
> }
>
> riscv_clock_event_irq = irq_create_mapping(domain, RV_IRQ_TIMER);
> if (!riscv_clock_event_irq) {
> - pr_err("Failed to map timer interrupt for node [%pOF]\n", n);
> + pr_err("Failed to map timer interrupt for node [%pfwP]\n", intc_fwnode);
> return -ENODEV;
> }
>
> - pr_info("%s: Registering clocksource cpuid [%d] hartid [%lu]\n",
> - __func__, cpuid, hartid);
> error = clocksource_register_hz(&riscv_clocksource, riscv_timebase);
> if (error) {
> - pr_err("RISCV timer register failed [%d] for cpu = [%d]\n",
> - error, cpuid);
> + pr_err("RISCV timer registration failed [%d]\n", error);
> return error;
> }
>
> @@ -202,4 +169,35 @@ static int __init riscv_timer_init_dt(struct device_node *n)
> return error;
> }
>
> +static int __init riscv_timer_init_dt(struct device_node *n)
> +{
> + int cpuid, error;
> + unsigned long hartid;
> + struct device_node *child;
> +
> + error = riscv_of_processor_hartid(n, &hartid);
> + if (error < 0) {
> + pr_warn("Invalid hartid for node [%pOF] error = [%lu]\n",
> + n, hartid);
> + return error;
> + }
> +
> + cpuid = riscv_hartid_to_cpuid(hartid);
> + if (cpuid < 0) {
> + pr_warn("Invalid cpuid for hartid [%lu]\n", hartid);
> + return cpuid;
> + }
> +
> + if (cpuid != smp_processor_id())
> + return 0;
> +
> + child = of_find_compatible_node(NULL, NULL, "riscv,timer");
> + if (child) {
> + riscv_timer_cannot_wake_cpu = of_property_read_bool(child,
> + "riscv,timer-cannot-wake-cpu");
> + of_node_put(child);
> + }
need blank line here
> + return riscv_timer_init_common();
> +}
> +
> TIMER_OF_DECLARE(riscv_timer, "riscv", riscv_timer_init_dt);
> --
> 2.34.1
>
Otherwise,
Reviewed-by: Andrew Jones <ajones@ventanamicro.com>
WARNING: multiple messages have this Message-ID (diff)
From: Andrew Jones <ajones@ventanamicro.com>
To: Sunil V L <sunilvl@ventanamicro.com>
Cc: Palmer Dabbelt <palmer@dabbelt.com>,
Albert Ou <aou@eecs.berkeley.edu>,
Paul Walmsley <paul.walmsley@sifive.com>,
"Rafael J . Wysocki" <rafael@kernel.org>,
Len Brown <lenb@kernel.org>, Thomas Gleixner <tglx@linutronix.de>,
Marc Zyngier <maz@kernel.org>, Jonathan Corbet <corbet@lwn.net>,
linux-riscv@lists.infradead.org, linux-acpi@vger.kernel.org,
linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org,
Conor Dooley <conor.dooley@microchip.com>,
Anup Patel <apatel@ventanamicro.com>,
Atish Patra <atishp@rivosinc.com>,
"Rafael J . Wysocki" <rafael.j.wysocki@intel.com>
Subject: Re: [PATCH V2 15/21] clocksource/timer-riscv: Refactor riscv_timer_init_dt()
Date: Mon, 20 Feb 2023 20:47:26 +0100 [thread overview]
Message-ID: <20230220194726.meppdac4y7qdjsoj@orel> (raw)
In-Reply-To: <20230216182043.1946553-16-sunilvl@ventanamicro.com>
On Thu, Feb 16, 2023 at 11:50:37PM +0530, Sunil V L wrote:
> Refactor the timer init function such that few things can be
> shared by both DT and ACPI based platforms.
>
> Co-developed-by: Anup Patel <apatel@ventanamicro.com>
> Signed-off-by: Anup Patel <apatel@ventanamicro.com>
> Signed-off-by: Sunil V L <sunilvl@ventanamicro.com>
> Acked-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
> ---
> drivers/clocksource/timer-riscv.c | 82 +++++++++++++++----------------
> 1 file changed, 40 insertions(+), 42 deletions(-)
>
> diff --git a/drivers/clocksource/timer-riscv.c b/drivers/clocksource/timer-riscv.c
> index 1b4b36df5484..2ae8e300d303 100644
> --- a/drivers/clocksource/timer-riscv.c
> +++ b/drivers/clocksource/timer-riscv.c
> @@ -119,61 +119,28 @@ static irqreturn_t riscv_timer_interrupt(int irq, void *dev_id)
> return IRQ_HANDLED;
> }
>
> -static int __init riscv_timer_init_dt(struct device_node *n)
> +static int __init riscv_timer_init_common(void)
> {
> - int cpuid, error;
> - unsigned long hartid;
> - struct device_node *child;
> - struct irq_domain *domain;
> + int error;
> + struct irq_domain *domain = NULL;
domain is always assigned below, so we don't need to set it NULL here.
> + struct fwnode_handle *intc_fwnode = riscv_get_intc_hwnode();
>
> - error = riscv_of_processor_hartid(n, &hartid);
> - if (error < 0) {
> - pr_warn("Not valid hartid for node [%pOF] error = [%lu]\n",
> - n, hartid);
> - return error;
> - }
> -
> - cpuid = riscv_hartid_to_cpuid(hartid);
> - if (cpuid < 0) {
> - pr_warn("Invalid cpuid for hartid [%lu]\n", hartid);
> - return cpuid;
> - }
> -
> - if (cpuid != smp_processor_id())
> - return 0;
> -
> - child = of_find_compatible_node(NULL, NULL, "riscv,timer");
> - if (child) {
> - riscv_timer_cannot_wake_cpu = of_property_read_bool(child,
> - "riscv,timer-cannot-wake-cpu");
> - of_node_put(child);
> - }
> -
> - domain = NULL;
> - child = of_get_compatible_child(n, "riscv,cpu-intc");
> - if (!child) {
> - pr_err("Failed to find INTC node [%pOF]\n", n);
> - return -ENODEV;
> - }
> - domain = irq_find_host(child);
> - of_node_put(child);
> + domain = irq_find_matching_fwnode(intc_fwnode, DOMAIN_BUS_ANY);
> if (!domain) {
> - pr_err("Failed to find IRQ domain for node [%pOF]\n", n);
> + pr_err("Failed to find irq_domain for INTC node [%pfwP]\n",
> + intc_fwnode);
> return -ENODEV;
> }
>
> riscv_clock_event_irq = irq_create_mapping(domain, RV_IRQ_TIMER);
> if (!riscv_clock_event_irq) {
> - pr_err("Failed to map timer interrupt for node [%pOF]\n", n);
> + pr_err("Failed to map timer interrupt for node [%pfwP]\n", intc_fwnode);
> return -ENODEV;
> }
>
> - pr_info("%s: Registering clocksource cpuid [%d] hartid [%lu]\n",
> - __func__, cpuid, hartid);
> error = clocksource_register_hz(&riscv_clocksource, riscv_timebase);
> if (error) {
> - pr_err("RISCV timer register failed [%d] for cpu = [%d]\n",
> - error, cpuid);
> + pr_err("RISCV timer registration failed [%d]\n", error);
> return error;
> }
>
> @@ -202,4 +169,35 @@ static int __init riscv_timer_init_dt(struct device_node *n)
> return error;
> }
>
> +static int __init riscv_timer_init_dt(struct device_node *n)
> +{
> + int cpuid, error;
> + unsigned long hartid;
> + struct device_node *child;
> +
> + error = riscv_of_processor_hartid(n, &hartid);
> + if (error < 0) {
> + pr_warn("Invalid hartid for node [%pOF] error = [%lu]\n",
> + n, hartid);
> + return error;
> + }
> +
> + cpuid = riscv_hartid_to_cpuid(hartid);
> + if (cpuid < 0) {
> + pr_warn("Invalid cpuid for hartid [%lu]\n", hartid);
> + return cpuid;
> + }
> +
> + if (cpuid != smp_processor_id())
> + return 0;
> +
> + child = of_find_compatible_node(NULL, NULL, "riscv,timer");
> + if (child) {
> + riscv_timer_cannot_wake_cpu = of_property_read_bool(child,
> + "riscv,timer-cannot-wake-cpu");
> + of_node_put(child);
> + }
need blank line here
> + return riscv_timer_init_common();
> +}
> +
> TIMER_OF_DECLARE(riscv_timer, "riscv", riscv_timer_init_dt);
> --
> 2.34.1
>
Otherwise,
Reviewed-by: Andrew Jones <ajones@ventanamicro.com>
_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv
next prev parent reply other threads:[~2023-02-20 19:47 UTC|newest]
Thread overview: 106+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-02-16 18:20 [PATCH V2 00/21] Add basic ACPI support for RISC-V Sunil V L
2023-02-16 18:20 ` Sunil V L
2023-02-16 18:20 ` [PATCH V2 01/21] riscv: move sbi_init() earlier before jump_label_init() Sunil V L
2023-02-16 18:20 ` Sunil V L
2023-02-16 18:20 ` [PATCH V2 02/21] ACPICA: MADT: Add RISC-V INTC interrupt controller Sunil V L
2023-02-16 18:20 ` Sunil V L
2023-02-16 18:20 ` [PATCH V2 03/21] ACPICA: Add structure definitions for RISC-V RHCT Sunil V L
2023-02-16 18:20 ` Sunil V L
2023-02-16 18:20 ` [PATCH V2 04/21] RISC-V: Add support to build the ACPI core Sunil V L
2023-02-16 18:20 ` Sunil V L
2023-02-20 15:44 ` Andrew Jones
2023-02-20 15:44 ` Andrew Jones
2023-02-24 9:00 ` Sunil V L
2023-02-24 9:00 ` Sunil V L
2023-02-16 18:20 ` [PATCH V2 05/21] ACPI: Kconfig: Enable ACPI_PROCESSOR for RISC-V Sunil V L
2023-02-16 18:20 ` Sunil V L
2023-02-20 16:05 ` Andrew Jones
2023-02-20 16:05 ` Andrew Jones
2023-02-24 8:45 ` Sunil V L
2023-02-24 8:45 ` Sunil V L
2023-02-16 18:20 ` [PATCH V2 06/21] ACPI: OSL: Make should_use_kmap() 0 " Sunil V L
2023-02-16 18:20 ` Sunil V L
2023-02-16 18:20 ` [PATCH V2 07/21] ACPI: processor_core: RISC-V: Enable mapping processor to the hartid Sunil V L
2023-02-16 18:20 ` Sunil V L
2023-02-20 16:10 ` Andrew Jones
2023-02-20 16:10 ` Andrew Jones
2023-02-16 18:20 ` [PATCH V2 08/21] drivers/acpi: RISC-V: Add RHCT related code Sunil V L
2023-02-16 18:20 ` Sunil V L
2023-02-20 16:36 ` Andrew Jones
2023-02-20 16:36 ` Andrew Jones
2023-02-24 12:03 ` Sunil V L
2023-02-24 12:03 ` Sunil V L
2023-02-16 18:20 ` [PATCH V2 09/21] RISC-V: smpboot: Create wrapper smp_setup() Sunil V L
2023-02-16 18:20 ` Sunil V L
2023-02-20 16:37 ` Andrew Jones
2023-02-20 16:37 ` Andrew Jones
2023-02-16 18:20 ` [PATCH V2 10/21] RISC-V: smpboot: Add ACPI support in smp_setup() Sunil V L
2023-02-16 18:20 ` Sunil V L
2023-02-20 17:08 ` Andrew Jones
2023-02-20 17:08 ` Andrew Jones
2023-02-24 16:50 ` Sunil V L
2023-02-24 16:50 ` Sunil V L
2023-02-24 17:06 ` Andrew Jones
2023-02-24 17:06 ` Andrew Jones
2023-02-16 18:20 ` [PATCH V2 11/21] RISC-V: ACPI: Add a function to retrieve the hartid Sunil V L
2023-02-16 18:20 ` Sunil V L
2023-02-20 17:34 ` Andrew Jones
2023-02-20 17:34 ` Andrew Jones
2023-02-16 18:20 ` [PATCH V2 12/21] RISC-V: cpufeature: Add ACPI support in riscv_fill_hwcap() Sunil V L
2023-02-16 18:20 ` Sunil V L
2023-02-20 17:45 ` Andrew Jones
2023-02-20 17:45 ` Andrew Jones
2023-02-16 18:20 ` [PATCH V2 13/21] RISC-V: cpu: Enable cpuinfo for ACPI systems Sunil V L
2023-02-16 18:20 ` Sunil V L
2023-02-20 17:54 ` Andrew Jones
2023-02-20 17:54 ` Andrew Jones
2023-02-24 12:27 ` Sunil V L
2023-02-24 12:27 ` Sunil V L
2023-02-16 18:20 ` [PATCH V2 14/21] irqchip/riscv-intc: Add ACPI support Sunil V L
2023-02-16 18:20 ` Sunil V L
2023-02-20 19:37 ` Andrew Jones
2023-02-20 19:37 ` Andrew Jones
2023-02-24 12:29 ` Sunil V L
2023-02-24 12:29 ` Sunil V L
2023-02-16 18:20 ` [PATCH V2 15/21] clocksource/timer-riscv: Refactor riscv_timer_init_dt() Sunil V L
2023-02-16 18:20 ` Sunil V L
2023-02-20 19:47 ` Andrew Jones [this message]
2023-02-20 19:47 ` Andrew Jones
2023-02-16 18:20 ` [PATCH V2 16/21] clocksource/timer-riscv: Add ACPI support Sunil V L
2023-02-16 18:20 ` Sunil V L
2023-02-20 19:51 ` Andrew Jones
2023-02-20 19:51 ` Andrew Jones
2023-02-16 18:20 ` [PATCH V2 17/21] RISC-V: time.c: Add ACPI support for time_init() Sunil V L
2023-02-16 18:20 ` Sunil V L
2023-02-20 19:58 ` Andrew Jones
2023-02-20 19:58 ` Andrew Jones
2023-02-24 12:33 ` Sunil V L
2023-02-24 12:33 ` Sunil V L
2023-02-16 18:20 ` [PATCH V2 18/21] RISC-V: Add ACPI initialization in setup_arch() Sunil V L
2023-02-16 18:20 ` Sunil V L
2023-02-20 20:07 ` Andrew Jones
2023-02-20 20:07 ` Andrew Jones
2023-02-24 12:36 ` Sunil V L
2023-02-24 12:36 ` Sunil V L
2023-02-24 13:07 ` Andrew Jones
2023-02-24 13:07 ` Andrew Jones
2023-02-24 14:44 ` Sunil V L
2023-02-24 14:44 ` Sunil V L
2023-02-16 18:20 ` [PATCH V2 19/21] RISC-V: Enable ACPI in defconfig Sunil V L
2023-02-16 18:20 ` Sunil V L
2023-02-20 20:09 ` Andrew Jones
2023-02-20 20:09 ` Andrew Jones
2023-02-24 8:46 ` Sunil V L
2023-02-24 8:46 ` Sunil V L
2023-02-16 18:20 ` [PATCH V2 20/21] MAINTAINERS: Add entry for drivers/acpi/riscv Sunil V L
2023-02-16 18:20 ` Sunil V L
2023-02-20 20:14 ` Andrew Jones
2023-02-20 20:14 ` Andrew Jones
2023-02-24 12:38 ` Sunil V L
2023-02-24 12:38 ` Sunil V L
2023-02-16 18:20 ` [PATCH V2 21/21] Documentation/kernel-parameters.txt: Add RISC-V for ACPI parameter Sunil V L
2023-02-16 18:20 ` Sunil V L
2023-02-20 20:15 ` Andrew Jones
2023-02-20 20:15 ` Andrew Jones
2023-02-24 12:37 ` Sunil V L
2023-02-24 12:37 ` Sunil V L
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=20230220194726.meppdac4y7qdjsoj@orel \
--to=ajones@ventanamicro.com \
--cc=aou@eecs.berkeley.edu \
--cc=apatel@ventanamicro.com \
--cc=atishp@rivosinc.com \
--cc=conor.dooley@microchip.com \
--cc=corbet@lwn.net \
--cc=lenb@kernel.org \
--cc=linux-acpi@vger.kernel.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-riscv@lists.infradead.org \
--cc=maz@kernel.org \
--cc=palmer@dabbelt.com \
--cc=paul.walmsley@sifive.com \
--cc=rafael.j.wysocki@intel.com \
--cc=rafael@kernel.org \
--cc=sunilvl@ventanamicro.com \
--cc=tglx@linutronix.de \
/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.