1/*  *********************************************************************
2    *  Broadcom Common Firmware Environment (CFE)
3    *
4    *  Cache operations				File: cfe_cache.h
5    *
6    *  Macros that we use for common cache-related operations
7    *
8    *  Author:  Mitch Lichtenberg
9    *
10    *********************************************************************
11    *
12    *  Copyright 2000,2001,2002,2003
13    *  Broadcom Corporation. All rights reserved.
14    *
15    *  This software is furnished under license and may be used and
16    *  copied only in accordance with the following terms and
17    *  conditions.  Subject to these conditions, you may download,
18    *  copy, install, use, modify and distribute modified or unmodified
19    *  copies of this software in source and/or binary form.  No title
20    *  or ownership is transferred hereby.
21    *
22    *  1) Any source code used, modified or distributed must reproduce
23    *     and retain this copyright notice and list of conditions
24    *     as they appear in the source file.
25    *
26    *  2) No right is granted to use any trade name, trademark, or
27    *     logo of Broadcom Corporation.  The "Broadcom Corporation"
28    *     name may not be used to endorse or promote products derived
29    *     from this software without the prior written permission of
30    *     Broadcom Corporation.
31    *
32    *  3) THIS SOFTWARE IS PROVIDED "AS-IS" AND ANY EXPRESS OR
33    *     IMPLIED WARRANTIES, INCLUDING BUT NOT LIMITED TO, ANY IMPLIED
34    *     WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
35    *     PURPOSE, OR NON-INFRINGEMENT ARE DISCLAIMED. IN NO EVENT
36    *     SHALL BROADCOM BE LIABLE FOR ANY DAMAGES WHATSOEVER, AND IN
37    *     PARTICULAR, BROADCOM SHALL NOT BE LIABLE FOR DIRECT, INDIRECT,
38    *     INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
39    *     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
40    *     GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
41    *     BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
42    *     OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
43    *     TORT (INCLUDING NEGLIGENCE OR OTHERWISE), EVEN IF ADVISED OF
44    *     THE POSSIBILITY OF SUCH DAMAGE.
45    ********************************************************************* */
46
47#ifndef _CFE_CACHE_H
48#define _CFE_CACHE_H
49
50
51/*  *********************************************************************
52    *  cfe_cacheops bits
53    *
54    *  These bits are used in the "flags" parameter to the cfe_cacheops
55    *  routine that eventually winds its way into the CPU package.
56    *  Since they're also defined in cfe_iocb.h we duplicate them here
57    ********************************************************************* */
58
59
60/*
61 * Duplicates from cfe_iocb.h -- warning!
62 */
63
64#ifndef CFE_CACHE_FLUSH_D
65
66#define CFE_CACHE_FLUSH_D	1
67#define CFE_CACHE_INVAL_I	2
68#define CFE_CACHE_INVAL_D	4
69#define CFE_CACHE_INVAL_L2	8
70#define CFE_CACHE_FLUSH_L2	16
71#define CFE_CACHE_INVAL_RANGE	32
72#define CFE_CACHE_FLUSH_RANGE	64
73
74#endif
75
76
77#ifndef __ASSEMBLER__
78
79/*  *********************************************************************
80    *  Routines that implement cache operations
81    ********************************************************************* */
82
83extern void CPUCFG_INVALRANGE(volatile void *,int);
84extern void CPUCFG_SYNCRANGE(volatile void *,int);
85
86/*  *********************************************************************
87    *  cache macros
88    ********************************************************************* */
89
90/*
91 * Macros to flush or invalidate the cache (always)
92 */
93#define CACHE_SYNC(ptr,len) CPUCFG_SYNCRANGE((ptr),(len))
94#define CACHE_INVAL(ptr,len) CPUCFG_INVALRANGE((ptr),(len))
95
96/*
97 * Macros to flush or invalidate the cache depending on whether
98 * we support coherent DMA or not
99 */
100
101#if CPUCFG_COHERENT_DMA
102#define CACHE_DMA_SYNC(ptr,len)
103#define CACHE_DMA_INVAL(ptr,len)
104#define CACHE_DMA_SHARED(ptr) (ptr)
105#define CACHE_DMA_CACHEABLE(ptr) ((uint8_t *) (ptr))
106#else
107#define CACHE_DMA_SYNC(ptr,len) CPUCFG_SYNCRANGE((ptr),(len))
108#define CACHE_DMA_INVAL(ptr,len) CPUCFG_INVALRANGE((ptr),(len))
109#define CACHE_DMA_SHARED(ptr) ((uint8_t *)UNCADDR(PHYSADDR((uintptr_t)(ptr))))
110#define CACHE_DMA_CACHEABLE(ptr) ((uint8_t *)KERNADDR(PHYSADDR((uintptr_t)(ptr))))
111#endif
112
113#endif
114
115#endif
116