Commit 2d27cfd3 authored by Benjamin Herrenschmidt's avatar Benjamin Herrenschmidt
Browse files

powerpc: Remaining 64-bit Book3E support



This contains all the bits that didn't fit in previous patches :-) This
includes the actual exception handlers assembly, the changes to the
kernel entry, other misc bits and wiring it all up in Kconfig.

Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
parent 32a74949
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -472,7 +472,7 @@ config PPC_16K_PAGES
	bool "16k page size" if 44x

config PPC_64K_PAGES
	bool "64k page size" if 44x || PPC_STD_MMU_64
	bool "64k page size" if 44x || PPC_STD_MMU_64 || PPC_BOOK3E_64
	select PPC_HAS_HASH_64K if PPC_STD_MMU_64

config PPC_256K_PAGES
+5 −0
Original line number Diff line number Diff line
@@ -49,8 +49,13 @@ extern void iseries_handle_interrupts(void);
#define raw_irqs_disabled()		(local_get_flags() == 0)
#define raw_irqs_disabled_flags(flags)	((flags) == 0)

#ifdef CONFIG_PPC_BOOK3E
#define __hard_irq_enable()	__asm__ __volatile__("wrteei 1": : :"memory");
#define __hard_irq_disable()	__asm__ __volatile__("wrteei 0": : :"memory");
#else
#define __hard_irq_enable()	__mtmsrd(mfmsr() | MSR_EE, 1)
#define __hard_irq_disable()	__mtmsrd(mfmsr() & ~MSR_EE, 1)
#endif

#define  hard_irq_disable()			\
	do {					\
+1 −0
Original line number Diff line number Diff line
@@ -153,6 +153,7 @@ extern void arch_send_call_function_ipi(cpumask_t mask);
 * 64-bit but defining them all here doesn't harm
 */
extern void generic_secondary_smp_init(void);
extern void generic_secondary_thread_init(void);
extern unsigned long __secondary_hold_spinloop;
extern unsigned long __secondary_hold_acknowledge;
extern char __secondary_hold;
+5 −5
Original line number Diff line number Diff line
@@ -33,10 +33,10 @@ obj-y := cputable.o ptrace.o syscalls.o \
obj-y				+= vdso32/
obj-$(CONFIG_PPC64)		+= setup_64.o sys_ppc32.o \
				   signal_64.o ptrace32.o \
				   paca.o cpu_setup_ppc970.o \
				   cpu_setup_pa6t.o \
				   firmware.o nvram_64.o
				   paca.o nvram_64.o firmware.o
obj-$(CONFIG_PPC_BOOK3S_64)	+= cpu_setup_ppc970.o cpu_setup_pa6t.o
obj64-$(CONFIG_RELOCATABLE)	+= reloc_64.o
obj-$(CONFIG_PPC_BOOK3E_64)	+= exceptions-64e.o
obj-$(CONFIG_PPC64)		+= vdso64/
obj-$(CONFIG_ALTIVEC)		+= vecemu.o
obj-$(CONFIG_PPC_970_NAP)	+= idle_power4.o
@@ -63,8 +63,8 @@ obj-$(CONFIG_MODULES) += module.o module_$(CONFIG_WORD_SIZE).o
obj-$(CONFIG_44x)		+= cpu_setup_44x.o
obj-$(CONFIG_FSL_BOOKE)		+= cpu_setup_fsl_booke.o dbell.o

extra-$(CONFIG_PPC_STD_MMU)	:= head_32.o
extra-$(CONFIG_PPC64)		:= head_64.o
extra-y				:= head_$(CONFIG_WORD_SIZE).o
extra-$(CONFIG_PPC_BOOK3E_32)	:= head_new_booke.o
extra-$(CONFIG_40x)		:= head_40x.o
extra-$(CONFIG_44x)		:= head_44x.o
extra-$(CONFIG_FSL_BOOKE)	:= head_fsl_booke.o
+25 −2
Original line number Diff line number Diff line
@@ -93,7 +93,7 @@ extern void __restore_cpu_power7(void);
				 PPC_FEATURE_BOOKE)

static struct cpu_spec __initdata cpu_specs[] = {
#ifdef CONFIG_PPC64
#ifdef CONFIG_PPC_BOOK3S_64
	{	/* Power3 */
		.pvr_mask		= 0xffff0000,
		.pvr_value		= 0x00400000,
@@ -508,7 +508,30 @@ static struct cpu_spec __initdata cpu_specs[] = {
		.machine_check		= machine_check_generic,
		.platform		= "power4",
	}
#endif	/* CONFIG_PPC64 */
#endif	/* CONFIG_PPC_BOOK3S_64 */
#ifdef CONFIG_PPC_BOOK3E_64
	{	/* This is a default entry to get going, to be replaced by
		 * a real one at some stage
		 */
#define CPU_FTRS_BASE_BOOK3E	(CPU_FTR_USE_TB | \
	    CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_SMT | \
	    CPU_FTR_NODSISRALIGN | CPU_FTR_NOEXECUTE)
		.pvr_mask		= 0x00000000,
		.pvr_value		= 0x00000000,
		.cpu_name		= "Book3E",
		.cpu_features		= CPU_FTRS_BASE_BOOK3E,
		.cpu_user_features	= COMMON_USER_PPC64,
		.mmu_features		= MMU_FTR_TYPE_3E | MMU_FTR_USE_TLBILX |
					  MMU_FTR_USE_TLBIVAX_BCAST |
					  MMU_FTR_LOCK_BCAST_INVAL,
		.icache_bsize		= 64,
		.dcache_bsize		= 64,
		.num_pmcs		= 0,
		.machine_check		= machine_check_generic,
		.platform		= "power6",
	},
#endif

#ifdef CONFIG_PPC32
#if CLASSIC_PPC
	{	/* 601 */
Loading