From: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com> To: Hanjun Guo <guohanjun@huawei.com>, Marc Zyngier <marc.zyngier@arm.com> Cc: "Rafael J. Wysocki" <rafael@kernel.org>, linux-acpi@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, 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>, Sinan Kaya <okaya@codeaurora.org>, huxinwei@huawei.com, yimin@huawei.com, linuxarm@huawei.com, Hanjun Guo <hanjun.guo@linaro.org> Subject: Re: [PATCH v9 10/15] ACPI: platform-msi: retrieve dev id from IORT Date: Wed, 29 Mar 2017 11:14:00 +0100 [thread overview] Message-ID: <20170329101400.GA10807@red-moon> (raw) In-Reply-To: <1488890410-15503-11-git-send-email-guohanjun@huawei.com> Hi Hanjun, Marc, On Tue, Mar 07, 2017 at 08:40:05PM +0800, Hanjun Guo wrote: > From: Hanjun Guo <hanjun.guo@linaro.org> > > For devices connecting to ITS, the devices need to identify themself > through a dev id; this dev id is represented in the IORT table in named > component node [1] for platform devices, so this patch adds code that > scans the IORT table to retrieve the devices' dev id. > > Leveraging the iort_node_map_platform_id() IORT API, add a new function > call, iort_pmsi_get_dev_id() and use it in its_pmsi_prepare() to allow > retrieving dev id in ACPI platforms. > > [1]: https://static.docs.arm.com/den0049/b/DEN0049B_IO_Remapping_Table.pdf > > Signed-off-by: Hanjun Guo <hanjun.guo@linaro.org> > [lorenzo.pieralisi@arm.com: rewrote commit log] > Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com> > Tested-by: Ming Lei <ming.lei@canonical.com> > Tested-by: Wei Xu <xuwei5@hisilicon.com> > Tested-by: Sinan Kaya <okaya@codeaurora.org> > Cc: Marc Zyngier <marc.zyngier@arm.com> > Cc: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com> > Cc: Tomasz Nowicki <tn@semihalf.com> > Cc: Thomas Gleixner <tglx@linutronix.de> > --- > drivers/acpi/arm64/iort.c | 24 ++++++++++++++++++++++++ > drivers/irqchip/irq-gic-v3-its-platform-msi.c | 3 ++- > include/linux/acpi_iort.h | 5 +++++ > 3 files changed, 31 insertions(+), 1 deletion(-) To simplify merging ACPI/IRQCHIP changes via different trees it would be good to split this patch; I am not sure what's the best way of handling it though given that we would end up in a merge ordering dependency anyway (ie we can create an empty stub for iort_pmsi_get_dev_id() but that would create a dependency between ARM64 and irqchip trees anyway). Please let me know what's your preferred way of handling this. Thanks, Lorenzo > diff --git a/drivers/acpi/arm64/iort.c b/drivers/acpi/arm64/iort.c > index 83cd59d..fb95ceb 100644 > --- a/drivers/acpi/arm64/iort.c > +++ b/drivers/acpi/arm64/iort.c > @@ -468,6 +468,30 @@ u32 iort_msi_map_rid(struct device *dev, u32 req_id) > } > > /** > + * iort_pmsi_get_dev_id() - Get the device id for a device > + * @dev: The device for which the mapping is to be done. > + * @dev_id: The device ID found. > + * > + * Returns: 0 for successful find a dev id, -ENODEV on error > + */ > +int iort_pmsi_get_dev_id(struct device *dev, u32 *dev_id) > +{ > + int i; > + struct acpi_iort_node *node; > + > + node = iort_find_dev_node(dev); > + if (!node) > + return -ENODEV; > + > + for (i = 0; i < node->mapping_count; i++) { > + if (iort_node_map_platform_id(node, dev_id, IORT_MSI_TYPE, i)) > + return 0; > + } > + > + return -ENODEV; > +} > + > +/** > * iort_dev_find_its_id() - Find the ITS identifier for a device > * @dev: The device. > * @req_id: Device's requester ID > diff --git a/drivers/irqchip/irq-gic-v3-its-platform-msi.c b/drivers/irqchip/irq-gic-v3-its-platform-msi.c > index e4ba9f4..e801fc0 100644 > --- a/drivers/irqchip/irq-gic-v3-its-platform-msi.c > +++ b/drivers/irqchip/irq-gic-v3-its-platform-msi.c > @@ -57,7 +57,8 @@ static int its_pmsi_prepare(struct irq_domain *domain, struct device *dev, > > msi_info = msi_get_domain_info(domain->parent); > > - ret = of_pmsi_get_dev_id(domain, dev, &dev_id); > + ret = dev->of_node ? of_pmsi_get_dev_id(domain, dev, &dev_id) : > + iort_pmsi_get_dev_id(dev, &dev_id); > if (ret) > return ret; > > diff --git a/include/linux/acpi_iort.h b/include/linux/acpi_iort.h > index 77e0809..d074c77 100644 > --- a/include/linux/acpi_iort.h > +++ b/include/linux/acpi_iort.h > @@ -34,6 +34,7 @@ > bool iort_node_match(u8 type); > u32 iort_msi_map_rid(struct device *dev, u32 req_id); > struct irq_domain *iort_get_device_domain(struct device *dev, u32 req_id); > +int iort_pmsi_get_dev_id(struct device *dev, u32 *dev_id); > /* IOMMU interface */ > void iort_set_dma_mask(struct device *dev); > const struct iommu_ops *iort_iommu_configure(struct device *dev); > @@ -45,6 +46,10 @@ static inline u32 iort_msi_map_rid(struct device *dev, u32 req_id) > static inline struct irq_domain *iort_get_device_domain(struct device *dev, > u32 req_id) > { return NULL; } > + > +static inline int iort_pmsi_get_dev_id(struct device *dev, u32 *dev_id) > +{ return -ENODEV; } > + > /* IOMMU interface */ > static inline void iort_set_dma_mask(struct device *dev) { } > static inline > -- > 1.7.12.4 >
WARNING: multiple messages have this Message-ID (diff)
From: lorenzo.pieralisi@arm.com (Lorenzo Pieralisi) To: linux-arm-kernel@lists.infradead.org Subject: [PATCH v9 10/15] ACPI: platform-msi: retrieve dev id from IORT Date: Wed, 29 Mar 2017 11:14:00 +0100 [thread overview] Message-ID: <20170329101400.GA10807@red-moon> (raw) In-Reply-To: <1488890410-15503-11-git-send-email-guohanjun@huawei.com> Hi Hanjun, Marc, On Tue, Mar 07, 2017 at 08:40:05PM +0800, Hanjun Guo wrote: > From: Hanjun Guo <hanjun.guo@linaro.org> > > For devices connecting to ITS, the devices need to identify themself > through a dev id; this dev id is represented in the IORT table in named > component node [1] for platform devices, so this patch adds code that > scans the IORT table to retrieve the devices' dev id. > > Leveraging the iort_node_map_platform_id() IORT API, add a new function > call, iort_pmsi_get_dev_id() and use it in its_pmsi_prepare() to allow > retrieving dev id in ACPI platforms. > > [1]: https://static.docs.arm.com/den0049/b/DEN0049B_IO_Remapping_Table.pdf > > Signed-off-by: Hanjun Guo <hanjun.guo@linaro.org> > [lorenzo.pieralisi at arm.com: rewrote commit log] > Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com> > Tested-by: Ming Lei <ming.lei@canonical.com> > Tested-by: Wei Xu <xuwei5@hisilicon.com> > Tested-by: Sinan Kaya <okaya@codeaurora.org> > Cc: Marc Zyngier <marc.zyngier@arm.com> > Cc: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com> > Cc: Tomasz Nowicki <tn@semihalf.com> > Cc: Thomas Gleixner <tglx@linutronix.de> > --- > drivers/acpi/arm64/iort.c | 24 ++++++++++++++++++++++++ > drivers/irqchip/irq-gic-v3-its-platform-msi.c | 3 ++- > include/linux/acpi_iort.h | 5 +++++ > 3 files changed, 31 insertions(+), 1 deletion(-) To simplify merging ACPI/IRQCHIP changes via different trees it would be good to split this patch; I am not sure what's the best way of handling it though given that we would end up in a merge ordering dependency anyway (ie we can create an empty stub for iort_pmsi_get_dev_id() but that would create a dependency between ARM64 and irqchip trees anyway). Please let me know what's your preferred way of handling this. Thanks, Lorenzo > diff --git a/drivers/acpi/arm64/iort.c b/drivers/acpi/arm64/iort.c > index 83cd59d..fb95ceb 100644 > --- a/drivers/acpi/arm64/iort.c > +++ b/drivers/acpi/arm64/iort.c > @@ -468,6 +468,30 @@ u32 iort_msi_map_rid(struct device *dev, u32 req_id) > } > > /** > + * iort_pmsi_get_dev_id() - Get the device id for a device > + * @dev: The device for which the mapping is to be done. > + * @dev_id: The device ID found. > + * > + * Returns: 0 for successful find a dev id, -ENODEV on error > + */ > +int iort_pmsi_get_dev_id(struct device *dev, u32 *dev_id) > +{ > + int i; > + struct acpi_iort_node *node; > + > + node = iort_find_dev_node(dev); > + if (!node) > + return -ENODEV; > + > + for (i = 0; i < node->mapping_count; i++) { > + if (iort_node_map_platform_id(node, dev_id, IORT_MSI_TYPE, i)) > + return 0; > + } > + > + return -ENODEV; > +} > + > +/** > * iort_dev_find_its_id() - Find the ITS identifier for a device > * @dev: The device. > * @req_id: Device's requester ID > diff --git a/drivers/irqchip/irq-gic-v3-its-platform-msi.c b/drivers/irqchip/irq-gic-v3-its-platform-msi.c > index e4ba9f4..e801fc0 100644 > --- a/drivers/irqchip/irq-gic-v3-its-platform-msi.c > +++ b/drivers/irqchip/irq-gic-v3-its-platform-msi.c > @@ -57,7 +57,8 @@ static int its_pmsi_prepare(struct irq_domain *domain, struct device *dev, > > msi_info = msi_get_domain_info(domain->parent); > > - ret = of_pmsi_get_dev_id(domain, dev, &dev_id); > + ret = dev->of_node ? of_pmsi_get_dev_id(domain, dev, &dev_id) : > + iort_pmsi_get_dev_id(dev, &dev_id); > if (ret) > return ret; > > diff --git a/include/linux/acpi_iort.h b/include/linux/acpi_iort.h > index 77e0809..d074c77 100644 > --- a/include/linux/acpi_iort.h > +++ b/include/linux/acpi_iort.h > @@ -34,6 +34,7 @@ > bool iort_node_match(u8 type); > u32 iort_msi_map_rid(struct device *dev, u32 req_id); > struct irq_domain *iort_get_device_domain(struct device *dev, u32 req_id); > +int iort_pmsi_get_dev_id(struct device *dev, u32 *dev_id); > /* IOMMU interface */ > void iort_set_dma_mask(struct device *dev); > const struct iommu_ops *iort_iommu_configure(struct device *dev); > @@ -45,6 +46,10 @@ static inline u32 iort_msi_map_rid(struct device *dev, u32 req_id) > static inline struct irq_domain *iort_get_device_domain(struct device *dev, > u32 req_id) > { return NULL; } > + > +static inline int iort_pmsi_get_dev_id(struct device *dev, u32 *dev_id) > +{ return -ENODEV; } > + > /* IOMMU interface */ > static inline void iort_set_dma_mask(struct device *dev) { } > static inline > -- > 1.7.12.4 >
next prev parent reply other threads:[~2017-03-29 10:13 UTC|newest] Thread overview: 112+ messages / expand[flat|nested] mbox.gz Atom feed top 2017-03-07 12:39 [PATCH v9 00/15] ACPI platform MSI support and its example mbigen Hanjun Guo 2017-03-07 12:39 ` Hanjun Guo 2017-03-07 12:39 ` Hanjun Guo 2017-03-07 12:39 ` [PATCH v9 01/15] ACPI/IORT: Fix the indentation in iort_scan_node() Hanjun Guo 2017-03-07 12:39 ` Hanjun Guo 2017-03-07 12:39 ` Hanjun Guo 2017-03-07 12:39 ` [PATCH v9 02/15] ACPI/IORT: Add missing comment for iort_dev_find_its_id() Hanjun Guo 2017-03-07 12:39 ` Hanjun Guo 2017-03-07 12:39 ` Hanjun Guo 2017-03-07 12:39 ` [PATCH v9 03/15] ACPI/IORT: Rework iort_match_node_callback() return value handling Hanjun Guo 2017-03-07 12:39 ` Hanjun Guo 2017-03-07 12:39 ` Hanjun Guo 2017-03-07 12:39 ` [PATCH v9 04/15] irqchip: gic-v3-its: keep the include header files in alphabetic order Hanjun Guo 2017-03-07 12:39 ` Hanjun Guo 2017-03-07 12:39 ` Hanjun Guo 2017-03-07 12:40 ` [PATCH v9 05/15] irqchip: gicv3-its: platform-msi: refactor its_pmsi_prepare() Hanjun Guo 2017-03-07 12:40 ` Hanjun Guo 2017-03-07 12:40 ` Hanjun Guo 2017-03-07 12:40 ` [PATCH v9 06/15] irqchip: gicv3-its: platform-msi: refactor its_pmsi_init() to prepare for ACPI Hanjun Guo 2017-03-07 12:40 ` Hanjun Guo 2017-03-07 12:40 ` Hanjun Guo 2017-03-07 12:40 ` [PATCH v9 07/15] irqchip: gicv3-its: platform-msi: scan MADT to create platform msi domain Hanjun Guo 2017-03-07 12:40 ` Hanjun Guo 2017-03-07 12:40 ` Hanjun Guo 2017-03-07 12:40 ` [PATCH v9 08/15] ACPI/IORT: Rename iort_node_map_rid() to make it generic Hanjun Guo 2017-03-07 12:40 ` Hanjun Guo 2017-03-07 12:40 ` Hanjun Guo 2017-03-07 12:40 ` [PATCH v9 09/15] ACPI/IORT: Introduce iort_node_map_platform_id() to retrieve dev id Hanjun Guo 2017-03-07 12:40 ` Hanjun Guo 2017-03-07 12:40 ` Hanjun Guo 2017-03-07 12:40 ` [PATCH v9 10/15] ACPI: platform-msi: retrieve dev id from IORT Hanjun Guo 2017-03-07 12:40 ` Hanjun Guo 2017-03-07 12:40 ` Hanjun Guo 2017-03-07 14:35 ` Lorenzo Pieralisi 2017-03-07 14:35 ` Lorenzo Pieralisi 2017-03-07 14:35 ` Lorenzo Pieralisi 2017-03-11 8:56 ` Hanjun Guo 2017-03-11 8:56 ` Hanjun Guo 2017-03-11 8:56 ` Hanjun Guo 2017-03-29 10:14 ` Lorenzo Pieralisi [this message] 2017-03-29 10:14 ` Lorenzo Pieralisi 2017-03-29 11:52 ` Hanjun Guo 2017-03-29 11:52 ` Hanjun Guo 2017-03-29 11:52 ` Hanjun Guo 2017-03-29 12:38 ` Lorenzo Pieralisi 2017-03-29 12:38 ` Lorenzo Pieralisi 2017-03-29 13:00 ` Hanjun Guo 2017-03-29 13:00 ` Hanjun Guo 2017-03-29 14:52 ` Marc Zyngier 2017-03-29 14:52 ` Marc Zyngier 2017-03-29 16:13 ` Lorenzo Pieralisi 2017-03-29 16:13 ` Lorenzo Pieralisi 2017-03-29 17:32 ` Lorenzo Pieralisi 2017-03-29 17:32 ` Lorenzo Pieralisi 2017-03-30 3:07 ` Hanjun Guo 2017-03-30 3:07 ` Hanjun Guo 2017-03-30 4:08 ` majun (Euler7) 2017-03-30 4:08 ` majun (Euler7) 2017-03-30 4:08 ` majun (Euler7) 2017-03-30 8:32 ` Wei Xu 2017-03-30 8:32 ` Wei Xu 2017-03-30 8:32 ` Wei Xu 2017-03-30 14:28 ` Lorenzo Pieralisi 2017-03-30 14:28 ` Lorenzo Pieralisi 2017-03-30 16:14 ` John Garry 2017-03-30 16:14 ` John Garry 2017-03-30 16:14 ` John Garry 2017-03-30 16:54 ` Lorenzo Pieralisi 2017-03-30 16:54 ` Lorenzo Pieralisi 2017-03-31 2:41 ` majun (Euler7) 2017-03-31 2:41 ` majun (Euler7) 2017-03-31 2:41 ` majun (Euler7) 2017-03-07 12:40 ` [PATCH v9 11/15] ACPI: platform: setup MSI domain for ACPI based platform device Hanjun Guo 2017-03-07 12:40 ` Hanjun Guo 2017-03-07 12:40 ` Hanjun Guo 2017-03-07 12:40 ` [PATCH v9 12/15] msi: platform: make platform_msi_create_device_domain() ACPI aware Hanjun Guo 2017-03-07 12:40 ` Hanjun Guo 2017-03-07 12:40 ` Hanjun Guo 2017-03-07 12:40 ` [PATCH v9 13/15] irqchip: mbigen: drop module owner Hanjun Guo 2017-03-07 12:40 ` Hanjun Guo 2017-03-07 12:40 ` Hanjun Guo 2017-03-07 12:40 ` [PATCH v9 14/15] irqchip: mbigen: introduce mbigen_of_create_domain() Hanjun Guo 2017-03-07 12:40 ` Hanjun Guo 2017-03-07 12:40 ` Hanjun Guo 2017-03-07 12:40 ` [PATCH v9 15/15] irqchip: mbigen: Add ACPI support Hanjun Guo 2017-03-07 12:40 ` Hanjun Guo 2017-03-07 12:40 ` Hanjun Guo 2017-03-21 14:45 ` Lorenzo Pieralisi 2017-03-21 14:45 ` Lorenzo Pieralisi 2017-03-22 14:12 ` John Garry 2017-03-22 14:12 ` John Garry 2017-03-22 14:12 ` John Garry 2017-03-27 8:46 ` Marc Zyngier 2017-03-27 8:46 ` Marc Zyngier 2017-03-27 8:46 ` Marc Zyngier 2017-03-27 12:24 ` Gabriele Paoloni 2017-03-27 12:24 ` Gabriele Paoloni 2017-03-27 12:24 ` Gabriele Paoloni 2017-03-27 15:27 ` Lorenzo Pieralisi 2017-03-27 15:27 ` Lorenzo Pieralisi 2017-03-27 15:27 ` Lorenzo Pieralisi 2017-03-27 18:56 ` Al Stone 2017-03-27 18:56 ` Al Stone 2017-03-27 18:56 ` Al Stone 2017-03-27 20:23 ` Hanjun Guo 2017-03-27 20:23 ` Hanjun Guo 2017-03-27 20:23 ` Hanjun Guo 2017-03-07 14:43 ` [PATCH v9 00/15] ACPI platform MSI support and its example mbigen Lorenzo Pieralisi 2017-03-07 14:43 ` Lorenzo Pieralisi 2017-03-07 14:43 ` Lorenzo Pieralisi 2017-03-09 13:22 ` Hanjun Guo 2017-03-09 13:22 ` 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=20170329101400.GA10807@red-moon \ --to=lorenzo.pieralisi@arm.com \ --cc=gregkh@linuxfoundation.org \ --cc=guohanjun@huawei.com \ --cc=hanjun.guo@linaro.org \ --cc=huxinwei@huawei.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=majun258@huawei.com \ --cc=marc.zyngier@arm.com \ --cc=okaya@codeaurora.org \ --cc=rafael@kernel.org \ --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.