[PATCH v17 4/7] firmware: arm_rmm: Add support for SRO

Suzuki K Poulose suzuki.poulose at arm.com
Fri Sep 11 08:29:17 PDT 2026


On 10/09/2026 10:51, Suzuki K Poulose wrote:
> Hi Gavin
> 
> Thank you for the the review, much appreciated. Responses inline.
> 
> 
> On 09/09/2026 05:10, Gavin Shan wrote:
>> Hi Suzuki,
>
>>
>>> +
>>> +    sro->addr_count = 0;
>>> +}
>>> +EXPORT_SYMBOL_GPL(rmi_sro_free);
>>> +
>>> +long rmi_sro_memxfer_execute(struct rmi_sro_state *sro, gfp_t gfp)
>>> +{
>>> +    unsigned long sro_handle;
>>> +    struct arm_smccc_1_2_regs *regs = &sro->regs;
>>> +    bool cancelled = false;
>>> +
>>> +    rmi_smccc_invoke(regs, regs);
>>> +
>>> +    sro_handle = regs->a1;
>>> +
>>> +    while (RMI_RETURN_STATUS(regs->a0) == RMI_INCOMPLETE) {
>>> +        bool can_cancel = RMI_RETURN_CAN_CANCEL(regs->a0);
>>> +        int ret = 0;
>>> +
>>
>> Strictly speaking, we need to refresh the SRO handle after every RMI 
>> call.
>>
>>          bool can_cancel = RMI_RETURN_CAN_CANCEL(regs->a0);
>>          unsigned long sro_handle = regs->a1;
>>          int ret = 0;
>>
> 
> Ack for both instances

This is not correct. e.g., after RMI_OP_MEM_DONATE and 
RMI_OP_MEM_RECLAIM, the regs->a1 is the number of granules consumed or 
reclaimed. The SRO handle once provided by an SRO triggering operation,
is invalidated by the RMI_OP_CONTINUE() running to completion.
i.e., RMI_OP_CONTINUE either completes with RMI_SUCCESS

OR

completes with a status other than RMI_BUSY or RMI_INCOMPLETE.

Thanks
Suzuki



More information about the linux-arm-kernel mailing list