On 10/4/2024 6:50 PM, Prasanth Babu Mantena wrote:
From: Santhosh Kumar K <[email protected]>

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,
  };

Reply via email to