• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /netgear-WNDR4500v2-V1.0.0.60_1.0.38/src/linux/linux-2.6/arch/m68knommu/platform/68VZ328/
1/***************************************************************************/
2
3/*
4 *  linux/arch/m68knommu/platform/68VZ328/config.c
5 *
6 *  Copyright (C) 1993 Hamish Macdonald
7 *  Copyright (C) 1999 D. Jeff Dionne
8 *  Copyright (C) 2001 Georges Menie, Ken Desmet
9 *
10 * This file is subject to the terms and conditions of the GNU General Public
11 * License.  See the file COPYING in the main directory of this archive
12 * for more details.
13 */
14
15/***************************************************************************/
16
17#include <linux/types.h>
18#include <linux/kernel.h>
19#include <linux/mm.h>
20#include <linux/tty.h>
21#include <linux/console.h>
22#include <linux/kd.h>
23#include <linux/netdevice.h>
24#include <linux/interrupt.h>
25
26#include <asm/setup.h>
27#include <asm/system.h>
28#include <asm/pgtable.h>
29#include <asm/irq.h>
30#include <asm/machdep.h>
31#include <asm/MC68VZ328.h>
32#include <asm/bootstd.h>
33
34#ifdef CONFIG_INIT_LCD
35#include "bootlogo.h"
36#endif
37
38/***************************************************************************/
39
40void m68328_timer_init(irq_handler_t timer_routine);
41void m68328_timer_tick(void);
42unsigned long m68328_timer_gettimeoffset(void);
43void m68328_timer_gettod(int *year, int *mon, int *day, int *hour, int *min, int *sec);
44
45/***************************************************************************/
46/*                        Init Drangon Engine hardware                     */
47/***************************************************************************/
48#if defined(CONFIG_DRAGEN2)
49
50static void m68vz328_reset(void)
51{
52	local_irq_disable();
53
54#ifdef CONFIG_INIT_LCD
55	PBDATA |= 0x20;				/* disable CCFL light */
56	PKDATA |= 0x4;				/* disable LCD controller */
57	LCKCON = 0;
58#endif
59
60	__asm__ __volatile__(
61		"reset\n\t"
62		"moveal #0x04000000, %a0\n\t"
63		"moveal 0(%a0), %sp\n\t"
64		"moveal 4(%a0), %a0\n\t"
65		"jmp (%a0)"
66	);
67}
68
69static void init_hardware(char *command, int size)
70{
71#ifdef CONFIG_DIRECT_IO_ACCESS
72	SCR = 0x10;					/* allow user access to internal registers */
73#endif
74
75	/* CSGB Init */
76	CSGBB = 0x4000;
77	CSB = 0x1a1;
78
79	/* CS8900 init */
80	/* PK3: hardware sleep function pin, active low */
81	PKSEL |= PK(3);				/* select pin as I/O */
82	PKDIR |= PK(3);				/* select pin as output */
83	PKDATA |= PK(3);			/* set pin high */
84
85	/* PF5: hardware reset function pin, active high */
86	PFSEL |= PF(5);				/* select pin as I/O */
87	PFDIR |= PF(5);				/* select pin as output */
88	PFDATA &= ~PF(5);			/* set pin low */
89
90	/* cs8900 hardware reset */
91	PFDATA |= PF(5);
92	{ int i; for (i = 0; i < 32000; ++i); }
93	PFDATA &= ~PF(5);
94
95	/* INT1 enable (cs8900 IRQ) */
96	PDPOL &= ~PD(1);			/* active high signal */
97	PDIQEG &= ~PD(1);
98	PDIRQEN |= PD(1);			/* IRQ enabled */
99
100#ifdef CONFIG_68328_SERIAL_UART2
101	/* Enable RXD TXD port bits to enable UART2 */
102	PJSEL &= ~(PJ(5) | PJ(4));
103#endif
104
105#ifdef CONFIG_INIT_LCD
106	/* initialize LCD controller */
107	LSSA = (long) screen_bits;
108	LVPW = 0x14;
109	LXMAX = 0x140;
110	LYMAX = 0xef;
111	LRRA = 0;
112	LPXCD = 3;
113	LPICF = 0x08;
114	LPOLCF = 0;
115	LCKCON = 0x80;
116	PCPDEN = 0xff;
117	PCSEL = 0;
118
119	/* Enable LCD controller */
120	PKDIR |= 0x4;
121	PKSEL |= 0x4;
122	PKDATA &= ~0x4;
123
124	/* Enable CCFL backlighting circuit */
125	PBDIR |= 0x20;
126	PBSEL |= 0x20;
127	PBDATA &= ~0x20;
128
129	/* contrast control register */
130	PFDIR |= 0x1;
131	PFSEL &= ~0x1;
132	PWMR = 0x037F;
133#endif
134}
135
136/***************************************************************************/
137/*                      Init RT-Control uCdimm hardware                    */
138/***************************************************************************/
139#elif defined(CONFIG_UCDIMM)
140
141static void m68vz328_reset(void)
142{
143	local_irq_disable();
144	asm volatile (
145		"moveal #0x10c00000, %a0;\n\t"
146		"moveb #0, 0xFFFFF300;\n\t"
147		"moveal 0(%a0), %sp;\n\t"
148		"moveal 4(%a0), %a0;\n\t"
149		"jmp (%a0);\n"
150	);
151}
152
153unsigned char *cs8900a_hwaddr;
154static int errno;
155
156_bsc0(char *, getserialnum)
157_bsc1(unsigned char *, gethwaddr, int, a)
158_bsc1(char *, getbenv, char *, a)
159
160static void init_hardware(char *command, int size)
161{
162	char *p;
163
164	printk(KERN_INFO "uCdimm serial string [%s]\n", getserialnum());
165	p = cs8900a_hwaddr = gethwaddr(0);
166	printk(KERN_INFO "uCdimm hwaddr %.2x:%.2x:%.2x:%.2x:%.2x:%.2x\n",
167		p[0], p[1], p[2], p[3], p[4], p[5]);
168	p = getbenv("APPEND");
169	if (p)
170		strcpy(p, command);
171	else
172		command[0] = 0;
173}
174
175/***************************************************************************/
176#else
177
178static void m68vz328_reset(void)
179{
180}
181
182static void init_hardware(char *command, int size)
183{
184}
185
186/***************************************************************************/
187#endif
188/***************************************************************************/
189
190void config_BSP(char *command, int size)
191{
192	printk(KERN_INFO "68VZ328 DragonBallVZ support (c) 2001 Lineo, Inc.\n");
193
194#if defined(CONFIG_BOOTPARAM)
195	strncpy(command, CONFIG_BOOTPARAM_STRING, size);
196	command[size-1] = 0;
197#else
198	memset(command, 0, size);
199#endif
200
201	init_hardware(command, size);
202
203	mach_sched_init = (void *) m68328_timer_init;
204	mach_tick = m68328_timer_tick;
205	mach_gettimeoffset = m68328_timer_gettimeoffset;
206	mach_gettod = m68328_timer_gettod;
207	mach_reset = m68vz328_reset;
208}
209
210/***************************************************************************/
211