All of lore.kernel.org
 help / color / mirror / Atom feed
From: Yijing Wang <wangyijing@huawei.com>
To: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>,
	<linux-arm-kernel@lists.infradead.org>,
	<linux-pci@vger.kernel.org>
Cc: <liviu.dudau@arm.com>, Arnd Bergmann <arnd@arndb.de>,
	Phil Edworthy <phil.edworthy@renesas.com>,
	Jason Gunthorpe <jgunthorpe@obsidianresearch.com>,
	Jingoo Han <jg1.han@samsung.com>,
	"Bjorn Helgaas" <bhelgaas@google.com>,
	Russell King <linux@arm.linux.org.uk>,
	"Mohit Kumar" <mohit.kumar@st.com>
Subject: Re: [RFC PATCH 2/2] arm: pcibios: move to generic PCI domains
Date: Thu, 30 Oct 2014 20:27:13 +0800	[thread overview]
Message-ID: <54522EA1.20707@huawei.com> (raw)
In-Reply-To: <1414669490-1217-3-git-send-email-lorenzo.pieralisi@arm.com>

On 2014/10/30 19:44, Lorenzo Pieralisi wrote:
> Most if not all ARM PCI host controller device drivers either ignore the
> domain field in the pci_sys_data structure or just increment it every
> time a host controller is probed, using it as a domain counter.
> 
> Therefore, instead of relying on pci_sys_data to stash the domain number
> in a standard location, ARM pcibios code can be moved to the newly
> introduced generic PCI domains code, implemented in commits:
> 
> commit 41e5c0f81d3e676d671d96a0a1fafb27abfbd9
> ("of/pci: Add pci_get_new_domain_nr() and of_get_pci_domain_nr()")
> 
> commit 670ba0c8883b576d0aec28bd7a838358a4be1
> ("PCI: Add generic domain handling")
> 
> In order to assign a domain number dynamically, the ARM pcibios defines
> the function, called by core PCI code:
> 
> void pci_bus_assign_domain_nr(...)
> 
> that relies on a DT property to define the domain number or falls back to
> a counter; its usage replaces the current domain assignment code in PCI
> host controllers present in the kernel.

Nice clean up.

Reviewed-by: Yijing Wang <wangyijing@huawei.com>

