diff options
Diffstat (limited to 'arch/arm/mach-orion5x/common.c')
| -rw-r--r-- | arch/arm/mach-orion5x/common.c | 58 | 
1 files changed, 49 insertions, 9 deletions
diff --git a/arch/arm/mach-orion5x/common.c b/arch/arm/mach-orion5x/common.c index 550f92320af..b97fd672e89 100644 --- a/arch/arm/mach-orion5x/common.c +++ b/arch/arm/mach-orion5x/common.c @@ -19,6 +19,7 @@  #include <linux/ata_platform.h>  #include <linux/delay.h>  #include <linux/clk-provider.h> +#include <linux/cpu.h>  #include <net/dsa.h>  #include <asm/page.h>  #include <asm/setup.h> @@ -34,7 +35,6 @@  #include <linux/platform_data/usb-ehci-orion.h>  #include <plat/time.h>  #include <plat/common.h> -#include <plat/addr-map.h>  #include "common.h"  /***************************************************************************** @@ -174,7 +174,8 @@ void __init orion5x_xor_init(void)   ****************************************************************************/  static void __init orion5x_crypto_init(void)  { -	orion5x_setup_sram_win(); +	mvebu_mbus_add_window("sram", ORION5X_SRAM_PHYS_BASE, +			      ORION5X_SRAM_SIZE);  	orion_crypto_init(ORION5X_CRYPTO_PHYS_BASE, ORION5X_SRAM_PHYS_BASE,  			  SZ_8K, IRQ_ORION5X_CESA);  } @@ -193,6 +194,9 @@ void __init orion5x_wdt_init(void)   ****************************************************************************/  void __init orion5x_init_early(void)  { +	u32 rev, dev; +	const char *mbus_soc_name; +  	orion_time_set_base(TIMER_VIRT_BASE);  	/* @@ -201,6 +205,46 @@ void __init orion5x_init_early(void)  	 * the allocations won't fail.  	 */  	init_dma_coherent_pool_size(SZ_1M); + +	/* Initialize the MBUS driver */ +	orion5x_pcie_id(&dev, &rev); +	if (dev == MV88F5281_DEV_ID) +		mbus_soc_name = "marvell,orion5x-88f5281-mbus"; +	else if (dev == MV88F5182_DEV_ID) +		mbus_soc_name = "marvell,orion5x-88f5182-mbus"; +	else if (dev == MV88F5181_DEV_ID) +		mbus_soc_name = "marvell,orion5x-88f5181-mbus"; +	else if (dev == MV88F6183_DEV_ID) +		mbus_soc_name = "marvell,orion5x-88f6183-mbus"; +	else +		mbus_soc_name = NULL; +	mvebu_mbus_init(mbus_soc_name, ORION5X_BRIDGE_WINS_BASE, +			ORION5X_BRIDGE_WINS_SZ, +			ORION5X_DDR_WINS_BASE, ORION5X_DDR_WINS_SZ); +} + +void orion5x_setup_wins(void) +{ +	/* +	 * The PCIe windows will no longer be statically allocated +	 * here once Orion5x is migrated to the pci-mvebu driver. +	 */ +	mvebu_mbus_add_window_remap_flags("pcie0.0", ORION5X_PCIE_IO_PHYS_BASE, +					  ORION5X_PCIE_IO_SIZE, +					  ORION5X_PCIE_IO_BUS_BASE, +					  MVEBU_MBUS_PCI_IO); +	mvebu_mbus_add_window_remap_flags("pcie0.0", ORION5X_PCIE_MEM_PHYS_BASE, +					  ORION5X_PCIE_MEM_SIZE, +					  MVEBU_MBUS_NO_REMAP, +					  MVEBU_MBUS_PCI_MEM); +	mvebu_mbus_add_window_remap_flags("pci0.0", ORION5X_PCI_IO_PHYS_BASE, +					  ORION5X_PCI_IO_SIZE, +					  ORION5X_PCI_IO_BUS_BASE, +					  MVEBU_MBUS_PCI_IO); +	mvebu_mbus_add_window_remap_flags("pci0.0", ORION5X_PCI_MEM_PHYS_BASE, +					  ORION5X_PCI_MEM_SIZE, +					  MVEBU_MBUS_NO_REMAP, +					  MVEBU_MBUS_PCI_MEM);  }  int orion5x_tclk; @@ -217,7 +261,7 @@ int __init orion5x_find_tclk(void)  	return 166666667;  } -static void __init orion5x_timer_init(void) +void __init orion5x_timer_init(void)  {  	orion5x_tclk = orion5x_find_tclk(); @@ -225,10 +269,6 @@ static void __init orion5x_timer_init(void)  			IRQ_ORION5X_BRIDGE, orion5x_tclk);  } -struct sys_timer orion5x_timer = { -	.init = orion5x_timer_init, -}; -  /*****************************************************************************   * General @@ -286,7 +326,7 @@ void __init orion5x_init(void)  	/*  	 * Setup Orion address map  	 */ -	orion5x_setup_cpu_mbus_bridge(); +	orion5x_setup_wins();  	/* Setup root of clk tree */  	clk_init(); @@ -297,7 +337,7 @@ void __init orion5x_init(void)  	 */  	if (dev == MV88F5281_DEV_ID && rev == MV88F5281_REV_D0) {  		printk(KERN_INFO "Orion: Applying 5281 D0 WFI workaround.\n"); -		disable_hlt(); +		cpu_idle_poll_ctrl(true);  	}  	/*  |