diff options
| -rw-r--r-- | arch/powerpc/include/asm/page.h | 7 | ||||
| -rw-r--r-- | arch/powerpc/kernel/head_32.S | 1 | ||||
| -rw-r--r-- | arch/powerpc/kernel/head_booke.h | 10 | ||||
| -rw-r--r-- | arch/powerpc/kernel/head_fsl_booke.S | 2 | ||||
| -rw-r--r-- | arch/powerpc/kvm/book3s_hv_builtin.c | 1 | ||||
| -rw-r--r-- | arch/powerpc/kvm/book3s_hv_rmhandlers.S | 15 | ||||
| -rw-r--r-- | arch/powerpc/mm/mem.c | 3 | ||||
| -rw-r--r-- | arch/powerpc/platforms/powermac/Kconfig | 1 |
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 |
| 89 | BEGIN_FTR_SECTION | 89 | BEGIN_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 |
| 98 | 1975: | 98 | 1975: |
| 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 | ||
| 835 | void kvmppc_check_need_tlb_flush(struct kvm *kvm, int pcpu, | 836 | void 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 |
| 2506 | 3: | ||
| 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 | 2524 | 4: 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 | ||
| 12 | config PPC_PMAC64 | 13 | config PPC_PMAC64 |
