This tree cleans up various aspects of the UV platform support code,
it removes unnecessary functions and cleans up the rest. Signed-off-by: Ingo Molnar <mingo@kernel.org> -----BEGIN PGP SIGNATURE----- iQJFBAABCgAvFiEEBpT5eoXrXCwVQwEKEnMQ0APhK1gFAl7VNO4RHG1pbmdvQGtl cm5lbC5vcmcACgkQEnMQ0APhK1i61RAAogLRVi4ga4vmTk5SqUqtR4pupbHJv5IM IjkQN0HZ3+Oi6kRxwuOQ9xOOzQWm8GntkZeyN5FA73H7x+bYdU12MIKKTEDcW3xp Mg9FtzfeL0V4YmNkmlnIXycyYA3nBdSxnI/OL/58J9CLT15qXYkWjyvkbI2aJ3qL U8xM5cTTvhoARjd43o0eAfekTg0XdUAsgvO0vOM5+I1HrQP8SR3ZIFaMSR+MfAQx Nbz/UVUSDJ8BNzmS/CfFLFm0F2dkphlLC0r6eAOFZAYSIax0bRVklxV9qdScEQMK bkVKXGanCzVTBVM1HXDycLJaILlqcS18tK+VqNIAR5x2BXmaSG8jqwCW4NM0tcaN c5zemNsqnAH/VzxeFjE2BcDQnA1nkgj75Vm9O81HMQfyqR16M5pBzRXY/qBqslya vX5wLoD962BiVtbELqW6v+Ot29xMYlCLLlTbLHaWQraJS3TjuAvL0/sOFdWgs63F N7a+BLvikfYoKCS8IxW87BFBysy9nhv/4UwdaX5RpIQ1wgx/EJLDaowrM+L6Dzmw bhQ3AgRZGNZCBDm3uGU/LigTTxN93h5KqKnuUKv3H+tNvEKxPKEAqPyvL8fO8G0U BTJiM/XRIzQrkrmwCKqON1iKRjKB2fKklxiq4REIoSqKfeiQ3SVBIHENFnH96Ekf G9qptwFEZYI= =L8Vy -----END PGP SIGNATURE----- Merge tag 'x86-platform-2020-06-01' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip Pull x86 platform updates from Ingo Molnar: "This tree cleans up various aspects of the UV platform support code, it removes unnecessary functions and cleans up the rest" * tag 'x86-platform-2020-06-01' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: x86/apic/uv: Remove code for unused distributed GRU mode x86/platform/uv: Remove the unused _uv_cpu_blade_processor_id() macro x86/platform/uv: Unexport uv_apicid_hibits x86/platform/uv: Remove _uv_hub_info_check() x86/platform/uv: Simplify uv_send_IPI_one() x86/platform/uv: Mark uv_min_hub_revision_id static x86/platform/uv: Mark is_uv_hubless() static x86/platform/uv: Remove the UV*_HUB_IS_SUPPORTED macros x86/platform/uv: Unexport symbols only used by x2apic_uv_x.c x86/platform/uv: Unexport sn_coherency_id x86/platform/uv: Remove the uv_partition_coherence_id() macro x86/platform/uv: Mark uv_bios_call() and uv_bios_call_irqsave() static
This commit is contained in:
		
						commit
						88bc1de11c
					
				| @ -123,12 +123,6 @@ enum uv_memprotect { | ||||
| 	UV_MEMPROT_ALLOW_RW | ||||
| }; | ||||
| 
 | ||||
| /*
 | ||||
|  * bios calls have 6 parameters | ||||
|  */ | ||||
| extern s64 uv_bios_call(enum uv_bios_cmd, u64, u64, u64, u64, u64); | ||||
| extern s64 uv_bios_call_irqsave(enum uv_bios_cmd, u64, u64, u64, u64, u64); | ||||
| 
 | ||||
