xref: /rk3399_ARM-atf/plat/socionext/uniphier/uniphier_cci.c (revision 9a207532f8216bf83fed0891fed9ed0bc72ca450)
1d8e919c7SMasahiro Yamada /*
2d8e919c7SMasahiro Yamada  * Copyright (c) 2017, ARM Limited and Contributors. All rights reserved.
3d8e919c7SMasahiro Yamada  *
4d8e919c7SMasahiro Yamada  * SPDX-License-Identifier: BSD-3-Clause
5d8e919c7SMasahiro Yamada  */
6d8e919c7SMasahiro Yamada 
7d8e919c7SMasahiro Yamada #include <stddef.h>
8*09d40e0eSAntonio Nino Diaz 
9*09d40e0eSAntonio Nino Diaz #include <arch_helpers.h>
10*09d40e0eSAntonio Nino Diaz #include <drivers/arm/cci.h>
11*09d40e0eSAntonio Nino Diaz #include <lib/utils_def.h>
12d8e919c7SMasahiro Yamada 
13d8e919c7SMasahiro Yamada #include "uniphier.h"
14d8e919c7SMasahiro Yamada 
15d8e919c7SMasahiro Yamada #define UNIPHIER_CCI500_BASE	0x5FD00000
16d8e919c7SMasahiro Yamada 
174fc1a381SSatoshi Ikawa static const int uniphier_cci_map[] = {1, 0};
18d8e919c7SMasahiro Yamada 
__uniphier_cci_init(void)19d8e919c7SMasahiro Yamada static void __uniphier_cci_init(void)
20d8e919c7SMasahiro Yamada {
21d8e919c7SMasahiro Yamada 	cci_init(UNIPHIER_CCI500_BASE, uniphier_cci_map,
22d8e919c7SMasahiro Yamada 		 ARRAY_SIZE(uniphier_cci_map));
23d8e919c7SMasahiro Yamada }
24d8e919c7SMasahiro Yamada 
__uniphier_cci_enable(void)25d8e919c7SMasahiro Yamada static void __uniphier_cci_enable(void)
26d8e919c7SMasahiro Yamada {
27d8e919c7SMasahiro Yamada 	cci_enable_snoop_dvm_reqs(MPIDR_AFFLVL1_VAL(read_mpidr_el1()));
28d8e919c7SMasahiro Yamada }
29d8e919c7SMasahiro Yamada 
__uniphier_cci_disable(void)30d8e919c7SMasahiro Yamada static void __uniphier_cci_disable(void)
31d8e919c7SMasahiro Yamada {
32d8e919c7SMasahiro Yamada 	cci_disable_snoop_dvm_reqs(MPIDR_AFFLVL1_VAL(read_mpidr_el1()));
33d8e919c7SMasahiro Yamada }
34d8e919c7SMasahiro Yamada 
35d8e919c7SMasahiro Yamada struct uniphier_cci_ops {
36d8e919c7SMasahiro Yamada 	void (*init)(void);
37d8e919c7SMasahiro Yamada 	void (*enable)(void);
38d8e919c7SMasahiro Yamada 	void (*disable)(void);
39d8e919c7SMasahiro Yamada };
40d8e919c7SMasahiro Yamada 
41d8e919c7SMasahiro Yamada static const struct uniphier_cci_ops uniphier_cci_ops_table[] = {
42d8e919c7SMasahiro Yamada 	[UNIPHIER_SOC_LD11] = {
43d8e919c7SMasahiro Yamada 		.init = NULL,
44d8e919c7SMasahiro Yamada 		.enable = NULL,
45d8e919c7SMasahiro Yamada 		.disable = NULL,
46d8e919c7SMasahiro Yamada 	},
47d8e919c7SMasahiro Yamada 	[UNIPHIER_SOC_LD20] = {
48d8e919c7SMasahiro Yamada 		.init = __uniphier_cci_init,
49d8e919c7SMasahiro Yamada 		.enable = __uniphier_cci_enable,
50d8e919c7SMasahiro Yamada 		.disable = __uniphier_cci_disable,
51d8e919c7SMasahiro Yamada 	},
52d8e919c7SMasahiro Yamada 	[UNIPHIER_SOC_PXS3] = {
53d8e919c7SMasahiro Yamada 		.init = NULL,
54d8e919c7SMasahiro Yamada 		.enable = NULL,
55d8e919c7SMasahiro Yamada 		.disable = NULL,
56d8e919c7SMasahiro Yamada 	},
57d8e919c7SMasahiro Yamada };
58d8e919c7SMasahiro Yamada 
59d8e919c7SMasahiro Yamada static struct uniphier_cci_ops uniphier_cci_ops;
60d8e919c7SMasahiro Yamada 
uniphier_cci_init(unsigned int soc)61d8e919c7SMasahiro Yamada void uniphier_cci_init(unsigned int soc)
62d8e919c7SMasahiro Yamada {
63d8e919c7SMasahiro Yamada 	uniphier_cci_ops = uniphier_cci_ops_table[soc];
64d8e919c7SMasahiro Yamada 	flush_dcache_range((uint64_t)&uniphier_cci_ops,
65d8e919c7SMasahiro Yamada 			   sizeof(uniphier_cci_ops));
66d8e919c7SMasahiro Yamada 
67d8e919c7SMasahiro Yamada 	if (uniphier_cci_ops.init)
68d8e919c7SMasahiro Yamada 		uniphier_cci_ops.init();
69d8e919c7SMasahiro Yamada }
70d8e919c7SMasahiro Yamada 
uniphier_cci_enable(void)71d8e919c7SMasahiro Yamada void uniphier_cci_enable(void)
72d8e919c7SMasahiro Yamada {
73d8e919c7SMasahiro Yamada 	if (uniphier_cci_ops.enable)
74d8e919c7SMasahiro Yamada 		uniphier_cci_ops.enable();
75d8e919c7SMasahiro Yamada }
76d8e919c7SMasahiro Yamada 
uniphier_cci_disable(void)77d8e919c7SMasahiro Yamada void uniphier_cci_disable(void)
78d8e919c7SMasahiro Yamada {
79d8e919c7SMasahiro Yamada 	if (uniphier_cci_ops.disable)
80d8e919c7SMasahiro Yamada 		uniphier_cci_ops.disable();
81d8e919c7SMasahiro Yamada }
82