Lines Matching defs:ringacc
14 #include <linux/soc/ti/k3-ringacc.h>
166 int (*init)(struct platform_device *pdev, struct k3_ringacc *ringacc);
187 * @ops: SoC specific ringacc operation
286 struct k3_ring *k3_ringacc_request_ring(struct k3_ringacc *ringacc,
291 mutex_lock(&ringacc->req_lock);
296 &ringacc->rm_gp_range->desc[0];
300 id = find_next_zero_bit(ringacc->rings_inuse, size,
308 if (test_bit(id, ringacc->rings_inuse) &&
309 !(ringacc->rings[id].flags & K3_RING_FLAG_SHARED))
311 else if (ringacc->rings[id].flags & K3_RING_FLAG_SHARED)
315 proxy_id = find_next_zero_bit(ringacc->proxy_inuse,
316 ringacc->num_proxies, 0);
317 if (proxy_id == ringacc->num_proxies)
322 set_bit(proxy_id, ringacc->proxy_inuse);
323 ringacc->rings[id].proxy_id = proxy_id;
324 dev_dbg(ringacc->dev, "Giving ring#%d proxy#%d\n", id,
327 dev_dbg(ringacc->dev, "Giving ring#%d\n", id);
330 set_bit(id, ringacc->rings_inuse);
332 ringacc->rings[id].use_count++;
333 mutex_unlock(&ringacc->req_lock);
334 return &ringacc->rings[id];
337 mutex_unlock(&ringacc->req_lock);
342 int k3_ringacc_request_rings_pair(struct k3_ringacc *ringacc,
352 *fwd_ring = k3_ringacc_request_ring(ringacc, fwd_id, 0);
356 *compl_ring = k3_ringacc_request_ring(ringacc, compl_id, 0);
368 struct k3_ringacc *ringacc = ring->parent;
371 ret = ringacc->tisci_ring_ops->config(
372 ringacc->tisci,
374 ringacc->tisci_dev_id,
383 dev_err(ringacc->dev, "TISCI reset ring fail (%d) ring_idx %d\n",
401 struct k3_ringacc *ringacc = ring->parent;
404 ret = ringacc->tisci_ring_ops->config(
405 ringacc->tisci,
407 ringacc->tisci_dev_id,
416 dev_err(ringacc->dev, "TISCI reconf qmode fail (%d) ring_idx %d\n",
481 struct k3_ringacc *ringacc = ring->parent;
484 ret = ringacc->tisci_ring_ops->config(
485 ringacc->tisci,
487 ringacc->tisci_dev_id,
496 dev_err(ringacc->dev, "TISCI ring free fail (%d) ring_idx %d\n",
502 struct k3_ringacc *ringacc;
507 ringacc = ring->parent;
511 if (!test_bit(ring->ring_id, ringacc->rings_inuse))
514 mutex_lock(&ringacc->req_lock);
524 dma_free_coherent(ringacc->dev,
530 clear_bit(ring->proxy_id, ringacc->proxy_inuse);
536 clear_bit(ring->ring_id, ringacc->rings_inuse);
539 mutex_unlock(&ringacc->req_lock);
578 struct k3_ringacc *ringacc = ring->parent;
582 if (!ringacc->tisci)
586 ret = ringacc->tisci_ring_ops->config(
587 ringacc->tisci,
589 ringacc->tisci_dev_id,
598 dev_err(ringacc->dev, "TISCI config ring fail (%d) ring_idx %d\n",
606 struct k3_ringacc *ringacc;
611 ringacc = ring->parent;
616 !test_bit(ring->ring_id, ringacc->rings_inuse))
622 dev_err(ringacc->dev,
631 * ring = k3_ringacc_request_ring(ringacc, ring_id, 0); # master user
633 * k3_ringacc_request_ring(ringacc, ring_id, K3_RING_FLAG_SHARED);
634 * k3_ringacc_request_ring(ringacc, ring_id, K3_RING_FLAG_SHARED);
645 ring->proxy = ringacc->proxy_target_base +
664 ring->ring_mem_virt = dma_alloc_coherent(ringacc->dev,
668 dev_err(ringacc->dev, "Failed to alloc ring mem\n");
687 dma_free_coherent(ringacc->dev,
1026 struct k3_ringacc *ringacc = ERR_PTR(-EPROBE_DEFER);
1036 ringacc = entry;
1042 return ringacc;
1046 static int k3_ringacc_probe_dt(struct k3_ringacc *ringacc)
1048 struct device_node *node = ringacc->dev->of_node;
1049 struct device *dev = ringacc->dev;
1058 ret = of_property_read_u32(node, "ti,num-rings", &ringacc->num_rings);
1064 ringacc->tisci = ti_sci_get_by_phandle(node, "ti,sci");
1065 if (IS_ERR(ringacc->tisci)) {
1066 ret = PTR_ERR(ringacc->tisci);
1069 ringacc->tisci = NULL;
1074 &ringacc->tisci_dev_id);
1080 pdev->id = ringacc->tisci_dev_id;
1082 ringacc->rm_gp_range = devm_ti_sci_get_of_resource(ringacc->tisci, dev,
1083 ringacc->tisci_dev_id,
1085 if (IS_ERR(ringacc->rm_gp_range)) {
1087 return PTR_ERR(ringacc->rm_gp_range);
1090 return ti_sci_inta_msi_domain_alloc_irqs(ringacc->dev,
1091 ringacc->rm_gp_range);
1107 struct k3_ringacc *ringacc)
1122 ret = k3_ringacc_probe_dt(ringacc);
1130 ringacc->dma_ring_reset_quirk = soc_data->dma_ring_reset_quirk;
1144 ringacc->proxy_gcfg = devm_ioremap_resource(dev, res);
1145 if (IS_ERR(ringacc->proxy_gcfg))
1146 return PTR_ERR(ringacc->proxy_gcfg);
1150 ringacc->proxy_target_base = devm_ioremap_resource(dev, res);
1151 if (IS_ERR(ringacc->proxy_target_base))
1152 return PTR_ERR(ringacc->proxy_target_base);
1154 ringacc->num_proxies = readl(&ringacc->proxy_gcfg->config) &
1157 ringacc->rings = devm_kzalloc(dev,
1158 sizeof(*ringacc->rings) *
1159 ringacc->num_rings,
1161 ringacc->rings_inuse = devm_kcalloc(dev,
1162 BITS_TO_LONGS(ringacc->num_rings),
1164 ringacc->proxy_inuse = devm_kcalloc(dev,
1165 BITS_TO_LONGS(ringacc->num_proxies),
1168 if (!ringacc->rings || !ringacc->rings_inuse || !ringacc->proxy_inuse)
1171 for (i = 0; i < ringacc->num_rings; i++) {
1172 ringacc->rings[i].rt = base_rt +
1174 ringacc->rings[i].fifos = base_fifo +
1176 ringacc->rings[i].parent = ringacc;
1177 ringacc->rings[i].ring_id = i;
1178 ringacc->rings[i].proxy_id = K3_RINGACC_PROXY_NOT_USED;
1181 ringacc->tisci_ring_ops = &ringacc->tisci->ops.rm_ring_ops;
1184 ringacc->num_rings,
1185 ringacc->rm_gp_range->desc[0].start,
1186 ringacc->rm_gp_range->desc[0].num,
1187 ringacc->tisci_dev_id);
1189 ringacc->dma_ring_reset_quirk ? "enabled" : "disabled");
1191 readl(&ringacc->proxy_gcfg->revision), ringacc->num_proxies);
1208 { .compatible = "ti,am654-navss-ringacc", .data = &k3_ringacc_data, },
1217 struct k3_ringacc *ringacc;
1225 ringacc = devm_kzalloc(dev, sizeof(*ringacc), GFP_KERNEL);
1226 if (!ringacc)
1229 ringacc->dev = dev;
1230 mutex_init(&ringacc->req_lock);
1231 ringacc->ops = &match_data->ops;
1233 ret = ringacc->ops->init(pdev, ringacc);
1237 dev_set_drvdata(dev, ringacc);
1240 list_add_tail(&ringacc->list, &k3_ringacc_list);
1249 .name = "k3-ringacc",