Skip to content

Commit 4d733ef

Browse files
Siddharth-Vadapalli-at-TIgregkh
authored andcommitted
dmaengine: ti: k3-udma: Enable second resource range for BCDMA and PKTDMA
commit 566beb3 upstream. The SoC DMA resources for UDMA, BCDMA and PKTDMA can be described via a combination of up to two resource ranges. The first resource range handles the default partitioning wherein all resources belonging to that range are allocated to a single entity and form a continuous range. For use-cases where the resources are shared across multiple entities and require to be described via discontinuous ranges, a second resource range is required. Currently, udma_setup_resources() supports handling resources that belong to the second range. Extend bcdma_setup_resources() and pktdma_setup_resources() to support the same. Signed-off-by: Siddharth Vadapalli <s-vadapalli@ti.com> Acked-by: Peter Ujfalusi <peter.ujfalusi@gmail.com> Link: https://lore.kernel.org/r/20250205121805.316792-1-s-vadapalli@ti.com Signed-off-by: Vinod Koul <vkoul@kernel.org> Tested-by: Sai Sree Kartheek Adivi <s-adivi@ti.com> Signed-off-by: Sai Sree Kartheek Adivi <s-adivi@ti.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
1 parent b750708 commit 4d733ef

1 file changed

Lines changed: 36 additions & 0 deletions

File tree

drivers/dma/ti/k3-udma.c

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4876,6 +4876,12 @@ static int bcdma_setup_resources(struct udma_dev *ud)
48764876
irq_res.desc[i].start = rm_res->desc[i].start +
48774877
oes->bcdma_bchan_ring;
48784878
irq_res.desc[i].num = rm_res->desc[i].num;
4879+
4880+
if (rm_res->desc[i].num_sec) {
4881+
irq_res.desc[i].start_sec = rm_res->desc[i].start_sec +
4882+
oes->bcdma_bchan_ring;
4883+
irq_res.desc[i].num_sec = rm_res->desc[i].num_sec;
4884+
}
48794885
}
48804886
}
48814887
} else {
@@ -4899,6 +4905,15 @@ static int bcdma_setup_resources(struct udma_dev *ud)
48994905
irq_res.desc[i + 1].start = rm_res->desc[j].start +
49004906
oes->bcdma_tchan_ring;
49014907
irq_res.desc[i + 1].num = rm_res->desc[j].num;
4908+
4909+
if (rm_res->desc[j].num_sec) {
4910+
irq_res.desc[i].start_sec = rm_res->desc[j].start_sec +
4911+
oes->bcdma_tchan_data;
4912+
irq_res.desc[i].num_sec = rm_res->desc[j].num_sec;
4913+
irq_res.desc[i + 1].start_sec = rm_res->desc[j].start_sec +
4914+
oes->bcdma_tchan_ring;
4915+
irq_res.desc[i + 1].num_sec = rm_res->desc[j].num_sec;
4916+
}
49024917
}
49034918
}
49044919
}
@@ -4919,6 +4934,15 @@ static int bcdma_setup_resources(struct udma_dev *ud)
49194934
irq_res.desc[i + 1].start = rm_res->desc[j].start +
49204935
oes->bcdma_rchan_ring;
49214936
irq_res.desc[i + 1].num = rm_res->desc[j].num;
4937+
4938+
if (rm_res->desc[j].num_sec) {
4939+
irq_res.desc[i].start_sec = rm_res->desc[j].start_sec +
4940+
oes->bcdma_rchan_data;
4941+
irq_res.desc[i].num_sec = rm_res->desc[j].num_sec;
4942+
irq_res.desc[i + 1].start_sec = rm_res->desc[j].start_sec +
4943+
oes->bcdma_rchan_ring;
4944+
irq_res.desc[i + 1].num_sec = rm_res->desc[j].num_sec;
4945+
}
49224946
}
49234947
}
49244948
}
@@ -5053,6 +5077,12 @@ static int pktdma_setup_resources(struct udma_dev *ud)
50535077
irq_res.desc[i].start = rm_res->desc[i].start +
50545078
oes->pktdma_tchan_flow;
50555079
irq_res.desc[i].num = rm_res->desc[i].num;
5080+
5081+
if (rm_res->desc[i].num_sec) {
5082+
irq_res.desc[i].start_sec = rm_res->desc[i].start_sec +
5083+
oes->pktdma_tchan_flow;
5084+
irq_res.desc[i].num_sec = rm_res->desc[i].num_sec;
5085+
}
50565086
}
50575087
}
50585088
rm_res = tisci_rm->rm_ranges[RM_RANGE_RFLOW];
@@ -5064,6 +5094,12 @@ static int pktdma_setup_resources(struct udma_dev *ud)
50645094
irq_res.desc[i].start = rm_res->desc[j].start +
50655095
oes->pktdma_rchan_flow;
50665096
irq_res.desc[i].num = rm_res->desc[j].num;
5097+
5098+
if (rm_res->desc[j].num_sec) {
5099+
irq_res.desc[i].start_sec = rm_res->desc[j].start_sec +
5100+
oes->pktdma_rchan_flow;
5101+
irq_res.desc[i].num_sec = rm_res->desc[j].num_sec;
5102+
}
50675103
}
50685104
}
50695105
ret = ti_sci_inta_msi_domain_alloc_irqs(ud->dev, &irq_res);

0 commit comments

Comments
 (0)