提交 25a31579 编写于 作者: G Gregory CLEMENT 提交者: Grant Likely

of: Allows to use the PCI translator without the PCI core

Translating an address from a PCI node of the device-tree into a CPU
physical address doesn't require the core PCI support. Those
translations are just related to the device tree itself.

The use case to translate an address from a PCI node without actually
using the PCI core support is when one needs to access the PCI
controller without accessing any PCI devices.

Marvell SoCs, such as Kirkwood, Dove or Armada XP for instance, come
with an IP of a PCI controller. In the registers of this controller
are stored the ID and the revision of a SoC. With this patch it will
be possible to read the SoC ID of a board without any PCI device and
then without the PCI core support.
Signed-off-by: NGregory CLEMENT <gregory.clement@free-electrons.com>
Tested-by: NEzequiel Garcia <ezequiel.garcia@free-electrons.com>
Reviewed-by: NEzequiel Garcia <ezequiel.garcia@free-electrons.com>
Signed-off-by: NGrant Likely <grant.likely@linaro.org>
上级 b66548e2
...@@ -44,6 +44,10 @@ config OF_DYNAMIC ...@@ -44,6 +44,10 @@ config OF_DYNAMIC
config OF_ADDRESS config OF_ADDRESS
def_bool y def_bool y
depends on !SPARC depends on !SPARC
select OF_ADDRESS_PCI if PCI
config OF_ADDRESS_PCI
bool
config OF_IRQ config OF_IRQ
def_bool y def_bool y
......
...@@ -91,7 +91,7 @@ static unsigned int of_bus_default_get_flags(const __be32 *addr) ...@@ -91,7 +91,7 @@ static unsigned int of_bus_default_get_flags(const __be32 *addr)
return IORESOURCE_MEM; return IORESOURCE_MEM;
} }
#ifdef CONFIG_PCI #ifdef CONFIG_OF_ADDRESS_PCI
/* /*
* PCI bus specific translator * PCI bus specific translator
*/ */
...@@ -165,7 +165,9 @@ static int of_bus_pci_translate(__be32 *addr, u64 offset, int na) ...@@ -165,7 +165,9 @@ static int of_bus_pci_translate(__be32 *addr, u64 offset, int na)
{ {
return of_bus_default_translate(addr + 1, offset, na - 1); return of_bus_default_translate(addr + 1, offset, na - 1);
} }
#endif /* CONFIG_OF_ADDRESS_PCI */
#ifdef CONFIG_PCI
const __be32 *of_get_pci_address(struct device_node *dev, int bar_no, u64 *size, const __be32 *of_get_pci_address(struct device_node *dev, int bar_no, u64 *size,
unsigned int *flags) unsigned int *flags)
{ {
...@@ -355,7 +357,7 @@ static unsigned int of_bus_isa_get_flags(const __be32 *addr) ...@@ -355,7 +357,7 @@ static unsigned int of_bus_isa_get_flags(const __be32 *addr)
*/ */
static struct of_bus of_busses[] = { static struct of_bus of_busses[] = {
#ifdef CONFIG_PCI #ifdef CONFIG_OF_ADDRESS_PCI
/* PCI */ /* PCI */
{ {
.name = "pci", .name = "pci",
...@@ -366,7 +368,7 @@ static struct of_bus of_busses[] = { ...@@ -366,7 +368,7 @@ static struct of_bus of_busses[] = {
.translate = of_bus_pci_translate, .translate = of_bus_pci_translate,
.get_flags = of_bus_pci_get_flags, .get_flags = of_bus_pci_get_flags,
}, },
#endif /* CONFIG_PCI */ #endif /* CONFIG_OF_ADDRESS_PCI */
/* ISA */ /* ISA */
{ {
.name = "isa", .name = "isa",
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册