diff options
Diffstat (limited to 'arch/powerpc/sysdev/fsl_soc.c')
| -rw-r--r-- | arch/powerpc/sysdev/fsl_soc.c | 70 | 
1 files changed, 33 insertions, 37 deletions
diff --git a/arch/powerpc/sysdev/fsl_soc.c b/arch/powerpc/sysdev/fsl_soc.c index 19e5015e039..ffd1169ebaa 100644 --- a/arch/powerpc/sysdev/fsl_soc.c +++ b/arch/powerpc/sysdev/fsl_soc.c @@ -19,20 +19,18 @@  #include <linux/major.h>  #include <linux/delay.h>  #include <linux/irq.h> -#include <linux/module.h> +#include <linux/export.h>  #include <linux/device.h>  #include <linux/platform_device.h>  #include <linux/of.h>  #include <linux/of_platform.h>  #include <linux/phy.h> -#include <linux/phy_fixed.h>  #include <linux/spi/spi.h>  #include <linux/fsl_devices.h>  #include <linux/fs_enet_pd.h>  #include <linux/fs_uart_pd.h> -#include <asm/system.h> -#include <asm/atomic.h> +#include <linux/atomic.h>  #include <asm/io.h>  #include <asm/irq.h>  #include <asm/time.h> @@ -41,6 +39,7 @@  #include <sysdev/fsl_soc.h>  #include <mm/mmu_decl.h>  #include <asm/cpm2.h> +#include <asm/fsl_hcalls.h>	/* For the Freescale hypervisor */  extern void init_fcc_ioports(struct fs_platform_info*);  extern void init_fec_ioports(struct fs_platform_info*); @@ -58,10 +57,10 @@ phys_addr_t get_immrbase(void)  	if (soc) {  		int size;  		u32 naddr; -		const u32 *prop = of_get_property(soc, "#address-cells", &size); +		const __be32 *prop = of_get_property(soc, "#address-cells", &size);  		if (prop && size == 4) -			naddr = *prop; +			naddr = be32_to_cpup(prop);  		else  			naddr = 2; @@ -178,37 +177,6 @@ u32 get_baudrate(void)  EXPORT_SYMBOL(get_baudrate);  #endif /* CONFIG_CPM2 */ -#ifdef CONFIG_FIXED_PHY -static int __init of_add_fixed_phys(void) -{ -	int ret; -	struct device_node *np; -	u32 *fixed_link; -	struct fixed_phy_status status = {}; - -	for_each_node_by_name(np, "ethernet") { -		fixed_link  = (u32 *)of_get_property(np, "fixed-link", NULL); -		if (!fixed_link) -			continue; - -		status.link = 1; -		status.duplex = fixed_link[1]; -		status.speed = fixed_link[2]; -		status.pause = fixed_link[3]; -		status.asym_pause = fixed_link[4]; - -		ret = fixed_phy_add(PHY_POLL, fixed_link[0], &status); -		if (ret) { -			of_node_put(np); -			return ret; -		} -	} - -	return 0; -} -arch_initcall(of_add_fixed_phys); -#endif /* CONFIG_FIXED_PHY */ -  #if defined(CONFIG_FSL_SOC_BOOKE) || defined(CONFIG_PPC_86xx)  static __be32 __iomem *rstcr; @@ -252,3 +220,31 @@ void fsl_rstcr_restart(char *cmd)  struct platform_diu_data_ops diu_ops;  EXPORT_SYMBOL(diu_ops);  #endif + +#ifdef CONFIG_EPAPR_PARAVIRT +/* + * Restart the current partition + * + * This function should be assigned to the ppc_md.restart function pointer, + * to initiate a partition restart when we're running under the Freescale + * hypervisor. + */ +void fsl_hv_restart(char *cmd) +{ +	pr_info("hv restart\n"); +	fh_partition_restart(-1); +} + +/* + * Halt the current partition + * + * This function should be assigned to the ppc_md.power_off and ppc_md.halt + * function pointers, to shut down the partition when we're running under + * the Freescale hypervisor. + */ +void fsl_hv_halt(void) +{ +	pr_info("hv exit\n"); +	fh_partition_stop(-1); +} +#endif  | 
