diff options
Diffstat (limited to 'arch/mips/include')
35 files changed, 309 insertions, 455 deletions
diff --git a/arch/mips/include/asm/Kbuild b/arch/mips/include/asm/Kbuild index 61b0fc2026e6..16d1eb4c8fe6 100644 --- a/arch/mips/include/asm/Kbuild +++ b/arch/mips/include/asm/Kbuild @@ -19,6 +19,7 @@ generic-y += preempt.h  generic-y += qrwlock.h  generic-y += qspinlock.h  generic-y += sections.h +generic-y += serial.h  generic-y += trace_clock.h  generic-y += unaligned.h  generic-y += user.h diff --git a/arch/mips/include/asm/asmmacro.h b/arch/mips/include/asm/asmmacro.h index feb069cbf44e..655f40ddb6d1 100644 --- a/arch/mips/include/asm/asmmacro.h +++ b/arch/mips/include/asm/asmmacro.h @@ -63,7 +63,7 @@  	.endm  	.macro	local_irq_disable reg=t0 -#ifdef CONFIG_PREEMPT +#ifdef CONFIG_PREEMPTION  	lw      \reg, TI_PRE_COUNT($28)  	addi    \reg, \reg, 1  	sw      \reg, TI_PRE_COUNT($28) @@ -73,7 +73,7 @@  	xori	\reg, \reg, 1  	mtc0	\reg, CP0_STATUS  	irq_disable_hazard -#ifdef CONFIG_PREEMPT +#ifdef CONFIG_PREEMPTION  	lw      \reg, TI_PRE_COUNT($28)  	addi    \reg, \reg, -1  	sw      \reg, TI_PRE_COUNT($28) diff --git a/arch/mips/include/asm/bootinfo.h b/arch/mips/include/asm/bootinfo.h index d41a5057bc69..61727785a247 100644 --- a/arch/mips/include/asm/bootinfo.h +++ b/arch/mips/include/asm/bootinfo.h @@ -81,6 +81,7 @@ enum loongson2ef_machine_type {  #define  MACH_INGENIC_JZ4770	2	/* JZ4770 SOC		*/  #define  MACH_INGENIC_JZ4780	3	/* JZ4780 SOC		*/  #define  MACH_INGENIC_X1000		4	/* X1000 SOC		*/ +#define  MACH_INGENIC_X1830		5	/* X1830 SOC		*/  extern char *system_type;  const char *get_system_type(void); diff --git a/arch/mips/include/asm/compat.h b/arch/mips/include/asm/compat.h index c99166eadbde..255afcdd79c9 100644 --- a/arch/mips/include/asm/compat.h +++ b/arch/mips/include/asm/compat.h @@ -100,24 +100,6 @@ typedef u32		compat_sigset_word;  #define COMPAT_OFF_T_MAX	0x7fffffff -/* - * A pointer passed in from user mode. This should not - * be used for syscall parameters, just declare them - * as pointers because the syscall entry code will have - * appropriately converted them already. - */ - -static inline void __user *compat_ptr(compat_uptr_t uptr) -{ -	/* cast to a __user pointer via "unsigned long" makes sparse happy */ -	return (void __user *)(unsigned long)(long)uptr; -} - -static inline compat_uptr_t ptr_to_compat(void __user *uptr) -{ -	return (u32)(unsigned long)uptr; -} -  static inline void __user *arch_compat_alloc_user_space(long len)  {  	struct pt_regs *regs = (struct pt_regs *) diff --git a/arch/mips/include/asm/cpu-features.h b/arch/mips/include/asm/cpu-features.h index 983a6a7f43a1..de44c92b1c1f 100644 --- a/arch/mips/include/asm/cpu-features.h +++ b/arch/mips/include/asm/cpu-features.h @@ -555,6 +555,10 @@  # define cpu_has_perf		__opt(MIPS_CPU_PERF)  #endif +#ifndef cpu_has_mac2008_only +# define cpu_has_mac2008_only	__opt(MIPS_CPU_MAC_2008_ONLY) +#endif +  #ifdef CONFIG_SMP  /*   * Some systems share FTLB RAMs between threads within a core (siblings in diff --git a/arch/mips/include/asm/cpu-type.h b/arch/mips/include/asm/cpu-type.h index c46c59b0f1b4..49f0061a6051 100644 --- a/arch/mips/include/asm/cpu-type.h +++ b/arch/mips/include/asm/cpu-type.h @@ -15,7 +15,8 @@  static inline int __pure __get_cpu_type(const int cpu_type)  {  	switch (cpu_type) { -#if defined(CONFIG_SYS_HAS_CPU_LOONGSON2EF) +#if defined(CONFIG_SYS_HAS_CPU_LOONGSON2E) || \ +    defined(CONFIG_SYS_HAS_CPU_LOONGSON2F)  	case CPU_LOONGSON2EF:  #endif diff --git a/arch/mips/include/asm/cpu.h b/arch/mips/include/asm/cpu.h index ea830783d663..216a22916740 100644 --- a/arch/mips/include/asm/cpu.h +++ b/arch/mips/include/asm/cpu.h @@ -46,7 +46,7 @@  #define PRID_COMP_NETLOGIC	0x0c0000  #define PRID_COMP_CAVIUM	0x0d0000  #define PRID_COMP_LOONGSON	0x140000 -#define PRID_COMP_INGENIC_D0	0xd00000	/* JZ4740, JZ4750 */ +#define PRID_COMP_INGENIC_D0	0xd00000	/* JZ4740, JZ4750, X1830 */  #define PRID_COMP_INGENIC_D1	0xd10000	/* JZ4770, JZ4775, X1000 */  #define PRID_COMP_INGENIC_E1	0xe10000	/* JZ4780 */ @@ -185,7 +185,8 @@   * These are the PRID's for when 23:16 == PRID_COMP_INGENIC_*   */ -#define PRID_IMP_XBURST	       0x0200 +#define PRID_IMP_XBURST_REV1	0x0200	/* XBurst with MXU SIMD ISA		*/ +#define PRID_IMP_XBURST_REV2	0x0100	/* XBurst with MXU2 SIMD ISA	*/  /*   * These are the PRID's for when 23:16 == PRID_COMP_NETLOGIC @@ -415,6 +416,7 @@ enum cpu_type_enum {  #define MIPS_CPU_MT_PER_TC_PERF_COUNTERS \  				BIT_ULL(56)	/* CPU has perf counters implemented per TC (MIPSMT ASE) */  #define MIPS_CPU_MMID		BIT_ULL(57)	/* CPU supports MemoryMapIDs */ +#define MIPS_CPU_MAC_2008_ONLY	BIT_ULL(58)	/* CPU Only support MAC2008 Fused multiply-add instruction */  /*   * CPU ASE encodings diff --git a/arch/mips/include/asm/gio_device.h b/arch/mips/include/asm/gio_device.h index c52948f9ca95..159087f5386e 100644 --- a/arch/mips/include/asm/gio_device.h +++ b/arch/mips/include/asm/gio_device.h @@ -32,8 +32,6 @@ struct gio_driver {  };  #define to_gio_driver(drv) container_of(drv, struct gio_driver, driver) -extern const struct gio_device_id *gio_match_device(const struct gio_device_id *, -						    const struct gio_device *);  extern struct gio_device *gio_dev_get(struct gio_device *);  extern void gio_dev_put(struct gio_device *); diff --git a/arch/mips/include/asm/hazards.h b/arch/mips/include/asm/hazards.h index a4f48b0f5541..a0b92205f933 100644 --- a/arch/mips/include/asm/hazards.h +++ b/arch/mips/include/asm/hazards.h @@ -23,7 +23,7 @@   * TLB hazards   */  #if (defined(CONFIG_CPU_MIPSR2) || defined(CONFIG_CPU_MIPSR6)) && \ -	!defined(CONFIG_CPU_CAVIUM_OCTEON) && !defined(CONFIG_LOONGSON3_ENHANCEMENT) +	!defined(CONFIG_CPU_CAVIUM_OCTEON) && !defined(CONFIG_CPU_LOONGSON64)  /*   * MIPSR2 defines ehb for hazard avoidance @@ -158,7 +158,7 @@ do {									\  } while (0)  #elif defined(CONFIG_MIPS_ALCHEMY) || defined(CONFIG_CPU_CAVIUM_OCTEON) || \ -	defined(CONFIG_CPU_LOONGSON2EF) || defined(CONFIG_LOONGSON3_ENHANCEMENT) || \ +	defined(CONFIG_CPU_LOONGSON2EF) || defined(CONFIG_CPU_LOONGSON64) || \  	defined(CONFIG_CPU_R10000) || defined(CONFIG_CPU_R5500) || defined(CONFIG_CPU_XLR)  /* diff --git a/arch/mips/include/asm/io.h b/arch/mips/include/asm/io.h index 3f6ce74335b4..cf1f2a4a2418 100644 --- a/arch/mips/include/asm/io.h +++ b/arch/mips/include/asm/io.h @@ -227,29 +227,7 @@ static inline void __iomem *ioremap_prot(phys_addr_t offset,   */  #define ioremap(offset, size)						\  	__ioremap_mode((offset), (size), _CACHE_UNCACHED) - -/* - * ioremap_nocache     -   map bus memory into CPU space - * @offset:    bus address of the memory - * @size:      size of the resource to map - * - * ioremap_nocache performs a platform specific sequence of operations to - * make bus memory CPU accessible via the readb/readw/readl/writeb/ - * writew/writel functions and the other mmio helpers. The returned - * address is not guaranteed to be usable directly as a virtual - * address. - * - * This version of ioremap ensures that the memory is marked uncachable - * on the CPU as well as honouring existing caching rules from things like - * the PCI bus. Note that there are other caches and buffers on many - * busses. In particular driver authors should read up on PCI writes - * - * It's useful if some control registers are in such an area and - * write combining or read caching is not desirable: - */ -#define ioremap_nocache(offset, size)					\ -	__ioremap_mode((offset), (size), _CACHE_UNCACHED) -#define ioremap_uc ioremap_nocache +#define ioremap_uc		ioremap  /*   * ioremap_cache -	map bus memory into CPU space diff --git a/arch/mips/include/asm/irqflags.h b/arch/mips/include/asm/irqflags.h index c4728bbdf15b..47a8ffc0b413 100644 --- a/arch/mips/include/asm/irqflags.h +++ b/arch/mips/include/asm/irqflags.h @@ -18,7 +18,7 @@  #include <asm/compiler.h>  #include <asm/hazards.h> -#if defined(CONFIG_CPU_MIPSR2) || defined (CONFIG_CPU_MIPSR6) +#if defined(CONFIG_CPU_HAS_DIEI)  static inline void arch_local_irq_disable(void)  { @@ -94,7 +94,7 @@ static inline void arch_local_irq_restore(unsigned long flags)  void arch_local_irq_disable(void);  unsigned long arch_local_irq_save(void);  void arch_local_irq_restore(unsigned long flags); -#endif /* CONFIG_CPU_MIPSR2 || CONFIG_CPU_MIPSR6 */ +#endif /* CONFIG_CPU_HAS_DIEI */  static inline void arch_local_irq_enable(void)  { @@ -102,7 +102,7 @@ static inline void arch_local_irq_enable(void)  	"	.set	push						\n"  	"	.set	reorder						\n"  	"	.set	noat						\n" -#if   defined(CONFIG_CPU_MIPSR2) || defined(CONFIG_CPU_MIPSR6) +#if defined(CONFIG_CPU_HAS_DIEI)  	"	ei							\n"  #else  	"	mfc0	$1,$12						\n" diff --git a/arch/mips/include/asm/local.h b/arch/mips/include/asm/local.h index 02783e141c32..fef0fda8f82f 100644 --- a/arch/mips/include/asm/local.h +++ b/arch/mips/include/asm/local.h @@ -37,6 +37,7 @@ static __inline__ long local_add_return(long i, local_t * l)  		__asm__ __volatile__(  		"	.set	push					\n"  		"	.set	arch=r4000				\n" +			__SYNC(full, loongson3_war) "			\n"  		"1:"	__LL	"%1, %2		# local_add_return	\n"  		"	addu	%0, %1, %3				\n"  			__SC	"%0, %2					\n" @@ -52,6 +53,7 @@ static __inline__ long local_add_return(long i, local_t * l)  		__asm__ __volatile__(  		"	.set	push					\n"  		"	.set	"MIPS_ISA_ARCH_LEVEL"			\n" +			__SYNC(full, loongson3_war) "			\n"  		"1:"	__LL	"%1, %2		# local_add_return	\n"  		"	addu	%0, %1, %3				\n"  			__SC	"%0, %2					\n" @@ -84,6 +86,7 @@ static __inline__ long local_sub_return(long i, local_t * l)  		__asm__ __volatile__(  		"	.set	push					\n"  		"	.set	arch=r4000				\n" +			__SYNC(full, loongson3_war) "			\n"  		"1:"	__LL	"%1, %2		# local_sub_return	\n"  		"	subu	%0, %1, %3				\n"  			__SC	"%0, %2					\n" @@ -99,6 +102,7 @@ static __inline__ long local_sub_return(long i, local_t * l)  		__asm__ __volatile__(  		"	.set	push					\n"  		"	.set	"MIPS_ISA_ARCH_LEVEL"			\n" +			__SYNC(full, loongson3_war) "			\n"  		"1:"	__LL	"%1, %2		# local_sub_return	\n"  		"	subu	%0, %1, %3				\n"  			__SC	"%0, %2					\n" diff --git a/arch/mips/include/asm/mach-ip27/kernel-entry-init.h b/arch/mips/include/asm/mach-ip27/kernel-entry-init.h index f992c1db876b..3e54f605a70b 100644 --- a/arch/mips/include/asm/mach-ip27/kernel-entry-init.h +++ b/arch/mips/include/asm/mach-ip27/kernel-entry-init.h @@ -10,20 +10,10 @@  #define __ASM_MACH_IP27_KERNEL_ENTRY_H  #include <asm/sn/addrs.h> -#include <asm/sn/sn0/hubni.h> +#include <asm/sn/agent.h>  #include <asm/sn/klkernvars.h>  /* - * Returns the local nasid into res. - */ -	.macro GET_NASID_ASM res -	dli	\res, LOCAL_HUB_ADDR(NI_STATUS_REV_ID) -	ld	\res, (\res) -	and	\res, NSRI_NODEID_MASK -	dsrl	\res, NSRI_NODEID_SHFT -	.endm - -/*   * TLB bits   */  #define PAGE_GLOBAL		(1 << 6) diff --git a/arch/mips/include/asm/mach-ip27/mangle-port.h b/arch/mips/include/asm/mach-ip27/mangle-port.h index f6e4912ea062..27c56efa519f 100644 --- a/arch/mips/include/asm/mach-ip27/mangle-port.h +++ b/arch/mips/include/asm/mach-ip27/mangle-port.h @@ -8,7 +8,7 @@  #ifndef __ASM_MACH_IP27_MANGLE_PORT_H  #define __ASM_MACH_IP27_MANGLE_PORT_H -#define __swizzle_addr_b(port)	(port) +#define __swizzle_addr_b(port)	((port) ^ 3)  #define __swizzle_addr_w(port)	((port) ^ 2)  #define __swizzle_addr_l(port)	(port)  #define __swizzle_addr_q(port)	(port) @@ -20,6 +20,6 @@  # define ioswabl(a, x)		(x)  # define __mem_ioswabl(a, x)	cpu_to_le32(x)  # define ioswabq(a, x)		(x) -# define __mem_ioswabq(a, x)	cpu_to_le32(x) +# define __mem_ioswabq(a, x)	cpu_to_le64(x)  #endif /* __ASM_MACH_IP27_MANGLE_PORT_H */ diff --git a/arch/mips/include/asm/mach-ip27/mmzone.h b/arch/mips/include/asm/mach-ip27/mmzone.h index f463826515df..08c36e50a860 100644 --- a/arch/mips/include/asm/mach-ip27/mmzone.h +++ b/arch/mips/include/asm/mach-ip27/mmzone.h @@ -4,7 +4,8 @@  #include <asm/sn/addrs.h>  #include <asm/sn/arch.h> -#include <asm/sn/hub.h> +#include <asm/sn/agent.h> +#include <asm/sn/klkernvars.h>  #define pa_to_nid(addr)		NASID_GET(addr) @@ -12,7 +13,6 @@ struct hub_data {  	kern_vars_t	kern_vars;  	DECLARE_BITMAP(h_bigwin_used, HUB_NUM_BIG_WINDOW);  	cpumask_t	h_cpus; -	unsigned long slice_map;  };  struct node_data { diff --git a/arch/mips/include/asm/mach-ip27/topology.h b/arch/mips/include/asm/mach-ip27/topology.h index be61ddcdacab..d66cc53feab8 100644 --- a/arch/mips/include/asm/mach-ip27/topology.h +++ b/arch/mips/include/asm/mach-ip27/topology.h @@ -2,12 +2,12 @@  #ifndef _ASM_MACH_TOPOLOGY_H  #define _ASM_MACH_TOPOLOGY_H	1 -#include <asm/sn/hub.h>  #include <asm/sn/types.h>  #include <asm/mmzone.h>  struct cpuinfo_ip27 {  	nasid_t		p_nasid;	/* my node ID in numa-as-id-space */ +	unsigned short	p_speed;	/* cpu speed in MHz */  	unsigned char	p_slice;	/* Physical position on node board */  }; diff --git a/arch/mips/include/asm/mach-loongson64/cpu-feature-overrides.h b/arch/mips/include/asm/mach-loongson64/cpu-feature-overrides.h index 7dc8d75445a9..4fab38c743dd 100644 --- a/arch/mips/include/asm/mach-loongson64/cpu-feature-overrides.h +++ b/arch/mips/include/asm/mach-loongson64/cpu-feature-overrides.h @@ -46,5 +46,7 @@  #define cpu_has_wsbh		1  #define cpu_has_ic_fills_f_dc	1  #define cpu_hwrena_impl_bits	0xc0000000 +#define cpu_has_mac2008_only	1 +#define cpu_has_mips_r2_exec_hazard 0  #endif /* __ASM_MACH_LOONGSON64_CPU_FEATURE_OVERRIDES_H */ diff --git a/arch/mips/include/asm/mipsregs.h b/arch/mips/include/asm/mipsregs.h index 0d5a30988697..796fe47cfd17 100644 --- a/arch/mips/include/asm/mipsregs.h +++ b/arch/mips/include/asm/mipsregs.h @@ -1101,9 +1101,12 @@  /*   * Bits 22:20 of the FPU Status Register will be read as 0,   * and should be written as zero. + * MAC2008 was removed in Release 5 so we still treat it as + * reserved.   */  #define FPU_CSR_RSVD	(_ULCAST_(7) << 20) +#define FPU_CSR_MAC2008	(_ULCAST_(1) << 20)  #define FPU_CSR_ABS2008	(_ULCAST_(1) << 19)  #define FPU_CSR_NAN2008	(_ULCAST_(1) << 18) diff --git a/arch/mips/include/asm/pci/bridge.h b/arch/mips/include/asm/pci/bridge.h index 3bc630ff9ad4..9c476a0400e0 100644 --- a/arch/mips/include/asm/pci/bridge.h +++ b/arch/mips/include/asm/pci/bridge.h @@ -806,7 +806,8 @@ struct bridge_controller {  	unsigned long		baddr;  	unsigned long		intr_addr;  	struct irq_domain	*domain; -	unsigned int		pci_int[8]; +	unsigned int		pci_int[8][2]; +	unsigned int		int_mapping[8][2];  	u32			ioc3_sid[8];  	nasid_t			nasid;  }; diff --git a/arch/mips/include/asm/serial.h b/arch/mips/include/asm/serial.h deleted file mode 100644 index 2777148dbfc5..000000000000 --- a/arch/mips/include/asm/serial.h +++ /dev/null @@ -1,18 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0-or-later */ -/* - * Copyright (C) 2017 MIPS Tech, LLC - */ -#ifndef __ASM__SERIAL_H -#define __ASM__SERIAL_H - -#ifdef CONFIG_MIPS_GENERIC -/* - * Generic kernels cannot know a correct value for all platforms at - * compile time. Set it to 0 to prevent 8250_early using it - */ -#define BASE_BAUD 0 -#else -#include <asm-generic/serial.h> -#endif - -#endif /* __ASM__SERIAL_H */ diff --git a/arch/mips/include/asm/sn/arch.h b/arch/mips/include/asm/sn/arch.h index f7d3273d9599..9a9682543e89 100644 --- a/arch/mips/include/asm/sn/arch.h +++ b/arch/mips/include/asm/sn/arch.h @@ -25,7 +25,4 @@  #define INVALID_MODULE		(moduleid_t)-1  #define INVALID_PARTID		(partid_t)-1 -extern nasid_t get_nasid(void); -extern int get_cpu_slice(cpuid_t); -  #endif /* _ASM_SN_ARCH_H */ diff --git a/arch/mips/include/asm/sn/hub.h b/arch/mips/include/asm/sn/hub.h deleted file mode 100644 index 45878fbefbae..000000000000 --- a/arch/mips/include/asm/sn/hub.h +++ /dev/null @@ -1,17 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0 */ -#ifndef __ASM_SN_HUB_H -#define __ASM_SN_HUB_H - -#include <linux/types.h> -#include <linux/cpumask.h> -#include <asm/sn/types.h> -#include <asm/sn/io.h> -#include <asm/sn/klkernvars.h> -#include <asm/xtalk/xtalk.h> - -/* ip27-hubio.c */ -extern unsigned long hub_pio_map(nasid_t nasid, xwidgetnum_t widget, -			  unsigned long xtalk_addr, size_t size); -extern void hub_pio_init(nasid_t nasid); - -#endif /* __ASM_SN_HUB_H */ diff --git a/arch/mips/include/asm/sn/intr.h b/arch/mips/include/asm/sn/intr.h index fc1348193957..3d6954d370dc 100644 --- a/arch/mips/include/asm/sn/intr.h +++ b/arch/mips/include/asm/sn/intr.h @@ -8,15 +8,6 @@  #ifndef __ASM_SN_INTR_H  #define __ASM_SN_INTR_H -/* Number of interrupt levels associated with each interrupt register. */ -#define N_INTPEND_BITS		64 - -#define INT_PEND0_BASELVL	0 -#define INT_PEND1_BASELVL	64 - -#define N_INTPENDJUNK_BITS	8 -#define INTPENDJUNK_CLRBIT	0x80 -  /*   * Macros to manipulate the interrupt register on the calling hub chip.   */ @@ -84,14 +75,6 @@ do {								\  #define CPU_RESCHED_B_IRQ	 8  #define CPU_CALL_A_IRQ		 9  #define CPU_CALL_B_IRQ		10 -#define MSC_MESG_INTR		11 -#define BASE_PCI_IRQ		12 - -/* - * INT_PEND0 again, bits determined by hardware / hardcoded: - */ -#define SDISK_INTR		63	/* SABLE name */ -#define IP_PEND0_6_63		63	/* What is this bit? */  /*   * INT_PEND1 hard-coded bits: diff --git a/arch/mips/include/asm/sn/ioc3.h b/arch/mips/include/asm/sn/ioc3.h index 78ef760ddde4..2c09c17cadcd 100644 --- a/arch/mips/include/asm/sn/ioc3.h +++ b/arch/mips/include/asm/sn/ioc3.h @@ -21,50 +21,50 @@ struct ioc3_serialregs {  /* SUPERIO uart register map */  struct ioc3_uartregs { +	u8	iu_lcr;  	union { -		u8	iu_rbr;	/* read only, DLAB == 0 */ -		u8	iu_thr;	/* write only, DLAB == 0 */ -		u8	iu_dll;	/* DLAB == 1 */ +		u8	iu_iir;	/* read only */ +		u8	iu_fcr;	/* write only */  	};  	union {  		u8	iu_ier;	/* DLAB == 0 */  		u8	iu_dlm;	/* DLAB == 1 */  	};  	union { -		u8	iu_iir;	/* read only */ -		u8	iu_fcr;	/* write only */ +		u8	iu_rbr;	/* read only, DLAB == 0 */ +		u8	iu_thr;	/* write only, DLAB == 0 */ +		u8	iu_dll;	/* DLAB == 1 */  	}; -	u8	iu_lcr; -	u8	iu_mcr; -	u8	iu_lsr; -	u8	iu_msr;  	u8	iu_scr; +	u8	iu_msr; +	u8	iu_lsr; +	u8	iu_mcr;  };  struct ioc3_sioregs {  	u8	fill[0x141];	/* starts at 0x141 */ -	u8	uartc;  	u8	kbdcg; +	u8	uartc; -	u8	fill0[0x150 - 0x142 - 1]; +	u8	fill0[0x151 - 0x142 - 1]; -	u8	pp_data; -	u8	pp_dsr;  	u8	pp_dcr; +	u8	pp_dsr; +	u8	pp_data; -	u8	fill1[0x158 - 0x152 - 1]; +	u8	fill1[0x159 - 0x153 - 1]; -	u8	pp_fifa; -	u8	pp_cfgb;  	u8	pp_ecr; +	u8	pp_cfgb; +	u8	pp_fifa; -	u8	fill2[0x168 - 0x15a - 1]; +	u8	fill2[0x16a - 0x15b - 1]; -	u8	rtcad;  	u8	rtcdat; +	u8	rtcad; -	u8	fill3[0x170 - 0x169 - 1]; +	u8	fill3[0x170 - 0x16b - 1];  	struct ioc3_uartregs	uartb;	/* 0x20170  */  	struct ioc3_uartregs	uarta;	/* 0x20178  */ @@ -598,5 +598,9 @@ struct ioc3_etxd {  #define	IOC3_SUBSYS_IP30_SYSBOARD	0xc304  #define	IOC3_SUBSYS_MENET		0xc305  #define	IOC3_SUBSYS_MENET4		0xc306 +#define	IOC3_SUBSYS_IO7			0xc307 +#define	IOC3_SUBSYS_IO8			0xc308 +#define	IOC3_SUBSYS_IO9			0xc309 +#define	IOC3_SUBSYS_IP34_SYSBOARD	0xc30A  #endif /* MIPS_SN_IOC3_H */ diff --git a/arch/mips/include/asm/sn/klconfig.h b/arch/mips/include/asm/sn/klconfig.h index 467c313d5767..117f85e4bef5 100644 --- a/arch/mips/include/asm/sn/klconfig.h +++ b/arch/mips/include/asm/sn/klconfig.h @@ -889,10 +889,6 @@ typedef union {  extern lboard_t *find_lboard(lboard_t *start, unsigned char type);  extern klinfo_t *find_component(lboard_t *brd, klinfo_t *kli, unsigned char type);  extern klinfo_t *find_first_component(lboard_t *brd, unsigned char type); -extern klcpu_t *nasid_slice_to_cpuinfo(nasid_t, int);  extern lboard_t *find_lboard_class(lboard_t *start, unsigned char brd_class); - -extern klcpu_t *sn_get_cpuinfo(cpuid_t cpu); -  #endif /* _ASM_SN_KLCONFIG_H */ diff --git a/arch/mips/include/asm/sn/kldir.h b/arch/mips/include/asm/sn/kldir.h index bfb3aec94539..245f59bf3845 100644 --- a/arch/mips/include/asm/sn/kldir.h +++ b/arch/mips/include/asm/sn/kldir.h @@ -1,201 +1,16 @@ -/* - * This file is subject to the terms and conditions of the GNU General Public - * License.  See the file "COPYING" in the main directory of this archive - * for more details. - * - * Derived from IRIX <sys/SN/kldir.h>, revision 1.21. - * - * Copyright (C) 1992 - 1997, 1999, 2000 Silicon Graphics, Inc. - * Copyright (C) 1999, 2000 by Ralf Baechle - */ +/* SPDX-License-Identifier: GPL-2.0 */ +  #ifndef _ASM_SN_KLDIR_H  #define _ASM_SN_KLDIR_H - -/* - * The kldir memory area resides at a fixed place in each node's memory and - * provides pointers to most other IP27 memory areas.  This allows us to - * resize and/or relocate memory areas at a later time without breaking all - * firmware and kernels that use them.	Indices in the array are - * permanently dedicated to areas listed below.	 Some memory areas (marked - * below) reside at a permanently fixed location, but are included in the - * directory for completeness. - */ -  #define KLDIR_MAGIC		0x434d5f53505f5357 -/* - * The upper portion of the memory map applies during boot - * only and is overwritten by IRIX/SYMMON. - * - *				      MEMORY MAP PER NODE - * - * 0x2000000 (32M)	   +-----------------------------------------+ - *			   |	  IO6 BUFFERS FOR FLASH ENET IOC3    | - * 0x1F80000 (31.5M)	   +-----------------------------------------+ - *			   |	  IO6 TEXT/DATA/BSS/stack	     | - * 0x1C00000 (30M)	   +-----------------------------------------+ - *			   |	  IO6 PROM DEBUG TEXT/DATA/BSS/stack | - * 0x0800000 (28M)	   +-----------------------------------------+ - *			   |	  IP27 PROM TEXT/DATA/BSS/stack	     | - * 0x1B00000 (27M)	   +-----------------------------------------+ - *			   |	  IP27 CFG			     | - * 0x1A00000 (26M)	   +-----------------------------------------+ - *			   |	  Graphics PROM			     | - * 0x1800000 (24M)	   +-----------------------------------------+ - *			   |	  3rd Party PROM drivers	     | - * 0x1600000 (22M)	   +-----------------------------------------+ - *			   |					     | - *			   |	  Free				     | - *			   |					     | - *			   +-----------------------------------------+ - *			   |	  UNIX DEBUG Version		     | - * 0x190000 (2M--)	   +-----------------------------------------+ - *			   |	  SYMMON			     | - *			   |	  (For UNIX Debug only)		     | - * 0x34000 (208K)	   +-----------------------------------------+ - *			   |	  SYMMON STACK [NUM_CPU_PER_NODE]    | - *			   |	  (For UNIX Debug only)		     | - * 0x25000 (148K)	   +-----------------------------------------+ - *			   |	  KLCONFIG - II (temp)		     | - *			   |					     | - *			   |	----------------------------	     | - *			   |					     | - *			   |	  UNIX NON-DEBUG Version	     | - * 0x19000 (100K)	   +-----------------------------------------+ - * - * - * The lower portion of the memory map contains information that is - * permanent and is used by the IP27PROM, IO6PROM and IRIX. - * - * 0x19000 (100K)	   +-----------------------------------------+ - *			   |					     | - *			   |	  PI Error Spools (32K)		     | - *			   |					     | - * 0x12000 (72K)	   +-----------------------------------------+ - *			   |	  Unused			     | - * 0x11c00 (71K)	   +-----------------------------------------+ - *			   |	  CPU 1 NMI Eframe area		     | - * 0x11a00 (70.5K)	   +-----------------------------------------+ - *			   |	  CPU 0 NMI Eframe area		     | - * 0x11800 (70K)	   +-----------------------------------------+ - *			   |	  CPU 1 NMI Register save area	     | - * 0x11600 (69.5K)	   +-----------------------------------------+ - *			   |	  CPU 0 NMI Register save area	     | - * 0x11400 (69K)	   +-----------------------------------------+ - *			   |	  GDA (1k)			     | - * 0x11000 (68K)	   +-----------------------------------------+ - *			   |	  Early cache Exception stack	     | - *			   |		 and/or			     | - *			   |	  kernel/io6prom nmi registers	     | - * 0x10800  (66k)	   +-----------------------------------------+ - *			   |	  cache error eframe		     | - * 0x10400 (65K)	   +-----------------------------------------+ - *			   |	  Exception Handlers (UALIAS copy)   | - * 0x10000 (64K)	   +-----------------------------------------+ - *			   |					     | - *			   |					     | - *			   |	  KLCONFIG - I (permanent) (48K)     | - *			   |					     | - *			   |					     | - *			   |					     | - * 0x4000 (16K)		   +-----------------------------------------+ - *			   |	  NMI Handler (Protected Page)	     | - * 0x3000 (12K)		   +-----------------------------------------+ - *			   |	  ARCS PVECTORS (master node only)   | - * 0x2c00 (11K)		   +-----------------------------------------+ - *			   |	  ARCS TVECTORS (master node only)   | - * 0x2800 (10K)		   +-----------------------------------------+ - *			   |	  LAUNCH [NUM_CPU]		     | - * 0x2400 (9K)		   +-----------------------------------------+ - *			   |	  Low memory directory (KLDIR)	     | - * 0x2000 (8K)		   +-----------------------------------------+ - *			   |	  ARCS SPB (1K)			     | - * 0x1000 (4K)		   +-----------------------------------------+ - *			   |	  Early cache Exception stack	     | - *			   |		 and/or			     | - *			   |	  kernel/io6prom nmi registers	     | - * 0x800  (2k)		   +-----------------------------------------+ - *			   |	  cache error eframe		     | - * 0x400 (1K)		   +-----------------------------------------+ - *			   |	  Exception Handlers		     | - * 0x0	 (0K)		   +-----------------------------------------+ - */ - -#ifdef __ASSEMBLY__  #define KLDIR_OFF_MAGIC			0x00  #define KLDIR_OFF_OFFSET		0x08  #define KLDIR_OFF_POINTER		0x10  #define KLDIR_OFF_SIZE			0x18  #define KLDIR_OFF_COUNT			0x20  #define KLDIR_OFF_STRIDE		0x28 -#endif /* __ASSEMBLY__ */ - -/* - * This is defined here because IP27_SYMMON_STK_SIZE must be at least what - * we define here.  Since it's set up in the prom.  We can't redefine it later - * and expect more space to be allocated.  The way to find out the true size - * of the symmon stacks is to divide SYMMON_STK_SIZE by SYMMON_STK_STRIDE - * for a particular node. - */ -#define SYMMON_STACK_SIZE		0x8000 - -#if defined(PROM) - -/* - * These defines are prom version dependent.  No code other than the IP27 - * prom should attempt to use these values. - */ -#define IP27_LAUNCH_OFFSET		0x2400 -#define IP27_LAUNCH_SIZE		0x400 -#define IP27_LAUNCH_COUNT		2 -#define IP27_LAUNCH_STRIDE		0x200 - -#define IP27_KLCONFIG_OFFSET		0x4000 -#define IP27_KLCONFIG_SIZE		0xc000 -#define IP27_KLCONFIG_COUNT		1 -#define IP27_KLCONFIG_STRIDE		0 - -#define IP27_NMI_OFFSET			0x3000 -#define IP27_NMI_SIZE			0x40 -#define IP27_NMI_COUNT			2 -#define IP27_NMI_STRIDE			0x40 - -#define IP27_PI_ERROR_OFFSET		0x12000 -#define IP27_PI_ERROR_SIZE		0x4000 -#define IP27_PI_ERROR_COUNT		1 -#define IP27_PI_ERROR_STRIDE		0 - -#define IP27_SYMMON_STK_OFFSET		0x25000 -#define IP27_SYMMON_STK_SIZE		0xe000 -#define IP27_SYMMON_STK_COUNT		2 -/* IP27_SYMMON_STK_STRIDE must be >= SYMMON_STACK_SIZE */ -#define IP27_SYMMON_STK_STRIDE		0x7000 - -#define IP27_FREEMEM_OFFSET		0x19000 -#define IP27_FREEMEM_SIZE		-1 -#define IP27_FREEMEM_COUNT		1 -#define IP27_FREEMEM_STRIDE		0 - -#endif /* PROM */ -/* - * There will be only one of these in a partition so the IO6 must set it up. - */ -#define IO6_GDA_OFFSET			0x11000 -#define IO6_GDA_SIZE			0x400 -#define IO6_GDA_COUNT			1 -#define IO6_GDA_STRIDE			0 - -/* - * save area of kernel nmi regs in the prom format - */ -#define IP27_NMI_KREGS_OFFSET		0x11400 -#define IP27_NMI_KREGS_CPU_SIZE		0x200 -/* - * save area of kernel nmi regs in eframe format - */ -#define IP27_NMI_EFRAME_OFFSET		0x11800 -#define IP27_NMI_EFRAME_SIZE		0x200  #define KLDIR_ENT_SIZE			0x40  #define KLDIR_MAX_ENTRIES		(0x400 / 0x40) @@ -214,4 +29,8 @@ typedef struct kldir_ent_s {  } kldir_ent_t;  #endif /* !__ASSEMBLY__ */ +#ifdef CONFIG_SGI_IP27 +#include <asm/sn/sn0/kldir.h> +#endif +  #endif /* _ASM_SN_KLDIR_H */ diff --git a/arch/mips/include/asm/sn/sn0/hub.h b/arch/mips/include/asm/sn/sn0/hub.h index d78dd76d5dcf..c84adde36d41 100644 --- a/arch/mips/include/asm/sn/sn0/hub.h +++ b/arch/mips/include/asm/sn/sn0/hub.h @@ -37,4 +37,26 @@  #define UATTR_MSPEC	2  #define UATTR_UNCAC	3 +#ifdef __ASSEMBLY__ +/* + * Returns the local nasid into res. + */ +	.macro GET_NASID_ASM res +	dli	\res, LOCAL_HUB_ADDR(NI_STATUS_REV_ID) +	ld	\res, (\res) +	and	\res, NSRI_NODEID_MASK +	dsrl	\res, NSRI_NODEID_SHFT +	.endm +#else + +/* + * get_nasid() returns the physical node id number of the caller. + */ +static inline nasid_t get_nasid(void) +{ +	return (nasid_t)((LOCAL_HUB_L(NI_STATUS_REV_ID) & NSRI_NODEID_MASK) +			 >> NSRI_NODEID_SHFT); +} +#endif +  #endif /* _ASM_SN_SN0_HUB_H */ diff --git a/arch/mips/include/asm/sn/sn0/hubni.h b/arch/mips/include/asm/sn/sn0/hubni.h index b73c4bee65f2..b8253142cb83 100644 --- a/arch/mips/include/asm/sn/sn0/hubni.h +++ b/arch/mips/include/asm/sn/sn0/hubni.h @@ -250,6 +250,14 @@ typedef union	hubni_port_error_u {  #define NI_LLP_CB_MAX		0xff  #define NI_LLP_SN_MAX		0xff +static inline int get_region_shift(void) +{ +	if (LOCAL_HUB_L(NI_STATUS_REV_ID) & NSRI_REGIONSIZE_MASK) +		return NASID_TO_FINEREG_SHFT; + +	return NASID_TO_COARSEREG_SHFT; +} +  #endif /* !__ASSEMBLY__ */  #endif /* _ASM_SGI_SN0_HUBNI_H */ diff --git a/arch/mips/include/asm/sn/sn0/ip27.h b/arch/mips/include/asm/sn/sn0/ip27.h deleted file mode 100644 index 3b5efeefcc3f..000000000000 --- a/arch/mips/include/asm/sn/sn0/ip27.h +++ /dev/null @@ -1,85 +0,0 @@ -/* - * This file is subject to the terms and conditions of the GNU General Public - * License.  See the file "COPYING" in the main directory of this archive - * for more details. - * - * Derived from IRIX <sys/SN/SN0/IP27.h>. - * - * Copyright (C) 1992 - 1997, 1999 Silicon Graphics, Inc. - * Copyright (C) 1999, 2006 by Ralf Baechle - */ -#ifndef _ASM_SN_SN0_IP27_H -#define _ASM_SN_SN0_IP27_H - -#include <asm/mipsregs.h> - -/* - * Simple definitions for the masks which remove SW bits from pte. - */ - -#define TLBLO_HWBITSHIFT	0		/* Shift value, for masking */ - -#ifndef __ASSEMBLY__ - -#define CAUSE_BERRINTR		IE_IRQ5 - -#define ECCF_CACHE_ERR	0 -#define ECCF_TAGLO	1 -#define ECCF_ECC	2 -#define ECCF_ERROREPC	3 -#define ECCF_PADDR	4 -#define ECCF_SIZE	(5 * sizeof(long)) - -#endif /* !__ASSEMBLY__ */ - -#ifdef __ASSEMBLY__ - -/* - * KL_GET_CPUNUM (similar to EV_GET_SPNUM for EVEREST platform) reads - * the processor number of the calling processor.  The proc parameters - * must be a register. - */ -#define KL_GET_CPUNUM(proc)				\ -	dli	proc, LOCAL_HUB(0);			\ -	ld	proc, PI_CPU_NUM(proc) - -#endif /* __ASSEMBLY__ */ - -/* - * R10000 status register interrupt bit mask usage for IP27. - */ -#define SRB_SWTIMO	IE_SW0		/* 0x0100 */ -#define SRB_NET		IE_SW1		/* 0x0200 */ -#define SRB_DEV0	IE_IRQ0		/* 0x0400 */ -#define SRB_DEV1	IE_IRQ1		/* 0x0800 */ -#define SRB_TIMOCLK	IE_IRQ2		/* 0x1000 */ -#define SRB_PROFCLK	IE_IRQ3		/* 0x2000 */ -#define SRB_ERR		IE_IRQ4		/* 0x4000 */ -#define SRB_SCHEDCLK	IE_IRQ5		/* 0x8000 */ - -#define SR_IBIT_HI	SRB_DEV0 -#define SR_IBIT_PROF	SRB_PROFCLK - -#define SRB_SWTIMO_IDX		0 -#define SRB_NET_IDX		1 -#define SRB_DEV0_IDX		2 -#define SRB_DEV1_IDX		3 -#define SRB_TIMOCLK_IDX		4 -#define SRB_PROFCLK_IDX		5 -#define SRB_ERR_IDX		6 -#define SRB_SCHEDCLK_IDX	7 - -#define NUM_CAUSE_INTRS		8 - -#define SCACHE_LINESIZE 128 -#define SCACHE_LINEMASK (SCACHE_LINESIZE - 1) - -#include <asm/sn/addrs.h> - -#define LED_CYCLE_MASK	0x0f -#define LED_CYCLE_SHFT	4 - -#define SEND_NMI(_nasid, _slice)	\ -	  REMOTE_HUB_S((_nasid),  (PI_NMI_A + ((_slice) * PI_NMI_OFFSET)), 1) - -#endif /* _ASM_SN_SN0_IP27_H */ diff --git a/arch/mips/include/asm/sn/sn0/kldir.h b/arch/mips/include/asm/sn/sn0/kldir.h new file mode 100644 index 000000000000..1b10af6cbd5e --- /dev/null +++ b/arch/mips/include/asm/sn/sn0/kldir.h @@ -0,0 +1,186 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* + * Derived from IRIX <sys/SN/kldir.h>, revision 1.21. + * + * Copyright (C) 1992 - 1997, 1999, 2000 Silicon Graphics, Inc. + * Copyright (C) 1999, 2000 by Ralf Baechle + */ +#ifndef _ASM_SN_SN0_KLDIR_H +#define _ASM_SN_SN0_KLDIR_H + + +/* + * The kldir memory area resides at a fixed place in each node's memory and + * provides pointers to most other IP27 memory areas.  This allows us to + * resize and/or relocate memory areas at a later time without breaking all + * firmware and kernels that use them.	Indices in the array are + * permanently dedicated to areas listed below.	 Some memory areas (marked + * below) reside at a permanently fixed location, but are included in the + * directory for completeness. + */ + +/* + * The upper portion of the memory map applies during boot + * only and is overwritten by IRIX/SYMMON. + * + *				      MEMORY MAP PER NODE + * + * 0x2000000 (32M)	   +-----------------------------------------+ + *			   |	  IO6 BUFFERS FOR FLASH ENET IOC3    | + * 0x1F80000 (31.5M)	   +-----------------------------------------+ + *			   |	  IO6 TEXT/DATA/BSS/stack	     | + * 0x1C00000 (30M)	   +-----------------------------------------+ + *			   |	  IO6 PROM DEBUG TEXT/DATA/BSS/stack | + * 0x0800000 (28M)	   +-----------------------------------------+ + *			   |	  IP27 PROM TEXT/DATA/BSS/stack	     | + * 0x1B00000 (27M)	   +-----------------------------------------+ + *			   |	  IP27 CFG			     | + * 0x1A00000 (26M)	   +-----------------------------------------+ + *			   |	  Graphics PROM			     | + * 0x1800000 (24M)	   +-----------------------------------------+ + *			   |	  3rd Party PROM drivers	     | + * 0x1600000 (22M)	   +-----------------------------------------+ + *			   |					     | + *			   |	  Free				     | + *			   |					     | + *			   +-----------------------------------------+ + *			   |	  UNIX DEBUG Version		     | + * 0x190000 (2M--)	   +-----------------------------------------+ + *			   |	  SYMMON			     | + *			   |	  (For UNIX Debug only)		     | + * 0x34000 (208K)	   +-----------------------------------------+ + *			   |	  SYMMON STACK [NUM_CPU_PER_NODE]    | + *			   |	  (For UNIX Debug only)		     | + * 0x25000 (148K)	   +-----------------------------------------+ + *			   |	  KLCONFIG - II (temp)		     | + *			   |					     | + *			   |	----------------------------	     | + *			   |					     | + *			   |	  UNIX NON-DEBUG Version	     | + * 0x19000 (100K)	   +-----------------------------------------+ + * + * + * The lower portion of the memory map contains information that is + * permanent and is used by the IP27PROM, IO6PROM and IRIX. + * + * 0x19000 (100K)	   +-----------------------------------------+ + *			   |					     | + *			   |	  PI Error Spools (32K)		     | + *			   |					     | + * 0x12000 (72K)	   +-----------------------------------------+ + *			   |	  Unused			     | + * 0x11c00 (71K)	   +-----------------------------------------+ + *			   |	  CPU 1 NMI Eframe area		     | + * 0x11a00 (70.5K)	   +-----------------------------------------+ + *			   |	  CPU 0 NMI Eframe area		     | + * 0x11800 (70K)	   +-----------------------------------------+ + *			   |	  CPU 1 NMI Register save area	     | + * 0x11600 (69.5K)	   +-----------------------------------------+ + *			   |	  CPU 0 NMI Register save area	     | + * 0x11400 (69K)	   +-----------------------------------------+ + *			   |	  GDA (1k)			     | + * 0x11000 (68K)	   +-----------------------------------------+ + *			   |	  Early cache Exception stack	     | + *			   |		 and/or			     | + *			   |	  kernel/io6prom nmi registers	     | + * 0x10800  (66k)	   +-----------------------------------------+ + *			   |	  cache error eframe		     | + * 0x10400 (65K)	   +-----------------------------------------+ + *			   |	  Exception Handlers (UALIAS copy)   | + * 0x10000 (64K)	   +-----------------------------------------+ + *			   |					     | + *			   |					     | + *			   |	  KLCONFIG - I (permanent) (48K)     | + *			   |					     | + *			   |					     | + *			   |					     | + * 0x4000 (16K)		   +-----------------------------------------+ + *			   |	  NMI Handler (Protected Page)	     | + * 0x3000 (12K)		   +-----------------------------------------+ + *			   |	  ARCS PVECTORS (master node only)   | + * 0x2c00 (11K)		   +-----------------------------------------+ + *			   |	  ARCS TVECTORS (master node only)   | + * 0x2800 (10K)		   +-----------------------------------------+ + *			   |	  LAUNCH [NUM_CPU]		     | + * 0x2400 (9K)		   +-----------------------------------------+ + *			   |	  Low memory directory (KLDIR)	     | + * 0x2000 (8K)		   +-----------------------------------------+ + *			   |	  ARCS SPB (1K)			     | + * 0x1000 (4K)		   +-----------------------------------------+ + *			   |	  Early cache Exception stack	     | + *			   |		 and/or			     | + *			   |	  kernel/io6prom nmi registers	     | + * 0x800  (2k)		   +-----------------------------------------+ + *			   |	  cache error eframe		     | + * 0x400 (1K)		   +-----------------------------------------+ + *			   |	  Exception Handlers		     | + * 0x0	 (0K)		   +-----------------------------------------+ + */ + +/* + * This is defined here because IP27_SYMMON_STK_SIZE must be at least what + * we define here.  Since it's set up in the prom.  We can't redefine it later + * and expect more space to be allocated.  The way to find out the true size + * of the symmon stacks is to divide SYMMON_STK_SIZE by SYMMON_STK_STRIDE + * for a particular node. + */ +#define SYMMON_STACK_SIZE		0x8000 + +#if defined(PROM) + +/* + * These defines are prom version dependent.  No code other than the IP27 + * prom should attempt to use these values. + */ +#define IP27_LAUNCH_OFFSET		0x2400 +#define IP27_LAUNCH_SIZE		0x400 +#define IP27_LAUNCH_COUNT		2 +#define IP27_LAUNCH_STRIDE		0x200 + +#define IP27_KLCONFIG_OFFSET		0x4000 +#define IP27_KLCONFIG_SIZE		0xc000 +#define IP27_KLCONFIG_COUNT		1 +#define IP27_KLCONFIG_STRIDE		0 + +#define IP27_NMI_OFFSET			0x3000 +#define IP27_NMI_SIZE			0x40 +#define IP27_NMI_COUNT			2 +#define IP27_NMI_STRIDE			0x40 + +#define IP27_PI_ERROR_OFFSET		0x12000 +#define IP27_PI_ERROR_SIZE		0x4000 +#define IP27_PI_ERROR_COUNT		1 +#define IP27_PI_ERROR_STRIDE		0 + +#define IP27_SYMMON_STK_OFFSET		0x25000 +#define IP27_SYMMON_STK_SIZE		0xe000 +#define IP27_SYMMON_STK_COUNT		2 +/* IP27_SYMMON_STK_STRIDE must be >= SYMMON_STACK_SIZE */ +#define IP27_SYMMON_STK_STRIDE		0x7000 + +#define IP27_FREEMEM_OFFSET		0x19000 +#define IP27_FREEMEM_SIZE		-1 +#define IP27_FREEMEM_COUNT		1 +#define IP27_FREEMEM_STRIDE		0 + +#endif /* PROM */ +/* + * There will be only one of these in a partition so the IO6 must set it up. + */ +#define IO6_GDA_OFFSET			0x11000 +#define IO6_GDA_SIZE			0x400 +#define IO6_GDA_COUNT			1 +#define IO6_GDA_STRIDE			0 + +/* + * save area of kernel nmi regs in the prom format + */ +#define IP27_NMI_KREGS_OFFSET		0x11400 +#define IP27_NMI_KREGS_CPU_SIZE		0x200 +/* + * save area of kernel nmi regs in eframe format + */ +#define IP27_NMI_EFRAME_OFFSET		0x11800 +#define IP27_NMI_EFRAME_SIZE		0x200 + +#endif /* _ASM_SN_SN0_KLDIR_H */ diff --git a/arch/mips/include/asm/sn/sn_private.h b/arch/mips/include/asm/sn/sn_private.h deleted file mode 100644 index 63a2c30d81c6..000000000000 --- a/arch/mips/include/asm/sn/sn_private.h +++ /dev/null @@ -1,19 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0 */ -#ifndef __ASM_SN_SN_PRIVATE_H -#define __ASM_SN_SN_PRIVATE_H - -#include <asm/sn/types.h> - -extern nasid_t master_nasid; - -extern void cpu_node_probe(void); -extern void hub_rtc_init(nasid_t nasid); -extern void cpu_time_init(void); -extern void per_cpu_init(void); -extern void install_cpu_nmi_handler(int slice); -extern void install_ipi(void); -extern void setup_replication_mask(void); -extern void replicate_kernel_text(void); -extern unsigned long node_getfirstfree(nasid_t nasid); - -#endif /* __ASM_SN_SN_PRIVATE_H */ diff --git a/arch/mips/include/asm/sn/types.h b/arch/mips/include/asm/sn/types.h index 203c927e84d1..451ba1ee41ad 100644 --- a/arch/mips/include/asm/sn/types.h +++ b/arch/mips/include/asm/sn/types.h @@ -11,6 +11,8 @@  #include <linux/types.h> +#ifndef __ASSEMBLY__ +  typedef unsigned long	cpuid_t;  typedef signed short	nasid_t;	/* node id in numa-as-id space */  typedef signed char	partid_t;	/* partition ID type */ @@ -18,4 +20,6 @@ typedef signed short	moduleid_t;	/* user-visible module number type */  typedef dev_t		vertex_hdl_t;	/* hardware graph vertex handle */ +#endif +  #endif /* _ASM_SN_TYPES_H */ diff --git a/arch/mips/include/asm/thread_info.h b/arch/mips/include/asm/thread_info.h index 4993db40482c..ee26f9a4575d 100644 --- a/arch/mips/include/asm/thread_info.h +++ b/arch/mips/include/asm/thread_info.h @@ -49,8 +49,26 @@ struct thread_info {  	.addr_limit	= KERNEL_DS,		\  } -/* How to get the thread information struct from C.  */ +/* + * A pointer to the struct thread_info for the currently executing thread is + * held in register $28/$gp. + * + * We declare __current_thread_info as a global register variable rather than a + * local register variable within current_thread_info() because clang doesn't + * support explicit local register variables. + * + * When building the VDSO we take care not to declare the global register + * variable because this causes GCC to not preserve the value of $28/$gp in + * functions that change its value (which is common in the PIC VDSO when + * accessing the GOT). Since the VDSO shouldn't be accessing + * __current_thread_info anyway we declare it extern in order to cause a link + * failure if it's referenced. + */ +#ifdef __VDSO__ +extern struct thread_info *__current_thread_info; +#else  register struct thread_info *__current_thread_info __asm__("$28"); +#endif  static inline struct thread_info *current_thread_info(void)  { diff --git a/arch/mips/include/asm/vdso/gettimeofday.h b/arch/mips/include/asm/vdso/gettimeofday.h index b08825531e9f..a58687e26c5d 100644 --- a/arch/mips/include/asm/vdso/gettimeofday.h +++ b/arch/mips/include/asm/vdso/gettimeofday.h @@ -26,8 +26,6 @@  #define __VDSO_USE_SYSCALL		ULLONG_MAX -#ifdef CONFIG_MIPS_CLOCK_VSYSCALL -  static __always_inline long gettimeofday_fallback(  				struct __kernel_old_timeval *_tv,  				struct timezone *_tz) @@ -48,17 +46,6 @@ static __always_inline long gettimeofday_fallback(  	return error ? -ret : ret;  } -#else - -static __always_inline long gettimeofday_fallback( -				struct __kernel_old_timeval *_tv, -				struct timezone *_tz) -{ -	return -1; -} - -#endif -  static __always_inline long clock_gettime_fallback(  					clockid_t _clkid,  					struct __kernel_timespec *_ts) @@ -109,8 +96,6 @@ static __always_inline int clock_getres_fallback(  #if _MIPS_SIM != _MIPS_SIM_ABI64 -#define VDSO_HAS_32BIT_FALLBACK	1 -  static __always_inline long clock_gettime32_fallback(  					clockid_t _clkid,  					struct old_timespec32 *_ts) diff --git a/arch/mips/include/asm/vmalloc.h b/arch/mips/include/asm/vmalloc.h new file mode 100644 index 000000000000..25dc09b25eaf --- /dev/null +++ b/arch/mips/include/asm/vmalloc.h @@ -0,0 +1,4 @@ +#ifndef _ASM_MIPS_VMALLOC_H +#define _ASM_MIPS_VMALLOC_H + +#endif /* _ASM_MIPS_VMALLOC_H */  |