Lines Matching refs:region
688 struct knav_region *region;
691 region = pool->region;
692 pool->desc_size = region->desc_size;
697 dma_addr = region->dma_start + (region->desc_size * index);
736 return pool->region->dma_start + (virt - pool->region->virt_start);
743 return pool->region->virt_start + (dma - pool->region->dma_start);
751 * @region_id: - QMSS region id from which the descriptors are to be
760 struct knav_region *reg_itr, *region = NULL;
781 region = reg_itr;
785 if (!region) {
786 dev_err(kdev->dev, "region-id(%d) not found\n", region_id);
806 if (num_desc > (region->num_desc - region->used_desc)) {
807 dev_err(kdev->dev, "out of descs in region(%d) for pool(%s)\n",
813 /* Region maintains a sorted (by region offset) list of pools
818 node = ®ion->pools;
819 list_for_each_entry(iter, ®ion->pools, region_inst) {
829 pool->region = region;
832 region->used_desc += num_desc;
836 dev_err(kdev->dev, "pool(%s) create failed: fragmented desc pool in region(%d)\n",
866 if (!pool->region)
872 pool->region->used_desc -= pool->num_desc;
914 knav_queue_push(pool->queue, dma, pool->region->desc_size, 0);
933 size = min(size, pool->region->desc_size);
960 desc_sz = min(dma_sz, pool->region->desc_size);
981 struct knav_region *region)
987 int id = region->id;
990 /* unused region? */
991 if (!region->num_desc) {
992 dev_warn(kdev->dev, "unused region %s\n", region->name);
997 hw_num_desc = ilog2(region->num_desc - 1) + 1;
1000 if (region->num_desc < 32) {
1001 region->num_desc = 0;
1002 dev_warn(kdev->dev, "too few descriptors in region %s\n",
1003 region->name);
1007 size = region->num_desc * region->desc_size;
1008 region->virt_start = alloc_pages_exact(size, GFP_KERNEL | GFP_DMA |
1010 if (!region->virt_start) {
1011 region->num_desc = 0;
1012 dev_err(kdev->dev, "memory alloc failed for region %s\n",
1013 region->name);
1016 region->virt_end = region->virt_start + size;
1017 page = virt_to_page(region->virt_start);
1019 region->dma_start = dma_map_page(kdev->dev, page, 0, size,
1021 if (dma_mapping_error(kdev->dev, region->dma_start)) {
1022 dev_err(kdev->dev, "dma map failed for region %s\n",
1023 region->name);
1026 region->dma_end = region->dma_start + size;
1034 pool->region_offset = region->num_desc;
1035 list_add(&pool->region_inst, ®ion->pools);
1038 "region %s (%d): size:%d, link:%d@%d, dma:%pad-%pad, virt:%p-%p\n",
1039 region->name, id, region->desc_size, region->num_desc,
1040 region->link_index, ®ion->dma_start, ®ion->dma_end,
1041 region->virt_start, region->virt_end);
1043 hw_desc_size = (region->desc_size / 16) - 1;
1048 writel_relaxed((u32)region->dma_start, ®s->base);
1049 writel_relaxed(region->link_index, ®s->start_index);
1056 if (region->dma_start)
1057 dma_unmap_page(kdev->dev, region->dma_start, size,
1059 if (region->virt_start)
1060 free_pages_exact(region->virt_start, size);
1061 region->num_desc = 0;
1080 struct knav_region *region;
1086 region = devm_kzalloc(dev, sizeof(*region), GFP_KERNEL);
1087 if (!region) {
1089 dev_err(dev, "out of memory allocating region\n");
1093 region->name = knav_queue_find_name(child);
1094 of_property_read_u32(child, "id", ®ion->id);
1095 ret = of_property_read_u32_array(child, "region-spec", temp, 2);
1097 region->num_desc = temp[0];
1098 region->desc_size = temp[1];
1100 dev_err(dev, "invalid region info %s\n", region->name);
1101 devm_kfree(dev, region);
1106 dev_err(dev, "No link info for %s\n", region->name);
1107 devm_kfree(dev, region);
1111 ®ion->link_index);
1114 region->name);
1115 devm_kfree(dev, region);
1119 INIT_LIST_HEAD(®ion->pools);
1120 list_add_tail(®ion->list, &kdev->regions);
1123 dev_err(dev, "no valid region information found\n");
1128 for_each_region(kdev, region)
1129 knav_queue_setup_region(kdev, region);
1349 struct knav_region *region;
1354 region = first_region(kdev);
1355 if (!region)
1357 list_for_each_entry_safe(pool, tmp, ®ion->pools, region_inst)
1360 size = region->virt_end - region->virt_start;
1362 free_pages_exact(region->virt_start, size);
1363 list_del(®ion->list);
1364 devm_kfree(kdev->dev, region);