Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8e3b21b6 authored by Andrew Banman's avatar Andrew Banman Committed by Thomas Gleixner
Browse files

x86/platform/uv/BAU: Cleanup bau_operations declaration and instances



Move the bau_operations declaration after bau struct declarations so the
bau structs can be referenced when adding new functions to
bau_operations. That way we avoid forward declarations of the bau
structs.

Likewise, move uv*_bau_ops structs down to avoid forward declarations of
new functions defined in the same file. Declare these structs __initconst
since they are only used during initialization. Similarly, declare the
bau_operations ops instance __ro_after_init as it is read-only after
initialization.

This is a preparatory patch for adding wait_completion to bau_operations.

Signed-off-by: default avatarAndrew Banman <abanman@hpe.com>
Acked-by: default avatarIngo Molnar <mingo@kernel.org>
Acked-by: default avatarMike Travis <mike.travis@hpe.com>
Cc: sivanich@hpe.com
Cc: rja@hpe.com
Cc: akpm@linux-foundation.org
Link: http://lkml.kernel.org/r/1489077734-111753-4-git-send-email-abanman@hpe.com


Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
parent e9be3644
Loading
Loading
Loading
Loading
+11 −11
Original line number Diff line number Diff line
@@ -406,17 +406,6 @@ struct uv2_3_bau_msg_header {
	/* bits 127:120 */
};

/* Abstracted BAU functions */
struct bau_operations {
	unsigned long (*read_l_sw_ack)(void);
	unsigned long (*read_g_sw_ack)(int pnode);
	unsigned long (*bau_gpa_to_offset)(unsigned long vaddr);
	void (*write_l_sw_ack)(unsigned long mmr);
	void (*write_g_sw_ack)(int pnode, unsigned long mmr);
	void (*write_payload_first)(int pnode, unsigned long mmr);
	void (*write_payload_last)(int pnode, unsigned long mmr);
};

/*
 * The activation descriptor:
 * The format of the message to send, plus all accompanying control
@@ -668,6 +657,17 @@ struct bau_control {
	struct hub_and_pnode	*thp;
};

/* Abstracted BAU functions */
struct bau_operations {
	unsigned long	(*read_l_sw_ack)(void);
	unsigned long	(*read_g_sw_ack)(int pnode);
	unsigned long	(*bau_gpa_to_offset)(unsigned long vaddr);
	void		(*write_l_sw_ack)(unsigned long mmr);
	void		(*write_g_sw_ack)(int pnode, unsigned long mmr);
	void		(*write_payload_first)(int pnode, unsigned long mmr);
	void		(*write_payload_last)(int pnode, unsigned long mmr);
};

static inline void write_mmr_data_broadcast(int pnode, unsigned long mmr_image)
{
	write_gmmr(pnode, UVH_BAU_DATA_BROADCAST, mmr_image);
+21 −22
Original line number Diff line number Diff line
@@ -23,28 +23,7 @@
#include <asm/irq_vectors.h>
#include <asm/timer.h>

static struct bau_operations ops;

static struct bau_operations uv123_bau_ops = {
	.bau_gpa_to_offset       = uv_gpa_to_offset,
	.read_l_sw_ack           = read_mmr_sw_ack,
	.read_g_sw_ack           = read_gmmr_sw_ack,
	.write_l_sw_ack          = write_mmr_sw_ack,
	.write_g_sw_ack          = write_gmmr_sw_ack,
	.write_payload_first     = write_mmr_payload_first,
	.write_payload_last      = write_mmr_payload_last,
};

static struct bau_operations uv4_bau_ops = {
	.bau_gpa_to_offset       = uv_gpa_to_soc_phys_ram,
	.read_l_sw_ack           = read_mmr_proc_sw_ack,
	.read_g_sw_ack           = read_gmmr_proc_sw_ack,
	.write_l_sw_ack          = write_mmr_proc_sw_ack,
	.write_g_sw_ack          = write_gmmr_proc_sw_ack,
	.write_payload_first     = write_mmr_proc_payload_first,
	.write_payload_last      = write_mmr_proc_payload_last,
};

static struct bau_operations ops __ro_after_init;

/* timeouts in nanoseconds (indexed by UVH_AGING_PRESCALE_SEL urgency7 30:28) */
static int timeout_base_ns[] = {
@@ -2158,6 +2137,26 @@ static int __init init_per_cpu(int nuvhubs, int base_part_pnode)
	return 1;
}

static const struct bau_operations uv123_bau_ops __initconst = {
	.bau_gpa_to_offset       = uv_gpa_to_offset,
	.read_l_sw_ack           = read_mmr_sw_ack,
	.read_g_sw_ack           = read_gmmr_sw_ack,
	.write_l_sw_ack          = write_mmr_sw_ack,
	.write_g_sw_ack          = write_gmmr_sw_ack,
	.write_payload_first     = write_mmr_payload_first,
	.write_payload_last      = write_mmr_payload_last,
};

static const struct bau_operations uv4_bau_ops __initconst = {
	.bau_gpa_to_offset       = uv_gpa_to_soc_phys_ram,
	.read_l_sw_ack           = read_mmr_proc_sw_ack,
	.read_g_sw_ack           = read_gmmr_proc_sw_ack,
	.write_l_sw_ack          = write_mmr_proc_sw_ack,
	.write_g_sw_ack          = write_gmmr_proc_sw_ack,
	.write_payload_first     = write_mmr_proc_payload_first,
	.write_payload_last      = write_mmr_proc_payload_last,
};

/*
 * Initialization of BAU-related structures
 */