aboutsummaryrefslogtreecommitdiff
path: root/kernel/ethosu_device.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/ethosu_device.c')
-rw-r--r--kernel/ethosu_device.c32
1 files changed, 20 insertions, 12 deletions
diff --git a/kernel/ethosu_device.c b/kernel/ethosu_device.c
index b889a7b..83df62e 100644
--- a/kernel/ethosu_device.c
+++ b/kernel/ethosu_device.c
@@ -1,5 +1,6 @@
/*
- * Copyright 2020-2023 Arm Limited and/or its affiliates
+ * SPDX-FileCopyrightText: Copyright 2020-2023 Arm Limited and/or its affiliates <open-source-office@arm.com>
+ * SPDX-License-Identifier: GPL-2.0-only
*
* This program is free software and is provided to you under the terms of the
* GNU General Public License version 2 as published by the Free Software
@@ -14,8 +15,6 @@
* You should have received a copy of the GNU General Public License
* along with this program; if not, you can access it online at
* http://www.gnu.org/licenses/gpl-2.0.html.
- *
- * SPDX-License-Identifier: GPL-2.0-only
*/
/****************************************************************************
@@ -38,6 +37,7 @@
#include <linux/errno.h>
#include <linux/fs.h>
#include <linux/io.h>
+#include <linux/of_device.h>
#include <linux/of_reserved_mem.h>
#include <linux/remoteproc.h>
#include <linux/slab.h>
@@ -50,8 +50,6 @@
#define MINOR_BASE 0 /* Minor version starts at 0 */
#define MINOR_COUNT 64 /* Allocate minor versions */
-#define DMA_ADDR_BITS 32 /* Number of address bits */
-
/****************************************************************************
* Variables
****************************************************************************/
@@ -402,20 +400,30 @@ static int ethosu_device_register(struct device *dev,
return ret;
}
- /* Inherit DMA settings for rproc device */
- ret = of_reserved_mem_device_init_by_idx(dev,
- rproc->dev.parent->of_node, 0);
+ /* Inherit DMA mask from rproc device */
+ ret = dma_coerce_mask_and_coherent(dev,
+ dma_get_mask(rproc->dev.parent));
if (ret) {
- dev_err(parent, "Failed to initialize reserved memory. ret=%d",
+ dev_err(parent, "Failed to set DMA mask. ret=%d", ret);
+
+ return ret;
+ }
+
+ /* Inherit DMA configuration from rproc device */
+ ret = of_dma_configure(dev, rproc->dev.parent->of_node, false);
+ if (ret) {
+ dev_err(parent, "Failed to configure DMA. ret=%d",
ret);
return ret;
}
- /* Set mask for coherent DMA addressing */
- ret = dma_set_coherent_mask(dev, DMA_BIT_MASK(DMA_ADDR_BITS));
+ /* Inherit reserved memory from rproc device */
+ ret = of_reserved_mem_device_init_by_idx(dev,
+ rproc->dev.parent->of_node, 0);
if (ret) {
- dev_err(parent, "Failed to set coherent DMA mask. ret=%d", ret);
+ dev_err(parent, "Failed to initialize reserved memory. ret=%d",
+ ret);
return ret;
}