forked from Mirrors/opensbi
		
	lib: sbi: Use finer permission sematics to decide on PMP bits
Use the fine grained permission bits to decide if the region permissions are to be enforced on all modes. Also use the new permission bits for deciding on R/W/X bits in pmpcfg register. Signed-off-by: Himanshu Chauhan <hchauhan@ventanamicro.com> Reviewed-by: Anup Patel <anup@brainfault.org> Tested-by: Anup Patel <anup@brainfault.org>
This commit is contained in:
		
				
					committed by
					
						
						Anup Patel
					
				
			
			
				
	
			
			
			
						parent
						
							22dbdb3d60
						
					
				
				
					commit
					1ac14f10f6
				
			@@ -303,15 +303,21 @@ int sbi_hart_pmp_configure(struct sbi_scratch *scratch)
 | 
			
		||||
			break;
 | 
			
		||||
 | 
			
		||||
		pmp_flags = 0;
 | 
			
		||||
		if (reg->flags & SBI_DOMAIN_MEMREGION_READABLE)
 | 
			
		||||
			pmp_flags |= PMP_R;
 | 
			
		||||
		if (reg->flags & SBI_DOMAIN_MEMREGION_WRITEABLE)
 | 
			
		||||
			pmp_flags |= PMP_W;
 | 
			
		||||
		if (reg->flags & SBI_DOMAIN_MEMREGION_EXECUTABLE)
 | 
			
		||||
			pmp_flags |= PMP_X;
 | 
			
		||||
		if (reg->flags & SBI_DOMAIN_MEMREGION_MMODE)
 | 
			
		||||
 | 
			
		||||
		/*
 | 
			
		||||
		 * If permissions are to be enforced for all modes on this
 | 
			
		||||
		 * region, the lock bit should be set.
 | 
			
		||||
		 */
 | 
			
		||||
		if (reg->flags & SBI_DOMAIN_MEMREGION_ENF_PERMISSIONS)
 | 
			
		||||
			pmp_flags |= PMP_L;
 | 
			
		||||
 | 
			
		||||
		if (reg->flags & SBI_DOMAIN_MEMREGION_SU_READABLE)
 | 
			
		||||
			pmp_flags |= PMP_R;
 | 
			
		||||
		if (reg->flags & SBI_DOMAIN_MEMREGION_SU_WRITABLE)
 | 
			
		||||
			pmp_flags |= PMP_W;
 | 
			
		||||
		if (reg->flags & SBI_DOMAIN_MEMREGION_SU_EXECUTABLE)
 | 
			
		||||
			pmp_flags |= PMP_X;
 | 
			
		||||
 | 
			
		||||
		pmp_addr =  reg->base >> PMP_SHIFT;
 | 
			
		||||
		if (pmp_gran_log2 <= reg->order && pmp_addr < pmp_addr_max)
 | 
			
		||||
			pmp_set(pmp_idx++, pmp_flags, reg->base, reg->order);
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user