2019-05-27 08:55:01 +02:00
// SPDX-License-Identifier: GPL-2.0-or-later
2006-01-13 11:19:58 -06:00
/*
2007-02-08 01:11:00 -06:00
* arch / powerpc / platforms / 83 xx / mpc834x_mds . c
2006-01-13 11:19:58 -06:00
*
2007-02-08 01:11:00 -06:00
* MPC834x MDS board specific routines
2006-01-13 11:19:58 -06:00
*
* Maintainer : Kumar Gala < galak @ kernel . crashing . org >
*/
# include <linux/stddef.h>
# include <linux/kernel.h>
# include <linux/init.h>
# include <linux/errno.h>
# include <linux/reboot.h>
# include <linux/pci.h>
# include <linux/kdev_t.h>
# include <linux/major.h>
# include <linux/console.h>
# include <linux/delay.h>
# include <linux/seq_file.h>
# include <linux/root_dev.h>
2007-12-13 11:19:05 -06:00
# include <linux/of_platform.h>
2006-01-13 11:19:58 -06:00
2011-07-26 16:09:06 -07:00
# include <linux/atomic.h>
2006-01-13 11:19:58 -06:00
# include <asm/time.h>
# include <asm/io.h>
# include <asm/machdep.h>
# include <asm/ipic.h>
# include <asm/irq.h>
# include <asm/prom.h>
# include <asm/udbg.h>
# include <sysdev/fsl_soc.h>
2008-06-26 11:07:57 -06:00
# include <sysdev/fsl_pci.h>
2006-01-13 11:19:58 -06:00
# include "mpc83xx.h"
2007-02-07 13:47:56 +08:00
# define BCSR5_INT_USB 0x02
2007-07-03 17:43:16 +08:00
static int mpc834xemds_usb_cfg ( void )
2007-02-07 13:47:56 +08:00
{
2007-07-03 17:43:16 +08:00
struct device_node * np ;
2007-02-07 13:47:56 +08:00
void __iomem * bcsr_regs = NULL ;
u8 bcsr5 ;
2007-07-03 17:43:16 +08:00
mpc834x_usb_cfg ( ) ;
2007-02-07 13:47:56 +08:00
/* Map BCSR area */
np = of_find_node_by_name ( NULL , " bcsr " ) ;
2007-07-03 17:43:16 +08:00
if ( np ) {
2007-02-07 13:47:56 +08:00
struct resource res ;
of_address_to_resource ( np , 0 , & res ) ;
2011-06-09 09:13:32 -07:00
bcsr_regs = ioremap ( res . start , resource_size ( & res ) ) ;
2007-02-07 13:47:56 +08:00
of_node_put ( np ) ;
}
if ( ! bcsr_regs )
return - 1 ;
/*
2007-03-06 17:11:06 +08:00
* if Processor Board is plugged into PIB board ,
* force to use the PHY on Processor Board
2007-02-07 13:47:56 +08:00
*/
bcsr5 = in_8 ( bcsr_regs + 5 ) ;
if ( ! ( bcsr5 & BCSR5_INT_USB ) )
out_8 ( bcsr_regs + 5 , ( bcsr5 | BCSR5_INT_USB ) ) ;
iounmap ( bcsr_regs ) ;
return 0 ;
}
2006-01-13 11:19:58 -06:00
/* ************************************************************************
*
* Setup the architecture
*
*/
2007-02-08 01:11:00 -06:00
static void __init mpc834x_mds_setup_arch ( void )
2006-01-13 11:19:58 -06:00
{
2016-08-23 10:06:58 +08:00
mpc83xx_setup_arch ( ) ;
2006-01-13 11:19:58 -06:00
2007-07-03 17:43:16 +08:00
mpc834xemds_usb_cfg ( ) ;
2006-01-13 11:19:58 -06:00
}
2011-11-17 18:48:47 +04:00
machine_device_initcall ( mpc834x_mds , mpc83xx_declare_of_platform_devices ) ;
2007-12-13 11:19:05 -06:00
2006-03-30 23:39:57 -06:00
/*
* Called very early , MMU is off , device - tree isn ' t unflattened
*/
2007-02-08 01:11:00 -06:00
static int __init mpc834x_mds_probe ( void )
2006-01-13 11:19:58 -06:00
{
2016-07-05 15:04:05 +10:00
return of_machine_is_compatible ( " MPC834xMDS " ) ;
2006-01-13 11:19:58 -06:00
}
2006-03-30 23:39:57 -06:00
2007-02-08 01:11:00 -06:00
define_machine ( mpc834x_mds ) {
. name = " MPC834x MDS " ,
. probe = mpc834x_mds_probe ,
. setup_arch = mpc834x_mds_setup_arch ,
2020-11-03 15:35:15 +11:00
. discover_phbs = mpc83xx_setup_pci ,
2011-07-22 23:55:42 +04:00
. init_IRQ = mpc83xx_ipic_init_IRQ ,
2006-03-30 23:39:57 -06:00
. get_irq = ipic_get_irq ,
. restart = mpc83xx_restart ,
. time_init = mpc83xx_time_init ,
. calibrate_decr = generic_calibrate_decr ,
. progress = udbg_progress ,
} ;