162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * arch/arm/mach-spear3xx/spear300.c
462306a36Sopenharmony_ci *
562306a36Sopenharmony_ci * SPEAr300 machine source file
662306a36Sopenharmony_ci *
762306a36Sopenharmony_ci * Copyright (C) 2009-2012 ST Microelectronics
862306a36Sopenharmony_ci * Viresh Kumar <vireshk@kernel.org>
962306a36Sopenharmony_ci */
1062306a36Sopenharmony_ci
1162306a36Sopenharmony_ci#define pr_fmt(fmt) "SPEAr300: " fmt
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_ci#include <linux/amba/pl08x.h>
1462306a36Sopenharmony_ci#include <linux/of_platform.h>
1562306a36Sopenharmony_ci#include <asm/mach/arch.h>
1662306a36Sopenharmony_ci#include "generic.h"
1762306a36Sopenharmony_ci#include "spear.h"
1862306a36Sopenharmony_ci
1962306a36Sopenharmony_ci/* DMAC platform data's slave info */
2062306a36Sopenharmony_cistruct pl08x_channel_data spear300_dma_info[] = {
2162306a36Sopenharmony_ci	{
2262306a36Sopenharmony_ci		.bus_id = "uart0_rx",
2362306a36Sopenharmony_ci		.min_signal = 2,
2462306a36Sopenharmony_ci		.max_signal = 2,
2562306a36Sopenharmony_ci		.muxval = 0,
2662306a36Sopenharmony_ci		.periph_buses = PL08X_AHB1,
2762306a36Sopenharmony_ci	}, {
2862306a36Sopenharmony_ci		.bus_id = "uart0_tx",
2962306a36Sopenharmony_ci		.min_signal = 3,
3062306a36Sopenharmony_ci		.max_signal = 3,
3162306a36Sopenharmony_ci		.muxval = 0,
3262306a36Sopenharmony_ci		.periph_buses = PL08X_AHB1,
3362306a36Sopenharmony_ci	}, {
3462306a36Sopenharmony_ci		.bus_id = "ssp0_rx",
3562306a36Sopenharmony_ci		.min_signal = 8,
3662306a36Sopenharmony_ci		.max_signal = 8,
3762306a36Sopenharmony_ci		.muxval = 0,
3862306a36Sopenharmony_ci		.periph_buses = PL08X_AHB1,
3962306a36Sopenharmony_ci	}, {
4062306a36Sopenharmony_ci		.bus_id = "ssp0_tx",
4162306a36Sopenharmony_ci		.min_signal = 9,
4262306a36Sopenharmony_ci		.max_signal = 9,
4362306a36Sopenharmony_ci		.muxval = 0,
4462306a36Sopenharmony_ci		.periph_buses = PL08X_AHB1,
4562306a36Sopenharmony_ci	}, {
4662306a36Sopenharmony_ci		.bus_id = "i2c_rx",
4762306a36Sopenharmony_ci		.min_signal = 10,
4862306a36Sopenharmony_ci		.max_signal = 10,
4962306a36Sopenharmony_ci		.muxval = 0,
5062306a36Sopenharmony_ci		.periph_buses = PL08X_AHB1,
5162306a36Sopenharmony_ci	}, {
5262306a36Sopenharmony_ci		.bus_id = "i2c_tx",
5362306a36Sopenharmony_ci		.min_signal = 11,
5462306a36Sopenharmony_ci		.max_signal = 11,
5562306a36Sopenharmony_ci		.muxval = 0,
5662306a36Sopenharmony_ci		.periph_buses = PL08X_AHB1,
5762306a36Sopenharmony_ci	}, {
5862306a36Sopenharmony_ci		.bus_id = "irda",
5962306a36Sopenharmony_ci		.min_signal = 12,
6062306a36Sopenharmony_ci		.max_signal = 12,
6162306a36Sopenharmony_ci		.muxval = 0,
6262306a36Sopenharmony_ci		.periph_buses = PL08X_AHB1,
6362306a36Sopenharmony_ci	}, {
6462306a36Sopenharmony_ci		.bus_id = "adc",
6562306a36Sopenharmony_ci		.min_signal = 13,
6662306a36Sopenharmony_ci		.max_signal = 13,
6762306a36Sopenharmony_ci		.muxval = 0,
6862306a36Sopenharmony_ci		.periph_buses = PL08X_AHB1,
6962306a36Sopenharmony_ci	}, {
7062306a36Sopenharmony_ci		.bus_id = "to_jpeg",
7162306a36Sopenharmony_ci		.min_signal = 14,
7262306a36Sopenharmony_ci		.max_signal = 14,
7362306a36Sopenharmony_ci		.muxval = 0,
7462306a36Sopenharmony_ci		.periph_buses = PL08X_AHB1,
7562306a36Sopenharmony_ci	}, {
7662306a36Sopenharmony_ci		.bus_id = "from_jpeg",
7762306a36Sopenharmony_ci		.min_signal = 15,
7862306a36Sopenharmony_ci		.max_signal = 15,
7962306a36Sopenharmony_ci		.muxval = 0,
8062306a36Sopenharmony_ci		.periph_buses = PL08X_AHB1,
8162306a36Sopenharmony_ci	}, {
8262306a36Sopenharmony_ci		.bus_id = "ras0_rx",
8362306a36Sopenharmony_ci		.min_signal = 0,
8462306a36Sopenharmony_ci		.max_signal = 0,
8562306a36Sopenharmony_ci		.muxval = 1,
8662306a36Sopenharmony_ci		.periph_buses = PL08X_AHB1,
8762306a36Sopenharmony_ci	}, {
8862306a36Sopenharmony_ci		.bus_id = "ras0_tx",
8962306a36Sopenharmony_ci		.min_signal = 1,
9062306a36Sopenharmony_ci		.max_signal = 1,
9162306a36Sopenharmony_ci		.muxval = 1,
9262306a36Sopenharmony_ci		.periph_buses = PL08X_AHB1,
9362306a36Sopenharmony_ci	}, {
9462306a36Sopenharmony_ci		.bus_id = "ras1_rx",
9562306a36Sopenharmony_ci		.min_signal = 2,
9662306a36Sopenharmony_ci		.max_signal = 2,
9762306a36Sopenharmony_ci		.muxval = 1,
9862306a36Sopenharmony_ci		.periph_buses = PL08X_AHB1,
9962306a36Sopenharmony_ci	}, {
10062306a36Sopenharmony_ci		.bus_id = "ras1_tx",
10162306a36Sopenharmony_ci		.min_signal = 3,
10262306a36Sopenharmony_ci		.max_signal = 3,
10362306a36Sopenharmony_ci		.muxval = 1,
10462306a36Sopenharmony_ci		.periph_buses = PL08X_AHB1,
10562306a36Sopenharmony_ci	}, {
10662306a36Sopenharmony_ci		.bus_id = "ras2_rx",
10762306a36Sopenharmony_ci		.min_signal = 4,
10862306a36Sopenharmony_ci		.max_signal = 4,
10962306a36Sopenharmony_ci		.muxval = 1,
11062306a36Sopenharmony_ci		.periph_buses = PL08X_AHB1,
11162306a36Sopenharmony_ci	}, {
11262306a36Sopenharmony_ci		.bus_id = "ras2_tx",
11362306a36Sopenharmony_ci		.min_signal = 5,
11462306a36Sopenharmony_ci		.max_signal = 5,
11562306a36Sopenharmony_ci		.muxval = 1,
11662306a36Sopenharmony_ci		.periph_buses = PL08X_AHB1,
11762306a36Sopenharmony_ci	}, {
11862306a36Sopenharmony_ci		.bus_id = "ras3_rx",
11962306a36Sopenharmony_ci		.min_signal = 6,
12062306a36Sopenharmony_ci		.max_signal = 6,
12162306a36Sopenharmony_ci		.muxval = 1,
12262306a36Sopenharmony_ci		.periph_buses = PL08X_AHB1,
12362306a36Sopenharmony_ci	}, {
12462306a36Sopenharmony_ci		.bus_id = "ras3_tx",
12562306a36Sopenharmony_ci		.min_signal = 7,
12662306a36Sopenharmony_ci		.max_signal = 7,
12762306a36Sopenharmony_ci		.muxval = 1,
12862306a36Sopenharmony_ci		.periph_buses = PL08X_AHB1,
12962306a36Sopenharmony_ci	}, {
13062306a36Sopenharmony_ci		.bus_id = "ras4_rx",
13162306a36Sopenharmony_ci		.min_signal = 8,
13262306a36Sopenharmony_ci		.max_signal = 8,
13362306a36Sopenharmony_ci		.muxval = 1,
13462306a36Sopenharmony_ci		.periph_buses = PL08X_AHB1,
13562306a36Sopenharmony_ci	}, {
13662306a36Sopenharmony_ci		.bus_id = "ras4_tx",
13762306a36Sopenharmony_ci		.min_signal = 9,
13862306a36Sopenharmony_ci		.max_signal = 9,
13962306a36Sopenharmony_ci		.muxval = 1,
14062306a36Sopenharmony_ci		.periph_buses = PL08X_AHB1,
14162306a36Sopenharmony_ci	}, {
14262306a36Sopenharmony_ci		.bus_id = "ras5_rx",
14362306a36Sopenharmony_ci		.min_signal = 10,
14462306a36Sopenharmony_ci		.max_signal = 10,
14562306a36Sopenharmony_ci		.muxval = 1,
14662306a36Sopenharmony_ci		.periph_buses = PL08X_AHB1,
14762306a36Sopenharmony_ci	}, {
14862306a36Sopenharmony_ci		.bus_id = "ras5_tx",
14962306a36Sopenharmony_ci		.min_signal = 11,
15062306a36Sopenharmony_ci		.max_signal = 11,
15162306a36Sopenharmony_ci		.muxval = 1,
15262306a36Sopenharmony_ci		.periph_buses = PL08X_AHB1,
15362306a36Sopenharmony_ci	}, {
15462306a36Sopenharmony_ci		.bus_id = "ras6_rx",
15562306a36Sopenharmony_ci		.min_signal = 12,
15662306a36Sopenharmony_ci		.max_signal = 12,
15762306a36Sopenharmony_ci		.muxval = 1,
15862306a36Sopenharmony_ci		.periph_buses = PL08X_AHB1,
15962306a36Sopenharmony_ci	}, {
16062306a36Sopenharmony_ci		.bus_id = "ras6_tx",
16162306a36Sopenharmony_ci		.min_signal = 13,
16262306a36Sopenharmony_ci		.max_signal = 13,
16362306a36Sopenharmony_ci		.muxval = 1,
16462306a36Sopenharmony_ci		.periph_buses = PL08X_AHB1,
16562306a36Sopenharmony_ci	}, {
16662306a36Sopenharmony_ci		.bus_id = "ras7_rx",
16762306a36Sopenharmony_ci		.min_signal = 14,
16862306a36Sopenharmony_ci		.max_signal = 14,
16962306a36Sopenharmony_ci		.muxval = 1,
17062306a36Sopenharmony_ci		.periph_buses = PL08X_AHB1,
17162306a36Sopenharmony_ci	}, {
17262306a36Sopenharmony_ci		.bus_id = "ras7_tx",
17362306a36Sopenharmony_ci		.min_signal = 15,
17462306a36Sopenharmony_ci		.max_signal = 15,
17562306a36Sopenharmony_ci		.muxval = 1,
17662306a36Sopenharmony_ci		.periph_buses = PL08X_AHB1,
17762306a36Sopenharmony_ci	},
17862306a36Sopenharmony_ci};
17962306a36Sopenharmony_ci
18062306a36Sopenharmony_ci/* Add SPEAr300 auxdata to pass platform data */
18162306a36Sopenharmony_cistatic struct of_dev_auxdata spear300_auxdata_lookup[] __initdata = {
18262306a36Sopenharmony_ci	OF_DEV_AUXDATA("arm,pl022", SPEAR3XX_ICM1_SSP_BASE, NULL,
18362306a36Sopenharmony_ci			&pl022_plat_data),
18462306a36Sopenharmony_ci	OF_DEV_AUXDATA("arm,pl080", SPEAR_ICM3_DMA_BASE, NULL,
18562306a36Sopenharmony_ci			&pl080_plat_data),
18662306a36Sopenharmony_ci	{}
18762306a36Sopenharmony_ci};
18862306a36Sopenharmony_ci
18962306a36Sopenharmony_cistatic void __init spear300_dt_init(void)
19062306a36Sopenharmony_ci{
19162306a36Sopenharmony_ci	pl080_plat_data.slave_channels = spear300_dma_info;
19262306a36Sopenharmony_ci	pl080_plat_data.num_slave_channels = ARRAY_SIZE(spear300_dma_info);
19362306a36Sopenharmony_ci
19462306a36Sopenharmony_ci	of_platform_default_populate(NULL, spear300_auxdata_lookup, NULL);
19562306a36Sopenharmony_ci}
19662306a36Sopenharmony_ci
19762306a36Sopenharmony_cistatic const char * const spear300_dt_board_compat[] = {
19862306a36Sopenharmony_ci	"st,spear300",
19962306a36Sopenharmony_ci	"st,spear300-evb",
20062306a36Sopenharmony_ci	NULL,
20162306a36Sopenharmony_ci};
20262306a36Sopenharmony_ci
20362306a36Sopenharmony_cistatic void __init spear300_map_io(void)
20462306a36Sopenharmony_ci{
20562306a36Sopenharmony_ci	spear3xx_map_io();
20662306a36Sopenharmony_ci}
20762306a36Sopenharmony_ci
20862306a36Sopenharmony_ciDT_MACHINE_START(SPEAR300_DT, "ST SPEAr300 SoC with Flattened Device Tree")
20962306a36Sopenharmony_ci	.map_io		=	spear300_map_io,
21062306a36Sopenharmony_ci	.init_time	=	spear3xx_timer_init,
21162306a36Sopenharmony_ci	.init_machine	=	spear300_dt_init,
21262306a36Sopenharmony_ci	.restart	=	spear_restart,
21362306a36Sopenharmony_ci	.dt_compat	=	spear300_dt_board_compat,
21462306a36Sopenharmony_ciMACHINE_END
215