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