| extern s64 uv_bios_get_sn_info(int, int *, long *, long *, long *, long *); | ||||
| extern s64 uv_bios_freq_base(u64, u64 *); | ||||
| extern int uv_bios_mq_watchlist_alloc(unsigned long, unsigned int, | ||||
| @ -146,7 +140,6 @@ extern long sn_partition_id; | ||||
| extern long sn_coherency_id; | ||||
| extern long sn_region_size; | ||||
| extern long system_serial_number; | ||||
| #define uv_partition_coherence_id()	(sn_coherency_id) | ||||
| 
 | ||||
| extern struct kobject *sgi_uv_kobj;	/* /sys/firmware/sgi_uv */ | ||||
| 
 | ||||
|  | ||||
| @ -31,7 +31,6 @@ static inline bool is_early_uv_system(void) | ||||
| } | ||||
| extern int is_uv_system(void); | ||||
| extern int is_uv_hubbed(int uvtype); | ||||
| extern int is_uv_hubless(int uvtype); | ||||
| extern void uv_cpu_init(void); | ||||
| extern void uv_nmi_init(void); | ||||
| extern void uv_system_init(void); | ||||
| @ -44,7 +43,6 @@ static inline enum uv_system_type get_uv_system_type(void) { return UV_NONE; } | ||||
| static inline bool is_early_uv_system(void)	{ return 0; } | ||||
| static inline int is_uv_system(void)	{ return 0; } | ||||
| static inline int is_uv_hubbed(int uv)	{ return 0; } | ||||
| static inline int is_uv_hubless(int uv) { return 0; } | ||||
| static inline void uv_cpu_init(void)	{ } | ||||
| static inline void uv_system_init(void)	{ } | ||||
| static inline const struct cpumask * | ||||
|  | ||||
| @ -219,20 +219,6 @@ static inline struct uv_hub_info_s *uv_cpu_hub_info(int cpu) | ||||
| 	return (struct uv_hub_info_s *)uv_cpu_info_per(cpu)->p_uv_hub_info; | ||||
| } | ||||
| 
 | ||||
| #define	UV_HUB_INFO_VERSION	0x7150 | ||||
| extern int uv_hub_info_version(void); | ||||
| static inline int uv_hub_info_check(int version) | ||||
| { | ||||
| 	if (uv_hub_info_version() == version) | ||||
| 		return 0; | ||||
| 
 | ||||
| 	pr_crit("UV: uv_hub_info version(%x) mismatch, expecting(%x)\n", | ||||
| 		uv_hub_info_version(), version); | ||||
| 
 | ||||
| 	BUG();	/* Catastrophic - cannot continue on unknown UV system */ | ||||
| } | ||||
| #define	_uv_hub_info_check()	uv_hub_info_check(UV_HUB_INFO_VERSION) | ||||
| 
 | ||||
| /*
 | ||||
|  * HUB revision ranges for each UV HUB architecture. | ||||
|  * This is a software convention - NOT the hardware revision numbers in | ||||
| @ -244,51 +230,32 @@ static inline int uv_hub_info_check(int version) | ||||
| #define UV4_HUB_REVISION_BASE		7 | ||||
| #define UV4A_HUB_REVISION_BASE		8	/* UV4 (fixed) rev 2 */ | ||||
| 
 | ||||
| /* WARNING: UVx_HUB_IS_SUPPORTED defines are deprecated and will be removed */ | ||||
| static inline int is_uv1_hub(void) | ||||
| { | ||||
| #ifdef	UV1_HUB_IS_SUPPORTED | ||||
| 	return is_uv_hubbed(uv(1)); | ||||
| #else | ||||
| 	return 0; | ||||
| #endif | ||||
| } | ||||
| 
 | ||||
| static inline int is_uv2_hub(void) | ||||
| { | ||||
| #ifdef	UV2_HUB_IS_SUPPORTED | ||||
| 	return is_uv_hubbed(uv(2)); | ||||
| #else | ||||
| 	return 0; | ||||
| #endif | ||||
| } | ||||
| 
 | ||||
| static inline int is_uv3_hub(void) | ||||
| { | ||||
| #ifdef	UV3_HUB_IS_SUPPORTED | ||||
| 	return is_uv_hubbed(uv(3)); | ||||
| #else | ||||
| 	return 0; | ||||
| #endif | ||||
| } | ||||
| 
 | ||||
