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

Suzuki K Poulose suzuki.poulose at arm.com
Wed Sep 30 06:48:08 PDT 2026


On 30/09/2026 14:15, Catalin Marinas wrote:
> 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.

Thanks, that is neat. I will update this.

> 
> Reviewed-by: Catalin Marinas <catalin.marinas at arm.com>
> 
> (Sashiko seems to have more findings but the rest looks alright to me)

I have updated the code to address the issues.

Thanks Catalin.

Suzuki




More information about the linux-arm-kernel mailing list