[ARM] mv78xx0: Add Marvell RD-78x00-mASA Reference Design support
Lennert Buytenhek [Thu, 12 Mar 2009 08:48:37 +0000 (09:48 +0100)]
Signed-off-by: Lennert Buytenhek <buytenh@marvell.com>
Acked-by: Stanislav Samsonov <samsonov@marvell.com>
Signed-off-by: Nicolas Pitre <nico@marvell.com>

arch/arm/configs/mv78xx0_defconfig
arch/arm/mach-mv78xx0/Kconfig
arch/arm/mach-mv78xx0/Makefile
arch/arm/mach-mv78xx0/rd78x00-masa-setup.c [new file with mode: 0644]

index 83c817f..b069872 100644 (file)
@@ -165,6 +165,7 @@ CONFIG_ARCH_MV78XX0=y
 # Marvell MV78xx0 Implementations
 #
 CONFIG_MACH_DB78X00_BP=y
+CONFIG_MACH_RD78X00_MASA=y
 
 #
 # Boot options
index d83cb86..6fbe68f 100644 (file)
@@ -8,6 +8,12 @@ config MACH_DB78X00_BP
          Say 'Y' here if you want your kernel to support the
          Marvell DB-78x00-BP Development Board.
 
+config MACH_RD78X00_MASA
+       bool "Marvell RD-78x00-mASA Reference Design"
+       help
+         Say 'Y' here if you want your kernel to support the
+         Marvell RD-78x00-mASA Reference Design.
+
 endmenu
 
 endif
index ec16c05..da628b7 100644 (file)
@@ -1,2 +1,3 @@
 obj-y                          += common.o addr-map.o irq.o pcie.o
 obj-$(CONFIG_MACH_DB78X00_BP)  += db78x00-bp-setup.o
+obj-$(CONFIG_MACH_RD78X00_MASA)        += rd78x00-masa-setup.o
diff --git a/arch/arm/mach-mv78xx0/rd78x00-masa-setup.c b/arch/arm/mach-mv78xx0/rd78x00-masa-setup.c
new file mode 100644 (file)
index 0000000..e136b7a
--- /dev/null
@@ -0,0 +1,88 @@
+/*
+ * arch/arm/mach-mv78x00/rd78x00-masa-setup.c
+ *
+ * Marvell RD-78x00-mASA Development Board Setup
+ *
+ * This file is licensed under the terms of the GNU General Public
+ * License version 2.  This program is licensed "as is" without any
+ * warranty of any kind, whether express or implied.
+ */
+
+#include <linux/kernel.h>
+#include <linux/init.h>
+#include <linux/platform_device.h>
+#include <linux/ata_platform.h>
+#include <linux/mv643xx_eth.h>
+#include <linux/ethtool.h>
+#include <mach/mv78xx0.h>
+#include <asm/mach-types.h>
+#include <asm/mach/arch.h>
+#include "common.h"
+
+static struct mv643xx_eth_platform_data rd78x00_masa_ge00_data = {
+       .phy_addr       = MV643XX_ETH_PHY_ADDR(8),
+};
+
+static struct mv643xx_eth_platform_data rd78x00_masa_ge01_data = {
+       .phy_addr       = MV643XX_ETH_PHY_ADDR(9),
+};
+
+static struct mv643xx_eth_platform_data rd78x00_masa_ge10_data = {
+};
+
+static struct mv643xx_eth_platform_data rd78x00_masa_ge11_data = {
+};
+
+static struct mv_sata_platform_data rd78x00_masa_sata_data = {
+       .n_ports        = 2,
+};
+
+static void __init rd78x00_masa_init(void)
+{
+       /*
+        * Basic MV78x00 setup. Needs to be called early.
+        */
+       mv78xx0_init();
+
+       /*
+        * Partition on-chip peripherals between the two CPU cores.
+        */
+       if (mv78xx0_core_index() == 0) {
+               mv78xx0_ehci0_init();
+               mv78xx0_ehci1_init();
+               mv78xx0_ge00_init(&rd78x00_masa_ge00_data);
+               mv78xx0_ge10_init(&rd78x00_masa_ge10_data);
+               mv78xx0_sata_init(&rd78x00_masa_sata_data);
+               mv78xx0_uart0_init();
+               mv78xx0_uart2_init();
+       } else {
+               mv78xx0_ehci2_init();
+               mv78xx0_ge01_init(&rd78x00_masa_ge01_data);
+               mv78xx0_ge11_init(&rd78x00_masa_ge11_data);
+               mv78xx0_uart1_init();
+               mv78xx0_uart3_init();
+       }
+}
+
+static int __init rd78x00_pci_init(void)
+{
+       /*
+        * Assign all PCIe devices to CPU core #0.
+        */
+       if (machine_is_rd78x00_masa() && mv78xx0_core_index() == 0)
+               mv78xx0_pcie_init(1, 1);
+
+       return 0;
+}
+subsys_initcall(rd78x00_pci_init);
+
+MACHINE_START(RD78X00_MASA, "Marvell RD-78x00-MASA Development Board")
+       /* Maintainer: Lennert Buytenhek <buytenh@marvell.com> */
+       .phys_io        = MV78XX0_REGS_PHYS_BASE,
+       .io_pg_offst    = ((MV78XX0_REGS_VIRT_BASE) >> 18) & 0xfffc,
+       .boot_params    = 0x00000100,
+       .init_machine   = rd78x00_masa_init,
+       .map_io         = mv78xx0_map_io,
+       .init_irq       = mv78xx0_init_irq,
+       .timer          = &mv78xx0_timer,
+MACHINE_END