| /* First test "is UV4A", then "is UV4" */ | ||||
| static inline int is_uv4a_hub(void) | ||||
| { | ||||
| #ifdef	UV4A_HUB_IS_SUPPORTED | ||||
| 	if (is_uv_hubbed(uv(4))) | ||||
| 		return (uv_hub_info->hub_revision == UV4A_HUB_REVISION_BASE); | ||||
| #endif | ||||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| static inline int is_uv4_hub(void) | ||||
| { | ||||
| #ifdef	UV4_HUB_IS_SUPPORTED | ||||
| 	return is_uv_hubbed(uv(4)); | ||||
| #else | ||||
| 	return 0; | ||||
| #endif | ||||
| } | ||||
| 
 | ||||
| static inline int is_uvx_hub(void) | ||||
| @ -692,7 +659,6 @@ static inline int uv_cpu_blade_processor_id(int cpu) | ||||
| { | ||||
| 	return uv_cpu_info_per(cpu)->blade_cpu_id; | ||||
| } | ||||
| #define _uv_cpu_blade_processor_id 1	/* indicate function available */ | ||||
| 
 | ||||
| /* Blade number to Node number (UV1..UV4 is 1:1) */ | ||||
| static inline int uv_blade_to_node(int blade) | ||||
| @ -856,26 +822,6 @@ static inline void uv_set_cpu_scir_bits(int cpu, unsigned char value) | ||||
| } | ||||
| 
 | ||||
| extern unsigned int uv_apicid_hibits; | ||||
| static unsigned long uv_hub_ipi_value(int apicid, int vector, int mode) | ||||
| { | ||||
| 	apicid |= uv_apicid_hibits; | ||||
| 	return (1UL << UVH_IPI_INT_SEND_SHFT) | | ||||
| 			((apicid) << UVH_IPI_INT_APIC_ID_SHFT) | | ||||
| 			(mode << UVH_IPI_INT_DELIVERY_MODE_SHFT) | | ||||
| 			(vector << UVH_IPI_INT_VECTOR_SHFT); | ||||
| } | ||||
| 
 | ||||
| static inline void uv_hub_send_ipi(int pnode, int apicid, int vector) | ||||
| { | ||||
| 	unsigned long val; | ||||
| 	unsigned long dmode = dest_Fixed; | ||||
| 
 | ||||
| 	if (vector == NMI_VECTOR) | ||||
| 		dmode = dest_NMI; | ||||
| 
 | ||||
| 	val = uv_hub_ipi_value(apicid, vector, dmode); | ||||
| 	uv_write_global_mmr64(pnode, UVH_IPI_INT, val); | ||||
| } | ||||
| 
 | ||||
| /*
 | ||||
|  * Get the minimum revision number of the hub chips within the partition. | ||||
|  | ||||
| @ -99,13 +99,6 @@ | ||||
| #define UV3_HUB_PART_NUMBER_X	0x4321 | ||||
| #define UV4_HUB_PART_NUMBER	0x99a1 | ||||
| 
 | ||||
| /* Compat: Indicate which UV Hubs are supported. */ | ||||
| #define UV1_HUB_IS_SUPPORTED	1 | ||||
| #define UV2_HUB_IS_SUPPORTED	1 | ||||
| #define UV3_HUB_IS_SUPPORTED	1 | ||||
| #define UV4_HUB_IS_SUPPORTED	1 | ||||
| #define UV4A_HUB_IS_SUPPORTED	1 | ||||
| 
 | ||||
| /* Error function to catch undefined references */ | ||||
| extern unsigned long uv_undefined(char *str); | ||||
| 
 | ||||
|  | ||||
| @ -30,8 +30,6 @@ static enum uv_system_type	uv_system_type; | ||||
| static int			uv_hubbed_system; | ||||
| static int			uv_hubless_system; | ||||
| static u64			gru_start_paddr, gru_end_paddr; | ||||
| static u64			gru_dist_base, gru_first_node_paddr = -1LL, gru_last_node_paddr; | ||||
| static u64			gru_dist_lmask, gru_dist_umask; | ||||
| static union uvh_apicid		uvh_apicid; | ||||
| 
 | ||||
| /* Unpack OEM/TABLE ID's to be NULL terminated strings */ | ||||
| @ -48,11 +46,9 @@ static struct { | ||||
| 	unsigned int gnode_shift; | ||||
| } uv_cpuid; | ||||
| 
 | ||||