> 
> Cc: Arnd Bergmann <arnd@arndb.de>
> Cc: Phil Edworthy <phil.edworthy@renesas.com>
> Cc: Jason Gunthorpe <jgunthorpe@obsidianresearch.com>
> Cc: Jingoo Han <jg1.han@samsung.com>
> Cc: Bjorn Helgaas <bhelgaas@google.com>
> Cc: Russell King <linux@arm.linux.org.uk>
> Cc: Mohit Kumar <mohit.kumar@st.com>
> Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
> ---
>  arch/arm/Kconfig                   |  3 +++
>  arch/arm/include/asm/mach/pci.h    |  3 ---
>  arch/arm/include/asm/pci.h         |  7 -------
>  arch/arm/kernel/bios32.c           | 26 +++++++++++++++++++++++---
>  drivers/pci/host/pci-mvebu.c       | 10 ++--------
>  drivers/pci/host/pcie-designware.c |  3 ---
>  drivers/pci/host/pcie-rcar.c       |  3 ---
>  7 files changed, 28 insertions(+), 27 deletions(-)
> 
> diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
> index 89c4b5c..29544f0 100644
> --- a/arch/arm/Kconfig
> +++ b/arch/arm/Kconfig
> @@ -1292,6 +1292,9 @@ config PCI_DOMAINS
>  	bool
>  	depends on PCI
>  
> +config PCI_DOMAINS_GENERIC
> +	def_bool PCI_DOMAINS
> +
>  config PCI_NANOENGINE
>  	bool "BSE nanoEngine PCI support"
>  	depends on SA1100_NANOENGINE
> diff --git a/arch/arm/include/asm/mach/pci.h b/arch/arm/include/asm/mach/pci.h
> index 7fc4278..f19f627 100644
> --- a/arch/arm/include/asm/mach/pci.h
> +++ b/arch/arm/include/asm/mach/pci.h
> @@ -44,9 +44,6 @@ struct hw_pci {
>   * Per-controller structure
>   */
>  struct pci_sys_data {
> -#ifdef CONFIG_PCI_DOMAINS
> -	int		domain;
> -#endif
>  	struct list_head node;
>  	int		busnr;		/* primary bus number			*/
>  	u64		mem_offset;	/* bus->cpu memory mapping offset	*/
> diff --git a/arch/arm/include/asm/pci.h b/arch/arm/include/asm/pci.h
> index 7e95d85..585dc33 100644
> --- a/arch/arm/include/asm/pci.h
> +++ b/arch/arm/include/asm/pci.h
> @@ -18,13 +18,6 @@ static inline int pcibios_assign_all_busses(void)
>  }
>  
>  #ifdef CONFIG_PCI_DOMAINS
> -static inline int pci_domain_nr(struct pci_bus *bus)
> -{
> -	struct pci_sys_data *root = bus->sysdata;
> -
> -	return root->domain;
> -}
> -
>  static inline int pci_proc_domain(struct pci_bus *bus)
>  {
>  	return pci_domain_nr(bus);
> diff --git a/arch/arm/kernel/bios32.c b/arch/arm/kernel/bios32.c
> index 17a26c1..d8c2b4e 100644
> --- a/arch/arm/kernel/bios32.c
> +++ b/arch/arm/kernel/bios32.c
> @@ -11,6 +11,8 @@
>  #include <linux/slab.h>
>  #include <linux/init.h>
>  #include <linux/io.h>
> +#include <linux/of.h>
> +#include <linux/of_pci.h>
>  
>  #include <asm/mach-types.h>
>  #include <asm/mach/map.h>
> @@ -468,9 +470,6 @@ static void pcibios_init_hw(struct device *parent, struct hw_pci *hw,
>  		if (!sys)
>  			panic("PCI: unable to allocate sys data!");
>  
> -#ifdef CONFIG_PCI_DOMAINS
> -		sys->domain  = hw->domain;
> -#endif
>  		sys->busnr   = busnr;
>  		sys->swizzle = hw->swizzle;
>  		sys->map_irq = hw->map_irq;
> @@ -511,6 +510,27 @@ static void pcibios_init_hw(struct device *parent, struct hw_pci *hw,
>  	}
>  }
>  
> +#ifdef CONFIG_PCI_DOMAINS_GENERIC
> +static bool dt_domain_found;
> +
> +void pci_bus_assign_domain_nr(struct pci_bus *bus, struct device *parent)
> +{
> +	int domain = of_get_pci_domain_nr(parent->of_node);
> +
> +	if (domain >= 0) {
> +		dt_domain_found = true;
> +	} else if (dt_domain_found == true) {
> +		dev_err(parent, "Node %s is missing \"linux,pci-domain\" property in DT\n",
> +			parent->of_node->full_name);
> +		return;
> +	} else {
> +		domain = pci_get_new_domain_nr();
> +	}
> +
> +	bus->domain_nr = domain;
> +}
> +#endif
> +
>  void pci_common_init_dev(struct device *parent, struct hw_pci *hw)
>  {
>  	struct pci_sys_data *sys;
> diff --git a/drivers/pci/host/pci-mvebu.c b/drivers/pci/host/pci-mvebu.c
> index b1315e1..2b4c1f2 100644
> --- a/drivers/pci/host/pci-mvebu.c
> +++ b/drivers/pci/host/pci-mvebu.c
> @@ -722,17 +722,11 @@ static int mvebu_pcie_setup(int nr, struct pci_sys_data *sys)
>  {
>  	struct mvebu_pcie *pcie = sys_to_pcie(sys);
>  	int i;
> -	int domain = 0;
>  
> -#ifdef CONFIG_PCI_DOMAINS
> -	domain = sys->domain;
> -#endif
> -
> -	snprintf(pcie->mem_name, sizeof(pcie->mem_name), "PCI MEM %04x",
> -		 domain);
> +	snprintf(pcie->mem_name, sizeof(pcie->mem_name), "PCI MEM %04x", nr);
>  	pcie->mem.name = pcie->mem_name;
>  
> -	snprintf(pcie->io_name, sizeof(pcie->io_name), "PCI I/O %04x", domain);
> +	snprintf(pcie->io_name, sizeof(pcie->io_name), "PCI I/O %04x", nr);
>  	pcie->realio.name = pcie->io_name;
>  
>  	if (request_resource(&iomem_resource, &pcie->mem))
> diff --git a/drivers/pci/host/pcie-designware.c b/drivers/pci/host/pcie-designware.c
> index dfed00a..6790b87 100644
> --- a/drivers/pci/host/pcie-designware.c
> +++ b/drivers/pci/host/pcie-designware.c
> @@ -502,9 +502,6 @@ int __init dw_pcie_host_init(struct pcie_port *pp)
>  	dw_pci.private_data = (void **)&pp;
>  
>  	pci_common_init_dev(pp->dev, &dw_pci);
> -#ifdef CONFIG_PCI_DOMAINS
> -	dw_pci.domain++;
> -#endif
>  
>  	return 0;
>  }
> diff --git a/drivers/pci/host/pcie-rcar.c b/drivers/pci/host/pcie-rcar.c
> index 61158e0..b6b859e 100644
> --- a/drivers/pci/host/pcie-rcar.c
> +++ b/drivers/pci/host/pcie-rcar.c
> @@ -404,9 +404,6 @@ static void rcar_pcie_enable(struct rcar_pcie *pcie)
>  	rcar_pci.private_data = (void **)&pcie;
>  
>  	pci_common_init_dev(&pdev->dev, &rcar_pci);
> -#ifdef CONFIG_PCI_DOMAINS
> -	rcar_pci.domain++;
> -#endif
>  }
>  
>  static int phy_wait_for_ack(struct rcar_pcie *pcie)
> 


-- 
Thanks!
Yijing


WARNING: multiple messages have this Message-ID (diff)
From: wangyijing@huawei.com (Yijing Wang)
To: linux-arm-kernel@lists.infradead.org
Subject: [RFC PATCH 2/2] arm: pcibios: move to generic PCI domains
Date: Thu, 30 Oct 2014 20:27:13 +0800	[thread overview]
Message-ID: <54522EA1.20707@huawei.com> (raw)
In-Reply-To: <1414669490-1217-3-git-send-email-lorenzo.pieralisi@arm.com>

On 2014/10/30 19:44, Lorenzo Pieralisi wrote:
> Most if not all ARM PCI host controller device drivers either ignore the
> domain field in the pci_sys_data structure or just increment it every
> time a host controller is probed, using it as a domain counter.
> 
> Therefore, instead of relying on pci_sys_data to stash the domain number
> in a standard location, ARM pcibios code can be moved to the newly
> introduced generic PCI domains code, implemented in commits:
> 
> commit 41e5c0f81d3e676d671d96a0a1fafb27abfbd9
> ("of/pci: Add pci_get_new_domain_nr() and of_get_pci_domain_nr()")
> 
> commit 670ba0c8883b576d0aec28bd7a838358a4be1
> ("PCI: Add generic domain handling")
> 
> In order to assign a domain number dynamically, the ARM pcibios defines
> the function, called by core PCI code:
> 
> void pci_bus_assign_domain_nr(...)
> 
> that relies on a DT property to define the domain number or falls back to
> a counter; its usage replaces the current domain assignment code in PCI
> host controllers present in the kernel.

Nice clean up.

Reviewed-by: Yijing Wang <wangyijing@huawei.com>

> 
> Cc: Arnd Bergmann <arnd@arndb.de>
> Cc: Phil Edworthy <phil.edworthy@renesas.com>
> Cc: Jason Gunthorpe <jgunthorpe@obsidianresearch.com>
> Cc: Jingoo Han <jg1.han@samsung.com>
> Cc: Bjorn Helgaas <bhelgaas@google.com>
> Cc: Russell King <linux@arm.linux.org.uk>
> Cc: Mohit Kumar <mohit.kumar@st.com>
> Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
> ---
>  arch/arm/Kconfig                   |  3 +++
>  arch/arm/include/asm/mach/pci.h    |  3 ---
>  arch/arm/include/asm/pci.h         |  7 -------
>  arch/arm/kernel/bios32.c           | 26 +++++++++++++++++++++++---
>  drivers/pci/host/pci-mvebu.c       | 10 ++--------
>  drivers/pci/host/pcie-designware.c |  3 ---
>  drivers/pci/host/pcie-rcar.c       |  3 ---
>  7 files changed, 28 insertions(+), 27 deletions(-)
> 
> diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
> index 89c4b5c..29544f0 100644
> --- a/arch/arm/Kconfig
> +++ b/arch/arm/Kconfig
> @@ -1292,6 +1292,9 @@ config PCI_DOMAINS
>  	bool
>  	depends on PCI
>  
> +config PCI_DOMAINS_GENERIC
> +	def_bool PCI_DOMAINS
> +
>  config PCI_NANOENGINE
>  	bool "BSE nanoEngine PCI support"
>  	depends on SA1100_NANOENGINE
> diff --git a/arch/arm/include/asm/mach/pci.h b/arch/arm/include/asm/mach/pci.h
> index 7fc4278..f19f627 100644
> --- a/arch/arm/include/asm/mach/pci.h
> +++ b/arch/arm/include/asm/mach/pci.h
> @@ -44,9 +44,6 @@ struct hw_pci {
>   * Per-controller structure
>   */
>  struct pci_sys_data {
> -#ifdef CONFIG_PCI_DOMAINS
> -	int		domain;
> -#endif
>  	struct list_head node;
>  	int		busnr;		/* primary bus number			*/
>  	u64		mem_offset;	/* bus->cpu memory mapping offset	*/
> diff --git a/arch/arm/include/asm/pci.h b/arch/arm/include/asm/pci.h
> index 7e95d85..585dc33 100644
> --- a/arch/arm/include/asm/pci.h
> +++ b/arch/arm/include/asm/pci.h
> @@ -18,13 +18,6 @@ static inline int pcibios_assign_all_busses(void)
>  }
>  
>  #ifdef CONFIG_PCI_DOMAINS
> -static inline int pci_domain_nr(struct pci_bus *bus)
> -{
> -	struct pci_sys_data *root = bus->sysdata;
> -
> -	return root->domain;
> -}
> -
>  static inline int pci_proc_domain(struct pci_bus *bus)
>  {
>  	return pci_domain_nr(bus);
> diff --git a/arch/arm/kernel/bios32.c b/arch/arm/kernel/bios32.c
> index 17a26c1..d8c2b4e 100644
> --- a/arch/arm/kernel/bios32.c
> +++ b/arch/arm/kernel/bios32.c
> @@ -11,6 +11,8 @@
>  #include <linux/slab.h>
>  #include <linux/init.h>
>  #include <linux/io.h>
> +#include <linux/of.h>
> +#include <linux/of_pci.h>
>  
>  #include <asm/mach-types.h>
>  #include <asm/mach/map.h>
> @@ -468,9 +470,6 @@ static void pcibios_init_hw(struct device *parent, struct hw_pci *hw,
>  		if (!sys)
>  			panic("PCI: unable to allocate sys data!");
>  
> -#ifdef CONFIG_PCI_DOMAINS
> -		sys->domain  = hw->domain;
> -#endif
>  		sys->busnr   = busnr;
>  		sys->swizzle = hw->swizzle;
>  		sys->map_irq = hw->map_irq;
> @@ -511,6 +510,27 @@ static void pcibios_init_hw(struct device *parent, struct hw_pci *hw,
>  	}
>  }
>  
> +#ifdef CONFIG_PCI_DOMAINS_GENERIC
> +static bool dt_domain_found;
> +
> +void pci_bus_assign_domain_nr(struct pci_bus *bus, struct device *parent)
> +{
> +	int domain = of_get_pci_domain_nr(parent->of_node);
> +
> +	if (domain >= 0) {
> +		dt_domain_found = true;
> +	} else if (dt_domain_found == true) {
> +		dev_err(parent, "Node %s is missing \"linux,pci-domain\" property in DT\n",
> +			parent->of_node->full_name);
> +		return;
> +	} else {
> +		domain = pci_get_new_domain_nr();
> +	}
> +
> +	bus->domain_nr = domain;
> +}
> +#endif
> +
>  void pci_common_init_dev(struct device *parent, struct hw_pci *hw)
>  {
>  	struct pci_sys_data *sys;
> diff --git a/drivers/pci/host/pci-mvebu.c b/drivers/pci/host/pci-mvebu.c
> index b1315e1..2b4c1f2 100644
> --- a/drivers/pci/host/pci-mvebu.c
> +++ b/drivers/pci/host/pci-mvebu.c
> @@ -722,17 +722,11 @@ static int mvebu_pcie_setup(int nr, struct pci_sys_data *sys)
>  {
>  	struct mvebu_pcie *pcie = sys_to_pcie(sys);
>  	int i;
> -	int domain = 0;
>  
> -#ifdef CONFIG_PCI_DOMAINS
> -	domain = sys->domain;
> -#endif
> -
> -	snprintf(pcie->mem_name, sizeof(pcie->mem_name), "PCI MEM %04x",
> -		 domain);
> +	snprintf(pcie->mem_name, sizeof(pcie->mem_name), "PCI MEM %04x", nr);
>  	pcie->mem.name = pcie->mem_name;
>  
> -	snprintf(pcie->io_name, sizeof(pcie->io_name), "PCI I/O %04x", domain);
> +	snprintf(pcie->io_name, sizeof(pcie->io_name), "PCI I/O %04x", nr);
>  	pcie->realio.name = pcie->io_name;
>  
>  	if (request_resource(&iomem_resource, &pcie->mem))
> diff --git a/drivers/pci/host/pcie-designware.c b/drivers/pci/host/pcie-designware.c
> index dfed00a..6790b87 100644
> --- a/drivers/pci/host/pcie-designware.c
> +++ b/drivers/pci/host/pcie-designware.c
> @@ -502,9 +502,6 @@ int __init dw_pcie_host_init(struct pcie_port *pp)
>  	dw_pci.private_data = (void **)&pp;
>  
>  	pci_common_init_dev(pp->dev, &dw_pci);
> -#ifdef CONFIG_PCI_DOMAINS
> -	dw_pci.domain++;
> -#endif
>  
>  	return 0;
>  }
> diff --git a/drivers/pci/host/pcie-rcar.c b/drivers/pci/host/pcie-rcar.c
> index 61158e0..b6b859e 100644
> --- a/drivers/pci/host/pcie-rcar.c
> +++ b/drivers/pci/host/pcie-rcar.c
> @@ -404,9 +404,6 @@ static void rcar_pcie_enable(struct rcar_pcie *pcie)
>  	rcar_pci.private_data = (void **)&pcie;
>  
>  	pci_common_init_dev(&pdev->dev, &rcar_pci);
> -#ifdef CONFIG_PCI_DOMAINS
> -	rcar_pci.domain++;
> -#endif
>  }
>  
>  static int phy_wait_for_ack(struct rcar_pcie *pcie)
> 


-- 
Thanks!
Yijing

  parent reply	other threads:[~2014-10-30 12:29 UTC|newest]

Thread overview: 64+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-10-30 11:44 [RFC PATCH 0/2] arm: pcibios: remove pci_sys_data domain Lorenzo Pieralisi
2014-10-30 11:44 ` Lorenzo Pieralisi
2014-10-30 11:44 ` [RFC PATCH 1/2] arm: cns3xxx: pci: remove artificial dependency on " Lorenzo Pieralisi
2014-10-30 11:44   ` Lorenzo Pieralisi
2014-11-01 12:32   ` Michał Mirosław
2014-11-01 12:32     ` Michał Mirosław
2014-11-03 10:09     ` Arnd Bergmann
2014-11-03 10:09       ` Arnd Bergmann
2014-10-30 11:44 ` [RFC PATCH 2/2] arm: pcibios: move to generic PCI domains Lorenzo Pieralisi
2014-10-30 11:44   ` Lorenzo Pieralisi
2014-10-30 11:55   ` Arnd Bergmann
2014-10-30 11:55     ` Arnd Bergmann
2014-10-30 16:20     ` Lorenzo Pieralisi
2014-10-30 16:20       ` Lorenzo Pieralisi
2014-10-30 12:27   ` Yijing Wang [this message]
2014-10-30 12:27     ` Yijing Wang
2014-10-30 16:21     ` Lorenzo Pieralisi
2014-10-30 16:21       ` Lorenzo Pieralisi
2014-10-31 13:43   ` Phil Edworthy
2014-10-31 13:43     ` Phil Edworthy
2014-10-31 16:37     ` Bjorn Helgaas
2014-10-31 16:37       ` Bjorn Helgaas
2014-10-31 17:04       ` Phil Edworthy
2014-10-31 17:04         ` Phil Edworthy
2014-11-03 23:26         ` Simon Horman
2014-11-03 23:26           ` Simon Horman
2014-11-04 11:44           ` Liviu Dudau
2014-11-04 11:44             ` Liviu Dudau
2014-11-03 11:06     ` Lorenzo Pieralisi
2014-11-03 11:06       ` Lorenzo Pieralisi
2014-11-03  1:18   ` Jingoo Han
2014-11-03  1:18     ` Jingoo Han
2014-11-03  2:36     ` Karicheri, Muralidharan
2014-11-03  2:36       ` Karicheri, Muralidharan
2014-11-03 11:23     ` Lorenzo Pieralisi
2014-11-03 11:23       ` Lorenzo Pieralisi
2014-11-03 11:33       ` Lucas Stach
2014-11-03 11:33         ` Lucas Stach
2014-11-03 12:13         ` Jingoo Han
2014-11-03 12:13           ` Jingoo Han
2014-11-03  3:48   ` Yijing Wang
2014-11-03  3:48     ` Yijing Wang
2014-11-03 10:49     ` Lorenzo Pieralisi
2014-11-03 10:49       ` Lorenzo Pieralisi
2014-10-30 16:25 ` [RFC PATCH 0/2] arm: pcibios: remove pci_sys_data domain Jason Gunthorpe
2014-10-30 16:25   ` Jason Gunthorpe
2014-10-30 16:52   ` Lorenzo Pieralisi
2014-10-30 16:52     ` Lorenzo Pieralisi
2014-10-30 17:03     ` Jason Gunthorpe
2014-10-30 17:03       ` Jason Gunthorpe
2014-10-30 17:39       ` Liviu Dudau
2014-10-30 17:39         ` Liviu Dudau
2014-10-30 17:45         ` Jason Gunthorpe
2014-10-30 17:45           ` Jason Gunthorpe
2014-10-30 18:09           ` Lorenzo Pieralisi
2014-10-30 18:09             ` Lorenzo Pieralisi
2014-10-30 18:42             ` Jason Gunthorpe
2014-10-30 18:42               ` Jason Gunthorpe
2014-10-30 19:21           ` Arnd Bergmann
2014-10-30 19:21             ` Arnd Bergmann
2014-10-30 19:35             ` Jason Gunthorpe
2014-10-30 19:35               ` Jason Gunthorpe
2014-10-30 20:03               ` Arnd Bergmann
2014-10-30 20:03                 ` Arnd Bergmann

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=54522EA1.20707@huawei.com \
    --to=wangyijing@huawei.com \
    --cc=arnd@arndb.de \
    --cc=bhelgaas@google.com \
    --cc=jg1.han@samsung.com \
    --cc=jgunthorpe@obsidianresearch.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-pci@vger.kernel.org \
    --cc=linux@arm.linux.org.uk \
    --cc=liviu.dudau@arm.com \
    --cc=lorenzo.pieralisi@arm.com \
    --cc=mohit.kumar@st.com \
    --cc=phil.edworthy@renesas.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: link
Be 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.