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 | compat: "arm,vexpress-sysreg" ); |
18 | |
19 | base = of_iomap(node, index: 0); |
20 | } |
21 | |
22 | if (WARN_ON(!base)) |
23 | return; |
24 | |
25 | writel(val: ~0, addr: base + SYS_FLAGSCLR); |
26 | writel(val: data, addr: 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 |
41 | |