of: Merge of_address_to_resource() and of_pci_address_to_resource() implementations
of_address_to_resource() and of_pci_address_to_resource() are almost the same except the former takes an index and the latter takes a BAR number. Now that __of_get_address() can take either one, refactor the functions to use a common implementation. Cc: Frank Rowand <frowand.list@gmail.com> Signed-off-by: Rob Herring <robh@kernel.org> Link: https://lore.kernel.org/r/20210527194547.1287934-5-robh@kernel.org
This commit is contained in:
Родитель
c3c0dc7577
Коммит
67a3156453
|
@ -23,9 +23,8 @@
|
||||||
#define OF_CHECK_COUNTS(na, ns) (OF_CHECK_ADDR_COUNT(na) && (ns) > 0)
|
#define OF_CHECK_COUNTS(na, ns) (OF_CHECK_ADDR_COUNT(na) && (ns) > 0)
|
||||||
|
|
||||||
static struct of_bus *of_match_bus(struct device_node *np);
|
static struct of_bus *of_match_bus(struct device_node *np);
|
||||||
static int __of_address_to_resource(struct device_node *dev,
|
static int __of_address_to_resource(struct device_node *dev, int index,
|
||||||
const __be32 *addrp, u64 size, unsigned int flags,
|
int bar_no, struct resource *r);
|
||||||
const char *name, struct resource *r);
|
|
||||||
static bool of_mmio_is_nonposted(struct device_node *np);
|
static bool of_mmio_is_nonposted(struct device_node *np);
|
||||||
|
|
||||||
/* Debug utility */
|
/* Debug utility */
|
||||||
|
@ -203,17 +202,11 @@ static int of_bus_pci_translate(__be32 *addr, u64 offset, int na)
|
||||||
int of_pci_address_to_resource(struct device_node *dev, int bar,
|
int of_pci_address_to_resource(struct device_node *dev, int bar,
|
||||||
struct resource *r)
|
struct resource *r)
|
||||||
{
|
{
|
||||||
const __be32 *addrp;
|
|
||||||
u64 size;
|
|
||||||
unsigned int flags;
|
|
||||||
|
|
||||||
if (!IS_ENABLED(CONFIG_PCI))
|
if (!IS_ENABLED(CONFIG_PCI))
|
||||||
return -ENOSYS;
|
return -ENOSYS;
|
||||||
|
|
||||||
addrp = of_get_pci_address(dev, bar, &size, &flags);
|
return __of_address_to_resource(dev, -1, bar, r);
|
||||||
if (addrp == NULL)
|
|
||||||
return -EINVAL;
|
|
||||||
return __of_address_to_resource(dev, addrp, size, flags, NULL, r);
|
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(of_pci_address_to_resource);
|
EXPORT_SYMBOL_GPL(of_pci_address_to_resource);
|
||||||
|
|
||||||
|
@ -804,11 +797,22 @@ static u64 of_translate_ioport(struct device_node *dev, const __be32 *in_addr,
|
||||||
return port;
|
return port;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __of_address_to_resource(struct device_node *dev,
|
static int __of_address_to_resource(struct device_node *dev, int index, int bar_no,
|
||||||
const __be32 *addrp, u64 size, unsigned int flags,
|
struct resource *r)
|
||||||
const char *name, struct resource *r)
|
|
||||||
{
|
{
|
||||||
u64 taddr;
|
u64 taddr;
|
||||||
|
const __be32 *addrp;
|
||||||
|
u64 size;
|
||||||
|
unsigned int flags;
|
||||||
|
const char *name = NULL;
|
||||||
|
|
||||||
|
addrp = __of_get_address(dev, index, bar_no, &size, &flags);
|
||||||
|
if (addrp == NULL)
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
|
/* Get optional "reg-names" property to add a name to a resource */
|
||||||
|
if (index >= 0)
|
||||||
|
of_property_read_string_index(dev, "reg-names", index, &name);
|
||||||
|
|
||||||
if (flags & IORESOURCE_MEM)
|
if (flags & IORESOURCE_MEM)
|
||||||
taddr = of_translate_address(dev, addrp);
|
taddr = of_translate_address(dev, addrp);
|
||||||
|
@ -846,19 +850,7 @@ static int __of_address_to_resource(struct device_node *dev,
|
||||||
int of_address_to_resource(struct device_node *dev, int index,
|
int of_address_to_resource(struct device_node *dev, int index,
|
||||||
struct resource *r)
|
struct resource *r)
|
||||||
{
|
{
|
||||||
const __be32 *addrp;
|
return __of_address_to_resource(dev, index, -1, r);
|
||||||
u64 size;
|
|
||||||
unsigned int flags;
|
|
||||||
const char *name = NULL;
|
|
||||||
|
|
||||||
addrp = of_get_address(dev, index, &size, &flags);
|
|
||||||
if (addrp == NULL)
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
/* Get optional "reg-names" property to add a name to a resource */
|
|
||||||
of_property_read_string_index(dev, "reg-names", index, &name);
|
|
||||||
|
|
||||||
return __of_address_to_resource(dev, addrp, size, flags, name, r);
|
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(of_address_to_resource);
|
EXPORT_SYMBOL_GPL(of_address_to_resource);
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче