0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011 #define pr_fmt(fmt) "SPEAr310: " fmt
0012
0013 #include <linux/amba/pl08x.h>
0014 #include <linux/amba/serial.h>
0015 #include <linux/of_platform.h>
0016 #include <asm/mach/arch.h>
0017 #include "generic.h"
0018 #include "spear.h"
0019
0020 #define SPEAR310_UART1_BASE UL(0xB2000000)
0021 #define SPEAR310_UART2_BASE UL(0xB2080000)
0022 #define SPEAR310_UART3_BASE UL(0xB2100000)
0023 #define SPEAR310_UART4_BASE UL(0xB2180000)
0024 #define SPEAR310_UART5_BASE UL(0xB2200000)
0025
0026
0027 struct pl08x_channel_data spear310_dma_info[] = {
0028 {
0029 .bus_id = "uart0_rx",
0030 .min_signal = 2,
0031 .max_signal = 2,
0032 .muxval = 0,
0033 .periph_buses = PL08X_AHB1,
0034 }, {
0035 .bus_id = "uart0_tx",
0036 .min_signal = 3,
0037 .max_signal = 3,
0038 .muxval = 0,
0039 .periph_buses = PL08X_AHB1,
0040 }, {
0041 .bus_id = "ssp0_rx",
0042 .min_signal = 8,
0043 .max_signal = 8,
0044 .muxval = 0,
0045 .periph_buses = PL08X_AHB1,
0046 }, {
0047 .bus_id = "ssp0_tx",
0048 .min_signal = 9,
0049 .max_signal = 9,
0050 .muxval = 0,
0051 .periph_buses = PL08X_AHB1,
0052 }, {
0053 .bus_id = "i2c_rx",
0054 .min_signal = 10,
0055 .max_signal = 10,
0056 .muxval = 0,
0057 .periph_buses = PL08X_AHB1,
0058 }, {
0059 .bus_id = "i2c_tx",
0060 .min_signal = 11,
0061 .max_signal = 11,
0062 .muxval = 0,
0063 .periph_buses = PL08X_AHB1,
0064 }, {
0065 .bus_id = "irda",
0066 .min_signal = 12,
0067 .max_signal = 12,
0068 .muxval = 0,
0069 .periph_buses = PL08X_AHB1,
0070 }, {
0071 .bus_id = "adc",
0072 .min_signal = 13,
0073 .max_signal = 13,
0074 .muxval = 0,
0075 .periph_buses = PL08X_AHB1,
0076 }, {
0077 .bus_id = "to_jpeg",
0078 .min_signal = 14,
0079 .max_signal = 14,
0080 .muxval = 0,
0081 .periph_buses = PL08X_AHB1,
0082 }, {
0083 .bus_id = "from_jpeg",
0084 .min_signal = 15,
0085 .max_signal = 15,
0086 .muxval = 0,
0087 .periph_buses = PL08X_AHB1,
0088 }, {
0089 .bus_id = "uart1_rx",
0090 .min_signal = 0,
0091 .max_signal = 0,
0092 .muxval = 1,
0093 .periph_buses = PL08X_AHB1,
0094 }, {
0095 .bus_id = "uart1_tx",
0096 .min_signal = 1,
0097 .max_signal = 1,
0098 .muxval = 1,
0099 .periph_buses = PL08X_AHB1,
0100 }, {
0101 .bus_id = "uart2_rx",
0102 .min_signal = 2,
0103 .max_signal = 2,
0104 .muxval = 1,
0105 .periph_buses = PL08X_AHB1,
0106 }, {
0107 .bus_id = "uart2_tx",
0108 .min_signal = 3,
0109 .max_signal = 3,
0110 .muxval = 1,
0111 .periph_buses = PL08X_AHB1,
0112 }, {
0113 .bus_id = "uart3_rx",
0114 .min_signal = 4,
0115 .max_signal = 4,
0116 .muxval = 1,
0117 .periph_buses = PL08X_AHB1,
0118 }, {
0119 .bus_id = "uart3_tx",
0120 .min_signal = 5,
0121 .max_signal = 5,
0122 .muxval = 1,
0123 .periph_buses = PL08X_AHB1,
0124 }, {
0125 .bus_id = "uart4_rx",
0126 .min_signal = 6,
0127 .max_signal = 6,
0128 .muxval = 1,
0129 .periph_buses = PL08X_AHB1,
0130 }, {
0131 .bus_id = "uart4_tx",
0132 .min_signal = 7,
0133 .max_signal = 7,
0134 .muxval = 1,
0135 .periph_buses = PL08X_AHB1,
0136 }, {
0137 .bus_id = "uart5_rx",
0138 .min_signal = 8,
0139 .max_signal = 8,
0140 .muxval = 1,
0141 .periph_buses = PL08X_AHB1,
0142 }, {
0143 .bus_id = "uart5_tx",
0144 .min_signal = 9,
0145 .max_signal = 9,
0146 .muxval = 1,
0147 .periph_buses = PL08X_AHB1,
0148 }, {
0149 .bus_id = "ras5_rx",
0150 .min_signal = 10,
0151 .max_signal = 10,
0152 .muxval = 1,
0153 .periph_buses = PL08X_AHB1,
0154 }, {
0155 .bus_id = "ras5_tx",
0156 .min_signal = 11,
0157 .max_signal = 11,
0158 .muxval = 1,
0159 .periph_buses = PL08X_AHB1,
0160 }, {
0161 .bus_id = "ras6_rx",
0162 .min_signal = 12,
0163 .max_signal = 12,
0164 .muxval = 1,
0165 .periph_buses = PL08X_AHB1,
0166 }, {
0167 .bus_id = "ras6_tx",
0168 .min_signal = 13,
0169 .max_signal = 13,
0170 .muxval = 1,
0171 .periph_buses = PL08X_AHB1,
0172 }, {
0173 .bus_id = "ras7_rx",
0174 .min_signal = 14,
0175 .max_signal = 14,
0176 .muxval = 1,
0177 .periph_buses = PL08X_AHB1,
0178 }, {
0179 .bus_id = "ras7_tx",
0180 .min_signal = 15,
0181 .max_signal = 15,
0182 .muxval = 1,
0183 .periph_buses = PL08X_AHB1,
0184 },
0185 };
0186
0187
0188 static struct amba_pl011_data spear310_uart_data[] = {
0189 {
0190 .dma_filter = pl08x_filter_id,
0191 .dma_tx_param = "uart1_tx",
0192 .dma_rx_param = "uart1_rx",
0193 }, {
0194 .dma_filter = pl08x_filter_id,
0195 .dma_tx_param = "uart2_tx",
0196 .dma_rx_param = "uart2_rx",
0197 }, {
0198 .dma_filter = pl08x_filter_id,
0199 .dma_tx_param = "uart3_tx",
0200 .dma_rx_param = "uart3_rx",
0201 }, {
0202 .dma_filter = pl08x_filter_id,
0203 .dma_tx_param = "uart4_tx",
0204 .dma_rx_param = "uart4_rx",
0205 }, {
0206 .dma_filter = pl08x_filter_id,
0207 .dma_tx_param = "uart5_tx",
0208 .dma_rx_param = "uart5_rx",
0209 },
0210 };
0211
0212
0213 static struct of_dev_auxdata spear310_auxdata_lookup[] __initdata = {
0214 OF_DEV_AUXDATA("arm,pl022", SPEAR3XX_ICM1_SSP_BASE, NULL,
0215 &pl022_plat_data),
0216 OF_DEV_AUXDATA("arm,pl080", SPEAR_ICM3_DMA_BASE, NULL,
0217 &pl080_plat_data),
0218 OF_DEV_AUXDATA("arm,pl011", SPEAR310_UART1_BASE, NULL,
0219 &spear310_uart_data[0]),
0220 OF_DEV_AUXDATA("arm,pl011", SPEAR310_UART2_BASE, NULL,
0221 &spear310_uart_data[1]),
0222 OF_DEV_AUXDATA("arm,pl011", SPEAR310_UART3_BASE, NULL,
0223 &spear310_uart_data[2]),
0224 OF_DEV_AUXDATA("arm,pl011", SPEAR310_UART4_BASE, NULL,
0225 &spear310_uart_data[3]),
0226 OF_DEV_AUXDATA("arm,pl011", SPEAR310_UART5_BASE, NULL,
0227 &spear310_uart_data[4]),
0228 {}
0229 };
0230
0231 static void __init spear310_dt_init(void)
0232 {
0233 pl080_plat_data.slave_channels = spear310_dma_info;
0234 pl080_plat_data.num_slave_channels = ARRAY_SIZE(spear310_dma_info);
0235
0236 of_platform_default_populate(NULL, spear310_auxdata_lookup, NULL);
0237 }
0238
0239 static const char * const spear310_dt_board_compat[] = {
0240 "st,spear310",
0241 "st,spear310-evb",
0242 NULL,
0243 };
0244
0245 static void __init spear310_map_io(void)
0246 {
0247 spear3xx_map_io();
0248 }
0249
0250 DT_MACHINE_START(SPEAR310_DT, "ST SPEAr310 SoC with Flattened Device Tree")
0251 .map_io = spear310_map_io,
0252 .init_time = spear3xx_timer_init,
0253 .init_machine = spear310_dt_init,
0254 .restart = spear_restart,
0255 .dt_compat = spear310_dt_board_compat,
0256 MACHINE_END