0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011 #define pr_fmt(fmt) "SPEAr300: " fmt
0012
0013 #include <linux/amba/pl08x.h>
0014 #include <linux/of_platform.h>
0015 #include <asm/mach/arch.h>
0016 #include "generic.h"
0017 #include "spear.h"
0018
0019
0020 struct pl08x_channel_data spear300_dma_info[] = {
0021 {
0022 .bus_id = "uart0_rx",
0023 .min_signal = 2,
0024 .max_signal = 2,
0025 .muxval = 0,
0026 .periph_buses = PL08X_AHB1,
0027 }, {
0028 .bus_id = "uart0_tx",
0029 .min_signal = 3,
0030 .max_signal = 3,
0031 .muxval = 0,
0032 .periph_buses = PL08X_AHB1,
0033 }, {
0034 .bus_id = "ssp0_rx",
0035 .min_signal = 8,
0036 .max_signal = 8,
0037 .muxval = 0,
0038 .periph_buses = PL08X_AHB1,
0039 }, {
0040 .bus_id = "ssp0_tx",
0041 .min_signal = 9,
0042 .max_signal = 9,
0043 .muxval = 0,
0044 .periph_buses = PL08X_AHB1,
0045 }, {
0046 .bus_id = "i2c_rx",
0047 .min_signal = 10,
0048 .max_signal = 10,
0049 .muxval = 0,
0050 .periph_buses = PL08X_AHB1,
0051 }, {
0052 .bus_id = "i2c_tx",
0053 .min_signal = 11,
0054 .max_signal = 11,
0055 .muxval = 0,
0056 .periph_buses = PL08X_AHB1,
0057 }, {
0058 .bus_id = "irda",
0059 .min_signal = 12,
0060 .max_signal = 12,
0061 .muxval = 0,
0062 .periph_buses = PL08X_AHB1,
0063 }, {
0064 .bus_id = "adc",
0065 .min_signal = 13,
0066 .max_signal = 13,
0067 .muxval = 0,
0068 .periph_buses = PL08X_AHB1,
0069 }, {
0070 .bus_id = "to_jpeg",
0071 .min_signal = 14,
0072 .max_signal = 14,
0073 .muxval = 0,
0074 .periph_buses = PL08X_AHB1,
0075 }, {
0076 .bus_id = "from_jpeg",
0077 .min_signal = 15,
0078 .max_signal = 15,
0079 .muxval = 0,
0080 .periph_buses = PL08X_AHB1,
0081 }, {
0082 .bus_id = "ras0_rx",
0083 .min_signal = 0,
0084 .max_signal = 0,
0085 .muxval = 1,
0086 .periph_buses = PL08X_AHB1,
0087 }, {
0088 .bus_id = "ras0_tx",
0089 .min_signal = 1,
0090 .max_signal = 1,
0091 .muxval = 1,
0092 .periph_buses = PL08X_AHB1,
0093 }, {
0094 .bus_id = "ras1_rx",
0095 .min_signal = 2,
0096 .max_signal = 2,
0097 .muxval = 1,
0098 .periph_buses = PL08X_AHB1,
0099 }, {
0100 .bus_id = "ras1_tx",
0101 .min_signal = 3,
0102 .max_signal = 3,
0103 .muxval = 1,
0104 .periph_buses = PL08X_AHB1,
0105 }, {
0106 .bus_id = "ras2_rx",
0107 .min_signal = 4,
0108 .max_signal = 4,
0109 .muxval = 1,
0110 .periph_buses = PL08X_AHB1,
0111 }, {
0112 .bus_id = "ras2_tx",
0113 .min_signal = 5,
0114 .max_signal = 5,
0115 .muxval = 1,
0116 .periph_buses = PL08X_AHB1,
0117 }, {
0118 .bus_id = "ras3_rx",
0119 .min_signal = 6,
0120 .max_signal = 6,
0121 .muxval = 1,
0122 .periph_buses = PL08X_AHB1,
0123 }, {
0124 .bus_id = "ras3_tx",
0125 .min_signal = 7,
0126 .max_signal = 7,
0127 .muxval = 1,
0128 .periph_buses = PL08X_AHB1,
0129 }, {
0130 .bus_id = "ras4_rx",
0131 .min_signal = 8,
0132 .max_signal = 8,
0133 .muxval = 1,
0134 .periph_buses = PL08X_AHB1,
0135 }, {
0136 .bus_id = "ras4_tx",
0137 .min_signal = 9,
0138 .max_signal = 9,
0139 .muxval = 1,
0140 .periph_buses = PL08X_AHB1,
0141 }, {
0142 .bus_id = "ras5_rx",
0143 .min_signal = 10,
0144 .max_signal = 10,
0145 .muxval = 1,
0146 .periph_buses = PL08X_AHB1,
0147 }, {
0148 .bus_id = "ras5_tx",
0149 .min_signal = 11,
0150 .max_signal = 11,
0151 .muxval = 1,
0152 .periph_buses = PL08X_AHB1,
0153 }, {
0154 .bus_id = "ras6_rx",
0155 .min_signal = 12,
0156 .max_signal = 12,
0157 .muxval = 1,
0158 .periph_buses = PL08X_AHB1,
0159 }, {
0160 .bus_id = "ras6_tx",
0161 .min_signal = 13,
0162 .max_signal = 13,
0163 .muxval = 1,
0164 .periph_buses = PL08X_AHB1,
0165 }, {
0166 .bus_id = "ras7_rx",
0167 .min_signal = 14,
0168 .max_signal = 14,
0169 .muxval = 1,
0170 .periph_buses = PL08X_AHB1,
0171 }, {
0172 .bus_id = "ras7_tx",
0173 .min_signal = 15,
0174 .max_signal = 15,
0175 .muxval = 1,
0176 .periph_buses = PL08X_AHB1,
0177 },
0178 };
0179
0180
0181 static struct of_dev_auxdata spear300_auxdata_lookup[] __initdata = {
0182 OF_DEV_AUXDATA("arm,pl022", SPEAR3XX_ICM1_SSP_BASE, NULL,
0183 &pl022_plat_data),
0184 OF_DEV_AUXDATA("arm,pl080", SPEAR_ICM3_DMA_BASE, NULL,
0185 &pl080_plat_data),
0186 {}
0187 };
0188
0189 static void __init spear300_dt_init(void)
0190 {
0191 pl080_plat_data.slave_channels = spear300_dma_info;
0192 pl080_plat_data.num_slave_channels = ARRAY_SIZE(spear300_dma_info);
0193
0194 of_platform_default_populate(NULL, spear300_auxdata_lookup, NULL);
0195 }
0196
0197 static const char * const spear300_dt_board_compat[] = {
0198 "st,spear300",
0199 "st,spear300-evb",
0200 NULL,
0201 };
0202
0203 static void __init spear300_map_io(void)
0204 {
0205 spear3xx_map_io();
0206 }
0207
0208 DT_MACHINE_START(SPEAR300_DT, "ST SPEAr300 SoC with Flattened Device Tree")
0209 .map_io = spear300_map_io,
0210 .init_time = spear3xx_timer_init,
0211 .init_machine = spear300_dt_init,
0212 .restart = spear_restart,
0213 .dt_compat = spear300_dt_board_compat,
0214 MACHINE_END