| int uv_min_hub_revision_id; | ||||
| EXPORT_SYMBOL_GPL(uv_min_hub_revision_id); | ||||
| static int uv_min_hub_revision_id; | ||||
| 
 | ||||
| unsigned int uv_apicid_hibits; | ||||
| EXPORT_SYMBOL_GPL(uv_apicid_hibits); | ||||
| 
 | ||||
| static struct apic apic_x2apic_uv_x; | ||||
| static struct uv_hub_info_s uv_hub_info_node0; | ||||
| @ -85,20 +81,7 @@ static unsigned long __init uv_early_read_mmr(unsigned long addr) | ||||
| 
 | ||||
| static inline bool is_GRU_range(u64 start, u64 end) | ||||
| { | ||||
| 	if (gru_dist_base) { | ||||
| 		u64 su = start & gru_dist_umask; /* Upper (incl pnode) bits */ | ||||
| 		u64 sl = start & gru_dist_lmask; /* Base offset bits */ | ||||
| 		u64 eu = end & gru_dist_umask; | ||||
| 		u64 el = end & gru_dist_lmask; | ||||
| 
 | ||||
| 		/* Must reside completely within a single GRU range: */ | ||||
| 		return (sl == gru_dist_base && el == gru_dist_base && | ||||
| 			su >= gru_first_node_paddr && | ||||
| 			su <= gru_last_node_paddr && | ||||
| 			eu == su); | ||||
| 	} else { | ||||
| 		return start >= gru_start_paddr && end <= gru_end_paddr; | ||||
| 	} | ||||
| 	return start >= gru_start_paddr && end <= gru_end_paddr; | ||||
| } | ||||
| 
 | ||||
| static bool uv_is_untracked_pat_range(u64 start, u64 end) | ||||
| @ -385,11 +368,10 @@ int is_uv_hubbed(int uvtype) | ||||
| } | ||||
| EXPORT_SYMBOL_GPL(is_uv_hubbed); | ||||
| 
 | ||||
| int is_uv_hubless(int uvtype) | ||||
| static int is_uv_hubless(int uvtype) | ||||
| { | ||||
| 	return (uv_hubless_system & uvtype); | ||||
| } | ||||
| EXPORT_SYMBOL_GPL(is_uv_hubless); | ||||
| 
 | ||||
| void **__uv_hub_info_list; | ||||
| EXPORT_SYMBOL_GPL(__uv_hub_info_list); | ||||
| @ -417,12 +399,6 @@ static __initdata struct uv_gam_range_s		*_gr_table; | ||||
| 
 | ||||
| #define	SOCK_EMPTY	((unsigned short)~0) | ||||
| 
 | ||||
| extern int uv_hub_info_version(void) | ||||
| { | ||||
| 	return UV_HUB_INFO_VERSION; | ||||
| } | ||||
| EXPORT_SYMBOL(uv_hub_info_version); | ||||
| 
 | ||||
| /* Default UV memory block size is 2GB */ | ||||
| static unsigned long mem_block_size __initdata = (2UL << 30); | ||||
| 
 | ||||
| @ -590,12 +566,21 @@ static int uv_wakeup_secondary(int phys_apicid, unsigned long start_rip) | ||||
| 
 | ||||
| static void uv_send_IPI_one(int cpu, int vector) | ||||
| { | ||||
| 	unsigned long apicid; | ||||
| 	int pnode; | ||||
| 	unsigned long apicid = per_cpu(x86_cpu_to_apicid, cpu); | ||||
| 	int pnode = uv_apicid_to_pnode(apicid); | ||||
| 	unsigned long dmode, val; | ||||
| 
 | ||||
| 	apicid = per_cpu(x86_cpu_to_apicid, cpu); | ||||
| 	pnode = uv_apicid_to_pnode(apicid); | ||||
| 	uv_hub_send_ipi(pnode, apicid, vector); | ||||
| 	if (vector == NMI_VECTOR) | ||||
| 		dmode = dest_NMI; | ||||
| 	else | ||||
| 		dmode = dest_Fixed; | ||||
| 
 | ||||
| 	val = (1UL << UVH_IPI_INT_SEND_SHFT) | | ||||
| 		((apicid | uv_apicid_hibits) << UVH_IPI_INT_APIC_ID_SHFT) | | ||||
| 		(dmode << UVH_IPI_INT_DELIVERY_MODE_SHFT) | | ||||
| 		(vector << UVH_IPI_INT_VECTOR_SHFT); | ||||
| 
 | ||||
| 	uv_write_global_mmr64(pnode, UVH_IPI_INT, val); | ||||
| } | ||||
| 
 | ||||
