forked from Mirrors/opensbi
		
	lib: sbi: Add sbi_domain_root_add_memrange() API
This patch generalizes the logic to add a memory range with desired alignment and flags of consecutive regions to the root domain. Signed-off-by: Yu Chien Peter Lin <peterlin@andestech.com> Reviewed-by: Anup Patel <anup@brainfault.org>
This commit is contained in:
		
				
					committed by
					
						
						Anup Patel
					
				
			
			
				
	
			
			
			
						parent
						
							60b78fee92
						
					
				
				
					commit
					dcdaf30274
				
			@@ -522,6 +522,33 @@ int sbi_domain_root_add_memregion(const struct sbi_domain_memregion *reg)
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int sbi_domain_root_add_memrange(unsigned long addr, unsigned long size,
 | 
			
		||||
			   unsigned long align, unsigned long region_flags)
 | 
			
		||||
{
 | 
			
		||||
	int rc;
 | 
			
		||||
	unsigned long pos, end, rsize;
 | 
			
		||||
	struct sbi_domain_memregion reg;
 | 
			
		||||
 | 
			
		||||
	pos = addr;
 | 
			
		||||
	end = addr + size;
 | 
			
		||||
	while (pos < end) {
 | 
			
		||||
		rsize = pos & (align - 1);
 | 
			
		||||
		if (rsize)
 | 
			
		||||
			rsize = 1UL << sbi_ffs(pos);
 | 
			
		||||
		else
 | 
			
		||||
			rsize = ((end - pos) < align) ?
 | 
			
		||||
				(end - pos) : align;
 | 
			
		||||
 | 
			
		||||
		sbi_domain_memregion_init(pos, rsize, region_flags, ®);
 | 
			
		||||
		rc = sbi_domain_root_add_memregion(®);
 | 
			
		||||
		if (rc)
 | 
			
		||||
			return rc;
 | 
			
		||||
		pos += rsize;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int sbi_domain_finalize(struct sbi_scratch *scratch, u32 cold_hartid)
 | 
			
		||||
{
 | 
			
		||||
	int rc;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user