2005-09-09 09:32:14 +10:00
/***************************************************************************/
/*
2012-12-04 23:04:49 +00:00
* m68VZ328 . c - 68 VZ328 specific config
2005-09-09 09:32:14 +10:00
*
* 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 .
*/
/***************************************************************************/
2013-06-30 11:58:40 +02:00
# include <linux/init.h>
2005-09-09 09:32:14 +10:00
# include <linux/types.h>
# include <linux/kernel.h>
# include <linux/kd.h>
# include <linux/netdevice.h>
2007-03-07 11:28:13 +10:00
# include <linux/interrupt.h>
2007-10-24 12:03:32 +10:00
# include <linux/irq.h>
2012-01-23 13:25:56 +10:00
# include <linux/rtc.h>
2005-09-09 09:32:14 +10:00
# include <asm/pgtable.h>
# include <asm/machdep.h>
# include <asm/MC68VZ328.h>
# include <asm/bootstd.h>
# ifdef CONFIG_INIT_LCD
2012-12-04 23:04:49 +00:00
# include "bootlogo-vz.h"
2005-09-09 09:32:14 +10:00
# endif
/***************************************************************************/
2012-01-23 13:25:56 +10:00
int m68328_hwclk ( int set , struct rtc_time * t ) ;
2005-09-09 09:32:14 +10:00
/***************************************************************************/
/* 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) "
) ;
}
2013-06-30 11:58:40 +02:00
static void __init init_hardware ( char * command , int size )
2005-09-09 09:32:14 +10:00
{
# 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_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 ( ) ;
2006-06-28 16:21:56 +10:00
asm volatile (
" moveal #0x10c00000, %a0; \n \t "
" moveb #0, 0xFFFFF300; \n \t "
" moveal 0(%a0), %sp; \n \t "
" moveal 4(%a0), %a0; \n \t "
" jmp (%a0); \n "
) ;
2005-09-09 09:32:14 +10:00
}
unsigned char * cs8900a_hwaddr ;
static int errno ;
_bsc0 ( char * , getserialnum )
_bsc1 ( unsigned char * , gethwaddr , int , a )
_bsc1 ( char * , getbenv , char * , a )
2013-06-30 11:58:40 +02:00
static void __init init_hardware ( char * command , int size )
2005-09-09 09:32:14 +10:00
{
char * p ;
2016-12-06 17:00:33 +01:00
pr_info ( " uCdimm serial string [%s] \n " , getserialnum ( ) ) ;
2005-09-09 09:32:14 +10:00
p = cs8900a_hwaddr = gethwaddr ( 0 ) ;
2016-12-06 17:00:33 +01:00
pr_info ( " uCdimm hwaddr %pM \n " , p ) ;
2005-09-09 09:32:14 +10:00
p = getbenv ( " APPEND " ) ;
if ( p )
strcpy ( p , command ) ;
else
command [ 0 ] = 0 ;
}
/***************************************************************************/
# else
static void m68vz328_reset ( void )
{
}
2013-06-30 11:58:40 +02:00
static void __init init_hardware ( char * command , int size )
2005-09-09 09:32:14 +10:00
{
}
/***************************************************************************/
# endif
/***************************************************************************/
2013-06-30 11:58:40 +02:00
void __init config_BSP ( char * command , int size )
2005-09-09 09:32:14 +10:00
{
2016-12-06 17:00:33 +01:00
pr_info ( " 68VZ328 DragonBallVZ support (c) 2001 Lineo, Inc. \n " ) ;
2005-09-09 09:32:14 +10:00
init_hardware ( command , size ) ;
2014-04-02 23:43:12 +09:00
mach_sched_init = hw_timer_init ;
2012-01-23 13:25:56 +10:00
mach_hwclk = m68328_hwclk ;
2005-09-09 09:32:14 +10:00
mach_reset = m68vz328_reset ;
}
/***************************************************************************/