2014-04-23 01:26:40 +04:00
/*
* Maxtor Shared Storage II Board Setup
*
* Maintainer : Sylver Bruneau < sylver . bruneau @ googlemail . com >
*
* This program is free software ; you can redistribute it and / or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation ; either version
* 2 of the License , or ( at your option ) any later version .
*/
# include <linux/kernel.h>
# include <linux/init.h>
# include <linux/platform_device.h>
# include <linux/pci.h>
# include <linux/irq.h>
# include <asm/mach-types.h>
# include <asm/mach/arch.h>
# include <asm/mach/pci.h>
2015-12-03 00:27:08 +03:00
# include "orion5x.h"
# include "bridge-regs.h"
2014-04-23 01:26:40 +04:00
# include "common.h"
/*****************************************************************************
* Maxtor Shared Storage II Info
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/****************************************************************************
* PCI setup
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
static int __init mss2_pci_map_irq ( const struct pci_dev * dev , u8 slot , u8 pin )
{
int irq ;
/*
* Check for devices with hard - wired IRQs .
*/
irq = orion5x_pci_map_irq ( dev , slot , pin ) ;
if ( irq ! = - 1 )
return irq ;
return - 1 ;
}
static struct hw_pci mss2_pci __initdata = {
. nr_controllers = 2 ,
. setup = orion5x_pci_sys_setup ,
. scan = orion5x_pci_sys_scan_bus ,
. map_irq = mss2_pci_map_irq ,
} ;
static int __init mss2_pci_init ( void )
{
if ( machine_is_mss2 ( ) )
pci_common_init ( & mss2_pci ) ;
return 0 ;
}
subsys_initcall ( mss2_pci_init ) ;
/*****************************************************************************
* MSS2 power off method
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/*
* On the Maxtor Shared Storage II , the shutdown process is the following :
* - Userland modifies U - boot env to tell U - boot to go idle at next boot
* - The board reboots
* - U - boot starts and go into an idle mode until the user press " power "
*/
static void mss2_power_off ( void )
{
u32 reg ;
/*
* Enable and issue soft reset
*/
reg = readl ( RSTOUTn_MASK ) ;
reg | = 1 < < 2 ;
writel ( reg , RSTOUTn_MASK ) ;
reg = readl ( CPU_SOFT_RESET ) ;
reg | = 1 ;
writel ( reg , CPU_SOFT_RESET ) ;
}
void __init mss2_init ( void )
{
/* register mss2 specific power-off method */
pm_power_off = mss2_power_off ;
}