18c2ecf20Sopenharmony_ci/* 28c2ecf20Sopenharmony_ci * arch/arm/mach-spear6xx/spear6xx.c 38c2ecf20Sopenharmony_ci * 48c2ecf20Sopenharmony_ci * SPEAr6XX machines common source file 58c2ecf20Sopenharmony_ci * 68c2ecf20Sopenharmony_ci * Copyright (C) 2009 ST Microelectronics 78c2ecf20Sopenharmony_ci * Rajeev Kumar<rajeev-dlh.kumar@st.com> 88c2ecf20Sopenharmony_ci * 98c2ecf20Sopenharmony_ci * Copyright 2012 Stefan Roese <sr@denx.de> 108c2ecf20Sopenharmony_ci * 118c2ecf20Sopenharmony_ci * This file is licensed under the terms of the GNU General Public 128c2ecf20Sopenharmony_ci * License version 2. This program is licensed "as is" without any 138c2ecf20Sopenharmony_ci * warranty of any kind, whether express or implied. 148c2ecf20Sopenharmony_ci */ 158c2ecf20Sopenharmony_ci 168c2ecf20Sopenharmony_ci#include <linux/amba/pl08x.h> 178c2ecf20Sopenharmony_ci#include <linux/clk.h> 188c2ecf20Sopenharmony_ci#include <linux/err.h> 198c2ecf20Sopenharmony_ci#include <linux/of.h> 208c2ecf20Sopenharmony_ci#include <linux/of_address.h> 218c2ecf20Sopenharmony_ci#include <linux/of_platform.h> 228c2ecf20Sopenharmony_ci#include <linux/amba/pl080.h> 238c2ecf20Sopenharmony_ci#include <asm/mach/arch.h> 248c2ecf20Sopenharmony_ci#include <asm/mach/time.h> 258c2ecf20Sopenharmony_ci#include <asm/mach/map.h> 268c2ecf20Sopenharmony_ci#include "pl080.h" 278c2ecf20Sopenharmony_ci#include "generic.h" 288c2ecf20Sopenharmony_ci#include <mach/spear.h> 298c2ecf20Sopenharmony_ci#include <mach/misc_regs.h> 308c2ecf20Sopenharmony_ci 318c2ecf20Sopenharmony_ci/* dmac device registration */ 328c2ecf20Sopenharmony_cistatic struct pl08x_channel_data spear600_dma_info[] = { 338c2ecf20Sopenharmony_ci { 348c2ecf20Sopenharmony_ci .bus_id = "ssp1_rx", 358c2ecf20Sopenharmony_ci .min_signal = 0, 368c2ecf20Sopenharmony_ci .max_signal = 0, 378c2ecf20Sopenharmony_ci .muxval = 0, 388c2ecf20Sopenharmony_ci .periph_buses = PL08X_AHB1, 398c2ecf20Sopenharmony_ci }, { 408c2ecf20Sopenharmony_ci .bus_id = "ssp1_tx", 418c2ecf20Sopenharmony_ci .min_signal = 1, 428c2ecf20Sopenharmony_ci .max_signal = 1, 438c2ecf20Sopenharmony_ci .muxval = 0, 448c2ecf20Sopenharmony_ci .periph_buses = PL08X_AHB1, 458c2ecf20Sopenharmony_ci }, { 468c2ecf20Sopenharmony_ci .bus_id = "uart0_rx", 478c2ecf20Sopenharmony_ci .min_signal = 2, 488c2ecf20Sopenharmony_ci .max_signal = 2, 498c2ecf20Sopenharmony_ci .muxval = 0, 508c2ecf20Sopenharmony_ci .periph_buses = PL08X_AHB1, 518c2ecf20Sopenharmony_ci }, { 528c2ecf20Sopenharmony_ci .bus_id = "uart0_tx", 538c2ecf20Sopenharmony_ci .min_signal = 3, 548c2ecf20Sopenharmony_ci .max_signal = 3, 558c2ecf20Sopenharmony_ci .muxval = 0, 568c2ecf20Sopenharmony_ci .periph_buses = PL08X_AHB1, 578c2ecf20Sopenharmony_ci }, { 588c2ecf20Sopenharmony_ci .bus_id = "uart1_rx", 598c2ecf20Sopenharmony_ci .min_signal = 4, 608c2ecf20Sopenharmony_ci .max_signal = 4, 618c2ecf20Sopenharmony_ci .muxval = 0, 628c2ecf20Sopenharmony_ci .periph_buses = PL08X_AHB1, 638c2ecf20Sopenharmony_ci }, { 648c2ecf20Sopenharmony_ci .bus_id = "uart1_tx", 658c2ecf20Sopenharmony_ci .min_signal = 5, 668c2ecf20Sopenharmony_ci .max_signal = 5, 678c2ecf20Sopenharmony_ci .muxval = 0, 688c2ecf20Sopenharmony_ci .periph_buses = PL08X_AHB1, 698c2ecf20Sopenharmony_ci }, { 708c2ecf20Sopenharmony_ci .bus_id = "ssp2_rx", 718c2ecf20Sopenharmony_ci .min_signal = 6, 728c2ecf20Sopenharmony_ci .max_signal = 6, 738c2ecf20Sopenharmony_ci .muxval = 0, 748c2ecf20Sopenharmony_ci .periph_buses = PL08X_AHB2, 758c2ecf20Sopenharmony_ci }, { 768c2ecf20Sopenharmony_ci .bus_id = "ssp2_tx", 778c2ecf20Sopenharmony_ci .min_signal = 7, 788c2ecf20Sopenharmony_ci .max_signal = 7, 798c2ecf20Sopenharmony_ci .muxval = 0, 808c2ecf20Sopenharmony_ci .periph_buses = PL08X_AHB2, 818c2ecf20Sopenharmony_ci }, { 828c2ecf20Sopenharmony_ci .bus_id = "ssp0_rx", 838c2ecf20Sopenharmony_ci .min_signal = 8, 848c2ecf20Sopenharmony_ci .max_signal = 8, 858c2ecf20Sopenharmony_ci .muxval = 0, 868c2ecf20Sopenharmony_ci .periph_buses = PL08X_AHB1, 878c2ecf20Sopenharmony_ci }, { 888c2ecf20Sopenharmony_ci .bus_id = "ssp0_tx", 898c2ecf20Sopenharmony_ci .min_signal = 9, 908c2ecf20Sopenharmony_ci .max_signal = 9, 918c2ecf20Sopenharmony_ci .muxval = 0, 928c2ecf20Sopenharmony_ci .periph_buses = PL08X_AHB1, 938c2ecf20Sopenharmony_ci }, { 948c2ecf20Sopenharmony_ci .bus_id = "i2c_rx", 958c2ecf20Sopenharmony_ci .min_signal = 10, 968c2ecf20Sopenharmony_ci .max_signal = 10, 978c2ecf20Sopenharmony_ci .muxval = 0, 988c2ecf20Sopenharmony_ci .periph_buses = PL08X_AHB1, 998c2ecf20Sopenharmony_ci }, { 1008c2ecf20Sopenharmony_ci .bus_id = "i2c_tx", 1018c2ecf20Sopenharmony_ci .min_signal = 11, 1028c2ecf20Sopenharmony_ci .max_signal = 11, 1038c2ecf20Sopenharmony_ci .muxval = 0, 1048c2ecf20Sopenharmony_ci .periph_buses = PL08X_AHB1, 1058c2ecf20Sopenharmony_ci }, { 1068c2ecf20Sopenharmony_ci .bus_id = "irda", 1078c2ecf20Sopenharmony_ci .min_signal = 12, 1088c2ecf20Sopenharmony_ci .max_signal = 12, 1098c2ecf20Sopenharmony_ci .muxval = 0, 1108c2ecf20Sopenharmony_ci .periph_buses = PL08X_AHB1, 1118c2ecf20Sopenharmony_ci }, { 1128c2ecf20Sopenharmony_ci .bus_id = "adc", 1138c2ecf20Sopenharmony_ci .min_signal = 13, 1148c2ecf20Sopenharmony_ci .max_signal = 13, 1158c2ecf20Sopenharmony_ci .muxval = 0, 1168c2ecf20Sopenharmony_ci .periph_buses = PL08X_AHB2, 1178c2ecf20Sopenharmony_ci }, { 1188c2ecf20Sopenharmony_ci .bus_id = "to_jpeg", 1198c2ecf20Sopenharmony_ci .min_signal = 14, 1208c2ecf20Sopenharmony_ci .max_signal = 14, 1218c2ecf20Sopenharmony_ci .muxval = 0, 1228c2ecf20Sopenharmony_ci .periph_buses = PL08X_AHB1, 1238c2ecf20Sopenharmony_ci }, { 1248c2ecf20Sopenharmony_ci .bus_id = "from_jpeg", 1258c2ecf20Sopenharmony_ci .min_signal = 15, 1268c2ecf20Sopenharmony_ci .max_signal = 15, 1278c2ecf20Sopenharmony_ci .muxval = 0, 1288c2ecf20Sopenharmony_ci .periph_buses = PL08X_AHB1, 1298c2ecf20Sopenharmony_ci }, { 1308c2ecf20Sopenharmony_ci .bus_id = "ras0_rx", 1318c2ecf20Sopenharmony_ci .min_signal = 0, 1328c2ecf20Sopenharmony_ci .max_signal = 0, 1338c2ecf20Sopenharmony_ci .muxval = 1, 1348c2ecf20Sopenharmony_ci .periph_buses = PL08X_AHB1, 1358c2ecf20Sopenharmony_ci }, { 1368c2ecf20Sopenharmony_ci .bus_id = "ras0_tx", 1378c2ecf20Sopenharmony_ci .min_signal = 1, 1388c2ecf20Sopenharmony_ci .max_signal = 1, 1398c2ecf20Sopenharmony_ci .muxval = 1, 1408c2ecf20Sopenharmony_ci .periph_buses = PL08X_AHB1, 1418c2ecf20Sopenharmony_ci }, { 1428c2ecf20Sopenharmony_ci .bus_id = "ras1_rx", 1438c2ecf20Sopenharmony_ci .min_signal = 2, 1448c2ecf20Sopenharmony_ci .max_signal = 2, 1458c2ecf20Sopenharmony_ci .muxval = 1, 1468c2ecf20Sopenharmony_ci .periph_buses = PL08X_AHB1, 1478c2ecf20Sopenharmony_ci }, { 1488c2ecf20Sopenharmony_ci .bus_id = "ras1_tx", 1498c2ecf20Sopenharmony_ci .min_signal = 3, 1508c2ecf20Sopenharmony_ci .max_signal = 3, 1518c2ecf20Sopenharmony_ci .muxval = 1, 1528c2ecf20Sopenharmony_ci .periph_buses = PL08X_AHB1, 1538c2ecf20Sopenharmony_ci }, { 1548c2ecf20Sopenharmony_ci .bus_id = "ras2_rx", 1558c2ecf20Sopenharmony_ci .min_signal = 4, 1568c2ecf20Sopenharmony_ci .max_signal = 4, 1578c2ecf20Sopenharmony_ci .muxval = 1, 1588c2ecf20Sopenharmony_ci .periph_buses = PL08X_AHB1, 1598c2ecf20Sopenharmony_ci }, { 1608c2ecf20Sopenharmony_ci .bus_id = "ras2_tx", 1618c2ecf20Sopenharmony_ci .min_signal = 5, 1628c2ecf20Sopenharmony_ci .max_signal = 5, 1638c2ecf20Sopenharmony_ci .muxval = 1, 1648c2ecf20Sopenharmony_ci .periph_buses = PL08X_AHB1, 1658c2ecf20Sopenharmony_ci }, { 1668c2ecf20Sopenharmony_ci .bus_id = "ras3_rx", 1678c2ecf20Sopenharmony_ci .min_signal = 6, 1688c2ecf20Sopenharmony_ci .max_signal = 6, 1698c2ecf20Sopenharmony_ci .muxval = 1, 1708c2ecf20Sopenharmony_ci .periph_buses = PL08X_AHB1, 1718c2ecf20Sopenharmony_ci }, { 1728c2ecf20Sopenharmony_ci .bus_id = "ras3_tx", 1738c2ecf20Sopenharmony_ci .min_signal = 7, 1748c2ecf20Sopenharmony_ci .max_signal = 7, 1758c2ecf20Sopenharmony_ci .muxval = 1, 1768c2ecf20Sopenharmony_ci .periph_buses = PL08X_AHB1, 1778c2ecf20Sopenharmony_ci }, { 1788c2ecf20Sopenharmony_ci .bus_id = "ras4_rx", 1798c2ecf20Sopenharmony_ci .min_signal = 8, 1808c2ecf20Sopenharmony_ci .max_signal = 8, 1818c2ecf20Sopenharmony_ci .muxval = 1, 1828c2ecf20Sopenharmony_ci .periph_buses = PL08X_AHB1, 1838c2ecf20Sopenharmony_ci }, { 1848c2ecf20Sopenharmony_ci .bus_id = "ras4_tx", 1858c2ecf20Sopenharmony_ci .min_signal = 9, 1868c2ecf20Sopenharmony_ci .max_signal = 9, 1878c2ecf20Sopenharmony_ci .muxval = 1, 1888c2ecf20Sopenharmony_ci .periph_buses = PL08X_AHB1, 1898c2ecf20Sopenharmony_ci }, { 1908c2ecf20Sopenharmony_ci .bus_id = "ras5_rx", 1918c2ecf20Sopenharmony_ci .min_signal = 10, 1928c2ecf20Sopenharmony_ci .max_signal = 10, 1938c2ecf20Sopenharmony_ci .muxval = 1, 1948c2ecf20Sopenharmony_ci .periph_buses = PL08X_AHB1, 1958c2ecf20Sopenharmony_ci }, { 1968c2ecf20Sopenharmony_ci .bus_id = "ras5_tx", 1978c2ecf20Sopenharmony_ci .min_signal = 11, 1988c2ecf20Sopenharmony_ci .max_signal = 11, 1998c2ecf20Sopenharmony_ci .muxval = 1, 2008c2ecf20Sopenharmony_ci .periph_buses = PL08X_AHB1, 2018c2ecf20Sopenharmony_ci }, { 2028c2ecf20Sopenharmony_ci .bus_id = "ras6_rx", 2038c2ecf20Sopenharmony_ci .min_signal = 12, 2048c2ecf20Sopenharmony_ci .max_signal = 12, 2058c2ecf20Sopenharmony_ci .muxval = 1, 2068c2ecf20Sopenharmony_ci .periph_buses = PL08X_AHB1, 2078c2ecf20Sopenharmony_ci }, { 2088c2ecf20Sopenharmony_ci .bus_id = "ras6_tx", 2098c2ecf20Sopenharmony_ci .min_signal = 13, 2108c2ecf20Sopenharmony_ci .max_signal = 13, 2118c2ecf20Sopenharmony_ci .muxval = 1, 2128c2ecf20Sopenharmony_ci .periph_buses = PL08X_AHB1, 2138c2ecf20Sopenharmony_ci }, { 2148c2ecf20Sopenharmony_ci .bus_id = "ras7_rx", 2158c2ecf20Sopenharmony_ci .min_signal = 14, 2168c2ecf20Sopenharmony_ci .max_signal = 14, 2178c2ecf20Sopenharmony_ci .muxval = 1, 2188c2ecf20Sopenharmony_ci .periph_buses = PL08X_AHB1, 2198c2ecf20Sopenharmony_ci }, { 2208c2ecf20Sopenharmony_ci .bus_id = "ras7_tx", 2218c2ecf20Sopenharmony_ci .min_signal = 15, 2228c2ecf20Sopenharmony_ci .max_signal = 15, 2238c2ecf20Sopenharmony_ci .muxval = 1, 2248c2ecf20Sopenharmony_ci .periph_buses = PL08X_AHB1, 2258c2ecf20Sopenharmony_ci }, { 2268c2ecf20Sopenharmony_ci .bus_id = "ext0_rx", 2278c2ecf20Sopenharmony_ci .min_signal = 0, 2288c2ecf20Sopenharmony_ci .max_signal = 0, 2298c2ecf20Sopenharmony_ci .muxval = 2, 2308c2ecf20Sopenharmony_ci .periph_buses = PL08X_AHB2, 2318c2ecf20Sopenharmony_ci }, { 2328c2ecf20Sopenharmony_ci .bus_id = "ext0_tx", 2338c2ecf20Sopenharmony_ci .min_signal = 1, 2348c2ecf20Sopenharmony_ci .max_signal = 1, 2358c2ecf20Sopenharmony_ci .muxval = 2, 2368c2ecf20Sopenharmony_ci .periph_buses = PL08X_AHB2, 2378c2ecf20Sopenharmony_ci }, { 2388c2ecf20Sopenharmony_ci .bus_id = "ext1_rx", 2398c2ecf20Sopenharmony_ci .min_signal = 2, 2408c2ecf20Sopenharmony_ci .max_signal = 2, 2418c2ecf20Sopenharmony_ci .muxval = 2, 2428c2ecf20Sopenharmony_ci .periph_buses = PL08X_AHB2, 2438c2ecf20Sopenharmony_ci }, { 2448c2ecf20Sopenharmony_ci .bus_id = "ext1_tx", 2458c2ecf20Sopenharmony_ci .min_signal = 3, 2468c2ecf20Sopenharmony_ci .max_signal = 3, 2478c2ecf20Sopenharmony_ci .muxval = 2, 2488c2ecf20Sopenharmony_ci .periph_buses = PL08X_AHB2, 2498c2ecf20Sopenharmony_ci }, { 2508c2ecf20Sopenharmony_ci .bus_id = "ext2_rx", 2518c2ecf20Sopenharmony_ci .min_signal = 4, 2528c2ecf20Sopenharmony_ci .max_signal = 4, 2538c2ecf20Sopenharmony_ci .muxval = 2, 2548c2ecf20Sopenharmony_ci .periph_buses = PL08X_AHB2, 2558c2ecf20Sopenharmony_ci }, { 2568c2ecf20Sopenharmony_ci .bus_id = "ext2_tx", 2578c2ecf20Sopenharmony_ci .min_signal = 5, 2588c2ecf20Sopenharmony_ci .max_signal = 5, 2598c2ecf20Sopenharmony_ci .muxval = 2, 2608c2ecf20Sopenharmony_ci .periph_buses = PL08X_AHB2, 2618c2ecf20Sopenharmony_ci }, { 2628c2ecf20Sopenharmony_ci .bus_id = "ext3_rx", 2638c2ecf20Sopenharmony_ci .min_signal = 6, 2648c2ecf20Sopenharmony_ci .max_signal = 6, 2658c2ecf20Sopenharmony_ci .muxval = 2, 2668c2ecf20Sopenharmony_ci .periph_buses = PL08X_AHB2, 2678c2ecf20Sopenharmony_ci }, { 2688c2ecf20Sopenharmony_ci .bus_id = "ext3_tx", 2698c2ecf20Sopenharmony_ci .min_signal = 7, 2708c2ecf20Sopenharmony_ci .max_signal = 7, 2718c2ecf20Sopenharmony_ci .muxval = 2, 2728c2ecf20Sopenharmony_ci .periph_buses = PL08X_AHB2, 2738c2ecf20Sopenharmony_ci }, { 2748c2ecf20Sopenharmony_ci .bus_id = "ext4_rx", 2758c2ecf20Sopenharmony_ci .min_signal = 8, 2768c2ecf20Sopenharmony_ci .max_signal = 8, 2778c2ecf20Sopenharmony_ci .muxval = 2, 2788c2ecf20Sopenharmony_ci .periph_buses = PL08X_AHB2, 2798c2ecf20Sopenharmony_ci }, { 2808c2ecf20Sopenharmony_ci .bus_id = "ext4_tx", 2818c2ecf20Sopenharmony_ci .min_signal = 9, 2828c2ecf20Sopenharmony_ci .max_signal = 9, 2838c2ecf20Sopenharmony_ci .muxval = 2, 2848c2ecf20Sopenharmony_ci .periph_buses = PL08X_AHB2, 2858c2ecf20Sopenharmony_ci }, { 2868c2ecf20Sopenharmony_ci .bus_id = "ext5_rx", 2878c2ecf20Sopenharmony_ci .min_signal = 10, 2888c2ecf20Sopenharmony_ci .max_signal = 10, 2898c2ecf20Sopenharmony_ci .muxval = 2, 2908c2ecf20Sopenharmony_ci .periph_buses = PL08X_AHB2, 2918c2ecf20Sopenharmony_ci }, { 2928c2ecf20Sopenharmony_ci .bus_id = "ext5_tx", 2938c2ecf20Sopenharmony_ci .min_signal = 11, 2948c2ecf20Sopenharmony_ci .max_signal = 11, 2958c2ecf20Sopenharmony_ci .muxval = 2, 2968c2ecf20Sopenharmony_ci .periph_buses = PL08X_AHB2, 2978c2ecf20Sopenharmony_ci }, { 2988c2ecf20Sopenharmony_ci .bus_id = "ext6_rx", 2998c2ecf20Sopenharmony_ci .min_signal = 12, 3008c2ecf20Sopenharmony_ci .max_signal = 12, 3018c2ecf20Sopenharmony_ci .muxval = 2, 3028c2ecf20Sopenharmony_ci .periph_buses = PL08X_AHB2, 3038c2ecf20Sopenharmony_ci }, { 3048c2ecf20Sopenharmony_ci .bus_id = "ext6_tx", 3058c2ecf20Sopenharmony_ci .min_signal = 13, 3068c2ecf20Sopenharmony_ci .max_signal = 13, 3078c2ecf20Sopenharmony_ci .muxval = 2, 3088c2ecf20Sopenharmony_ci .periph_buses = PL08X_AHB2, 3098c2ecf20Sopenharmony_ci }, { 3108c2ecf20Sopenharmony_ci .bus_id = "ext7_rx", 3118c2ecf20Sopenharmony_ci .min_signal = 14, 3128c2ecf20Sopenharmony_ci .max_signal = 14, 3138c2ecf20Sopenharmony_ci .muxval = 2, 3148c2ecf20Sopenharmony_ci .periph_buses = PL08X_AHB2, 3158c2ecf20Sopenharmony_ci }, { 3168c2ecf20Sopenharmony_ci .bus_id = "ext7_tx", 3178c2ecf20Sopenharmony_ci .min_signal = 15, 3188c2ecf20Sopenharmony_ci .max_signal = 15, 3198c2ecf20Sopenharmony_ci .muxval = 2, 3208c2ecf20Sopenharmony_ci .periph_buses = PL08X_AHB2, 3218c2ecf20Sopenharmony_ci }, 3228c2ecf20Sopenharmony_ci}; 3238c2ecf20Sopenharmony_ci 3248c2ecf20Sopenharmony_cistatic struct pl08x_platform_data spear6xx_pl080_plat_data = { 3258c2ecf20Sopenharmony_ci .memcpy_burst_size = PL08X_BURST_SZ_16, 3268c2ecf20Sopenharmony_ci .memcpy_bus_width = PL08X_BUS_WIDTH_32_BITS, 3278c2ecf20Sopenharmony_ci .memcpy_prot_buff = true, 3288c2ecf20Sopenharmony_ci .memcpy_prot_cache = true, 3298c2ecf20Sopenharmony_ci .lli_buses = PL08X_AHB1, 3308c2ecf20Sopenharmony_ci .mem_buses = PL08X_AHB1, 3318c2ecf20Sopenharmony_ci .get_xfer_signal = pl080_get_signal, 3328c2ecf20Sopenharmony_ci .put_xfer_signal = pl080_put_signal, 3338c2ecf20Sopenharmony_ci .slave_channels = spear600_dma_info, 3348c2ecf20Sopenharmony_ci .num_slave_channels = ARRAY_SIZE(spear600_dma_info), 3358c2ecf20Sopenharmony_ci}; 3368c2ecf20Sopenharmony_ci 3378c2ecf20Sopenharmony_ci/* 3388c2ecf20Sopenharmony_ci * Following will create 16MB static virtual/physical mappings 3398c2ecf20Sopenharmony_ci * PHYSICAL VIRTUAL 3408c2ecf20Sopenharmony_ci * 0xF0000000 0xF0000000 3418c2ecf20Sopenharmony_ci * 0xF1000000 0xF1000000 3428c2ecf20Sopenharmony_ci * 0xD0000000 0xFD000000 3438c2ecf20Sopenharmony_ci * 0xFC000000 0xFC000000 3448c2ecf20Sopenharmony_ci */ 3458c2ecf20Sopenharmony_cistruct map_desc spear6xx_io_desc[] __initdata = { 3468c2ecf20Sopenharmony_ci { 3478c2ecf20Sopenharmony_ci .virtual = (unsigned long)VA_SPEAR6XX_ML_CPU_BASE, 3488c2ecf20Sopenharmony_ci .pfn = __phys_to_pfn(SPEAR_ICM3_ML1_2_BASE), 3498c2ecf20Sopenharmony_ci .length = 2 * SZ_16M, 3508c2ecf20Sopenharmony_ci .type = MT_DEVICE 3518c2ecf20Sopenharmony_ci }, { 3528c2ecf20Sopenharmony_ci .virtual = (unsigned long)VA_SPEAR_ICM1_2_BASE, 3538c2ecf20Sopenharmony_ci .pfn = __phys_to_pfn(SPEAR_ICM1_2_BASE), 3548c2ecf20Sopenharmony_ci .length = SZ_16M, 3558c2ecf20Sopenharmony_ci .type = MT_DEVICE 3568c2ecf20Sopenharmony_ci }, { 3578c2ecf20Sopenharmony_ci .virtual = (unsigned long)VA_SPEAR_ICM3_SMI_CTRL_BASE, 3588c2ecf20Sopenharmony_ci .pfn = __phys_to_pfn(SPEAR_ICM3_SMI_CTRL_BASE), 3598c2ecf20Sopenharmony_ci .length = SZ_16M, 3608c2ecf20Sopenharmony_ci .type = MT_DEVICE 3618c2ecf20Sopenharmony_ci }, 3628c2ecf20Sopenharmony_ci}; 3638c2ecf20Sopenharmony_ci 3648c2ecf20Sopenharmony_ci/* This will create static memory mapping for selected devices */ 3658c2ecf20Sopenharmony_civoid __init spear6xx_map_io(void) 3668c2ecf20Sopenharmony_ci{ 3678c2ecf20Sopenharmony_ci iotable_init(spear6xx_io_desc, ARRAY_SIZE(spear6xx_io_desc)); 3688c2ecf20Sopenharmony_ci} 3698c2ecf20Sopenharmony_ci 3708c2ecf20Sopenharmony_civoid __init spear6xx_timer_init(void) 3718c2ecf20Sopenharmony_ci{ 3728c2ecf20Sopenharmony_ci char pclk_name[] = "pll3_clk"; 3738c2ecf20Sopenharmony_ci struct clk *gpt_clk, *pclk; 3748c2ecf20Sopenharmony_ci 3758c2ecf20Sopenharmony_ci spear6xx_clk_init(MISC_BASE); 3768c2ecf20Sopenharmony_ci 3778c2ecf20Sopenharmony_ci /* get the system timer clock */ 3788c2ecf20Sopenharmony_ci gpt_clk = clk_get_sys("gpt0", NULL); 3798c2ecf20Sopenharmony_ci if (IS_ERR(gpt_clk)) { 3808c2ecf20Sopenharmony_ci pr_err("%s:couldn't get clk for gpt\n", __func__); 3818c2ecf20Sopenharmony_ci BUG(); 3828c2ecf20Sopenharmony_ci } 3838c2ecf20Sopenharmony_ci 3848c2ecf20Sopenharmony_ci /* get the suitable parent clock for timer*/ 3858c2ecf20Sopenharmony_ci pclk = clk_get(NULL, pclk_name); 3868c2ecf20Sopenharmony_ci if (IS_ERR(pclk)) { 3878c2ecf20Sopenharmony_ci pr_err("%s:couldn't get %s as parent for gpt\n", 3888c2ecf20Sopenharmony_ci __func__, pclk_name); 3898c2ecf20Sopenharmony_ci BUG(); 3908c2ecf20Sopenharmony_ci } 3918c2ecf20Sopenharmony_ci 3928c2ecf20Sopenharmony_ci clk_set_parent(gpt_clk, pclk); 3938c2ecf20Sopenharmony_ci clk_put(gpt_clk); 3948c2ecf20Sopenharmony_ci clk_put(pclk); 3958c2ecf20Sopenharmony_ci 3968c2ecf20Sopenharmony_ci spear_setup_of_timer(); 3978c2ecf20Sopenharmony_ci} 3988c2ecf20Sopenharmony_ci 3998c2ecf20Sopenharmony_ci/* Add auxdata to pass platform data */ 4008c2ecf20Sopenharmony_cistruct of_dev_auxdata spear6xx_auxdata_lookup[] __initdata = { 4018c2ecf20Sopenharmony_ci OF_DEV_AUXDATA("arm,pl080", SPEAR_ICM3_DMA_BASE, NULL, 4028c2ecf20Sopenharmony_ci &spear6xx_pl080_plat_data), 4038c2ecf20Sopenharmony_ci {} 4048c2ecf20Sopenharmony_ci}; 4058c2ecf20Sopenharmony_ci 4068c2ecf20Sopenharmony_cistatic void __init spear600_dt_init(void) 4078c2ecf20Sopenharmony_ci{ 4088c2ecf20Sopenharmony_ci of_platform_default_populate(NULL, spear6xx_auxdata_lookup, NULL); 4098c2ecf20Sopenharmony_ci} 4108c2ecf20Sopenharmony_ci 4118c2ecf20Sopenharmony_cistatic const char *spear600_dt_board_compat[] = { 4128c2ecf20Sopenharmony_ci "st,spear600", 4138c2ecf20Sopenharmony_ci NULL 4148c2ecf20Sopenharmony_ci}; 4158c2ecf20Sopenharmony_ci 4168c2ecf20Sopenharmony_ciDT_MACHINE_START(SPEAR600_DT, "ST SPEAr600 (Flattened Device Tree)") 4178c2ecf20Sopenharmony_ci .map_io = spear6xx_map_io, 4188c2ecf20Sopenharmony_ci .init_time = spear6xx_timer_init, 4198c2ecf20Sopenharmony_ci .init_machine = spear600_dt_init, 4208c2ecf20Sopenharmony_ci .restart = spear_restart, 4218c2ecf20Sopenharmony_ci .dt_compat = spear600_dt_board_compat, 4228c2ecf20Sopenharmony_ciMACHINE_END 423