* [PATCH v5 0/4] Add support for gdsp remoteproc on sa8775p
@ 2025-07-02 2:53 Ling Xu
2025-07-02 2:53 ` [PATCH v5 1/4] dt-bindings: misc: qcom,fastrpc: Add GDSP label Ling Xu
` (3 more replies)
0 siblings, 4 replies; 9+ messages in thread
From: Ling Xu @ 2025-07-02 2:53 UTC (permalink / raw)
To: srini, amahesh, robh, krzk+dt, conor+dt, andersson, konradybcio,
arnd, gregkh
Cc: quic_kuiw, ekansh.gupta, devicetree, linux-arm-msm, dri-devel,
linux-kernel, Ling Xu
The fastrpc driver has support for 5 types of remoteprocs. There are
some products which support GDSP remoteprocs. GDSP is General Purpose
DSP where tasks can be offloaded. Add fastrpc nodes and task offload
support for GDSP. Also strict domain IDs for domain.
Patch [v4]: https://lore.kernel.org/linux-arm-msm/20250627103319.2883613-1-quic_lxu5@quicinc.com/
Changes in v5:
- Edit commit message and add sapce before comment end.
- Move domain definitions back to driver.
Changes in v4:
- Split patch and change to common syntax.
Changes in v3:
- Restrict domain IDs to represent a domain.
Changes in v2:
- Add GPDSP labels in dt-bindings.
Ling Xu (4):
dt-bindings: misc: qcom,fastrpc: Add GDSP label
arm64: dts: qcom: sa8775p: add GDSP fastrpc-compute-cb nodes
misc: fastrpc: Refactor domain ID to enforce strict mapping
misc: fastrpc: add support for gdsp remoteproc
.../bindings/misc/qcom,fastrpc.yaml | 2 +
arch/arm64/boot/dts/qcom/sa8775p.dtsi | 57 +++++++++++++++++++
drivers/misc/fastrpc.c | 55 +++++++++---------
include/uapi/misc/fastrpc.h | 2 +-
4 files changed, 86 insertions(+), 30 deletions(-)
--
2.34.1
^ permalink raw reply [flat|nested] 9+ messages in thread* [PATCH v5 1/4] dt-bindings: misc: qcom,fastrpc: Add GDSP label 2025-07-02 2:53 [PATCH v5 0/4] Add support for gdsp remoteproc on sa8775p Ling Xu @ 2025-07-02 2:53 ` Ling Xu 2025-07-03 7:20 ` Krzysztof Kozlowski 2025-07-02 2:53 ` [PATCH v5 2/4] arm64: dts: qcom: sa8775p: add GDSP fastrpc-compute-cb nodes Ling Xu ` (2 subsequent siblings) 3 siblings, 1 reply; 9+ messages in thread From: Ling Xu @ 2025-07-02 2:53 UTC (permalink / raw) To: srini, amahesh, robh, krzk+dt, conor+dt, andersson, konradybcio, arnd, gregkh Cc: quic_kuiw, ekansh.gupta, devicetree, linux-arm-msm, dri-devel, linux-kernel, Ling Xu There are some products which support GDSP remoteprocs. GDSP is General Purpose DSP where tasks can be offloaded. There are 2 GDSPs named gdsp0 and gdsp1. Add "gdsp0" and "gdsp1" as the new supported labels for GDSP fastrpc domains. Signed-off-by: Ling Xu <quic_lxu5@quicinc.com> --- Documentation/devicetree/bindings/misc/qcom,fastrpc.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Documentation/devicetree/bindings/misc/qcom,fastrpc.yaml b/Documentation/devicetree/bindings/misc/qcom,fastrpc.yaml index 0840a3d92513..3f6199fc9ae6 100644 --- a/Documentation/devicetree/bindings/misc/qcom,fastrpc.yaml +++ b/Documentation/devicetree/bindings/misc/qcom,fastrpc.yaml @@ -27,6 +27,8 @@ properties: - sdsp - cdsp - cdsp1 + - gdsp0 + - gdsp1 memory-region: maxItems: 1 -- 2.34.1 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH v5 1/4] dt-bindings: misc: qcom,fastrpc: Add GDSP label 2025-07-02 2:53 ` [PATCH v5 1/4] dt-bindings: misc: qcom,fastrpc: Add GDSP label Ling Xu @ 2025-07-03 7:20 ` Krzysztof Kozlowski 0 siblings, 0 replies; 9+ messages in thread From: Krzysztof Kozlowski @ 2025-07-03 7:20 UTC (permalink / raw) To: Ling Xu Cc: srini, amahesh, robh, krzk+dt, conor+dt, andersson, konradybcio, arnd, gregkh, quic_kuiw, ekansh.gupta, devicetree, linux-arm-msm, dri-devel, linux-kernel On Wed, Jul 02, 2025 at 08:23:38AM +0530, Ling Xu wrote: > There are some products which support GDSP remoteprocs. GDSP is General > Purpose DSP where tasks can be offloaded. There are 2 GDSPs named gdsp0 > and gdsp1. Add "gdsp0" and "gdsp1" as the new supported labels for GDSP > fastrpc domains. > > Signed-off-by: Ling Xu <quic_lxu5@quicinc.com> > --- > Documentation/devicetree/bindings/misc/qcom,fastrpc.yaml | 2 ++ > 1 file changed, 2 insertions(+) Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> Best regards, Krzysztof ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH v5 2/4] arm64: dts: qcom: sa8775p: add GDSP fastrpc-compute-cb nodes 2025-07-02 2:53 [PATCH v5 0/4] Add support for gdsp remoteproc on sa8775p Ling Xu 2025-07-02 2:53 ` [PATCH v5 1/4] dt-bindings: misc: qcom,fastrpc: Add GDSP label Ling Xu @ 2025-07-02 2:53 ` Ling Xu 2025-07-02 2:53 ` [PATCH v5 3/4] misc: fastrpc: Refactor domain ID to enforce strict mapping Ling Xu 2025-07-02 2:53 ` [PATCH v5 4/4] misc: fastrpc: add support for gdsp remoteproc Ling Xu 3 siblings, 0 replies; 9+ messages in thread From: Ling Xu @ 2025-07-02 2:53 UTC (permalink / raw) To: srini, amahesh, robh, krzk+dt, conor+dt, andersson, konradybcio, arnd, gregkh Cc: quic_kuiw, ekansh.gupta, devicetree, linux-arm-msm, dri-devel, linux-kernel, Ling Xu, Dmitry Baryshkov, Konrad Dybcio Add GDSP0 and GDSP1 fastrpc compute-cb nodes for sa8775p SoC. Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com> Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com> Signed-off-by: Ling Xu <quic_lxu5@quicinc.com> --- arch/arm64/boot/dts/qcom/sa8775p.dtsi | 57 +++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) diff --git a/arch/arm64/boot/dts/qcom/sa8775p.dtsi b/arch/arm64/boot/dts/qcom/sa8775p.dtsi index fed34717460f..5ebc058931ad 100644 --- a/arch/arm64/boot/dts/qcom/sa8775p.dtsi +++ b/arch/arm64/boot/dts/qcom/sa8775p.dtsi @@ -6080,6 +6080,34 @@ IPCC_MPROC_SIGNAL_GLINK_QMP label = "gpdsp0"; qcom,remote-pid = <17>; + + fastrpc { + compatible = "qcom,fastrpc"; + qcom,glink-channels = "fastrpcglink-apps-dsp"; + label = "gdsp0"; + #address-cells = <1>; + #size-cells = <0>; + + compute-cb@1 { + compatible = "qcom,fastrpc-compute-cb"; + reg = <1>; + iommus = <&apps_smmu 0x38a1 0x0>; + dma-coherent; + }; + + compute-cb@2 { + compatible = "qcom,fastrpc-compute-cb"; + reg = <2>; + iommus = <&apps_smmu 0x38a2 0x0>; + dma-coherent; + }; + compute-cb@3 { + compatible = "qcom,fastrpc-compute-cb"; + reg = <3>; + iommus = <&apps_smmu 0x38a3 0x0>; + dma-coherent; + }; + }; }; }; @@ -6123,6 +6151,35 @@ IPCC_MPROC_SIGNAL_GLINK_QMP label = "gpdsp1"; qcom,remote-pid = <18>; + + fastrpc { + compatible = "qcom,fastrpc"; + qcom,glink-channels = "fastrpcglink-apps-dsp"; + label = "gdsp1"; + #address-cells = <1>; + #size-cells = <0>; + + compute-cb@1 { + compatible = "qcom,fastrpc-compute-cb"; + reg = <1>; + iommus = <&apps_smmu 0x38c1 0x0>; + dma-coherent; + }; + + compute-cb@2 { + compatible = "qcom,fastrpc-compute-cb"; + reg = <2>; + iommus = <&apps_smmu 0x38c2 0x0>; + dma-coherent; + }; + + compute-cb@3 { + compatible = "qcom,fastrpc-compute-cb"; + reg = <3>; + iommus = <&apps_smmu 0x38c3 0x0>; + dma-coherent; + }; + }; }; }; -- 2.34.1 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH v5 3/4] misc: fastrpc: Refactor domain ID to enforce strict mapping 2025-07-02 2:53 [PATCH v5 0/4] Add support for gdsp remoteproc on sa8775p Ling Xu 2025-07-02 2:53 ` [PATCH v5 1/4] dt-bindings: misc: qcom,fastrpc: Add GDSP label Ling Xu 2025-07-02 2:53 ` [PATCH v5 2/4] arm64: dts: qcom: sa8775p: add GDSP fastrpc-compute-cb nodes Ling Xu @ 2025-07-02 2:53 ` Ling Xu 2025-07-04 16:54 ` Dmitry Baryshkov 2025-07-02 2:53 ` [PATCH v5 4/4] misc: fastrpc: add support for gdsp remoteproc Ling Xu 3 siblings, 1 reply; 9+ messages in thread From: Ling Xu @ 2025-07-02 2:53 UTC (permalink / raw) To: srini, amahesh, robh, krzk+dt, conor+dt, andersson, konradybcio, arnd, gregkh Cc: quic_kuiw, ekansh.gupta, devicetree, linux-arm-msm, dri-devel, linux-kernel, Ling Xu, Srinivas Kandagatla Currently, domain ids are added for each instance, which is not scalable. Strict domain IDs for domain. Co-developed-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org> Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org> Signed-off-by: Ling Xu <quic_lxu5@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 #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 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH v5 3/4] misc: fastrpc: Refactor domain ID to enforce strict mapping 2025-07-02 2:53 ` [PATCH v5 3/4] misc: fastrpc: Refactor domain ID to enforce strict mapping Ling Xu @ 2025-07-04 16:54 ` Dmitry Baryshkov 2025-07-08 13:05 ` Ling Xu 0 siblings, 1 reply; 9+ messages in thread From: Dmitry Baryshkov @ 2025-07-04 16:54 UTC (permalink / raw) To: Ling Xu Cc: srini, amahesh, robh, krzk+dt, conor+dt, andersson, konradybcio, arnd, gregkh, quic_kuiw, ekansh.gupta, devicetree, linux-arm-msm, dri-devel, linux-kernel, Srinivas Kandagatla 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@linaro.org> > Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org> > Signed-off-by: Ling Xu <quic_lxu5@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 ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v5 3/4] misc: fastrpc: Refactor domain ID to enforce strict mapping 2025-07-04 16:54 ` Dmitry Baryshkov @ 2025-07-08 13:05 ` Ling Xu 0 siblings, 0 replies; 9+ messages in thread From: Ling Xu @ 2025-07-08 13:05 UTC (permalink / raw) To: Dmitry Baryshkov Cc: srini, amahesh, robh, krzk+dt, conor+dt, andersson, konradybcio, arnd, gregkh, quic_kuiw, ekansh.gupta, devicetree, linux-arm-msm, dri-devel, linux-kernel, Srinivas Kandagatla 在 7/5/2025 12:54 AM, Dmitry Baryshkov 写道: > 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? Currently the domain ids are added for each instance of domain, like we defined 3 for cdsp and 4 for cdsp1, but driver doesn't care about the instance id.Domain ids are strictly for a domain not each instance. I will change the title and commit meassage as Srinis suggested in next patch. misc: fastrpc: cleanup the domain names Currently the domain ids are added for each instance of domain, this is totally not scalable approach. Clean this mess and create domain ids for only domains not its instances. > >> >> Co-developed-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org> >> Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org> >> Signed-off-by: Ling Xu <quic_lxu5@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 will delete above line. > >> #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 thanks will change to _u32 unused; > >> __u32 attribute_id; >> __u32 capability; /* dsp capability */ >> __u32 reserved[4]; >> -- >> 2.34.1 >> > -- Thx and BRs, Ling Xu ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH v5 4/4] misc: fastrpc: add support for gdsp remoteproc 2025-07-02 2:53 [PATCH v5 0/4] Add support for gdsp remoteproc on sa8775p Ling Xu ` (2 preceding siblings ...) 2025-07-02 2:53 ` [PATCH v5 3/4] misc: fastrpc: Refactor domain ID to enforce strict mapping Ling Xu @ 2025-07-02 2:53 ` Ling Xu 2025-07-04 16:55 ` Dmitry Baryshkov 3 siblings, 1 reply; 9+ messages in thread From: Ling Xu @ 2025-07-02 2:53 UTC (permalink / raw) To: srini, amahesh, robh, krzk+dt, conor+dt, andersson, konradybcio, arnd, gregkh Cc: quic_kuiw, ekansh.gupta, devicetree, linux-arm-msm, dri-devel, linux-kernel, Ling Xu The fastrpc driver has support for 5 types of remoteprocs. There are some products which support GDSP remoteprocs. GDSP is General Purpose DSP where tasks can be offloaded. This patch extends the driver to support GDSP remoteprocs. Signed-off-by: Ling Xu <quic_lxu5@quicinc.com> --- drivers/misc/fastrpc.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/drivers/misc/fastrpc.c b/drivers/misc/fastrpc.c index 441f5851eb97..2d2242d28d01 100644 --- a/drivers/misc/fastrpc.c +++ b/drivers/misc/fastrpc.c @@ -27,7 +27,8 @@ #define MDSP_DOMAIN_ID (1) #define SDSP_DOMAIN_ID (2) #define CDSP_DOMAIN_ID (3) -#define FASTRPC_DOMAIN_MAX CDSP_DOMAIN_ID +#define GDSP_DOMAIN_ID (4) +#define FASTRPC_DOMAIN_MAX GDSP_DOMAIN_ID #define FASTRPC_MAX_SESSIONS 14 #define FASTRPC_MAX_VMIDS 16 #define FASTRPC_ALIGN 128 @@ -2250,6 +2251,8 @@ static int fastrpc_get_domain_id(const char *domain) return MDSP_DOMAIN_ID; else if (!strncmp(domain, "sdsp", 4)) return SDSP_DOMAIN_ID; + else if (!strncmp(domain, "gdsp", 4)) + return GDSP_DOMAIN_ID; return -EINVAL; } @@ -2324,13 +2327,14 @@ 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 */ + /* Unsigned PD offloading is only supported on CDSP and GDSP */ data->unsigned_support = false; err = fastrpc_device_register(rdev, data, secure_dsp, domain); if (err) goto err_free_data; break; case CDSP_DOMAIN_ID: + case GDSP_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, domain); -- 2.34.1 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH v5 4/4] misc: fastrpc: add support for gdsp remoteproc 2025-07-02 2:53 ` [PATCH v5 4/4] misc: fastrpc: add support for gdsp remoteproc Ling Xu @ 2025-07-04 16:55 ` Dmitry Baryshkov 0 siblings, 0 replies; 9+ messages in thread From: Dmitry Baryshkov @ 2025-07-04 16:55 UTC (permalink / raw) To: Ling Xu Cc: srini, amahesh, robh, krzk+dt, conor+dt, andersson, konradybcio, arnd, gregkh, quic_kuiw, ekansh.gupta, devicetree, linux-arm-msm, dri-devel, linux-kernel On Wed, Jul 02, 2025 at 08:23:41AM +0530, Ling Xu wrote: > The fastrpc driver has support for 5 types of remoteprocs. There are > some products which support GDSP remoteprocs. GDSP is General Purpose > DSP where tasks can be offloaded. This patch extends the driver to > support GDSP remoteprocs. Please read Documentation/process/submitting-patches.rst, look for "This patch". The patch looks good to me. > > Signed-off-by: Ling Xu <quic_lxu5@quicinc.com> > --- > drivers/misc/fastrpc.c | 8 ++++++-- > 1 file changed, 6 insertions(+), 2 deletions(-) > -- With best wishes Dmitry ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2025-07-08 13:05 UTC | newest] Thread overview: 9+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2025-07-02 2:53 [PATCH v5 0/4] Add support for gdsp remoteproc on sa8775p Ling Xu 2025-07-02 2:53 ` [PATCH v5 1/4] dt-bindings: misc: qcom,fastrpc: Add GDSP label Ling Xu 2025-07-03 7:20 ` Krzysztof Kozlowski 2025-07-02 2:53 ` [PATCH v5 2/4] arm64: dts: qcom: sa8775p: add GDSP fastrpc-compute-cb nodes Ling Xu 2025-07-02 2:53 ` [PATCH v5 3/4] misc: fastrpc: Refactor domain ID to enforce strict mapping Ling Xu 2025-07-04 16:54 ` Dmitry Baryshkov 2025-07-08 13:05 ` Ling Xu 2025-07-02 2:53 ` [PATCH v5 4/4] misc: fastrpc: add support for gdsp remoteproc Ling Xu 2025-07-04 16:55 ` Dmitry Baryshkov
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox