2022-06-07 17:11:14 +03:00
// SPDX-License-Identifier: GPL-2.0-only
2010-04-01 15:30:58 +04:00
/*
* arch / arm / mach - spear3xx / spear310 . c
*
* SPEAr310 machine source file
*
2012-03-22 22:47:43 +04:00
* Copyright ( C ) 2009 - 2012 ST Microelectronics
2015-07-18 02:23:50 +03:00
* Viresh Kumar < vireshk @ kernel . org >
2010-04-01 15:30:58 +04:00
*/
2012-03-26 09:09:43 +04:00
# define pr_fmt(fmt) "SPEAr310: " fmt
2012-03-22 22:47:43 +04:00
# include <linux/amba/pl08x.h>
# include <linux/amba/serial.h>
# include <linux/of_platform.h>
# include <asm/mach/arch.h>
2012-12-02 18:49:04 +04:00
# include "generic.h"
2022-04-28 10:44:23 +03:00
# include "spear.h"
2012-04-11 21:30:11 +04:00
# define SPEAR310_UART1_BASE UL(0xB2000000)
# define SPEAR310_UART2_BASE UL(0xB2080000)
# define SPEAR310_UART3_BASE UL(0xB2100000)
# define SPEAR310_UART4_BASE UL(0xB2180000)
# define SPEAR310_UART5_BASE UL(0xB2200000)
2010-05-03 12:24:30 +04:00
2012-03-26 08:59:23 +04:00
/* DMAC platform data's slave info */
struct pl08x_channel_data spear310_dma_info [ ] = {
{
. bus_id = " uart0_rx " ,
. min_signal = 2 ,
. max_signal = 2 ,
. muxval = 0 ,
. periph_buses = PL08X_AHB1 ,
} , {
. bus_id = " uart0_tx " ,
. min_signal = 3 ,
. max_signal = 3 ,
. muxval = 0 ,
. periph_buses = PL08X_AHB1 ,
} , {
. bus_id = " ssp0_rx " ,
. min_signal = 8 ,
. max_signal = 8 ,
. muxval = 0 ,
. periph_buses = PL08X_AHB1 ,
} , {
. bus_id = " ssp0_tx " ,
. min_signal = 9 ,
. max_signal = 9 ,
. muxval = 0 ,
. periph_buses = PL08X_AHB1 ,
} , {
. bus_id = " i2c_rx " ,
. min_signal = 10 ,
. max_signal = 10 ,
. muxval = 0 ,
. periph_buses = PL08X_AHB1 ,
} , {
. bus_id = " i2c_tx " ,
. min_signal = 11 ,
. max_signal = 11 ,
. muxval = 0 ,
. periph_buses = PL08X_AHB1 ,
} , {
. bus_id = " irda " ,
. min_signal = 12 ,
. max_signal = 12 ,
. muxval = 0 ,
. periph_buses = PL08X_AHB1 ,
} , {
. bus_id = " adc " ,
. min_signal = 13 ,
. max_signal = 13 ,
. muxval = 0 ,
. periph_buses = PL08X_AHB1 ,
} , {
. bus_id = " to_jpeg " ,
. min_signal = 14 ,
. max_signal = 14 ,
. muxval = 0 ,
. periph_buses = PL08X_AHB1 ,
} , {
. bus_id = " from_jpeg " ,
. min_signal = 15 ,
. max_signal = 15 ,
. muxval = 0 ,
. periph_buses = PL08X_AHB1 ,
} , {
. bus_id = " uart1_rx " ,
. min_signal = 0 ,
. max_signal = 0 ,
. muxval = 1 ,
. periph_buses = PL08X_AHB1 ,
} , {
. bus_id = " uart1_tx " ,
. min_signal = 1 ,
. max_signal = 1 ,
. muxval = 1 ,
. periph_buses = PL08X_AHB1 ,
} , {
. bus_id = " uart2_rx " ,
. min_signal = 2 ,
. max_signal = 2 ,
. muxval = 1 ,
. periph_buses = PL08X_AHB1 ,
} , {
. bus_id = " uart2_tx " ,
. min_signal = 3 ,
. max_signal = 3 ,
. muxval = 1 ,
. periph_buses = PL08X_AHB1 ,
} , {
. bus_id = " uart3_rx " ,
. min_signal = 4 ,
. max_signal = 4 ,
. muxval = 1 ,
. periph_buses = PL08X_AHB1 ,
} , {
. bus_id = " uart3_tx " ,
. min_signal = 5 ,
. max_signal = 5 ,
. muxval = 1 ,
. periph_buses = PL08X_AHB1 ,
} , {
. bus_id = " uart4_rx " ,
. min_signal = 6 ,
. max_signal = 6 ,
. muxval = 1 ,
. periph_buses = PL08X_AHB1 ,
} , {
. bus_id = " uart4_tx " ,
. min_signal = 7 ,
. max_signal = 7 ,
. muxval = 1 ,
. periph_buses = PL08X_AHB1 ,
} , {
. bus_id = " uart5_rx " ,
. min_signal = 8 ,
. max_signal = 8 ,
. muxval = 1 ,
. periph_buses = PL08X_AHB1 ,
} , {
. bus_id = " uart5_tx " ,
. min_signal = 9 ,
. max_signal = 9 ,
. muxval = 1 ,
. periph_buses = PL08X_AHB1 ,
} , {
. bus_id = " ras5_rx " ,
. min_signal = 10 ,
. max_signal = 10 ,
. muxval = 1 ,
. periph_buses = PL08X_AHB1 ,
} , {
. bus_id = " ras5_tx " ,
. min_signal = 11 ,
. max_signal = 11 ,
. muxval = 1 ,
. periph_buses = PL08X_AHB1 ,
} , {
. bus_id = " ras6_rx " ,
. min_signal = 12 ,
. max_signal = 12 ,
. muxval = 1 ,
. periph_buses = PL08X_AHB1 ,
} , {
. bus_id = " ras6_tx " ,
. min_signal = 13 ,
. max_signal = 13 ,
. muxval = 1 ,
. periph_buses = PL08X_AHB1 ,
} , {
. bus_id = " ras7_rx " ,
. min_signal = 14 ,
. max_signal = 14 ,
. muxval = 1 ,
. periph_buses = PL08X_AHB1 ,
} , {
. bus_id = " ras7_tx " ,
. min_signal = 15 ,
. max_signal = 15 ,
. muxval = 1 ,
. periph_buses = PL08X_AHB1 ,
} ,
} ;
2012-03-22 22:47:43 +04:00
/* uart devices plat data */
static struct amba_pl011_data spear310_uart_data [ ] = {
{
. dma_filter = pl08x_filter_id ,
. dma_tx_param = " uart1_tx " ,
. dma_rx_param = " uart1_rx " ,
} , {
. dma_filter = pl08x_filter_id ,
. dma_tx_param = " uart2_tx " ,
. dma_rx_param = " uart2_rx " ,
} , {
. dma_filter = pl08x_filter_id ,
. dma_tx_param = " uart3_tx " ,
. dma_rx_param = " uart3_rx " ,
} , {
. dma_filter = pl08x_filter_id ,
. dma_tx_param = " uart4_tx " ,
. dma_rx_param = " uart4_rx " ,
} , {
. dma_filter = pl08x_filter_id ,
. dma_tx_param = " uart5_tx " ,
. dma_rx_param = " uart5_rx " ,
} ,
} ;
2011-03-07 07:57:05 +03:00
2012-03-22 22:47:43 +04:00
/* Add SPEAr310 auxdata to pass platform data */
static struct of_dev_auxdata spear310_auxdata_lookup [ ] __initdata = {
OF_DEV_AUXDATA ( " arm,pl022 " , SPEAR3XX_ICM1_SSP_BASE , NULL ,
& pl022_plat_data ) ,
2012-12-02 17:45:27 +04:00
OF_DEV_AUXDATA ( " arm,pl080 " , SPEAR_ICM3_DMA_BASE , NULL ,
2012-03-26 08:59:23 +04:00
& pl080_plat_data ) ,
2012-03-22 22:47:43 +04:00
OF_DEV_AUXDATA ( " arm,pl011 " , SPEAR310_UART1_BASE , NULL ,
& spear310_uart_data [ 0 ] ) ,
OF_DEV_AUXDATA ( " arm,pl011 " , SPEAR310_UART2_BASE , NULL ,
& spear310_uart_data [ 1 ] ) ,
OF_DEV_AUXDATA ( " arm,pl011 " , SPEAR310_UART3_BASE , NULL ,
& spear310_uart_data [ 2 ] ) ,
OF_DEV_AUXDATA ( " arm,pl011 " , SPEAR310_UART4_BASE , NULL ,
& spear310_uart_data [ 3 ] ) ,
OF_DEV_AUXDATA ( " arm,pl011 " , SPEAR310_UART5_BASE , NULL ,
& spear310_uart_data [ 4 ] ) ,
{ }
} ;
static void __init spear310_dt_init ( void )
2010-04-01 15:30:58 +04:00
{
2012-03-26 08:59:23 +04:00
pl080_plat_data . slave_channels = spear310_dma_info ;
pl080_plat_data . num_slave_channels = ARRAY_SIZE ( spear310_dma_info ) ;
2016-06-01 09:53:05 +03:00
of_platform_default_populate ( NULL , spear310_auxdata_lookup , NULL ) ;
2010-04-01 15:31:29 +04:00
}
2012-03-22 22:47:43 +04:00
static const char * const spear310_dt_board_compat [ ] = {
" st,spear310 " ,
" st,spear310-evb " ,
NULL ,
} ;
static void __init spear310_map_io ( void )
{
spear3xx_map_io ( ) ;
}
DT_MACHINE_START ( SPEAR310_DT , " ST SPEAr310 SoC with Flattened Device Tree " )
. map_io = spear310_map_io ,
2012-11-08 23:40:59 +04:00
. init_time = spear3xx_timer_init ,
2012-03-22 22:47:43 +04:00
. init_machine = spear310_dt_init ,
. restart = spear_restart ,
. dt_compat = spear310_dt_board_compat ,
MACHINE_END