Commit 9b06fc39 authored by Rob Herring's avatar Rob Herring

ARM: vexpress: Move vexpress_flags_set() into arch code

vexpress_flags_set() is only used by the platform SMP related code and
has nothing to do with the vexpress-sysreg MFD driver other than both
access the same h/w block. It's also only needed for 32-bit systems and
must be built-in for them. Let's move vexpress_flags_set() closer to
where it is being used. This will allow for vexpress-sysreg to be built
as a module.

Cc: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Cc: Linus Walleij <linus.walleij@linaro.org>
Reviewed-by: default avatarSudeep Holla <sudeep.holla@arm.com>
Acked-by: default avatarArnd Bergmann <arnd@arndb.de>
Acked-by: default avatarLiviu Dudau <liviu.dudau@arm.com>
Acked-by: default avatarLee Jones <lee.jones@linaro.org>
Signed-off-by: default avatarRob Herring <robh@kernel.org>
parent ae83d0b4
...@@ -22,7 +22,6 @@ menuconfig ARCH_VEXPRESS ...@@ -22,7 +22,6 @@ menuconfig ARCH_VEXPRESS
select REGULATOR_FIXED_VOLTAGE if REGULATOR select REGULATOR_FIXED_VOLTAGE if REGULATOR
select VEXPRESS_CONFIG select VEXPRESS_CONFIG
select VEXPRESS_SYSCFG select VEXPRESS_SYSCFG
select MFD_VEXPRESS_SYSREG
help help
This option enables support for systems using Cortex processor based This option enables support for systems using Cortex processor based
ARM core and logic (FPGA) tiles on the Versatile Express motherboard, ARM core and logic (FPGA) tiles on the Versatile Express motherboard,
......
bool vexpress_smp_init_ops(void); bool vexpress_smp_init_ops(void);
void vexpress_flags_set(u32 data);
extern const struct smp_operations vexpress_smp_dt_ops; extern const struct smp_operations vexpress_smp_dt_ops;
...@@ -20,6 +20,7 @@ ...@@ -20,6 +20,7 @@
#include <asm/cputype.h> #include <asm/cputype.h>
#include <asm/cp15.h> #include <asm/cp15.h>
#include "core.h"
#define RST_HOLD0 0x0 #define RST_HOLD0 0x0
#define RST_HOLD1 0x4 #define RST_HOLD1 0x4
......
// SPDX-License-Identifier: GPL-2.0 // SPDX-License-Identifier: GPL-2.0
#include <linux/of.h>
#include <linux/of_address.h>
#include <asm/mach/arch.h> #include <asm/mach/arch.h>
#include "core.h" #include "core.h"
#define SYS_FLAGSSET 0x030
#define SYS_FLAGSCLR 0x034
void vexpress_flags_set(u32 data)
{
static void __iomem *base;
if (!base) {
struct device_node *node = of_find_compatible_node(NULL, NULL,
"arm,vexpress-sysreg");
base = of_iomap(node, 0);
}
if (WARN_ON(!base))
return;
writel(~0, base + SYS_FLAGSCLR);
writel(data, base + SYS_FLAGSSET);
}
static const char * const v2m_dt_match[] __initconst = { static const char * const v2m_dt_match[] __initconst = {
"arm,vexpress", "arm,vexpress",
NULL, NULL,
......
...@@ -8,7 +8,6 @@ ...@@ -8,7 +8,6 @@
#include <linux/err.h> #include <linux/err.h>
#include <linux/io.h> #include <linux/io.h>
#include <linux/mfd/core.h> #include <linux/mfd/core.h>
#include <linux/of_address.h>
#include <linux/of_platform.h> #include <linux/of_platform.h>
#include <linux/platform_data/syscon.h> #include <linux/platform_data/syscon.h>
#include <linux/platform_device.h> #include <linux/platform_device.h>
...@@ -42,24 +41,6 @@ ...@@ -42,24 +41,6 @@
#define SYS_MISC_MASTERSITE (1 << 14) #define SYS_MISC_MASTERSITE (1 << 14)
void vexpress_flags_set(u32 data)
{
static void __iomem *base;
if (!base) {
struct device_node *node = of_find_compatible_node(NULL, NULL,
"arm,vexpress-sysreg");
base = of_iomap(node, 0);
}
if (WARN_ON(!base))
return;
writel(~0, base + SYS_FLAGSCLR);
writel(data, base + SYS_FLAGSSET);
}
/* The sysreg block is just a random collection of various functions... */ /* The sysreg block is just a random collection of various functions... */
static struct syscon_platform_data vexpress_sysreg_sys_id_pdata = { static struct syscon_platform_data vexpress_sysreg_sys_id_pdata = {
......
...@@ -40,8 +40,4 @@ struct device *vexpress_config_bridge_register(struct device *parent, ...@@ -40,8 +40,4 @@ struct device *vexpress_config_bridge_register(struct device *parent,
struct regmap *devm_regmap_init_vexpress_config(struct device *dev); struct regmap *devm_regmap_init_vexpress_config(struct device *dev);
/* Platform control */
void vexpress_flags_set(u32 data);
#endif #endif
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment