aboutsummaryrefslogtreecommitdiff
path: root/kernel/ethosu_network.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/ethosu_network.c')
-rw-r--r--kernel/ethosu_network.c41
1 files changed, 24 insertions, 17 deletions
diff --git a/kernel/ethosu_network.c b/kernel/ethosu_network.c
index 251b181..d64d6d7 100644
--- a/kernel/ethosu_network.c
+++ b/kernel/ethosu_network.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2020,2022 Arm Limited.
+ * Copyright 2020,2022-2023 Arm Limited and/or its affiliates
*
* 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
@@ -67,21 +67,23 @@ static void ethosu_network_destroy(struct kref *kref)
{
struct ethosu_network *net =
container_of(kref, struct ethosu_network, kref);
+ struct device *dev = net->dev;
- dev_info(net->edev->dev, "Network destroy. net=0x%pK\n", net);
+ dev_info(dev, "Network destroy. net=0x%pK\n", net);
if (net->buf != NULL)
ethosu_buffer_put(net->buf);
- devm_kfree(net->edev->dev, net);
+ devm_kfree(dev, net);
}
static int ethosu_network_release(struct inode *inode,
struct file *file)
{
struct ethosu_network *net = file->private_data;
+ struct device *dev = net->dev;
- dev_info(net->edev->dev, "Network release. file=0x%pK, net=0x%pK\n",
+ dev_info(dev, "Network release. file=0x%pK, net=0x%pK\n",
file, net);
ethosu_network_put(net);
@@ -94,14 +96,15 @@ static long ethosu_network_ioctl(struct file *file,
unsigned long arg)
{
struct ethosu_network *net = file->private_data;
+ struct device *dev = net->dev;
void __user *udata = (void __user *)arg;
int ret = -EINVAL;
- ret = mutex_lock_interruptible(&net->edev->mutex);
+ ret = device_lock_interruptible(net->dev);
if (ret)
return ret;
- dev_info(net->edev->dev,
+ dev_info(dev,
"Network ioctl: file=0x%pK, net=0x%pK, cmd=0x%x, arg=0x%lx\n",
file, net, cmd, arg);
@@ -112,11 +115,13 @@ static long ethosu_network_ioctl(struct file *file,
if (copy_from_user(&uapi, udata, sizeof(uapi)))
break;
- dev_info(net->edev->dev,
+ dev_info(dev,
"Network ioctl: Network info. net=0x%pK\n",
net);
- ret = ethosu_network_info_request(net, &uapi);
+ ret =
+ ethosu_network_info_request(dev, net->mailbox, net,
+ &uapi);
if (ret)
break;
@@ -129,36 +134,38 @@ static long ethosu_network_ioctl(struct file *file,
if (copy_from_user(&uapi, udata, sizeof(uapi)))
break;
- dev_info(net->edev->dev,
+ dev_info(dev,
"Network ioctl: Inference. ifm_fd=%u, ofm_fd=%u\n",
uapi.ifm_fd[0], uapi.ofm_fd[0]);
- ret = ethosu_inference_create(net->edev, net, &uapi);
+ ret = ethosu_inference_create(dev, net->mailbox, net, &uapi);
break;
}
default: {
- dev_err(net->edev->dev, "Invalid ioctl. cmd=%u, arg=%lu",
+ dev_err(dev, "Invalid ioctl. cmd=%u, arg=%lu",
cmd, arg);
break;
}
}
- mutex_unlock(&net->edev->mutex);
+ device_unlock(net->dev);
return ret;
}
-int ethosu_network_create(struct ethosu_device *edev,
+int ethosu_network_create(struct device *dev,
+ struct ethosu_mailbox *mailbox,
struct ethosu_uapi_network_create *uapi)
{
struct ethosu_network *net;
int ret = -ENOMEM;
- net = devm_kzalloc(edev->dev, sizeof(*net), GFP_KERNEL);
+ net = devm_kzalloc(dev, sizeof(*net), GFP_KERNEL);
if (!net)
return -ENOMEM;
- net->edev = edev;
+ net->dev = dev;
+ net->mailbox = mailbox;
net->buf = NULL;
kref_init(&net->kref);
@@ -180,7 +187,7 @@ int ethosu_network_create(struct ethosu_device *edev,
net->file = fget(ret);
fput(net->file);
- dev_info(edev->dev,
+ dev_info(dev,
"Network create. file=0x%pK, fd=%d, net=0x%pK, buf=0x%pK, index=%u",
net->file, ret, net, net->buf, net->index);
@@ -191,7 +198,7 @@ put_buf:
ethosu_buffer_put(net->buf);
free_net:
- devm_kfree(edev->dev, net);
+ devm_kfree(dev, net);
return ret;
}