[PATCH v20 4/9] firmware: arm_rmm: Add support for SRO

Catalin Marinas catalin.marinas at arm.com
Wed Sep 30 06:15:00 PDT 2026


On Tue, Sep 29, 2026 at 11:16:18PM +0100, Suzuki K Poulose wrote:
> +static int rmi_sro_donate_contig(struct rmi_sro_state *sro,
> +				 unsigned long sro_handle,
> +				 unsigned long donatereq,
> +				 struct arm_smccc_1_2_regs *out_regs,
> +				 gfp_t gfp)
> +{
> +	unsigned long block_size_fld = RMI_DONATE_BLOCK_SIZE(donatereq);
> +	unsigned long block_size = rmi_addr_block_size_to_bytes(block_size_fld);
> +	unsigned long count = RMI_DONATE_COUNT(donatereq);
> +	unsigned long state = RMI_DONATE_STATE(donatereq);
> +	unsigned long size = block_size * count;
> +	unsigned long addr_range;
> +	unsigned long donated_size;
> +	int ret;
> +	void *virt;
> +	phys_addr_t phys;
> +
> +	/*
> +	 * The RMM specification requires contiguous allocations are always a
> +	 * power of 2
> +	 */
> +	if (WARN_ON_ONCE(!is_power_of_2(size)))
> +		return -EINVAL;
> +	/*
> +	 * RMM clamps the Maximum value of RmiOpMemDonateReq:count to prevent
> +	 * overflow in the RMI_ADDR_RANGE_COUNT field.
> +	 */
> +	if (WARN_ON_ONCE(count > (BIT(PAGE_SHIFT - 2) - 1)))
> +		return -EINVAL;

Nit: it might be easier to read as FIELD_MAX(RMI_ADDR_RANGE_COUNT_MASK)
as that's what we want to limit it to.

Reviewed-by: Catalin Marinas <catalin.marinas at arm.com>

(Sashiko seems to have more findings but the rest looks alright to me)



More information about the linux-arm-kernel mailing list