[PATCH 4/4] dma: ti: k3-udma: Move DMA channel[0] allocation to probe and add udma_remove()
Kumar, Udit
u-kumar1 at ti.com
Fri Oct 4 16:44:37 CEST 2024
On 10/4/2024 6:50 PM, Prasanth Babu Mantena wrote:
> From: Santhosh Kumar K <s-k6 at ti.com>
>
> Currently, the allocation of DMA channel[0] for memcpy is happening
> in udma_transfer() for every transfer, which leads to a huge overhead
> for each transfer, especially in case of nand page reads. So, move this
> [..]
>
> @@ -2590,6 +2565,7 @@ static int udma_probe(struct udevice *dev)
> struct udevice *tmp;
> struct udevice *tisci_dev = NULL;
> struct udma_tisci_rm *tisci_rm = &ud->tisci_rm;
> + struct udma_chan *uc;
> ofnode navss_ofnode = ofnode_get_parent(dev_ofnode(dev));
>
> ud->match_data = (void *)dev_get_driver_data(dev);
> @@ -2714,6 +2690,42 @@ static int udma_probe(struct udevice *dev)
>
> uc_priv->supported = DMA_SUPPORTS_MEM_TO_MEM | DMA_SUPPORTS_MEM_TO_DEV;
>
> + uc = &ud->channels[0];
> + switch (ud->match_data->type) {
> + case DMA_TYPE_UDMA:
> + ret = udma_alloc_chan_resources(uc);
> + break;
> + case DMA_TYPE_BCDMA:
> + ret = bcdma_alloc_chan_resources(uc);
> + break;
> + default:
> + return -EINVAL;
shouldn't we treat this default case as error and do some dev_err prints ?
> + };
> +
> + if (ret) {
> + dev_err(dev, " Channel 0 allocation failure %d\n", ret);
> + return ret;
No need of this ret
> + }
> +
> + return 0;
do 'return ret' here
> +}
> +
> +static int udma_remove(struct udevice *dev)
> +{
> + struct udma_dev *ud = dev_get_priv(dev);
> + struct udma_chan *uc = &ud->channels[0];
> +
> + switch (ud->match_data->type) {
> + case DMA_TYPE_UDMA:
> + udma_free_chan_resources(uc);
> + break;
> + case DMA_TYPE_BCDMA:
> + bcdma_free_bchan_resources(uc);
> + break;
> + default:
> + return -EINVAL;
shouldn't we treat this default case as error and do some dev_err prints ?
> + };
> +
> return 0;
> }
>
> @@ -2855,5 +2867,7 @@ U_BOOT_DRIVER(ti_edma3) = {
> .of_match = udma_ids,
> .ops = &udma_ops,
> .probe = udma_probe,
> + .remove = udma_remove,
> .priv_auto = sizeof(struct udma_dev),
> + .flags = DM_FLAG_OS_PREPARE,
> };
More information about the U-Boot
mailing list