| static void uv_send_IPI_mask(const struct cpumask *mask, int vector) | ||||
| @ -797,42 +782,6 @@ static __init void map_high(char *id, unsigned long base, int pshift, int bshift | ||||
| 		init_extra_mapping_wb(paddr, bytes); | ||||
| } | ||||
| 
 | ||||
| static __init void map_gru_distributed(unsigned long c) | ||||
| { | ||||
| 	union uvh_rh_gam_gru_overlay_config_mmr_u gru; | ||||
| 	u64 paddr; | ||||
| 	unsigned long bytes; | ||||
| 	int nid; | ||||
| 
 | ||||
| 	gru.v = c; | ||||
| 
 | ||||
| 	/* Only base bits 42:28 relevant in dist mode */ | ||||
| 	gru_dist_base = gru.v & 0x000007fff0000000UL; | ||||
| 	if (!gru_dist_base) { | ||||
| 		pr_info("UV: Map GRU_DIST base address NULL\n"); | ||||
| 		return; | ||||
| 	} | ||||
| 
 | ||||
| 	bytes = 1UL << UVH_RH_GAM_GRU_OVERLAY_CONFIG_MMR_BASE_SHFT; | ||||
| 	gru_dist_lmask = ((1UL << uv_hub_info->m_val) - 1) & ~(bytes - 1); | ||||
| 	gru_dist_umask = ~((1UL << uv_hub_info->m_val) - 1); | ||||
| 	gru_dist_base &= gru_dist_lmask; /* Clear bits above M */ | ||||
| 
 | ||||
| 	for_each_online_node(nid) { | ||||
| 		paddr = ((u64)uv_node_to_pnode(nid) << uv_hub_info->m_val) | | ||||
| 				gru_dist_base; | ||||
| 		init_extra_mapping_wb(paddr, bytes); | ||||
| 		gru_first_node_paddr = min(paddr, gru_first_node_paddr); | ||||
| 		gru_last_node_paddr = max(paddr, gru_last_node_paddr); | ||||
| 	} | ||||
| 
 | ||||
| 	/* Save upper (63:M) bits of address only for is_GRU_range */ | ||||
| 	gru_first_node_paddr &= gru_dist_umask; | ||||
| 	gru_last_node_paddr &= gru_dist_umask; | ||||
| 
 | ||||
| 	pr_debug("UV: Map GRU_DIST base 0x%016llx  0x%016llx - 0x%016llx\n", gru_dist_base, gru_first_node_paddr, gru_last_node_paddr); | ||||
| } | ||||
| 
 | ||||
| static __init void map_gru_high(int max_pnode) | ||||
| { | ||||
| 	union uvh_rh_gam_gru_overlay_config_mmr_u gru; | ||||
| @ -846,12 +795,6 @@ static __init void map_gru_high(int max_pnode) | ||||
| 		return; | ||||
| 	} | ||||
| 
 | ||||
| 	/* Only UV3 has distributed GRU mode */ | ||||
| 	if (is_uv3_hub() && gru.s3.mode) { | ||||
| 		map_gru_distributed(gru.v); | ||||
| 		return; | ||||
| 	} | ||||
| 
 | ||||
| 	base = (gru.v & mask) >> shift; | ||||
| 	map_high("GRU", base, shift, shift, max_pnode, map_wb); | ||||
| 	gru_start_paddr = ((u64)base << shift); | ||||
|  | ||||
| @ -45,7 +45,8 @@ static s64 __uv_bios_call(enum uv_bios_cmd which, u64 a1, u64 a2, u64 a3, | ||||
| 	return ret; | ||||
| } | ||||
| 
 | ||||
