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>
2013-11-11 08:28:33 -05:00
# include <linux/init.h>
2011-10-04 11:11:35 -04:00
/*
* 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 */