diff options
-rw-r--r-- | kernel/ethosu_device.c | 25 | ||||
-rw-r--r-- | kernel/ethosu_device.h | 13 |
2 files changed, 21 insertions, 17 deletions
diff --git a/kernel/ethosu_device.c b/kernel/ethosu_device.c index e1dde65..0b6fdfa 100644 --- a/kernel/ethosu_device.c +++ b/kernel/ethosu_device.c @@ -264,16 +264,10 @@ static long ethosu_ioctl(struct file *file, ret = ethosu_mailbox_version_request(&edev->mailbox); break; case ETHOSU_IOCTL_CAPABILITIES_REQ: { - struct ethosu_uapi_device_capabilities uapi; + dev_info(dev, "Device ioctl: Capabilities request"); - dev_info(dev, - "Device ioctl: Send capabilities request"); - - ret = ethosu_capabilities_request(dev, &edev->mailbox, &uapi); - if (ret) - break; - - ret = copy_to_user(udata, &uapi, sizeof(uapi)) ? -EFAULT : 0; + ret = copy_to_user(udata, &edev->capabilities, + sizeof(edev->capabilities)) ? -EFAULT : 0; break; } case ETHOSU_IOCTL_PING: { @@ -464,6 +458,17 @@ int ethosu_dev_init(struct rpmsg_device *rpdev, if (ret) goto device_unregister; + ethosu_mailbox_ping(&edev->mailbox); + + device_lock(dev); + ret = ethosu_capabilities_request(dev, &edev->mailbox, + &edev->capabilities); + device_unlock(dev); + if (ret) { + dev_err(dev, "Failed to get device capabilities: %d", ret); + goto deinit_mailbox; + } + /* Create device node */ cdev_init(&edev->cdev, &fops); edev->cdev.owner = THIS_MODULE; @@ -490,8 +495,6 @@ int ethosu_dev_init(struct rpmsg_device *rpdev, "Created Arm Ethos-U device. name=%s, major=%d, minor=%d", dev_name(sysdev), MAJOR(devt), MINOR(devt)); - ethosu_mailbox_ping(&edev->mailbox); - return 0; del_cdev: diff --git a/kernel/ethosu_device.h b/kernel/ethosu_device.h index bcf973d..af14c85 100644 --- a/kernel/ethosu_device.h +++ b/kernel/ethosu_device.h @@ -42,12 +42,13 @@ * struct ethosu_device - Device structure */ struct ethosu_device { - struct device dev; - struct rpmsg_device *rpdev; - struct rpmsg_endpoint *ept; - struct cdev cdev; - struct class *class; - struct ethosu_mailbox mailbox; + struct device dev; + struct rpmsg_device *rpdev; + struct rpmsg_endpoint *ept; + struct cdev cdev; + struct class *class; + struct ethosu_mailbox mailbox; + struct ethosu_uapi_device_capabilities capabilities; }; /**************************************************************************** |