[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [PATCH v1 2/8] xen/dt: pass flags to callback in dt_for_each_range()
From: Stewart Hildebrand <stewart.hildebrand@xxxxxxx> PCI ranges have prefetchable / non-prefetchable flags that will be needed in the callback. Pass the flags to the callback. Signed-off-by: Stewart Hildebrand <stewart.hildebrand@xxxxxxx> Signed-off-by: Mykyta Poturai <mykyta_poturai@xxxxxxxx> --- xen/arch/arm/device.c | 4 ++-- xen/arch/arm/domain_build.c | 3 ++- xen/arch/arm/include/asm/setup.h | 2 +- xen/arch/arm/pci/pci-host-common.c | 4 ++-- xen/common/device-tree/device-tree.c | 5 +++-- xen/include/xen/device_tree.h | 2 +- 6 files changed, 11 insertions(+), 9 deletions(-) diff --git a/xen/arch/arm/device.c b/xen/arch/arm/device.c index 74b54cad34..cc0759023e 100644 --- a/xen/arch/arm/device.c +++ b/xen/arch/arm/device.c @@ -50,7 +50,7 @@ int map_irq_to_domain(struct domain *d, unsigned int irq, } int map_range_to_domain(const struct dt_device_node *dev, - uint64_t addr, uint64_t len, void *data) + uint32_t flags, uint64_t addr, uint64_t len, void *data) { struct map_range_data *mr_data = data; struct domain *d = mr_data->d; @@ -325,7 +325,7 @@ int handle_device(struct domain *d, struct dt_device_node *dev, p2m_type_t p2mt, return res; } - res = map_range_to_domain(dev, addr, size, &mr_data); + res = map_range_to_domain(dev, 0, addr, size, &mr_data); if ( res ) return res; } diff --git a/xen/arch/arm/domain_build.c b/xen/arch/arm/domain_build.c index fb8fbb1650..4bbffdf535 100644 --- a/xen/arch/arm/domain_build.c +++ b/xen/arch/arm/domain_build.c @@ -762,7 +762,8 @@ int __init add_ext_regions(unsigned long s_gfn, unsigned long e_gfn, } static int __init handle_pci_range(const struct dt_device_node *dev, - uint64_t addr, uint64_t len, void *data) + uint32_t flags, uint64_t addr, uint64_t len, + void *data) { struct rangeset *mem_holes = data; paddr_t start, end; diff --git a/xen/arch/arm/include/asm/setup.h b/xen/arch/arm/include/asm/setup.h index 1eaf13bd66..97bc5f90a1 100644 --- a/xen/arch/arm/include/asm/setup.h +++ b/xen/arch/arm/include/asm/setup.h @@ -62,7 +62,7 @@ int map_device_irqs_to_domain(struct domain *d, struct dt_device_node *dev, int map_irq_to_domain(struct domain *d, unsigned int irq, bool need_mapping, const char *devname); -int map_range_to_domain(const struct dt_device_node *dev, +int map_range_to_domain(const struct dt_device_node *dev, uint32_t flags, uint64_t addr, uint64_t len, void *data); struct init_info diff --git a/xen/arch/arm/pci/pci-host-common.c b/xen/arch/arm/pci/pci-host-common.c index d3481b05eb..67447d8696 100644 --- a/xen/arch/arm/pci/pci-host-common.c +++ b/xen/arch/arm/pci/pci-host-common.c @@ -418,7 +418,7 @@ int __init pci_host_bridge_mappings(struct domain *d) bridge->child_ops->need_p2m_hwdom_mapping(d, bridge, addr); if ( need_mapping ) { - err = map_range_to_domain(dev, addr, size, &mr_data); + err = map_range_to_domain(dev, 0, addr, size, &mr_data); if ( err ) return err; } @@ -434,7 +434,7 @@ int __init pci_host_bridge_mappings(struct domain *d) * right place for alignment check. */ static int is_bar_valid(const struct dt_device_node *dev, - uint64_t addr, uint64_t len, void *data) + uint32_t flags, uint64_t addr, uint64_t len, void *data) { struct pdev_bar_check *bar_data = data; paddr_t s = bar_data->start; diff --git a/xen/common/device-tree/device-tree.c b/xen/common/device-tree/device-tree.c index 0b5375f151..5ee1fa4eb1 100644 --- a/xen/common/device-tree/device-tree.c +++ b/xen/common/device-tree/device-tree.c @@ -976,7 +976,7 @@ int dt_device_get_paddr(const struct dt_device_node *dev, unsigned int index, int dt_for_each_range(const struct dt_device_node *dev, int (*cb)(const struct dt_device_node *dev, - uint64_t addr, uint64_t length, + uint32_t flags, uint64_t addr, uint64_t length, void *data), void *data) { @@ -1041,13 +1041,14 @@ int dt_for_each_range(const struct dt_device_node *dev, { uint64_t a, s; int ret; + uint32_t flags = bus->get_flags(ranges); memcpy(addr, ranges + na, 4 * pna); a = __dt_translate_address(dev, addr, "ranges"); s = dt_read_number(ranges + na + pna, ns); - ret = cb(dev, a, s, data); + ret = cb(dev, flags, a, s, data); if ( ret ) { dt_dprintk(" -> callback failed=%d\n", ret); diff --git a/xen/include/xen/device_tree.h b/xen/include/xen/device_tree.h index 06d7643622..1091e34a10 100644 --- a/xen/include/xen/device_tree.h +++ b/xen/include/xen/device_tree.h @@ -667,7 +667,7 @@ int dt_for_each_irq_map(const struct dt_device_node *dev, */ int dt_for_each_range(const struct dt_device_node *dev, int (*cb)(const struct dt_device_node *dev, - uint64_t addr, uint64_t length, + uint32_t flags, uint64_t addr, uint64_t length, void *data), void *data); -- 2.34.1
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |