1/*	$NetBSD: octeon_uboot.h,v 1.3 2020/06/20 02:01:56 simonb Exp $	*/
2
3#ifndef _EVBMIPS_OCTEON_UBOOT_H_
4#define	_EVBMIPS_OCTEON_UBOOT_H_
5
6#define	OCTEON_BTDESC_ARGV_MAX		64
7#define	OCTEON_BTDESC_SERIAL_LEN	20
8#define	OCTEON_BTDESC_DEP2_LEN		6
9
10#define	OCTEON_BTINFO_PADDR_OFFSET	392
11#define	OCTEON_BTINFO_SERIAL_LEN	20
12#define	OCTEON_BTINFO_MAJOR_VERSION	1
13#define	OCTEON_BTINFO_MINOR_VERSION	2
14
15struct octeon_btdesc {
16	uint32_t	obt_desc_ver;
17	uint32_t	obt_desc_size;
18	uint64_t	obt_stack_top;			/* deprecated */
19	uint64_t	obt_heap_start;
20	uint64_t	obt_heap_end;
21	uint64_t	obt_deprecated17;
22	uint64_t	obt_deprecated16;
23	uint32_t	obt_deprecated18;
24	uint32_t	obt_deprecated15;
25	uint32_t	obt_deprecated14;
26	uint32_t	obt_argc;
27	uint32_t	obt_argv[OCTEON_BTDESC_ARGV_MAX];
28	uint32_t	obt_flags;			/* deprecated */
29	uint32_t	obt_core_mask;			/* deprecated */
30	uint32_t	obt_dram_size;			/* deprecated */
31	uint32_t	obt_phy_mem_desc_addr;		/* deprecated */
32	uint32_t	obt_debugger_flag_addr;
33	uint32_t	obt_eclock;
34	uint32_t	obt_deprecated10;
35	uint32_t	obt_deprecated9;
36	uint16_t	obt_deprecated8;
37	uint8_t		obt_deprecated7;
38	uint8_t		obt_deprecated6;
39	uint16_t	obt_deprecated5;
40	uint8_t		obt_deprecated4;
41	uint8_t		obt_deprecated3;
42	uint8_t		obt_deprecated2[OCTEON_BTDESC_SERIAL_LEN];
43	uint8_t		obt_deprecated1[OCTEON_BTDESC_DEP2_LEN];
44	uint8_t		obt_deprecated0;
45	uint64_t	obt_boot_info_addr;
46};
47
48struct octeon_btinfo {
49	uint32_t	obt_major_version;
50	uint32_t	obt_minor_version;
51
52	uint64_t	obt_stack_top;
53	uint64_t	obt_heap_base;
54	uint64_t	obt_heap_end;
55	uint64_t	obt_desc_vaddr;
56
57	uint32_t	obt_ebase_addr;
58	uint32_t	obt_stack_size;
59	uint32_t	obt_flags;
60	uint32_t	obt_core_mask;			/* deprecated in v4 */
61	uint32_t	obt_dram_size;			/* in MB */
62	uint32_t	obt_phy_mem_desc_addr;
63	uint32_t	obt_dbg_flags_base_addr;
64	uint32_t	obt_eclock_hz;			/* CPU clock speed */
65	uint32_t	obt_dclock_hz;			/* DRAM clock speed */
66	uint32_t	obt_reserved0;
67
68	uint16_t	obt_board_type;
69	uint8_t		obt_board_rev_major;
70	uint8_t		obt_board_rev_minor;
71	uint16_t	obt_reserved1;
72	uint8_t		obt_reserved2;
73	uint8_t		obt_reserved3;
74	char		obt_board_serial_number[OCTEON_BTINFO_SERIAL_LEN];
75
76	uint8_t		obt_mac_addr_base[6];
77	uint8_t		obt_mac_addr_count;
78
79	/* version minor 1 or newer */
80	uint64_t	obt_cf_common_base_addr;	/* paddr */
81	uint64_t	obt_cf_attr_base_addr;		/* paddr */
82	uint64_t	obt_led_display_base_addr;	/* deprecated */
83
84	/* version minor 2 or newer */
85	uint32_t	obt_dfa_ref_clock_hz;		/* DFA ref clock */
86	uint32_t	obt_config_flags;
87
88	/* version minor 3 or newer */
89	uint64_t	obt_fdt_addr;			/* FDT structure */
90
91	/* version minor 4 or newer */
92	uint64_t	obt_ext_core_mask;		/* 64-bit core mask */
93};
94
95extern struct octeon_btdesc octeon_btdesc;
96extern struct octeon_btinfo octeon_btinfo;
97
98#define	OCTEON_SUPPORTED_DESCRIPTOR_VERSION	7
99
100/* obt_board_type */
101#define	BOARD_TYPE_UBIQUITI_E100	20002
102#define	BOARD_TYPE_UBIQUITI_E120		20004
103#define	BOARD_TYPE_UBIQUITI_E200		20003
104#define	BOARD_TYPE_UBIQUITI_E220		20005
105#define	BOARD_TYPE_UBIQUITI_E220		20005
106#define	BOARD_TYPE_UBIQUITI_E1000		20010
107#define	BOARD_TYPE_UBIQUITI_E300		20300
108
109/* obt_config_flags */
110#define	CONFIG_FLAGS_PCI_HOST			__BIT(0)
111#define	CONFIG_FLAGS_PCI_TARGET			__BIT(1)
112#define	CONFIG_FLAGS_DEBUG			__BIT(2)
113#define	CONFIG_FLAGS_NO_MAGIC			__BIT(3)
114#define	CONFIG_FLAGS_OVERSIZE_TLB_MAPPING	__BIT(4)
115#define	CONFIG_FLAGS_BREAK			__BIT(5)
116
117
118struct octeon_bootmem_desc {
119#if BYTE_ORDER == BIG_ENDIAN
120	uint32_t	bmd_lock;
121	uint32_t	bmd_flags;
122	uint64_t	bmd_head_addr;
123
124	uint32_t	bmd_major_version;
125	uint32_t	bmd_minor_version;
126	uint64_t	bmd_app_data_addr;
127	uint64_t	bmd_app_data_size;
128
129	uint32_t	bmd_named_block_num_blocks;
130	uint32_t	bmd_named_block_name_len;
131	uint64_t	bmd_named_block_array_addr;
132#endif
133#if BYTE_ORDER == LITTLE_ENDIAN
134	uint32_t	bmd_flags;
135	uint32_t	bmd_lock;
136	uint64_t	bmd_head_addr;
137
138	uint32_t	bmd_minor_version;
139	uint32_t	bmd_major_version;
140	uint64_t	bmd_app_data_addr;
141	uint64_t	bmd_app_data_size;
142
143	uint32_t	bmd_named_block_name_len;
144	uint32_t	bmd_named_block_num_blocks;
145	uint64_t	bmd_named_block_array_addr;
146#endif
147};
148
149struct octeon_bootmem_block_header {
150	uint64_t	bbh_next_block_addr;
151	uint64_t	bbh_size;
152};
153
154#endif /* _EVBMIPS_OCTEON_UBOOT_H_ */
155