Currently, domain ids are added for each instance, which is not scalable.
Strict domain IDs for domain.

Co-developed-by: Srinivas Kandagatla <[email protected]>
Signed-off-by: Srinivas Kandagatla <[email protected]>
Signed-off-by: Ling Xu <[email protected]>
---
 drivers/misc/fastrpc.c      | 51 ++++++++++++++++---------------------
 include/uapi/misc/fastrpc.h |  2 +-
 2 files changed, 23 insertions(+), 30 deletions(-)

diff --git a/drivers/misc/fastrpc.c b/drivers/misc/fastrpc.c
index 378923594f02..441f5851eb97 100644
--- a/drivers/misc/fastrpc.c
+++ b/drivers/misc/fastrpc.c
@@ -27,8 +27,7 @@
 #define MDSP_DOMAIN_ID (1)
 #define SDSP_DOMAIN_ID (2)
 #define CDSP_DOMAIN_ID (3)
-#define CDSP1_DOMAIN_ID (4)
-#define FASTRPC_DEV_MAX                5 /* adsp, mdsp, slpi, cdsp, cdsp1 */
+#define FASTRPC_DOMAIN_MAX    CDSP_DOMAIN_ID
 #define FASTRPC_MAX_SESSIONS   14
 #define FASTRPC_MAX_VMIDS      16
 #define FASTRPC_ALIGN          128
@@ -106,8 +105,6 @@
 
 #define miscdev_to_fdevice(d) container_of(d, struct fastrpc_device, miscdev)
 
-static const char *domains[FASTRPC_DEV_MAX] = { "adsp", "mdsp",
-                                               "sdsp", "cdsp", "cdsp1" };
 struct fastrpc_phy_page {
        u64 addr;               /* physical address */
        u64 size;               /* size of contiguous region */
@@ -1723,7 +1720,6 @@ static int fastrpc_get_info_from_kernel(struct 
fastrpc_ioctl_capability *cap,
        uint32_t attribute_id = cap->attribute_id;
        uint32_t *dsp_attributes;
        unsigned long flags;
-       uint32_t domain = cap->domain;
        int err;
 
        spin_lock_irqsave(&cctx->lock, flags);
@@ -1741,7 +1737,7 @@ static int fastrpc_get_info_from_kernel(struct 
fastrpc_ioctl_capability *cap,
        err = fastrpc_get_info_from_dsp(fl, dsp_attributes, 
FASTRPC_MAX_DSP_ATTRIBUTES);
        if (err == DSP_UNSUPPORTED_API) {
                dev_info(&cctx->rpdev->dev,
-                        "Warning: DSP capabilities not supported on domain: 
%d\n", domain);
+                        "Warning: DSP capabilities not supported\n");
                kfree(dsp_attributes);
                return -EOPNOTSUPP;
        } else if (err) {
@@ -1769,17 +1765,6 @@ static int fastrpc_get_dsp_info(struct fastrpc_user *fl, 
char __user *argp)
                return  -EFAULT;
 
        cap.capability = 0;
-       if (cap.domain >= FASTRPC_DEV_MAX) {
-               dev_err(&fl->cctx->rpdev->dev, "Error: Invalid domain id:%d, 
err:%d\n",
-                       cap.domain, err);
-               return -ECHRNG;
-       }
-
-       /* Fastrpc Capablities does not support modem domain */
-       if (cap.domain == MDSP_DOMAIN_ID) {
-               dev_err(&fl->cctx->rpdev->dev, "Error: modem not supported 
%d\n", err);
-               return -ECHRNG;
-       }
 
        if (cap.attribute_id >= FASTRPC_MAX_DSP_ATTRIBUTES) {
                dev_err(&fl->cctx->rpdev->dev, "Error: invalid attribute: %d, 
err: %d\n",
@@ -2255,6 +2240,20 @@ static int fastrpc_device_register(struct device *dev, 
struct fastrpc_channel_ct
        return err;
 }
 
+static int fastrpc_get_domain_id(const char *domain)
+{
+       if (!strncmp(domain, "adsp", 4))
+               return ADSP_DOMAIN_ID;
+       else if (!strncmp(domain, "cdsp", 4))
+               return CDSP_DOMAIN_ID;
+       else if (!strncmp(domain, "mdsp", 4))
+               return MDSP_DOMAIN_ID;
+       else if (!strncmp(domain, "sdsp", 4))
+               return SDSP_DOMAIN_ID;
+
+       return -EINVAL;
+}
+
 static int fastrpc_rpmsg_probe(struct rpmsg_device *rpdev)
 {
        struct device *rdev = &rpdev->dev;
@@ -2272,15 +2271,10 @@ static int fastrpc_rpmsg_probe(struct rpmsg_device 
*rpdev)
                return err;
        }
 
-       for (i = 0; i < FASTRPC_DEV_MAX; i++) {
-               if (!strcmp(domains[i], domain)) {
-                       domain_id = i;
-                       break;
-               }
-       }
+       domain_id = fastrpc_get_domain_id(domain);
 
        if (domain_id < 0) {
-               dev_info(rdev, "FastRPC Invalid Domain ID %d\n", domain_id);
+               dev_info(rdev, "FastRPC Domain %s not supported\n", domain);
                return -EINVAL;
        }
 
@@ -2330,21 +2324,20 @@ static int fastrpc_rpmsg_probe(struct rpmsg_device 
*rpdev)
        case ADSP_DOMAIN_ID:
        case MDSP_DOMAIN_ID:
        case SDSP_DOMAIN_ID:
-               /* Unsigned PD offloading is only supported on CDSP and CDSP1 */
+               /* Unsigned PD offloading is only supported on CDSP */
                data->unsigned_support = false;
-               err = fastrpc_device_register(rdev, data, secure_dsp, 
domains[domain_id]);
+               err = fastrpc_device_register(rdev, data, secure_dsp, domain);
                if (err)
                        goto err_free_data;
                break;
        case CDSP_DOMAIN_ID:
-       case CDSP1_DOMAIN_ID:
                data->unsigned_support = true;
                /* Create both device nodes so that we can allow both Signed 
and Unsigned PD */
-               err = fastrpc_device_register(rdev, data, true, 
domains[domain_id]);
+               err = fastrpc_device_register(rdev, data, true, domain);
                if (err)
                        goto err_free_data;
 
-               err = fastrpc_device_register(rdev, data, false, 
domains[domain_id]);
+               err = fastrpc_device_register(rdev, data, false, domain);
                if (err)
                        goto err_deregister_fdev;
                break;
diff --git a/include/uapi/misc/fastrpc.h b/include/uapi/misc/fastrpc.h
index f33d914d8f46..27b892b546f6 100644
--- a/include/uapi/misc/fastrpc.h
+++ b/include/uapi/misc/fastrpc.h
@@ -134,7 +134,7 @@ struct fastrpc_mem_unmap {
 };
 
 struct fastrpc_ioctl_capability {
-       __u32 domain;
+       __u32 domain; /* deprecated, ignored by the kernel */
        __u32 attribute_id;
        __u32 capability;   /* dsp capability */
        __u32 reserved[4];
-- 
2.34.1

Reply via email to