| 
									
										
										
										
											2011-10-04 11:11:35 -04:00
										 |  |  | /*
 | 
					
						
							|  |  |  |  *  Port on Texas Instruments TMS320C6x architecture | 
					
						
							|  |  |  |  * | 
					
						
							| 
									
										
										
										
											2012-08-15 11:52:01 -04:00
										 |  |  |  *  Copyright (C) 2005, 2006, 2009, 2010, 2012 Texas Instruments Incorporated | 
					
						
							| 
									
										
										
										
											2011-10-04 11:11:35 -04:00
										 |  |  |  *  Author: Aurelien Jacquiot (aurelien.jacquiot@jaluna.com) | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  *  This program is free software; you can redistribute it and/or modify | 
					
						
							|  |  |  |  *  it under the terms of the GNU General Public License version 2 as | 
					
						
							|  |  |  |  *  published by the Free Software Foundation. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | #ifndef _ASM_C6X_CACHE_H
 | 
					
						
							|  |  |  | #define _ASM_C6X_CACHE_H
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <linux/irqflags.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  |  * Cache line size | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2012-08-15 11:52:01 -04:00
										 |  |  | #define L1D_CACHE_SHIFT   6
 | 
					
						
							|  |  |  | #define L1D_CACHE_BYTES   (1 << L1D_CACHE_SHIFT)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define L1P_CACHE_SHIFT   5
 | 
					
						
							|  |  |  | #define L1P_CACHE_BYTES   (1 << L1P_CACHE_SHIFT)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define L2_CACHE_SHIFT    7
 | 
					
						
							|  |  |  | #define L2_CACHE_BYTES    (1 << L2_CACHE_SHIFT)
 | 
					
						
							| 
									
										
										
										
											2011-10-04 11:11:35 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  |  * L2 used as cache | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | #define L2MODE_SIZE	  L2MODE_256K_CACHE
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  |  * For practical reasons the L1_CACHE_BYTES defines should not be smaller than | 
					
						
							|  |  |  |  * the L2 line size | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2012-08-15 11:52:01 -04:00
										 |  |  | #define L1_CACHE_SHIFT        L2_CACHE_SHIFT
 | 
					
						
							|  |  |  | #define L1_CACHE_BYTES        (1 << L1_CACHE_SHIFT)
 | 
					
						
							| 
									
										
										
										
											2011-10-04 11:11:35 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | #define L2_CACHE_ALIGN_LOW(x) \
 | 
					
						
							|  |  |  | 	(((x) & ~(L2_CACHE_BYTES - 1))) | 
					
						
							|  |  |  | #define L2_CACHE_ALIGN_UP(x) \
 | 
					
						
							|  |  |  | 	(((x) + (L2_CACHE_BYTES - 1)) & ~(L2_CACHE_BYTES - 1)) | 
					
						
							|  |  |  | #define L2_CACHE_ALIGN_CNT(x) \
 | 
					
						
							|  |  |  | 	(((x) + (sizeof(int) - 1)) & ~(sizeof(int) - 1)) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define ARCH_DMA_MINALIGN	L1_CACHE_BYTES
 | 
					
						
							|  |  |  | #define ARCH_SLAB_MINALIGN	L1_CACHE_BYTES
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  |  * This is the granularity of hardware cacheability control. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | #define CACHEABILITY_ALIGN	0x01000000
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  |  * Align a physical address to MAR regions | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | #define CACHE_REGION_START(v) \
 | 
					
						
							|  |  |  | 	(((u32) (v)) & ~(CACHEABILITY_ALIGN - 1)) | 
					
						
							|  |  |  | #define CACHE_REGION_END(v) \
 | 
					
						
							|  |  |  | 	(((u32) (v) + (CACHEABILITY_ALIGN - 1)) & ~(CACHEABILITY_ALIGN - 1)) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | extern void __init c6x_cache_init(void); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | extern void enable_caching(unsigned long start, unsigned long end); | 
					
						
							|  |  |  | extern void disable_caching(unsigned long start, unsigned long end); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | extern void L1_cache_off(void); | 
					
						
							|  |  |  | extern void L1_cache_on(void); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | extern void L1P_cache_global_invalidate(void); | 
					
						
							|  |  |  | extern void L1D_cache_global_invalidate(void); | 
					
						
							|  |  |  | extern void L1D_cache_global_writeback(void); | 
					
						
							|  |  |  | extern void L1D_cache_global_writeback_invalidate(void); | 
					
						
							|  |  |  | extern void L2_cache_set_mode(unsigned int mode); | 
					
						
							|  |  |  | extern void L2_cache_global_writeback_invalidate(void); | 
					
						
							|  |  |  | extern void L2_cache_global_writeback(void); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | extern void L1P_cache_block_invalidate(unsigned int start, unsigned int end); | 
					
						
							|  |  |  | extern void L1D_cache_block_invalidate(unsigned int start, unsigned int end); | 
					
						
							|  |  |  | extern void L1D_cache_block_writeback_invalidate(unsigned int start, | 
					
						
							|  |  |  | 						 unsigned int end); | 
					
						
							|  |  |  | extern void L1D_cache_block_writeback(unsigned int start, unsigned int end); | 
					
						
							|  |  |  | extern void L2_cache_block_invalidate(unsigned int start, unsigned int end); | 
					
						
							|  |  |  | extern void L2_cache_block_writeback(unsigned int start, unsigned int end); | 
					
						
							|  |  |  | extern void L2_cache_block_writeback_invalidate(unsigned int start, | 
					
						
							|  |  |  | 						unsigned int end); | 
					
						
							|  |  |  | extern void L2_cache_block_invalidate_nowait(unsigned int start, | 
					
						
							|  |  |  | 					     unsigned int end); | 
					
						
							|  |  |  | extern void L2_cache_block_writeback_nowait(unsigned int start, | 
					
						
							|  |  |  | 					    unsigned int end); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | extern void L2_cache_block_writeback_invalidate_nowait(unsigned int start, | 
					
						
							|  |  |  | 						       unsigned int end); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #endif /* _ASM_C6X_CACHE_H */
 |