| 1 |
|
| 2 | |
| 3 | * Copyright (C) 2004, 2007-2010, 2011-2012 Synopsys, Inc. (www.synopsys.com)
|
| 4 |
|
| 5 |
|
| 6 | #ifndef __ARC_ASM_CACHE_H
|
| 7 | #define __ARC_ASM_CACHE_H
|
| 8 |
|
| 9 |
|
| 10 | #ifndef CONFIG_ARC_CACHE_LINE_SHIFT
|
| 11 | #define L1_CACHE_SHIFT 6
|
| 12 | #else
|
| 13 | #define L1_CACHE_SHIFT CONFIG_ARC_CACHE_LINE_SHIFT
|
| 14 | #endif
|
| 15 |
|
| 16 | #define L1_CACHE_BYTES (1 << L1_CACHE_SHIFT)
|
| 17 | #define CACHE_LINE_MASK (~(L1_CACHE_BYTES - 1))
|
| 18 |
|
| 19 | |
| 20 | * ARC700 doesn't cache any access in top 1G (0xc000_0000 to 0xFFFF_FFFF)
|
| 21 | * Ideal for wiring memory mapped peripherals as we don't need to do
|
| 22 | * explicit uncached accesses (LD.di/ST.di) hence more portable drivers
|
| 23 |
|
| 24 | #define ARC_UNCACHED_ADDR_SPACE 0xc0000000
|
| 25 |
|
| 26 | #ifndef __ASSEMBLER__
|
| 27 |
|
| 28 | #include <linux/build_bug.h>
|
| 29 |
|
| 30 |
|
| 31 | #define arc_read_uncached_32(ptr) \
|
| 32 | ({ \
|
| 33 | unsigned int __ret; \
|
| 34 | __asm__ __volatile__( \
|
| 35 | " ld.di %0, [%1] \n" \
|
| 36 | : "=r"(__ret) \
|
| 37 | : "r"(ptr)); \
|
| 38 | __ret; \
|
| 39 | })
|
| 40 |
|
| 41 | #define arc_write_uncached_32(ptr, data)\
|
| 42 | ({ \
|
| 43 | __asm__ __volatile__( \
|
| 44 | " st.di %0, [%1] \n" \
|
| 45 | : \
|
| 46 | : "r"(data), "r"(ptr)); \
|
| 47 | })
|
| 48 |
|
| 49 |
|
| 50 | #define SMP_CACHE_BYTES 128
|
| 51 | #define cache_line_size() SMP_CACHE_BYTES
|
| 52 | #define ARCH_DMA_MINALIGN SMP_CACHE_BYTES
|
| 53 |
|
| 54 | |
| 55 | * Make sure slab-allocated buffers are 64-bit aligned when atomic64_t uses
|
| 56 | * ARCv2 64-bit atomics (LLOCKD/SCONDD). This guarantess runtime 64-bit
|
| 57 | * alignment for any atomic64_t embedded in buffer.
|
| 58 | * Default ARCH_SLAB_MINALIGN is __alignof__(long long) which has a relaxed
|
| 59 | * value of 4 (and not 8) in ARC ABI.
|
| 60 |
|
| 61 | #if defined(CONFIG_ARC_HAS_LL64) && defined(CONFIG_ARC_HAS_LLSC)
|
| 62 | #define ARCH_SLAB_MINALIGN 8
|
| 63 | #endif
|
| 64 |
|
| 65 | extern int ioc_enable;
|
| 66 | extern unsigned long perip_base, perip_end;
|
| 67 |
|
| 68 | #endif
|
| 69 |
|
| 70 |
|
| 71 | #define ARC_REG_IC_BCR 0x77
|
| 72 | #define ARC_REG_IC_IVIC 0x10
|
| 73 | #define ARC_REG_IC_CTRL 0x11
|
| 74 | #define ARC_REG_IC_IVIR 0x16
|
| 75 | #define ARC_REG_IC_ENDR 0x17
|
| 76 | #define ARC_REG_IC_IVIL 0x19
|
| 77 | #define ARC_REG_IC_PTAG 0x1E
|
| 78 | #define ARC_REG_IC_PTAG_HI 0x1F
|
| 79 |
|
| 80 |
|
| 81 | #define IC_CTRL_DIS 0x1
|
| 82 |
|
| 83 |
|
| 84 | #define ARC_REG_DC_BCR 0x72
|
| 85 | #define ARC_REG_DC_IVDC 0x47
|
| 86 | #define ARC_REG_DC_CTRL 0x48
|
| 87 | #define ARC_REG_DC_IVDL 0x4A
|
| 88 | #define ARC_REG_DC_FLSH 0x4B
|
| 89 | #define ARC_REG_DC_FLDL 0x4C
|
| 90 | #define ARC_REG_DC_STARTR 0x4D
|
| 91 | #define ARC_REG_DC_ENDR 0x4E
|
| 92 | #define ARC_REG_DC_PTAG 0x5C
|
| 93 | #define ARC_REG_DC_PTAG_HI 0x5F
|
| 94 |
|
| 95 |
|
| 96 | #define DC_CTRL_DIS 0x001
|
| 97 | #define DC_CTRL_INV_MODE_FLUSH 0x040
|
| 98 | #define DC_CTRL_FLUSH_STATUS 0x100
|
| 99 | #define DC_CTRL_RGN_OP_INV 0x200
|
| 100 | #define DC_CTRL_RGN_OP_MSK 0x200
|
| 101 |
|
| 102 |
|
| 103 | #define ARC_REG_SLC_CFG 0x901
|
| 104 | #define ARC_REG_SLC_CTRL 0x903
|
| 105 | #define ARC_REG_SLC_FLUSH 0x904
|
| 106 | #define ARC_REG_SLC_INVALIDATE 0x905
|
| 107 | #define ARC_AUX_SLC_IVDL 0x910
|
| 108 | #define ARC_AUX_SLC_FLDL 0x912
|
| 109 | #define ARC_REG_SLC_RGN_START 0x914
|
| 110 | #define ARC_REG_SLC_RGN_START1 0x915
|
| 111 | #define ARC_REG_SLC_RGN_END 0x916
|
| 112 | #define ARC_REG_SLC_RGN_END1 0x917
|
| 113 |
|
| 114 |
|
| 115 | #define SLC_CTRL_DIS 0x001
|
| 116 | #define SLC_CTRL_IM 0x040
|
| 117 | #define SLC_CTRL_BUSY 0x100
|
| 118 | #define SLC_CTRL_RGN_OP_INV 0x200
|
| 119 |
|
| 120 |
|
| 121 | #define ARC_REG_IO_COH_ENABLE 0x500
|
| 122 | #define ARC_IO_COH_ENABLE_BIT BIT(0)
|
| 123 | #define ARC_REG_IO_COH_PARTIAL 0x501
|
| 124 | #define ARC_IO_COH_PARTIAL_BIT BIT(0)
|
| 125 | #define ARC_REG_IO_COH_AP0_BASE 0x508
|
| 126 | #define ARC_REG_IO_COH_AP0_SIZE 0x509
|
| 127 |
|
| 128 | #endif
|