| s64 uv_bios_call(enum uv_bios_cmd which, u64 a1, u64 a2, u64 a3, u64 a4, u64 a5) | ||||
| static s64 uv_bios_call(enum uv_bios_cmd which, u64 a1, u64 a2, u64 a3, u64 a4, | ||||
| 		u64 a5) | ||||
| { | ||||
| 	s64 ret; | ||||
| 
 | ||||
| @ -57,10 +58,9 @@ s64 uv_bios_call(enum uv_bios_cmd which, u64 a1, u64 a2, u64 a3, u64 a4, u64 a5) | ||||
| 
 | ||||
| 	return ret; | ||||
| } | ||||
| EXPORT_SYMBOL_GPL(uv_bios_call); | ||||
| 
 | ||||
| s64 uv_bios_call_irqsave(enum uv_bios_cmd which, u64 a1, u64 a2, u64 a3, | ||||
| 					u64 a4, u64 a5) | ||||
| static s64 uv_bios_call_irqsave(enum uv_bios_cmd which, u64 a1, u64 a2, u64 a3, | ||||
| 		u64 a4, u64 a5) | ||||
| { | ||||
| 	unsigned long bios_flags; | ||||
| 	s64 ret; | ||||
| @ -77,18 +77,13 @@ s64 uv_bios_call_irqsave(enum uv_bios_cmd which, u64 a1, u64 a2, u64 a3, | ||||
| 	return ret; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| long sn_partition_id; | ||||
| EXPORT_SYMBOL_GPL(sn_partition_id); | ||||
| long sn_coherency_id; | ||||
| EXPORT_SYMBOL_GPL(sn_coherency_id); | ||||
| long sn_region_size; | ||||
| EXPORT_SYMBOL_GPL(sn_region_size); | ||||
| long system_serial_number; | ||||
| EXPORT_SYMBOL_GPL(system_serial_number); | ||||
| int uv_type; | ||||
| EXPORT_SYMBOL_GPL(uv_type); | ||||
| 
 | ||||
| 
 | ||||
| s64 uv_bios_get_sn_info(int fc, int *uvtype, long *partid, long *coher, | ||||
| 		long *region, long *ssn) | ||||
| @ -115,7 +110,6 @@ s64 uv_bios_get_sn_info(int fc, int *uvtype, long *partid, long *coher, | ||||
| 		*ssn = v1; | ||||
| 	return ret; | ||||
| } | ||||
| EXPORT_SYMBOL_GPL(uv_bios_get_sn_info); | ||||
| 
 | ||||
| int | ||||
| uv_bios_mq_watchlist_alloc(unsigned long addr, unsigned int mq_size, | ||||
| @ -166,7 +160,6 @@ s64 uv_bios_freq_base(u64 clock_type, u64 *ticks_per_second) | ||||
| 	return uv_bios_call(UV_BIOS_FREQ_BASE, clock_type, | ||||
| 			   (u64)ticks_per_second, 0, 0, 0); | ||||
| } | ||||
| EXPORT_SYMBOL_GPL(uv_bios_freq_base); | ||||
| 
 | ||||
| /*
 | ||||
|  * uv_bios_set_legacy_vga_target - Set Legacy VGA I/O Target | ||||
| @ -185,7 +178,6 @@ int uv_bios_set_legacy_vga_target(bool decode, int domain, int bus) | ||||
| 	return uv_bios_call(UV_BIOS_SET_LEGACY_VGA_TARGET, | ||||
| 				(u64)decode, (u64)domain, (u64)bus, 0, 0); | ||||
| } | ||||
| EXPORT_SYMBOL_GPL(uv_bios_set_legacy_vga_target); | ||||
| 
 | ||||
| int uv_bios_init(void) | ||||
| { | ||||
|  | ||||
| @ -21,7 +21,7 @@ static ssize_t partition_id_show(struct kobject *kobj, | ||||
| static ssize_t coherence_id_show(struct kobject *kobj, | ||||
| 			struct kobj_attribute *attr, char *buf) | ||||
| { | ||||
| 	return snprintf(buf, PAGE_SIZE, "%ld\n", uv_partition_coherence_id()); | ||||
| 	return snprintf(buf, PAGE_SIZE, "%ld\n", sn_coherency_id); | ||||
| } | ||||
| 
 | ||||
| static struct kobj_attribute partition_id_attr = | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user