Re: [PATCH v12 05/12] PCI: OF: Fix the conversion of IO ranges into IO resources.

2014-09-24 Thread Andrew Murray
On 24 September 2014 01:22, Bjorn Helgaas  wrote:
> [+cc Andrew]
>
> On Tue, Sep 23, 2014 at 08:01:07PM +0100, Liviu Dudau wrote:
>> The ranges property for a host bridge controller in DT describes
>> the mapping between the PCI bus address and the CPU physical address.
>> The resources framework however expects that the IO resources start
>> at a pseudo "port" address 0 (zero) and have a maximum size of 
>> IO_SPACE_LIMIT.
>> The conversion from pci ranges to resources failed to take that into account,
>> returning a CPU physical address instead of a port number.
>>
>> Also fix all the drivers that depend on the old behaviour by fetching
>> the CPU physical address based on the port number where it is being needed.
>>
>> Cc: Grant Likely 
>> Cc: Rob Herring 
>> Cc: Arnd Bergmann 
>> Acked-by: Linus Walleij 
>> Cc: Thierry Reding 
>> Cc: Simon Horman 
>> Cc: Catalin Marinas 
>> Signed-off-by: Liviu Dudau 
>> ---
>>  arch/arm/mach-integrator/pci_v3.c | 23 ++--
>>  drivers/of/address.c  | 44 
>> +++
>>  drivers/pci/host/pci-tegra.c  | 10 ++---
>>  drivers/pci/host/pcie-rcar.c  | 21 +--
>>  include/linux/of_address.h| 15 ++---
>>  5 files changed, 82 insertions(+), 31 deletions(-)
>> ...
>
> The of_pci_range_to_resource() implementation in drivers/of/address.c is
> always compiled when CONFIG_OF_ADDRESS=y, but when CONFIG_OF_ADDRESS=y and
> CONFIG_PCI is not set, we get the static inline version from
> include/linux/of_address.h as well, causing a redefinition error.
>
>> diff --git a/drivers/of/address.c b/drivers/of/address.c
>> @@ -957,12 +957,48 @@ bool of_dma_is_coherent(struct device_node *np)
>> ...
>> +int of_pci_range_to_resource(struct of_pci_range *range,
>> + struct device_node *np, struct resource *res)
>
>> diff --git a/include/linux/of_address.h b/include/linux/of_address.h
>> ...
>>  #else /* CONFIG_OF_ADDRESS && CONFIG_PCI */
>>  static inline int of_pci_address_to_resource(struct device_node *dev, int 
>> bar,
>>struct resource *r)
>> @@ -144,6 +139,12 @@ static inline int of_pci_address_to_resource(struct 
>> device_node *dev, int bar,
>>   return -ENOSYS;
>>  }
>>
>> +static inline int of_pci_range_to_resource(struct of_pci_range *range,
>> + struct device_node *np, struct resource *res)
>> +{
>> + return -ENOSYS;
>> +}
>
> My proposal to fix it is the following three patches.  The first moves the
> inline version of of_pci_range_to_resource() into the existing "#if
> defined(CONFIG_OF_ADDRESS) && defined(CONFIG_PCI)" block.
>
> Andrew added it (and some other PCI-related things) with 29b635c00f3e
> ("of/pci: Provide support for parsing PCI DT ranges property") to
> of_address.h outside of any ifdefs, so it's always available.  Maybe
> there's a reason that's needed in the non-CONFIG_PCI case, but I didn't see
> it with a quick look.
>

There was no reason - it probably should have been inside a #ifdef
like the others.

Andrew Murray
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH v12 05/12] PCI: OF: Fix the conversion of IO ranges into IO resources.

2014-09-24 Thread Robert Richter
On 23.09.14 19:16:19, Bjorn Helgaas wrote:
> You probably saw the subsequent [pci:pci/host-generic 10/13]
> drivers/of/of_pci.c:202:3: error: implicit declaration of function
> 'of_pci_range_to_resource' error.
> 
> I looked at that a bit, but gave up.  Apparently drivers/of/of_pci.c
> can be compiled with CONFIG_PCI=y but CONFIG_OF_ADDRESS not set..

This is due to the !SPARC dependency in drivers/of/Kconfig:

config OF_ADDRESS
def_bool y
depends on !SPARC
select OF_ADDRESS_PCI if PCI

Error above occurs with ARCH=sparc.

-Robert
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH v12 05/12] PCI: OF: Fix the conversion of IO ranges into IO resources.

2014-09-24 Thread Robert Richter
On 23.09.14 19:16:19, Bjorn Helgaas wrote:
 You probably saw the subsequent [pci:pci/host-generic 10/13]
 drivers/of/of_pci.c:202:3: error: implicit declaration of function
 'of_pci_range_to_resource' error.
 
 I looked at that a bit, but gave up.  Apparently drivers/of/of_pci.c
 can be compiled with CONFIG_PCI=y but CONFIG_OF_ADDRESS not set..

This is due to the !SPARC dependency in drivers/of/Kconfig:

config OF_ADDRESS
def_bool y
depends on !SPARC
select OF_ADDRESS_PCI if PCI

Error above occurs with ARCH=sparc.

-Robert
--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH v12 05/12] PCI: OF: Fix the conversion of IO ranges into IO resources.

