Lines Matching +full:dma +full:- +full:info

1 /* SPDX-License-Identifier: GPL-2.0-only
20 /* DMA mode direct or SG */
56 * Words EI (0-3)
85 void *info; member
114 u32 dma_mode:2; /* DMA mode */
118 u32 dma_mode:2; /* DMA mode */
182 struct otx2_cpt_inst_info *info) in otx2_cpt_info_destroy() argument
187 if (info->dptr_baddr) in otx2_cpt_info_destroy()
188 dma_unmap_single(&pdev->dev, info->dptr_baddr, in otx2_cpt_info_destroy()
189 info->dma_len, DMA_BIDIRECTIONAL); in otx2_cpt_info_destroy()
191 if (info->req) { in otx2_cpt_info_destroy()
192 req = info->req; in otx2_cpt_info_destroy()
193 for (i = 0; i < req->out_cnt; i++) { in otx2_cpt_info_destroy()
194 if (req->out[i].dma_addr) in otx2_cpt_info_destroy()
195 dma_unmap_single(&pdev->dev, in otx2_cpt_info_destroy()
196 req->out[i].dma_addr, in otx2_cpt_info_destroy()
197 req->out[i].size, in otx2_cpt_info_destroy()
201 for (i = 0; i < req->in_cnt; i++) { in otx2_cpt_info_destroy()
202 if (req->in[i].dma_addr) in otx2_cpt_info_destroy()
203 dma_unmap_single(&pdev->dev, in otx2_cpt_info_destroy()
204 req->in[i].dma_addr, in otx2_cpt_info_destroy()
205 req->in[i].size, in otx2_cpt_info_destroy()
209 kfree(info); in otx2_cpt_info_destroy()
221 dev_err(&pdev->dev, "Input list pointer is NULL\n"); in setup_sgio_components()
222 return -EINVAL; in setup_sgio_components()
228 list[i].dma_addr = dma_map_single(&pdev->dev, list[i].vptr, in setup_sgio_components()
231 if (unlikely(dma_mapping_error(&pdev->dev, list[i].dma_addr))) { in setup_sgio_components()
232 dev_err(&pdev->dev, "Dma mapping failed\n"); in setup_sgio_components()
239 sg_ptr->len0 = cpu_to_be16(list[i * SG_COMPS_MAX + 0].size); in setup_sgio_components()
240 sg_ptr->len1 = cpu_to_be16(list[i * SG_COMPS_MAX + 1].size); in setup_sgio_components()
241 sg_ptr->len2 = cpu_to_be16(list[i * SG_COMPS_MAX + 2].size); in setup_sgio_components()
242 sg_ptr->len3 = cpu_to_be16(list[i * SG_COMPS_MAX + 3].size); in setup_sgio_components()
243 sg_ptr->ptr0 = cpu_to_be64(list[i * SG_COMPS_MAX + 0].dma_addr); in setup_sgio_components()
244 sg_ptr->ptr1 = cpu_to_be64(list[i * SG_COMPS_MAX + 1].dma_addr); in setup_sgio_components()
245 sg_ptr->ptr2 = cpu_to_be64(list[i * SG_COMPS_MAX + 2].dma_addr); in setup_sgio_components()
246 sg_ptr->ptr3 = cpu_to_be64(list[i * SG_COMPS_MAX + 3].dma_addr); in setup_sgio_components()
253 sg_ptr->len2 = cpu_to_be16(list[i * SG_COMPS_MAX + 2].size); in setup_sgio_components()
254 sg_ptr->ptr2 = cpu_to_be64(list[i * SG_COMPS_MAX + 2].dma_addr); in setup_sgio_components()
257 sg_ptr->len1 = cpu_to_be16(list[i * SG_COMPS_MAX + 1].size); in setup_sgio_components()
258 sg_ptr->ptr1 = cpu_to_be64(list[i * SG_COMPS_MAX + 1].dma_addr); in setup_sgio_components()
261 sg_ptr->len0 = cpu_to_be16(list[i * SG_COMPS_MAX + 0].size); in setup_sgio_components()
262 sg_ptr->ptr0 = cpu_to_be64(list[i * SG_COMPS_MAX + 0].dma_addr); in setup_sgio_components()
272 dma_unmap_single(&pdev->dev, list[j].dma_addr, in setup_sgio_components()
278 return -EIO; in setup_sgio_components()
290 dev_err(&pdev->dev, "Input list pointer is NULL\n"); in sgv2io_components_setup()
291 return -EFAULT; in sgv2io_components_setup()
297 list[i].dma_addr = dma_map_single(&pdev->dev, list[i].vptr, in sgv2io_components_setup()
300 if (unlikely(dma_mapping_error(&pdev->dev, list[i].dma_addr))) { in sgv2io_components_setup()
301 dev_err(&pdev->dev, "Dma mapping failed\n"); in sgv2io_components_setup()
308 sg_ptr->len0 = list[i * SGV2_COMPS_MAX + 0].size; in sgv2io_components_setup()
309 sg_ptr->len1 = list[i * SGV2_COMPS_MAX + 1].size; in sgv2io_components_setup()
310 sg_ptr->len2 = list[i * SGV2_COMPS_MAX + 2].size; in sgv2io_components_setup()
311 sg_ptr->ptr0 = list[i * SGV2_COMPS_MAX + 0].dma_addr; in sgv2io_components_setup()
312 sg_ptr->ptr1 = list[i * SGV2_COMPS_MAX + 1].dma_addr; in sgv2io_components_setup()
313 sg_ptr->ptr2 = list[i * SGV2_COMPS_MAX + 2].dma_addr; in sgv2io_components_setup()
314 sg_ptr->valid_segs = SGV2_COMPS_MAX; in sgv2io_components_setup()
319 sg_ptr->valid_segs = components; in sgv2io_components_setup()
322 sg_ptr->len1 = list[i * SGV2_COMPS_MAX + 1].size; in sgv2io_components_setup()
323 sg_ptr->ptr1 = list[i * SGV2_COMPS_MAX + 1].dma_addr; in sgv2io_components_setup()
326 sg_ptr->len0 = list[i * SGV2_COMPS_MAX + 0].size; in sgv2io_components_setup()
327 sg_ptr->ptr0 = list[i * SGV2_COMPS_MAX + 0].dma_addr; in sgv2io_components_setup()
337 dma_unmap_single(&pdev->dev, list[j].dma_addr, in sgv2io_components_setup()
343 return -EIO; in sgv2io_components_setup()
352 struct otx2_cpt_inst_info *info; in cn10k_sgv2_info_create() local
357 g_sz_bytes = ((req->in_cnt + 2) / 3) * in cn10k_sgv2_info_create()
359 s_sz_bytes = ((req->out_cnt + 2) / 3) * in cn10k_sgv2_info_create()
364 info_len = ALIGN(sizeof(*info), align); in cn10k_sgv2_info_create()
367 info = kzalloc(total_mem_len, gfp); in cn10k_sgv2_info_create()
368 if (unlikely(!info)) in cn10k_sgv2_info_create()
371 for (i = 0; i < req->in_cnt; i++) in cn10k_sgv2_info_create()
372 dlen += req->in[i].size; in cn10k_sgv2_info_create()
374 info->dlen = dlen; in cn10k_sgv2_info_create()
375 info->in_buffer = (u8 *)info + info_len; in cn10k_sgv2_info_create()
376 info->gthr_sz = req->in_cnt; in cn10k_sgv2_info_create()
377 info->sctr_sz = req->out_cnt; in cn10k_sgv2_info_create()
380 if (sgv2io_components_setup(pdev, req->in, req->in_cnt, in cn10k_sgv2_info_create()
381 info->in_buffer)) { in cn10k_sgv2_info_create()
382 dev_err(&pdev->dev, "Failed to setup gather list\n"); in cn10k_sgv2_info_create()
386 if (sgv2io_components_setup(pdev, req->out, req->out_cnt, in cn10k_sgv2_info_create()
387 &info->in_buffer[g_len])) { in cn10k_sgv2_info_create()
388 dev_err(&pdev->dev, "Failed to setup scatter list\n"); in cn10k_sgv2_info_create()
392 info->dma_len = total_mem_len - info_len; in cn10k_sgv2_info_create()
393 info->dptr_baddr = dma_map_single(&pdev->dev, info->in_buffer, in cn10k_sgv2_info_create()
394 info->dma_len, DMA_BIDIRECTIONAL); in cn10k_sgv2_info_create()
395 if (unlikely(dma_mapping_error(&pdev->dev, info->dptr_baddr))) { in cn10k_sgv2_info_create()
396 dev_err(&pdev->dev, "DMA Mapping failed for cpt req\n"); in cn10k_sgv2_info_create()
399 info->rptr_baddr = info->dptr_baddr + g_len; in cn10k_sgv2_info_create()
404 info->completion_addr = info->in_buffer + sg_len; in cn10k_sgv2_info_create()
405 info->comp_baddr = info->dptr_baddr + sg_len; in cn10k_sgv2_info_create()
407 return info; in cn10k_sgv2_info_create()
410 otx2_cpt_info_destroy(pdev, info); in cn10k_sgv2_info_create()
421 struct otx2_cpt_inst_info *info; in otx2_sg_info_create() local
426 if (unlikely(req->in_cnt > OTX2_CPT_MAX_SG_IN_CNT || in otx2_sg_info_create()
427 req->out_cnt > OTX2_CPT_MAX_SG_OUT_CNT)) { in otx2_sg_info_create()
428 dev_err(&pdev->dev, "Error too many sg components\n"); in otx2_sg_info_create()
432 g_sz_bytes = ((req->in_cnt + 3) / 4) * in otx2_sg_info_create()
434 s_sz_bytes = ((req->out_cnt + 3) / 4) * in otx2_sg_info_create()
439 info_len = ALIGN(sizeof(*info), align); in otx2_sg_info_create()
442 info = kzalloc(total_mem_len, gfp); in otx2_sg_info_create()
443 if (unlikely(!info)) in otx2_sg_info_create()
446 info->dlen = dlen; in otx2_sg_info_create()
447 info->in_buffer = (u8 *)info + info_len; in otx2_sg_info_create()
449 ((u16 *)info->in_buffer)[0] = req->out_cnt; in otx2_sg_info_create()
450 ((u16 *)info->in_buffer)[1] = req->in_cnt; in otx2_sg_info_create()
451 ((u16 *)info->in_buffer)[2] = 0; in otx2_sg_info_create()
452 ((u16 *)info->in_buffer)[3] = 0; in otx2_sg_info_create()
453 cpu_to_be64s((u64 *)info->in_buffer); in otx2_sg_info_create()
456 if (setup_sgio_components(pdev, req->in, req->in_cnt, in otx2_sg_info_create()
457 &info->in_buffer[8])) { in otx2_sg_info_create()
458 dev_err(&pdev->dev, "Failed to setup gather list\n"); in otx2_sg_info_create()
462 if (setup_sgio_components(pdev, req->out, req->out_cnt, in otx2_sg_info_create()
463 &info->in_buffer[8 + g_sz_bytes])) { in otx2_sg_info_create()
464 dev_err(&pdev->dev, "Failed to setup scatter list\n"); in otx2_sg_info_create()
468 info->dma_len = total_mem_len - info_len; in otx2_sg_info_create()
469 info->dptr_baddr = dma_map_single(&pdev->dev, info->in_buffer, in otx2_sg_info_create()
470 info->dma_len, DMA_BIDIRECTIONAL); in otx2_sg_info_create()
471 if (unlikely(dma_mapping_error(&pdev->dev, info->dptr_baddr))) { in otx2_sg_info_create()
472 dev_err(&pdev->dev, "DMA Mapping failed for cpt req\n"); in otx2_sg_info_create()
479 info->completion_addr = info->in_buffer + align_dlen; in otx2_sg_info_create()
480 info->comp_baddr = info->dptr_baddr + align_dlen; in otx2_sg_info_create()
482 return info; in otx2_sg_info_create()
485 otx2_cpt_info_destroy(pdev, info); in otx2_sg_info_create()