2005-04-16 15:20:36 -07:00
/*
* Setup pointers to hardware - dependent routines .
*
* 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 .
*
2006-01-18 17:37:07 +00:00
* Copyright ( C ) 1996 , 97 , 98 , 2000 , 03 , 04 , 06 Ralf Baechle ( ralf @ linux - mips . org )
2007-05-17 14:53:12 +02:00
* Copyright ( C ) 2006 , 2007 Thomas Bogendoerfer ( tsbogend @ alpha . franken . de )
2005-04-16 15:20:36 -07:00
*/
# include <linux/eisa.h>
# include <linux/init.h>
# include <linux/console.h>
# include <linux/fb.h>
2006-07-10 04:44:13 -07:00
# include <linux/screen_info.h>
2005-04-16 15:20:36 -07:00
2006-06-13 13:59:01 +02:00
# ifdef CONFIG_ARC
2007-09-05 08:59:34 +02:00
# include <asm/fw/arc/types.h>
2005-04-16 15:20:36 -07:00
# include <asm/sgialib.h>
2006-06-13 13:59:01 +02:00
# endif
2005-04-16 15:20:36 -07:00
# include <asm/io.h>
# include <asm/reboot.h>
# include <asm/sni.h>
2006-12-28 18:22:32 +01:00
unsigned int sni_brd_type ;
2005-04-16 15:20:36 -07:00
extern void sni_machine_restart ( char * command ) ;
extern void sni_machine_power_off ( void ) ;
static void __init sni_display_setup ( void )
{
2006-06-13 13:59:01 +02:00
# if defined(CONFIG_VT) && defined(CONFIG_VGA_CONSOLE) && defined(CONFIG_ARC)
2005-04-16 15:20:36 -07:00
struct screen_info * si = & screen_info ;
DISPLAY_STATUS * di ;
di = ArcGetDisplayStatus ( 1 ) ;
if ( di ) {
si - > orig_x = di - > CursorXPosition ;
si - > orig_y = di - > CursorYPosition ;
si - > orig_video_cols = di - > CursorMaxXPosition ;
si - > orig_video_lines = di - > CursorMaxYPosition ;
si - > orig_video_isVGA = VIDEO_TYPE_VGAC ;
si - > orig_video_points = 16 ;
}
# endif
}
2006-06-18 01:32:22 +01:00
void __init plat_mem_setup ( void )
2005-04-16 15:20:36 -07:00
{
set_io_port_base ( SNI_PORT_BASE ) ;
2006-12-28 18:22:32 +01:00
// ioport_resource.end = sni_io_resource.end;
2005-04-16 15:20:36 -07:00
/*
* Setup ( E ) ISA I / O memory access stuff
*/
isa_slot_offset = 0xb0000000 ;
# ifdef CONFIG_EISA
EISA_bus = 1 ;
# endif
2006-12-28 18:22:32 +01:00
switch ( sni_brd_type ) {
case SNI_BRD_10 :
case SNI_BRD_10NEW :
case SNI_BRD_TOWER_OASIC :
case SNI_BRD_MINITOWER :
sni_a20r_init ( ) ;
break ;
case SNI_BRD_PCI_TOWER :
case SNI_BRD_PCI_TOWER_CPLUS :
sni_pcit_init ( ) ;
break ;
case SNI_BRD_RM200 :
sni_rm200_init ( ) ;
break ;
case SNI_BRD_PCI_MTOWER :
case SNI_BRD_PCI_DESKTOP :
case SNI_BRD_PCI_MTOWER_CPLUS :
sni_pcimt_init ( ) ;
break ;
}
2005-04-16 15:20:36 -07:00
_machine_restart = sni_machine_restart ;
2006-01-18 17:37:07 +00:00
pm_power_off = sni_machine_power_off ;
2005-04-16 15:20:36 -07:00
sni_display_setup ( ) ;
}
2007-05-17 14:53:12 +02:00
# if CONFIG_PCI
# include <linux/pci.h>
# include <video/vga.h>
# include <video/cirrus.h>
static void __devinit quirk_cirrus_ram_size ( struct pci_dev * dev )
{
u16 cmd ;
/*
* firmware doesn ' t set the ram size correct , so we
* need to do it here , otherwise we get screen corruption
* on older Cirrus chips
*/
2007-10-11 23:46:15 +01:00
pci_read_config_word ( dev , PCI_COMMAND , & cmd ) ;
2007-05-17 14:53:12 +02:00
if ( ( cmd & ( PCI_COMMAND_IO | PCI_COMMAND_MEMORY ) )
= = ( PCI_COMMAND_IO | PCI_COMMAND_MEMORY ) ) {
2007-10-11 23:46:15 +01:00
vga_wseq ( NULL , CL_SEQR6 , 0x12 ) ; /* unlock all extension registers */
vga_wseq ( NULL , CL_SEQRF , 0x18 ) ;
2007-05-17 14:53:12 +02:00
}
}
DECLARE_PCI_FIXUP_FINAL ( PCI_VENDOR_ID_CIRRUS , PCI_DEVICE_ID_CIRRUS_5434_8 ,
quirk_cirrus_ram_size ) ;
DECLARE_PCI_FIXUP_FINAL ( PCI_VENDOR_ID_CIRRUS , PCI_DEVICE_ID_CIRRUS_5436 ,
quirk_cirrus_ram_size ) ;
DECLARE_PCI_FIXUP_FINAL ( PCI_VENDOR_ID_CIRRUS , PCI_DEVICE_ID_CIRRUS_5446 ,
quirk_cirrus_ram_size ) ;
# endif