2014-09-24 Thread Andrew Murray
On 24 September 2014 01:22, Bjorn Helgaas bhelg...@google.com wrote:
 [+cc Andrew]

 On Tue, Sep 23, 2014 at 08:01:07PM +0100, Liviu Dudau wrote:
 The ranges property for a host bridge controller in DT describes
 the mapping between the PCI bus address and the CPU physical address.
 The resources framework however expects that the IO resources start
 at a pseudo port address 0 (zero) and have a maximum size of 
 IO_SPACE_LIMIT.
 The conversion from pci ranges to resources failed to take that into account,
 returning a CPU physical address instead of a port number.

 Also fix all the drivers that depend on the old behaviour by fetching
 the CPU physical address based on the port number where it is being needed.

 Cc: Grant Likely grant.lik...@linaro.org
 Cc: Rob Herring robh...@kernel.org
 Cc: Arnd Bergmann a...@arndb.de
 Acked-by: Linus Walleij linus.wall...@linaro.org
 Cc: Thierry Reding thierry.red...@gmail.com
 Cc: Simon Horman ho...@verge.net.au
 Cc: Catalin Marinas catalin.mari...@arm.com
 Signed-off-by: Liviu Dudau liviu.du...@arm.com
 ---
  arch/arm/mach-integrator/pci_v3.c | 23 ++--
  drivers/of/address.c  | 44 
 +++
  drivers/pci/host/pci-tegra.c  | 10 ++---
  drivers/pci/host/pcie-rcar.c  | 21 +--
  include/linux/of_address.h| 15 ++---
  5 files changed, 82 insertions(+), 31 deletions(-)
 ...

 The of_pci_range_to_resource() implementation in drivers/of/address.c is
 always compiled when CONFIG_OF_ADDRESS=y, but when CONFIG_OF_ADDRESS=y and
 CONFIG_PCI is not set, we get the static inline version from
 include/linux/of_address.h as well, causing a redefinition error.

 diff --git a/drivers/of/address.c b/drivers/of/address.c
 @@ -957,12 +957,48 @@ bool of_dma_is_coherent(struct device_node *np)
 ...
 +int of_pci_range_to_resource(struct of_pci_range *range,
 + struct device_node *np, struct resource *res)

 diff --git a/include/linux/of_address.h b/include/linux/of_address.h
 ...
  #else /* CONFIG_OF_ADDRESS  CONFIG_PCI */
  static inline int of_pci_address_to_resource(struct device_node *dev, int 
 bar,
struct resource *r)
 @@ -144,6 +139,12 @@ static inline int of_pci_address_to_resource(struct 
 device_node *dev, int bar,
   return -ENOSYS;
  }

 +static inline int of_pci_range_to_resource(struct of_pci_range *range,
 + struct device_node *np, struct resource *res)
 +{
 + return -ENOSYS;
 +}

 My proposal to fix it is the following three patches.  The first moves the
 inline version of of_pci_range_to_resource() into the existing #if
 defined(CONFIG_OF_ADDRESS)  defined(CONFIG_PCI) block.

 Andrew added it (and some other PCI-related things) with 29b635c00f3e
 (of/pci: Provide support for parsing PCI DT ranges property) to
 of_address.h outside of any ifdefs, so it's always available.  Maybe
 there's a reason that's needed in the non-CONFIG_PCI case, but I didn't see
 it with a quick look.


There was no reason - it probably should have been inside a #ifdef
like the others.

Andrew Murray
--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH v12 05/12] PCI: OF: Fix the conversion of IO ranges into IO resources.

2014-09-23 Thread Bjorn Helgaas
On Tue, Sep 23, 2014 at 7:12 PM, Liviu Dudau  wrote:
> On Tue, Sep 23, 2014 at 06:22:53PM -0600, Bjorn Helgaas wrote:
>> [+cc Andrew]
>>
>> On Tue, Sep 23, 2014 at 08:01:07PM +0100, Liviu Dudau wrote:
>> > The ranges property for a host bridge controller in DT describes
>> > the mapping between the PCI bus address and the CPU physical address.
>> > The resources framework however expects that the IO resources start
>> > at a pseudo "port" address 0 (zero) and have a maximum size of 
>> > IO_SPACE_LIMIT.
>> > The conversion from pci ranges to resources failed to take that into 
>> > account,
>> > returning a CPU physical address instead of a port number.
>> >
>> > Also fix all the drivers that depend on the old behaviour by fetching
>> > the CPU physical address based on the port number where it is being needed.
>> >
>> > Cc: Grant Likely 
>> > Cc: Rob Herring 
>> > Cc: Arnd Bergmann 
>> > Acked-by: Linus Walleij 
>> > Cc: Thierry Reding 
>> > Cc: Simon Horman 
>> > Cc: Catalin Marinas 
>> > Signed-off-by: Liviu Dudau 
>> > ---
>> >  arch/arm/mach-integrator/pci_v3.c | 23 ++--
>> >  drivers/of/address.c  | 44 
>> > +++
>> >  drivers/pci/host/pci-tegra.c  | 10 ++---
>> >  drivers/pci/host/pcie-rcar.c  | 21 +--
>> >  include/linux/of_address.h| 15 ++---
>> >  5 files changed, 82 insertions(+), 31 deletions(-)
>> > ...
>>
>> The of_pci_range_to_resource() implementation in drivers/of/address.c is
>> always compiled when CONFIG_OF_ADDRESS=y, but when CONFIG_OF_ADDRESS=y and
>> CONFIG_PCI is not set, we get the static inline version from
>> include/linux/of_address.h as well, causing a redefinition error.
>>
>> > diff --git a/drivers/of/address.c b/drivers/of/address.c
>> > @@ -957,12 +957,48 @@ bool of_dma_is_coherent(struct device_node *np)
>> > ...
>> > +int of_pci_range_to_resource(struct of_pci_range *range,
>> > +   struct device_node *np, struct resource *res)
>>
>> > diff --git a/include/linux/of_address.h b/include/linux/of_address.h
>> > ...
>> >  #else /* CONFIG_OF_ADDRESS && CONFIG_PCI */
>> >  static inline int of_pci_address_to_resource(struct device_node *dev, int 
>> > bar,
>> >  struct resource *r)
>> > @@ -144,6 +139,12 @@ static inline int of_pci_address_to_resource(struct 
>> > device_node *dev, int bar,
>> > return -ENOSYS;
>> >  }
>> >
>> > +static inline int of_pci_range_to_resource(struct of_pci_range *range,
>> > +   struct device_node *np, struct resource *res)
>> > +{
>> > +   return -ENOSYS;
>> > +}
>>
>> My proposal to fix it is the following three patches.  The first moves the
>> inline version of of_pci_range_to_resource() into the existing "#if
>> defined(CONFIG_OF_ADDRESS) && defined(CONFIG_PCI)" block.
>>
>> Andrew added it (and some other PCI-related things) with 29b635c00f3e
>> ("of/pci: Provide support for parsing PCI DT ranges property") to
>> of_address.h outside of any ifdefs, so it's always available.  Maybe
>> there's a reason that's needed in the non-CONFIG_PCI case, but I didn't see
>> it with a quick look.
>>
>> The second moves of_pci_range_to_resource() to address.c, still inside the
>> "#ifdef CONFIG_PCI" block.
>
> Hi Bjorn,
>
> Looks good to me. Sorry for messing this up, I've tested a combination of
> CONFIG_PCI=y and CONFIG_PCI=n but it looks like I've only tested
> CONFIG_OF_ADDRESS=CONFIG_PCI (both enabled or both disabled).

