[PATCH v14 10/44] arm64: RMI: Add support for SRO
Aneesh Kumar K.V
aneesh.kumar at kernel.org
Thu May 14 01:01:08 PDT 2026
Steven Price <steven.price at arm.com> writes:
> +unsigned long rmi_sro_execute(struct rmi_sro_state *sro, gfp_t gfp)
> +{
> + unsigned long sro_handle;
> + struct arm_smccc_1_2_regs regs;
> + struct arm_smccc_1_2_regs *regs_in = &sro->regs;
> +
> + rmi_smccc_invoke(regs_in, ®s);
> +
> + sro_handle = regs.a1;
> +
> + while (RMI_RETURN_STATUS(regs.a0) == RMI_INCOMPLETE) {
> + bool can_cancel = RMI_RETURN_CAN_CANCEL(regs.a0);
> + int ret;
> +
> + switch (RMI_RETURN_MEMREQ(regs.a0)) {
> + case RMI_OP_MEM_REQ_NONE:
> + regs = (struct arm_smccc_1_2_regs){
> + SMC_RMI_OP_CONTINUE, sro_handle, 0
> + };
> + rmi_smccc_invoke(®s, ®s);
> + break;
> + case RMI_OP_MEM_REQ_DONATE:
> + ret = rmi_sro_donate(sro, sro_handle, regs.a2, ®s,
> + gfp);
> + break;
> + case RMI_OP_MEM_REQ_RECLAIM:
> + ret = rmi_sro_reclaim(sro, sro_handle, ®s);
> + break;
> + default:
> + ret = WARN_ON(1);
> + break;
> + }
> +
> + if (ret) {
> + if (can_cancel) {
> + /*
> + * FIXME: Handle cancelling properly!
> + *
> + * If the operation has failed due to memory
> + * allocation failure then the information on
> + * the memory allocation should be saved, so
> + * that the allocation can be repeated outside
> + * of any context which prevented the
> + * allocation.
> + */
> + }
> + if (WARN_ON(ret))
> + return ret;
> + }
> + }
> +
> + return regs.a0;
> +}
Can you also add support to return x1,x2 etc
This would help things like
static int rmi_rtt_dev_unmap(unsigned long rd_phys,
unsigned long base, unsigned long top,
unsigned long *out_ipa, unsigned long *out_desc,
unsigned long *rmi_ret)
{
unsigned long flags = RMI_ADDR_TYPE_SINGLE;
struct rmi_sro_state *sro __free(sro) =
rmi_sro_init(SMC_RMI_RTT_DEV_UNMAP, rd_phys, base, top, flags, NULL);
if (!sro)
return -ENOMEM;
*rmi_ret = rmi_sro_execute(sro);
if (*rmi_ret)
return 0;
*out_ipa = sro->regs.a1;
*out_desc = sro->regs.a2;
return 0;
}
-aneesh
More information about the linux-arm-kernel
mailing list