Lines Matching refs:kdev
28 static struct knav_device *kdev; variable
56 #define knav_queue_idx_to_inst(kdev, idx) \ argument
57 (kdev->instances + (idx << kdev->inst_shift))
63 #define for_each_instance(idx, inst, kdev) \ argument
64 for (idx = 0, inst = kdev->instances; \
65 idx < (kdev)->num_queues_in_use; \
66 idx++, inst = knav_queue_idx_to_inst(kdev, idx))
129 dev_warn(range->kdev->dev, in knav_queue_setup_irq()
194 knav_queue_match_id_to_inst(struct knav_device *kdev, unsigned id) in knav_queue_match_id_to_inst() argument
199 for_each_instance(idx, inst, kdev) { in knav_queue_match_id_to_inst()
208 if (kdev->base_id <= id && in knav_queue_find_by_id()
209 kdev->base_id + kdev->num_queues > id) { in knav_queue_find_by_id()
210 id -= kdev->base_id; in knav_queue_find_by_id()
211 return knav_queue_match_id_to_inst(kdev, id); in knav_queue_find_by_id()
223 qh = devm_kzalloc(inst->kdev->dev, sizeof(*qh), GFP_KERNEL); in __knav_queue_open()
256 devm_kfree(inst->kdev->dev, qh); in __knav_queue_open()
299 for_each_instance(idx, inst, kdev) { in knav_queue_open_by_type()
431 struct knav_device *kdev = inst->kdev; in knav_queue_debug_show_instance() local
444 kdev->base_id + inst->id, inst->name); in knav_queue_debug_show_instance()
472 dev_name(kdev->dev), kdev->base_id, in knav_queue_debug_show()
473 kdev->base_id + kdev->num_queues - 1); in knav_queue_debug_show()
474 for_each_instance(idx, inst, kdev) in knav_queue_debug_show()
569 devm_kfree(inst->kdev->dev, qh); in knav_queue_close()
590 ret = qh->inst->kdev->base_id + qh->inst->id; in knav_queue_device_control()
722 dev_dbg(pool->kdev->dev, in kdesc_empty_pool()
765 if (!kdev) in knav_pool_create()
768 if (!kdev->dev) in knav_pool_create()
771 pool = devm_kzalloc(kdev->dev, sizeof(*pool), GFP_KERNEL); in knav_pool_create()
773 dev_err(kdev->dev, "out of memory allocating pool\n"); in knav_pool_create()
777 for_each_region(kdev, reg_itr) { in knav_pool_create()
785 dev_err(kdev->dev, "region-id(%d) not found\n", region_id); in knav_pool_create()
792 dev_err(kdev->dev, in knav_pool_create()
800 pool->kdev = kdev; in knav_pool_create()
801 pool->dev = kdev->dev; in knav_pool_create()
806 dev_err(kdev->dev, "out of descs in region(%d) for pool(%s)\n", in knav_pool_create()
832 list_add_tail(&pool->list, &kdev->pools); in knav_pool_create()
835 dev_err(kdev->dev, "pool(%s) create failed: fragmented desc pool in region(%d)\n", in knav_pool_create()
849 devm_kfree(kdev->dev, pool); in knav_pool_create()
877 devm_kfree(kdev->dev, pool); in knav_pool_destroy()
979 static void knav_queue_setup_region(struct knav_device *kdev, in knav_queue_setup_region() argument
991 dev_warn(kdev->dev, "unused region %s\n", region->name); in knav_queue_setup_region()
1001 dev_warn(kdev->dev, "too few descriptors in region %s\n", in knav_queue_setup_region()
1011 dev_err(kdev->dev, "memory alloc failed for region %s\n", in knav_queue_setup_region()
1018 region->dma_start = dma_map_page(kdev->dev, page, 0, size, in knav_queue_setup_region()
1020 if (dma_mapping_error(kdev->dev, region->dma_start)) { in knav_queue_setup_region()
1021 dev_err(kdev->dev, "dma map failed for region %s\n", in knav_queue_setup_region()
1027 pool = devm_kzalloc(kdev->dev, sizeof(*pool), GFP_KERNEL); in knav_queue_setup_region()
1029 dev_err(kdev->dev, "out of memory allocating dummy pool\n"); in knav_queue_setup_region()
1036 dev_dbg(kdev->dev, in knav_queue_setup_region()
1045 for_each_qmgr(kdev, qmgr) { in knav_queue_setup_region()
1056 dma_unmap_page(kdev->dev, region->dma_start, size, in knav_queue_setup_region()
1075 static int knav_queue_setup_regions(struct knav_device *kdev, in knav_queue_setup_regions() argument
1078 struct device *dev = kdev->dev; in knav_queue_setup_regions()
1120 list_add_tail(®ion->list, &kdev->regions); in knav_queue_setup_regions()
1122 if (list_empty(&kdev->regions)) in knav_queue_setup_regions()
1127 for_each_region(kdev, region) in knav_queue_setup_regions()
1128 knav_queue_setup_region(kdev, region); in knav_queue_setup_regions()
1133 static int knav_get_link_ram(struct knav_device *kdev, in knav_get_link_ram() argument
1137 struct platform_device *pdev = to_platform_device(kdev->dev); in knav_get_link_ram()
1166 block->virt = dmam_alloc_coherent(kdev->dev, in knav_get_link_ram()
1170 dev_err(kdev->dev, "failed to alloc linkram\n"); in knav_get_link_ram()
1180 static int knav_queue_setup_link_ram(struct knav_device *kdev) in knav_queue_setup_link_ram() argument
1185 for_each_qmgr(kdev, qmgr) { in knav_queue_setup_link_ram()
1186 block = &kdev->link_rams[0]; in knav_queue_setup_link_ram()
1187 dev_dbg(kdev->dev, "linkram0: dma:%pad, virt:%p, size:%x\n", in knav_queue_setup_link_ram()
1190 if (kdev->version == QMSS_66AK2G) in knav_queue_setup_link_ram()
1200 dev_dbg(kdev->dev, "linkram1: dma:%pad, virt:%p, size:%x\n", in knav_queue_setup_link_ram()
1208 static int knav_setup_queue_range(struct knav_device *kdev, in knav_setup_queue_range() argument
1211 struct device *dev = kdev->dev; in knav_setup_queue_range()
1223 range->kdev = kdev; in knav_setup_queue_range()
1227 range->queue_base = temp[0] - kdev->base_id; in knav_setup_queue_range()
1270 ret = knav_init_acc_range(kdev, node, range); in knav_setup_queue_range()
1280 for_each_qmgr(kdev, qmgr) { in knav_setup_queue_range()
1293 list_add_tail(&range->list, &kdev->queue_ranges); in knav_setup_queue_range()
1301 kdev->num_queues_in_use += range->num_queues; in knav_setup_queue_range()
1305 static int knav_setup_queue_pools(struct knav_device *kdev, in knav_setup_queue_pools() argument
1313 return dev_err_probe(kdev->dev, -ENODEV, in knav_setup_queue_pools()
1319 knav_setup_queue_range(kdev, range); in knav_setup_queue_pools()
1324 if (list_empty(&kdev->queue_ranges)) in knav_setup_queue_pools()
1325 return dev_err_probe(kdev->dev, -ENODEV, in knav_setup_queue_pools()
1330 static void knav_free_queue_range(struct knav_device *kdev, in knav_free_queue_range() argument
1336 devm_kfree(kdev->dev, range); in knav_free_queue_range()
1339 static void knav_free_queue_ranges(struct knav_device *kdev) in knav_free_queue_ranges() argument
1344 range = first_queue_range(kdev); in knav_free_queue_ranges()
1347 knav_free_queue_range(kdev, range); in knav_free_queue_ranges()
1351 static void knav_queue_free_regions(struct knav_device *kdev) in knav_queue_free_regions() argument
1358 region = first_region(kdev); in knav_queue_free_regions()
1368 devm_kfree(kdev->dev, region); in knav_queue_free_regions()
1372 static void __iomem *knav_queue_map_reg(struct knav_device *kdev, in knav_queue_map_reg() argument
1381 dev_err(kdev->dev, "Can't translate of node(%pOFn) address for index(%d)\n", in knav_queue_map_reg()
1386 regs = devm_ioremap_resource(kdev->dev, &res); in knav_queue_map_reg()
1388 dev_err(kdev->dev, "Failed to map register base for index(%d) node(%pOFn)\n", in knav_queue_map_reg()
1393 static int knav_queue_init_qmgrs(struct knav_device *kdev, in knav_queue_init_qmgrs() argument
1396 struct device *dev = kdev->dev; in knav_queue_init_qmgrs()
1431 knav_queue_map_reg(kdev, child, in knav_queue_init_qmgrs()
1434 if (kdev->version == QMSS) { in knav_queue_init_qmgrs()
1436 knav_queue_map_reg(kdev, child, in knav_queue_init_qmgrs()
1441 knav_queue_map_reg(kdev, child, in knav_queue_init_qmgrs()
1442 (kdev->version == QMSS_66AK2G) ? in knav_queue_init_qmgrs()
1446 knav_queue_map_reg(kdev, child, in knav_queue_init_qmgrs()
1447 (kdev->version == QMSS_66AK2G) ? in knav_queue_init_qmgrs()
1452 knav_queue_map_reg(kdev, child, in knav_queue_init_qmgrs()
1453 (kdev->version == QMSS_66AK2G) ? in knav_queue_init_qmgrs()
1457 if (kdev->version == QMSS) { in knav_queue_init_qmgrs()
1459 knav_queue_map_reg(kdev, child, in knav_queue_init_qmgrs()
1464 ((kdev->version == QMSS) && in knav_queue_init_qmgrs()
1469 if (kdev->version == QMSS) { in knav_queue_init_qmgrs()
1488 if (kdev->version == QMSS_66AK2G) in knav_queue_init_qmgrs()
1491 list_add_tail(&qmgr->list, &kdev->qmgrs); in knav_queue_init_qmgrs()
1501 static int knav_queue_init_pdsps(struct knav_device *kdev, in knav_queue_init_pdsps() argument
1504 struct device *dev = kdev->dev; in knav_queue_init_pdsps()
1517 knav_queue_map_reg(kdev, child, in knav_queue_init_pdsps()
1520 knav_queue_map_reg(kdev, child, in knav_queue_init_pdsps()
1523 knav_queue_map_reg(kdev, child, in knav_queue_init_pdsps()
1526 knav_queue_map_reg(kdev, child, in knav_queue_init_pdsps()
1545 list_add_tail(&pdsp->list, &kdev->pdsps); in knav_queue_init_pdsps()
1553 static int knav_queue_stop_pdsp(struct knav_device *kdev, in knav_queue_stop_pdsp() argument
1564 dev_err(kdev->dev, "timed out on pdsp %s stop\n", pdsp->name); in knav_queue_stop_pdsp()
1572 static int knav_queue_load_pdsp(struct knav_device *kdev, in knav_queue_load_pdsp() argument
1584 kdev->dev); in knav_queue_load_pdsp()
1593 dev_err(kdev->dev, "failed to get firmware for pdsp\n"); in knav_queue_load_pdsp()
1597 dev_info(kdev->dev, "firmware file %s downloaded for PDSP\n", in knav_queue_load_pdsp()
1611 static int knav_queue_start_pdsp(struct knav_device *kdev, in knav_queue_start_pdsp() argument
1634 dev_err(kdev->dev, in knav_queue_start_pdsp()
1642 static void knav_queue_stop_pdsps(struct knav_device *kdev) in knav_queue_stop_pdsps() argument
1647 for_each_pdsp(kdev, pdsp) in knav_queue_stop_pdsps()
1648 knav_queue_stop_pdsp(kdev, pdsp); in knav_queue_stop_pdsps()
1651 static int knav_queue_start_pdsps(struct knav_device *kdev) in knav_queue_start_pdsps() argument
1656 knav_queue_stop_pdsps(kdev); in knav_queue_start_pdsps()
1663 for_each_pdsp(kdev, pdsp) { in knav_queue_start_pdsps()
1664 ret = knav_queue_load_pdsp(kdev, pdsp); in knav_queue_start_pdsps()
1669 for_each_pdsp(kdev, pdsp) { in knav_queue_start_pdsps()
1671 ret = knav_queue_start_pdsp(kdev, pdsp); in knav_queue_start_pdsps()
1679 static int knav_queue_setup_pdsps(struct knav_device *kdev, in knav_queue_setup_pdsps() argument
1688 ret = knav_queue_init_pdsps(kdev, pdsps); in knav_queue_setup_pdsps()
1692 ret = knav_queue_start_pdsps(kdev); in knav_queue_setup_pdsps()
1703 for_each_qmgr(kdev, qmgr) { in knav_find_qmgr()
1711 static int knav_queue_init_queue(struct knav_device *kdev, in knav_queue_init_queue() argument
1722 inst->kdev = kdev; in knav_queue_init_queue()
1735 static int knav_queue_init_queues(struct knav_device *kdev) in knav_queue_init_queues() argument
1747 kdev->inst_shift = order_base_2(size); in knav_queue_init_queues()
1748 size = (1 << kdev->inst_shift) * kdev->num_queues_in_use; in knav_queue_init_queues()
1749 kdev->instances = devm_kzalloc(kdev->dev, size, GFP_KERNEL); in knav_queue_init_queues()
1750 if (!kdev->instances) in knav_queue_init_queues()
1753 for_each_queue_range(kdev, range) { in knav_queue_init_queues()
1759 ret = knav_queue_init_queue(kdev, range, in knav_queue_init_queues()
1760 knav_queue_idx_to_inst(kdev, idx), id); in knav_queue_init_queues()
1765 knav_queue_idx_to_inst(kdev, base_idx); in knav_queue_init_queues()
1795 kdev = devm_kzalloc(dev, sizeof(struct knav_device), GFP_KERNEL); in knav_queue_probe()
1796 if (!kdev) { in knav_queue_probe()
1802 kdev->version = QMSS_66AK2G; in knav_queue_probe()
1804 platform_set_drvdata(pdev, kdev); in knav_queue_probe()
1805 kdev->dev = dev; in knav_queue_probe()
1806 INIT_LIST_HEAD(&kdev->queue_ranges); in knav_queue_probe()
1807 INIT_LIST_HEAD(&kdev->qmgrs); in knav_queue_probe()
1808 INIT_LIST_HEAD(&kdev->pools); in knav_queue_probe()
1809 INIT_LIST_HEAD(&kdev->regions); in knav_queue_probe()
1810 INIT_LIST_HEAD(&kdev->pdsps); in knav_queue_probe()
1825 kdev->base_id = temp[0]; in knav_queue_probe()
1826 kdev->num_queues = temp[1]; in knav_queue_probe()
1829 ret = knav_queue_init_qmgrs(kdev, node); in knav_queue_probe()
1834 ret = knav_queue_setup_pdsps(kdev, node); in knav_queue_probe()
1839 ret = knav_setup_queue_pools(kdev, node); in knav_queue_probe()
1843 ret = knav_get_link_ram(kdev, "linkram0", &kdev->link_rams[0]); in knav_queue_probe()
1845 dev_err(kdev->dev, "could not setup linking ram\n"); in knav_queue_probe()
1849 ret = knav_get_link_ram(kdev, "linkram1", &kdev->link_rams[1]); in knav_queue_probe()
1857 ret = knav_queue_setup_link_ram(kdev); in knav_queue_probe()
1861 ret = knav_queue_setup_regions(kdev, node); in knav_queue_probe()
1865 ret = knav_queue_init_queues(kdev); in knav_queue_probe()
1877 knav_queue_stop_pdsps(kdev); in knav_queue_probe()
1878 knav_queue_free_regions(kdev); in knav_queue_probe()
1879 knav_free_queue_ranges(kdev); in knav_queue_probe()