From: Jessica Clarke <jrtc27@jrtc27.com>
To: Sunil V L <sunilvl@ventanamicro.com>
Cc: Palmer Dabbelt <palmer@dabbelt.com>,
Albert Ou <aou@eecs.berkeley.edu>,
"Rafael J . Wysocki" <rafael@kernel.org>,
Len Brown <lenb@kernel.org>, Thomas Gleixner <tglx@linutronix.de>,
Marc Zyngier <maz@kernel.org>,
Daniel Lezcano <daniel.lezcano@linaro.org>,
Jonathan Corbet <corbet@lwn.net>,
Anup Patel <apatel@ventanamicro.com>,
linux-doc@vger.kernel.org, Atish Patra <atishp@rivosinc.com>,
Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
linux-acpi@vger.kernel.org, linux-riscv@lists.infradead.org,
Andrew Jones <ajones@ventanamicro.com>
Subject: Re: [PATCH 11/24] RISC-V: ACPI: irqchip/riscv-intc: Add ACPI support
Date: Mon, 30 Jan 2023 23:38:49 +0000 [thread overview]
Message-ID: <AFDD5897-27A3-4418-B08B-9650B543692D@jrtc27.com> (raw)
In-Reply-To: <20230130182225.2471414-12-sunilvl@ventanamicro.com>
On 30 Jan 2023, at 18:22, Sunil V L <sunilvl@ventanamicro.com> wrote:
>
> Add support for initializing the RISC-V INTC driver on ACPI based
> platforms.
>
> Signed-off-by: Sunil V L <sunilvl@ventanamicro.com>
> ---
> drivers/irqchip/irq-riscv-intc.c | 79 +++++++++++++++++++++++++++-----
> 1 file changed, 67 insertions(+), 12 deletions(-)
>
> diff --git a/drivers/irqchip/irq-riscv-intc.c b/drivers/irqchip/irq-riscv-intc.c
> index f229e3e66387..044ec92fcba7 100644
> --- a/drivers/irqchip/irq-riscv-intc.c
> +++ b/drivers/irqchip/irq-riscv-intc.c
> @@ -6,6 +6,7 @@
> */
>
> #define pr_fmt(fmt) "riscv-intc: " fmt
> +#include <linux/acpi.h>
> #include <linux/atomic.h>
> #include <linux/bits.h>
> #include <linux/cpu.h>
> @@ -112,6 +113,30 @@ static struct fwnode_handle *riscv_intc_hwnode(void)
> return intc_domain->fwnode;
> }
>
> +static int __init riscv_intc_init_common(struct fwnode_handle *fn)
> +{
> + int rc;
> +
> + intc_domain = irq_domain_create_linear(fn, BITS_PER_LONG,
> + &riscv_intc_domain_ops, NULL);
> + if (!intc_domain) {
> + pr_err("unable to add IRQ domain\n");
> + return -ENXIO;
> + }
> +
> + rc = set_handle_irq(&riscv_intc_irq);
> + if (rc) {
> + pr_err("failed to set irq handler\n");
> + return rc;
> + }
> +
> + riscv_set_intc_hwnode_fn(riscv_intc_hwnode);
> +
> + pr_info("%d local interrupts mapped\n", BITS_PER_LONG);
> +
> + return 0;
> +}
> +
> static int __init riscv_intc_init(struct device_node *node,
> struct device_node *parent)
> {
> @@ -133,24 +158,54 @@ static int __init riscv_intc_init(struct device_node *node,
> if (riscv_hartid_to_cpuid(hartid) != smp_processor_id())
> return 0;
>
> - intc_domain = irq_domain_add_linear(node, BITS_PER_LONG,
> - &riscv_intc_domain_ops, NULL);
> - if (!intc_domain) {
> - pr_err("unable to add IRQ domain\n");
> - return -ENXIO;
> - }
> -
> - rc = set_handle_irq(&riscv_intc_irq);
> + rc = riscv_intc_init_common(of_node_to_fwnode(node));
> if (rc) {
> - pr_err("failed to set irq handler\n");
> + pr_err("failed to initialize INTC\n");
> return rc;
> }
>
> - riscv_set_intc_hwnode_fn(riscv_intc_hwnode);
> + return 0;
> +}
>
> - pr_info("%d local interrupts mapped\n", BITS_PER_LONG);
> +IRQCHIP_DECLARE(riscv, "riscv,cpu-intc", riscv_intc_init);
> +
> +#ifdef CONFIG_ACPI
> +
> +static int __init
> +riscv_intc_acpi_init(union acpi_subtable_headers *header,
> + const unsigned long end)
> +{
> + int rc;
> + struct fwnode_handle *fn;
> + struct acpi_madt_rintc *rintc;
> +
> + rintc = (struct acpi_madt_rintc *)header;
> +
> + /*
> + * The ACPI MADT will have one INTC for each CPU (or HART)
> + * so riscv_intc_acpi_init() function will be called once
> + * for each INTC. We only need to do INTC initialization
> + * for the INTC belonging to the boot CPU (or boot HART).
> + */
> + if (riscv_hartid_to_cpuid(rintc->hart_id) != smp_processor_id())
> + return 0;
Why are we carrying forward this mess to ACPI? The DT bindings are
awful and a complete pain to deal with, as evidenced by how both Linux
and FreeBSD have to go out of their way to do special things to only
look at one of the many copies of the same thing.
Jess
> +
> + fn = irq_domain_alloc_named_fwnode("RISCV-INTC");
> + WARN_ON(fn == NULL);
> + if (!fn) {
> + pr_err("unable to allocate INTC FW node\n");
> + return -1;
> + }
> +
> + rc = riscv_intc_init_common(fn);
> + if (rc) {
> + pr_err("failed to initialize INTC\n");
> + return rc;
> + }
>
> return 0;
> }
>
> -IRQCHIP_DECLARE(riscv, "riscv,cpu-intc", riscv_intc_init);
> +IRQCHIP_ACPI_DECLARE(riscv_intc, ACPI_MADT_TYPE_RINTC,
> + NULL, 1, riscv_intc_acpi_init);
> +#endif
> --
> 2.38.0
>
>
> _______________________________________________
> linux-riscv mailing list
> linux-riscv@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-riscv
next prev parent reply other threads:[~2023-01-30 23:38 UTC|newest]
Thread overview: 66+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-01-30 18:22 [PATCH 00/24] Add basic ACPI support for RISC-V Sunil V L
2023-01-30 18:22 ` [PATCH 01/24] riscv: move sbi_init() earlier before jump_label_init() Sunil V L
2023-01-30 18:22 ` [PATCH 02/24] ACPICA: MADT: Add RISC-V INTC interrupt controller Sunil V L
2023-02-08 19:59 ` Conor Dooley
2023-02-13 5:13 ` Sunil V L
2023-01-30 18:22 ` [PATCH 03/24] ACPICA: Add structure definitions for RISC-V RHCT Sunil V L
2023-01-30 18:22 ` [PATCH 04/24] RISC-V: ACPI: Add empty headers to enable ACPI core Sunil V L
2023-02-08 19:55 ` Conor Dooley
2023-01-30 18:22 ` [PATCH 05/24] RISC-V: ACPI: Add basic functions to build " Sunil V L
2023-02-08 20:58 ` Conor Dooley
2023-02-13 15:16 ` Sunil V L
2023-01-30 18:22 ` [PATCH 06/24] RISC-V: ACPI: Add PCI " Sunil V L
2023-02-08 21:26 ` Conor Dooley
2023-02-13 15:23 ` Sunil V L
2023-02-13 17:14 ` Conor Dooley
2023-02-13 17:26 ` Jessica Clarke
2023-02-14 4:42 ` Sunil V L
2023-01-30 18:22 ` [PATCH 07/24] RISC-V: ACPI: Enable ACPI build infrastructure Sunil V L
2023-02-08 21:31 ` Conor Dooley
2023-02-13 15:23 ` Sunil V L
2023-01-30 18:22 ` [PATCH 08/24] ACPI: Enable ACPI_PROCESSOR for RISC-V Sunil V L
2023-01-30 18:22 ` [PATCH 09/24] ACPI: OSL: Make should_use_kmap() 0 " Sunil V L
2023-01-30 18:22 ` [PATCH 10/24] ACPI: processor_core: RISC-V: Enable mapping processor to the hartid Sunil V L
2023-01-30 18:22 ` [PATCH 11/24] RISC-V: ACPI: irqchip/riscv-intc: Add ACPI support Sunil V L
2023-01-30 23:38 ` Jessica Clarke [this message]
2023-01-31 9:11 ` Sunil V L
2023-02-08 21:49 ` Conor Dooley
2023-02-13 15:25 ` Sunil V L
2023-01-30 18:22 ` [PATCH 12/24] RISC-V: ACPI: smpboot: Create wrapper smp_setup() Sunil V L
2023-02-08 21:34 ` Conor Dooley
2023-01-30 18:22 ` [PATCH 13/24] RISC-V: ACPI: smpboot: Add ACPI support in smp_setup() Sunil V L
2023-02-08 22:10 ` Conor Dooley
2023-02-13 15:27 ` Sunil V L
2023-01-30 18:22 ` [PATCH 14/24] RISC-V: ACPI: smpboot: Add function to retrieve the hartid Sunil V L
2023-02-09 20:30 ` Conor Dooley
2023-02-13 17:00 ` Sunil V L
2023-01-30 18:22 ` [PATCH 15/24] clocksource/timer-riscv: Refactor riscv_timer_init_dt() Sunil V L
2023-02-09 20:54 ` Conor Dooley
2023-02-13 17:22 ` Sunil V L
2023-01-30 18:22 ` [PATCH 16/24] RISC-V: ACPI: clocksource/timer-riscv: Add ACPI support Sunil V L
2023-02-09 20:58 ` Conor Dooley
2023-02-13 17:39 ` Sunil V L
2023-01-30 18:22 ` [PATCH 17/24] ACPI: RISC-V: drivers/acpi: Add RHCT related code Sunil V L
2023-01-30 18:22 ` [PATCH 18/24] RISC-V: ACPI: time.c: Add ACPI support for time_init() Sunil V L
2023-01-30 18:22 ` [PATCH 19/24] RISC-V: ACPI: cpufeature: Add ACPI support in riscv_fill_hwcap() Sunil V L
2023-02-09 21:47 ` Conor Dooley
2023-02-13 17:51 ` Sunil V L
2023-01-30 18:22 ` [PATCH 20/24] RISC-V: ACPI: cpu: Enable cpuinfo for ACPI systems Sunil V L
2023-02-09 21:13 ` Conor Dooley
2023-02-13 17:42 ` Sunil V L
2023-01-30 18:22 ` [PATCH 21/24] RISC-V: ACPI: Add ACPI initialization in setup_arch() Sunil V L
2023-02-09 21:53 ` Conor Dooley
2023-02-13 17:52 ` Sunil V L
2023-01-30 18:22 ` [PATCH 22/24] RISC-V: ACPI: Enable ACPI in defconfig Sunil V L
2023-01-30 23:47 ` Conor Dooley
2023-01-31 8:41 ` Sunil V L
2023-01-30 18:22 ` [PATCH 23/24] MAINTAINERS: Add entry for drivers/acpi/riscv Sunil V L
2023-02-09 21:54 ` Conor Dooley
2023-02-13 17:53 ` Sunil V L
2023-01-30 18:22 ` [PATCH 24/24] Documentation/kernel-parameters.txt: Add RISC-V for ACPI parameter Sunil V L
2023-02-09 2:02 ` Bagas Sanjaya
2023-02-13 15:29 ` Sunil V L
2023-01-30 19:11 ` [PATCH 00/24] Add basic ACPI support for RISC-V Rafael J. Wysocki
2023-02-08 18:28 ` Conor Dooley
2023-02-08 18:50 ` Conor Dooley
2023-02-13 4:51 ` 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=AFDD5897-27A3-4418-B08B-9650B543692D@jrtc27.com \
--to=jrtc27@jrtc27.com \
--cc=ajones@ventanamicro.com \
--cc=aou@eecs.berkeley.edu \
--cc=apatel@ventanamicro.com \
--cc=atishp@rivosinc.com \
--cc=corbet@lwn.net \
--cc=daniel.lezcano@linaro.org \
--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=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 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).