From: Hanjun Guo <hanjun.guo@linaro.org> To: Marc Zyngier <marc.zyngier@arm.com>, "Rafael J. Wysocki" <rjw@rjwysocki.net>, Lorenzo Pieralisi <lorenzo.pieralisi@arm.com> Cc: linux-acpi@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linuxarm@huawei.com, Thomas Gleixner <tglx@linutronix.de>, Greg KH <gregkh@linuxfoundation.org>, Tomasz Nowicki <tn@semihalf.com>, Ma Jun <majun258@huawei.com>, Kefeng Wang <wangkefeng.wang@huawei.com>, Agustin Vega-Frias <agustinv@codeaurora.org>, Sinan Kaya <okaya@codeaurora.org>, charles.garcia-tobin@arm.com, huxinwei@huawei.com, yimin@huawei.com, Jon Masters <jcm@redhat.com>, Hanjun Guo <hanjun.guo@linaro.org> Subject: [PATCH v6 07/14] irqchip: gicv3-its: platform-msi: scan MADT to create platform msi domain Date: Mon, 2 Jan 2017 21:31:38 +0800 [thread overview] Message-ID: <1483363905-2806-8-git-send-email-hanjun.guo@linaro.org> (raw) In-Reply-To: <1483363905-2806-1-git-send-email-hanjun.guo@linaro.org> With the introduction of its_pmsi_init_one(), we can add some code on top for ACPI support of platform MSI. We are scanning the MADT table to get the ITS entry(ies), then use the information to create the platform msi domain for devices connect to it, just like the PCI MSI for ITS did. Signed-off-by: Hanjun Guo <hanjun.guo@linaro.org> Tested-by: Sinan Kaya <okaya@codeaurora.org> Tested-by: Majun <majun258@huawei.com> Tested-by: Xinwei Kong <kong.kongxinwei@hisilicon.com> Cc: Marc Zyngier <marc.zyngier@arm.com> Cc: Tomasz Nowicki <tn@semihalf.com> Cc: Thomas Gleixner <tglx@linutronix.de> --- drivers/irqchip/irq-gic-v3-its-platform-msi.c | 36 +++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/drivers/irqchip/irq-gic-v3-its-platform-msi.c b/drivers/irqchip/irq-gic-v3-its-platform-msi.c index ff72704..0be0437 100644 --- a/drivers/irqchip/irq-gic-v3-its-platform-msi.c +++ b/drivers/irqchip/irq-gic-v3-its-platform-msi.c @@ -105,6 +105,41 @@ static int __init its_pmsi_init_one(struct fwnode_handle *fwnode, return 0; } +#ifdef CONFIG_ACPI +static int __init +its_pmsi_parse_madt(struct acpi_subtable_header *header, + const unsigned long end) +{ + struct acpi_madt_generic_translator *its_entry; + struct fwnode_handle *domain_handle; + const char *node_name; + int err = -ENXIO; + + its_entry = (struct acpi_madt_generic_translator *)header; + node_name = kasprintf(GFP_KERNEL, "ITS@0x%lx", + (long)its_entry->base_address); + domain_handle = iort_find_domain_token(its_entry->translation_id); + if (!domain_handle) { + pr_err("%s: Unable to locate ITS domain handle\n", node_name); + goto out; + } + + err = its_pmsi_init_one(domain_handle, node_name); + +out: + kfree(node_name); + return err; +} + +static void __init its_acpi_pmsi_init(void) +{ + acpi_table_parse_madt(ACPI_MADT_TYPE_GENERIC_TRANSLATOR, + its_pmsi_parse_madt, 0); +} +#else +static inline void its_acpi_pmsi_init(void) { } +#endif + static void __init its_pmsi_of_init(void) { struct device_node *np; @@ -121,6 +156,7 @@ static void __init its_pmsi_of_init(void) static int __init its_pmsi_init(void) { its_pmsi_of_init(); + its_acpi_pmsi_init(); return 0; } early_initcall(its_pmsi_init); -- 1.9.1
WARNING: multiple messages have this Message-ID (diff)
From: hanjun.guo@linaro.org (Hanjun Guo) To: linux-arm-kernel@lists.infradead.org Subject: [PATCH v6 07/14] irqchip: gicv3-its: platform-msi: scan MADT to create platform msi domain Date: Mon, 2 Jan 2017 21:31:38 +0800 [thread overview] Message-ID: <1483363905-2806-8-git-send-email-hanjun.guo@linaro.org> (raw) In-Reply-To: <1483363905-2806-1-git-send-email-hanjun.guo@linaro.org> With the introduction of its_pmsi_init_one(), we can add some code on top for ACPI support of platform MSI. We are scanning the MADT table to get the ITS entry(ies), then use the information to create the platform msi domain for devices connect to it, just like the PCI MSI for ITS did. Signed-off-by: Hanjun Guo <hanjun.guo@linaro.org> Tested-by: Sinan Kaya <okaya@codeaurora.org> Tested-by: Majun <majun258@huawei.com> Tested-by: Xinwei Kong <kong.kongxinwei@hisilicon.com> Cc: Marc Zyngier <marc.zyngier@arm.com> Cc: Tomasz Nowicki <tn@semihalf.com> Cc: Thomas Gleixner <tglx@linutronix.de> --- drivers/irqchip/irq-gic-v3-its-platform-msi.c | 36 +++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/drivers/irqchip/irq-gic-v3-its-platform-msi.c b/drivers/irqchip/irq-gic-v3-its-platform-msi.c index ff72704..0be0437 100644 --- a/drivers/irqchip/irq-gic-v3-its-platform-msi.c +++ b/drivers/irqchip/irq-gic-v3-its-platform-msi.c @@ -105,6 +105,41 @@ static int __init its_pmsi_init_one(struct fwnode_handle *fwnode, return 0; } +#ifdef CONFIG_ACPI +static int __init +its_pmsi_parse_madt(struct acpi_subtable_header *header, + const unsigned long end) +{ + struct acpi_madt_generic_translator *its_entry; + struct fwnode_handle *domain_handle; + const char *node_name; + int err = -ENXIO; + + its_entry = (struct acpi_madt_generic_translator *)header; + node_name = kasprintf(GFP_KERNEL, "ITS at 0x%lx", + (long)its_entry->base_address); + domain_handle = iort_find_domain_token(its_entry->translation_id); + if (!domain_handle) { + pr_err("%s: Unable to locate ITS domain handle\n", node_name); + goto out; + } + + err = its_pmsi_init_one(domain_handle, node_name); + +out: + kfree(node_name); + return err; +} + +static void __init its_acpi_pmsi_init(void) +{ + acpi_table_parse_madt(ACPI_MADT_TYPE_GENERIC_TRANSLATOR, + its_pmsi_parse_madt, 0); +} +#else +static inline void its_acpi_pmsi_init(void) { } +#endif + static void __init its_pmsi_of_init(void) { struct device_node *np; @@ -121,6 +156,7 @@ static void __init its_pmsi_of_init(void) static int __init its_pmsi_init(void) { its_pmsi_of_init(); + its_acpi_pmsi_init(); return 0; } early_initcall(its_pmsi_init); -- 1.9.1
next prev parent reply other threads:[~2017-01-02 13:31 UTC|newest] Thread overview: 98+ messages / expand[flat|nested] mbox.gz Atom feed top 2017-01-02 13:31 [PATCH v6 00/14] ACPI platform MSI support and its example mbigen Hanjun Guo 2017-01-02 13:31 ` Hanjun Guo 2017-01-02 13:31 ` [PATCH v6 01/14] ACPI: ARM64: IORT: minor cleanup for iort_match_node_callback() Hanjun Guo 2017-01-02 13:31 ` Hanjun Guo 2017-01-03 14:08 ` Lorenzo Pieralisi 2017-01-03 14:08 ` Lorenzo Pieralisi 2017-01-03 14:08 ` Lorenzo Pieralisi 2017-01-04 7:56 ` Hanjun Guo 2017-01-04 7:56 ` Hanjun Guo 2017-01-02 13:31 ` [PATCH v6 02/14] irqchip: gic-v3-its: keep the head file include in alphabetic order Hanjun Guo 2017-01-02 13:31 ` Hanjun Guo 2017-01-11 10:20 ` Matthias Brugger 2017-01-11 10:20 ` Matthias Brugger 2017-01-11 10:20 ` Matthias Brugger 2017-01-11 10:20 ` Matthias Brugger 2017-01-11 14:16 ` Hanjun Guo 2017-01-11 14:16 ` Hanjun Guo 2017-01-02 13:31 ` [PATCH v6 03/14] ACPI: ARM64: IORT: add missing comment for iort_dev_find_its_id() Hanjun Guo 2017-01-02 13:31 ` Hanjun Guo 2017-01-04 14:34 ` Lorenzo Pieralisi 2017-01-04 14:34 ` Lorenzo Pieralisi 2017-01-05 6:05 ` Hanjun Guo 2017-01-05 6:05 ` Hanjun Guo 2017-01-05 6:05 ` Hanjun Guo 2017-01-05 9:53 ` Lorenzo Pieralisi 2017-01-05 9:53 ` Lorenzo Pieralisi 2017-01-05 9:53 ` Lorenzo Pieralisi 2017-01-02 13:31 ` [PATCH v6 04/14] irqchip: gicv3-its: platform-msi: refactor its_pmsi_prepare() Hanjun Guo 2017-01-02 13:31 ` Hanjun Guo 2017-01-11 10:31 ` Matthias Brugger 2017-01-11 10:31 ` Matthias Brugger 2017-01-02 13:31 ` [PATCH v6 05/14] ACPI: platform-msi: retrieve dev id from IORT Hanjun Guo 2017-01-02 13:31 ` Hanjun Guo 2017-01-03 8:43 ` Tomasz Nowicki 2017-01-03 8:43 ` Tomasz Nowicki 2017-01-03 9:37 ` Tomasz Nowicki 2017-01-03 9:37 ` Tomasz Nowicki 2017-01-03 11:24 ` Tomasz Nowicki 2017-01-03 11:24 ` Tomasz Nowicki 2017-01-04 19:18 ` Lorenzo Pieralisi 2017-01-04 19:18 ` Lorenzo Pieralisi 2017-01-05 12:45 ` Hanjun Guo 2017-01-05 12:45 ` Hanjun Guo 2017-01-05 15:15 ` Lorenzo Pieralisi 2017-01-05 15:15 ` Lorenzo Pieralisi 2017-01-10 13:39 ` Hanjun Guo 2017-01-10 13:39 ` Hanjun Guo 2017-01-10 13:39 ` Hanjun Guo 2017-01-10 14:57 ` Lorenzo Pieralisi 2017-01-10 14:57 ` Lorenzo Pieralisi 2017-01-11 14:15 ` Hanjun Guo 2017-01-11 14:15 ` Hanjun Guo 2017-01-02 13:31 ` [PATCH v6 06/14] irqchip: gicv3-its: platform-msi: refactor its_pmsi_init() to prepare for ACPI Hanjun Guo 2017-01-02 13:31 ` Hanjun Guo 2017-01-03 7:41 ` Tomasz Nowicki 2017-01-03 7:41 ` Tomasz Nowicki 2017-01-04 7:02 ` Hanjun Guo 2017-01-04 7:02 ` Hanjun Guo 2017-01-04 7:29 ` Tomasz Nowicki 2017-01-04 7:29 ` Tomasz Nowicki 2017-01-04 8:25 ` Hanjun Guo 2017-01-04 8:25 ` Hanjun Guo 2017-01-04 9:02 ` Marc Zyngier 2017-01-04 9:02 ` Marc Zyngier 2017-01-04 10:19 ` Hanjun Guo 2017-01-04 10:19 ` Hanjun Guo 2017-01-02 13:31 ` Hanjun Guo [this message] 2017-01-02 13:31 ` [PATCH v6 07/14] irqchip: gicv3-its: platform-msi: scan MADT to create platform msi domain Hanjun Guo 2017-01-02 13:31 ` [PATCH v6 08/14] ACPI: ARM64: IORT: rework iort_node_get_id() Hanjun Guo 2017-01-02 13:31 ` Hanjun Guo 2017-01-04 17:58 ` Lorenzo Pieralisi 2017-01-04 17:58 ` Lorenzo Pieralisi 2017-01-05 8:19 ` Hanjun Guo 2017-01-05 8:19 ` Hanjun Guo 2017-01-05 8:19 ` Hanjun Guo 2017-01-02 13:31 ` [PATCH v6 09/14] ACPI: platform: setup MSI domain for ACPI based platform device Hanjun Guo 2017-01-02 13:31 ` Hanjun Guo 2017-01-02 21:17 ` Rafael J. Wysocki 2017-01-02 21:17 ` Rafael J. Wysocki 2017-01-02 21:17 ` Rafael J. Wysocki 2017-01-02 13:31 ` [PATCH v6 10/14] ACPI: ARM64: IORT: rework iort_node_get_id() for NC->SMMU->ITS case Hanjun Guo 2017-01-02 13:31 ` Hanjun Guo 2017-01-02 22:30 ` Sinan Kaya 2017-01-02 22:30 ` Sinan Kaya 2017-01-02 22:30 ` Sinan Kaya 2017-01-03 0:08 ` Hanjun Guo 2017-01-03 0:08 ` Hanjun Guo 2017-01-03 0:08 ` Hanjun Guo 2017-01-02 13:31 ` [PATCH v6 11/14] msi: platform: make platform_msi_create_device_domain() ACPI aware Hanjun Guo 2017-01-02 13:31 ` Hanjun Guo 2017-01-04 16:49 ` Lorenzo Pieralisi 2017-01-04 16:49 ` Lorenzo Pieralisi 2017-01-02 13:31 ` [PATCH v6 12/14] irqchip: mbigen: drop module owner Hanjun Guo 2017-01-02 13:31 ` Hanjun Guo 2017-01-02 13:31 ` [PATCH v6 13/14] irqchip: mbigen: introduce mbigen_of_create_domain() Hanjun Guo 2017-01-02 13:31 ` Hanjun Guo 2017-01-02 13:31 ` [PATCH v6 14/14] irqchip: mbigen: Add ACPI support Hanjun Guo 2017-01-02 13:31 ` Hanjun Guo
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=1483363905-2806-8-git-send-email-hanjun.guo@linaro.org \ --to=hanjun.guo@linaro.org \ --cc=agustinv@codeaurora.org \ --cc=charles.garcia-tobin@arm.com \ --cc=gregkh@linuxfoundation.org \ --cc=huxinwei@huawei.com \ --cc=jcm@redhat.com \ --cc=linux-acpi@vger.kernel.org \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linuxarm@huawei.com \ --cc=lorenzo.pieralisi@arm.com \ --cc=majun258@huawei.com \ --cc=marc.zyngier@arm.com \ --cc=okaya@codeaurora.org \ --cc=rjw@rjwysocki.net \ --cc=tglx@linutronix.de \ --cc=tn@semihalf.com \ --cc=wangkefeng.wang@huawei.com \ --cc=yimin@huawei.com \ /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: linkBe 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.