mirror of
https://gitlab.com/redhat/centos-stream/src/kernel/centos-stream-9.git
synced 2026-09-09 00:08:12 +08:00
Merge: Recent upstream fixes for DMA Engine drivers
MR: https://gitlab.com/redhat/centos-stream/src/kernel/centos-stream-9/-/merge_requests/8410 JIRA: https://redhat.atlassian.net/browse/RHEL-213921 Upstream-Status: git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git Recent upstream fixes for DMA engine drivers Signed-off-by: Eder Zulian <ezulian@redhat.com> Approved-by: Eric Chanudet <echanude@redhat.com> Approved-by: Jerry Snitselaar <jsnitsel@redhat.com> Approved-by: jbrnak <jbrnak@redhat.com> Approved-by: CKI KWF Bot <cki-ci-bot+kwf-gitlab-com@redhat.com> Merged-by: CKI GitLab Kmaint Pipeline Bot <26919896-cki-kmaint-pipeline-bot@users.noreply.gitlab.com>
This commit is contained in:
@@ -905,11 +905,12 @@ void dma_release_channel(struct dma_chan *chan)
|
||||
mutex_lock(&dma_list_mutex);
|
||||
WARN_ONCE(chan->client_count != 1,
|
||||
"chan reference count %d != 1\n", chan->client_count);
|
||||
dma_chan_put(chan);
|
||||
/* drop PRIVATE cap enabled by __dma_request_channel() */
|
||||
if (--chan->device->privatecnt == 0)
|
||||
dma_cap_clear(DMA_PRIVATE, chan->device->cap_mask);
|
||||
|
||||
dma_chan_put(chan);
|
||||
|
||||
if (chan->slave) {
|
||||
sysfs_remove_link(&chan->dev->device.kobj, DMA_SLAVE_NAME);
|
||||
sysfs_remove_link(&chan->slave->kobj, chan->name);
|
||||
|
||||
@@ -2376,7 +2376,9 @@ static int sdma_probe(struct platform_device *pdev)
|
||||
goto err_register;
|
||||
}
|
||||
|
||||
spba_bus = of_find_compatible_node(NULL, NULL, "fsl,spba-bus");
|
||||
struct device_node *sdma_parent_np __free(device_node) = of_get_parent(np);
|
||||
|
||||
spba_bus = of_get_compatible_child(sdma_parent_np, "fsl,spba-bus");
|
||||
ret = of_address_to_resource(spba_bus, 0, &spba_res);
|
||||
if (!ret) {
|
||||
sdma->spba_start_addr = spba_res.start;
|
||||
|
||||
@@ -2260,6 +2260,7 @@ static int gpi_probe(struct platform_device *pdev)
|
||||
/* clear and Set capabilities */
|
||||
dma_cap_zero(gpi_dev->dma_device.cap_mask);
|
||||
dma_cap_set(DMA_SLAVE, gpi_dev->dma_device.cap_mask);
|
||||
dma_cap_set(DMA_PRIVATE, gpi_dev->dma_device.cap_mask);
|
||||
|
||||
/* configure dmaengine apis */
|
||||
gpi_dev->dma_device.directions = BIT(DMA_DEV_TO_MEM) | BIT(DMA_MEM_TO_DEV);
|
||||
|
||||
@@ -825,6 +825,13 @@ static unsigned int get_burst_size(struct tegra_dma_channel *tdc,
|
||||
* len to calculate the optimum burst size
|
||||
*/
|
||||
burst_byte = burst_size ? burst_size * slave_bw : len;
|
||||
|
||||
/*
|
||||
* Find the largest burst size that evenly divides the transfer length.
|
||||
* The hardware requires the transfer length to be a multiple of the
|
||||
* burst size - partial bursts are not supported.
|
||||
*/
|
||||
burst_byte = min(burst_byte, 1U << __ffs(len));
|
||||
burst_mmio_width = burst_byte / 4;
|
||||
|
||||
if (burst_mmio_width < TEGRA_GPCDMA_MMIOSEQ_BURST_MIN)
|
||||
|
||||
Reference in New Issue
Block a user