All of lore.kernel.org
 help / color / mirror / Atom feed
From: Bjorn Helgaas <bhelgaas@google.com>
To: Linus Walleij <linus.walleij@linaro.org>
Cc: Arnd Bergmann <arnd@arndb.de>, Rob Herring <robh@kernel.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	linux-pci <linux-pci@vger.kernel.org>,
	Russell King <linux@arm.linux.org.uk>,
	"linux-arm-kernel@lists.infradead.org" 
	<linux-arm-kernel@lists.infradead.org>
Subject: Re: [PATCH 07/16] ARM: integrator: convert PCI to use generic config accesses
Date: Mon, 26 Jan 2015 12:22:33 -0600	[thread overview]
Message-ID: <20150126182233.GB4063@google.com> (raw)
In-Reply-To: <20150122203336.GD13072@google.com>

On Thu, Jan 22, 2015 at 02:33:36PM -0600, Bjorn Helgaas wrote:
> On Mon, Jan 12, 2015 at 01:05:12AM +0100, Linus Walleij wrote:
> > On Sat, Jan 10, 2015 at 10:53 PM, Arnd Bergmann <arnd@arndb.de> wrote:
> > > On Saturday 10 January 2015 22:40:22 Linus Walleij wrote:
> > >> >  static int v3_read_config(struct pci_bus *bus, unsigned int devfn, int where,
> > >> >                           int size, u32 *val)
> > >> >  {
> > >> > -       addr = v3_open_config_window(bus, devfn, where);
> > >> > +       int ret = pci_generic_config_read(bus, devfn, where, size, val);
> > >> >         v3_close_config_window();
> > >> > +       return ret;
> > >> >  }
> > >> >
> > >> >  static int v3_write_config(struct pci_bus *bus, unsigned int devfn, int where,
> > >> >                            int size, u32 val)
> > >> >  {
> > >> > +       int ret = pci_generic_config_write(bus, devfn, where, size, val);
> > >> >         v3_close_config_window();
> > >> > -       raw_spin_unlock_irqrestore(&v3_lock, flags);
> > >> > +       return ret;
> > >> >  }
> > >> >
> > >> >  static struct pci_ops pci_v3_ops = {
> > >> > +       .map_bus = v3_open_config_window,
> > >> >         .read   = v3_read_config,
> > >> >         .write  = v3_write_config,
> > >>
> > >> So .map_bus is called before every .read/.write operation I take it.
> > >>
> > >> Wouldn't it be proper to call the v3_close_config_window() from a
> > >> matching .unmap_bus() callback for symmetry?
> > >
> > > It would be nicer for integrator but useless for anything else, so
> > > I'd vote for leaving it the way Rob posted.
> > 
> > OK I buy that, throw in a comment about it in the code if there
> > is some time for iterating the patch.
> 
> Would you prefer something like the following instead?  It keeps the
> v3_open/close symmetry, but it does break apart and duplicate some of the
> logic from v3_open_config_window().

Hearing nothing, I kept Rob's initial version.  It can be tweaked later if
anybody wants to.  I just want to get all this into v3.20.

Bjorn

> commit 3e0c269a560968002298d22ac47bde4bd45aea8e
> Author: Rob Herring <robh@kernel.org>
> Date:   Fri Jan 9 20:34:41 2015 -0600
> 
>     ARM: integrator: Convert PCI to use generic config accessors
>     
>     Convert the integrator PCI driver to use the generic config access
>     functions.
>     
>     This changes accesses from __raw_readX/__raw_writeX to readX/writeX
>     variants.  The spinlock is removed because it is unnecessary.  The config
>     read and write functions are already protected with a spinlock and no
>     access can occur during the .pre_init function.
>     
>     Signed-off-by: Rob Herring <robh@kernel.org>
>     Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
>     Acked-by: Linus Walleij <linus.walleij@linaro.org>
>     CC: Russell King <linux@arm.linux.org.uk>
>     CC: linux-arm-kernel@lists.infradead.org
> 
> diff --git a/arch/arm/mach-integrator/pci_v3.c b/arch/arm/mach-integrator/pci_v3.c
> index c186a17c2cff..c1098729cf8a 100644
> --- a/arch/arm/mach-integrator/pci_v3.c
> +++ b/arch/arm/mach-integrator/pci_v3.c
> @@ -324,7 +324,7 @@ static u64 pre_mem_pci_sz;
>   * configuration address space, you present the V3 with the following pattern
>   * (which is very nearly a type 1 (except that the lower two bits are 00 and
>   * not 01).   In order for this mapping to work you need to set up one of
> - * the local to PCI aperatures to 16Mbytes in length translating to
> + * the local to PCI apertures to 16Mbytes in length translating to
>   * PCI configuration space starting at 0x0000.0000.
>   *
>   * PCI configuration cycles look like this:
> @@ -356,15 +356,14 @@ static u64 pre_mem_pci_sz;
>   *	 7:2	register number
>   *
>   */
> -static DEFINE_RAW_SPINLOCK(v3_lock);
>  
>  #undef V3_LB_BASE_PREFETCH
>  #define V3_LB_BASE_PREFETCH 0
>  
> -static void __iomem *v3_open_config_window(struct pci_bus *bus,
> -					   unsigned int devfn, int offset)
> +static void v3_open_config_window(struct pci_bus *bus, unsigned int devfn,
> +				  int offset)
>  {
> -	unsigned int address, mapaddress, busnr;
> +	unsigned int mapaddress, busnr;
>  
>  	busnr = bus->number;
>  
> @@ -381,14 +380,10 @@ static void __iomem *v3_open_config_window(struct pci_bus *bus,
>  		/*
>  		 * local bus segment so need a type 0 config cycle
>  		 *
> -		 * build the PCI configuration "address" with one-hot in
> -		 * A31-A11
> -		 *
>  		 * mapaddress:
>  		 *  3:1 = config cycle (101)
>  		 *  0   = PCI A1 & A0 are 0 (0)
>  		 */
> -		address = PCI_FUNC(devfn) << 8;
>  		mapaddress = V3_LB_MAP_TYPE_CONFIG;
>  
>  		if (slot > 12)
> @@ -396,26 +391,15 @@ static void __iomem *v3_open_config_window(struct pci_bus *bus,
>  			 * high order bits are handled by the MAP register
>  			 */
>  			mapaddress |= 1 << (slot - 5);
> -		else
> -			/*
> -			 * low order bits handled directly in the address
> -			 */
> -			address |= 1 << (slot + 11);
>  	} else {
>          	/*
>  		 * not the local bus segment so need a type 1 config cycle
>  		 *
> -		 * address:
> -		 *  23:16 = bus number
> -		 *  15:11 = slot number (7:3 of devfn)
> -		 *  10:8  = func number (2:0 of devfn)
> -		 *
>  		 * mapaddress:
>  		 *  3:1 = config cycle (101)
>  		 *  0   = PCI A1 & A0 from host bus (1)
>  		 */
>  		mapaddress = V3_LB_MAP_TYPE_CONFIG | V3_LB_MAP_AD_LOW_EN;
> -		address = (busnr << 16) | (devfn << 8);
>  	}
>  
>  	/*
> @@ -432,8 +416,6 @@ static void __iomem *v3_open_config_window(struct pci_bus *bus,
>  	v3_writel(V3_LB_BASE1, v3_addr_to_lb_base(conf_mem.start) |
>  			V3_LB_BASE_ADR_SIZE_16MB | V3_LB_BASE_ENABLE);
>  	v3_writew(V3_LB_MAP1, mapaddress);
> -
> -	return PCI_CONFIG_VADDR + address + offset;
>  }
>  
>  static void v3_close_config_window(void)
> @@ -454,70 +436,66 @@ static void v3_close_config_window(void)
>  			V3_LB_BASE_ADR_SIZE_256MB | V3_LB_BASE_ENABLE);
>  }
>  
> -static int v3_read_config(struct pci_bus *bus, unsigned int devfn, int where,
> -			  int size, u32 *val)
> +static void __iomem *v3_map_bus(struct pci_bus *bus,
> +					   unsigned int devfn, int offset)
>  {
> -	void __iomem *addr;
> -	unsigned long flags;
> -	u32 v;
> +	unsigned int busnr = bus->number;
> +	unsigned int address;
>  
> -	raw_spin_lock_irqsave(&v3_lock, flags);
> -	addr = v3_open_config_window(bus, devfn, where);
> -
> -	switch (size) {
> -	case 1:
> -		v = __raw_readb(addr);
> -		break;
> +	if (busnr == 0) {
> +		int slot = PCI_SLOT(devfn);
>  
> -	case 2:
> -		v = __raw_readw(addr);
> -		break;
> +		/*
> +		 * build the PCI configuration "address" with function in
> +		 * A10-A8 and device one-hot in A31-A11
> +		 */
> +		address = PCI_FUNC(devfn) << 8;
>  
> -	default:
> -		v = __raw_readl(addr);
> -		break;
> +		/*
> +		 * high order bits are handled by the MAP register;
> +		 * low order bits handled directly in the address
> +		 */
> +		if (slot <= 12)
> +			address |= 1 << (slot + 11);
> +	} else {
> +		/*
> +		 * not the local bus segment so need a type 1 config cycle
> +		 *
> +		 * address:
> +		 *  23:16 = bus number
> +		 *  15:11 = slot number (7:3 of devfn)
> +		 *  10:8  = func number (2:0 of devfn)
> +		 */
> +		address = (busnr << 16) | (devfn << 8);
>  	}
>  
> -	v3_close_config_window();
> -	raw_spin_unlock_irqrestore(&v3_lock, flags);
> +	return PCI_CONFIG_VADDR + address + offset;
> +}
> +
> +static int v3_read_config(struct pci_bus *bus, unsigned int devfn, int where,
> +			  int size, u32 *val)
> +{
> +	int ret;
>  
> -	*val = v;
> -	return PCIBIOS_SUCCESSFUL;
> +	v3_open_config_window();
> +	ret = pci_generic_config_read(bus, devfn, where, size, val);
> +	v3_close_config_window();
> +	return ret;
>  }
>  
>  static int v3_write_config(struct pci_bus *bus, unsigned int devfn, int where,
>  			   int size, u32 val)
>  {
> -	void __iomem *addr;
> -	unsigned long flags;
> -
> -	raw_spin_lock_irqsave(&v3_lock, flags);
> -	addr = v3_open_config_window(bus, devfn, where);
> -
> -	switch (size) {
> -	case 1:
> -		__raw_writeb((u8)val, addr);
> -		__raw_readb(addr);
> -		break;
> -
> -	case 2:
> -		__raw_writew((u16)val, addr);
> -		__raw_readw(addr);
> -		break;
> -
> -	case 4:
> -		__raw_writel(val, addr);
> -		__raw_readl(addr);
> -		break;
> -	}
> +	int ret;
>  
> +	v3_open_config_window();
> +	ret = pci_generic_config_write(bus, devfn, where, size, val);
>  	v3_close_config_window();
> -	raw_spin_unlock_irqrestore(&v3_lock, flags);
> -
> -	return PCIBIOS_SUCCESSFUL;
> +	return ret;
>  }
>  
>  static struct pci_ops pci_v3_ops = {
> +	.map_bus = v3_map_bus,
>  	.read	= v3_read_config,
>  	.write	= v3_write_config,
>  };
> @@ -672,8 +650,6 @@ static void __init pci_v3_preinit(void)
>  	hook_fault_code(8, v3_pci_fault, SIGBUS, 0, "external abort on non-linefetch");
>  	hook_fault_code(10, v3_pci_fault, SIGBUS, 0, "external abort on non-linefetch");
>  
> -	raw_spin_lock_irqsave(&v3_lock, flags);
> -
>  	/*
>  	 * Unlock V3 registers, but only if they were previously locked.
>  	 */
> @@ -736,8 +712,6 @@ static void __init pci_v3_preinit(void)
>  	v3_writew(V3_LB_CFG, v3_readw(V3_LB_CFG) | (1 << 10));
>  	v3_writeb(V3_LB_IMASK, 0x28);
>  	__raw_writel(3, ap_syscon_base + INTEGRATOR_SC_PCIENABLE_OFFSET);
> -
> -	raw_spin_unlock_irqrestore(&v3_lock, flags);
>  }
>  
>  static void __init pci_v3_postinit(void)

WARNING: multiple messages have this Message-ID (diff)
From: bhelgaas@google.com (Bjorn Helgaas)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 07/16] ARM: integrator: convert PCI to use generic config accesses
Date: Mon, 26 Jan 2015 12:22:33 -0600	[thread overview]
Message-ID: <20150126182233.GB4063@google.com> (raw)
In-Reply-To: <20150122203336.GD13072@google.com>

