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

Commit 15a3204d authored by Nicholas Piggin's avatar Nicholas Piggin Committed by Michael Ellerman
Browse files

powerpc/64s: Set assembler machine type to POWER4



Rather than override the machine type in .S code (which can hide wrong
or ambiguous code generation for the target), set the type to power4
for all assembly.

This also means we need to be careful not to build power4-only code
when we're not building for Book3S, such as the "power7" versions of
copyuser/page/memcpy.

Signed-off-by: default avatarNicholas Piggin <npiggin@gmail.com>
[mpe: Fix Book3E build, don't build the "power7" variants for non-Book3S]
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
parent d50614fa
Loading
Loading
Loading
Loading
+1 −0
Original line number Original line Diff line number Diff line
@@ -245,6 +245,7 @@ endif
cpu-as-$(CONFIG_4xx)		+= -Wa,-m405
cpu-as-$(CONFIG_4xx)		+= -Wa,-m405
cpu-as-$(CONFIG_ALTIVEC)	+= $(call as-option,-Wa$(comma)-maltivec)
cpu-as-$(CONFIG_ALTIVEC)	+= $(call as-option,-Wa$(comma)-maltivec)
cpu-as-$(CONFIG_E200)		+= -Wa,-me200
cpu-as-$(CONFIG_E200)		+= -Wa,-me200
cpu-as-$(CONFIG_PPC_BOOK3S_64)	+= -Wa,-mpower4


KBUILD_AFLAGS += $(cpu-as-y)
KBUILD_AFLAGS += $(cpu-as-y)
KBUILD_CFLAGS += $(cpu-as-y)
KBUILD_CFLAGS += $(cpu-as-y)
+4 −7
Original line number Original line Diff line number Diff line
@@ -439,14 +439,11 @@ END_FTR_SECTION_IFCLR(CPU_FTR_601)


/* The following stops all load and store data streams associated with stream
/* The following stops all load and store data streams associated with stream
 * ID (ie. streams created explicitly).  The embedded and server mnemonics for
 * ID (ie. streams created explicitly).  The embedded and server mnemonics for
 * dcbt are different so we use machine "power4" here explicitly.
 * dcbt are different so this must only be used for server.
 */
 */
#define DCBT_STOP_ALL_STREAM_IDS(scratch)	\
#define DCBT_BOOK3S_STOP_ALL_STREAM_IDS(scratch)	\
.machine push ;					\
.machine "power4" ;				\
       lis     scratch,0x60000000@h;			\
       lis     scratch,0x60000000@h;			\
       dcbt    0,scratch,0b01010;		\
       dcbt    0,scratch,0b01010
.machine pop


/*
/*
 * toreal/fromreal/tophys/tovirt macros. 32-bit BookE makes them
 * toreal/fromreal/tophys/tovirt macros. 32-bit BookE makes them
+1 −1
Original line number Original line Diff line number Diff line
@@ -545,7 +545,7 @@ _GLOBAL(_switch)
/* Cancel all explict user streams as they will have no use after context
/* Cancel all explict user streams as they will have no use after context
 * switch and will stop the HW from creating streams itself
 * switch and will stop the HW from creating streams itself
 */
 */
	DCBT_STOP_ALL_STREAM_IDS(r6)
	DCBT_BOOK3S_STOP_ALL_STREAM_IDS(r6)
#endif
#endif


	addi	r6,r4,-THREAD	/* Convert THREAD to 'current' */
	addi	r6,r4,-THREAD	/* Convert THREAD to 'current' */
+2 −8
Original line number Original line Diff line number Diff line
@@ -687,14 +687,11 @@ END_MMU_FTR_SECTION_IFCLR(MMU_FTR_TYPE_RADIX)


	bne	cr4,1f		/* returning to kernel */
	bne	cr4,1f		/* returning to kernel */


.machine	push
.machine	"power4"
	mtcrf	0x80,r9
	mtcrf	0x80,r9
	mtcrf	0x08,r9		/* MSR[PR] indication is in cr4 */
	mtcrf	0x08,r9		/* MSR[PR] indication is in cr4 */
	mtcrf	0x04,r9		/* MSR[RI] indication is in cr5 */
	mtcrf	0x04,r9		/* MSR[RI] indication is in cr5 */
	mtcrf	0x02,r9		/* I/D indication is in cr6 */
	mtcrf	0x02,r9		/* I/D indication is in cr6 */
	mtcrf	0x01,r9		/* slb_allocate uses cr0 and cr7 */
	mtcrf	0x01,r9		/* slb_allocate uses cr0 and cr7 */
.machine	pop


	RESTORE_CTR(r9, PACA_EXSLB)
	RESTORE_CTR(r9, PACA_EXSLB)
	RESTORE_PPR_PACA(PACA_EXSLB, r9)
	RESTORE_PPR_PACA(PACA_EXSLB, r9)
@@ -707,14 +704,11 @@ END_MMU_FTR_SECTION_IFCLR(MMU_FTR_TYPE_RADIX)
	RFI_TO_USER
	RFI_TO_USER
	b	.	/* prevent speculative execution */
	b	.	/* prevent speculative execution */
1:
1:
.machine	push
.machine	"power4"
	mtcrf	0x80,r9
	mtcrf	0x80,r9
	mtcrf	0x08,r9		/* MSR[PR] indication is in cr4 */
	mtcrf	0x08,r9		/* MSR[PR] indication is in cr4 */
	mtcrf	0x04,r9		/* MSR[RI] indication is in cr5 */
	mtcrf	0x04,r9		/* MSR[RI] indication is in cr5 */
	mtcrf	0x02,r9		/* I/D indication is in cr6 */
	mtcrf	0x02,r9		/* I/D indication is in cr6 */
	mtcrf	0x01,r9		/* slb_allocate uses cr0 and cr7 */
	mtcrf	0x01,r9		/* slb_allocate uses cr0 and cr7 */
.machine	pop


	RESTORE_CTR(r9, PACA_EXSLB)
	RESTORE_CTR(r9, PACA_EXSLB)
	RESTORE_PPR_PACA(PACA_EXSLB, r9)
	RESTORE_PPR_PACA(PACA_EXSLB, r9)
@@ -1524,7 +1518,7 @@ TRAMP_REAL_BEGIN(rfi_flush_fallback)
	ld	r11,PACA_L1D_FLUSH_SIZE(r13)
	ld	r11,PACA_L1D_FLUSH_SIZE(r13)
	srdi	r11,r11,(7 + 3) /* 128 byte lines, unrolled 8x */
	srdi	r11,r11,(7 + 3) /* 128 byte lines, unrolled 8x */
	mtctr	r11
	mtctr	r11
	DCBT_STOP_ALL_STREAM_IDS(r11) /* Stop prefetch streams */
	DCBT_BOOK3S_STOP_ALL_STREAM_IDS(r11) /* Stop prefetch streams */


	/* order ld/st prior to dcbt stop all streams with flushing */
	/* order ld/st prior to dcbt stop all streams with flushing */
	sync
	sync
@@ -1564,7 +1558,7 @@ TRAMP_REAL_BEGIN(hrfi_flush_fallback)
	ld	r11,PACA_L1D_FLUSH_SIZE(r13)
	ld	r11,PACA_L1D_FLUSH_SIZE(r13)
	srdi	r11,r11,(7 + 3) /* 128 byte lines, unrolled 8x */
	srdi	r11,r11,(7 + 3) /* 128 byte lines, unrolled 8x */
	mtctr	r11
	mtctr	r11
	DCBT_STOP_ALL_STREAM_IDS(r11) /* Stop prefetch streams */
	DCBT_BOOK3S_STOP_ALL_STREAM_IDS(r11) /* Stop prefetch streams */


	/* order ld/st prior to dcbt stop all streams with flushing */
	/* order ld/st prior to dcbt stop all streams with flushing */
	sync
	sync
+4 −2
Original line number Original line Diff line number Diff line
@@ -22,9 +22,11 @@ ifeq ($(call ld-ifversion, -lt, 225000000, y),y)
extra-$(CONFIG_PPC64)	+= crtsavres.o
extra-$(CONFIG_PPC64)	+= crtsavres.o
endif
endif


obj-$(CONFIG_PPC_BOOK3S_64) += copyuser_power7.o copypage_power7.o \
			       memcpy_power7.o

obj64-y	+= copypage_64.o copyuser_64.o mem_64.o hweight_64.o \
obj64-y	+= copypage_64.o copyuser_64.o mem_64.o hweight_64.o \
	   copyuser_power7.o string_64.o copypage_power7.o memcpy_power7.o \
	   string_64.o memcpy_64.o memcmp_64.o pmem.o
	   memcpy_64.o memcmp_64.o pmem.o


obj64-$(CONFIG_SMP)	+= locks.o
obj64-$(CONFIG_SMP)	+= locks.o
obj64-$(CONFIG_ALTIVEC)	+= vmx-helper.o
obj64-$(CONFIG_ALTIVEC)	+= vmx-helper.o
Loading