forked from Mirrors/opensbi
		
	lib: Factor-out TLB management from IPI management
This patch factor-out TLB management from IPI management to separate sources sbi_tlb.c and sbi_tlb.h. Signed-off-by: Anup Patel <anup.patel@wdc.com> Reviewed-by: Atish Patra <atish.patra@wdc.com>
This commit is contained in:
		@@ -32,9 +32,6 @@
 | 
			
		||||
#define PAGE_SIZE       (_AC(1, UL) << PAGE_SHIFT)
 | 
			
		||||
#define PAGE_MASK       (~(PAGE_SIZE - 1))
 | 
			
		||||
 | 
			
		||||
#define SBI_TLB_FLUSH_ALL	((unsigned long)-1)
 | 
			
		||||
#define SBI_TLB_FLUSH_MAX_SIZE	(1UL << 30)
 | 
			
		||||
 | 
			
		||||
#define REG_L		__REG_SEL(ld, lw)
 | 
			
		||||
#define REG_S		__REG_SEL(sd, sw)
 | 
			
		||||
#define SZREG		__REG_SEL(8, 4)
 | 
			
		||||
 
 | 
			
		||||
@@ -22,28 +22,12 @@
 | 
			
		||||
 | 
			
		||||
/* clang-format on */
 | 
			
		||||
 | 
			
		||||
#define SBI_TLB_FIFO_NUM_ENTRIES 4
 | 
			
		||||
enum sbi_tlb_info_types {
 | 
			
		||||
	SBI_TLB_FLUSH_VMA,
 | 
			
		||||
	SBI_TLB_FLUSH_VMA_ASID,
 | 
			
		||||
	SBI_TLB_FLUSH_VMA_VMID
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct sbi_scratch;
 | 
			
		||||
 | 
			
		||||
struct sbi_ipi_data {
 | 
			
		||||
	unsigned long ipi_type;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct sbi_tlb_info {
 | 
			
		||||
	unsigned long start;
 | 
			
		||||
	unsigned long size;
 | 
			
		||||
	unsigned long asid;
 | 
			
		||||
	unsigned long type;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define SBI_TLB_INFO_SIZE sizeof(struct sbi_tlb_info)
 | 
			
		||||
 | 
			
		||||
int sbi_ipi_send_many(struct sbi_scratch *scratch, ulong *pmask, u32 event,
 | 
			
		||||
		      void *data);
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										48
									
								
								include/sbi/sbi_tlb.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								include/sbi/sbi_tlb.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,48 @@
 | 
			
		||||
/*
 | 
			
		||||
 * SPDX-License-Identifier: BSD-2-Clause
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright (c) 2019 Western Digital Corporation or its affiliates.
 | 
			
		||||
 *
 | 
			
		||||
 * Authors:
 | 
			
		||||
 *   Atish Patra <atish.patra@wdc.com>
 | 
			
		||||
 *   Anup Patel <anup.patel@wdc.com>
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef __SBI_TLB_H__
 | 
			
		||||
#define __SBI_TLB_H__
 | 
			
		||||
 | 
			
		||||
#include <sbi/sbi_types.h>
 | 
			
		||||
 | 
			
		||||
/* clang-format off */
 | 
			
		||||
 | 
			
		||||
#define SBI_TLB_FLUSH_ALL			((unsigned long)-1)
 | 
			
		||||
#define SBI_TLB_FLUSH_MAX_SIZE			(1UL << 30)
 | 
			
		||||
 | 
			
		||||
/* clang-format on */
 | 
			
		||||
 | 
			
		||||
#define SBI_TLB_FIFO_NUM_ENTRIES		4
 | 
			
		||||
 | 
			
		||||
enum sbi_tlb_info_types {
 | 
			
		||||
	SBI_TLB_FLUSH_VMA,
 | 
			
		||||
	SBI_TLB_FLUSH_VMA_ASID,
 | 
			
		||||
	SBI_TLB_FLUSH_VMA_VMID
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct sbi_scratch;
 | 
			
		||||
 | 
			
		||||
struct sbi_tlb_info {
 | 
			
		||||
	unsigned long start;
 | 
			
		||||
	unsigned long size;
 | 
			
		||||
	unsigned long asid;
 | 
			
		||||
	unsigned long type;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define SBI_TLB_INFO_SIZE			sizeof(struct sbi_tlb_info)
 | 
			
		||||
 | 
			
		||||
int sbi_tlb_fifo_update(struct sbi_scratch *scratch, u32 event, void *data);
 | 
			
		||||
 | 
			
		||||
void sbi_tlb_fifo_process(struct sbi_scratch *scratch, u32 event);
 | 
			
		||||
 | 
			
		||||
int sbi_tlb_fifo_init(struct sbi_scratch *scratch, bool cold_boot);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
		Reference in New Issue
	
	Block a user