1
2
3
4
5
6
7
8
9
10
11#include <linux/init.h>
12#include <asm/machdep.h>
13#include <asm/MC68VZ328.h>
14#include "screen.h"
15
16
17
18
19
20static void dragen2_reset(void)
21{
22 local_irq_disable();
23
24#ifdef CONFIG_INIT_LCD
25 PBDATA |= 0x20;
26 PKDATA |= 0x4;
27 LCKCON = 0;
28#endif
29
30 __asm__ __volatile__(
31 "reset\n\t"
32 "moveal #0x04000000, %a0\n\t"
33 "moveal 0(%a0), %sp\n\t"
34 "moveal 4(%a0), %a0\n\t"
35 "jmp (%a0)"
36 );
37}
38
39void __init init_dragen2(char *command, int size)
40{
41 mach_reset = dragen2_reset;
42
43#ifdef CONFIG_DIRECT_IO_ACCESS
44 SCR = 0x10;
45#endif
46
47
48 CSGBB = 0x4000;
49 CSB = 0x1a1;
50
51
52
53 PKSEL |= PK(3);
54 PKDIR |= PK(3);
55 PKDATA |= PK(3);
56
57
58 PFSEL |= PF(5);
59 PFDIR |= PF(5);
60 PFDATA &= ~PF(5);
61
62
63 PFDATA |= PF(5);
64 { int i; for (i = 0; i < 32000; ++i); }
65 PFDATA &= ~PF(5);
66
67
68 PDPOL &= ~PD(1);
69 PDIQEG &= ~PD(1);
70 PDIRQEN |= PD(1);
71
72#ifdef CONFIG_INIT_LCD
73
74 LSSA = (long) screen_bits;
75 LVPW = 0x14;
76 LXMAX = 0x140;
77 LYMAX = 0xef;
78 LRRA = 0;
79 LPXCD = 3;
80 LPICF = 0x08;
81 LPOLCF = 0;
82 LCKCON = 0x80;
83 PCPDEN = 0xff;
84 PCSEL = 0;
85
86
87 PKDIR |= 0x4;
88 PKSEL |= 0x4;
89 PKDATA &= ~0x4;
90
91
92 PBDIR |= 0x20;
93 PBSEL |= 0x20;
94 PBDATA &= ~0x20;
95
96
97 PFDIR |= 0x1;
98 PFSEL &= ~0x1;
99 PWMR = 0x037F;
100#endif
101}
102