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