armv4_5: Improve arm_checksum_memory() error handling
[openocd.git] / src / target / armv7a_cache_l2x.h
1 /***************************************************************************
2 * Copyright (C) 2015 Oleksij Rempel *
3 * linux@rempel-privat.de *
4 * *
5 * This program is free software; you can redistribute it and/or modify *
6 * it under the terms of the GNU General Public License as published by *
7 * the Free Software Foundation; either version 2 of the License, or *
8 * (at your option) any later version. *
9 * *
10 * This program is distributed in the hope that it will be useful, *
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
13 * GNU General Public License for more details. *
14 ***************************************************************************/
15
16 #ifndef ARM7A_CACHE_L2X_H
17 #define ARM7A_CACHE_L2X_H
18
19 #define L2X0_CACHE_LINE_SIZE 32
20
21 /* source: linux/arch/arm/include/asm/hardware/cache-l2x0.h */
22 #define L2X0_CACHE_ID 0x000
23 #define L2X0_CACHE_TYPE 0x004
24 #define L2X0_CTRL 0x100
25 #define L2X0_AUX_CTRL 0x104
26 #define L2X0_TAG_LATENCY_CTRL 0x108
27 #define L2X0_DATA_LATENCY_CTRL 0x10C
28 #define L2X0_EVENT_CNT_CTRL 0x200
29 #define L2X0_EVENT_CNT1_CFG 0x204
30 #define L2X0_EVENT_CNT0_CFG 0x208
31 #define L2X0_EVENT_CNT1_VAL 0x20C
32 #define L2X0_EVENT_CNT0_VAL 0x210
33 #define L2X0_INTR_MASK 0x214
34 #define L2X0_MASKED_INTR_STAT 0x218
35 #define L2X0_RAW_INTR_STAT 0x21C
36 #define L2X0_INTR_CLEAR 0x220
37 #define L2X0_CACHE_SYNC 0x730
38 #define L2X0_DUMMY_REG 0x740
39 #define L2X0_INV_LINE_PA 0x770
40 #define L2X0_INV_WAY 0x77C
41 #define L2X0_CLEAN_LINE_PA 0x7B0
42 #define L2X0_CLEAN_LINE_IDX 0x7B8
43 #define L2X0_CLEAN_WAY 0x7BC
44 #define L2X0_CLEAN_INV_LINE_PA 0x7F0
45 #define L2X0_CLEAN_INV_LINE_IDX 0x7F8
46 #define L2X0_CLEAN_INV_WAY 0x7FC
47 /*
48 * The lockdown registers repeat 8 times for L310, the L210 has only one
49 * D and one I lockdown register at 0x0900 and 0x0904.
50 */
51 #define L2X0_LOCKDOWN_WAY_D_BASE 0x900
52 #define L2X0_LOCKDOWN_WAY_I_BASE 0x904
53 #define L2X0_LOCKDOWN_STRIDE 0x08
54 #define L2X0_ADDR_FILTER_START 0xC00
55 #define L2X0_ADDR_FILTER_END 0xC04
56 #define L2X0_TEST_OPERATION 0xF00
57 #define L2X0_LINE_DATA 0xF10
58 #define L2X0_LINE_TAG 0xF30
59 #define L2X0_DEBUG_CTRL 0xF40
60 #define L2X0_PREFETCH_CTRL 0xF60
61 #define L2X0_POWER_CTRL 0xF80
62 #define L2X0_DYNAMIC_CLK_GATING_EN (1 << 1)
63 #define L2X0_STNDBY_MODE_EN (1 << 0)
64
65 /* Registers shifts and masks */
66 #define L2X0_CACHE_ID_PART_MASK (0xf << 6)
67 #define L2X0_CACHE_ID_PART_L210 (1 << 6)
68 #define L2X0_CACHE_ID_PART_L310 (3 << 6)
69 #define L2X0_CACHE_ID_RTL_MASK 0x3f
70 #define L2X0_CACHE_ID_RTL_R0P0 0x0
71 #define L2X0_CACHE_ID_RTL_R1P0 0x2
72 #define L2X0_CACHE_ID_RTL_R2P0 0x4
73 #define L2X0_CACHE_ID_RTL_R3P0 0x5
74 #define L2X0_CACHE_ID_RTL_R3P1 0x6
75 #define L2X0_CACHE_ID_RTL_R3P2 0x8
76
77 #define L2X0_AUX_CTRL_MASK 0xc0000fff
78 #define L2X0_AUX_CTRL_DATA_RD_LATENCY_SHIFT 0
79 #define L2X0_AUX_CTRL_DATA_RD_LATENCY_MASK 0x7
80 #define L2X0_AUX_CTRL_DATA_WR_LATENCY_SHIFT 3
81 #define L2X0_AUX_CTRL_DATA_WR_LATENCY_MASK (0x7 << 3)
82 #define L2X0_AUX_CTRL_TAG_LATENCY_SHIFT 6
83 #define L2X0_AUX_CTRL_TAG_LATENCY_MASK (0x7 << 6)
84 #define L2X0_AUX_CTRL_DIRTY_LATENCY_SHIFT 9
85 #define L2X0_AUX_CTRL_DIRTY_LATENCY_MASK (0x7 << 9)
86 #define L2X0_AUX_CTRL_ASSOCIATIVITY_SHIFT 16
87 #define L2X0_AUX_CTRL_WAY_SIZE_SHIFT 17
88 #define L2X0_AUX_CTRL_WAY_SIZE_MASK (0x7 << 17)
89 #define L2X0_AUX_CTRL_SHARE_OVERRIDE_SHIFT 22
90 #define L2X0_AUX_CTRL_NS_LOCKDOWN_SHIFT 26
91 #define L2X0_AUX_CTRL_NS_INT_CTRL_SHIFT 27
92 #define L2X0_AUX_CTRL_DATA_PREFETCH_SHIFT 28
93 #define L2X0_AUX_CTRL_INSTR_PREFETCH_SHIFT 29
94 #define L2X0_AUX_CTRL_EARLY_BRESP_SHIFT 30
95
96 #define L2X0_LATENCY_CTRL_SETUP_SHIFT 0
97 #define L2X0_LATENCY_CTRL_RD_SHIFT 4
98 #define L2X0_LATENCY_CTRL_WR_SHIFT 8
99
100 #define L2X0_ADDR_FILTER_EN 1
101
102 #define L2X0_CTRL_EN 1
103
104 #define L2X0_WAY_SIZE_SHIFT 3
105
106 struct l2x0_regs {
107 unsigned long phy_base;
108 unsigned long aux_ctrl;
109 /*
110 * Whether the following registers need to be saved/restored
111 * depends on platform
112 */
113 unsigned long tag_latency;
114 unsigned long data_latency;
115 unsigned long filter_start;
116 unsigned long filter_end;
117 unsigned long prefetch_ctrl;
118 unsigned long pwr_ctrl;
119 unsigned long ctrl;
120 unsigned long aux2_ctrl;
121 };
122
123 struct outer_cache_fns {
124 void (*inv_range)(unsigned long, unsigned long);
125 void (*clean_range)(unsigned long, unsigned long);
126 void (*flush_range)(unsigned long, unsigned long);
127 void (*flush_all)(void);
128 void (*disable)(void);
129
130 void (*resume)(void);
131
132 /* This is an ARM L2C thing */
133 void (*write_sec)(unsigned long, unsigned);
134 void (*configure)(const struct l2x0_regs *);
135 };
136
137 struct l2c_init_data {
138 const char *type;
139 unsigned way_size_0;
140 unsigned num_lock;
141
142 void (*enable)(uint32_t, uint32_t, unsigned);
143 void (*fixup)(uint32_t, uint32_t, struct outer_cache_fns *);
144 void (*save)(uint32_t);
145 void (*configure)(uint32_t);
146 struct outer_cache_fns outer_cache;
147 };
148
149 extern const struct command_registration arm7a_l2x_cache_command_handler[];
150
151 int armv7a_l2x_cache_flush_virt(struct target *target, uint32_t virt,
152 uint32_t size);
153 int arm7a_l2x_flush_all_data(struct target *target);
154
155 #endif