You probably saw the subsequent [pci:pci/host-generic 10/13]
drivers/of/of_pci.c:202:3: error: implicit declaration of function
'of_pci_range_to_resource' error.

I looked at that a bit, but gave up.  Apparently drivers/of/of_pci.c
can be compiled with CONFIG_PCI=y but CONFIG_OF_ADDRESS not set..

Bjorn
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH v12 05/12] PCI: OF: Fix the conversion of IO ranges into IO resources.

2014-09-23 Thread Liviu Dudau
On Tue, Sep 23, 2014 at 06:22:53PM -0600, Bjorn Helgaas wrote:
> [+cc Andrew]
> 
> On Tue, Sep 23, 2014 at 08:01:07PM +0100, Liviu Dudau wrote:
> > The ranges property for a host bridge controller in DT describes
> > the mapping between the PCI bus address and the CPU physical address.
> > The resources framework however expects that the IO resources start
> > at a pseudo "port" address 0 (zero) and have a maximum size of 
> > IO_SPACE_LIMIT.
> > The conversion from pci ranges to resources failed to take that into 
> > account,
> > returning a CPU physical address instead of a port number.
> > 
> > Also fix all the drivers that depend on the old behaviour by fetching
> > the CPU physical address based on the port number where it is being needed.
> > 
> > Cc: Grant Likely 
> > Cc: Rob Herring 
> > Cc: Arnd Bergmann 
> > Acked-by: Linus Walleij 
> > Cc: Thierry Reding 
> > Cc: Simon Horman 
> > Cc: Catalin Marinas 
> > Signed-off-by: Liviu Dudau 
> > ---
> >  arch/arm/mach-integrator/pci_v3.c | 23 ++--
> >  drivers/of/address.c  | 44 
> > +++
> >  drivers/pci/host/pci-tegra.c  | 10 ++---
> >  drivers/pci/host/pcie-rcar.c  | 21 +--
> >  include/linux/of_address.h| 15 ++---
> >  5 files changed, 82 insertions(+), 31 deletions(-)
> > ...
> 
> The of_pci_range_to_resource() implementation in drivers/of/address.c is
> always compiled when CONFIG_OF_ADDRESS=y, but when CONFIG_OF_ADDRESS=y and
> CONFIG_PCI is not set, we get the static inline version from
> include/linux/of_address.h as well, causing a redefinition error.
> 
> > diff --git a/drivers/of/address.c b/drivers/of/address.c
> > @@ -957,12 +957,48 @@ bool of_dma_is_coherent(struct device_node *np)
> > ...
> > +int of_pci_range_to_resource(struct of_pci_range *range,
> > +   struct device_node *np, struct resource *res)
> 
> > diff --git a/include/linux/of_address.h b/include/linux/of_address.h
> > ...
> >  #else /* CONFIG_OF_ADDRESS && CONFIG_PCI */
> >  static inline int of_pci_address_to_resource(struct device_node *dev, int 
> > bar,
> >  struct resource *r)
> > @@ -144,6 +139,12 @@ static inline int of_pci_address_to_resource(struct 
> > device_node *dev, int bar,
> > return -ENOSYS;
> >  }
> >  
> > +static inline int of_pci_range_to_resource(struct of_pci_range *range,
> > +   struct device_node *np, struct resource *res)
> > +{
> > +   return -ENOSYS;
> > +}
> 
> My proposal to fix it is the following three patches.  The first moves the
> inline version of of_pci_range_to_resource() into the existing "#if
> defined(CONFIG_OF_ADDRESS) && defined(CONFIG_PCI)" block.
> 
> Andrew added it (and some other PCI-related things) with 29b635c00f3e
> ("of/pci: Provide support for parsing PCI DT ranges property") to
> of_address.h outside of any ifdefs, so it's always available.  Maybe
> there's a reason that's needed in the non-CONFIG_PCI case, but I didn't see
> it with a quick look.
> 
> The second moves of_pci_range_to_resource() to address.c, still inside the
> "#ifdef CONFIG_PCI" block.

Hi Bjorn,

Looks good to me. Sorry for messing this up, I've tested a combination of
CONFIG_PCI=y and CONFIG_PCI=n but it looks like I've only tested
CONFIG_OF_ADDRESS=CONFIG_PCI (both enabled or both disabled).

Best regards,
Liviu

