xref: /netbsd-src/sys/arch/evbmips/cavium/octeon_uboot.h (revision e542f66a7ea1664317c5f0a8168cf7082b2d4ddd)
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 
15 struct 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 
48 struct 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 
95 extern struct octeon_btdesc octeon_btdesc;
96 extern 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 
118 struct 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 
149 struct 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