Linking to existing account procedure

If you already have an account and want to add another login method you MUST first sign in with your existing account and then change URL to read https://review.openocd.org/login/?link to get to this page again but this time it'll work for linking. Thank you.

SSH host keys fingerprints

1024 SHA256:YKx8b7u5ZWdcbp7/4AeXNaqElP49m6QrwfXaqQGJAOk gerrit-code-review@openocd.zylin.com (DSA)
384 SHA256:jHIbSQa4REvwCFG4cq5LBlBLxmxSqelQPem/EXIrxjk gerrit-code-review@openocd.org (ECDSA)
521 SHA256:UAOPYkU9Fjtcao0Ul/Rrlnj/OsQvt+pgdYSZ4jOYdgs gerrit-code-review@openocd.org (ECDSA)
256 SHA256:A13M5QlnozFOvTllybRZH6vm7iSt0XLxbA48yfc2yfY gerrit-code-review@openocd.org (ECDSA)
256 SHA256:spYMBqEYoAOtK7yZBrcwE8ZpYt6b68Cfh9yEVetvbXg gerrit-code-review@openocd.org (ED25519)
+--[ED25519 256]--+
|=..              |
|+o..   .         |
|*.o   . .        |
|+B . . .         |
|Bo. = o S        |
|Oo.+ + =         |
|oB=.* = . o      |
| =+=.+   + E     |
|. .=o   . o      |
+----[SHA256]-----+
2048 SHA256:0Onrb7/PHjpo6iVZ7xQX2riKN83FJ3KGU0TvI0TaFG4 gerrit-code-review@openocd.zylin.com (RSA)