Re: [PATCH v9 4/4] misc: fastrpc: Add polling mode support for fastRPC driver
From: Ekansh Gupta
Date: Thu Apr 23 2026 - 04:37:52 EST
On 22-04-2026 21:17, Dmitry Baryshkov wrote:
> On Wed, Apr 22, 2026 at 02:54:09PM +0530, Ekansh Gupta wrote:
>> For any remote call to DSP, after sending an invocation message,
>> fastRPC driver waits for glink response and during this time the
>> CPU can go into low power modes. This adds latency to overall fastrpc
>> call as CPU wakeup and scheduling latencies are included. Add polling
>> mode support with which fastRPC driver will poll continuously on a
>> memory after sending a message to remote subsystem which will eliminate
>> CPU wakeup and scheduling latencies and reduce fastRPC overhead. In case
>> poll timeout happens, the call will fallback to normal RPC mode. Poll
>> mode can be enabled by user by using FASTRPC_IOCTL_SET_OPTION ioctl
>> request with FASTRPC_POLL_MODE request id.
>>
>> Signed-off-by: Ekansh Gupta <ekansh.gupta@xxxxxxxxxxxxxxxx>
>> ---
>> drivers/misc/fastrpc.c | 148 ++++++++++++++++++++++++++++++++++--
>> include/uapi/misc/fastrpc.h | 25 ++++++
>> 2 files changed, 166 insertions(+), 7 deletions(-)
>>
>> @@ -2331,6 +2446,22 @@ static const struct fastrpc_soc_data default_soc_data = {
>> .dma_addr_bits_default = 32,
>> };
>>
>> +/*
>> + * Older platforms that use default_soc_data but whose DSP firmware
>> + * supports the FastRPC polling mode.
>
> There should be a comment, "don't add more platforms to this list".
What if in future any platform is enabled that is based on older archs,
i.e. doesn't use kaanapali compatible but supports polling mode. In that
case this list might require an addition.
>
>> + */
>> +static const struct of_device_id fastrpc_poll_supported_machines[] __maybe_unused = {
>> + { .compatible = "qcom,qcs8300" },
>> + { .compatible = "qcom,qcs9100" },
>
> Use qcom,sa8775p instead. See sa8775p-ride boards.
> What about qcom,sar2130p?
> qcom,sc8280xp?
> qcom,milos?
I'm checking for these platforms also. Will add if these are supporting
polling mode.
//Ekansh
>
>> + { .compatible = "qcom,sm8450" },
>> + { .compatible = "qcom,sm8550" },
>> + { .compatible = "qcom,sm8650" },
>> + { .compatible = "qcom,sm8750" },
>> + { .compatible = "qcom,x1e80100" },
>> + { .compatible = "qcom,x1p42100" },
>> + {},
>> +};
>> +
>> static int fastrpc_rpmsg_probe(struct rpmsg_device *rpdev)
>> {
>> struct device *rdev = &rpdev->dev;
>