1
2
3
4
5
6
7
8#ifndef __ASM_OCTEON_OCTEON_H
9#define __ASM_OCTEON_OCTEON_H
10
11#include "cvmx.h"
12
13extern uint64_t octeon_bootmem_alloc_range_phys(uint64_t size,
14 uint64_t alignment,
15 uint64_t min_addr,
16 uint64_t max_addr,
17 int do_locking);
18extern void *octeon_bootmem_alloc(uint64_t size, uint64_t alignment,
19 int do_locking);
20extern void *octeon_bootmem_alloc_range(uint64_t size, uint64_t alignment,
21 uint64_t min_addr, uint64_t max_addr,
22 int do_locking);
23extern void *octeon_bootmem_alloc_named(uint64_t size, uint64_t alignment,
24 char *name);
25extern void *octeon_bootmem_alloc_named_range(uint64_t size, uint64_t min_addr,
26 uint64_t max_addr, uint64_t align,
27 char *name);
28extern void *octeon_bootmem_alloc_named_address(uint64_t size, uint64_t address,
29 char *name);
30extern int octeon_bootmem_free_named(char *name);
31extern void octeon_bootmem_lock(void);
32extern void octeon_bootmem_unlock(void);
33
34extern int octeon_is_simulation(void);
35extern int octeon_is_pci_host(void);
36extern int octeon_usb_is_ref_clk(void);
37extern uint64_t octeon_get_clock_rate(void);
38extern const char *octeon_board_type_string(void);
39extern const char *octeon_get_pci_interrupts(void);
40extern int octeon_get_southbridge_interrupt(void);
41extern int octeon_get_boot_coremask(void);
42extern int octeon_get_boot_num_arguments(void);
43extern const char *octeon_get_boot_argument(int arg);
44extern void octeon_hal_setup_reserved32(void);
45extern void octeon_user_io_init(void);
46struct octeon_cop2_state;
47extern unsigned long octeon_crypto_enable(struct octeon_cop2_state *state);
48extern void octeon_crypto_disable(struct octeon_cop2_state *state,
49 unsigned long flags);
50
51extern void octeon_init_cvmcount(void);
52
53#define OCTEON_ARGV_MAX_ARGS 64
54#define OCTOEN_SERIAL_LEN 20
55
56struct octeon_boot_descriptor {
57
58 uint32_t desc_version;
59 uint32_t desc_size;
60 uint64_t stack_top;
61 uint64_t heap_base;
62 uint64_t heap_end;
63
64 uint64_t entry_point;
65 uint64_t desc_vaddr;
66
67 uint32_t exception_base_addr;
68 uint32_t stack_size;
69 uint32_t heap_size;
70
71 uint32_t argc;
72 uint32_t argv[OCTEON_ARGV_MAX_ARGS];
73
74#define BOOT_FLAG_INIT_CORE (1 << 0)
75#define OCTEON_BL_FLAG_DEBUG (1 << 1)
76#define OCTEON_BL_FLAG_NO_MAGIC (1 << 2)
77
78#define OCTEON_BL_FLAG_CONSOLE_UART1 (1 << 3)
79
80#define OCTEON_BL_FLAG_CONSOLE_PCI (1 << 4)
81
82#define OCTEON_BL_FLAG_BREAK (1 << 5)
83
84 uint32_t flags;
85 uint32_t core_mask;
86
87 uint32_t dram_size;
88
89 uint32_t phy_mem_desc_addr;
90
91 uint32_t debugger_flags_base_addr;
92
93 uint32_t eclock_hz;
94
95 uint32_t dclock_hz;
96
97 uint32_t spi_clock_hz;
98 uint16_t board_type;
99 uint8_t board_rev_major;
100 uint8_t board_rev_minor;
101 uint16_t chip_type;
102 uint8_t chip_rev_major;
103 uint8_t chip_rev_minor;
104 char board_serial_number[OCTOEN_SERIAL_LEN];
105 uint8_t mac_addr_base[6];
106 uint8_t mac_addr_count;
107 uint64_t cvmx_desc_vaddr;
108};
109
110union octeon_cvmemctl {
111 uint64_t u64;
112 struct {
113
114 uint64_t tlbbist:1;
115
116 uint64_t l1cbist:1;
117
118 uint64_t l1dbist:1;
119
120 uint64_t dcmbist:1;
121
122 uint64_t ptgbist:1;
123
124 uint64_t wbfbist:1;
125
126 uint64_t reserved:22;
127
128
129
130 uint64_t dismarkwblongto:1;
131
132
133 uint64_t dismrgclrwbto:1;
134
135
136
137 uint64_t iobdmascrmsb:2;
138
139
140
141
142 uint64_t syncwsmarked:1;
143
144
145 uint64_t dissyncws:1;
146
147
148 uint64_t diswbfst:1;
149
150
151
152 uint64_t xkmemenas:1;
153
154
155 uint64_t xkmemenau:1;
156
157
158
159 uint64_t xkioenas:1;
160
161
162 uint64_t xkioenau:1;
163
164
165 uint64_t allsyncw:1;
166
167
168 uint64_t nomerge:1;
169
170
171
172
173
174 uint64_t didtto:2;
175
176 uint64_t csrckalwys:1;
177
178 uint64_t mclkalwys:1;
179
180
181
182
183
184
185
186 uint64_t wbfltime:3;
187
188 uint64_t istrnol2:1;
189
190 uint64_t wbthresh:4;
191
192 uint64_t reserved2:2;
193
194
195 uint64_t cvmsegenak:1;
196
197
198 uint64_t cvmsegenas:1;
199
200
201 uint64_t cvmsegenau:1;
202
203
204 uint64_t lmemsz:6;
205 } s;
206};
207
208struct octeon_cf_data {
209 unsigned long base_region_bias;
210 unsigned int base_region;
211 int is16bit;
212 int dma_engine;
213};
214
215extern void octeon_write_lcd(const char *s);
216extern void octeon_check_cpu_bist(void);
217extern int octeon_get_boot_debug_flag(void);
218extern int octeon_get_boot_uart(void);
219
220struct uart_port;
221extern unsigned int octeon_serial_in(struct uart_port *, int);
222extern void octeon_serial_out(struct uart_port *, int, int);
223
224
225
226
227
228
229
230static inline void octeon_npi_write32(uint64_t address, uint32_t val)
231{
232 cvmx_write64_uint32(address ^ 4, val);
233 cvmx_read64_uint32(address ^ 4);
234}
235
236
237
238
239
240
241
242
243static inline uint32_t octeon_npi_read32(uint64_t address)
244{
245 return cvmx_read64_uint32(address ^ 4);
246}
247
248extern struct cvmx_bootinfo *octeon_bootinfo;
249
250#endif
251