> 
> Bjorn
> 
> 
> commit 95a60df1c2d400c676ab1d20271735e2b4735437
> Author: Bjorn Helgaas 
> Date:   Tue Sep 23 17:27:42 2014 -0600
> 
> of/pci: Define of_pci_range_to_resource() only when CONFIG_PCI=y
> 
> of_pci_range_to_resource() was previously defined always, but it's only
> used by PCI code, so move the definition inside the CONFIG_OF_ADDRESS &&
> CONFIG_PCI block.
> 
> Signed-off-by: Bjorn Helgaas 
> 
> diff --git a/include/linux/of_address.h b/include/linux/of_address.h
> index f8cc7daa420c..ecf913cf53b2 100644
> --- a/include/linux/of_address.h
> +++ b/include/linux/of_address.h
> @@ -23,17 +23,6 @@ struct of_pci_range {
>  #define for_each_of_pci_range(parser, range) \
>   for (; of_pci_range_parser_one(parser, range);)
>  
> -static inline void of_pci_range_to_resource(struct of_pci_range *range,
> - struct device_node *np,
> - struct resource *res)
> -{
> - res->flags = range->flags;
> - res->start = range->cpu_addr;
> - res->end = range->cpu_addr + range->size - 1;
> - res->parent = res->child = res->sibling = NULL;
> - res->name = np->full_name;
> -}
> -
>  /* Translate a DMA address from device space to CPU space */
>  extern u64 of_translate_dma_address(struct device_node *dev,
>   const __be32 *in_addr);
> @@ -140,6 +129,18 @@ extern const __be32 *of_get_pci_address(struct 
> device_node *dev, int bar_no,
>  u64 *size, unsigned int *flags);
>  extern int 

Re: [PATCH v12 05/12] PCI: OF: Fix the conversion of IO ranges into IO resources.

2014-09-23 Thread Bjorn Helgaas
[+cc Andrew]

On Tue, Sep 23, 2014 at 08:01:07PM +0100, Liviu Dudau wrote:
> The ranges property for a host bridge controller in DT describes
> the mapping between the PCI bus address and the CPU physical address.
> The resources framework however expects that the IO resources start
> at a pseudo "port" address 0 (zero) and have a maximum size of IO_SPACE_LIMIT.
> The conversion from pci ranges to resources failed to take that into account,
> returning a CPU physical address instead of a port number.
> 
> Also fix all the drivers that depend on the old behaviour by fetching
> the CPU physical address based on the port number where it is being needed.
> 
> Cc: Grant Likely 
> Cc: Rob Herring 
> Cc: Arnd Bergmann 
> Acked-by: Linus Walleij 
> Cc: Thierry Reding 
> Cc: Simon Horman 
> Cc: Catalin Marinas 
> Signed-off-by: Liviu Dudau 
> ---
>  arch/arm/mach-integrator/pci_v3.c | 23 ++--
>  drivers/of/address.c  | 44 
> +++
>  drivers/pci/host/pci-tegra.c  | 10 ++---
>  drivers/pci/host/pcie-rcar.c  | 21 +--
>  include/linux/of_address.h| 15 ++---
>  5 files changed, 82 insertions(+), 31 deletions(-)
> ...

The of_pci_range_to_resource() implementation in drivers/of/address.c is
always compiled when CONFIG_OF_ADDRESS=y, but when CONFIG_OF_ADDRESS=y and
CONFIG_PCI is not set, we get the static inline version from
include/linux/of_address.h as well, causing a redefinition error.

> diff --git a/drivers/of/address.c b/drivers/of/address.c
> @@ -957,12 +957,48 @@ bool of_dma_is_coherent(struct device_node *np)
> ...
> +int of_pci_range_to_resource(struct of_pci_range *range,
> + struct device_node *np, struct resource *res)

> diff --git a/include/linux/of_address.h b/include/linux/of_address.h
> ...
>  #else /* CONFIG_OF_ADDRESS && CONFIG_PCI */
>  static inline int of_pci_address_to_resource(struct device_node *dev, int 
> bar,
>struct resource *r)
> @@ -144,6 +139,12 @@ static inline int of_pci_address_to_resource(struct 
> device_node *dev, int bar,
>   return -ENOSYS;
>  }
>  
> +static inline int of_pci_range_to_resource(struct of_pci_range *range,
> + struct device_node *np, struct resource *res)
> +{
> + return -ENOSYS;
> +}

My proposal to fix it is the following three patches.  The first moves the
inline version of of_pci_range_to_resource() into the existing "#if
defined(CONFIG_OF_ADDRESS) && defined(CONFIG_PCI)" block.

Andrew added it (and some other PCI-related things) with 29b635c00f3e
("of/pci: Provide support for parsing PCI DT ranges property") to
of_address.h outside of any ifdefs, so it's always available.  Maybe
there's a reason that's needed in the non-CONFIG_PCI case, but I didn't see
it with a quick look.

The second moves of_pci_range_to_resource() to address.c, still inside the
"#ifdef CONFIG_PCI" block.

Bjorn


commit 95a60df1c2d400c676ab1d20271735e2b4735437
Author: Bjorn Helgaas 
Date:   Tue Sep 23 17:27:42 2014 -0600

of/pci: Define of_pci_range_to_resource() only when CONFIG_PCI=y

of_pci_range_to_resource() was previously defined always, but it's only
used by PCI code, so move the definition inside the CONFIG_OF_ADDRESS &&
CONFIG_PCI block.

Signed-off-by: Bjorn Helgaas 

diff --git a/include/linux/of_address.h b/include/linux/of_address.h
index f8cc7daa420c..ecf913cf53b2 100644
--- a/include/linux/of_address.h
+++ b/include/linux/of_address.h
@@ -23,17 +23,6 @@ struct of_pci_range {
 #define for_each_of_pci_range(parser, range) \
for (; of_pci_range_parser_one(parser, range);)
 
-static inline void of_pci_range_to_resource(struct of_pci_range *range,
-   struct device_node *np,
-   struct resource *res)
-{
-   res->flags = range->flags;
-   res->start = range->cpu_addr;
-   res->end = range->cpu_addr + range->size - 1;
-   res->parent = res->child = res->sibling = NULL;
-   res->name = np->full_name;
-}
-
 /* Translate a DMA address from device space to CPU space */
 extern u64 of_translate_dma_address(struct device_node *dev,
const __be32 *in_addr);
@@ -140,6 +129,18 @@ extern const __be32 *of_get_pci_address(struct device_node 
*dev, int bar_no,
   u64 *size, unsigned int *flags);
 extern int of_pci_address_to_resource(struct device_node *dev, int bar,
  struct resource *r);
+
+static inline void of_pci_range_to_resource(struct of_pci_range *range,
+   struct device_node *np,
+   struct resource *res)
+{
+   res->flags = range->flags;
+   res->start = range->cpu_addr;
+   res->end = range->cpu_addr + range->size - 1;
+   res->parent = res->child = res->sibling = NULL;
+   

[PATCH v12 05/12] PCI: OF: Fix the conversion of IO ranges into IO resources.

2014-09-23 Thread Liviu Dudau
The ranges property for a host bridge controller in DT describes
the mapping between the PCI bus address and the CPU physical address.
The resources framework however expects that the IO resources start
at a pseudo "port" address 0 (zero) and have a maximum size of IO_SPACE_LIMIT.
The conversion from pci ranges to resources failed to take that into account,
returning a CPU physical address instead of a port number.

Also fix all the drivers that depend on the old behaviour by fetching
the CPU physical address based on the port number where it is being needed.

Cc: Grant Likely 
Cc: Rob Herring 
Cc: Arnd Bergmann 
Acked-by: Linus Walleij 
Cc: Thierry Reding 
Cc: Simon Horman 
Cc: Catalin Marinas 
Signed-off-by: Liviu Dudau 
---
 arch/arm/mach-integrator/pci_v3.c | 23 ++--
 drivers/of/address.c  | 44 +++
 drivers/pci/host/pci-tegra.c  | 10 ++---
 drivers/pci/host/pcie-rcar.c  | 21 +--
 include/linux/of_address.h| 15 ++---
 5 files changed, 82 insertions(+), 31 deletions(-)

diff --git a/arch/arm/mach-integrator/pci_v3.c 
b/arch/arm/mach-integrator/pci_v3.c
index 05e1f73..c186a17 100644
--- a/arch/arm/mach-integrator/pci_v3.c
+++ b/arch/arm/mach-integrator/pci_v3.c
@@ -660,6 +660,7 @@ static void __init pci_v3_preinit(void)
 {
unsigned long flags;
unsigned int temp;
+   phys_addr_t io_address = pci_pio_to_address(io_mem.start);
 
pcibios_min_mem = 0x0010;
 
@@ -701,7 +702,7 @@ static void __init pci_v3_preinit(void)
/*
 * Setup window 2 - PCI IO
 */
-   v3_writel(V3_LB_BASE2, v3_addr_to_lb_base2(io_mem.start) |
+   v3_writel(V3_LB_BASE2, v3_addr_to_lb_base2(io_address) |
V3_LB_BASE_ENABLE);
v3_writew(V3_LB_MAP2, v3_addr_to_lb_map2(0));
 
@@ -742,6 +743,7 @@ static void __init pci_v3_preinit(void)
 static void __init pci_v3_postinit(void)
 {
unsigned int pci_cmd;
+   phys_addr_t io_address = pci_pio_to_address(io_mem.start);
 
pci_cmd = PCI_COMMAND_MEMORY |
  PCI_COMMAND_MASTER | PCI_COMMAND_INVALIDATE;
@@ -758,7 +760,7 @@ static void __init pci_v3_postinit(void)
   "interrupt: %d\n", ret);
 #endif
 
-   register_isa_ports(non_mem.start, io_mem.start, 0);
+   register_isa_ports(non_mem.start, io_address, 0);
 }
 
 /*
@@ -867,33 +869,32 @@ static int __init pci_v3_probe(struct platform_device 
*pdev)
 
for_each_of_pci_range(, ) {
if (!range.flags) {
-   of_pci_range_to_resource(, np, _mem);
+   ret = of_pci_range_to_resource(, np, _mem);
conf_mem.name = "PCIv3 config";
}
if (range.flags & IORESOURCE_IO) {
-   of_pci_range_to_resource(, np, _mem);
+   ret = of_pci_range_to_resource(, np, _mem);
io_mem.name = "PCIv3 I/O";
}
if ((range.flags & IORESOURCE_MEM) &&
!(range.flags & IORESOURCE_PREFETCH)) {
non_mem_pci = range.pci_addr;
non_mem_pci_sz = range.size;
-   of_pci_range_to_resource(, np, _mem);
+   ret = of_pci_range_to_resource(, np, _mem);
non_mem.name = "PCIv3 non-prefetched mem";
}
if ((range.flags & IORESOURCE_MEM) &&
(range.flags & IORESOURCE_PREFETCH)) {
pre_mem_pci = range.pci_addr;
pre_mem_pci_sz = range.size;
-   of_pci_range_to_resource(, np, _mem);
+   ret = of_pci_range_to_resource(, np, _mem);
pre_mem.name = "PCIv3 prefetched mem";
}
-   }
 
-   if (!conf_mem.start || !io_mem.start ||
-   !non_mem.start || !pre_mem.start) {
-   dev_err(>dev, "missing ranges in device node\n");
-   return -EINVAL;
+   if (ret < 0) {
+   dev_err(>dev, "missing ranges in device node\n");
+   return ret;
+   }
}
 
pci_v3.map_irq = of_irq_parse_and_map_pci;
diff --git a/drivers/of/address.c b/drivers/of/address.c
index 86c1055..6bbe61b 100644
--- a/drivers/of/address.c
+++ b/drivers/of/address.c
@@ -957,12 +957,48 @@ bool of_dma_is_coherent(struct device_node *np)
 }
 EXPORT_SYMBOL_GPL(of_dma_is_coherent);
 
-void of_pci_range_to_resource(struct of_pci_range *range,
-   struct device_node *np, struct resource *res)
+/*
+ * of_pci_range_to_resource - Create a resource from an of_pci_range
+ * @range: the PCI range that describes the resource
+ * @np:device node where the range belongs to
+ * @res:   pointer to a valid resource that will be updated to
+ *  reflect the 

[PATCH v12 05/12] PCI: OF: Fix the conversion of IO ranges into IO resources.

2014-09-23 Thread Liviu Dudau
The ranges property for a host bridge controller in DT describes
the mapping between the PCI bus address and the CPU physical address.
The resources framework however expects that the IO resources start
at a pseudo port address 0 (zero) and have a maximum size of IO_SPACE_LIMIT.
The conversion from pci ranges to resources failed to take that into account,
returning a CPU physical address instead of a port number.

Also fix all the drivers that depend on the old behaviour by fetching
the CPU physical address based on the port number where it is being needed.

Cc: Grant Likely grant.lik...@linaro.org
Cc: Rob Herring robh...@kernel.org
Cc: Arnd Bergmann a...@arndb.de
Acked-by: Linus Walleij linus.wall...@linaro.org
Cc: Thierry Reding thierry.red...@gmail.com
Cc: Simon Horman ho...@verge.net.au
Cc: Catalin Marinas catalin.mari...@arm.com
Signed-off-by: Liviu Dudau liviu.du...@arm.com
---
 arch/arm/mach-integrator/pci_v3.c | 23 ++--
 drivers/of/address.c  | 44 +++
 drivers/pci/host/pci-tegra.c  | 10 ++---
 drivers/pci/host/pcie-rcar.c  | 21 +--
 include/linux/of_address.h| 15 ++---
 5 files changed, 82 insertions(+), 31 deletions(-)

diff --git a/arch/arm/mach-integrator/pci_v3.c 
b/arch/arm/mach-integrator/pci_v3.c
index 05e1f73..c186a17 100644
--- a/arch/arm/mach-integrator/pci_v3.c
+++ b/arch/arm/mach-integrator/pci_v3.c
@@ -660,6 +660,7 @@ static void __init pci_v3_preinit(void)
 {
unsigned long flags;
unsigned int temp;
+   phys_addr_t io_address = pci_pio_to_address(io_mem.start);
 
pcibios_min_mem = 0x0010;
 
@@ -701,7 +702,7 @@ static void __init pci_v3_preinit(void)
/*
 * Setup window 2 - PCI IO
 */
-   v3_writel(V3_LB_BASE2, v3_addr_to_lb_base2(io_mem.start) |
+   v3_writel(V3_LB_BASE2, v3_addr_to_lb_base2(io_address) |
V3_LB_BASE_ENABLE);
v3_writew(V3_LB_MAP2, v3_addr_to_lb_map2(0));
 
@@ -742,6 +743,7 @@ static void __init pci_v3_preinit(void)
 static void __init pci_v3_postinit(void)
 {
unsigned int pci_cmd;
+   phys_addr_t io_address = pci_pio_to_address(io_mem.start);
 
pci_cmd = PCI_COMMAND_MEMORY |
  PCI_COMMAND_MASTER | PCI_COMMAND_INVALIDATE;
@@ -758,7 +760,7 @@ static void __init pci_v3_postinit(void)
   interrupt: %d\n, ret);
 #endif
 
-   register_isa_ports(non_mem.start, io_mem.start, 0);
+   register_isa_ports(non_mem.start, io_address, 0);
 }
 
 /*
@@ -867,33 +869,32 @@ static int __init pci_v3_probe(struct platform_device 
*pdev)
 
for_each_of_pci_range(parser, range) {
if (!range.flags) {
-   of_pci_range_to_resource(range, np, conf_mem);
+   ret = of_pci_range_to_resource(range, np, conf_mem);
conf_mem.name = PCIv3 config;
}
if (range.flags  IORESOURCE_IO) {
-   of_pci_range_to_resource(range, np, io_mem);
+   ret = of_pci_range_to_resource(range, np, io_mem);
io_mem.name = PCIv3 I/O;
}
if ((range.flags  IORESOURCE_MEM) 
!(range.flags  IORESOURCE_PREFETCH)) {
non_mem_pci = range.pci_addr;
non_mem_pci_sz = range.size;
-   of_pci_range_to_resource(range, np, non_mem);
+   ret = of_pci_range_to_resource(range, np, non_mem);
non_mem.name = PCIv3 non-prefetched mem;
}
if ((range.flags  IORESOURCE_MEM) 
(range.flags  IORESOURCE_PREFETCH)) {
pre_mem_pci = range.pci_addr;
pre_mem_pci_sz = range.size;
-   of_pci_range_to_resource(range, np, pre_mem);
+   ret = of_pci_range_to_resource(range, np, pre_mem);
pre_mem.name = PCIv3 prefetched mem;
}
-   }
 
-   if (!conf_mem.start || !io_mem.start ||
-   !non_mem.start || !pre_mem.start) {
-   dev_err(pdev-dev, missing ranges in device node\n);
-   return -EINVAL;
+   if (ret  0) {
+   dev_err(pdev-dev, missing ranges in device node\n);
+   return ret;
+   }
}
 
pci_v3.map_irq = of_irq_parse_and_map_pci;
diff --git a/drivers/of/address.c b/drivers/of/address.c
index 86c1055..6bbe61b 100644
--- a/drivers/of/address.c
+++ b/drivers/of/address.c
@@ -957,12 +957,48 @@ bool of_dma_is_coherent(struct device_node *np)
 }
 EXPORT_SYMBOL_GPL(of_dma_is_coherent);
 
-void of_pci_range_to_resource(struct of_pci_range *range,
-   struct device_node *np, struct resource *res)
+/*
+ * of_pci_range_to_resource - Create a resource from an of_pci_range
+ 

Re: [PATCH v12 05/12] PCI: OF: Fix the conversion of IO ranges into IO resources.

2014-09-23 Thread Bjorn Helgaas
[+cc Andrew]

On Tue, Sep 23, 2014 at 08:01:07PM +0100, Liviu Dudau wrote:
 The ranges property for a host bridge controller in DT describes
 the mapping between the PCI bus address and the CPU physical address.
 The resources framework however expects that the IO resources start
 at a pseudo port address 0 (zero) and have a maximum size of IO_SPACE_LIMIT.
 The conversion from pci ranges to resources failed to take that into account,
 returning a CPU physical address instead of a port number.
 
 Also fix all the drivers that depend on the old behaviour by fetching
 the CPU physical address based on the port number where it is being needed.
 
 Cc: Grant Likely grant.lik...@linaro.org
 Cc: Rob Herring robh...@kernel.org
 Cc: Arnd Bergmann a...@arndb.de
 Acked-by: Linus Walleij linus.wall...@linaro.org
 Cc: Thierry Reding thierry.red...@gmail.com
 Cc: Simon Horman ho...@verge.net.au
 Cc: Catalin Marinas catalin.mari...@arm.com
 Signed-off-by: Liviu Dudau liviu.du...@arm.com
 ---
  arch/arm/mach-integrator/pci_v3.c | 23 ++--
  drivers/of/address.c  | 44 
 +++
  drivers/pci/host/pci-tegra.c  | 10 ++---
  drivers/pci/host/pcie-rcar.c  | 21 +--
  include/linux/of_address.h| 15 ++---
  5 files changed, 82 insertions(+), 31 deletions(-)
 ...

The of_pci_range_to_resource() implementation in drivers/of/address.c is
always compiled when CONFIG_OF_ADDRESS=y, but when CONFIG_OF_ADDRESS=y and
CONFIG_PCI is not set, we get the static inline version from
include/linux/of_address.h as well, causing a redefinition error.

 diff --git a/drivers/of/address.c b/drivers/of/address.c
 @@ -957,12 +957,48 @@ bool of_dma_is_coherent(struct device_node *np)
 ...
 +int of_pci_range_to_resource(struct of_pci_range *range,
 + struct device_node *np, struct resource *res)

 diff --git a/include/linux/of_address.h b/include/linux/of_address.h
 ...
  #else /* CONFIG_OF_ADDRESS  CONFIG_PCI */
  static inline int of_pci_address_to_resource(struct device_node *dev, int 
 bar,
struct resource *r)
 @@ -144,6 +139,12 @@ static inline int of_pci_address_to_resource(struct 
 device_node *dev, int bar,
   return -ENOSYS;
  }
  
 +static inline int of_pci_range_to_resource(struct of_pci_range *range,
 + struct device_node *np, struct resource *res)
 +{
 + return -ENOSYS;
 +}

My proposal to fix it is the following three patches.  The first moves the
inline version of of_pci_range_to_resource() into the existing #if
defined(CONFIG_OF_ADDRESS)  defined(CONFIG_PCI) block.

Andrew added it (and some other PCI-related things) with 29b635c00f3e
(of/pci: Provide support for parsing PCI DT ranges property) to
of_address.h outside of any ifdefs, so it's always available.  Maybe
there's a reason that's needed in the non-CONFIG_PCI case, but I didn't see
it with a quick look.

The second moves of_pci_range_to_resource() to address.c, still inside the
#ifdef CONFIG_PCI block.

Bjorn


commit 95a60df1c2d400c676ab1d20271735e2b4735437
Author: Bjorn Helgaas bhelg...@google.com
Date:   Tue Sep 23 17:27:42 2014 -0600

of/pci: Define of_pci_range_to_resource() only when CONFIG_PCI=y

of_pci_range_to_resource() was previously defined always, but it's only
used by PCI code, so move the definition inside the CONFIG_OF_ADDRESS 
CONFIG_PCI block.

Signed-off-by: Bjorn Helgaas bhelg...@google.com

diff --git a/include/linux/of_address.h b/include/linux/of_address.h
index f8cc7daa420c..ecf913cf53b2 100644
--- a/include/linux/of_address.h
+++ b/include/linux/of_address.h
@@ -23,17 +23,6 @@ struct of_pci_range {
 #define for_each_of_pci_range(parser, range) \
for (; of_pci_range_parser_one(parser, range);)
 
-static inline void of_pci_range_to_resource(struct of_pci_range *range,
-   struct device_node *np,
-   struct resource *res)
-{
-   res-flags = range-flags;
-   res-start = range-cpu_addr;
-   res-end = range-cpu_addr + range-size - 1;
-   res-parent = res-child = res-sibling = NULL;
-   res-name = np-full_name;
-}
-
 /* Translate a DMA address from device space to CPU space */
 extern u64 of_translate_dma_address(struct device_node *dev,
const __be32 *in_addr);
@@ -140,6 +129,18 @@ extern const __be32 *of_get_pci_address(struct device_node 
*dev, int bar_no,
   u64 *size, unsigned int *flags);
 extern int of_pci_address_to_resource(struct device_node *dev, int bar,
  struct resource *r);
+
+static inline void of_pci_range_to_resource(struct of_pci_range *range,
+   struct device_node *np,
+   struct resource *res)
+{
+   res-flags = range-flags;
+   res-start = range-cpu_addr;

Re: [PATCH v12 05/12] PCI: OF: Fix the conversion of IO ranges into IO resources.

2014-09-23 Thread Liviu Dudau
On Tue, Sep 23, 2014 at 06:22:53PM -0600, Bjorn Helgaas wrote:
 [+cc Andrew]
 
 On Tue, Sep 23, 2014 at 08:01:07PM +0100, Liviu Dudau wrote:
  The ranges property for a host bridge controller in DT describes
  the mapping between the PCI bus address and the CPU physical address.
  The resources framework however expects that the IO resources start
  at a pseudo port address 0 (zero) and have a maximum size of 
  IO_SPACE_LIMIT.
  The conversion from pci ranges to resources failed to take that into 
  account,
  returning a CPU physical address instead of a port number.
  
  Also fix all the drivers that depend on the old behaviour by fetching
  the CPU physical address based on the port number where it is being needed.
  
  Cc: Grant Likely grant.lik...@linaro.org
  Cc: Rob Herring robh...@kernel.org
  Cc: Arnd Bergmann a...@arndb.de
  Acked-by: Linus Walleij linus.wall...@linaro.org
  Cc: Thierry Reding thierry.red...@gmail.com
  Cc: Simon Horman ho...@verge.net.au
  Cc: Catalin Marinas catalin.mari...@arm.com
  Signed-off-by: Liviu Dudau liviu.du...@arm.com
  ---
   arch/arm/mach-integrator/pci_v3.c | 23 ++--
   drivers/of/address.c  | 44 
  +++
   drivers/pci/host/pci-tegra.c  | 10 ++---
   drivers/pci/host/pcie-rcar.c  | 21 +--
   include/linux/of_address.h| 15 ++---
   5 files changed, 82 insertions(+), 31 deletions(-)
  ...
 
 The of_pci_range_to_resource() implementation in drivers/of/address.c is
 always compiled when CONFIG_OF_ADDRESS=y, but when CONFIG_OF_ADDRESS=y and
 CONFIG_PCI is not set, we get the static inline version from
 include/linux/of_address.h as well, causing a redefinition error.
 
  diff --git a/drivers/of/address.c b/drivers/of/address.c
  @@ -957,12 +957,48 @@ bool of_dma_is_coherent(struct device_node *np)
  ...
  +int of_pci_range_to_resource(struct of_pci_range *range,
  +   struct device_node *np, struct resource *res)
 
  diff --git a/include/linux/of_address.h b/include/linux/of_address.h
  ...
   #else /* CONFIG_OF_ADDRESS  CONFIG_PCI */
   static inline int of_pci_address_to_resource(struct device_node *dev, int 
  bar,
   struct resource *r)
  @@ -144,6 +139,12 @@ static inline int of_pci_address_to_resource(struct 
  device_node *dev, int bar,
  return -ENOSYS;
   }
   
  +static inline int of_pci_range_to_resource(struct of_pci_range *range,
  +   struct device_node *np, struct resource *res)
  +{
  +   return -ENOSYS;
  +}
 
 My proposal to fix it is the following three patches.  The first moves the
 inline version of of_pci_range_to_resource() into the existing #if
 defined(CONFIG_OF_ADDRESS)  defined(CONFIG_PCI) block.
 
 Andrew added it (and some other PCI-related things) with 29b635c00f3e
 (of/pci: Provide support for parsing PCI DT ranges property) to
 of_address.h outside of any ifdefs, so it's always available.  Maybe
 there's a reason that's needed in the non-CONFIG_PCI case, but I didn't see
 it with a quick look.
 
 The second moves of_pci_range_to_resource() to address.c, still inside the
 #ifdef CONFIG_PCI block.

Hi Bjorn,

Looks good to me. Sorry for messing this up, I've tested a combination of
CONFIG_PCI=y and CONFIG_PCI=n but it looks like I've only tested
CONFIG_OF_ADDRESS=CONFIG_PCI (both enabled or both disabled).

Best regards,
Liviu

 
 Bjorn
 
 
 commit 95a60df1c2d400c676ab1d20271735e2b4735437
 Author: Bjorn Helgaas bhelg...@google.com
 Date:   Tue Sep 23 17:27:42 2014 -0600
 
 of/pci: Define of_pci_range_to_resource() only when CONFIG_PCI=y
 
 of_pci_range_to_resource() was previously defined always, but it's only
 used by PCI code, so move the definition inside the CONFIG_OF_ADDRESS 
 CONFIG_PCI block.
 
 Signed-off-by: Bjorn Helgaas bhelg...@google.com
 
 diff --git a/include/linux/of_address.h b/include/linux/of_address.h
 index f8cc7daa420c..ecf913cf53b2 100644
 --- a/include/linux/of_address.h
 +++ b/include/linux/of_address.h
 @@ -23,17 +23,6 @@ struct of_pci_range {
  #define for_each_of_pci_range(parser, range) \
   for (; of_pci_range_parser_one(parser, range);)
  
 -static inline void of_pci_range_to_resource(struct of_pci_range *range,
 - struct device_node *np,
 - struct resource *res)
 -{
 - res-flags = range-flags;
 - res-start = range-cpu_addr;
 - res-end = range-cpu_addr + range-size - 1;
 - res-parent = res-child = res-sibling = NULL;
 - res-name = np-full_name;
 -}
 -
  /* Translate a DMA address from device space to CPU space */
  extern u64 of_translate_dma_address(struct device_node *dev,
   const __be32 *in_addr);
 @@ -140,6 +129,18 @@ extern const __be32 *of_get_pci_address(struct 
 device_node *dev, int bar_no,
  u64 *size, unsigned int *flags);
  extern int 

Re: [PATCH v12 05/12] PCI: OF: Fix the conversion of IO ranges into IO resources.

2014-09-23 Thread Bjorn Helgaas
On Tue, Sep 23, 2014 at 7:12 PM, Liviu Dudau li...@dudau.co.uk wrote:
 On Tue, Sep 23, 2014 at 06:22:53PM -0600, Bjorn Helgaas wrote:
 [+cc Andrew]

 On Tue, Sep 23, 2014 at 08:01:07PM +0100, Liviu Dudau wrote:
  The ranges property for a host bridge controller in DT describes
  the mapping between the PCI bus address and the CPU physical address.
  The resources framework however expects that the IO resources start
  at a pseudo port address 0 (zero) and have a maximum size of 
  IO_SPACE_LIMIT.
  The conversion from pci ranges to resources failed to take that into 
  account,
  returning a CPU physical address instead of a port number.
 
  Also fix all the drivers that depend on the old behaviour by fetching
  the CPU physical address based on the port number where it is being needed.
 
  Cc: Grant Likely grant.lik...@linaro.org
  Cc: Rob Herring robh...@kernel.org
  Cc: Arnd Bergmann a...@arndb.de
  Acked-by: Linus Walleij linus.wall...@linaro.org
  Cc: Thierry Reding thierry.red...@gmail.com
  Cc: Simon Horman ho...@verge.net.au
  Cc: Catalin Marinas catalin.mari...@arm.com
  Signed-off-by: Liviu Dudau liviu.du...@arm.com
  ---
   arch/arm/mach-integrator/pci_v3.c | 23 ++--
   drivers/of/address.c  | 44 
  +++
   drivers/pci/host/pci-tegra.c  | 10 ++---
   drivers/pci/host/pcie-rcar.c  | 21 +--
   include/linux/of_address.h| 15 ++---
   5 files changed, 82 insertions(+), 31 deletions(-)
  ...

 The of_pci_range_to_resource() implementation in drivers/of/address.c is
 always compiled when CONFIG_OF_ADDRESS=y, but when CONFIG_OF_ADDRESS=y and
 CONFIG_PCI is not set, we get the static inline version from
 include/linux/of_address.h as well, causing a redefinition error.

  diff --git a/drivers/of/address.c b/drivers/of/address.c
  @@ -957,12 +957,48 @@ bool of_dma_is_coherent(struct device_node *np)
  ...
  +int of_pci_range_to_resource(struct of_pci_range *range,
  +   struct device_node *np, struct resource *res)

  diff --git a/include/linux/of_address.h b/include/linux/of_address.h
  ...
   #else /* CONFIG_OF_ADDRESS  CONFIG_PCI */
   static inline int of_pci_address_to_resource(struct device_node *dev, int 
  bar,
   struct resource *r)
  @@ -144,6 +139,12 @@ static inline int of_pci_address_to_resource(struct 
  device_node *dev, int bar,
  return -ENOSYS;
   }
 
  +static inline int of_pci_range_to_resource(struct of_pci_range *range,
  +   struct device_node *np, struct resource *res)
  +{
  +   return -ENOSYS;
  +}

 My proposal to fix it is the following three patches.  The first moves the
 inline version of of_pci_range_to_resource() into the existing #if
 defined(CONFIG_OF_ADDRESS)  defined(CONFIG_PCI) block.

 Andrew added it (and some other PCI-related things) with 29b635c00f3e
 (of/pci: Provide support for parsing PCI DT ranges property) to
 of_address.h outside of any ifdefs, so it's always available.  Maybe
 there's a reason that's needed in the non-CONFIG_PCI case, but I didn't see
 it with a quick look.

 The second moves of_pci_range_to_resource() to address.c, still inside the
 #ifdef CONFIG_PCI block.

 Hi Bjorn,

 Looks good to me. Sorry for messing this up, I've tested a combination of
 CONFIG_PCI=y and CONFIG_PCI=n but it looks like I've only tested
 CONFIG_OF_ADDRESS=CONFIG_PCI (both enabled or both disabled).

You probably saw the subsequent [pci:pci/host-generic 10/13]
drivers/of/of_pci.c:202:3: error: implicit declaration of function
'of_pci_range_to_resource' error.

I looked at that a bit, but gave up.  Apparently drivers/of/of_pci.c
can be compiled with CONFIG_PCI=y but CONFIG_OF_ADDRESS not set..

Bjorn
--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/