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

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
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -22,7 +22,6 @@ menuconfig ARCH_VEXPRESS
	select REGULATOR_FIXED_VOLTAGE if REGULATOR
	select VEXPRESS_CONFIG
	select VEXPRESS_SYSCFG
	select MFD_VEXPRESS_SYSREG
	help
	  This option enables support for systems using Cortex processor based
	  ARM core and logic (FPGA) tiles on the Versatile Express motherboard,
+1 −0
Original line number Diff line number Diff line
bool vexpress_smp_init_ops(void);
void vexpress_flags_set(u32 data);

extern const struct smp_operations vexpress_smp_dt_ops;
+1 −0
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@
#include <asm/cputype.h>
#include <asm/cp15.h>

#include "core.h"

#define RST_HOLD0	0x0
#define RST_HOLD1	0x4
+23 −0
Original line number Diff line number Diff line
// SPDX-License-Identifier: GPL-2.0
#include <linux/of.h>
#include <linux/of_address.h>
#include <asm/mach/arch.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 = {
	"arm,vexpress",
	NULL,
+0 −19
Original line number Diff line number Diff line
@@ -8,7 +8,6 @@
#include <linux/err.h>
#include <linux/io.h>
#include <linux/mfd/core.h>
#include <linux/of_address.h>
#include <linux/of_platform.h>
#include <linux/platform_data/syscon.h>
#include <linux/platform_device.h>
@@ -42,24 +41,6 @@

#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... */

static struct syscon_platform_data vexpress_sysreg_sys_id_pdata = {
Loading