xref: /openbmc/u-boot/arch/nds32/include/asm/setup.h (revision e8f80a5a)
1*83d290c5STom Rini /* SPDX-License-Identifier: GPL-2.0 */
2e3c58b02Sken kuo /*
3e3c58b02Sken kuo  *  linux/arch/nds32/include/asm/setup.h
4e3c58b02Sken kuo  *
5e3c58b02Sken kuo  *  Copyright (C) 1997-1999 Russell King
6e3c58b02Sken kuo  *  Copyright (C) 2008 Andes Technology Corporation
7e3c58b02Sken kuo  *	Copyright (C) 2013 Ken Kuo (ken_kuo@andestech.com)
8e3c58b02Sken kuo  *
9e3c58b02Sken kuo  *  Structure passed to kernel to tell it about the
10e3c58b02Sken kuo  *  hardware it's running on.  See Documentation/arm/Setup
11e3c58b02Sken kuo  *  for more info.
12e3c58b02Sken kuo  */
13e3c58b02Sken kuo #ifndef __ASMNDS32_SETUP_H
14e3c58b02Sken kuo #define __ASMNDS32_SETUP_H
15e3c58b02Sken kuo 
16e3c58b02Sken kuo #define COMMAND_LINE_SIZE 256
17e3c58b02Sken kuo 
18e3c58b02Sken kuo /* The list ends with an ATAG_NONE node. */
19e3c58b02Sken kuo #define ATAG_NONE	0x00000000
20e3c58b02Sken kuo 
21e3c58b02Sken kuo struct tag_header {
22e3c58b02Sken kuo 	u32 size;
23e3c58b02Sken kuo 	u32 tag;
24e3c58b02Sken kuo };
25e3c58b02Sken kuo 
26e3c58b02Sken kuo /* The list must start with an ATAG_CORE node */
27e3c58b02Sken kuo #define ATAG_CORE	0x54410001
28e3c58b02Sken kuo 
29e3c58b02Sken kuo struct tag_core {
30e3c58b02Sken kuo 	u32 flags;		/* bit 0 = read-only */
31e3c58b02Sken kuo 	u32 pagesize;
32e3c58b02Sken kuo 	u32 rootdev;
33e3c58b02Sken kuo };
34e3c58b02Sken kuo 
35e3c58b02Sken kuo /* it is allowed to have multiple ATAG_MEM nodes */
36e3c58b02Sken kuo #define ATAG_MEM	0x54410002
37e3c58b02Sken kuo 
38e3c58b02Sken kuo struct tag_mem32 {
39e3c58b02Sken kuo 	u32	size;
40e3c58b02Sken kuo 	u32	start;	/* physical start address */
41e3c58b02Sken kuo };
42e3c58b02Sken kuo 
43e3c58b02Sken kuo /* VGA text type displays */
44e3c58b02Sken kuo #define ATAG_VIDEOTEXT	0x54410003
45e3c58b02Sken kuo 
46e3c58b02Sken kuo struct tag_videotext {
47e3c58b02Sken kuo 	u8		x;
48e3c58b02Sken kuo 	u8		y;
49e3c58b02Sken kuo 	u16		video_page;
50e3c58b02Sken kuo 	u8		video_mode;
51e3c58b02Sken kuo 	u8		video_cols;
52e3c58b02Sken kuo 	u16		video_ega_bx;
53e3c58b02Sken kuo 	u8		video_lines;
54e3c58b02Sken kuo 	u8		video_isvga;
55e3c58b02Sken kuo 	u16		video_points;
56e3c58b02Sken kuo };
57e3c58b02Sken kuo 
58e3c58b02Sken kuo /* describes how the ramdisk will be used in kernel */
59e3c58b02Sken kuo #define ATAG_RAMDISK	0x54410004
60e3c58b02Sken kuo 
61e3c58b02Sken kuo struct tag_ramdisk {
62e3c58b02Sken kuo 	u32 flags;	/* bit 0 = load, bit 1 = prompt */
63e3c58b02Sken kuo 	u32 size;	/* decompressed ramdisk size in _kilo_ bytes */
64e3c58b02Sken kuo 	u32 start;	/* starting block of floppy-based RAM disk image */
65e3c58b02Sken kuo };
66e3c58b02Sken kuo 
67e3c58b02Sken kuo /*
68e3c58b02Sken kuo  * this one accidentally used virtual addresses - as such,
69e3c58b02Sken kuo  * it's deprecated.
70e3c58b02Sken kuo  * describes where the compressed ramdisk image lives (virtual address)
71e3c58b02Sken kuo  */
72e3c58b02Sken kuo #define ATAG_INITRD		0x54410005
73e3c58b02Sken kuo 
74e3c58b02Sken kuo /* describes where the compressed ramdisk image lives (physical address) */
75e3c58b02Sken kuo #define ATAG_INITRD2	0x54420005
76e3c58b02Sken kuo 
77e3c58b02Sken kuo struct tag_initrd {
78e3c58b02Sken kuo 	u32 start;	/* physical start address */
79e3c58b02Sken kuo 	u32 size;	/* size of compressed ramdisk image in bytes */
80e3c58b02Sken kuo };
81e3c58b02Sken kuo 
82e3c58b02Sken kuo /* board serial number. "64 bits should be enough for everybody" */
83e3c58b02Sken kuo #define ATAG_SERIAL		0x54410006
84e3c58b02Sken kuo 
85e3c58b02Sken kuo struct tag_serialnr {
86e3c58b02Sken kuo 	u32 low;
87e3c58b02Sken kuo 	u32 high;
88e3c58b02Sken kuo };
89e3c58b02Sken kuo 
90e3c58b02Sken kuo /* board revision */
91e3c58b02Sken kuo #define ATAG_REVISION	0x54410007
92e3c58b02Sken kuo 
93e3c58b02Sken kuo struct tag_revision {
94e3c58b02Sken kuo 	u32 rev;
95e3c58b02Sken kuo };
96e3c58b02Sken kuo 
97e3c58b02Sken kuo /* initial values for vesafb-type framebuffers. see struct screen_info
98e3c58b02Sken kuo  * in include/linux/tty.h
99e3c58b02Sken kuo  */
100e3c58b02Sken kuo #define ATAG_VIDEOLFB	0x54410008
101e3c58b02Sken kuo 
102e3c58b02Sken kuo struct tag_videolfb {
103e3c58b02Sken kuo 	u16		lfb_width;
104e3c58b02Sken kuo 	u16		lfb_height;
105e3c58b02Sken kuo 	u16		lfb_depth;
106e3c58b02Sken kuo 	u16		lfb_linelength;
107e3c58b02Sken kuo 	u32		lfb_base;
108e3c58b02Sken kuo 	u32		lfb_size;
109e3c58b02Sken kuo 	u8		red_size;
110e3c58b02Sken kuo 	u8		red_pos;
111e3c58b02Sken kuo 	u8		green_size;
112e3c58b02Sken kuo 	u8		green_pos;
113e3c58b02Sken kuo 	u8		blue_size;
114e3c58b02Sken kuo 	u8		blue_pos;
115e3c58b02Sken kuo 	u8		rsvd_size;
116e3c58b02Sken kuo 	u8		rsvd_pos;
117e3c58b02Sken kuo };
118e3c58b02Sken kuo 
119e3c58b02Sken kuo /* command line: \0 terminated string */
120e3c58b02Sken kuo #define ATAG_CMDLINE	0x54410009
121e3c58b02Sken kuo 
122e3c58b02Sken kuo struct tag_cmdline {
123e3c58b02Sken kuo 	char	cmdline[COMMAND_LINE_SIZE];
124e3c58b02Sken kuo };
125e3c58b02Sken kuo 
126e3c58b02Sken kuo struct tag {
127e3c58b02Sken kuo 	struct tag_header hdr;
128e3c58b02Sken kuo 	union {
129e3c58b02Sken kuo 		struct tag_core		core;
130e3c58b02Sken kuo 		struct tag_mem32	mem;
131e3c58b02Sken kuo 		struct tag_videotext	videotext;
132e3c58b02Sken kuo 		struct tag_ramdisk	ramdisk;
133e3c58b02Sken kuo 		struct tag_initrd	initrd;
134e3c58b02Sken kuo 		struct tag_serialnr	serialnr;
135e3c58b02Sken kuo 		struct tag_revision	revision;
136e3c58b02Sken kuo 		struct tag_videolfb	videolfb;
137e3c58b02Sken kuo 		struct tag_cmdline	cmdline;
138e3c58b02Sken kuo 	} u;
139e3c58b02Sken kuo };
140e3c58b02Sken kuo 
141e3c58b02Sken kuo struct tagtable {
142e3c58b02Sken kuo 	u32 tag;
143e3c58b02Sken kuo 	int (*parse)(const struct tag *);
144e3c58b02Sken kuo };
145e3c58b02Sken kuo 
146e3c58b02Sken kuo #define tag_member_present(tag, member)				\
147e3c58b02Sken kuo 	((unsigned long)(&((struct tag *)0L)->member + 1)	\
148e3c58b02Sken kuo 		<= (tag)->hdr.size * 4)
149e3c58b02Sken kuo 
150e3c58b02Sken kuo #define tag_next(t)	((struct tag *)((u32 *)(t) + (t)->hdr.size))
151e3c58b02Sken kuo #define tag_size(type)	((sizeof(struct tag_header) + sizeof(struct type)) >> 2)
152e3c58b02Sken kuo 
153e3c58b02Sken kuo #define for_each_tag(t, base) \
154e3c58b02Sken kuo 	for (t = base; t->hdr.size; t = tag_next(t))
155e3c58b02Sken kuo 
156e3c58b02Sken kuo #ifdef __KERNEL__
157e3c58b02Sken kuo 
158e3c58b02Sken kuo #define __tag __used __attribute__((__section__(".taglist")))
159e3c58b02Sken kuo #define __tagtable(tag, fn) \
160e3c58b02Sken kuo static struct tagtable __tagtable_##fn __tag = { tag, fn }
161e3c58b02Sken kuo 
162e3c58b02Sken kuo /*
163e3c58b02Sken kuo  * Memory map description
164e3c58b02Sken kuo  */
165e3c58b02Sken kuo #define NR_BANKS 8
166e3c58b02Sken kuo 
167e3c58b02Sken kuo struct meminfo {
168e3c58b02Sken kuo 	int nr_banks;
169e3c58b02Sken kuo 	struct {
170e3c58b02Sken kuo 		unsigned long start;
171e3c58b02Sken kuo 		unsigned long size;
172e3c58b02Sken kuo 		int           node;
173e3c58b02Sken kuo 	} bank[NR_BANKS];
174e3c58b02Sken kuo };
175e3c58b02Sken kuo 
176e3c58b02Sken kuo /*
177e3c58b02Sken kuo  * Early command line parameters.
178e3c58b02Sken kuo  */
179e3c58b02Sken kuo struct early_params {
180e3c58b02Sken kuo 	const char *arg;
181e3c58b02Sken kuo 	void (*fn)(char **p);
182e3c58b02Sken kuo };
183e3c58b02Sken kuo 
184e3c58b02Sken kuo #define __early_param(name, fn)					\
185e3c58b02Sken kuo static struct early_params __early_##fn __used	\
186e3c58b02Sken kuo __attribute__((__section__("__early_param"))) = { name, fn }
187e3c58b02Sken kuo 
188e3c58b02Sken kuo #endif
189e3c58b02Sken kuo #endif
190