1struct syscall_result {
2 long val;
3 int errno;
4};
5
6static struct syscall_result syscall_return(long result)
7{
8 struct syscall_result res;
9 if (((unsigned long)result) >= ((unsigned long)-125)) {
10 res.errno = - result;
11 res.val = -1;
12 } else {
13 res.errno = 0;
14 res.val = result;
15 }
16 return res;
17}
18
19static struct syscall_result syscall0(unsigned long nr)
20{
21 long res;
22 asm volatile(
23 "int $0x80"
24 : "=a" (res)
25 : "a" (nr));
26 return syscall_return(res);
27}
28
29static struct syscall_result syscall1(unsigned long nr, unsigned long arg1)
30{
31 long res;
32 asm volatile(
33 "int $0x80"
34 : "=a" (res)
35 : "a" (nr), "b" (arg1));
36 return syscall_return(res);
37
38}
39
40static struct syscall_result syscall2(unsigned long nr, unsigned long arg1, unsigned long arg2)
41{
42 long res;
43 asm volatile(
44 "int $0x80"
45 : "=a" (res)
46 : "a" (nr), "b" (arg1), "c" (arg2));
47 return syscall_return(res);
48
49}
50
51
52static struct syscall_result syscall3(unsigned long nr, unsigned long arg1, unsigned long arg2,
53 unsigned long arg3)
54{
55 long res;
56 asm volatile(
57 "int $0x80"
58 : "=a" (res)
59 : "a" (nr), "b" (arg1), "c" (arg2), "d" (arg3));
60 return syscall_return(res);
61
62}
63
64static struct syscall_result syscall4(unsigned long nr, unsigned long arg1, unsigned long arg2,
65 unsigned long arg3, unsigned long arg4)
66{
67 long res;
68 asm volatile(
69 "int $0x80"
70 : "=a" (res)
71 : "a" (nr), "b" (arg1), "c" (arg2), "d" (arg3), "S" (arg4));
72 return syscall_return(res);
73
74}
75
76static struct syscall_result syscall5(unsigned long nr, unsigned long arg1, unsigned long arg2,
77 unsigned long arg3, unsigned long arg4, unsigned long arg5)
78{
79 long res;
80 asm volatile(
81 "int $0x80"
82 : "=a" (res)
83 : "a" (nr), "b" (arg1), "c" (arg2), "d" (arg3),
84 "S" (arg4), "D" (arg5));
85 return syscall_return(res);
86
87}
88
89#define NR_exit 1
90#define NR_fork 2
91#define NR_read 3
92#define NR_write 4
93#define NR_open 5
94#define NR_close 6
95#define NR_waitpid 7
96#define NR_creat 8
97#define NR_link 9
98#define NR_unlink 10
99#define NR_execve 11
100#define NR_chdir 12
101#define NR_time 13
102#define NR_mknod 14
103#define NR_chmod 15
104#define NR_lchown 16
105#define NR_break 17
106#define NR_oldstat 18
107#define NR_lseek 19
108#define NR_getpid 20
109#define NR_mount 21
110#define NR_umount 22
111#define NR_setuid 23
112#define NR_getuid 24
113#define NR_stime 25
114#define NR_ptrace 26
115#define NR_alarm 27
116#define NR_oldfstat 28
117#define NR_pause 29
118#define NR_utime 30
119#define NR_stty 31
120#define NR_gtty 32
121#define NR_access 33
122#define NR_nice 34
123#define NR_ftime 35
124#define NR_sync 36
125#define NR_kill 37
126#define NR_rename 38
127#define NR_mkdir 39
128#define NR_rmdir 40
129#define NR_dup 41
130#define NR_pipe 42
131#define NR_times 43
132#define NR_prof 44
133#define NR_brk 45
134#define NR_setgid 46
135#define NR_getgid 47
136#define NR_signal 48
137#define NR_geteuid 49
138#define NR_getegid 50
139#define NR_acct 51
140#define NR_umount2 52
141#define NR_lock 53
142#define NR_ioctl 54
143#define NR_fcntl 55
144#define NR_mpx 56
145#define NR_setpgid 57
146#define NR_ulimit 58
147#define NR_oldolduname 59
148#define NR_umask 60
149#define NR_chroot 61
150#define NR_ustat 62
151#define NR_dup2 63
152#define NR_getppid 64
153#define NR_getpgrp 65
154#define NR_setsid 66
155#define NR_sigaction 67
156#define NR_sgetmask 68
157#define NR_ssetmask 69
158#define NR_setreuid 70
159#define NR_setregid 71
160#define NR_sigsuspend 72
161#define NR_sigpending 73
162#define NR_sethostname 74
163#define NR_setrlimit 75
164#define NR_getrlimit 76
165#define NR_getrusage 77
166#define NR_gettimeofday 78
167#define NR_settimeofday 79
168#define NR_getgroups 80
169#define NR_setgroups 81
170#define NR_select 82
171#define NR_symlink 83
172#define NR_oldlstat 84
173#define NR_readlink 85
174#define NR_uselib 86
175#define NR_swapon 87
176#define NR_reboot 88
177#define NR_readdir 89
178#define NR_mmap 90
179#define NR_munmap 91
180#define NR_truncate 92
181#define NR_ftruncate 93
182#define NR_fchmod 94
183#define NR_fchown 95
184#define NR_getpriority 96
185#define NR_setpriority 97
186#define NR_profil 98
187#define NR_statfs 99
188#define NR_fstatfs 100
189#define NR_ioperm 101
190#define NR_socketcall 102
191#define NR_syslog 103
192#define NR_setitimer 104
193#define NR_getitimer 105
194#define NR_stat 106
195#define NR_lstat 107
196#define NR_fstat 108
197#define NR_olduname 109
198#define NR_iopl 110
199#define NR_vhangup 111
200#define NR_idle 112
201#define NR_vm86old 113
202#define NR_wait4 114
203#define NR_swapoff 115
204#define NR_sysinfo 116
205#define NR_ipc 117
206#define NR_fsync 118
207#define NR_sigreturn 119
208#define NR_clone 120
209#define NR_setdomainname 121
210#define NR_uname 122
211#define NR_modify_ldt 123
212#define NR_adjtimex 124
213#define NR_mprotect 125
214#define NR_sigprocmask 126
215#define NR_create_module 127
216#define NR_init_module 128
217#define NR_delete_module 129
218#define NR_get_kernel_syms 130
219#define NR_quotactl 131
220#define NR_getpgid 132
221#define NR_fchdir 133
222#define NR_bdflush 134
223#define NR_sysfs 135
224#define NR_personality 136
225#define NR_afs_syscall 137
226#define NR_setfsuid 138
227#define NR_setfsgid 139
228#define NR__llseek 140
229#define NR_getdents 141
230#define NR__newselect 142
231#define NR_flock 143
232#define NR_msync 144
233#define NR_readv 145
234#define NR_writev 146
235#define NR_getsid 147
236#define NR_fdatasync 148
237#define NR__sysctl 149
238#define NR_mlock 150
239#define NR_munlock 151
240#define NR_mlockall 152
241#define NR_munlockall 153
242#define NR_sched_setparam 154
243#define NR_sched_getparam 155
244#define NR_sched_setscheduler 156
245#define NR_sched_getscheduler 157
246#define NR_sched_yield 158
247#define NR_sched_get_priority_max 159
248#define NR_sched_get_priority_min 160
249#define NR_sched_rr_get_interval 161
250#define NR_nanosleep 162
251#define NR_mremap 163
252#define NR_setresuid 164
253#define NR_getresuid 165
254#define NR_vm86 166
255#define NR_query_module 167
256#define NR_poll 168
257#define NR_nfsservctl 169
258#define NR_setresgid 170
259#define NR_getresgid 171
260#define NR_prctl 172
261#define NR_rt_sigreturn 173
262#define NR_rt_sigaction 174
263#define NR_rt_sigprocmask 175
264#define NR_rt_sigpending 176
265#define NR_rt_sigtimedwait 177
266#define NR_rt_sigqueueinfo 178
267#define NR_rt_sigsuspend 179
268#define NR_pread 180
269#define NR_pwrite 181
270#define NR_chown 182
271#define NR_getcwd 183
272#define NR_capget 184
273#define NR_capset 185
274#define NR_sigaltstack 186
275#define NR_sendfile 187
276#define NR_getpmsg 188
277#define NR_putpmsg 189
278#define NR_vfork 190
279
280typedef long ssize_t;
281typedef unsigned long size_t;
282
283
284#define STDIN_FILENO 0
285#define STDOUT_FILENO 1
286#define STDERR_FILENO 2
287
288static ssize_t write(int fd, const void *buf, size_t count)
289{
290 struct syscall_result res;
291 res = syscall3(NR_write, fd, (unsigned long)buf, count);
292 return res.val;
293}
294
295static void _exit(int status)
296{
297 struct syscall_result res;
298 res = syscall1(NR_exit, status);
299}
300
301static const char *addr_of_char(unsigned char ch)
302{
303 static const char byte[] = {
304 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
305 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
306 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
307 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
308 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
309 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
310 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
311 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
312 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
313 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
314 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
315 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
316 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
317 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
318 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
319 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
320 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
321 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
322 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
323 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
324 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
325 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
326 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,
327 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
328 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
329 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
330 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7,
331 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
332 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,
333 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
334 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
335 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff,
336 };
337 return byte + ch;
338}
339
340static void console_tx_byte(unsigned char ch)
341{
342 write(STDOUT_FILENO, addr_of_char(ch), 1);
343}
344
345static void console_tx_nibble(unsigned nibble)
346{
347 unsigned char digit;
348 digit = nibble + '0';
349 if (digit > '9') {
350 digit += 39;
351 }
352 console_tx_byte(digit);
353}
354
355static void console_tx_char(unsigned char byte)
356{
357 console_tx_byte(byte);
358}
359
360static void console_tx_hex8(unsigned char value)
361{
362 console_tx_nibble((value >> 4U) & 0x0fU);
363 console_tx_nibble(value & 0x0fU);
364}
365
366static void console_tx_hex16(unsigned short value)
367{
368 console_tx_nibble((value >> 12U) & 0x0FU);
369 console_tx_nibble((value >> 8U) & 0x0FU);
370 console_tx_nibble((value >> 4U) & 0x0FU);
371 console_tx_nibble(value & 0x0FU);
372}
373
374static void console_tx_hex32(unsigned short value)
375{
376 console_tx_nibble((value >> 28U) & 0x0FU);
377 console_tx_nibble((value >> 24U) & 0x0FU);
378 console_tx_nibble((value >> 20U) & 0x0FU);
379 console_tx_nibble((value >> 16U) & 0x0FU);
380 console_tx_nibble((value >> 12U) & 0x0FU);
381 console_tx_nibble((value >> 8U) & 0x0FU);
382 console_tx_nibble((value >> 4U) & 0x0FU);
383 console_tx_nibble(value & 0x0FU);
384}
385
386static void console_tx_string(const char *str)
387{
388 unsigned char ch;
389 while((ch = *str++) != '\0') {
390 console_tx_byte(ch);
391 }
392}
393
394static void print_debug_char(unsigned char byte) { console_tx_char(byte); }
395static void print_debug_hex8(unsigned char value) { console_tx_hex8(value); }
396static void print_debug_hex16(unsigned short value){ console_tx_hex16(value); }
397static void print_debug_hex32(unsigned int value) { console_tx_hex32(value); }
398static void print_debug(const char *str) { console_tx_string(str); }
399
400
401static void setup_coherent_ht_domain(void)
402{
403 static const unsigned int register_values[] = {
404#if 1
405 ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((0) & 0x07) << 8) | ((0x40) & 0xFF)), 0xfff0f0f0, 0x00010101,
406 ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((0) & 0x07) << 8) | ((0x44) & 0xFF)), 0xfff0f0f0, 0x00010101,
407 ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((0) & 0x07) << 8) | ((0x48) & 0xFF)), 0xfff0f0f0, 0x00010101,
408 ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((0) & 0x07) << 8) | ((0x4c) & 0xFF)), 0xfff0f0f0, 0x00010101,
409 ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((0) & 0x07) << 8) | ((0x50) & 0xFF)), 0xfff0f0f0, 0x00010101,
410 ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((0) & 0x07) << 8) | ((0x54) & 0xFF)), 0xfff0f0f0, 0x00010101,
411 ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((0) & 0x07) << 8) | ((0x58) & 0xFF)), 0xfff0f0f0, 0x00010101,
412 ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((0) & 0x07) << 8) | ((0x5c) & 0xFF)), 0xfff0f0f0, 0x00010101,
413# 983 "/home/eric/projects/linuxbios/checkin/solo/freebios2/src/mainboard/amd/solo/auto.c"
414 ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((0) & 0x07) << 8) | ((0x68) & 0xFF)), 0x00800000, 0x0f00840f,
415# 1005 "/home/eric/projects/linuxbios/checkin/solo/freebios2/src/mainboard/amd/solo/auto.c"
416 ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((0) & 0x07) << 8) | ((0x6C) & 0xFF)), 0xffffff8c, 0x00000000 | (1 << 6) |(1 << 5)| (1 << 4),
417# 1082 "/home/eric/projects/linuxbios/checkin/solo/freebios2/src/mainboard/amd/solo/auto.c"
418 ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((0) & 0x07) << 8) | ((0x84) & 0xFF)), 0x00009c05, 0x11110020,
419# 1127 "/home/eric/projects/linuxbios/checkin/solo/freebios2/src/mainboard/amd/solo/auto.c"
420 ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((0) & 0x07) << 8) | ((0x88) & 0xFF)), 0xfffff0ff, 0x00000200,
421# 1148 "/home/eric/projects/linuxbios/checkin/solo/freebios2/src/mainboard/amd/solo/auto.c"
422 ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((0) & 0x07) << 8) | ((0x94) & 0xFF)), 0xff000000, 0x00ff0000,
423# 1182 "/home/eric/projects/linuxbios/checkin/solo/freebios2/src/mainboard/amd/solo/auto.c"
424 ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0x44) & 0xFF)), 0x0000f8f8, 0x003f0000,
425
426
427
428
429 ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0x4C) & 0xFF)), 0x0000f8f8, 0x00000001,
430 ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0x54) & 0xFF)), 0x0000f8f8, 0x00000002,
431 ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0x5C) & 0xFF)), 0x0000f8f8, 0x00000003,
432 ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0x64) & 0xFF)), 0x0000f8f8, 0x00000004,
433 ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0x6C) & 0xFF)), 0x0000f8f8, 0x00000005,
434 ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0x74) & 0xFF)), 0x0000f8f8, 0x00000006,
435 ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0x7C) & 0xFF)), 0x0000f8f8, 0x00000007,
436# 1224 "/home/eric/projects/linuxbios/checkin/solo/freebios2/src/mainboard/amd/solo/auto.c"
437 ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0x40) & 0xFF)), 0x0000f8fc, 0x00000003,
438
439 ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0x48) & 0xFF)), 0x0000f8fc, 0x00400000,
440 ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0x50) & 0xFF)), 0x0000f8fc, 0x00400000,
441 ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0x58) & 0xFF)), 0x0000f8fc, 0x00400000,
442 ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0x60) & 0xFF)), 0x0000f8fc, 0x00400000,
443 ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0x68) & 0xFF)), 0x0000f8fc, 0x00400000,
444 ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0x70) & 0xFF)), 0x0000f8fc, 0x00400000,
445 ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0x78) & 0xFF)), 0x0000f8fc, 0x00400000,
446# 1276 "/home/eric/projects/linuxbios/checkin/solo/freebios2/src/mainboard/amd/solo/auto.c"
447 ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0x84) & 0xFF)), 0x00000048, 0x00e1ff00,
448 ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0x8C) & 0xFF)), 0x00000048, 0x00dfff00,
449 ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0x94) & 0xFF)), 0x00000048, 0x00e3ff00,
450 ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0x9C) & 0xFF)), 0x00000048, 0x00000000,
451 ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0xA4) & 0xFF)), 0x00000048, 0x00000000,
452 ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0xAC) & 0xFF)), 0x00000048, 0x00000000,
453 ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0xB4) & 0xFF)), 0x00000048, 0x00000b00,
454 ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0xBC) & 0xFF)), 0x00000048, 0x00fe0b00,
455# 1311 "/home/eric/projects/linuxbios/checkin/solo/freebios2/src/mainboard/amd/solo/auto.c"
456 ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0x80) & 0xFF)), 0x000000f0, 0x00e00003,
457 ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0x88) & 0xFF)), 0x000000f0, 0x00d80003,
458 ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0x90) & 0xFF)), 0x000000f0, 0x00e20003,
459 ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0x98) & 0xFF)), 0x000000f0, 0x00000000,
460 ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0xA0) & 0xFF)), 0x000000f0, 0x00000000,
461 ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0xA8) & 0xFF)), 0x000000f0, 0x00000000,
462 ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0xB0) & 0xFF)), 0x000000f0, 0x00000a03,
463
464 ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0xB8) & 0xFF)), 0x000000f0, 0x00400003,
465# 1350 "/home/eric/projects/linuxbios/checkin/solo/freebios2/src/mainboard/amd/solo/auto.c"
466 ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0xC4) & 0xFF)), 0xFE000FC8, 0x0000d000,
467 ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0xCC) & 0xFF)), 0xFE000FC8, 0x000ff000,
468 ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0xD4) & 0xFF)), 0xFE000FC8, 0x00000000,
469 ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0xDC) & 0xFF)), 0xFE000FC8, 0x00000000,
470# 1380 "/home/eric/projects/linuxbios/checkin/solo/freebios2/src/mainboard/amd/solo/auto.c"
471 ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0xC0) & 0xFF)), 0xFE000FCC, 0x0000d003,
472 ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0xC8) & 0xFF)), 0xFE000FCC, 0x00001013,
473 ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0xD0) & 0xFF)), 0xFE000FCC, 0x00000000,
474 ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0xD8) & 0xFF)), 0xFE000FCC, 0x00000000,
475# 1421 "/home/eric/projects/linuxbios/checkin/solo/freebios2/src/mainboard/amd/solo/auto.c"
476 ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0xE0) & 0xFF)), 0x0000FC88, 0xff000003,
477 ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0xE4) & 0xFF)), 0x0000FC88, 0x00000000,
478 ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0xE8) & 0xFF)), 0x0000FC88, 0x00000000,
479 ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0xEC) & 0xFF)), 0x0000FC88, 0x00000000,
480#else
481#define PCI_ADDR(BUS, DEV, FN, WHERE) ( \
482 (((BUS) & 0xFF) << 16) | \
483 (((DEV) & 0x1f) << 11) | \
484 (((FN) & 0x07) << 8) | \
485 ((WHERE) & 0xFF))
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512 PCI_ADDR(0, 0x18, 0, 0x40), 0xfff0f0f0, 0x00010101,
513 PCI_ADDR(0, 0x18, 0, 0x44), 0xfff0f0f0, 0x00010101,
514 PCI_ADDR(0, 0x18, 0, 0x48), 0xfff0f0f0, 0x00010101,
515 PCI_ADDR(0, 0x18, 0, 0x4c), 0xfff0f0f0, 0x00010101,
516 PCI_ADDR(0, 0x18, 0, 0x50), 0xfff0f0f0, 0x00010101,
517 PCI_ADDR(0, 0x18, 0, 0x54), 0xfff0f0f0, 0x00010101,
518 PCI_ADDR(0, 0x18, 0, 0x58), 0xfff0f0f0, 0x00010101,
519 PCI_ADDR(0, 0x18, 0, 0x5c), 0xfff0f0f0, 0x00010101,
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611 PCI_ADDR(0, 0x18, 0, 0x68), 0x00800000, 0x0f00840f,
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633 PCI_ADDR(0, 0x18, 0, 0x6C), 0xffffff8c, 0x00000000 | (1 << 6) |(1 << 5)| (1 << 4),
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710 PCI_ADDR(0, 0x18, 0, 0x84), 0x00009c05, 0x11110020,
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755 PCI_ADDR(0, 0x18, 0, 0x88), 0xfffff0ff, 0x00000200,
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776 PCI_ADDR(0, 0x18, 0, 0x94), 0xff000000, 0x00ff0000,
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809#if MEMORY_1024MB
810 PCI_ADDR(0, 0x18, 1, 0x44), 0x0000f8f8, 0x003f0000,
811#endif
812#if MEMORY_512MB
813 PCI_ADDR(0, 0x18, 1, 0x44), 0x0000f8f8, 0x001f0000,
814#endif
815 PCI_ADDR(0, 0x18, 1, 0x4C), 0x0000f8f8, 0x00000001,
816 PCI_ADDR(0, 0x18, 1, 0x54), 0x0000f8f8, 0x00000002,
817 PCI_ADDR(0, 0x18, 1, 0x5C), 0x0000f8f8, 0x00000003,
818 PCI_ADDR(0, 0x18, 1, 0x64), 0x0000f8f8, 0x00000004,
819 PCI_ADDR(0, 0x18, 1, 0x6C), 0x0000f8f8, 0x00000005,
820 PCI_ADDR(0, 0x18, 1, 0x74), 0x0000f8f8, 0x00000006,
821 PCI_ADDR(0, 0x18, 1, 0x7C), 0x0000f8f8, 0x00000007,
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852 PCI_ADDR(0, 0x18, 1, 0x40), 0x0000f8fc, 0x00000003,
853#if MEMORY_1024MB
854 PCI_ADDR(0, 0x18, 1, 0x48), 0x0000f8fc, 0x00400000,
855 PCI_ADDR(0, 0x18, 1, 0x50), 0x0000f8fc, 0x00400000,
856 PCI_ADDR(0, 0x18, 1, 0x58), 0x0000f8fc, 0x00400000,
857 PCI_ADDR(0, 0x18, 1, 0x60), 0x0000f8fc, 0x00400000,
858 PCI_ADDR(0, 0x18, 1, 0x68), 0x0000f8fc, 0x00400000,
859 PCI_ADDR(0, 0x18, 1, 0x70), 0x0000f8fc, 0x00400000,
860 PCI_ADDR(0, 0x18, 1, 0x78), 0x0000f8fc, 0x00400000,
861#endif
862#if MEMORY_512MB
863 PCI_ADDR(0, 0x18, 1, 0x48), 0x0000f8fc, 0x00200000,
864 PCI_ADDR(0, 0x18, 1, 0x50), 0x0000f8fc, 0x00200000,
865 PCI_ADDR(0, 0x18, 1, 0x58), 0x0000f8fc, 0x00200000,
866 PCI_ADDR(0, 0x18, 1, 0x60), 0x0000f8fc, 0x00200000,
867 PCI_ADDR(0, 0x18, 1, 0x68), 0x0000f8fc, 0x00200000,
868 PCI_ADDR(0, 0x18, 1, 0x70), 0x0000f8fc, 0x00200000,
869 PCI_ADDR(0, 0x18, 1, 0x78), 0x0000f8fc, 0x00200000,
870#endif
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904 PCI_ADDR(0, 0x18, 1, 0x84), 0x00000048, 0x00e1ff00,
905 PCI_ADDR(0, 0x18, 1, 0x8C), 0x00000048, 0x00dfff00,
906 PCI_ADDR(0, 0x18, 1, 0x94), 0x00000048, 0x00e3ff00,
907 PCI_ADDR(0, 0x18, 1, 0x9C), 0x00000048, 0x00000000,
908 PCI_ADDR(0, 0x18, 1, 0xA4), 0x00000048, 0x00000000,
909 PCI_ADDR(0, 0x18, 1, 0xAC), 0x00000048, 0x00000000,
910 PCI_ADDR(0, 0x18, 1, 0xB4), 0x00000048, 0x00000b00,
911 PCI_ADDR(0, 0x18, 1, 0xBC), 0x00000048, 0x00fe0b00,
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939 PCI_ADDR(0, 0x18, 1, 0x80), 0x000000f0, 0x00e00003,
940 PCI_ADDR(0, 0x18, 1, 0x88), 0x000000f0, 0x00d80003,
941 PCI_ADDR(0, 0x18, 1, 0x90), 0x000000f0, 0x00e20003,
942 PCI_ADDR(0, 0x18, 1, 0x98), 0x000000f0, 0x00000000,
943 PCI_ADDR(0, 0x18, 1, 0xA0), 0x000000f0, 0x00000000,
944 PCI_ADDR(0, 0x18, 1, 0xA8), 0x000000f0, 0x00000000,
945 PCI_ADDR(0, 0x18, 1, 0xB0), 0x000000f0, 0x00000a03,
946#if MEMORY_1024MB
947 PCI_ADDR(0, 0x18, 1, 0xB8), 0x000000f0, 0x00400003,
948#endif
949#if MEMORY_512MB
950 PCI_ADDR(0, 0x18, 1, 0xB8), 0x000000f0, 0x00200003,
951#endif
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978 PCI_ADDR(0, 0x18, 1, 0xC4), 0xFE000FC8, 0x0000d000,
979 PCI_ADDR(0, 0x18, 1, 0xCC), 0xFE000FC8, 0x000ff000,
980 PCI_ADDR(0, 0x18, 1, 0xD4), 0xFE000FC8, 0x00000000,
981 PCI_ADDR(0, 0x18, 1, 0xDC), 0xFE000FC8, 0x00000000,
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008 PCI_ADDR(0, 0x18, 1, 0xC0), 0xFE000FCC, 0x0000d003,
1009 PCI_ADDR(0, 0x18, 1, 0xC8), 0xFE000FCC, 0x00001013,
1010 PCI_ADDR(0, 0x18, 1, 0xD0), 0xFE000FCC, 0x00000000,
1011 PCI_ADDR(0, 0x18, 1, 0xD8), 0xFE000FCC, 0x00000000,
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049 PCI_ADDR(0, 0x18, 1, 0xE0), 0x0000FC88, 0xff000003,
1050 PCI_ADDR(0, 0x18, 1, 0xE4), 0x0000FC88, 0x00000000,
1051 PCI_ADDR(0, 0x18, 1, 0xE8), 0x0000FC88, 0x00000000,
1052 PCI_ADDR(0, 0x18, 1, 0xEC), 0x0000FC88, 0x00000000,
1053#endif
1054 };
1055 int i;
1056 int max;
1057 print_debug("setting up coherent ht domain....\r\n");
1058 max = sizeof(register_values)/sizeof(register_values[0]);
1059 for(i = 0; i < max; i += 3) {
1060 unsigned long reg;
1061#if 1
1062 print_debug_hex32(register_values[i]);
1063 print_debug(" <-");
1064 print_debug_hex32(register_values[i+2]);
1065 print_debug("\r\n");
1066#endif
1067#if 0
1068 reg = pci_read_config32(register_values[i]);
1069 reg &= register_values[i+1];
1070 reg |= register_values[i+2] & ~register_values[i+1];
1071 pci_write_config32(register_values[i], reg);
1072#endif
1073 }
1074 print_debug("done.\r\n");
1075}
1076
1077static void main(void)
1078{
1079 static const char msg[] = "hello world\r\n";
1080#if 0
1081 write(STDOUT_FILENO, msg, sizeof(msg));
1082#endif
1083#if 1
1084 setup_coherent_ht_domain();
1085#endif
1086 _exit(0);
1087}
1088