1*0fdebc5eSThomas Gleixner // SPDX-License-Identifier: GPL-2.0-only 2a7ed099fSArnd Bergmann /* 3a7ed099fSArnd Bergmann * arch/arm/mach-spear6xx/spear6xx.c 4a7ed099fSArnd Bergmann * 5a7ed099fSArnd Bergmann * SPEAr6XX machines common source file 6a7ed099fSArnd Bergmann * 7a7ed099fSArnd Bergmann * Copyright (C) 2009 ST Microelectronics 8a7ed099fSArnd Bergmann * Rajeev Kumar<rajeev-dlh.kumar@st.com> 9a7ed099fSArnd Bergmann * 10a7ed099fSArnd Bergmann * Copyright 2012 Stefan Roese <sr@denx.de> 11a7ed099fSArnd Bergmann */ 12a7ed099fSArnd Bergmann 13a7ed099fSArnd Bergmann #include <linux/amba/pl08x.h> 14a7ed099fSArnd Bergmann #include <linux/clk.h> 15a7ed099fSArnd Bergmann #include <linux/err.h> 16a7ed099fSArnd Bergmann #include <linux/of.h> 17a7ed099fSArnd Bergmann #include <linux/of_address.h> 18a7ed099fSArnd Bergmann #include <linux/of_platform.h> 19a7ed099fSArnd Bergmann #include <linux/amba/pl080.h> 20a7ed099fSArnd Bergmann #include <asm/mach/arch.h> 21a7ed099fSArnd Bergmann #include <asm/mach/time.h> 22a7ed099fSArnd Bergmann #include <asm/mach/map.h> 232b9c613cSArnd Bergmann #include "pl080.h" 242b9c613cSArnd Bergmann #include "generic.h" 25c164620aSArnd Bergmann #include "spear.h" 26c164620aSArnd Bergmann #include "misc_regs.h" 27a7ed099fSArnd Bergmann 28a7ed099fSArnd Bergmann /* dmac device registration */ 29a7ed099fSArnd Bergmann static struct pl08x_channel_data spear600_dma_info[] = { 30a7ed099fSArnd Bergmann { 31a7ed099fSArnd Bergmann .bus_id = "ssp1_rx", 32a7ed099fSArnd Bergmann .min_signal = 0, 33a7ed099fSArnd Bergmann .max_signal = 0, 34a7ed099fSArnd Bergmann .muxval = 0, 35a7ed099fSArnd Bergmann .periph_buses = PL08X_AHB1, 36a7ed099fSArnd Bergmann }, { 37a7ed099fSArnd Bergmann .bus_id = "ssp1_tx", 38a7ed099fSArnd Bergmann .min_signal = 1, 39a7ed099fSArnd Bergmann .max_signal = 1, 40a7ed099fSArnd Bergmann .muxval = 0, 41a7ed099fSArnd Bergmann .periph_buses = PL08X_AHB1, 42a7ed099fSArnd Bergmann }, { 43a7ed099fSArnd Bergmann .bus_id = "uart0_rx", 44a7ed099fSArnd Bergmann .min_signal = 2, 45a7ed099fSArnd Bergmann .max_signal = 2, 46a7ed099fSArnd Bergmann .muxval = 0, 47a7ed099fSArnd Bergmann .periph_buses = PL08X_AHB1, 48a7ed099fSArnd Bergmann }, { 49a7ed099fSArnd Bergmann .bus_id = "uart0_tx", 50a7ed099fSArnd Bergmann .min_signal = 3, 51a7ed099fSArnd Bergmann .max_signal = 3, 52a7ed099fSArnd Bergmann .muxval = 0, 53a7ed099fSArnd Bergmann .periph_buses = PL08X_AHB1, 54a7ed099fSArnd Bergmann }, { 55a7ed099fSArnd Bergmann .bus_id = "uart1_rx", 56a7ed099fSArnd Bergmann .min_signal = 4, 57a7ed099fSArnd Bergmann .max_signal = 4, 58a7ed099fSArnd Bergmann .muxval = 0, 59a7ed099fSArnd Bergmann .periph_buses = PL08X_AHB1, 60a7ed099fSArnd Bergmann }, { 61a7ed099fSArnd Bergmann .bus_id = "uart1_tx", 62a7ed099fSArnd Bergmann .min_signal = 5, 63a7ed099fSArnd Bergmann .max_signal = 5, 64a7ed099fSArnd Bergmann .muxval = 0, 65a7ed099fSArnd Bergmann .periph_buses = PL08X_AHB1, 66a7ed099fSArnd Bergmann }, { 67a7ed099fSArnd Bergmann .bus_id = "ssp2_rx", 68a7ed099fSArnd Bergmann .min_signal = 6, 69a7ed099fSArnd Bergmann .max_signal = 6, 70a7ed099fSArnd Bergmann .muxval = 0, 71a7ed099fSArnd Bergmann .periph_buses = PL08X_AHB2, 72a7ed099fSArnd Bergmann }, { 73a7ed099fSArnd Bergmann .bus_id = "ssp2_tx", 74a7ed099fSArnd Bergmann .min_signal = 7, 75a7ed099fSArnd Bergmann .max_signal = 7, 76a7ed099fSArnd Bergmann .muxval = 0, 77a7ed099fSArnd Bergmann .periph_buses = PL08X_AHB2, 78a7ed099fSArnd Bergmann }, { 79a7ed099fSArnd Bergmann .bus_id = "ssp0_rx", 80a7ed099fSArnd Bergmann .min_signal = 8, 81a7ed099fSArnd Bergmann .max_signal = 8, 82a7ed099fSArnd Bergmann .muxval = 0, 83a7ed099fSArnd Bergmann .periph_buses = PL08X_AHB1, 84a7ed099fSArnd Bergmann }, { 85a7ed099fSArnd Bergmann .bus_id = "ssp0_tx", 86a7ed099fSArnd Bergmann .min_signal = 9, 87a7ed099fSArnd Bergmann .max_signal = 9, 88a7ed099fSArnd Bergmann .muxval = 0, 89a7ed099fSArnd Bergmann .periph_buses = PL08X_AHB1, 90a7ed099fSArnd Bergmann }, { 91a7ed099fSArnd Bergmann .bus_id = "i2c_rx", 92a7ed099fSArnd Bergmann .min_signal = 10, 93a7ed099fSArnd Bergmann .max_signal = 10, 94a7ed099fSArnd Bergmann .muxval = 0, 95a7ed099fSArnd Bergmann .periph_buses = PL08X_AHB1, 96a7ed099fSArnd Bergmann }, { 97a7ed099fSArnd Bergmann .bus_id = "i2c_tx", 98a7ed099fSArnd Bergmann .min_signal = 11, 99a7ed099fSArnd Bergmann .max_signal = 11, 100a7ed099fSArnd Bergmann .muxval = 0, 101a7ed099fSArnd Bergmann .periph_buses = PL08X_AHB1, 102a7ed099fSArnd Bergmann }, { 103a7ed099fSArnd Bergmann .bus_id = "irda", 104a7ed099fSArnd Bergmann .min_signal = 12, 105a7ed099fSArnd Bergmann .max_signal = 12, 106a7ed099fSArnd Bergmann .muxval = 0, 107a7ed099fSArnd Bergmann .periph_buses = PL08X_AHB1, 108a7ed099fSArnd Bergmann }, { 109a7ed099fSArnd Bergmann .bus_id = "adc", 110a7ed099fSArnd Bergmann .min_signal = 13, 111a7ed099fSArnd Bergmann .max_signal = 13, 112a7ed099fSArnd Bergmann .muxval = 0, 113a7ed099fSArnd Bergmann .periph_buses = PL08X_AHB2, 114a7ed099fSArnd Bergmann }, { 115a7ed099fSArnd Bergmann .bus_id = "to_jpeg", 116a7ed099fSArnd Bergmann .min_signal = 14, 117a7ed099fSArnd Bergmann .max_signal = 14, 118a7ed099fSArnd Bergmann .muxval = 0, 119a7ed099fSArnd Bergmann .periph_buses = PL08X_AHB1, 120a7ed099fSArnd Bergmann }, { 121a7ed099fSArnd Bergmann .bus_id = "from_jpeg", 122a7ed099fSArnd Bergmann .min_signal = 15, 123a7ed099fSArnd Bergmann .max_signal = 15, 124a7ed099fSArnd Bergmann .muxval = 0, 125a7ed099fSArnd Bergmann .periph_buses = PL08X_AHB1, 126a7ed099fSArnd Bergmann }, { 127a7ed099fSArnd Bergmann .bus_id = "ras0_rx", 128a7ed099fSArnd Bergmann .min_signal = 0, 129a7ed099fSArnd Bergmann .max_signal = 0, 130a7ed099fSArnd Bergmann .muxval = 1, 131a7ed099fSArnd Bergmann .periph_buses = PL08X_AHB1, 132a7ed099fSArnd Bergmann }, { 133a7ed099fSArnd Bergmann .bus_id = "ras0_tx", 134a7ed099fSArnd Bergmann .min_signal = 1, 135a7ed099fSArnd Bergmann .max_signal = 1, 136a7ed099fSArnd Bergmann .muxval = 1, 137a7ed099fSArnd Bergmann .periph_buses = PL08X_AHB1, 138a7ed099fSArnd Bergmann }, { 139a7ed099fSArnd Bergmann .bus_id = "ras1_rx", 140a7ed099fSArnd Bergmann .min_signal = 2, 141a7ed099fSArnd Bergmann .max_signal = 2, 142a7ed099fSArnd Bergmann .muxval = 1, 143a7ed099fSArnd Bergmann .periph_buses = PL08X_AHB1, 144a7ed099fSArnd Bergmann }, { 145a7ed099fSArnd Bergmann .bus_id = "ras1_tx", 146a7ed099fSArnd Bergmann .min_signal = 3, 147a7ed099fSArnd Bergmann .max_signal = 3, 148a7ed099fSArnd Bergmann .muxval = 1, 149a7ed099fSArnd Bergmann .periph_buses = PL08X_AHB1, 150a7ed099fSArnd Bergmann }, { 151a7ed099fSArnd Bergmann .bus_id = "ras2_rx", 152a7ed099fSArnd Bergmann .min_signal = 4, 153a7ed099fSArnd Bergmann .max_signal = 4, 154a7ed099fSArnd Bergmann .muxval = 1, 155a7ed099fSArnd Bergmann .periph_buses = PL08X_AHB1, 156a7ed099fSArnd Bergmann }, { 157a7ed099fSArnd Bergmann .bus_id = "ras2_tx", 158a7ed099fSArnd Bergmann .min_signal = 5, 159a7ed099fSArnd Bergmann .max_signal = 5, 160a7ed099fSArnd Bergmann .muxval = 1, 161a7ed099fSArnd Bergmann .periph_buses = PL08X_AHB1, 162a7ed099fSArnd Bergmann }, { 163a7ed099fSArnd Bergmann .bus_id = "ras3_rx", 164a7ed099fSArnd Bergmann .min_signal = 6, 165a7ed099fSArnd Bergmann .max_signal = 6, 166a7ed099fSArnd Bergmann .muxval = 1, 167a7ed099fSArnd Bergmann .periph_buses = PL08X_AHB1, 168a7ed099fSArnd Bergmann }, { 169a7ed099fSArnd Bergmann .bus_id = "ras3_tx", 170a7ed099fSArnd Bergmann .min_signal = 7, 171a7ed099fSArnd Bergmann .max_signal = 7, 172a7ed099fSArnd Bergmann .muxval = 1, 173a7ed099fSArnd Bergmann .periph_buses = PL08X_AHB1, 174a7ed099fSArnd Bergmann }, { 175a7ed099fSArnd Bergmann .bus_id = "ras4_rx", 176a7ed099fSArnd Bergmann .min_signal = 8, 177a7ed099fSArnd Bergmann .max_signal = 8, 178a7ed099fSArnd Bergmann .muxval = 1, 179a7ed099fSArnd Bergmann .periph_buses = PL08X_AHB1, 180a7ed099fSArnd Bergmann }, { 181a7ed099fSArnd Bergmann .bus_id = "ras4_tx", 182a7ed099fSArnd Bergmann .min_signal = 9, 183a7ed099fSArnd Bergmann .max_signal = 9, 184a7ed099fSArnd Bergmann .muxval = 1, 185a7ed099fSArnd Bergmann .periph_buses = PL08X_AHB1, 186a7ed099fSArnd Bergmann }, { 187a7ed099fSArnd Bergmann .bus_id = "ras5_rx", 188a7ed099fSArnd Bergmann .min_signal = 10, 189a7ed099fSArnd Bergmann .max_signal = 10, 190a7ed099fSArnd Bergmann .muxval = 1, 191a7ed099fSArnd Bergmann .periph_buses = PL08X_AHB1, 192a7ed099fSArnd Bergmann }, { 193a7ed099fSArnd Bergmann .bus_id = "ras5_tx", 194a7ed099fSArnd Bergmann .min_signal = 11, 195a7ed099fSArnd Bergmann .max_signal = 11, 196a7ed099fSArnd Bergmann .muxval = 1, 197a7ed099fSArnd Bergmann .periph_buses = PL08X_AHB1, 198a7ed099fSArnd Bergmann }, { 199a7ed099fSArnd Bergmann .bus_id = "ras6_rx", 200a7ed099fSArnd Bergmann .min_signal = 12, 201a7ed099fSArnd Bergmann .max_signal = 12, 202a7ed099fSArnd Bergmann .muxval = 1, 203a7ed099fSArnd Bergmann .periph_buses = PL08X_AHB1, 204a7ed099fSArnd Bergmann }, { 205a7ed099fSArnd Bergmann .bus_id = "ras6_tx", 206a7ed099fSArnd Bergmann .min_signal = 13, 207a7ed099fSArnd Bergmann .max_signal = 13, 208a7ed099fSArnd Bergmann .muxval = 1, 209a7ed099fSArnd Bergmann .periph_buses = PL08X_AHB1, 210a7ed099fSArnd Bergmann }, { 211a7ed099fSArnd Bergmann .bus_id = "ras7_rx", 212a7ed099fSArnd Bergmann .min_signal = 14, 213a7ed099fSArnd Bergmann .max_signal = 14, 214a7ed099fSArnd Bergmann .muxval = 1, 215a7ed099fSArnd Bergmann .periph_buses = PL08X_AHB1, 216a7ed099fSArnd Bergmann }, { 217a7ed099fSArnd Bergmann .bus_id = "ras7_tx", 218a7ed099fSArnd Bergmann .min_signal = 15, 219a7ed099fSArnd Bergmann .max_signal = 15, 220a7ed099fSArnd Bergmann .muxval = 1, 221a7ed099fSArnd Bergmann .periph_buses = PL08X_AHB1, 222a7ed099fSArnd Bergmann }, { 223a7ed099fSArnd Bergmann .bus_id = "ext0_rx", 224a7ed099fSArnd Bergmann .min_signal = 0, 225a7ed099fSArnd Bergmann .max_signal = 0, 226a7ed099fSArnd Bergmann .muxval = 2, 227a7ed099fSArnd Bergmann .periph_buses = PL08X_AHB2, 228a7ed099fSArnd Bergmann }, { 229a7ed099fSArnd Bergmann .bus_id = "ext0_tx", 230a7ed099fSArnd Bergmann .min_signal = 1, 231a7ed099fSArnd Bergmann .max_signal = 1, 232a7ed099fSArnd Bergmann .muxval = 2, 233a7ed099fSArnd Bergmann .periph_buses = PL08X_AHB2, 234a7ed099fSArnd Bergmann }, { 235a7ed099fSArnd Bergmann .bus_id = "ext1_rx", 236a7ed099fSArnd Bergmann .min_signal = 2, 237a7ed099fSArnd Bergmann .max_signal = 2, 238a7ed099fSArnd Bergmann .muxval = 2, 239a7ed099fSArnd Bergmann .periph_buses = PL08X_AHB2, 240a7ed099fSArnd Bergmann }, { 241a7ed099fSArnd Bergmann .bus_id = "ext1_tx", 242a7ed099fSArnd Bergmann .min_signal = 3, 243a7ed099fSArnd Bergmann .max_signal = 3, 244a7ed099fSArnd Bergmann .muxval = 2, 245a7ed099fSArnd Bergmann .periph_buses = PL08X_AHB2, 246a7ed099fSArnd Bergmann }, { 247a7ed099fSArnd Bergmann .bus_id = "ext2_rx", 248a7ed099fSArnd Bergmann .min_signal = 4, 249a7ed099fSArnd Bergmann .max_signal = 4, 250a7ed099fSArnd Bergmann .muxval = 2, 251a7ed099fSArnd Bergmann .periph_buses = PL08X_AHB2, 252a7ed099fSArnd Bergmann }, { 253a7ed099fSArnd Bergmann .bus_id = "ext2_tx", 254a7ed099fSArnd Bergmann .min_signal = 5, 255a7ed099fSArnd Bergmann .max_signal = 5, 256a7ed099fSArnd Bergmann .muxval = 2, 257a7ed099fSArnd Bergmann .periph_buses = PL08X_AHB2, 258a7ed099fSArnd Bergmann }, { 259a7ed099fSArnd Bergmann .bus_id = "ext3_rx", 260a7ed099fSArnd Bergmann .min_signal = 6, 261a7ed099fSArnd Bergmann .max_signal = 6, 262a7ed099fSArnd Bergmann .muxval = 2, 263a7ed099fSArnd Bergmann .periph_buses = PL08X_AHB2, 264a7ed099fSArnd Bergmann }, { 265a7ed099fSArnd Bergmann .bus_id = "ext3_tx", 266a7ed099fSArnd Bergmann .min_signal = 7, 267a7ed099fSArnd Bergmann .max_signal = 7, 268a7ed099fSArnd Bergmann .muxval = 2, 269a7ed099fSArnd Bergmann .periph_buses = PL08X_AHB2, 270a7ed099fSArnd Bergmann }, { 271a7ed099fSArnd Bergmann .bus_id = "ext4_rx", 272a7ed099fSArnd Bergmann .min_signal = 8, 273a7ed099fSArnd Bergmann .max_signal = 8, 274a7ed099fSArnd Bergmann .muxval = 2, 275a7ed099fSArnd Bergmann .periph_buses = PL08X_AHB2, 276a7ed099fSArnd Bergmann }, { 277a7ed099fSArnd Bergmann .bus_id = "ext4_tx", 278a7ed099fSArnd Bergmann .min_signal = 9, 279a7ed099fSArnd Bergmann .max_signal = 9, 280a7ed099fSArnd Bergmann .muxval = 2, 281a7ed099fSArnd Bergmann .periph_buses = PL08X_AHB2, 282a7ed099fSArnd Bergmann }, { 283a7ed099fSArnd Bergmann .bus_id = "ext5_rx", 284a7ed099fSArnd Bergmann .min_signal = 10, 285a7ed099fSArnd Bergmann .max_signal = 10, 286a7ed099fSArnd Bergmann .muxval = 2, 287a7ed099fSArnd Bergmann .periph_buses = PL08X_AHB2, 288a7ed099fSArnd Bergmann }, { 289a7ed099fSArnd Bergmann .bus_id = "ext5_tx", 290a7ed099fSArnd Bergmann .min_signal = 11, 291a7ed099fSArnd Bergmann .max_signal = 11, 292a7ed099fSArnd Bergmann .muxval = 2, 293a7ed099fSArnd Bergmann .periph_buses = PL08X_AHB2, 294a7ed099fSArnd Bergmann }, { 295a7ed099fSArnd Bergmann .bus_id = "ext6_rx", 296a7ed099fSArnd Bergmann .min_signal = 12, 297a7ed099fSArnd Bergmann .max_signal = 12, 298a7ed099fSArnd Bergmann .muxval = 2, 299a7ed099fSArnd Bergmann .periph_buses = PL08X_AHB2, 300a7ed099fSArnd Bergmann }, { 301a7ed099fSArnd Bergmann .bus_id = "ext6_tx", 302a7ed099fSArnd Bergmann .min_signal = 13, 303a7ed099fSArnd Bergmann .max_signal = 13, 304a7ed099fSArnd Bergmann .muxval = 2, 305a7ed099fSArnd Bergmann .periph_buses = PL08X_AHB2, 306a7ed099fSArnd Bergmann }, { 307a7ed099fSArnd Bergmann .bus_id = "ext7_rx", 308a7ed099fSArnd Bergmann .min_signal = 14, 309a7ed099fSArnd Bergmann .max_signal = 14, 310a7ed099fSArnd Bergmann .muxval = 2, 311a7ed099fSArnd Bergmann .periph_buses = PL08X_AHB2, 312a7ed099fSArnd Bergmann }, { 313a7ed099fSArnd Bergmann .bus_id = "ext7_tx", 314a7ed099fSArnd Bergmann .min_signal = 15, 315a7ed099fSArnd Bergmann .max_signal = 15, 316a7ed099fSArnd Bergmann .muxval = 2, 317a7ed099fSArnd Bergmann .periph_buses = PL08X_AHB2, 318a7ed099fSArnd Bergmann }, 319a7ed099fSArnd Bergmann }; 320a7ed099fSArnd Bergmann 321553e7f75SArnd Bergmann static struct pl08x_platform_data spear6xx_pl080_plat_data = { 3224166a56aSLinus Walleij .memcpy_burst_size = PL08X_BURST_SZ_16, 3234166a56aSLinus Walleij .memcpy_bus_width = PL08X_BUS_WIDTH_32_BITS, 3244166a56aSLinus Walleij .memcpy_prot_buff = true, 3254166a56aSLinus Walleij .memcpy_prot_cache = true, 326a7ed099fSArnd Bergmann .lli_buses = PL08X_AHB1, 327a7ed099fSArnd Bergmann .mem_buses = PL08X_AHB1, 328d7cabeedSMark Brown .get_xfer_signal = pl080_get_signal, 329d7cabeedSMark Brown .put_xfer_signal = pl080_put_signal, 330a7ed099fSArnd Bergmann .slave_channels = spear600_dma_info, 331a7ed099fSArnd Bergmann .num_slave_channels = ARRAY_SIZE(spear600_dma_info), 332a7ed099fSArnd Bergmann }; 333a7ed099fSArnd Bergmann 334a7ed099fSArnd Bergmann /* 335a7ed099fSArnd Bergmann * Following will create 16MB static virtual/physical mappings 336a7ed099fSArnd Bergmann * PHYSICAL VIRTUAL 337a7ed099fSArnd Bergmann * 0xF0000000 0xF0000000 338a7ed099fSArnd Bergmann * 0xF1000000 0xF1000000 339a7ed099fSArnd Bergmann * 0xD0000000 0xFD000000 340a7ed099fSArnd Bergmann * 0xFC000000 0xFC000000 341a7ed099fSArnd Bergmann */ 342a7ed099fSArnd Bergmann struct map_desc spear6xx_io_desc[] __initdata = { 343a7ed099fSArnd Bergmann { 344d9909ebeSArnd Bergmann .virtual = (unsigned long)VA_SPEAR6XX_ML_CPU_BASE, 345a7ed099fSArnd Bergmann .pfn = __phys_to_pfn(SPEAR_ICM3_ML1_2_BASE), 346a7ed099fSArnd Bergmann .length = 2 * SZ_16M, 347a7ed099fSArnd Bergmann .type = MT_DEVICE 348a7ed099fSArnd Bergmann }, { 349d9909ebeSArnd Bergmann .virtual = (unsigned long)VA_SPEAR_ICM1_2_BASE, 350a7ed099fSArnd Bergmann .pfn = __phys_to_pfn(SPEAR_ICM1_2_BASE), 351a7ed099fSArnd Bergmann .length = SZ_16M, 352a7ed099fSArnd Bergmann .type = MT_DEVICE 353a7ed099fSArnd Bergmann }, { 354d9909ebeSArnd Bergmann .virtual = (unsigned long)VA_SPEAR_ICM3_SMI_CTRL_BASE, 355a7ed099fSArnd Bergmann .pfn = __phys_to_pfn(SPEAR_ICM3_SMI_CTRL_BASE), 356a7ed099fSArnd Bergmann .length = SZ_16M, 357a7ed099fSArnd Bergmann .type = MT_DEVICE 358a7ed099fSArnd Bergmann }, 359a7ed099fSArnd Bergmann }; 360a7ed099fSArnd Bergmann 361a7ed099fSArnd Bergmann /* This will create static memory mapping for selected devices */ 362a7ed099fSArnd Bergmann void __init spear6xx_map_io(void) 363a7ed099fSArnd Bergmann { 364a7ed099fSArnd Bergmann iotable_init(spear6xx_io_desc, ARRAY_SIZE(spear6xx_io_desc)); 365a7ed099fSArnd Bergmann } 366a7ed099fSArnd Bergmann 367a7ed099fSArnd Bergmann void __init spear6xx_timer_init(void) 368a7ed099fSArnd Bergmann { 369a7ed099fSArnd Bergmann char pclk_name[] = "pll3_clk"; 370a7ed099fSArnd Bergmann struct clk *gpt_clk, *pclk; 371a7ed099fSArnd Bergmann 372d9909ebeSArnd Bergmann spear6xx_clk_init(MISC_BASE); 373a7ed099fSArnd Bergmann 374a7ed099fSArnd Bergmann /* get the system timer clock */ 375a7ed099fSArnd Bergmann gpt_clk = clk_get_sys("gpt0", NULL); 376a7ed099fSArnd Bergmann if (IS_ERR(gpt_clk)) { 377a7ed099fSArnd Bergmann pr_err("%s:couldn't get clk for gpt\n", __func__); 378a7ed099fSArnd Bergmann BUG(); 379a7ed099fSArnd Bergmann } 380a7ed099fSArnd Bergmann 381a7ed099fSArnd Bergmann /* get the suitable parent clock for timer*/ 382a7ed099fSArnd Bergmann pclk = clk_get(NULL, pclk_name); 383a7ed099fSArnd Bergmann if (IS_ERR(pclk)) { 384a7ed099fSArnd Bergmann pr_err("%s:couldn't get %s as parent for gpt\n", 385a7ed099fSArnd Bergmann __func__, pclk_name); 386a7ed099fSArnd Bergmann BUG(); 387a7ed099fSArnd Bergmann } 388a7ed099fSArnd Bergmann 389a7ed099fSArnd Bergmann clk_set_parent(gpt_clk, pclk); 390a7ed099fSArnd Bergmann clk_put(gpt_clk); 391a7ed099fSArnd Bergmann clk_put(pclk); 392a7ed099fSArnd Bergmann 393a7ed099fSArnd Bergmann spear_setup_of_timer(); 394a7ed099fSArnd Bergmann } 395a7ed099fSArnd Bergmann 396a7ed099fSArnd Bergmann /* Add auxdata to pass platform data */ 397a7ed099fSArnd Bergmann struct of_dev_auxdata spear6xx_auxdata_lookup[] __initdata = { 398a7ed099fSArnd Bergmann OF_DEV_AUXDATA("arm,pl080", SPEAR_ICM3_DMA_BASE, NULL, 399553e7f75SArnd Bergmann &spear6xx_pl080_plat_data), 400a7ed099fSArnd Bergmann {} 401a7ed099fSArnd Bergmann }; 402a7ed099fSArnd Bergmann 403a7ed099fSArnd Bergmann static void __init spear600_dt_init(void) 404a7ed099fSArnd Bergmann { 405435ebcbcSKefeng Wang of_platform_default_populate(NULL, spear6xx_auxdata_lookup, NULL); 406a7ed099fSArnd Bergmann } 407a7ed099fSArnd Bergmann 408a7ed099fSArnd Bergmann static const char *spear600_dt_board_compat[] = { 409a7ed099fSArnd Bergmann "st,spear600", 410a7ed099fSArnd Bergmann NULL 411a7ed099fSArnd Bergmann }; 412a7ed099fSArnd Bergmann 413a7ed099fSArnd Bergmann DT_MACHINE_START(SPEAR600_DT, "ST SPEAr600 (Flattened Device Tree)") 414a7ed099fSArnd Bergmann .map_io = spear6xx_map_io, 415a7ed099fSArnd Bergmann .init_time = spear6xx_timer_init, 416a7ed099fSArnd Bergmann .init_machine = spear600_dt_init, 417a7ed099fSArnd Bergmann .restart = spear_restart, 418a7ed099fSArnd Bergmann .dt_compat = spear600_dt_board_compat, 419a7ed099fSArnd Bergmann MACHINE_END 420