GNU Linux-libre 6.1.90-gnu
[releases.git] / arch / arm / mach-versatile / v2m.c
1 // SPDX-License-Identifier: GPL-2.0
2 #include <linux/of.h>
3 #include <linux/of_address.h>
4 #include <asm/mach/arch.h>
5
6 #include "vexpress.h"
7
8 #define SYS_FLAGSSET            0x030
9 #define SYS_FLAGSCLR            0x034
10
11 void vexpress_flags_set(u32 data)
12 {
13         static void __iomem *base;
14
15         if (!base) {
16                 struct device_node *node = of_find_compatible_node(NULL, NULL,
17                                 "arm,vexpress-sysreg");
18
19                 base = of_iomap(node, 0);
20         }
21
22         if (WARN_ON(!base))
23                 return;
24
25         writel(~0, base + SYS_FLAGSCLR);
26         writel(data, base + SYS_FLAGSSET);
27 }
28
29 static const char * const v2m_dt_match[] __initconst = {
30         "arm,vexpress",
31         NULL,
32 };
33
34 DT_MACHINE_START(VEXPRESS_DT, "ARM-Versatile Express")
35         .dt_compat      = v2m_dt_match,
36         .l2c_aux_val    = 0x00400000,
37         .l2c_aux_mask   = 0xfe0fffff,
38         .smp            = smp_ops(vexpress_smp_dt_ops),
39         .smp_init       = smp_init_ops(vexpress_smp_init_ops),
40 MACHINE_END