162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * arch/arm/mach-dove/cm-a510.c
462306a36Sopenharmony_ci *
562306a36Sopenharmony_ci * Copyright (C) 2010 CompuLab, Ltd.
662306a36Sopenharmony_ci * Konstantin Sinyuk <kostyas@compulab.co.il>
762306a36Sopenharmony_ci *
862306a36Sopenharmony_ci * Based on Marvell DB-MV88AP510-BP Development Board Setup
962306a36Sopenharmony_ci */
1062306a36Sopenharmony_ci
1162306a36Sopenharmony_ci#include <linux/kernel.h>
1262306a36Sopenharmony_ci#include <linux/init.h>
1362306a36Sopenharmony_ci#include <linux/platform_device.h>
1462306a36Sopenharmony_ci#include <linux/ata_platform.h>
1562306a36Sopenharmony_ci#include <linux/mv643xx_eth.h>
1662306a36Sopenharmony_ci#include <linux/spi/spi.h>
1762306a36Sopenharmony_ci#include <linux/spi/flash.h>
1862306a36Sopenharmony_ci
1962306a36Sopenharmony_ci#include <asm/mach-types.h>
2062306a36Sopenharmony_ci#include <asm/mach/arch.h>
2162306a36Sopenharmony_ci
2262306a36Sopenharmony_ci#include "dove.h"
2362306a36Sopenharmony_ci#include "common.h"
2462306a36Sopenharmony_ci
2562306a36Sopenharmony_cistatic struct mv643xx_eth_platform_data cm_a510_ge00_data = {
2662306a36Sopenharmony_ci	.phy_addr	= MV643XX_ETH_PHY_ADDR_DEFAULT,
2762306a36Sopenharmony_ci};
2862306a36Sopenharmony_ci
2962306a36Sopenharmony_cistatic struct mv_sata_platform_data cm_a510_sata_data = {
3062306a36Sopenharmony_ci	.n_ports        = 1,
3162306a36Sopenharmony_ci};
3262306a36Sopenharmony_ci
3362306a36Sopenharmony_ci/*
3462306a36Sopenharmony_ci * SPI Devices:
3562306a36Sopenharmony_ci * SPI0: 1M Flash Winbond w25q32bv
3662306a36Sopenharmony_ci */
3762306a36Sopenharmony_cistatic const struct flash_platform_data cm_a510_spi_flash_data = {
3862306a36Sopenharmony_ci	.type		= "w25q32bv",
3962306a36Sopenharmony_ci};
4062306a36Sopenharmony_ci
4162306a36Sopenharmony_cistatic struct spi_board_info __initdata cm_a510_spi_flash_info[] = {
4262306a36Sopenharmony_ci	{
4362306a36Sopenharmony_ci		.modalias       = "m25p80",
4462306a36Sopenharmony_ci		.platform_data  = &cm_a510_spi_flash_data,
4562306a36Sopenharmony_ci		.irq            = -1,
4662306a36Sopenharmony_ci		.max_speed_hz   = 20000000,
4762306a36Sopenharmony_ci		.bus_num        = 0,
4862306a36Sopenharmony_ci		.chip_select    = 0,
4962306a36Sopenharmony_ci	},
5062306a36Sopenharmony_ci};
5162306a36Sopenharmony_ci
5262306a36Sopenharmony_cistatic int __init cm_a510_pci_init(void)
5362306a36Sopenharmony_ci{
5462306a36Sopenharmony_ci	if (machine_is_cm_a510())
5562306a36Sopenharmony_ci		dove_pcie_init(1, 1);
5662306a36Sopenharmony_ci
5762306a36Sopenharmony_ci	return 0;
5862306a36Sopenharmony_ci}
5962306a36Sopenharmony_ci
6062306a36Sopenharmony_cisubsys_initcall(cm_a510_pci_init);
6162306a36Sopenharmony_ci
6262306a36Sopenharmony_ci/* Board Init */
6362306a36Sopenharmony_cistatic void __init cm_a510_init(void)
6462306a36Sopenharmony_ci{
6562306a36Sopenharmony_ci	/*
6662306a36Sopenharmony_ci	 * Basic Dove setup. Needs to be called early.
6762306a36Sopenharmony_ci	 */
6862306a36Sopenharmony_ci	dove_init();
6962306a36Sopenharmony_ci
7062306a36Sopenharmony_ci	dove_ge00_init(&cm_a510_ge00_data);
7162306a36Sopenharmony_ci	dove_ehci0_init();
7262306a36Sopenharmony_ci	dove_ehci1_init();
7362306a36Sopenharmony_ci	dove_sata_init(&cm_a510_sata_data);
7462306a36Sopenharmony_ci	dove_sdio0_init();
7562306a36Sopenharmony_ci	dove_sdio1_init();
7662306a36Sopenharmony_ci	dove_spi0_init();
7762306a36Sopenharmony_ci	dove_spi1_init();
7862306a36Sopenharmony_ci	dove_uart0_init();
7962306a36Sopenharmony_ci	dove_uart1_init();
8062306a36Sopenharmony_ci	dove_i2c_init();
8162306a36Sopenharmony_ci	spi_register_board_info(cm_a510_spi_flash_info,
8262306a36Sopenharmony_ci				ARRAY_SIZE(cm_a510_spi_flash_info));
8362306a36Sopenharmony_ci}
8462306a36Sopenharmony_ci
8562306a36Sopenharmony_ciMACHINE_START(CM_A510, "Compulab CM-A510 Board")
8662306a36Sopenharmony_ci	.atag_offset	= 0x100,
8762306a36Sopenharmony_ci	.nr_irqs	= DOVE_NR_IRQS,
8862306a36Sopenharmony_ci	.init_machine	= cm_a510_init,
8962306a36Sopenharmony_ci	.map_io		= dove_map_io,
9062306a36Sopenharmony_ci	.init_early	= dove_init_early,
9162306a36Sopenharmony_ci	.init_irq	= dove_init_irq,
9262306a36Sopenharmony_ci	.init_time	= dove_timer_init,
9362306a36Sopenharmony_ci	.restart	= dove_restart,
9462306a36Sopenharmony_ciMACHINE_END
95