18c2ecf20Sopenharmony_ci/* 28c2ecf20Sopenharmony_ci * Device Tree support for Allwinner A1X SoCs 38c2ecf20Sopenharmony_ci * 48c2ecf20Sopenharmony_ci * Copyright (C) 2012 Maxime Ripard 58c2ecf20Sopenharmony_ci * 68c2ecf20Sopenharmony_ci * Maxime Ripard <maxime.ripard@free-electrons.com> 78c2ecf20Sopenharmony_ci * 88c2ecf20Sopenharmony_ci * This file is licensed under the terms of the GNU General Public 98c2ecf20Sopenharmony_ci * License version 2. This program is licensed "as is" without any 108c2ecf20Sopenharmony_ci * warranty of any kind, whether express or implied. 118c2ecf20Sopenharmony_ci */ 128c2ecf20Sopenharmony_ci 138c2ecf20Sopenharmony_ci#include <linux/clocksource.h> 148c2ecf20Sopenharmony_ci#include <linux/init.h> 158c2ecf20Sopenharmony_ci#include <linux/of_clk.h> 168c2ecf20Sopenharmony_ci#include <linux/platform_device.h> 178c2ecf20Sopenharmony_ci#include <linux/reset/sunxi.h> 188c2ecf20Sopenharmony_ci 198c2ecf20Sopenharmony_ci#include <asm/mach/arch.h> 208c2ecf20Sopenharmony_ci#include <asm/secure_cntvoff.h> 218c2ecf20Sopenharmony_ci 228c2ecf20Sopenharmony_cistatic const char * const sunxi_board_dt_compat[] = { 238c2ecf20Sopenharmony_ci "allwinner,sun4i-a10", 248c2ecf20Sopenharmony_ci "allwinner,sun5i-a10s", 258c2ecf20Sopenharmony_ci "allwinner,sun5i-a13", 268c2ecf20Sopenharmony_ci "allwinner,sun5i-r8", 278c2ecf20Sopenharmony_ci "nextthing,gr8", 288c2ecf20Sopenharmony_ci NULL, 298c2ecf20Sopenharmony_ci}; 308c2ecf20Sopenharmony_ci 318c2ecf20Sopenharmony_ciDT_MACHINE_START(SUNXI_DT, "Allwinner sun4i/sun5i Families") 328c2ecf20Sopenharmony_ci .dt_compat = sunxi_board_dt_compat, 338c2ecf20Sopenharmony_ciMACHINE_END 348c2ecf20Sopenharmony_ci 358c2ecf20Sopenharmony_cistatic const char * const sun6i_board_dt_compat[] = { 368c2ecf20Sopenharmony_ci "allwinner,sun6i-a31", 378c2ecf20Sopenharmony_ci "allwinner,sun6i-a31s", 388c2ecf20Sopenharmony_ci NULL, 398c2ecf20Sopenharmony_ci}; 408c2ecf20Sopenharmony_ci 418c2ecf20Sopenharmony_cistatic void __init sun6i_timer_init(void) 428c2ecf20Sopenharmony_ci{ 438c2ecf20Sopenharmony_ci of_clk_init(NULL); 448c2ecf20Sopenharmony_ci if (IS_ENABLED(CONFIG_RESET_CONTROLLER)) 458c2ecf20Sopenharmony_ci sun6i_reset_init(); 468c2ecf20Sopenharmony_ci timer_probe(); 478c2ecf20Sopenharmony_ci} 488c2ecf20Sopenharmony_ci 498c2ecf20Sopenharmony_ciDT_MACHINE_START(SUN6I_DT, "Allwinner sun6i (A31) Family") 508c2ecf20Sopenharmony_ci .init_time = sun6i_timer_init, 518c2ecf20Sopenharmony_ci .dt_compat = sun6i_board_dt_compat, 528c2ecf20Sopenharmony_ciMACHINE_END 538c2ecf20Sopenharmony_ci 548c2ecf20Sopenharmony_cistatic const char * const sun7i_board_dt_compat[] = { 558c2ecf20Sopenharmony_ci "allwinner,sun7i-a20", 568c2ecf20Sopenharmony_ci NULL, 578c2ecf20Sopenharmony_ci}; 588c2ecf20Sopenharmony_ci 598c2ecf20Sopenharmony_ciDT_MACHINE_START(SUN7I_DT, "Allwinner sun7i (A20) Family") 608c2ecf20Sopenharmony_ci .dt_compat = sun7i_board_dt_compat, 618c2ecf20Sopenharmony_ciMACHINE_END 628c2ecf20Sopenharmony_ci 638c2ecf20Sopenharmony_cistatic const char * const sun8i_board_dt_compat[] = { 648c2ecf20Sopenharmony_ci "allwinner,sun8i-a23", 658c2ecf20Sopenharmony_ci "allwinner,sun8i-a33", 668c2ecf20Sopenharmony_ci "allwinner,sun8i-h2-plus", 678c2ecf20Sopenharmony_ci "allwinner,sun8i-h3", 688c2ecf20Sopenharmony_ci "allwinner,sun8i-r40", 698c2ecf20Sopenharmony_ci "allwinner,sun8i-v3", 708c2ecf20Sopenharmony_ci "allwinner,sun8i-v3s", 718c2ecf20Sopenharmony_ci NULL, 728c2ecf20Sopenharmony_ci}; 738c2ecf20Sopenharmony_ci 748c2ecf20Sopenharmony_ciDT_MACHINE_START(SUN8I_DT, "Allwinner sun8i Family") 758c2ecf20Sopenharmony_ci .init_time = sun6i_timer_init, 768c2ecf20Sopenharmony_ci .dt_compat = sun8i_board_dt_compat, 778c2ecf20Sopenharmony_ciMACHINE_END 788c2ecf20Sopenharmony_ci 798c2ecf20Sopenharmony_cistatic void __init sun8i_a83t_cntvoff_init(void) 808c2ecf20Sopenharmony_ci{ 818c2ecf20Sopenharmony_ci#ifdef CONFIG_SMP 828c2ecf20Sopenharmony_ci secure_cntvoff_init(); 838c2ecf20Sopenharmony_ci#endif 848c2ecf20Sopenharmony_ci} 858c2ecf20Sopenharmony_ci 868c2ecf20Sopenharmony_cistatic const char * const sun8i_a83t_cntvoff_board_dt_compat[] = { 878c2ecf20Sopenharmony_ci "allwinner,sun8i-a83t", 888c2ecf20Sopenharmony_ci NULL, 898c2ecf20Sopenharmony_ci}; 908c2ecf20Sopenharmony_ci 918c2ecf20Sopenharmony_ciDT_MACHINE_START(SUN8I_A83T_CNTVOFF_DT, "Allwinner A83t board") 928c2ecf20Sopenharmony_ci .init_early = sun8i_a83t_cntvoff_init, 938c2ecf20Sopenharmony_ci .init_time = sun6i_timer_init, 948c2ecf20Sopenharmony_ci .dt_compat = sun8i_a83t_cntvoff_board_dt_compat, 958c2ecf20Sopenharmony_ciMACHINE_END 968c2ecf20Sopenharmony_ci 978c2ecf20Sopenharmony_cistatic const char * const sun9i_board_dt_compat[] = { 988c2ecf20Sopenharmony_ci "allwinner,sun9i-a80", 998c2ecf20Sopenharmony_ci NULL, 1008c2ecf20Sopenharmony_ci}; 1018c2ecf20Sopenharmony_ci 1028c2ecf20Sopenharmony_ciDT_MACHINE_START(SUN9I_DT, "Allwinner sun9i Family") 1038c2ecf20Sopenharmony_ci .dt_compat = sun9i_board_dt_compat, 1048c2ecf20Sopenharmony_ciMACHINE_END 1058c2ecf20Sopenharmony_ci 1068c2ecf20Sopenharmony_cistatic const char * const suniv_board_dt_compat[] = { 1078c2ecf20Sopenharmony_ci "allwinner,suniv-f1c100s", 1088c2ecf20Sopenharmony_ci NULL, 1098c2ecf20Sopenharmony_ci}; 1108c2ecf20Sopenharmony_ci 1118c2ecf20Sopenharmony_ciDT_MACHINE_START(SUNIV_DT, "Allwinner suniv Family") 1128c2ecf20Sopenharmony_ci .dt_compat = suniv_board_dt_compat, 1138c2ecf20Sopenharmony_ciMACHINE_END 114