Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752603AbcL3I7I (ORCPT ); Fri, 30 Dec 2016 03:59:08 -0500 Received: from szxga03-in.huawei.com ([119.145.14.66]:31255 "EHLO szxga03-in.huawei.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751820AbcL3I7F (ORCPT ); Fri, 30 Dec 2016 03:59:05 -0500 Subject: Re: [PATCH v5 07/14] irqchip: gicv3-its: platform-msi: scan MADT to create platform msi domain To: Hanjun Guo , Marc Zyngier , "Rafael J. Wysocki" , Lorenzo Pieralisi References: <1482384922-21507-1-git-send-email-guohanjun@huawei.com> <1482384922-21507-8-git-send-email-guohanjun@huawei.com> CC: Charles Garcia-Tobin , , , Tomasz Nowicki , , , Sinan Kaya , , Hanjun Guo , Greg KH , "Thomas Gleixner" , Agustin Vega-Frias , From: Xinwei Kong Message-ID: <5866218C.2050901@hisilicon.com> Date: Fri, 30 Dec 2016 16:57:48 +0800 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101 Thunderbird/38.5.1 MIME-Version: 1.0 In-Reply-To: <1482384922-21507-8-git-send-email-guohanjun@huawei.com> Content-Type: text/plain; charset="windows-1252"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [10.57.64.103] X-CFilter-Loop: Reflected Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2432 Lines: 74 On 2016/12/22 13:35, Hanjun Guo wrote: > From: Hanjun Guo > > 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 > Tested-by: Sinan Kaya > Cc: Marc Zyngier > Cc: Tomasz Nowicki > Cc: Thomas Gleixner > --- > 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); Tested-by: Xinwei Kong