On Thu, Jan 22, 2015 at 02:33:36PM -0600, Bjorn Helgaas wrote:
> On Mon, Jan 12, 2015 at 01:05:12AM +0100, Linus Walleij wrote:
> > On Sat, Jan 10, 2015 at 10:53 PM, Arnd Bergmann <arnd@arndb.de> wrote:
> > > On Saturday 10 January 2015 22:40:22 Linus Walleij wrote:
> > >> >  static int v3_read_config(struct pci_bus *bus, unsigned int devfn, int where,
> > >> >                           int size, u32 *val)
> > >> >  {
> > >> > -       addr = v3_open_config_window(bus, devfn, where);
> > >> > +       int ret = pci_generic_config_read(bus, devfn, where, size, val);
> > >> >         v3_close_config_window();
> > >> > +       return ret;
> > >> >  }
> > >> >
> > >> >  static int v3_write_config(struct pci_bus *bus, unsigned int devfn, int where,
> > >> >                            int size, u32 val)
> > >> >  {
> > >> > +       int ret = pci_generic_config_write(bus, devfn, where, size, val);
> > >> >         v3_close_config_window();
> > >> > -       raw_spin_unlock_irqrestore(&v3_lock, flags);
> > >> > +       return ret;
> > >> >  }
> > >> >
> > >> >  static struct pci_ops pci_v3_ops = {
> > >> > +       .map_bus = v3_open_config_window,
> > >> >         .read   = v3_read_config,
> > >> >         .write  = v3_write_config,
> > >>
> > >> So .map_bus is called before every .read/.write operation I take it.
> > >>
> > >> Wouldn't it be proper to call the v3_close_config_window() from a
> > >> matching .unmap_bus() callback for symmetry?
> > >
> > > It would be nicer for integrator but useless for anything else, so
> > > I'd vote for leaving it the way Rob posted.
> > 
> > OK I buy that, throw in a comment about it in the code if there
> > is some time for iterating the patch.
> 
> Would you prefer something like the following instead?  It keeps the
> v3_open/close symmetry, but it does break apart and duplicate some of the
> logic from v3_open_config_window().

Hearing nothing, I kept Rob's initial version.  It can be tweaked later if
anybody wants to.  I just want to get all this into v3.20.

Bjorn

> commit 3e0c269a560968002298d22ac47bde4bd45aea8e
> Author: Rob Herring <robh@kernel.org>
> Date:   Fri Jan 9 20:34:41 2015 -0600
> 
>     ARM: integrator: Convert PCI to use generic config accessors
>     
>     Convert the integrator PCI driver to use the generic config access
>     functions.
>     
>     This changes accesses from __raw_readX/__raw_writeX to readX/writeX
>     variants.  The spinlock is removed because it is unnecessary.  The config
>     read and write functions are already protected with a spinlock and no
>     access can occur during the .pre_init function.
>     
>     Signed-off-by: Rob Herring <robh@kernel.org>
>     Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
>     Acked-by: Linus Walleij <linus.walleij@linaro.org>
>     CC: Russell King <linux@arm.linux.org.uk>
>     CC: linux-arm-kernel at lists.infradead.org
> 
> diff --git a/arch/arm/mach-integrator/pci_v3.c b/arch/arm/mach-integrator/pci_v3.c
> index c186a17c2cff..c1098729cf8a 100644
> --- a/arch/arm/mach-integrator/pci_v3.c
> +++ b/arch/arm/mach-integrator/pci_v3.c
> @@ -324,7 +324,7 @@ static u64 pre_mem_pci_sz;
>   * configuration address space, you present the V3 with the following pattern
>   * (which is very nearly a type 1 (except that the lower two bits are 00 and
>   * not 01).   In order for this mapping to work you need to set up one of
> - * the local to PCI aperatures to 16Mbytes in length translating to
> + * the local to PCI apertures to 16Mbytes in length translating to
>   * PCI configuration space starting at 0x0000.0000.
>   *
>   * PCI configuration cycles look like this:
> @@ -356,15 +356,14 @@ static u64 pre_mem_pci_sz;
>   *	 7:2	register number
>   *
>   */
> -static DEFINE_RAW_SPINLOCK(v3_lock);
>  
>  #undef V3_LB_BASE_PREFETCH
>  #define V3_LB_BASE_PREFETCH 0
>  
> -static void __iomem *v3_open_config_window(struct pci_bus *bus,
> -					   unsigned int devfn, int offset)
> +static void v3_open_config_window(struct pci_bus *bus, unsigned int devfn,
> +				  int offset)
>  {
> -	unsigned int address, mapaddress, busnr;
> +	unsigned int mapaddress, busnr;
>  
>  	busnr = bus->number;
>  
> @@ -381,14 +380,10 @@ static void __iomem *v3_open_config_window(struct pci_bus *bus,
>  		/*
>  		 * local bus segment so need a type 0 config cycle
>  		 *
> -		 * build the PCI configuration "address" with one-hot in
> -		 * A31-A11
> -		 *
>  		 * mapaddress:
>  		 *  3:1 = config cycle (101)
>  		 *  0   = PCI A1 & A0 are 0 (0)
>  		 */
> -		address = PCI_FUNC(devfn) << 8;
>  		mapaddress = V3_LB_MAP_TYPE_CONFIG;
>  
>  		if (slot > 12)
> @@ -396,26 +391,15 @@ static void __iomem *v3_open_config_window(struct pci_bus *bus,
>  			 * high order bits are handled by the MAP register
>  			 */
>  			mapaddress |= 1 << (slot - 5);
> -		else
> -			/*
> -			 * low order bits handled directly in the address
> -			 */
> -			address |= 1 << (slot + 11);
>  	} else {
>          	/*
>  		 * not the local bus segment so need a type 1 config cycle
>  		 *
> -		 * address:
> -		 *  23:16 = bus number
> -		 *  15:11 = slot number (7:3 of devfn)
> -		 *  10:8  = func number (2:0 of devfn)
> -		 *
>  		 * mapaddress:
>  		 *  3:1 = config cycle (101)
>  		 *  0   = PCI A1 & A0 from host bus (1)
>  		 */
>  		mapaddress = V3_LB_MAP_TYPE_CONFIG | V3_LB_MAP_AD_LOW_EN;
> -		address = (busnr << 16) | (devfn << 8);
>  	}
>  
>  	/*
> @@ -432,8 +416,6 @@ static void __iomem *v3_open_config_window(struct pci_bus *bus,
>  	v3_writel(V3_LB_BASE1, v3_addr_to_lb_base(conf_mem.start) |
>  			V3_LB_BASE_ADR_SIZE_16MB | V3_LB_BASE_ENABLE);
>  	v3_writew(V3_LB_MAP1, mapaddress);
> -
> -	return PCI_CONFIG_VADDR + address + offset;
>  }
>  
>  static void v3_close_config_window(void)
> @@ -454,70 +436,66 @@ static void v3_close_config_window(void)
>  			V3_LB_BASE_ADR_SIZE_256MB | V3_LB_BASE_ENABLE);
>  }
>  
> -static int v3_read_config(struct pci_bus *bus, unsigned int devfn, int where,
> -			  int size, u32 *val)
> +static void __iomem *v3_map_bus(struct pci_bus *bus,
> +					   unsigned int devfn, int offset)
>  {
> -	void __iomem *addr;
> -	unsigned long flags;
> -	u32 v;
> +	unsigned int busnr = bus->number;
> +	unsigned int address;
>  
> -	raw_spin_lock_irqsave(&v3_lock, flags);
> -	addr = v3_open_config_window(bus, devfn, where);
> -
> -	switch (size) {
> -	case 1:
> -		v = __raw_readb(addr);
> -		break;
> +	if (busnr == 0) {
> +		int slot = PCI_SLOT(devfn);
>  
> -	case 2:
> -		v = __raw_readw(addr);
> -		break;
> +		/*
> +		 * build the PCI configuration "address" with function in
> +		 * A10-A8 and device one-hot in A31-A11
> +		 */
> +		address = PCI_FUNC(devfn) << 8;
>  
> -	default:
> -		v = __raw_readl(addr);
> -		break;
> +		/*
> +		 * high order bits are handled by the MAP register;
> +		 * low order bits handled directly in the address
> +		 */
> +		if (slot <= 12)
> +			address |= 1 << (slot + 11);
> +	} else {
> +		/*
> +		 * not the local bus segment so need a type 1 config cycle
> +		 *
> +		 * address:
> +		 *  23:16 = bus number
> +		 *  15:11 = slot number (7:3 of devfn)
> +		 *  10:8  = func number (2:0 of devfn)
> +		 */
> +		address = (busnr << 16) | (devfn << 8);
>  	}
>  
> -	v3_close_config_window();
> -	raw_spin_unlock_irqrestore(&v3_lock, flags);
> +	return PCI_CONFIG_VADDR + address + offset;
> +}
> +
> +static int v3_read_config(struct pci_bus *bus, unsigned int devfn, int where,
> +			  int size, u32 *val)
> +{
> +	int ret;
>  
> -	*val = v;
> -	return PCIBIOS_SUCCESSFUL;
> +	v3_open_config_window();
> +	ret = pci_generic_config_read(bus, devfn, where, size, val);
> +	v3_close_config_window();
> +	return ret;
>  }
>  
>  static int v3_write_config(struct pci_bus *bus, unsigned int devfn, int where,
>  			   int size, u32 val)
>  {
> -	void __iomem *addr;
> -	unsigned long flags;
> -
> -	raw_spin_lock_irqsave(&v3_lock, flags);
> -	addr = v3_open_config_window(bus, devfn, where);
> -
> -	switch (size) {
> -	case 1:
> -		__raw_writeb((u8)val, addr);
> -		__raw_readb(addr);
> -		break;
> -
> -	case 2:
> -		__raw_writew((u16)val, addr);
> -		__raw_readw(addr);
> -		break;
> -
> -	case 4:
> -		__raw_writel(val, addr);
> -		__raw_readl(addr);
> -		break;
> -	}
> +	int ret;
>  
> +	v3_open_config_window();
> +	ret = pci_generic_config_write(bus, devfn, where, size, val);
>  	v3_close_config_window();
> -	raw_spin_unlock_irqrestore(&v3_lock, flags);
> -
> -	return PCIBIOS_SUCCESSFUL;
> +	return ret;
>  }
>  
>  static struct pci_ops pci_v3_ops = {
> +	.map_bus = v3_map_bus,
>  	.read	= v3_read_config,
>  	.write	= v3_write_config,
>  };
> @@ -672,8 +650,6 @@ static void __init pci_v3_preinit(void)
>  	hook_fault_code(8, v3_pci_fault, SIGBUS, 0, "external abort on non-linefetch");
>  	hook_fault_code(10, v3_pci_fault, SIGBUS, 0, "external abort on non-linefetch");
>  
> -	raw_spin_lock_irqsave(&v3_lock, flags);
> -
>  	/*
>  	 * Unlock V3 registers, but only if they were previously locked.
>  	 */
> @@ -736,8 +712,6 @@ static void __init pci_v3_preinit(void)
>  	v3_writew(V3_LB_CFG, v3_readw(V3_LB_CFG) | (1 << 10));
>  	v3_writeb(V3_LB_IMASK, 0x28);
>  	__raw_writel(3, ap_syscon_base + INTEGRATOR_SC_PCIENABLE_OFFSET);
> -
> -	raw_spin_unlock_irqrestore(&v3_lock, flags);
>  }
>  
>  static void __init pci_v3_postinit(void)

  reply	other threads:[~2015-01-26 18:22 UTC|newest]

Thread overview: 74+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-01-10  2:34 [PATCH 00/16] PCI generic configuration space accessors Rob Herring
2015-01-10  2:34 ` Rob Herring
2015-01-10  2:34 ` Rob Herring
2015-01-10  2:34 ` Rob Herring
2015-01-10  2:34 ` Rob Herring
2015-01-10  2:34 ` [PATCH 01/16] frv: add struct pci_ops member names to initialization Rob Herring
2015-01-10  2:34 ` [PATCH 02/16] mips: " Rob Herring
2015-01-10  2:34 ` [PATCH 03/16] mn10300: " Rob Herring
2015-01-10  2:34 ` [PATCH 04/16] powerpc: " Rob Herring
2015-01-10  2:34   ` Rob Herring
2015-01-10  2:34 ` [PATCH 05/16] pci: introduce common pci config space accessors Rob Herring
2015-01-12 10:01   ` Thierry Reding
2015-01-12 10:04     ` Thierry Reding
2015-01-10  2:34 ` [PATCH 06/16] ARM: cns3xxx: convert PCI to use generic config accesses Rob Herring
2015-01-10  2:34   ` Rob Herring
2015-01-29  6:16   ` Krzysztof Hałasa
2015-01-29  6:16     ` Krzysztof Hałasa
2015-01-29 14:35     ` Bjorn Helgaas
2015-01-29 14:35       ` Bjorn Helgaas
2015-01-10  2:34 ` [PATCH 07/16] ARM: integrator: " Rob Herring
2015-01-10  2:34   ` Rob Herring
2015-01-10 21:40   ` Linus Walleij
2015-01-10 21:40     ` Linus Walleij
2015-01-10 21:40     ` Linus Walleij
2015-01-10 21:53     ` Arnd Bergmann
2015-01-10 21:53       ` Arnd Bergmann
2015-01-10 21:53       ` Arnd Bergmann
2015-01-12  0:05       ` Linus Walleij
2015-01-12  0:05         ` Linus Walleij
2015-01-12  0:05         ` Linus Walleij
2015-01-22 20:33         ` Bjorn Helgaas
2015-01-22 20:33           ` Bjorn Helgaas
2015-01-22 20:33           ` Bjorn Helgaas
2015-01-26 18:22           ` Bjorn Helgaas [this message]
2015-01-26 18:22             ` Bjorn Helgaas
2015-01-26 18:22             ` Bjorn Helgaas
2015-01-26 23:22             ` Linus Walleij
2015-01-26 23:22               ` Linus Walleij
2015-01-26 23:22               ` Linus Walleij
2015-01-10  2:34 ` [PATCH 08/16] ARM: sa1100: " Rob Herring
2015-01-10  2:34   ` Rob Herring
2015-01-10  2:34 ` [PATCH 09/16] ARM: ks8695: " Rob Herring
2015-01-10  2:34   ` Rob Herring
2015-01-12 12:38   ` Greg Ungerer
2015-01-12 12:38     ` Greg Ungerer
2015-01-10  2:34 ` [PATCH 10/16] powerpc: fsl_pci: " Rob Herring
2015-01-10  2:34   ` Rob Herring
2015-01-10  2:34 ` [PATCH 11/16] powerpc: powermac: " Rob Herring
2015-01-10  2:34   ` Rob Herring
2015-01-10  2:34 ` [PATCH 12/16] pci/host: generic: convert " Rob Herring
2015-01-10  2:34   ` Rob Herring
2015-01-12 17:51   ` Will Deacon
2015-01-12 17:51     ` Will Deacon
2015-01-12 17:51     ` Will Deacon
2015-01-10  2:34 ` [PATCH 13/16] pci/host: rcar-gen2: " Rob Herring
2015-01-10  2:34   ` Rob Herring
2015-01-12  9:25   ` Geert Uytterhoeven
2015-01-12  9:25     ` Geert Uytterhoeven
2015-01-10  2:34 ` [PATCH 14/16] pci/host: tegra: " Rob Herring
2015-01-12 10:07   ` Thierry Reding
2015-01-10  2:34 ` [PATCH 15/16] pci/host: xgene: " Rob Herring
2015-01-10  2:34   ` Rob Herring
2015-01-10  2:34 ` [PATCH 16/16] pci/host: xilinx: " Rob Herring
2015-01-10  2:34   ` Rob Herring
2015-01-22 21:03 ` [PATCH 00/16] PCI generic configuration space accessors Bjorn Helgaas
2015-01-22 21:03   ` Bjorn Helgaas
2015-01-22 21:03   ` Bjorn Helgaas
2015-01-22 21:03   ` Bjorn Helgaas
2015-01-22 21:03   ` Bjorn Helgaas
2015-01-22 23:47   ` Rob Herring
2015-01-22 23:47     ` Rob Herring
2015-01-22 23:47     ` Rob Herring
2015-01-22 23:47     ` Rob Herring
2015-01-22 23:47     ` Rob Herring

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=20150126182233.GB4063@google.com \
    --to=bhelgaas@google.com \
    --cc=arnd@arndb.de \
    --cc=linus.walleij@linaro.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pci@vger.kernel.org \
    --cc=linux@arm.linux.org.uk \
    --cc=robh@kernel.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 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.