2010-10-07 23:47:10 +04:00
/*
* P3041 DS Setup
*
* Maintained by Kumar Gala ( see MAINTAINERS for contact information )
*
* Copyright 2009 - 2010 Freescale Semiconductor Inc .
*
* 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/pci.h>
# include <linux/kdev_t.h>
# include <linux/delay.h>
# include <linux/interrupt.h>
# include <linux/phy.h>
# include <asm/time.h>
# include <asm/machdep.h>
# include <asm/pci-bridge.h>
# include <mm/mmu_decl.h>
# include <asm/prom.h>
# include <asm/udbg.h>
# include <asm/mpic.h>
# include <linux/of_platform.h>
# include <sysdev/fsl_soc.h>
# include <sysdev/fsl_pci.h>
2011-05-19 17:54:30 +04:00
# include <asm/ehv_pic.h>
2010-10-07 23:47:10 +04:00
# include "corenet_ds.h"
/*
* Called very early , device - tree isn ' t unflattened
*/
static int __init p3041_ds_probe ( void )
{
unsigned long root = of_get_flat_dt_root ( ) ;
2011-06-14 17:04:33 +04:00
# ifdef CONFIG_SMP
extern struct smp_ops_t smp_85xx_ops ;
# endif
2010-10-07 23:47:10 +04:00
2011-05-19 17:54:30 +04:00
if ( of_flat_dt_is_compatible ( root , " fsl,P3041DS " ) )
return 1 ;
/* Check if we're running under the Freescale hypervisor */
if ( of_flat_dt_is_compatible ( root , " fsl,P3041DS-hv " ) ) {
ppc_md . init_IRQ = ehv_pic_init ;
ppc_md . get_irq = ehv_pic_get_irq ;
ppc_md . restart = fsl_hv_restart ;
ppc_md . power_off = fsl_hv_halt ;
ppc_md . halt = fsl_hv_halt ;
2011-06-14 17:04:33 +04:00
# ifdef CONFIG_SMP
/*
* Disable the timebase sync operations because we can ' t write
* to the timebase registers under the hypervisor .
*/
smp_85xx_ops . give_timebase = NULL ;
smp_85xx_ops . take_timebase = NULL ;
# endif
2011-05-19 17:54:30 +04:00
return 1 ;
}
return 0 ;
2010-10-07 23:47:10 +04:00
}
define_machine ( p3041_ds ) {
. name = " P3041 DS " ,
. probe = p3041_ds_probe ,
. setup_arch = corenet_ds_setup_arch ,
. init_IRQ = corenet_ds_pic_init ,
# ifdef CONFIG_PCI
. pcibios_fixup_bus = fsl_pcibios_fixup_bus ,
# endif
. get_irq = mpic_get_coreint_irq ,
. restart = fsl_rstcr_restart ,
. calibrate_decr = generic_calibrate_decr ,
. progress = udbg_progress ,
2011-06-23 03:10:30 +04:00
. power_save = e500_idle ,
2010-10-07 23:47:10 +04:00
} ;
2012-08-28 11:44:08 +04:00
machine_arch_initcall ( p3041_ds , corenet_ds_publish_devices ) ;
2010-10-07 23:47:10 +04:00
# ifdef CONFIG_SWIOTLB
machine_arch_initcall ( p3041_ds , swiotlb_setup_bus_notifier ) ;
# endif