Home | History | Annotate | Line # | Download | only in include
cache_octeon.h revision 1.2.20.1
      1  1.2.20.1  christos /*	$NetBSD: cache_octeon.h,v 1.2.20.1 2019/06/10 22:06:29 christos Exp $	*/
      2       1.1    hikaru 
      3       1.1    hikaru #define	CACHE_OCTEON_I			0
      4       1.1    hikaru #define	CACHE_OCTEON_D			1
      5       1.1    hikaru 
      6       1.1    hikaru #define	CACHEOP_OCTEON_INV_ALL			(0 << 2)	/* I, D */
      7       1.1    hikaru #define	CACHEOP_OCTEON_INDEX_LOAD_TAG		(1 << 2)	/* I, D */
      8       1.1    hikaru #define	CACHEOP_OCTEON_BITMAP_STORE		(3 << 2)	/* I */
      9       1.1    hikaru #define	CACHEOP_OCTEON_VIRTUAL_TAG_INV		(4 << 2)	/* D */
     10       1.1    hikaru 
     11       1.1    hikaru #if !defined(_LOCORE)
     12       1.1    hikaru 
     13       1.1    hikaru /*
     14       1.1    hikaru  * cache_octeon_invalidate:
     15       1.1    hikaru  *
     16  1.2.20.1  christos  *	Invalidate all cache blocks.
     17       1.1    hikaru  *	Argument "op" must be CACHE_OCTEON_I or CACHE_OCTEON_D.
     18       1.1    hikaru  *	In Octeon specification, invalidate instruction works
     19       1.1    hikaru  *	all cache blocks.
     20       1.1    hikaru  */
     21       1.1    hikaru #define	cache_octeon_invalidate(op)					\
     22       1.1    hikaru do {									\
     23       1.1    hikaru 	__asm __volatile(						\
     24       1.1    hikaru 		".set noreorder					\n\t"	\
     25       1.1    hikaru 		"cache %0, 0($0)				\n\t"	\
     26       1.1    hikaru 		".set reorder"						\
     27       1.1    hikaru 	    :								\
     28       1.1    hikaru 	    : "i" (op)							\
     29       1.1    hikaru 	    : "memory");						\
     30       1.1    hikaru } while (/*CONSTCOND*/0)
     31       1.1    hikaru 
     32       1.1    hikaru /*
     33       1.1    hikaru  * cache_octeon_op_line:
     34       1.1    hikaru  *
     35       1.1    hikaru  *	Perform the specified cache operation on a single line.
     36       1.1    hikaru  */
     37       1.1    hikaru #define	cache_op_octeon_line(va, op)					\
     38       1.1    hikaru do {									\
     39       1.1    hikaru 	__asm __volatile(						\
     40       1.1    hikaru 		".set noreorder					\n\t"	\
     41       1.1    hikaru 		"cache %1, 0(%0)				\n\t"	\
     42       1.1    hikaru 		".set reorder"						\
     43       1.1    hikaru 	    :								\
     44       1.1    hikaru 	    : "r" (va), "i" (op)					\
     45       1.1    hikaru 	    : "memory");						\
     46       1.1    hikaru } while (/*CONSTCOND*/0)
     47       1.1    hikaru 
     48       1.1    hikaru void octeon_icache_sync_all(void);
     49       1.2      matt void octeon_icache_sync_range(register_t va, vsize_t size);
     50       1.1    hikaru void octeon_icache_sync_range_index(vaddr_t va, vsize_t size);
     51       1.1    hikaru void octeon_pdcache_inv_all(void);
     52       1.2      matt void octeon_pdcache_inv_range(register_t va, vsize_t size);
     53       1.1    hikaru void octeon_pdcache_inv_range_index(vaddr_t va, vsize_t size);
     54       1.2      matt void octeon_pdcache_wb_range(register_t va, vsize_t size);
     55       1.1    hikaru 
     56       1.1    hikaru #endif /* !_LOCORE */
     57