Skip to content

Commit

Permalink
[PATCH] m68knommu: create common config code for all 68VZ328 platforms
Browse files Browse the repository at this point in the history
Create common 68VZ328 config code. It is essentially the same for
all boards that use this, so no point having a version of it for
each.

Signed-off-by: Greg Ungerer <gerg@uclinux.com>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
  • Loading branch information
Greg Ungerer authored and Linus Torvalds committed Sep 9, 2005
1 parent 55f37de commit 8c2b58c
Showing 1 changed file with 210 additions and 0 deletions.
210 changes: 210 additions & 0 deletions arch/m68knommu/platform/68VZ328/config.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,210 @@
/***************************************************************************/

/*
* linux/arch/m68knommu/platform/68VZ328/config.c
*
* Copyright (C) 1993 Hamish Macdonald
* Copyright (C) 1999 D. Jeff Dionne
* Copyright (C) 2001 Georges Menie, Ken Desmet
*
* This file is subject to the terms and conditions of the GNU General Public
* License. See the file COPYING in the main directory of this archive
* for more details.
*/

/***************************************************************************/

#include <linux/config.h>
#include <linux/types.h>
#include <linux/kernel.h>
#include <linux/mm.h>
#include <linux/tty.h>
#include <linux/console.h>
#include <linux/kd.h>
#include <linux/netdevice.h>

#include <asm/setup.h>
#include <asm/system.h>
#include <asm/pgtable.h>
#include <asm/irq.h>
#include <asm/machdep.h>
#include <asm/MC68VZ328.h>
#include <asm/bootstd.h>

#ifdef CONFIG_INIT_LCD
#include "bootlogo.h"
#endif

/***************************************************************************/

void m68328_timer_init(irqreturn_t (*timer_routine) (int, void *, struct pt_regs *));
void m68328_timer_tick(void);
unsigned long m68328_timer_gettimeoffset(void);
void m68328_timer_gettod(int *year, int *mon, int *day, int *hour, int *min, int *sec);

/***************************************************************************/
/* Init Drangon Engine hardware */
/***************************************************************************/
#if defined(CONFIG_DRAGEN2)

static void m68vz328_reset(void)
{
local_irq_disable();

#ifdef CONFIG_INIT_LCD
PBDATA |= 0x20; /* disable CCFL light */
PKDATA |= 0x4; /* disable LCD controller */
LCKCON = 0;
#endif

__asm__ __volatile__(
"reset\n\t"
"moveal #0x04000000, %a0\n\t"
"moveal 0(%a0), %sp\n\t"
"moveal 4(%a0), %a0\n\t"
"jmp (%a0)"
);
}

static void init_hardware(char *command, int size)
{
#ifdef CONFIG_DIRECT_IO_ACCESS
SCR = 0x10; /* allow user access to internal registers */
#endif

/* CSGB Init */
CSGBB = 0x4000;
CSB = 0x1a1;

/* CS8900 init */
/* PK3: hardware sleep function pin, active low */
PKSEL |= PK(3); /* select pin as I/O */
PKDIR |= PK(3); /* select pin as output */
PKDATA |= PK(3); /* set pin high */

/* PF5: hardware reset function pin, active high */
PFSEL |= PF(5); /* select pin as I/O */
PFDIR |= PF(5); /* select pin as output */
PFDATA &= ~PF(5); /* set pin low */

/* cs8900 hardware reset */
PFDATA |= PF(5);
{ int i; for (i = 0; i < 32000; ++i); }
PFDATA &= ~PF(5);

/* INT1 enable (cs8900 IRQ) */
PDPOL &= ~PD(1); /* active high signal */
PDIQEG &= ~PD(1);
PDIRQEN |= PD(1); /* IRQ enabled */

#ifdef CONFIG_68328_SERIAL_UART2
/* Enable RXD TXD port bits to enable UART2 */
PJSEL &= ~(PJ(5) | PJ(4));
#endif

#ifdef CONFIG_INIT_LCD
/* initialize LCD controller */
LSSA = (long) screen_bits;
LVPW = 0x14;
LXMAX = 0x140;
LYMAX = 0xef;
LRRA = 0;
LPXCD = 3;
LPICF = 0x08;
LPOLCF = 0;
LCKCON = 0x80;
PCPDEN = 0xff;
PCSEL = 0;

/* Enable LCD controller */
PKDIR |= 0x4;
PKSEL |= 0x4;
PKDATA &= ~0x4;

/* Enable CCFL backlighting circuit */
PBDIR |= 0x20;
PBSEL |= 0x20;
PBDATA &= ~0x20;

/* contrast control register */
PFDIR |= 0x1;
PFSEL &= ~0x1;
PWMR = 0x037F;
#endif
}

/***************************************************************************/
/* Init RT-Control uCdimm hardware */
/***************************************************************************/
#elif defined(CONFIG_UCDIMM)

static void m68vz328_reset(void)
{
local_irq_disable();
asm volatile ("
moveal #0x10c00000, %a0;
moveb #0, 0xFFFFF300;
moveal 0(%a0), %sp;
moveal 4(%a0), %a0;
jmp (%a0);
");
}

unsigned char *cs8900a_hwaddr;
static int errno;

_bsc0(char *, getserialnum)
_bsc1(unsigned char *, gethwaddr, int, a)
_bsc1(char *, getbenv, char *, a)

static void init_hardware(char *command, int size)
{
char *p;

printk(KERN_INFO "uCdimm serial string [%s]\n", getserialnum());
p = cs8900a_hwaddr = gethwaddr(0);
printk(KERN_INFO "uCdimm hwaddr %.2x:%.2x:%.2x:%.2x:%.2x:%.2x\n",
p[0], p[1], p[2], p[3], p[4], p[5]);
p = getbenv("APPEND");
if (p)
strcpy(p, command);
else
command[0] = 0;
}

/***************************************************************************/
#else

static void m68vz328_reset(void)
{
}

static void init_hardware(char *command, int size)
{
}

/***************************************************************************/
#endif
/***************************************************************************/

void config_BSP(char *command, int size)
{
printk(KERN_INFO "68VZ328 DragonBallVZ support (c) 2001 Lineo, Inc.\n");

#if defined(CONFIG_BOOTPARAM)
strncpy(command, CONFIG_BOOTPARAM_STRING, size);
command[size-1] = 0;
#else
memset(command, 0, size);
#endif

init_hardware(command, size);

mach_sched_init = (void *) m68328_timer_init;
mach_tick = m68328_timer_tick;
mach_gettimeoffset = m68328_timer_gettimeoffset;
mach_gettod = m68328_timer_gettod;
mach_reset = m68vz328_reset;
}

/***************************************************************************/

0 comments on commit 8c2b58c

Please sign in to comment.