aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/powerpc/include/asm/page.h7
-rw-r--r--arch/powerpc/kernel/head_32.S1
-rw-r--r--arch/powerpc/kernel/head_booke.h10
-rw-r--r--arch/powerpc/kernel/head_fsl_booke.S2
-rw-r--r--arch/powerpc/kvm/book3s_hv_builtin.c1
-rw-r--r--arch/powerpc/kvm/book3s_hv_rmhandlers.S15
-rw-r--r--arch/powerpc/mm/mem.c3
-rw-r--r--arch/powerpc/platforms/powermac/Kconfig1
8 files changed, 31 insertions, 9 deletions
diff --git a/arch/powerpc/include/asm/page.h b/arch/powerpc/include/asm/page.h
index b8286a2013b4..0d52f57fca04 100644
--- a/arch/powerpc/include/asm/page.h
+++ b/arch/powerpc/include/asm/page.h
@@ -319,6 +319,13 @@ struct vm_area_struct;
319#endif /* __ASSEMBLY__ */ 319#endif /* __ASSEMBLY__ */
320#include <asm/slice.h> 320#include <asm/slice.h>
321 321
322/*
323 * Allow 30-bit DMA for very limited Broadcom wifi chips on many powerbooks.
324 */
325#ifdef CONFIG_PPC32
326#define ARCH_ZONE_DMA_BITS 30
327#else
322#define ARCH_ZONE_DMA_BITS 31 328#define ARCH_ZONE_DMA_BITS 31
329#endif
323 330
324#endif /* _ASM_POWERPC_PAGE_H */ 331#endif /* _ASM_POWERPC_PAGE_H */
diff --git a/arch/powerpc/kernel/head_32.S b/arch/powerpc/kernel/head_32.S
index 1d5f1bd0dacd..f255e22184b4 100644
--- a/arch/powerpc/kernel/head_32.S
+++ b/arch/powerpc/kernel/head_32.S
@@ -752,6 +752,7 @@ __secondary_start:
752 stw r0,0(r3) 752 stw r0,0(r3)
753 753
754 /* load up the MMU */ 754 /* load up the MMU */
755 bl load_segment_registers
755 bl load_up_mmu 756 bl load_up_mmu
756 757
757 /* ptr to phys current thread */ 758 /* ptr to phys current thread */
diff --git a/arch/powerpc/kernel/head_booke.h b/arch/powerpc/kernel/head_booke.h
index bfeb469e8106..2ae635df9026 100644
--- a/arch/powerpc/kernel/head_booke.h
+++ b/arch/powerpc/kernel/head_booke.h
@@ -83,7 +83,7 @@ END_BTB_FLUSH_SECTION
83 SAVE_4GPRS(3, r11); \ 83 SAVE_4GPRS(3, r11); \
84 SAVE_2GPRS(7, r11) 84 SAVE_2GPRS(7, r11)
85 85
86.macro SYSCALL_ENTRY trapno intno 86.macro SYSCALL_ENTRY trapno intno srr1
87 mfspr r10, SPRN_SPRG_THREAD 87 mfspr r10, SPRN_SPRG_THREAD
88#ifdef CONFIG_KVM_BOOKE_HV 88#ifdef CONFIG_KVM_BOOKE_HV
89BEGIN_FTR_SECTION 89BEGIN_FTR_SECTION
@@ -94,7 +94,7 @@ BEGIN_FTR_SECTION
94 mfspr r11, SPRN_SRR1 94 mfspr r11, SPRN_SRR1
95 mtocrf 0x80, r11 /* check MSR[GS] without clobbering reg */ 95 mtocrf 0x80, r11 /* check MSR[GS] without clobbering reg */
96 bf 3, 1975f 96 bf 3, 1975f
97 b kvmppc_handler_BOOKE_INTERRUPT_\intno\()_SPRN_SRR1 97 b kvmppc_handler_\intno\()_\srr1
981975: 981975:
99 mr r12, r13 99 mr r12, r13
100 lwz r13, THREAD_NORMSAVE(2)(r10) 100 lwz r13, THREAD_NORMSAVE(2)(r10)
@@ -145,9 +145,9 @@ ALT_FTR_SECTION_END_IFSET(CPU_FTR_EMB_HV)
145 tophys(r11,r11) 145 tophys(r11,r11)
146 addi r11,r11,global_dbcr0@l 146 addi r11,r11,global_dbcr0@l
147#ifdef CONFIG_SMP 147#ifdef CONFIG_SMP
148 lwz r9,TASK_CPU(r2) 148 lwz r10, TASK_CPU(r2)
149 slwi r9,r9,3 149 slwi r10, r10, 3
150 add r11,r11,r9 150 add r11, r11, r10
151#endif 151#endif
152 lwz r12,0(r11) 152 lwz r12,0(r11)
153 mtspr SPRN_DBCR0,r12 153 mtspr SPRN_DBCR0,r12
diff --git a/arch/powerpc/kernel/head_fsl_booke.S b/arch/powerpc/kernel/head_fsl_booke.S
index 0bf4651380f3..adf0505dbe02 100644
--- a/arch/powerpc/kernel/head_fsl_booke.S
+++ b/arch/powerpc/kernel/head_fsl_booke.S
@@ -409,7 +409,7 @@ interrupt_base:
409 409
410 /* System Call Interrupt */ 410 /* System Call Interrupt */
411 START_EXCEPTION(SystemCall) 411 START_EXCEPTION(SystemCall)
412 SYSCALL_ENTRY 0xc00 SYSCALL 412 SYSCALL_ENTRY 0xc00 BOOKE_INTERRUPT_SYSCALL SPRN_SRR1
413 413
414 /* Auxiliary Processor Unavailable Interrupt */ 414 /* Auxiliary Processor Unavailable Interrupt */
415 EXCEPTION(0x2900, AP_UNAVAIL, AuxillaryProcessorUnavailable, \ 415 EXCEPTION(0x2900, AP_UNAVAIL, AuxillaryProcessorUnavailable, \
diff --git a/arch/powerpc/kvm/book3s_hv_builtin.c b/arch/powerpc/kvm/book3s_hv_builtin.c
index 41f93dbcd29f..cb05ccc8bc6a 100644
--- a/arch/powerpc/kvm/book3s_hv_builtin.c
+++ b/arch/powerpc/kvm/book3s_hv_builtin.c
@@ -830,6 +830,7 @@ static void flush_guest_tlb(struct kvm *kvm)
830 } 830 }
831 } 831 }
832 asm volatile("ptesync": : :"memory"); 832 asm volatile("ptesync": : :"memory");
833 asm volatile(PPC_INVALIDATE_ERAT : : :"memory");
833} 834}
834 835
835void kvmppc_check_need_tlb_flush(struct kvm *kvm, int pcpu, 836void kvmppc_check_need_tlb_flush(struct kvm *kvm, int pcpu,
diff --git a/arch/powerpc/kvm/book3s_hv_rmhandlers.S b/arch/powerpc/kvm/book3s_hv_rmhandlers.S
index d885a5831daa..337e64468d78 100644
--- a/arch/powerpc/kvm/book3s_hv_rmhandlers.S
+++ b/arch/powerpc/kvm/book3s_hv_rmhandlers.S
@@ -2500,17 +2500,28 @@ END_FTR_SECTION_IFSET(CPU_FTR_ARCH_207S)
2500 LOAD_REG_ADDR(r11, dawr_force_enable) 2500 LOAD_REG_ADDR(r11, dawr_force_enable)
2501 lbz r11, 0(r11) 2501 lbz r11, 0(r11)
2502 cmpdi r11, 0 2502 cmpdi r11, 0
2503 bne 3f
2503 li r3, H_HARDWARE 2504 li r3, H_HARDWARE
2504 beqlr 2505 blr
25063:
2505 /* Emulate H_SET_DABR/X on P8 for the sake of compat mode guests */ 2507 /* Emulate H_SET_DABR/X on P8 for the sake of compat mode guests */
2506 rlwimi r5, r4, 5, DAWRX_DR | DAWRX_DW 2508 rlwimi r5, r4, 5, DAWRX_DR | DAWRX_DW
2507 rlwimi r5, r4, 2, DAWRX_WT 2509 rlwimi r5, r4, 2, DAWRX_WT
2508 clrrdi r4, r4, 3 2510 clrrdi r4, r4, 3
2509 std r4, VCPU_DAWR(r3) 2511 std r4, VCPU_DAWR(r3)
2510 std r5, VCPU_DAWRX(r3) 2512 std r5, VCPU_DAWRX(r3)
2513 /*
2514 * If came in through the real mode hcall handler then it is necessary
2515 * to write the registers since the return path won't. Otherwise it is
2516 * sufficient to store then in the vcpu struct as they will be loaded
2517 * next time the vcpu is run.
2518 */
2519 mfmsr r6
2520 andi. r6, r6, MSR_DR /* in real mode? */
2521 bne 4f
2511 mtspr SPRN_DAWR, r4 2522 mtspr SPRN_DAWR, r4
2512 mtspr SPRN_DAWRX, r5 2523 mtspr SPRN_DAWRX, r5
2513 li r3, 0 25244: li r3, 0
2514 blr 2525 blr
2515 2526
2516_GLOBAL(kvmppc_h_cede) /* r3 = vcpu pointer, r11 = msr, r13 = paca */ 2527_GLOBAL(kvmppc_h_cede) /* r3 = vcpu pointer, r11 = msr, r13 = paca */
diff --git a/arch/powerpc/mm/mem.c b/arch/powerpc/mm/mem.c
index cba29131bccc..2540d3b2588c 100644
--- a/arch/powerpc/mm/mem.c
+++ b/arch/powerpc/mm/mem.c
@@ -248,7 +248,8 @@ void __init paging_init(void)
248 (long int)((top_of_ram - total_ram) >> 20)); 248 (long int)((top_of_ram - total_ram) >> 20));
249 249
250#ifdef CONFIG_ZONE_DMA 250#ifdef CONFIG_ZONE_DMA
251 max_zone_pfns[ZONE_DMA] = min(max_low_pfn, 0x7fffffffUL >> PAGE_SHIFT); 251 max_zone_pfns[ZONE_DMA] = min(max_low_pfn,
252 ((1UL << ARCH_ZONE_DMA_BITS) - 1) >> PAGE_SHIFT);
252#endif 253#endif
253 max_zone_pfns[ZONE_NORMAL] = max_low_pfn; 254 max_zone_pfns[ZONE_NORMAL] = max_low_pfn;
254#ifdef CONFIG_HIGHMEM 255#ifdef CONFIG_HIGHMEM
diff --git a/arch/powerpc/platforms/powermac/Kconfig b/arch/powerpc/platforms/powermac/Kconfig
index f834a19ed772..c02d8c503b29 100644
--- a/arch/powerpc/platforms/powermac/Kconfig
+++ b/arch/powerpc/platforms/powermac/Kconfig
@@ -7,6 +7,7 @@ config PPC_PMAC
7 select PPC_INDIRECT_PCI if PPC32 7 select PPC_INDIRECT_PCI if PPC32
8 select PPC_MPC106 if PPC32 8 select PPC_MPC106 if PPC32
9 select PPC_NATIVE 9 select PPC_NATIVE
10 select ZONE_DMA if PPC32
10 default y 11 default y
11 12
12config PPC_PMAC64 13config PPC_PMAC64