18c2ecf20Sopenharmony_ci/*
28c2ecf20Sopenharmony_ci * arch/arm/mach-dove/cm-a510.c
38c2ecf20Sopenharmony_ci *
48c2ecf20Sopenharmony_ci * Copyright (C) 2010 CompuLab, Ltd.
58c2ecf20Sopenharmony_ci * Konstantin Sinyuk <kostyas@compulab.co.il>
68c2ecf20Sopenharmony_ci *
78c2ecf20Sopenharmony_ci * Based on Marvell DB-MV88AP510-BP Development Board Setup
88c2ecf20Sopenharmony_ci *
98c2ecf20Sopenharmony_ci * This file is licensed under the terms of the GNU General Public
108c2ecf20Sopenharmony_ci * License version 2.  This program is licensed "as is" without any
118c2ecf20Sopenharmony_ci * warranty of any kind, whether express or implied.
128c2ecf20Sopenharmony_ci */
138c2ecf20Sopenharmony_ci
148c2ecf20Sopenharmony_ci#include <linux/kernel.h>
158c2ecf20Sopenharmony_ci#include <linux/init.h>
168c2ecf20Sopenharmony_ci#include <linux/platform_device.h>
178c2ecf20Sopenharmony_ci#include <linux/ata_platform.h>
188c2ecf20Sopenharmony_ci#include <linux/mv643xx_eth.h>
198c2ecf20Sopenharmony_ci#include <linux/spi/spi.h>
208c2ecf20Sopenharmony_ci#include <linux/spi/flash.h>
218c2ecf20Sopenharmony_ci
228c2ecf20Sopenharmony_ci#include <asm/mach-types.h>
238c2ecf20Sopenharmony_ci#include <asm/mach/arch.h>
248c2ecf20Sopenharmony_ci
258c2ecf20Sopenharmony_ci#include "dove.h"
268c2ecf20Sopenharmony_ci#include "common.h"
278c2ecf20Sopenharmony_ci
288c2ecf20Sopenharmony_cistatic struct mv643xx_eth_platform_data cm_a510_ge00_data = {
298c2ecf20Sopenharmony_ci	.phy_addr	= MV643XX_ETH_PHY_ADDR_DEFAULT,
308c2ecf20Sopenharmony_ci};
318c2ecf20Sopenharmony_ci
328c2ecf20Sopenharmony_cistatic struct mv_sata_platform_data cm_a510_sata_data = {
338c2ecf20Sopenharmony_ci	.n_ports        = 1,
348c2ecf20Sopenharmony_ci};
358c2ecf20Sopenharmony_ci
368c2ecf20Sopenharmony_ci/*
378c2ecf20Sopenharmony_ci * SPI Devices:
388c2ecf20Sopenharmony_ci * SPI0: 1M Flash Winbond w25q32bv
398c2ecf20Sopenharmony_ci */
408c2ecf20Sopenharmony_cistatic const struct flash_platform_data cm_a510_spi_flash_data = {
418c2ecf20Sopenharmony_ci	.type		= "w25q32bv",
428c2ecf20Sopenharmony_ci};
438c2ecf20Sopenharmony_ci
448c2ecf20Sopenharmony_cistatic struct spi_board_info __initdata cm_a510_spi_flash_info[] = {
458c2ecf20Sopenharmony_ci	{
468c2ecf20Sopenharmony_ci		.modalias       = "m25p80",
478c2ecf20Sopenharmony_ci		.platform_data  = &cm_a510_spi_flash_data,
488c2ecf20Sopenharmony_ci		.irq            = -1,
498c2ecf20Sopenharmony_ci		.max_speed_hz   = 20000000,
508c2ecf20Sopenharmony_ci		.bus_num        = 0,
518c2ecf20Sopenharmony_ci		.chip_select    = 0,
528c2ecf20Sopenharmony_ci	},
538c2ecf20Sopenharmony_ci};
548c2ecf20Sopenharmony_ci
558c2ecf20Sopenharmony_cistatic int __init cm_a510_pci_init(void)
568c2ecf20Sopenharmony_ci{
578c2ecf20Sopenharmony_ci	if (machine_is_cm_a510())
588c2ecf20Sopenharmony_ci		dove_pcie_init(1, 1);
598c2ecf20Sopenharmony_ci
608c2ecf20Sopenharmony_ci	return 0;
618c2ecf20Sopenharmony_ci}
628c2ecf20Sopenharmony_ci
638c2ecf20Sopenharmony_cisubsys_initcall(cm_a510_pci_init);
648c2ecf20Sopenharmony_ci
658c2ecf20Sopenharmony_ci/* Board Init */
668c2ecf20Sopenharmony_cistatic void __init cm_a510_init(void)
678c2ecf20Sopenharmony_ci{
688c2ecf20Sopenharmony_ci	/*
698c2ecf20Sopenharmony_ci	 * Basic Dove setup. Needs to be called early.
708c2ecf20Sopenharmony_ci	 */
718c2ecf20Sopenharmony_ci	dove_init();
728c2ecf20Sopenharmony_ci
738c2ecf20Sopenharmony_ci	dove_ge00_init(&cm_a510_ge00_data);
748c2ecf20Sopenharmony_ci	dove_ehci0_init();
758c2ecf20Sopenharmony_ci	dove_ehci1_init();
768c2ecf20Sopenharmony_ci	dove_sata_init(&cm_a510_sata_data);
778c2ecf20Sopenharmony_ci	dove_sdio0_init();
788c2ecf20Sopenharmony_ci	dove_sdio1_init();
798c2ecf20Sopenharmony_ci	dove_spi0_init();
808c2ecf20Sopenharmony_ci	dove_spi1_init();
818c2ecf20Sopenharmony_ci	dove_uart0_init();
828c2ecf20Sopenharmony_ci	dove_uart1_init();
838c2ecf20Sopenharmony_ci	dove_i2c_init();
848c2ecf20Sopenharmony_ci	spi_register_board_info(cm_a510_spi_flash_info,
858c2ecf20Sopenharmony_ci				ARRAY_SIZE(cm_a510_spi_flash_info));
868c2ecf20Sopenharmony_ci}
878c2ecf20Sopenharmony_ci
888c2ecf20Sopenharmony_ciMACHINE_START(CM_A510, "Compulab CM-A510 Board")
898c2ecf20Sopenharmony_ci	.atag_offset	= 0x100,
908c2ecf20Sopenharmony_ci	.nr_irqs	= DOVE_NR_IRQS,
918c2ecf20Sopenharmony_ci	.init_machine	= cm_a510_init,
928c2ecf20Sopenharmony_ci	.map_io		= dove_map_io,
938c2ecf20Sopenharmony_ci	.init_early	= dove_init_early,
948c2ecf20Sopenharmony_ci	.init_irq	= dove_init_irq,
958c2ecf20Sopenharmony_ci	.init_time	= dove_timer_init,
968c2ecf20Sopenharmony_ci	.restart	= dove_restart,
978c2ecf20Sopenharmony_ciMACHINE_END
98