162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * Device Tree support for Allwinner A1X SoCs
462306a36Sopenharmony_ci *
562306a36Sopenharmony_ci * Copyright (C) 2012 Maxime Ripard
662306a36Sopenharmony_ci *
762306a36Sopenharmony_ci * Maxime Ripard <maxime.ripard@free-electrons.com>
862306a36Sopenharmony_ci *
962306a36Sopenharmony_ci */
1062306a36Sopenharmony_ci
1162306a36Sopenharmony_ci#include <linux/clocksource.h>
1262306a36Sopenharmony_ci#include <linux/init.h>
1362306a36Sopenharmony_ci#include <linux/of_clk.h>
1462306a36Sopenharmony_ci#include <linux/platform_device.h>
1562306a36Sopenharmony_ci#include <linux/reset/sunxi.h>
1662306a36Sopenharmony_ci
1762306a36Sopenharmony_ci#include <asm/mach/arch.h>
1862306a36Sopenharmony_ci#include <asm/secure_cntvoff.h>
1962306a36Sopenharmony_ci
2062306a36Sopenharmony_cistatic const char * const sunxi_board_dt_compat[] = {
2162306a36Sopenharmony_ci	"allwinner,sun4i-a10",
2262306a36Sopenharmony_ci	"allwinner,sun5i-a10s",
2362306a36Sopenharmony_ci	"allwinner,sun5i-a13",
2462306a36Sopenharmony_ci	"allwinner,sun5i-r8",
2562306a36Sopenharmony_ci	"nextthing,gr8",
2662306a36Sopenharmony_ci	NULL,
2762306a36Sopenharmony_ci};
2862306a36Sopenharmony_ci
2962306a36Sopenharmony_ciDT_MACHINE_START(SUNXI_DT, "Allwinner sun4i/sun5i Families")
3062306a36Sopenharmony_ci	.dt_compat	= sunxi_board_dt_compat,
3162306a36Sopenharmony_ciMACHINE_END
3262306a36Sopenharmony_ci
3362306a36Sopenharmony_cistatic const char * const sun6i_board_dt_compat[] = {
3462306a36Sopenharmony_ci	"allwinner,sun6i-a31",
3562306a36Sopenharmony_ci	"allwinner,sun6i-a31s",
3662306a36Sopenharmony_ci	NULL,
3762306a36Sopenharmony_ci};
3862306a36Sopenharmony_ci
3962306a36Sopenharmony_cistatic void __init sun6i_timer_init(void)
4062306a36Sopenharmony_ci{
4162306a36Sopenharmony_ci	of_clk_init(NULL);
4262306a36Sopenharmony_ci	if (IS_ENABLED(CONFIG_RESET_CONTROLLER))
4362306a36Sopenharmony_ci		sun6i_reset_init();
4462306a36Sopenharmony_ci	timer_probe();
4562306a36Sopenharmony_ci}
4662306a36Sopenharmony_ci
4762306a36Sopenharmony_ciDT_MACHINE_START(SUN6I_DT, "Allwinner sun6i (A31) Family")
4862306a36Sopenharmony_ci	.init_time	= sun6i_timer_init,
4962306a36Sopenharmony_ci	.dt_compat	= sun6i_board_dt_compat,
5062306a36Sopenharmony_ciMACHINE_END
5162306a36Sopenharmony_ci
5262306a36Sopenharmony_cistatic const char * const sun7i_board_dt_compat[] = {
5362306a36Sopenharmony_ci	"allwinner,sun7i-a20",
5462306a36Sopenharmony_ci	NULL,
5562306a36Sopenharmony_ci};
5662306a36Sopenharmony_ci
5762306a36Sopenharmony_ciDT_MACHINE_START(SUN7I_DT, "Allwinner sun7i (A20) Family")
5862306a36Sopenharmony_ci	.dt_compat	= sun7i_board_dt_compat,
5962306a36Sopenharmony_ciMACHINE_END
6062306a36Sopenharmony_ci
6162306a36Sopenharmony_cistatic const char * const sun8i_board_dt_compat[] = {
6262306a36Sopenharmony_ci	"allwinner,sun8i-a23",
6362306a36Sopenharmony_ci	"allwinner,sun8i-a33",
6462306a36Sopenharmony_ci	"allwinner,sun8i-h2-plus",
6562306a36Sopenharmony_ci	"allwinner,sun8i-h3",
6662306a36Sopenharmony_ci	"allwinner,sun8i-r40",
6762306a36Sopenharmony_ci	"allwinner,sun8i-v3",
6862306a36Sopenharmony_ci	"allwinner,sun8i-v3s",
6962306a36Sopenharmony_ci	NULL,
7062306a36Sopenharmony_ci};
7162306a36Sopenharmony_ci
7262306a36Sopenharmony_ciDT_MACHINE_START(SUN8I_DT, "Allwinner sun8i Family")
7362306a36Sopenharmony_ci	.init_time	= sun6i_timer_init,
7462306a36Sopenharmony_ci	.dt_compat	= sun8i_board_dt_compat,
7562306a36Sopenharmony_ciMACHINE_END
7662306a36Sopenharmony_ci
7762306a36Sopenharmony_cistatic void __init sun8i_a83t_cntvoff_init(void)
7862306a36Sopenharmony_ci{
7962306a36Sopenharmony_ci#ifdef CONFIG_SMP
8062306a36Sopenharmony_ci	secure_cntvoff_init();
8162306a36Sopenharmony_ci#endif
8262306a36Sopenharmony_ci}
8362306a36Sopenharmony_ci
8462306a36Sopenharmony_cistatic const char * const sun8i_a83t_cntvoff_board_dt_compat[] = {
8562306a36Sopenharmony_ci	"allwinner,sun8i-a83t",
8662306a36Sopenharmony_ci	NULL,
8762306a36Sopenharmony_ci};
8862306a36Sopenharmony_ci
8962306a36Sopenharmony_ciDT_MACHINE_START(SUN8I_A83T_CNTVOFF_DT, "Allwinner A83t board")
9062306a36Sopenharmony_ci	.init_early	= sun8i_a83t_cntvoff_init,
9162306a36Sopenharmony_ci	.init_time	= sun6i_timer_init,
9262306a36Sopenharmony_ci	.dt_compat	= sun8i_a83t_cntvoff_board_dt_compat,
9362306a36Sopenharmony_ciMACHINE_END
9462306a36Sopenharmony_ci
9562306a36Sopenharmony_cistatic const char * const sun9i_board_dt_compat[] = {
9662306a36Sopenharmony_ci	"allwinner,sun9i-a80",
9762306a36Sopenharmony_ci	NULL,
9862306a36Sopenharmony_ci};
9962306a36Sopenharmony_ci
10062306a36Sopenharmony_ciDT_MACHINE_START(SUN9I_DT, "Allwinner sun9i Family")
10162306a36Sopenharmony_ci	.dt_compat	= sun9i_board_dt_compat,
10262306a36Sopenharmony_ciMACHINE_END
10362306a36Sopenharmony_ci
10462306a36Sopenharmony_cistatic const char * const suniv_board_dt_compat[] = {
10562306a36Sopenharmony_ci	"allwinner,suniv-f1c100s",
10662306a36Sopenharmony_ci	NULL,
10762306a36Sopenharmony_ci};
10862306a36Sopenharmony_ci
10962306a36Sopenharmony_ciDT_MACHINE_START(SUNIV_DT, "Allwinner suniv Family")
11062306a36Sopenharmony_ci	.dt_compat	= suniv_board_dt_compat,
11162306a36Sopenharmony_ciMACHINE_END
112