From: thomas.petazzoni@free-electrons.com (Thomas Petazzoni)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCHv4 05/11] of: pci: add registry of MSI chips
Date: Mon, 8 Jul 2013 13:23:35 +0200 [thread overview]
Message-ID: <20130708132335.37ff4ad4@skate> (raw)
In-Reply-To: <1372686136-1370-6-git-send-email-thomas.petazzoni@free-electrons.com>
Grant, Rob,
Would it be possible to get your feeling about the below patch? Are you
ok with the idea of this msi_chip registry, based on device_node
pointer? This is the last piece of this patch set that needs an
approval in terms of general approach.
I am at Linaro Connect this week, so if you want to discuss this live,
do not hesitate to ping me.
Thanks a lot,
Thomas
On Mon, 1 Jul 2013 15:42:10 +0200, Thomas Petazzoni wrote:
> This commit adds a very basic registry of msi_chip structures, so that
> an IRQ controller driver can register an msi_chip, and a PCIe host
> controller can find it, based on a 'struct device_node'.
>
> Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
> ---
> drivers/of/of_pci.c | 40 ++++++++++++++++++++++++++++++++++++++++
> include/linux/msi.h | 2 ++
> include/linux/of_pci.h | 12 ++++++++++++
> 3 files changed, 54 insertions(+)
>
> diff --git a/drivers/of/of_pci.c b/drivers/of/of_pci.c
> index 42c687a..f516632 100644
> --- a/drivers/of/of_pci.c
> +++ b/drivers/of/of_pci.c
> @@ -89,3 +89,43 @@ int of_pci_parse_bus_range(struct device_node *node, struct resource *res)
> return 0;
> }
> EXPORT_SYMBOL_GPL(of_pci_parse_bus_range);
> +
> +#ifdef CONFIG_PCI_MSI
> +
> +static LIST_HEAD(msi_chip_list);
> +static DEFINE_MUTEX(msi_chip_mutex);
> +
> +int of_msi_chip_add(struct msi_chip *chip)
> +{
> + if (! of_property_read_bool(chip->of_node, "msi-controller"))
> + return -EINVAL;
> +
> + mutex_lock(&msi_chip_mutex);
> + list_add(&chip->list, &msi_chip_list);
> + mutex_unlock(&msi_chip_mutex);
> +
> + return 0;
> +}
> +EXPORT_SYMBOL_GPL(of_msi_chip_add);
> +
> +void of_msi_chip_remove(struct msi_chip *chip)
> +{
> + mutex_lock(&msi_chip_mutex);
> + list_del(&chip->list);
> + mutex_unlock(&msi_chip_mutex);
> +}
> +EXPORT_SYMBOL_GPL(of_msi_chip_remove);
> +
> +struct msi_chip *of_find_msi_chip_by_node(struct device_node *of_node)
> +{
> + struct msi_chip *c;
> + list_for_each_entry(c, &msi_chip_list, list) {
> + if (c->of_node == of_node)
> + return c;
> + }
> +
> + return NULL;
> +}
> +EXPORT_SYMBOL_GPL(of_find_msi_chip_by_node);
> +
> +#endif /* CONFIG_PCI_MSI */
> diff --git a/include/linux/msi.h b/include/linux/msi.h
> index 5b357d92..9e1a44b 100644
> --- a/include/linux/msi.h
> +++ b/include/linux/msi.h
> @@ -66,6 +66,8 @@ void default_teardown_msi_irqs(struct pci_dev *dev);
> struct msi_chip {
> struct module *owner;
> struct device *dev;
> + struct device_node *of_node;
> + struct list_head list;
>
> int (*setup_irq)(struct msi_chip *chip, struct pci_dev *dev,
> struct msi_desc *desc);
> diff --git a/include/linux/of_pci.h b/include/linux/of_pci.h
> index 7a04826..99e4361 100644
> --- a/include/linux/of_pci.h
> +++ b/include/linux/of_pci.h
> @@ -2,6 +2,7 @@
> #define __OF_PCI_H
>
> #include <linux/pci.h>
> +#include <linux/msi.h>
>
> struct pci_dev;
> struct of_irq;
> @@ -13,4 +14,15 @@ struct device_node *of_pci_find_child_device(struct device_node *parent,
> int of_pci_get_devfn(struct device_node *np);
> int of_pci_parse_bus_range(struct device_node *node, struct resource *res);
>
> +#if defined(CONFIG_OF) && defined(CONFIG_PCI_MSI)
> +int of_msi_chip_add(struct msi_chip *chip);
> +void of_msi_chip_remove(struct msi_chip *chip);
> +struct msi_chip *of_find_msi_chip_by_node(struct device_node *of_node);
> +#else
> +static inline int of_msi_chip_add(struct msi_chip *chip) { return -EINVAL; }
> +static inline void of_msi_chip_remove(struct msi_chip *chip) { }
> +static inline struct msi_chip *
> +of_find_msi_chip_by_node(struct device_node *of_node) { return NULL };
> +#endif
> +
> #endif
--
Thomas Petazzoni, Free Electrons
Kernel, drivers, real-time and embedded Linux
development, consulting, training and support.
http://free-electrons.com
next prev parent reply other threads:[~2013-07-08 11:23 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-07-01 13:42 [PATCHv4 00/11] MSI support for Marvell EBU PCIe driver Thomas Petazzoni
2013-07-01 13:42 ` [PATCHv4 01/11] irqdomain: add irq_alloc_mapping() function Thomas Petazzoni
2013-07-01 13:42 ` [PATCHv4 02/11] pci: use weak functions for MSI arch-specific functions Thomas Petazzoni
2013-07-02 0:53 ` Michael Ellerman
2013-07-02 5:30 ` Thomas Petazzoni
2013-07-02 6:52 ` Michael Ellerman
2013-07-02 17:14 ` Bjorn Helgaas
2013-07-05 21:32 ` Bjorn Helgaas
2013-07-05 21:34 ` Bjorn Helgaas
2013-07-05 21:40 ` Thomas Petazzoni
2013-07-01 13:42 ` [PATCHv4 03/11] pci: remove ARCH_SUPPORTS_MSI kconfig option Thomas Petazzoni
2013-07-05 21:37 ` Bjorn Helgaas
2013-07-05 21:45 ` Thomas Petazzoni
2013-07-06 13:54 ` Jason Cooper
2013-07-06 15:40 ` Bjorn Helgaas
2013-07-06 16:17 ` Jason Cooper
2013-07-06 16:33 ` Thomas Petazzoni
2013-07-01 13:42 ` [PATCHv4 04/11] PCI: Introduce new MSI chip infrastructure Thomas Petazzoni
2013-07-05 21:51 ` Bjorn Helgaas
2013-07-05 22:08 ` Thomas Petazzoni
2013-07-08 14:51 ` Thomas Petazzoni
2013-07-09 5:05 ` Thierry Reding
2013-07-09 16:34 ` Bjorn Helgaas
2013-07-01 13:42 ` [PATCHv4 05/11] of: pci: add registry of MSI chips Thomas Petazzoni
2013-07-05 21:56 ` Bjorn Helgaas
2013-07-05 22:06 ` Thomas Petazzoni
2013-07-08 11:23 ` Thomas Petazzoni [this message]
2013-07-09 13:43 ` Rob Herring
2013-07-09 14:01 ` Thomas Petazzoni
2013-07-09 16:30 ` Bjorn Helgaas
2013-07-09 22:52 ` Rob Herring
2013-07-01 13:42 ` [PATCHv4 06/11] irqchip: armada-370-xp: properly request resources Thomas Petazzoni
2013-07-01 13:42 ` [PATCHv4 07/11] irqchip: armada-370-xp: implement MSI support Thomas Petazzoni
2013-07-01 13:42 ` [PATCHv4 08/11] arm: pci: add ->add_bus() and ->remove_bus() hooks to hw_pci Thomas Petazzoni
2013-07-01 13:42 ` [PATCHv4 09/11] arm: mvebu: the MPIC now provides MSI controller features Thomas Petazzoni
2013-07-01 13:42 ` [PATCHv4 10/11] pci: mvebu: add support for MSI Thomas Petazzoni
2013-07-05 21:59 ` Bjorn Helgaas
2013-07-01 13:42 ` [PATCHv4 11/11] arm: mvebu: link PCIe controllers to the MSI controller Thomas Petazzoni
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=20130708132335.37ff4ad4@skate \
--to=thomas.petazzoni@free-electrons.com \
--cc=linux-arm-kernel@lists.infradead.org \
/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).