[PATCH v5 3/4] misc: fastrpc: Refactor domain ID to enforce strict mapping
Dmitry Baryshkov
dmitry.baryshkov at oss.qualcomm.com
Fri Jul 4 16:54:06 UTC 2025
On Wed, Jul 02, 2025 at 08:23:40AM +0530, Ling Xu wrote:
> Currently, domain ids are added for each instance, which is not scalable.
> Strict domain IDs for domain.
What does this mean?
>
> Co-developed-by: Srinivas Kandagatla <srinivas.kandagatla at linaro.org>
> Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla at linaro.org>
> Signed-off-by: Ling Xu <quic_lxu5 at quicinc.com>
> ---
> 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
Unused
> #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 */
reserved1 or unused
> __u32 attribute_id;
> __u32 capability; /* dsp capability */
> __u32 reserved[4];
> --
> 2.34.1
>
--
With best wishes
Dmitry
More information about the dri-devel
mailing list