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

Commit fac26ad4 authored by Jimi Xenidis's avatar Jimi Xenidis Committed by Benjamin Herrenschmidt
Browse files

powerpc/book3e: Add ICSWX/ACOP support to Book3e cores like A2



ICSWX is also used by the A2 processor to access coprocessors,
although not all "chips" that contain A2s have coprocessors.

Signed-off-by: default avatarJimi Xenidis <jimix@pobox.com>
Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
parent 9d670280
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -437,7 +437,7 @@ extern const char *powerpc_base_platform;
#define CPU_FTRS_COMPATIBLE	(CPU_FTR_USE_TB | CPU_FTR_PPCAS_ARCH_V2)

#define CPU_FTRS_A2 (CPU_FTR_USE_TB | CPU_FTR_SMT | CPU_FTR_DBELL | \
		     CPU_FTR_NOEXECUTE | CPU_FTR_NODSISRALIGN)
		     CPU_FTR_NOEXECUTE | CPU_FTR_NODSISRALIGN | CPU_FTR_ICSWX)

#ifdef __powerpc64__
#ifdef CONFIG_PPC_BOOK3E
+4 −0
Original line number Diff line number Diff line
@@ -214,6 +214,10 @@ typedef struct {
	unsigned int	id;
	unsigned int	active;
	unsigned long	vdso_base;
#ifdef CONFIG_PPC_ICSWX
	struct spinlock *cop_lockp;	/* guard cop related stuff */
	unsigned long acop;		/* mask of enabled coprocessor types */
#endif /* CONFIG_PPC_ICSWX */
#ifdef CONFIG_PPC_MM_SLICES
	u64 low_slices_psize;   /* SLB page size encodings */
	u64 high_slices_psize;  /* 4 bits per slice for now */
+4 −0
Original line number Diff line number Diff line
@@ -187,6 +187,10 @@
#define SPRN_CSRR1	SPRN_SRR3 /* Critical Save and Restore Register 1 */
#endif

#ifdef CONFIG_PPC_ICSWX
#define SPRN_HACOP	0x15F	/* Hypervisor Available Coprocessor Register */
#endif

/* Bit definitions for CCR1. */
#define	CCR1_DPC	0x00000100 /* Disable L1 I-Cache/D-Cache parity checking */
#define	CCR1_TCS	0x00000080 /* Timer Clock Select */
+8 −2
Original line number Diff line number Diff line
@@ -41,11 +41,16 @@ _GLOBAL(__setup_cpu_a2)
	 * core local but doing it always won't hurt
	 */

#ifdef CONFIG_PPC_WSP_COPRO
#ifdef CONFIG_PPC_ICSWX
	/* Make sure ACOP starts out as zero */
	li	r3,0
	mtspr   SPRN_ACOP,r3

	/* Skip the following if we are in Guest mode */
	mfmsr	r3
	andis.	r0,r3,MSR_GS@h
	bne	_icswx_skip_guest

	/* Enable icswx instruction */
	mfspr   r3,SPRN_A2_CCR2
	ori     r3,r3,A2_CCR2_ENABLE_ICSWX
@@ -54,7 +59,8 @@ _GLOBAL(__setup_cpu_a2)
	/* Unmask all CTs in HACOP */
	li      r3,-1
	mtspr   SPRN_HACOP,r3
#endif /* CONFIG_PPC_WSP_COPRO */
_icswx_skip_guest:
#endif /* CONFIG_PPC_ICSWX */

	/* Enable doorbell */
	mfspr   r3,SPRN_A2_CCR2
+1 −1
Original line number Diff line number Diff line
@@ -236,7 +236,7 @@ config VSX

config PPC_ICSWX
	bool "Support for PowerPC icswx coprocessor instruction"
	depends on POWER4
	depends on POWER4 || PPC_A2
	default n
	---help---

Loading