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

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
...@@ -437,7 +437,7 @@ extern const char *powerpc_base_platform; ...@@ -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_COMPATIBLE (CPU_FTR_USE_TB | CPU_FTR_PPCAS_ARCH_V2)
#define CPU_FTRS_A2 (CPU_FTR_USE_TB | CPU_FTR_SMT | CPU_FTR_DBELL | \ #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 __powerpc64__
#ifdef CONFIG_PPC_BOOK3E #ifdef CONFIG_PPC_BOOK3E
......
...@@ -214,6 +214,10 @@ typedef struct { ...@@ -214,6 +214,10 @@ typedef struct {
unsigned int id; unsigned int id;
unsigned int active; unsigned int active;
unsigned long vdso_base; 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 #ifdef CONFIG_PPC_MM_SLICES
u64 low_slices_psize; /* SLB page size encodings */ u64 low_slices_psize; /* SLB page size encodings */
u64 high_slices_psize; /* 4 bits per slice for now */ u64 high_slices_psize; /* 4 bits per slice for now */
......
...@@ -187,6 +187,10 @@ ...@@ -187,6 +187,10 @@
#define SPRN_CSRR1 SPRN_SRR3 /* Critical Save and Restore Register 1 */ #define SPRN_CSRR1 SPRN_SRR3 /* Critical Save and Restore Register 1 */
#endif #endif
#ifdef CONFIG_PPC_ICSWX
#define SPRN_HACOP 0x15F /* Hypervisor Available Coprocessor Register */
#endif
/* Bit definitions for CCR1. */ /* Bit definitions for CCR1. */
#define CCR1_DPC 0x00000100 /* Disable L1 I-Cache/D-Cache parity checking */ #define CCR1_DPC 0x00000100 /* Disable L1 I-Cache/D-Cache parity checking */
#define CCR1_TCS 0x00000080 /* Timer Clock Select */ #define CCR1_TCS 0x00000080 /* Timer Clock Select */
......
...@@ -41,11 +41,16 @@ _GLOBAL(__setup_cpu_a2) ...@@ -41,11 +41,16 @@ _GLOBAL(__setup_cpu_a2)
* core local but doing it always won't hurt * 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 */ /* Make sure ACOP starts out as zero */
li r3,0 li r3,0
mtspr SPRN_ACOP,r3 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 */ /* Enable icswx instruction */
mfspr r3,SPRN_A2_CCR2 mfspr r3,SPRN_A2_CCR2
ori r3,r3,A2_CCR2_ENABLE_ICSWX ori r3,r3,A2_CCR2_ENABLE_ICSWX
...@@ -54,7 +59,8 @@ _GLOBAL(__setup_cpu_a2) ...@@ -54,7 +59,8 @@ _GLOBAL(__setup_cpu_a2)
/* Unmask all CTs in HACOP */ /* Unmask all CTs in HACOP */
li r3,-1 li r3,-1
mtspr SPRN_HACOP,r3 mtspr SPRN_HACOP,r3
#endif /* CONFIG_PPC_WSP_COPRO */ _icswx_skip_guest:
#endif /* CONFIG_PPC_ICSWX */
/* Enable doorbell */ /* Enable doorbell */
mfspr r3,SPRN_A2_CCR2 mfspr r3,SPRN_A2_CCR2
......
...@@ -236,7 +236,7 @@ config VSX ...@@ -236,7 +236,7 @@ config VSX
config PPC_ICSWX config PPC_ICSWX
bool "Support for PowerPC icswx coprocessor instruction" bool "Support for PowerPC icswx coprocessor instruction"
depends on POWER4 depends on POWER4 || PPC_A2
default n default n
---help--- ---help---
......
config PPC_WSP config PPC_WSP
bool bool
select PPC_A2 select PPC_A2
select PPC_ICSWX
select PPC_SCOM select PPC_SCOM
select PPC_XICS select PPC_XICS
select PPC_ICP_NATIVE select PPC_ICP_NATIVE
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment