Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge tag 'powerpc-6.9-1' of git://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux

Pull powerpc updates from Michael Ellerman:

- Add AT_HWCAP3 and AT_HWCAP4 aux vector entries for future use
by glibc

- Add support for recognising the Power11 architected and raw PVRs

- Add support for nr_cpus=n on the command line where the
boot CPU is >= n

- Add ppcxx_allmodconfig targets for all 32-bit sub-arches

- Other small features, cleanups and fixes

Thanks to Akanksha J N, Brian King, Christophe Leroy, Dawei Li, Geoff
Levand, Greg Kroah-Hartman, Jan-Benedict Glaw, Kajol Jain, Kunwu Chan,
Li zeming, Madhavan Srinivasan, Masahiro Yamada, Nathan Chancellor,
Nicholas Piggin, Peter Bergner, Qiheng Lin, Randy Dunlap, Ricardo B.
Marliere, Rob Herring, Sathvika Vasireddy, Shrikanth Hegde, Uwe
Kleine-König, Vaibhav Jain, and Wen Xiong.

* tag 'powerpc-6.9-1' of git://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux: (71 commits)
powerpc/macio: Make remove callback of macio driver void returned
powerpc/83xx: Fix build failure with FPU=n
powerpc/64s: Fix get_hugepd_cache_index() build failure
powerpc/4xx: Fix warp_gpio_leds build failure
powerpc/amigaone: Make several functions static
powerpc/embedded6xx: Fix no previous prototype for avr_uart_send() etc.
macintosh/adb: make adb_dev_class constant
powerpc: xor_vmx: Add '-mhard-float' to CFLAGS
powerpc/fsl: Fix mfpmr() asm constraint error
powerpc: Remove cpu-as-y completely
powerpc/fsl: Modernise mt/mfpmr
powerpc/fsl: Fix mfpmr build errors with newer binutils
powerpc/64s: Use .machine power4 around dcbt
powerpc/64s: Move dcbt/dcbtst sequence into a macro
powerpc/mm: Code cleanup for __hash_page_thp
powerpc/hv-gpci: Fix the H_GET_PERF_COUNTER_INFO hcall return value checks
powerpc/irq: Allow softirq to hardirq stack transition
powerpc: Stop using of_root
powerpc/machdep: Define 'compatibles' property in ppc_md and use it
of: Reimplement of_machine_is_compatible() using of_machine_compatible_match()
...

+733 -537
+20 -12
arch/powerpc/Makefile
··· 219 219 # often slow when they are implemented at all 220 220 KBUILD_CFLAGS += $(call cc-option,-mno-string) 221 221 222 - cpu-as-$(CONFIG_ALTIVEC) += $(call as-option,-Wa$(comma)-maltivec) 223 - 224 - # When using '-many -mpower4' gas will first try and find a matching power4 225 - # mnemonic and failing that it will allow any valid mnemonic that GAS knows 226 - # about. GCC will pass -many to GAS when assembling, clang does not. 227 - # LLVM IAS doesn't understand either flag: https://github.com/ClangBuiltLinux/linux/issues/675 228 - # but LLVM IAS only supports ISA >= 2.06 for Book3S 64 anyway... 229 - cpu-as-$(CONFIG_PPC_BOOK3S_64) += $(call as-option,-Wa$(comma)-mpower4) $(call as-option,-Wa$(comma)-many) 230 - 231 - KBUILD_AFLAGS += $(cpu-as-y) 232 - KBUILD_CFLAGS += $(cpu-as-y) 233 - 234 222 KBUILD_AFLAGS += $(aflags-y) 235 223 KBUILD_CFLAGS += $(cflags-y) 236 224 ··· 300 312 generated_configs += ppc32_allmodconfig 301 313 ppc32_allmodconfig: 302 314 $(Q)$(MAKE) KCONFIG_ALLCONFIG=$(srctree)/arch/powerpc/configs/book3s_32.config \ 315 + -f $(srctree)/Makefile allmodconfig 316 + 317 + generated_configs += ppc40x_allmodconfig 318 + ppc40x_allmodconfig: 319 + $(Q)$(MAKE) KCONFIG_ALLCONFIG=$(srctree)/arch/powerpc/configs/40x.config \ 320 + -f $(srctree)/Makefile allmodconfig 321 + 322 + generated_configs += ppc44x_allmodconfig 323 + ppc44x_allmodconfig: 324 + $(Q)$(MAKE) KCONFIG_ALLCONFIG=$(srctree)/arch/powerpc/configs/44x.config \ 325 + -f $(srctree)/Makefile allmodconfig 326 + 327 + generated_configs += ppc8xx_allmodconfig 328 + ppc8xx_allmodconfig: 329 + $(Q)$(MAKE) KCONFIG_ALLCONFIG=$(srctree)/arch/powerpc/configs/8xx.config \ 330 + -f $(srctree)/Makefile allmodconfig 331 + 332 + generated_configs += ppc85xx_allmodconfig 333 + ppc85xx_allmodconfig: 334 + $(Q)$(MAKE) KCONFIG_ALLCONFIG=$(srctree)/arch/powerpc/configs/85xx-32bit.config \ 303 335 -f $(srctree)/Makefile allmodconfig 304 336 305 337 generated_configs += ppc_defconfig
+5 -2
arch/powerpc/boot/simple_alloc.c
··· 112 112 return ptr; 113 113 114 114 new = simple_malloc(size); 115 - memcpy(new, ptr, p->size); 116 - simple_free(ptr); 115 + if (new) { 116 + memcpy(new, ptr, p->size); 117 + simple_free(ptr); 118 + } 119 + 117 120 return new; 118 121 } 119 122
+2
arch/powerpc/configs/40x.config
··· 1 + CONFIG_PPC64=n 2 + CONFIG_40x=y
+2
arch/powerpc/configs/44x.config
··· 1 + CONFIG_PPC64=n 2 + CONFIG_44x=y
+1
arch/powerpc/configs/85xx-32bit.config
··· 1 + CONFIG_PPC64=n 1 2 CONFIG_HIGHMEM=y 2 3 CONFIG_KEXEC=y 3 4 CONFIG_PPC_85xx=y
+2
arch/powerpc/configs/8xx.config
··· 1 + CONFIG_PPC64=n 2 + CONFIG_PPC_8xx=y
-1
arch/powerpc/configs/ps3_defconfig
··· 24 24 CONFIG_PS3_LPM=m 25 25 # CONFIG_PPC_OF_BOOT_TRAMPOLINE is not set 26 26 CONFIG_KEXEC=y 27 - # CONFIG_PPC64_BIG_ENDIAN_ELF_ABI_V2 is not set 28 27 CONFIG_PPC_4K_PAGES=y 29 28 CONFIG_SCHED_SMT=y 30 29 CONFIG_PM=y
-2
arch/powerpc/include/asm/book3s/64/hash.h
··· 269 269 int nid, pgprot_t prot); 270 270 int hash__remove_section_mapping(unsigned long start, unsigned long end); 271 271 272 - void hash__kernel_map_pages(struct page *page, int numpages, int enable); 273 - 274 272 #endif /* !__ASSEMBLY__ */ 275 273 #endif /* __KERNEL__ */ 276 274 #endif /* _ASM_POWERPC_BOOK3S_64_HASH_H */
+2 -2
arch/powerpc/include/asm/book3s/64/pgtable-64k.h
··· 45 45 /* 46 46 * This should never get called 47 47 */ 48 - static inline int get_hugepd_cache_index(int index) 48 + static __always_inline int get_hugepd_cache_index(int index) 49 49 { 50 - BUG(); 50 + BUILD_BUG(); 51 51 } 52 52 53 53 #endif /* CONFIG_HUGETLB_PAGE */
-10
arch/powerpc/include/asm/book3s/64/pgtable.h
··· 1027 1027 } 1028 1028 #endif 1029 1029 1030 - #if defined(CONFIG_DEBUG_PAGEALLOC) || defined(CONFIG_KFENCE) 1031 - static inline void __kernel_map_pages(struct page *page, int numpages, int enable) 1032 - { 1033 - if (radix_enabled()) 1034 - radix__kernel_map_pages(page, numpages, enable); 1035 - else 1036 - hash__kernel_map_pages(page, numpages, enable); 1037 - } 1038 - #endif 1039 - 1040 1030 static inline pte_t pmd_pte(pmd_t pmd) 1041 1031 { 1042 1032 return __pte_raw(pmd_raw(pmd));
-2
arch/powerpc/include/asm/book3s/64/radix.h
··· 362 362 int radix__remove_section_mapping(unsigned long start, unsigned long end); 363 363 #endif /* CONFIG_MEMORY_HOTPLUG */ 364 364 365 - void radix__kernel_map_pages(struct page *page, int numpages, int enable); 366 - 367 365 #ifdef CONFIG_ARCH_WANT_OPTIMIZE_DAX_VMEMMAP 368 366 #define vmemmap_can_optimize vmemmap_can_optimize 369 367 bool vmemmap_can_optimize(struct vmem_altmap *altmap, struct dev_pagemap *pgmap);
+9 -5
arch/powerpc/include/asm/cputable.h
··· 454 454 CPU_FTR_ARCH_300 | CPU_FTR_ARCH_31 | \ 455 455 CPU_FTR_DAWR | CPU_FTR_DAWR1 | \ 456 456 CPU_FTR_DEXCR_NPHIE) 457 + 458 + #define CPU_FTRS_POWER11 CPU_FTRS_POWER10 459 + 457 460 #define CPU_FTRS_CELL (CPU_FTR_LWSYNC | \ 458 461 CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_CTRL | \ 459 462 CPU_FTR_ALTIVEC_COMP | CPU_FTR_MMCRA | CPU_FTR_SMT | \ ··· 545 542 #define CPU_FTRS_DT_CPU_BASE (~0ul) 546 543 #endif 547 544 545 + /* pseries may disable DBELL with ibm,pi-features */ 548 546 #ifdef CONFIG_CPU_LITTLE_ENDIAN 549 547 #define CPU_FTRS_ALWAYS \ 550 - (CPU_FTRS_POSSIBLE & ~CPU_FTR_HVMODE & CPU_FTRS_POWER7 & \ 551 - CPU_FTRS_POWER8E & CPU_FTRS_POWER8 & CPU_FTRS_POWER9 & \ 552 - CPU_FTRS_POWER9_DD2_1 & CPU_FTRS_POWER9_DD2_2 & \ 548 + (CPU_FTRS_POSSIBLE & ~CPU_FTR_HVMODE & ~CPU_FTR_DBELL & \ 549 + CPU_FTRS_POWER7 & CPU_FTRS_POWER8E & CPU_FTRS_POWER8 & \ 550 + CPU_FTRS_POWER9 & CPU_FTRS_POWER9_DD2_1 & CPU_FTRS_POWER9_DD2_2 & \ 553 551 CPU_FTRS_POWER10 & CPU_FTRS_DT_CPU_BASE) 554 552 #else 555 553 #define CPU_FTRS_ALWAYS \ 556 554 (CPU_FTRS_PPC970 & CPU_FTRS_POWER5 & \ 557 555 CPU_FTRS_POWER6 & CPU_FTRS_POWER7 & CPU_FTRS_CELL & \ 558 556 CPU_FTRS_PA6T & CPU_FTRS_POWER8 & CPU_FTRS_POWER8E & \ 559 - ~CPU_FTR_HVMODE & CPU_FTRS_POSSIBLE & CPU_FTRS_POWER9 & \ 560 - CPU_FTRS_POWER9_DD2_1 & CPU_FTRS_POWER9_DD2_2 & \ 557 + ~CPU_FTR_HVMODE & ~CPU_FTR_DBELL & CPU_FTRS_POSSIBLE & \ 558 + CPU_FTRS_POWER9 & CPU_FTRS_POWER9_DD2_1 & CPU_FTRS_POWER9_DD2_2 & \ 561 559 CPU_FTRS_POWER10 & CPU_FTRS_DT_CPU_BASE) 562 560 #endif /* CONFIG_CPU_LITTLE_ENDIAN */ 563 561 #endif
+1 -1
arch/powerpc/include/asm/ibmebus.h
··· 48 48 49 49 struct platform_driver; 50 50 51 - extern struct bus_type ibmebus_bus_type; 51 + extern const struct bus_type ibmebus_bus_type; 52 52 53 53 int ibmebus_register_driver(struct platform_driver *drv); 54 54 void ibmebus_unregister_driver(struct platform_driver *drv);
+1 -1
arch/powerpc/include/asm/interrupt.h
··· 97 97 98 98 static inline bool is_implicit_soft_masked(struct pt_regs *regs) 99 99 { 100 - if (regs->msr & MSR_PR) 100 + if (user_mode(regs)) 101 101 return false; 102 102 103 103 if (regs->nip >= (unsigned long)__end_soft_masked)
+1
arch/powerpc/include/asm/machdep.h
··· 22 22 struct machdep_calls { 23 23 const char *name; 24 24 const char *compatible; 25 + const char * const *compatibles; 25 26 #ifdef CONFIG_PPC64 26 27 #ifdef CONFIG_PM 27 28 void (*iommu_restore)(void);
+2 -2
arch/powerpc/include/asm/macio.h
··· 6 6 #include <linux/of.h> 7 7 #include <linux/platform_device.h> 8 8 9 - extern struct bus_type macio_bus_type; 9 + extern const struct bus_type macio_bus_type; 10 10 11 11 /* MacIO device driver is defined later */ 12 12 struct macio_driver; ··· 126 126 struct macio_driver 127 127 { 128 128 int (*probe)(struct macio_dev* dev, const struct of_device_id *match); 129 - int (*remove)(struct macio_dev* dev); 129 + void (*remove)(struct macio_dev *dev); 130 130 131 131 int (*suspend)(struct macio_dev* dev, pm_message_t state); 132 132 int (*resume)(struct macio_dev* dev);
+1
arch/powerpc/include/asm/mmu.h
··· 133 133 #define MMU_FTRS_POWER8 MMU_FTRS_POWER6 134 134 #define MMU_FTRS_POWER9 MMU_FTRS_POWER6 135 135 #define MMU_FTRS_POWER10 MMU_FTRS_POWER6 136 + #define MMU_FTRS_POWER11 MMU_FTRS_POWER6 136 137 #define MMU_FTRS_CELL MMU_FTRS_DEFAULT_HPTE_ARCH_V2 | \ 137 138 MMU_FTR_CI_LARGE_PAGE 138 139 #define MMU_FTRS_PA6T MMU_FTRS_DEFAULT_HPTE_ARCH_V2 | \
+1 -1
arch/powerpc/include/asm/mpic.h
··· 336 336 #endif 337 337 }; 338 338 339 - extern struct bus_type mpic_subsys; 339 + extern const struct bus_type mpic_subsys; 340 340 341 341 /* 342 342 * MPIC flags (passed to mpic_alloc)
-4
arch/powerpc/include/asm/paca.h
··· 163 163 u64 kstack; /* Saved Kernel stack addr */ 164 164 u64 saved_r1; /* r1 save for RTAS calls or PM or EE=0 */ 165 165 u64 saved_msr; /* MSR saved here by enter_rtas */ 166 - #ifdef CONFIG_PPC64 167 166 u64 exit_save_r1; /* Syscall/interrupt R1 save */ 168 - #endif 169 167 #ifdef CONFIG_PPC_BOOK3E_64 170 168 u16 trap_save; /* Used when bad stack is encountered */ 171 169 #endif ··· 212 214 /* Non-maskable exceptions that are not performance critical */ 213 215 u64 exnmi[EX_SIZE]; /* used for system reset (nmi) */ 214 216 u64 exmc[EX_SIZE]; /* used for machine checks */ 215 - #endif 216 - #ifdef CONFIG_PPC_BOOK3S_64 217 217 /* Exclusive stacks for system reset and machine check exception. */ 218 218 void *nmi_emergency_sp; 219 219 void *mc_emergency_sp;
+23 -3
arch/powerpc/include/asm/ppc_asm.h
··· 201 201 202 202 #ifdef CONFIG_PPC64_ELF_ABI_V2 203 203 #define STK_GOT 24 204 - #define __STK_PARAM(i) (32 + ((i)-3)*8) 204 + #define STK_PARAM_AREA 32 205 205 #else 206 206 #define STK_GOT 40 207 - #define __STK_PARAM(i) (48 + ((i)-3)*8) 207 + #define STK_PARAM_AREA 48 208 208 #endif 209 + 210 + #define __STK_PARAM(i) (STK_PARAM_AREA + ((i)-3)*8) 209 211 #define STK_PARAM(i) __STK_PARAM(__REG_##i) 210 212 211 213 #ifdef CONFIG_PPC64_ELF_ABI_V2 ··· 508 506 */ 509 507 #define DCBT_BOOK3S_STOP_ALL_STREAM_IDS(scratch) \ 510 508 lis scratch,0x60000000@h; \ 511 - dcbt 0,scratch,0b01010 509 + .machine push; \ 510 + .machine power4; \ 511 + dcbt 0,scratch,0b01010; \ 512 + .machine pop; 513 + 514 + #define DCBT_SETUP_STREAMS(from, from_parms, to, to_parms, scratch) \ 515 + lis scratch,0x8000; /* GO=1 */ \ 516 + clrldi scratch,scratch,32; \ 517 + .machine push; \ 518 + .machine power4; \ 519 + /* setup read stream 0 */ \ 520 + dcbt 0,from,0b01000; /* addr from */ \ 521 + dcbt 0,from_parms,0b01010; /* length and depth from */ \ 522 + /* setup write stream 1 */ \ 523 + dcbtst 0,to,0b01000; /* addr to */ \ 524 + dcbtst 0,to_parms,0b01010; /* length and depth to */ \ 525 + eieio; \ 526 + dcbt 0,scratch,0b01010; /* all streams GO */ \ 527 + .machine pop; 512 528 513 529 /* 514 530 * toreal/fromreal/tophys/tovirt macros. 32-bit BookE makes them
+2
arch/powerpc/include/asm/reg.h
··· 1366 1366 #define PVR_HX_C2000 0x0066 1367 1367 #define PVR_POWER9 0x004E 1368 1368 #define PVR_POWER10 0x0080 1369 + #define PVR_POWER11 0x0082 1369 1370 #define PVR_BE 0x0070 1370 1371 #define PVR_PA6T 0x0090 1371 1372 ··· 1378 1377 #define PVR_ARCH_207 0x0f000004 1379 1378 #define PVR_ARCH_300 0x0f000005 1380 1379 #define PVR_ARCH_31 0x0f000006 1380 + #define PVR_ARCH_31_P11 0x0f000007 1381 1381 1382 1382 /* Macros for setting and retrieving special purpose registers */ 1383 1383 #ifndef __ASSEMBLY__
+21 -4
arch/powerpc/include/asm/reg_fsl_emb.h
··· 11 11 12 12 #ifndef __ASSEMBLY__ 13 13 /* Performance Monitor Registers */ 14 - #define mfpmr(rn) ({unsigned int rval; \ 15 - asm volatile("mfpmr %0," __stringify(rn) \ 16 - : "=r" (rval)); rval;}) 17 - #define mtpmr(rn, v) asm volatile("mtpmr " __stringify(rn) ",%0" : : "r" (v)) 14 + static __always_inline unsigned int mfpmr(unsigned int rn) 15 + { 16 + unsigned int rval; 17 + 18 + asm (".machine push; " 19 + ".machine e300; " 20 + "mfpmr %[rval], %[rn];" 21 + ".machine pop;" 22 + : [rval] "=r" (rval) : [rn] "i" (rn)); 23 + 24 + return rval; 25 + } 26 + 27 + static __always_inline void mtpmr(unsigned int rn, unsigned int val) 28 + { 29 + asm (".machine push; " 30 + ".machine e300; " 31 + "mtpmr %[rn], %[val];" 32 + ".machine pop;" 33 + : [val] "=r" (val) : [rn] "i" (rn)); 34 + } 18 35 #endif /* __ASSEMBLY__ */ 19 36 20 37 /* Freescale Book E Performance Monitor APU Registers */
+7
arch/powerpc/include/asm/set_memory.h
··· 8 8 #define SET_MEMORY_X 3 9 9 #define SET_MEMORY_NP 4 /* Set memory non present */ 10 10 #define SET_MEMORY_P 5 /* Set memory present */ 11 + #define SET_MEMORY_ROX 6 11 12 12 13 int change_memory_attr(unsigned long addr, int numpages, long action); 13 14 ··· 41 40 { 42 41 return change_memory_attr(addr, numpages, SET_MEMORY_P); 43 42 } 43 + 44 + static inline int set_memory_rox(unsigned long addr, int numpages) 45 + { 46 + return change_memory_attr(addr, numpages, SET_MEMORY_ROX); 47 + } 48 + #define set_memory_rox set_memory_rox 44 49 45 50 #endif
+1
arch/powerpc/include/asm/smp.h
··· 27 27 28 28 extern int boot_cpuid; 29 29 extern int boot_cpu_hwid; /* PPC64 only */ 30 + extern int boot_core_hwid; 30 31 extern int spinning_secondaries; 31 32 extern u32 *cpu_to_phys_id; 32 33 extern bool coregroup_enabled;
+4
arch/powerpc/include/asm/switch_to.h
··· 48 48 #else 49 49 static inline void save_fpu(struct task_struct *t) { } 50 50 static inline void flush_fp_to_thread(struct task_struct *t) { } 51 + static inline void enable_kernel_fp(void) 52 + { 53 + BUILD_BUG(); 54 + } 51 55 #endif 52 56 53 57 #ifdef CONFIG_ALTIVEC
+2 -1
arch/powerpc/include/asm/trace.h
··· 267 267 ); 268 268 #endif 269 269 270 + #ifdef CONFIG_PPC_64S_HASH_MMU 270 271 TRACE_EVENT(hash_fault, 271 272 272 273 TP_PROTO(unsigned long addr, unsigned long access, unsigned long trap), ··· 287 286 TP_printk("hash fault with addr 0x%lx and access = 0x%lx trap = 0x%lx", 288 287 __entry->addr, __entry->access, __entry->trap) 289 288 ); 290 - 289 + #endif 291 290 292 291 TRACE_EVENT(tlbie, 293 292
+1 -1
arch/powerpc/include/asm/vio.h
··· 39 39 */ 40 40 #define VIO_CMO_MIN_ENT 1562624 41 41 42 - extern struct bus_type vio_bus_type; 42 + extern const struct bus_type vio_bus_type; 43 43 44 44 struct iommu_table; 45 45
+2 -2
arch/powerpc/include/asm/vmalloc.h
··· 7 7 #ifdef CONFIG_HAVE_ARCH_HUGE_VMAP 8 8 9 9 #define arch_vmap_pud_supported arch_vmap_pud_supported 10 - static inline bool arch_vmap_pud_supported(pgprot_t prot) 10 + static __always_inline bool arch_vmap_pud_supported(pgprot_t prot) 11 11 { 12 12 /* HPT does not cope with large pages in the vmalloc area */ 13 13 return radix_enabled(); 14 14 } 15 15 16 16 #define arch_vmap_pmd_supported arch_vmap_pmd_supported 17 - static inline bool arch_vmap_pmd_supported(pgprot_t prot) 17 + static __always_inline bool arch_vmap_pmd_supported(pgprot_t prot) 18 18 { 19 19 return radix_enabled(); 20 20 }
-1
arch/powerpc/kernel/Makefile
··· 55 55 endif 56 56 57 57 KCSAN_SANITIZE_early_32.o := n 58 - KCSAN_SANITIZE_early_64.o := n 59 58 KCSAN_SANITIZE_cputable.o := n 60 59 KCSAN_SANITIZE_btext.o := n 61 60 KCSAN_SANITIZE_paca.o := n
-2
arch/powerpc/kernel/asm-offsets.c
··· 246 246 OFFSET(PACAHWCPUID, paca_struct, hw_cpu_id); 247 247 OFFSET(PACAKEXECSTATE, paca_struct, kexec_state); 248 248 OFFSET(PACA_DSCR_DEFAULT, paca_struct, dscr_default); 249 - #ifdef CONFIG_PPC64 250 249 OFFSET(PACA_EXIT_SAVE_R1, paca_struct, exit_save_r1); 251 - #endif 252 250 #ifdef CONFIG_PPC_BOOK3E_64 253 251 OFFSET(PACA_TRAP_SAVE, paca_struct, trap_save); 254 252 #endif
+34
arch/powerpc/kernel/cpu_specs_book3s_64.h
··· 60 60 PPC_FEATURE2_ISEL | PPC_FEATURE2_TAR | \ 61 61 PPC_FEATURE2_VEC_CRYPTO) 62 62 63 + #define COMMON_USER_POWER11 COMMON_USER_POWER10 64 + #define COMMON_USER2_POWER11 COMMON_USER2_POWER10 65 + 63 66 static struct cpu_spec cpu_specs[] __initdata = { 64 67 { /* PPC970 */ 65 68 .pvr_mask = 0xffff0000, ··· 284 281 .cpu_restore = __restore_cpu_power10, 285 282 .platform = "power10", 286 283 }, 284 + { /* 3.1-compliant processor, i.e. Power11 "architected" mode */ 285 + .pvr_mask = 0xffffffff, 286 + .pvr_value = 0x0f000007, 287 + .cpu_name = "Power11 (architected)", 288 + .cpu_features = CPU_FTRS_POWER11, 289 + .cpu_user_features = COMMON_USER_POWER11, 290 + .cpu_user_features2 = COMMON_USER2_POWER11, 291 + .mmu_features = MMU_FTRS_POWER11, 292 + .icache_bsize = 128, 293 + .dcache_bsize = 128, 294 + .cpu_setup = __setup_cpu_power10, 295 + .cpu_restore = __restore_cpu_power10, 296 + .platform = "power11", 297 + }, 287 298 { /* Power7 */ 288 299 .pvr_mask = 0xffff0000, 289 300 .pvr_value = 0x003f0000, ··· 467 450 .cpu_restore = __restore_cpu_power10, 468 451 .machine_check_early = __machine_check_early_realmode_p10, 469 452 .platform = "power10", 453 + }, 454 + { /* Power11 */ 455 + .pvr_mask = 0xffff0000, 456 + .pvr_value = 0x00820000, 457 + .cpu_name = "Power11 (raw)", 458 + .cpu_features = CPU_FTRS_POWER11, 459 + .cpu_user_features = COMMON_USER_POWER11, 460 + .cpu_user_features2 = COMMON_USER2_POWER11, 461 + .mmu_features = MMU_FTRS_POWER11, 462 + .icache_bsize = 128, 463 + .dcache_bsize = 128, 464 + .num_pmcs = 6, 465 + .pmc_type = PPC_PMC_IBM, 466 + .cpu_setup = __setup_cpu_power10, 467 + .cpu_restore = __restore_cpu_power10, 468 + .machine_check_early = __machine_check_early_realmode_p10, 469 + .platform = "power11", 470 470 }, 471 471 { /* Cell Broadband Engine */ 472 472 .pvr_mask = 0xffff0000,
+10
arch/powerpc/kernel/dt_cpu_ftrs.c
··· 458 458 return 1; 459 459 } 460 460 461 + static int __init feat_enable_mce_power11(struct dt_cpu_feature *f) 462 + { 463 + cur_cpu_spec->platform = "power11"; 464 + cur_cpu_spec->machine_check_early = __machine_check_early_realmode_p10; 465 + 466 + return 1; 467 + } 468 + 461 469 static int __init feat_enable_tm(struct dt_cpu_feature *f) 462 470 { 463 471 #ifdef CONFIG_PPC_TRANSACTIONAL_MEM ··· 656 648 {"pc-relative-addressing", feat_enable, 0}, 657 649 {"machine-check-power9", feat_enable_mce_power9, 0}, 658 650 {"machine-check-power10", feat_enable_mce_power10, 0}, 651 + {"machine-check-power11", feat_enable_mce_power11, 0}, 659 652 {"performance-monitor-power9", feat_enable_pmu_power9, 0}, 660 653 {"performance-monitor-power10", feat_enable_pmu_power10, 0}, 654 + {"performance-monitor-power11", feat_enable_pmu_power10, 0}, 661 655 {"event-based-branch-v3", feat_enable, 0}, 662 656 {"random-number-generator", feat_enable, 0}, 663 657 {"system-call-vectored", feat_disable, 0},
+2 -3
arch/powerpc/kernel/irq.c
··· 284 284 void __do_IRQ(struct pt_regs *regs) 285 285 { 286 286 struct pt_regs *old_regs = set_irq_regs(regs); 287 - void *cursp, *irqsp, *sirqsp; 287 + void *cursp, *irqsp; 288 288 289 289 /* Switch to the irq stack to handle this */ 290 290 cursp = (void *)(current_stack_pointer & ~(THREAD_SIZE - 1)); 291 291 irqsp = hardirq_ctx[raw_smp_processor_id()]; 292 - sirqsp = softirq_ctx[raw_smp_processor_id()]; 293 292 294 293 /* Already there ? If not switch stack and call */ 295 - if (unlikely(cursp == irqsp || cursp == sirqsp)) 294 + if (unlikely(cursp == irqsp)) 296 295 __do_irq(regs, current_stack_pointer); 297 296 else 298 297 call_do_irq(regs, irqsp);
+8 -2
arch/powerpc/kernel/kprobes.c
··· 134 134 if (!page) 135 135 return NULL; 136 136 137 - if (strict_module_rwx_enabled()) 138 - set_memory_rox((unsigned long)page, 1); 137 + if (strict_module_rwx_enabled()) { 138 + int err = set_memory_rox((unsigned long)page, 1); 139 139 140 + if (err) 141 + goto error; 142 + } 140 143 return page; 144 + error: 145 + module_memfree(page); 146 + return NULL; 141 147 } 142 148 143 149 int arch_prepare_kprobe(struct kprobe *p)
+27 -5
arch/powerpc/kernel/prom.c
··· 151 151 * pa-features property is missing, or a 1/0 to indicate if the feature 152 152 * is supported/not supported. Note that the bit numbers are 153 153 * big-endian to match the definition in PAPR. 154 + * Note: the 'clear' flag clears the feature if the bit is set in the 155 + * ibm,pa/pi-features property, it does not set the feature if the 156 + * bit is clear. 154 157 */ 155 158 struct ibm_feature { 156 159 unsigned long cpu_features; /* CPU_FTR_xxx bit */ ··· 162 159 unsigned int cpu_user_ftrs2; /* PPC_FEATURE2_xxx bit */ 163 160 unsigned char pabyte; /* byte number in ibm,pa/pi-features */ 164 161 unsigned char pabit; /* bit number (big-endian) */ 165 - unsigned char invert; /* if 1, pa bit set => clear feature */ 162 + unsigned char clear; /* if 1, pa bit set => clear feature */ 166 163 }; 167 164 168 165 static struct ibm_feature ibm_pa_features[] __initdata = { ··· 196 193 */ 197 194 static struct ibm_feature ibm_pi_features[] __initdata = { 198 195 { .pabyte = 0, .pabit = 3, .mmu_features = MMU_FTR_NX_DSI }, 196 + { .pabyte = 0, .pabit = 4, .cpu_features = CPU_FTR_DBELL, .clear = 1 }, 199 197 }; 200 198 201 199 static void __init scan_features(unsigned long node, const unsigned char *ftrs, ··· 224 220 if (fp->pabyte >= ftrs[0]) 225 221 continue; 226 222 bit = (ftrs[2 + fp->pabyte] >> (7 - fp->pabit)) & 1; 227 - if (bit ^ fp->invert) { 223 + if (bit && !fp->clear) { 228 224 cur_cpu_spec->cpu_features |= fp->cpu_features; 229 225 cur_cpu_spec->cpu_user_features |= fp->cpu_user_ftrs; 230 226 cur_cpu_spec->cpu_user_features2 |= fp->cpu_user_ftrs2; 231 227 cur_cpu_spec->mmu_features |= fp->mmu_features; 232 - } else { 228 + } else if (bit == fp->clear) { 233 229 cur_cpu_spec->cpu_features &= ~fp->cpu_features; 234 230 cur_cpu_spec->cpu_user_features &= ~fp->cpu_user_ftrs; 235 231 cur_cpu_spec->cpu_user_features2 &= ~fp->cpu_user_ftrs2; ··· 372 368 if (found < 0) 373 369 return 0; 374 370 375 - DBG("boot cpu: logical %d physical %d\n", found, 376 - be32_to_cpu(intserv[found_thread])); 377 371 boot_cpuid = found; 378 372 379 373 if (IS_ENABLED(CONFIG_PPC64)) 380 374 boot_cpu_hwid = be32_to_cpu(intserv[found_thread]); 375 + 376 + if (nr_cpu_ids % nthreads != 0) { 377 + set_nr_cpu_ids(ALIGN(nr_cpu_ids, nthreads)); 378 + pr_warn("nr_cpu_ids was not a multiple of threads_per_core, adjusted to %d\n", 379 + nr_cpu_ids); 380 + } 381 + 382 + if (boot_cpuid >= nr_cpu_ids) { 383 + // Remember boot core for smp_setup_cpu_maps() 384 + boot_core_hwid = be32_to_cpu(intserv[0]); 385 + 386 + pr_warn("Boot CPU %d (core hwid %d) >= nr_cpu_ids, adjusted boot CPU to %d\n", 387 + boot_cpuid, boot_core_hwid, found_thread); 388 + 389 + // Adjust boot CPU to appear on logical core 0 390 + boot_cpuid = found_thread; 391 + } 392 + 393 + DBG("boot cpu: logical %d physical %d\n", boot_cpuid, 394 + be32_to_cpu(intserv[found_thread])); 381 395 382 396 /* 383 397 * PAPR defines "logical" PVR values for cpus that
+9 -1
arch/powerpc/kernel/prom_init.c
··· 947 947 } __packed; 948 948 949 949 struct ibm_arch_vec { 950 - struct { __be32 mask, val; } pvrs[14]; 950 + struct { __be32 mask, val; } pvrs[16]; 951 951 952 952 u8 num_vectors; 953 953 ··· 1006 1006 { 1007 1007 .mask = cpu_to_be32(0xffff0000), /* POWER10 */ 1008 1008 .val = cpu_to_be32(0x00800000), 1009 + }, 1010 + { 1011 + .mask = cpu_to_be32(0xffff0000), /* POWER11 */ 1012 + .val = cpu_to_be32(0x00820000), 1013 + }, 1014 + { 1015 + .mask = cpu_to_be32(0xffffffff), /* P11 compliant */ 1016 + .val = cpu_to_be32(0x0f000007), 1009 1017 }, 1010 1018 { 1011 1019 .mask = cpu_to_be32(0xffffffff), /* all 3.1-compliant */
+6 -2
arch/powerpc/kernel/secure_boot.c
··· 32 32 if (enabled) 33 33 goto out; 34 34 35 - if (!of_property_read_u32(of_root, "ibm,secure-boot", &secureboot)) 35 + node = of_find_node_by_path("/"); 36 + if (!of_property_read_u32(node, "ibm,secure-boot", &secureboot)) 36 37 enabled = (secureboot > 1); 38 + of_node_put(node); 37 39 38 40 out: 39 41 pr_info("Secure boot mode %s\n", enabled ? "enabled" : "disabled"); ··· 56 54 if (enabled) 57 55 goto out; 58 56 59 - if (!of_property_read_u32(of_root, "ibm,trusted-boot", &trustedboot)) 57 + node = of_find_node_by_path("/"); 58 + if (!of_property_read_u32(node, "ibm,trusted-boot", &trustedboot)) 60 59 enabled = (trustedboot > 0); 60 + of_node_put(node); 61 61 62 62 out: 63 63 pr_info("Trusted boot mode %s\n", enabled ? "enabled" : "disabled");
+43 -17
arch/powerpc/kernel/setup-common.c
··· 85 85 86 86 int boot_cpuid = -1; 87 87 EXPORT_SYMBOL_GPL(boot_cpuid); 88 + int __initdata boot_core_hwid = -1; 88 89 89 90 #ifdef CONFIG_PPC64 90 91 int boot_cpu_hwid = -1; ··· 412 411 413 412 u32 *cpu_to_phys_id = NULL; 414 413 414 + static int assign_threads(unsigned int cpu, unsigned int nthreads, bool present, 415 + const __be32 *hw_ids) 416 + { 417 + for (int i = 0; i < nthreads && cpu < nr_cpu_ids; i++) { 418 + __be32 hwid; 419 + 420 + hwid = be32_to_cpu(hw_ids[i]); 421 + 422 + DBG(" thread %d -> cpu %d (hard id %d)\n", i, cpu, hwid); 423 + 424 + set_cpu_present(cpu, present); 425 + set_cpu_possible(cpu, true); 426 + cpu_to_phys_id[cpu] = hwid; 427 + cpu++; 428 + } 429 + 430 + return cpu; 431 + } 432 + 415 433 /** 416 434 * setup_cpu_maps - initialize the following cpu maps: 417 435 * cpu_possible_mask ··· 466 446 for_each_node_by_type(dn, "cpu") { 467 447 const __be32 *intserv; 468 448 __be32 cpu_be; 469 - int j, len; 449 + int len; 470 450 471 451 DBG(" * %pOF...\n", dn); 472 452 ··· 488 468 489 469 nthreads = len / sizeof(int); 490 470 491 - for (j = 0; j < nthreads && cpu < nr_cpu_ids; j++) { 492 - bool avail; 471 + bool avail = of_device_is_available(dn); 472 + if (!avail) 473 + avail = !of_property_match_string(dn, 474 + "enable-method", "spin-table"); 493 475 494 - DBG(" thread %d -> cpu %d (hard id %d)\n", 495 - j, cpu, be32_to_cpu(intserv[j])); 476 + if (boot_core_hwid >= 0) { 477 + if (cpu == 0) { 478 + pr_info("Skipping CPU node %pOF to allow for boot core.\n", dn); 479 + cpu = nthreads; 480 + continue; 481 + } 496 482 497 - avail = of_device_is_available(dn); 498 - if (!avail) 499 - avail = !of_property_match_string(dn, 500 - "enable-method", "spin-table"); 501 - 502 - set_cpu_present(cpu, avail); 503 - set_cpu_possible(cpu, true); 504 - cpu_to_phys_id[cpu] = be32_to_cpu(intserv[j]); 505 - cpu++; 506 - } 507 - 508 - if (cpu >= nr_cpu_ids) { 483 + if (be32_to_cpu(intserv[0]) == boot_core_hwid) { 484 + pr_info("Renumbered boot core %pOF to logical 0\n", dn); 485 + assign_threads(0, nthreads, avail, intserv); 486 + of_node_put(dn); 487 + break; 488 + } 489 + } else if (cpu >= nr_cpu_ids) { 509 490 of_node_put(dn); 510 491 break; 511 492 } 493 + 494 + if (cpu < nr_cpu_ids) 495 + cpu = assign_threads(cpu, nthreads, avail, intserv); 512 496 } 513 497 514 498 /* If no SMT supported, nthreads is forced to 1 */ ··· 639 615 machine_id++) { 640 616 DBG(" %s ...\n", machine_id->name); 641 617 if (machine_id->compatible && !of_machine_is_compatible(machine_id->compatible)) 618 + continue; 619 + if (machine_id->compatibles && !of_machine_compatible_match(machine_id->compatibles)) 642 620 continue; 643 621 memcpy(&ppc_md, machine_id, sizeof(struct machdep_calls)); 644 622 if (ppc_md.probe && !ppc_md.probe())
+1 -1
arch/powerpc/kernel/syscall.c
··· 31 31 user_exit_irqoff(); 32 32 33 33 BUG_ON(regs_is_unrecoverable(regs)); 34 - BUG_ON(!(regs->msr & MSR_PR)); 34 + BUG_ON(!user_mode(regs)); 35 35 BUG_ON(arch_irq_disabled_regs(regs)); 36 36 37 37 #ifdef CONFIG_PPC_PKEY
+2 -2
arch/powerpc/kernel/traps.c
··· 404 404 return; 405 405 if (!(regs->msr & MSR_HV)) 406 406 return; 407 - if (regs->msr & MSR_PR) 407 + if (user_mode(regs)) 408 408 return; 409 409 410 410 /* ··· 1510 1510 if (!is_kernel_addr(bugaddr) && !(regs->msr & MSR_IR)) 1511 1511 bugaddr += PAGE_OFFSET; 1512 1512 1513 - if (!(regs->msr & MSR_PR) && /* not user-mode */ 1513 + if (!user_mode(regs) && 1514 1514 report_bug(bugaddr, regs) == BUG_TRAP_TYPE_WARN) { 1515 1515 regs_add_return_ip(regs, 4); 1516 1516 return;
+5 -3
arch/powerpc/kexec/ranges.c
··· 385 385 int add_reserved_mem_ranges(struct crash_mem **mem_ranges) 386 386 { 387 387 int n_mem_addr_cells, n_mem_size_cells, i, len, cells, ret = 0; 388 + struct device_node *root = of_find_node_by_path("/"); 388 389 const __be32 *prop; 389 390 390 - prop = of_get_property(of_root, "reserved-ranges", &len); 391 + prop = of_get_property(root, "reserved-ranges", &len); 392 + n_mem_addr_cells = of_n_addr_cells(root); 393 + n_mem_size_cells = of_n_size_cells(root); 394 + of_node_put(root); 391 395 if (!prop) 392 396 return 0; 393 397 394 - n_mem_addr_cells = of_n_addr_cells(of_root); 395 - n_mem_size_cells = of_n_size_cells(of_root); 396 398 cells = n_mem_addr_cells + n_mem_size_cells; 397 399 398 400 /* Each reserved range is an (address,size) pair */
+2
arch/powerpc/kexec/relocate_32.S
··· 8 8 * Author: Suzuki Poulose <suzuki@in.ibm.com> 9 9 */ 10 10 11 + #include <linux/objtool.h> 11 12 #include <asm/reg.h> 12 13 #include <asm/page.h> 13 14 #include <asm/mmu.h> ··· 350 349 cmpwi r10, PPC47x_TLB0_4K 351 350 bne 0f 352 351 li r10, 0x1000 /* r10 = 4k */ 352 + ANNOTATE_INTRA_FUNCTION_CALL 353 353 bl 1f 354 354 355 355 0:
+1
arch/powerpc/kvm/book3s_hv.c
··· 444 444 guest_pcr_bit = PCR_ARCH_300; 445 445 break; 446 446 case PVR_ARCH_31: 447 + case PVR_ARCH_31_P11: 447 448 guest_pcr_bit = PCR_ARCH_31; 448 449 break; 449 450 default:
+1 -1
arch/powerpc/lib/Makefile
··· 76 76 obj-$(CONFIG_FTR_FIXUP_SELFTEST) += feature-fixups-test.o 77 77 78 78 obj-$(CONFIG_ALTIVEC) += xor_vmx.o xor_vmx_glue.o 79 - CFLAGS_xor_vmx.o += -maltivec $(call cc-option,-mabi=altivec) 79 + CFLAGS_xor_vmx.o += -mhard-float -maltivec $(call cc-option,-mabi=altivec) 80 80 # Enable <altivec.h> 81 81 CFLAGS_xor_vmx.o += -isystem $(shell $(CC) -print-file-name=include) 82 82
+1 -11
arch/powerpc/lib/copypage_power7.S
··· 27 27 #endif 28 28 ori r10,r7,1 /* stream=1 */ 29 29 30 - lis r8,0x8000 /* GO=1 */ 31 - clrldi r8,r8,32 32 - 33 - /* setup read stream 0 */ 34 - dcbt 0,r4,0b01000 /* addr from */ 35 - dcbt 0,r7,0b01010 /* length and depth from */ 36 - /* setup write stream 1 */ 37 - dcbtst 0,r9,0b01000 /* addr to */ 38 - dcbtst 0,r10,0b01010 /* length and depth to */ 39 - eieio 40 - dcbt 0,r8,0b01010 /* all streams GO */ 30 + DCBT_SETUP_STREAMS(r4, r7, r9, r10, r8) 41 31 42 32 #ifdef CONFIG_ALTIVEC 43 33 mflr r0
+1 -11
arch/powerpc/lib/copyuser_power7.S
··· 298 298 or r7,r7,r0 299 299 ori r10,r7,1 /* stream=1 */ 300 300 301 - lis r8,0x8000 /* GO=1 */ 302 - clrldi r8,r8,32 303 - 304 - /* setup read stream 0 */ 305 - dcbt 0,r6,0b01000 /* addr from */ 306 - dcbt 0,r7,0b01010 /* length and depth from */ 307 - /* setup write stream 1 */ 308 - dcbtst 0,r9,0b01000 /* addr to */ 309 - dcbtst 0,r10,0b01010 /* length and depth to */ 310 - eieio 311 - dcbt 0,r8,0b01010 /* all streams GO */ 301 + DCBT_SETUP_STREAMS(r6, r7, r9, r10, r8) 312 302 313 303 beq cr1,.Lunwind_stack_nonvmx_copy 314 304
+1 -9
arch/powerpc/lib/memcpy_power7.S
··· 244 244 or r7,r7,r0 245 245 ori r10,r7,1 /* stream=1 */ 246 246 247 - lis r8,0x8000 /* GO=1 */ 248 - clrldi r8,r8,32 249 - 250 - dcbt 0,r6,0b01000 251 - dcbt 0,r7,0b01010 252 - dcbtst 0,r9,0b01000 253 - dcbtst 0,r10,0b01010 254 - eieio 255 - dcbt 0,r8,0b01010 /* GO */ 247 + DCBT_SETUP_STREAMS(r6, r7, r9, r10, r8) 256 248 257 249 beq cr1,.Lunwind_stack_nonvmx_copy 258 250
+11 -12
arch/powerpc/lib/sstep.c
··· 1429 1429 return 1; 1430 1430 1431 1431 case 18: /* rfid, scary */ 1432 - if (regs->msr & MSR_PR) 1432 + if (user_mode(regs)) 1433 1433 goto priv; 1434 1434 op->type = RFI; 1435 1435 return 0; ··· 1742 1742 return 1; 1743 1743 #endif 1744 1744 case 83: /* mfmsr */ 1745 - if (regs->msr & MSR_PR) 1745 + if (user_mode(regs)) 1746 1746 goto priv; 1747 1747 op->type = MFMSR; 1748 1748 op->reg = rd; 1749 1749 return 0; 1750 1750 case 146: /* mtmsr */ 1751 - if (regs->msr & MSR_PR) 1751 + if (user_mode(regs)) 1752 1752 goto priv; 1753 1753 op->type = MTMSR; 1754 1754 op->reg = rd; ··· 1756 1756 return 0; 1757 1757 #ifdef CONFIG_PPC64 1758 1758 case 178: /* mtmsrd */ 1759 - if (regs->msr & MSR_PR) 1759 + if (user_mode(regs)) 1760 1760 goto priv; 1761 1761 op->type = MTMSR; 1762 1762 op->reg = rd; ··· 3437 3437 * stored in the thread_struct. If the instruction is in 3438 3438 * the kernel, we must not touch the state in the thread_struct. 3439 3439 */ 3440 - if (!(regs->msr & MSR_PR) && !(regs->msr & MSR_FP)) 3440 + if (!user_mode(regs) && !(regs->msr & MSR_FP)) 3441 3441 return 0; 3442 3442 err = do_fp_load(op, ea, regs, cross_endian); 3443 3443 break; 3444 3444 #endif 3445 3445 #ifdef CONFIG_ALTIVEC 3446 3446 case LOAD_VMX: 3447 - if (!(regs->msr & MSR_PR) && !(regs->msr & MSR_VEC)) 3447 + if (!user_mode(regs) && !(regs->msr & MSR_VEC)) 3448 3448 return 0; 3449 3449 err = do_vec_load(op->reg, ea, size, regs, cross_endian); 3450 3450 break; ··· 3459 3459 */ 3460 3460 if (op->reg >= 32 && (op->vsx_flags & VSX_CHECK_VEC)) 3461 3461 msrbit = MSR_VEC; 3462 - if (!(regs->msr & MSR_PR) && !(regs->msr & msrbit)) 3462 + if (!user_mode(regs) && !(regs->msr & msrbit)) 3463 3463 return 0; 3464 3464 err = do_vsx_load(op, ea, regs, cross_endian); 3465 3465 break; ··· 3495 3495 } 3496 3496 #endif 3497 3497 if ((op->type & UPDATE) && size == sizeof(long) && 3498 - op->reg == 1 && op->update_reg == 1 && 3499 - !(regs->msr & MSR_PR) && 3498 + op->reg == 1 && op->update_reg == 1 && !user_mode(regs) && 3500 3499 ea >= regs->gpr[1] - STACK_INT_FRAME_SIZE) { 3501 3500 err = handle_stack_update(ea, regs); 3502 3501 break; ··· 3507 3508 3508 3509 #ifdef CONFIG_PPC_FPU 3509 3510 case STORE_FP: 3510 - if (!(regs->msr & MSR_PR) && !(regs->msr & MSR_FP)) 3511 + if (!user_mode(regs) && !(regs->msr & MSR_FP)) 3511 3512 return 0; 3512 3513 err = do_fp_store(op, ea, regs, cross_endian); 3513 3514 break; 3514 3515 #endif 3515 3516 #ifdef CONFIG_ALTIVEC 3516 3517 case STORE_VMX: 3517 - if (!(regs->msr & MSR_PR) && !(regs->msr & MSR_VEC)) 3518 + if (!user_mode(regs) && !(regs->msr & MSR_VEC)) 3518 3519 return 0; 3519 3520 err = do_vec_store(op->reg, ea, size, regs, cross_endian); 3520 3521 break; ··· 3529 3530 */ 3530 3531 if (op->reg >= 32 && (op->vsx_flags & VSX_CHECK_VEC)) 3531 3532 msrbit = MSR_VEC; 3532 - if (!(regs->msr & MSR_PR) && !(regs->msr & msrbit)) 3533 + if (!user_mode(regs) && !(regs->msr & msrbit)) 3533 3534 return 0; 3534 3535 err = do_vsx_store(op, ea, regs, cross_endian); 3535 3536 break;
+6 -9
arch/powerpc/mm/book3s64/hash_hugepage.c
··· 59 59 60 60 rflags = htab_convert_pte_flags(new_pmd, flags); 61 61 62 - #if 0 63 - if (!cpu_has_feature(CPU_FTR_COHERENT_ICACHE)) { 62 + /* 63 + * THPs are only supported on platforms that can do mixed page size 64 + * segments (MPSS) and all such platforms have coherent icache. Hence we 65 + * don't need to do lazy icache flush (hash_page_do_lazy_icache()) on 66 + * noexecute fault. 67 + */ 64 68 65 - /* 66 - * No CPU has hugepages but lacks no execute, so we 67 - * don't need to worry about that case 68 - */ 69 - rflags = hash_page_do_lazy_icache(rflags, __pte(old_pte), trap); 70 - } 71 - #endif 72 69 /* 73 70 * Find the slot index details for this ea, using base page size. 74 71 */
+2 -1
arch/powerpc/mm/book3s64/hash_utils.c
··· 2172 2172 mmu_kernel_ssize, 0); 2173 2173 } 2174 2174 2175 - void hash__kernel_map_pages(struct page *page, int numpages, int enable) 2175 + int hash__kernel_map_pages(struct page *page, int numpages, int enable) 2176 2176 { 2177 2177 unsigned long flags, vaddr, lmi; 2178 2178 int i; ··· 2189 2189 kernel_unmap_linear_page(vaddr, lmi); 2190 2190 } 2191 2191 local_irq_restore(flags); 2192 + return 0; 2192 2193 } 2193 2194 #endif /* CONFIG_DEBUG_PAGEALLOC || CONFIG_KFENCE */ 2194 2195
-14
arch/powerpc/mm/book3s64/radix_pgtable.c
··· 1339 1339 #endif 1340 1340 #endif 1341 1341 1342 - #if defined(CONFIG_DEBUG_PAGEALLOC) || defined(CONFIG_KFENCE) 1343 - void radix__kernel_map_pages(struct page *page, int numpages, int enable) 1344 - { 1345 - unsigned long addr; 1346 - 1347 - addr = (unsigned long)page_address(page); 1348 - 1349 - if (enable) 1350 - set_memory_p(addr, numpages); 1351 - else 1352 - set_memory_np(addr, numpages); 1353 - } 1354 - #endif 1355 - 1356 1342 #ifdef CONFIG_TRANSPARENT_HUGEPAGE 1357 1343 1358 1344 unsigned long radix__pmd_hugepage_update(struct mm_struct *mm, unsigned long addr,
+5 -5
arch/powerpc/mm/drmem.c
··· 393 393 int walk_drmem_lmbs(struct device_node *dn, void *data, 394 394 int (*func)(struct drmem_lmb *, const __be32 **, void *)) 395 395 { 396 + struct device_node *root = of_find_node_by_path("/"); 396 397 const __be32 *prop, *usm; 397 398 int ret = -ENODEV; 398 399 399 - if (!of_root) 400 + if (!root) 400 401 return ret; 401 402 402 403 /* Get the address & size cells */ 403 - of_node_get(of_root); 404 - n_root_addr_cells = of_n_addr_cells(of_root); 405 - n_root_size_cells = of_n_size_cells(of_root); 406 - of_node_put(of_root); 404 + n_root_addr_cells = of_n_addr_cells(root); 405 + n_root_size_cells = of_n_size_cells(root); 406 + of_node_put(root); 407 407 408 408 if (init_drmem_lmb_size(dn)) 409 409 return ret;
+2
arch/powerpc/mm/mmu_decl.h
··· 180 180 int create_section_mapping(unsigned long start, unsigned long end, 181 181 int nid, pgprot_t prot); 182 182 #endif 183 + 184 + int hash__kernel_map_pages(struct page *page, int numpages, int enable);
+4 -2
arch/powerpc/mm/numa.c
··· 1111 1111 1112 1112 static void __init find_possible_nodes(void) 1113 1113 { 1114 - struct device_node *rtas; 1114 + struct device_node *rtas, *root; 1115 1115 const __be32 *domains = NULL; 1116 1116 int prop_length, max_nodes; 1117 1117 u32 i; ··· 1132 1132 * If the LPAR is migratable, new nodes might be activated after a LPM, 1133 1133 * so we should consider the max number in that case. 1134 1134 */ 1135 - if (!of_get_property(of_root, "ibm,migratable-partition", NULL)) 1135 + root = of_find_node_by_path("/"); 1136 + if (!of_get_property(root, "ibm,migratable-partition", NULL)) 1136 1137 domains = of_get_property(rtas, 1137 1138 "ibm,current-associativity-domains", 1138 1139 &prop_length); 1140 + of_node_put(root); 1139 1141 if (!domains) { 1140 1142 domains = of_get_property(rtas, "ibm,max-associativity-domains", 1141 1143 &prop_length);
+28
arch/powerpc/mm/pageattr.c
··· 14 14 #include <asm/page.h> 15 15 #include <asm/pgtable.h> 16 16 17 + #include <mm/mmu_decl.h> 17 18 18 19 static pte_basic_t pte_update_delta(pte_t *ptep, unsigned long addr, 19 20 unsigned long old, unsigned long new) ··· 38 37 case SET_MEMORY_RO: 39 38 /* Don't clear DIRTY bit */ 40 39 pte_update_delta(ptep, addr, _PAGE_KERNEL_RW & ~_PAGE_DIRTY, _PAGE_KERNEL_RO); 40 + break; 41 + case SET_MEMORY_ROX: 42 + /* Don't clear DIRTY bit */ 43 + pte_update_delta(ptep, addr, _PAGE_KERNEL_RW & ~_PAGE_DIRTY, _PAGE_KERNEL_ROX); 41 44 break; 42 45 case SET_MEMORY_RW: 43 46 pte_update_delta(ptep, addr, _PAGE_KERNEL_RO, _PAGE_KERNEL_RW); ··· 102 97 return apply_to_existing_page_range(&init_mm, start, size, 103 98 change_page_attr, (void *)action); 104 99 } 100 + 101 + #if defined(CONFIG_DEBUG_PAGEALLOC) || defined(CONFIG_KFENCE) 102 + #ifdef CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC 103 + void __kernel_map_pages(struct page *page, int numpages, int enable) 104 + { 105 + int err; 106 + unsigned long addr = (unsigned long)page_address(page); 107 + 108 + if (PageHighMem(page)) 109 + return; 110 + 111 + if (IS_ENABLED(CONFIG_PPC_BOOK3S_64) && !radix_enabled()) 112 + err = hash__kernel_map_pages(page, numpages, enable); 113 + else if (enable) 114 + err = set_memory_p(addr, numpages); 115 + else 116 + err = set_memory_np(addr, numpages); 117 + 118 + if (err) 119 + panic("%s: changing memory protections failed\n", __func__); 120 + } 121 + #endif 122 + #endif
-15
arch/powerpc/mm/pgtable_32.c
··· 167 167 set_memory_ro((unsigned long)_stext, numpages); 168 168 } 169 169 #endif 170 - 171 - #if defined(CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC) && defined(CONFIG_DEBUG_PAGEALLOC) 172 - void __kernel_map_pages(struct page *page, int numpages, int enable) 173 - { 174 - unsigned long addr = (unsigned long)page_address(page); 175 - 176 - if (PageHighMem(page)) 177 - return; 178 - 179 - if (enable) 180 - set_memory_p(addr, numpages); 181 - else 182 - set_memory_np(addr, numpages); 183 - } 184 - #endif /* CONFIG_DEBUG_PAGEALLOC */
+3 -1
arch/powerpc/perf/core-book3s.c
··· 256 256 257 257 static inline u32 perf_flags_from_msr(struct pt_regs *regs) 258 258 { 259 - if (regs->msr & MSR_PR) 259 + if (user_mode(regs)) 260 260 return PERF_RECORD_MISC_USER; 261 261 if ((regs->msr & MSR_HV) && freeze_events_kernel != MMCR0_FCHV) 262 262 return PERF_RECORD_MISC_HYPERVISOR; ··· 2592 2592 else if (!init_power9_pmu()) 2593 2593 return 0; 2594 2594 else if (!init_power10_pmu()) 2595 + return 0; 2596 + else if (!init_power11_pmu()) 2595 2597 return 0; 2596 2598 else if (!init_ppc970_pmu()) 2597 2599 return 0;
+27 -2
arch/powerpc/perf/hv-gpci.c
··· 695 695 696 696 ret = plpar_hcall_norets(H_GET_PERF_COUNTER_INFO, 697 697 virt_to_phys(arg), HGPCI_REQ_BUFFER_SIZE); 698 + 699 + /* 700 + * ret value as 'H_PARAMETER' with detail_rc as 'GEN_BUF_TOO_SMALL', 701 + * specifies that the current buffer size cannot accommodate 702 + * all the information and a partial buffer returned. 703 + * Since in this function we are only accessing data for a given starting index, 704 + * we don't need to accommodate whole data and can get required count by 705 + * accessing first entry data. 706 + * Hence hcall fails only incase the ret value is other than H_SUCCESS or 707 + * H_PARAMETER with detail_rc value as GEN_BUF_TOO_SMALL(0x1B). 708 + */ 709 + if (ret == H_PARAMETER && be32_to_cpu(arg->params.detail_rc) == 0x1B) 710 + ret = 0; 711 + 698 712 if (ret) { 699 713 pr_devel("hcall failed: 0x%lx\n", ret); 700 714 goto out; ··· 773 759 { 774 760 u64 count; 775 761 u8 length; 762 + unsigned long ret; 776 763 777 764 /* Not our event */ 778 765 if (event->attr.type != event->pmu->type) ··· 804 789 } 805 790 806 791 /* check if the request works... */ 807 - if (single_gpci_request(event_get_request(event), 792 + ret = single_gpci_request(event_get_request(event), 808 793 event_get_starting_index(event), 809 794 event_get_secondary_index(event), 810 795 event_get_counter_info_version(event), 811 796 event_get_offset(event), 812 797 length, 813 - &count)) { 798 + &count); 799 + 800 + /* 801 + * ret value as H_AUTHORITY implies that partition is not permitted to retrieve 802 + * performance information, and required to set 803 + * "Enable Performance Information Collection" option. 804 + */ 805 + if (ret == H_AUTHORITY) 806 + return -EPERM; 807 + 808 + if (ret) { 814 809 pr_devel("gpci hcall failed\n"); 815 810 return -EINVAL; 816 811 }
+1
arch/powerpc/perf/internal.h
··· 10 10 int __init init_power8_pmu(void); 11 11 int __init init_power9_pmu(void); 12 12 int __init init_power10_pmu(void); 13 + int __init init_power11_pmu(void); 13 14 int __init init_generic_compat_pmu(void);
+27
arch/powerpc/perf/power10-pmu.c
··· 634 634 635 635 return 0; 636 636 } 637 + 638 + static struct power_pmu power11_pmu; 639 + 640 + int __init init_power11_pmu(void) 641 + { 642 + unsigned int pvr; 643 + int rc; 644 + 645 + pvr = mfspr(SPRN_PVR); 646 + if (PVR_VER(pvr) != PVR_POWER11) 647 + return -ENODEV; 648 + 649 + /* Set the PERF_REG_EXTENDED_MASK here */ 650 + PERF_REG_EXTENDED_MASK = PERF_REG_PMU_MASK_31; 651 + 652 + power11_pmu = power10_pmu; 653 + power11_pmu.name = "Power11"; 654 + 655 + rc = register_power_pmu(&power11_pmu); 656 + if (rc) 657 + return rc; 658 + 659 + /* Tell userspace that EBB is supported */ 660 + cur_cpu_spec->cpu_user_features2 |= PPC_FEATURE2_EBB; 661 + 662 + return 0; 663 + }
+3 -6
arch/powerpc/platforms/40x/ppc40x_simple.c
··· 59 59 60 60 static int __init ppc40x_probe(void) 61 61 { 62 - if (of_device_compatible_match(of_root, board)) { 63 - pci_set_flags(PCI_REASSIGN_ALL_RSRC); 64 - return 1; 65 - } 66 - 67 - return 0; 62 + pci_set_flags(PCI_REASSIGN_ALL_RSRC); 63 + return 1; 68 64 } 69 65 70 66 define_machine(ppc40x_simple) { 71 67 .name = "PowerPC 40x Platform", 68 + .compatibles = board, 72 69 .probe = ppc40x_probe, 73 70 .progress = udbg_progress, 74 71 .init_IRQ = uic_init_tree,
+1
arch/powerpc/platforms/44x/warp.c
··· 8 8 #include <linux/err.h> 9 9 #include <linux/init.h> 10 10 #include <linux/of_platform.h> 11 + #include <linux/platform_device.h> 11 12 #include <linux/kthread.h> 12 13 #include <linux/leds.h> 13 14 #include <linux/i2c.h>
+1 -3
arch/powerpc/platforms/512x/mpc512x_generic.c
··· 32 32 */ 33 33 static int __init mpc512x_generic_probe(void) 34 34 { 35 - if (!of_device_compatible_match(of_root, board)) 36 - return 0; 37 - 38 35 mpc512x_init_early(); 39 36 40 37 return 1; ··· 39 42 40 43 define_machine(mpc512x_generic) { 41 44 .name = "MPC512x generic", 45 + .compatibles = board, 42 46 .probe = mpc512x_generic_probe, 43 47 .init = mpc512x_init, 44 48 .setup_arch = mpc512x_setup_arch,
+3 -1
arch/powerpc/platforms/52xx/efika.c
··· 195 195 196 196 static int __init efika_probe(void) 197 197 { 198 - const char *model = of_get_property(of_root, "model", NULL); 198 + struct device_node *root = of_find_node_by_path("/"); 199 + const char *model = of_get_property(root, "model", NULL); 199 200 201 + of_node_put(root); 200 202 if (model == NULL) 201 203 return 0; 202 204 if (strcmp(model, "EFIKA5K2"))
+1 -9
arch/powerpc/platforms/52xx/lite5200.c
··· 172 172 NULL, 173 173 }; 174 174 175 - /* 176 - * Called very early, MMU is off, device-tree isn't unflattened 177 - */ 178 - static int __init lite5200_probe(void) 179 - { 180 - return of_device_compatible_match(of_root, board); 181 - } 182 - 183 175 define_machine(lite5200) { 184 176 .name = "lite5200", 185 - .probe = lite5200_probe, 177 + .compatibles = board, 186 178 .setup_arch = lite5200_setup_arch, 187 179 .discover_phbs = mpc52xx_setup_pci, 188 180 .init = mpc52xx_declare_of_platform_devices,
+1 -9
arch/powerpc/platforms/52xx/mpc5200_simple.c
··· 59 59 NULL 60 60 }; 61 61 62 - /* 63 - * Called very early, MMU is off, device-tree isn't unflattened 64 - */ 65 - static int __init mpc5200_simple_probe(void) 66 - { 67 - return of_device_compatible_match(of_root, board); 68 - } 69 - 70 62 define_machine(mpc5200_simple_platform) { 71 63 .name = "mpc5200-simple-platform", 72 - .probe = mpc5200_simple_probe, 64 + .compatibles = board, 73 65 .setup_arch = mpc5200_simple_setup_arch, 74 66 .discover_phbs = mpc52xx_setup_pci, 75 67 .init = mpc52xx_declare_of_platform_devices,
+1 -9
arch/powerpc/platforms/83xx/mpc830x_rdb.c
··· 34 34 NULL 35 35 }; 36 36 37 - /* 38 - * Called very early, MMU is off, device-tree isn't unflattened 39 - */ 40 - static int __init mpc830x_rdb_probe(void) 41 - { 42 - return of_device_compatible_match(of_root, board); 43 - } 44 - 45 37 machine_device_initcall(mpc830x_rdb, mpc83xx_declare_of_platform_devices); 46 38 47 39 define_machine(mpc830x_rdb) { 48 40 .name = "MPC830x RDB", 49 - .probe = mpc830x_rdb_probe, 41 + .compatibles = board, 50 42 .setup_arch = mpc830x_rdb_setup_arch, 51 43 .discover_phbs = mpc83xx_setup_pci, 52 44 .init_IRQ = mpc83xx_ipic_init_IRQ,
+1 -9
arch/powerpc/platforms/83xx/mpc831x_rdb.c
··· 34 34 NULL 35 35 }; 36 36 37 - /* 38 - * Called very early, MMU is off, device-tree isn't unflattened 39 - */ 40 - static int __init mpc831x_rdb_probe(void) 41 - { 42 - return of_device_compatible_match(of_root, board); 43 - } 44 - 45 37 machine_device_initcall(mpc831x_rdb, mpc83xx_declare_of_platform_devices); 46 38 47 39 define_machine(mpc831x_rdb) { 48 40 .name = "MPC831x RDB", 49 - .probe = mpc831x_rdb_probe, 41 + .compatibles = board, 50 42 .setup_arch = mpc831x_rdb_setup_arch, 51 43 .discover_phbs = mpc83xx_setup_pci, 52 44 .init_IRQ = mpc83xx_ipic_init_IRQ,
+1 -9
arch/powerpc/platforms/83xx/mpc837x_rdb.c
··· 61 61 NULL 62 62 }; 63 63 64 - /* 65 - * Called very early, MMU is off, device-tree isn't unflattened 66 - */ 67 - static int __init mpc837x_rdb_probe(void) 68 - { 69 - return of_device_compatible_match(of_root, board); 70 - } 71 - 72 64 define_machine(mpc837x_rdb) { 73 65 .name = "MPC837x RDB/WLAN", 74 - .probe = mpc837x_rdb_probe, 66 + .compatibles = board, 75 67 .setup_arch = mpc837x_rdb_setup_arch, 76 68 .discover_phbs = mpc83xx_setup_pci, 77 69 .init_IRQ = mpc83xx_ipic_init_IRQ,
+2 -1
arch/powerpc/platforms/83xx/suspend.c
··· 206 206 out_be32(&pmc_regs->config1, 207 207 in_be32(&pmc_regs->config1) | PMCCR1_POWER_OFF); 208 208 209 - enable_kernel_fp(); 209 + if (IS_ENABLED(CONFIG_PPC_FPU)) 210 + enable_kernel_fp(); 210 211 211 212 mpc83xx_enter_deep_sleep(immrbase); 212 213
+1 -1
arch/powerpc/platforms/85xx/bsc913x_qds.c
··· 19 19 #include "mpc85xx.h" 20 20 #include "smp.h" 21 21 22 - void __init bsc913x_qds_pic_init(void) 22 + static void __init bsc913x_qds_pic_init(void) 23 23 { 24 24 struct mpic *mpic = mpic_alloc(NULL, 0, MPIC_BIG_ENDIAN | 25 25 MPIC_SINGLE_DEST_CPU,
+1 -1
arch/powerpc/platforms/85xx/bsc913x_rdb.c
··· 15 15 16 16 #include "mpc85xx.h" 17 17 18 - void __init bsc913x_rdb_pic_init(void) 18 + static void __init bsc913x_rdb_pic_init(void) 19 19 { 20 20 struct mpic *mpic = mpic_alloc(NULL, 0, MPIC_BIG_ENDIAN | 21 21 MPIC_SINGLE_DEST_CPU,
+1 -1
arch/powerpc/platforms/85xx/corenet_generic.c
··· 149 149 extern struct smp_ops_t smp_85xx_ops; 150 150 #endif 151 151 152 - if (of_device_compatible_match(of_root, boards)) 152 + if (of_machine_compatible_match(boards)) 153 153 return 1; 154 154 155 155 /* Check if we're running under the Freescale hypervisor */
+1 -1
arch/powerpc/platforms/85xx/ge_imp3a.c
··· 38 38 39 39 void __iomem *imp3a_regs; 40 40 41 - void __init ge_imp3a_pic_init(void) 41 + static void __init ge_imp3a_pic_init(void) 42 42 { 43 43 struct mpic *mpic; 44 44 struct device_node *np;
+2 -4
arch/powerpc/platforms/85xx/sgy_cts1000.c
··· 114 114 return ret; 115 115 } 116 116 117 - static int gpio_halt_remove(struct platform_device *pdev) 117 + static void gpio_halt_remove(struct platform_device *pdev) 118 118 { 119 119 free_irq(halt_irq, pdev); 120 120 cancel_work_sync(&gpio_halt_wq); ··· 124 124 125 125 gpiod_put(halt_gpio); 126 126 halt_gpio = NULL; 127 - 128 - return 0; 129 127 } 130 128 131 129 static const struct of_device_id gpio_halt_match[] = { ··· 143 145 .of_match_table = gpio_halt_match, 144 146 }, 145 147 .probe = gpio_halt_probe, 146 - .remove = gpio_halt_remove, 148 + .remove_new = gpio_halt_remove, 147 149 }; 148 150 149 151 module_platform_driver(gpio_halt_driver);
+1 -9
arch/powerpc/platforms/85xx/tqm85xx.c
··· 112 112 NULL 113 113 }; 114 114 115 - /* 116 - * Called very early, device-tree isn't unflattened 117 - */ 118 - static int __init tqm85xx_probe(void) 119 - { 120 - return of_device_compatible_match(of_root, board); 121 - } 122 - 123 115 define_machine(tqm85xx) { 124 116 .name = "TQM85xx", 125 - .probe = tqm85xx_probe, 117 + .compatibles = board, 126 118 .setup_arch = tqm85xx_setup_arch, 127 119 .init_IRQ = tqm85xx_pic_init, 128 120 .show_cpuinfo = tqm85xx_show_cpuinfo,
+4 -4
arch/powerpc/platforms/amigaone/setup.c
··· 25 25 26 26 extern void __flush_disable_L1(void); 27 27 28 - void amigaone_show_cpuinfo(struct seq_file *m) 28 + static void amigaone_show_cpuinfo(struct seq_file *m) 29 29 { 30 30 seq_printf(m, "vendor\t\t: Eyetech Ltd.\n"); 31 31 } ··· 65 65 return 0; 66 66 } 67 67 68 - void __init amigaone_setup_arch(void) 68 + static void __init amigaone_setup_arch(void) 69 69 { 70 70 if (ppc_md.progress) 71 71 ppc_md.progress("Linux/PPC "UTS_RELEASE"\n", 0); ··· 83 83 BUG_ON(phb != 0); 84 84 } 85 85 86 - void __init amigaone_init_IRQ(void) 86 + static void __init amigaone_init_IRQ(void) 87 87 { 88 88 struct device_node *pic, *np = NULL; 89 89 const unsigned long *prop = NULL; ··· 123 123 } 124 124 machine_device_initcall(amigaone, request_isa_regions); 125 125 126 - void __noreturn amigaone_restart(char *cmd) 126 + static void __noreturn amigaone_restart(char *cmd) 127 127 { 128 128 local_irq_disable(); 129 129
-3
arch/powerpc/platforms/embedded6xx/linkstation.c
··· 99 99 mpic_init(mpic); 100 100 } 101 101 102 - extern void avr_uart_configure(void); 103 - extern void avr_uart_send(const char); 104 - 105 102 static void __noreturn linkstation_restart(char *cmd) 106 103 { 107 104 local_irq_disable();
+3
arch/powerpc/platforms/embedded6xx/mpc10x.h
··· 156 156 /* For MPC107 boards that use the built-in openpic */ 157 157 void mpc10x_set_openpic(void); 158 158 159 + void avr_uart_configure(void); 160 + void avr_uart_send(const char c); 161 + 159 162 #endif /* __PPC_KERNEL_MPC10X_H */
+2 -4
arch/powerpc/platforms/pasemi/gpio_mdio.c
··· 260 260 } 261 261 262 262 263 - static int gpio_mdio_remove(struct platform_device *dev) 263 + static void gpio_mdio_remove(struct platform_device *dev) 264 264 { 265 265 struct mii_bus *bus = dev_get_drvdata(&dev->dev); 266 266 ··· 271 271 kfree(bus->priv); 272 272 bus->priv = NULL; 273 273 mdiobus_free(bus); 274 - 275 - return 0; 276 274 } 277 275 278 276 static const struct of_device_id gpio_mdio_match[] = ··· 285 287 static struct platform_driver gpio_mdio_driver = 286 288 { 287 289 .probe = gpio_mdio_probe, 288 - .remove = gpio_mdio_remove, 290 + .remove_new = gpio_mdio_remove, 289 291 .driver = { 290 292 .name = "gpio-mdio-bitbang", 291 293 .of_match_table = gpio_mdio_match,
+3 -1
arch/powerpc/platforms/pasemi/pci.c
··· 270 270 271 271 void __init pas_pci_init(void) 272 272 { 273 + struct device_node *root = of_find_node_by_path("/"); 273 274 struct device_node *np; 274 275 int res; 275 276 276 277 pci_set_flags(PCI_SCAN_ALL_PCIE_DEVS); 277 278 278 - np = of_find_compatible_node(of_root, NULL, "pasemi,rootbus"); 279 + np = of_find_compatible_node(root, NULL, "pasemi,rootbus"); 279 280 if (np) { 280 281 res = pas_add_bridge(np); 281 282 of_node_put(np); 282 283 } 284 + of_node_put(root); 283 285 } 284 286 285 287 void __iomem *__init pasemi_pci_getcfgaddr(struct pci_dev *dev, int offset)
+1 -1
arch/powerpc/platforms/powermac/Kconfig
··· 2 2 config PPC_PMAC 3 3 bool "Apple PowerMac based machines" 4 4 depends on PPC_BOOK3S && CPU_BIG_ENDIAN 5 - select ADB_CUDA if POWER_RESET && PPC32 5 + select ADB_CUDA if POWER_RESET && ADB 6 6 select MPIC 7 7 select FORCE_PCI 8 8 select PPC_INDIRECT_PCI if PPC32
-2
arch/powerpc/platforms/powermac/feature.c
··· 2333 2333 PMAC_TYPE_POWERMAC_G5, g5_features, 2334 2334 0, 2335 2335 }, 2336 - #ifdef CONFIG_PPC64 2337 2336 { "PowerMac7,3", "PowerMac G5", 2338 2337 PMAC_TYPE_POWERMAC_G5, g5_features, 2339 2338 0, ··· 2357 2358 PMAC_TYPE_XSERVE_G5, g5_features, 2358 2359 0, 2359 2360 }, 2360 - #endif /* CONFIG_PPC64 */ 2361 2361 #endif /* CONFIG_PPC64 */ 2362 2362 }; 2363 2363
+2 -3
arch/powerpc/platforms/powernv/opal-prd.c
··· 425 425 return 0; 426 426 } 427 427 428 - static int opal_prd_remove(struct platform_device *pdev) 428 + static void opal_prd_remove(struct platform_device *pdev) 429 429 { 430 430 misc_deregister(&opal_prd_dev); 431 431 opal_message_notifier_unregister(OPAL_MSG_PRD, &opal_prd_event_nb); 432 432 opal_message_notifier_unregister(OPAL_MSG_PRD2, &opal_prd_event_nb2); 433 - return 0; 434 433 } 435 434 436 435 static const struct of_device_id opal_prd_match[] = { ··· 443 444 .of_match_table = opal_prd_match, 444 445 }, 445 446 .probe = opal_prd_probe, 446 - .remove = opal_prd_remove, 447 + .remove_new = opal_prd_remove, 447 448 }; 448 449 449 450 module_platform_driver(opal_prd_driver);
+167 -131
arch/powerpc/platforms/ps3/hvcall.S
··· 9 9 10 10 #include <asm/processor.h> 11 11 #include <asm/ppc_asm.h> 12 + #include <asm/ptrace.h> 12 13 13 14 #define lv1call .long 0x44000022; extsw r3, r3 14 15 ··· 17 16 _GLOBAL(_##API_NAME) \ 18 17 \ 19 18 mflr r0; \ 20 - std r0, 16(r1); \ 19 + std r0, LRSAVE(r1); \ 21 20 \ 21 + stdu r1, -STACK_FRAME_MIN_SIZE(r1); \ 22 22 li r11, API_NUMBER; \ 23 23 lv1call; \ 24 + addi r1, r1, STACK_FRAME_MIN_SIZE; \ 24 25 \ 25 - ld r0, 16(r1); \ 26 + ld r0, LRSAVE(r1); \ 26 27 mtlr r0; \ 27 28 blr 28 29 ··· 41 38 _GLOBAL(_##API_NAME) \ 42 39 \ 43 40 mflr r0; \ 44 - std r0, 16(r1); \ 41 + std r0, LRSAVE(r1); \ 45 42 \ 46 - stdu r3, -8(r1); \ 43 + std r3, -8(r1); \ 44 + stdu r1, -STACK_FRAME_MIN_SIZE-8(r1); \ 47 45 \ 48 46 li r11, API_NUMBER; \ 49 47 lv1call; \ 50 48 \ 51 - addi r1, r1, 8; \ 49 + addi r1, r1, STACK_FRAME_MIN_SIZE+8; \ 52 50 ld r11, -8(r1); \ 53 51 std r4, 0(r11); \ 54 52 \ 55 - ld r0, 16(r1); \ 53 + ld r0, LRSAVE(r1); \ 56 54 mtlr r0; \ 57 55 blr 58 56 ··· 61 57 _GLOBAL(_##API_NAME) \ 62 58 \ 63 59 mflr r0; \ 64 - std r0, 16(r1); \ 60 + std r0, LRSAVE(r1); \ 65 61 \ 66 62 std r3, -8(r1); \ 67 - stdu r4, -16(r1); \ 63 + std r4, -16(r1); \ 64 + stdu r1, -STACK_FRAME_MIN_SIZE-16(r1); \ 68 65 \ 69 66 li r11, API_NUMBER; \ 70 67 lv1call; \ 71 68 \ 72 - addi r1, r1, 16; \ 69 + addi r1, r1, STACK_FRAME_MIN_SIZE+16; \ 73 70 ld r11, -8(r1); \ 74 71 std r4, 0(r11); \ 75 72 ld r11, -16(r1); \ 76 73 std r5, 0(r11); \ 77 74 \ 78 - ld r0, 16(r1); \ 75 + ld r0, LRSAVE(r1); \ 79 76 mtlr r0; \ 80 77 blr 81 78 ··· 84 79 _GLOBAL(_##API_NAME) \ 85 80 \ 86 81 mflr r0; \ 87 - std r0, 16(r1); \ 82 + std r0, LRSAVE(r1); \ 88 83 \ 89 84 std r3, -8(r1); \ 90 85 std r4, -16(r1); \ 91 - stdu r5, -24(r1); \ 86 + std r5, -24(r1); \ 87 + stdu r1, -STACK_FRAME_MIN_SIZE-24(r1); \ 92 88 \ 93 89 li r11, API_NUMBER; \ 94 90 lv1call; \ 95 91 \ 96 - addi r1, r1, 24; \ 92 + addi r1, r1, STACK_FRAME_MIN_SIZE+24; \ 97 93 ld r11, -8(r1); \ 98 94 std r4, 0(r11); \ 99 95 ld r11, -16(r1); \ ··· 102 96 ld r11, -24(r1); \ 103 97 std r6, 0(r11); \ 104 98 \ 105 - ld r0, 16(r1); \ 99 + ld r0, LRSAVE(r1); \ 106 100 mtlr r0; \ 107 101 blr 108 102 ··· 110 104 _GLOBAL(_##API_NAME) \ 111 105 \ 112 106 mflr r0; \ 113 - std r0, 16(r1); \ 107 + std r0, LRSAVE(r1); \ 114 108 \ 115 109 std r3, -8(r1); \ 116 110 std r4, -16(r1); \ ··· 118 112 std r6, -32(r1); \ 119 113 std r7, -40(r1); \ 120 114 std r8, -48(r1); \ 121 - stdu r9, -56(r1); \ 115 + std r9, -56(r1); \ 116 + stdu r1, -STACK_FRAME_MIN_SIZE-56(r1); \ 122 117 \ 123 118 li r11, API_NUMBER; \ 124 119 lv1call; \ 125 120 \ 126 - addi r1, r1, 56; \ 121 + addi r1, r1, STACK_FRAME_MIN_SIZE+56; \ 127 122 ld r11, -8(r1); \ 128 123 std r4, 0(r11); \ 129 124 ld r11, -16(r1); \ ··· 140 133 ld r11, -56(r1); \ 141 134 std r10, 0(r11); \ 142 135 \ 143 - ld r0, 16(r1); \ 136 + ld r0, LRSAVE(r1); \ 144 137 mtlr r0; \ 145 138 blr 146 139 ··· 148 141 _GLOBAL(_##API_NAME) \ 149 142 \ 150 143 mflr r0; \ 151 - std r0, 16(r1); \ 144 + std r0, LRSAVE(r1); \ 152 145 \ 153 - stdu r4, -8(r1); \ 146 + std r4, -8(r1); \ 147 + stdu r1, -STACK_FRAME_MIN_SIZE-8(r1); \ 154 148 \ 155 149 li r11, API_NUMBER; \ 156 150 lv1call; \ 157 151 \ 158 - addi r1, r1, 8; \ 152 + addi r1, r1, STACK_FRAME_MIN_SIZE+8; \ 159 153 ld r11, -8(r1); \ 160 154 std r4, 0(r11); \ 161 155 \ 162 - ld r0, 16(r1); \ 156 + ld r0, LRSAVE(r1); \ 163 157 mtlr r0; \ 164 158 blr 165 159 ··· 168 160 _GLOBAL(_##API_NAME) \ 169 161 \ 170 162 mflr r0; \ 171 - std r0, 16(r1); \ 163 + std r0, LRSAVE(r1); \ 172 164 \ 173 165 std r4, -8(r1); \ 174 - stdu r5, -16(r1); \ 166 + std r5, -16(r1); \ 167 + stdu r1, -STACK_FRAME_MIN_SIZE-16(r1); \ 175 168 \ 176 169 li r11, API_NUMBER; \ 177 170 lv1call; \ 178 171 \ 179 - addi r1, r1, 16; \ 172 + addi r1, r1, STACK_FRAME_MIN_SIZE+16; \ 180 173 ld r11, -8(r1); \ 181 174 std r4, 0(r11); \ 182 175 ld r11, -16(r1); \ 183 176 std r5, 0(r11); \ 184 177 \ 185 - ld r0, 16(r1); \ 178 + ld r0, LRSAVE(r1); \ 186 179 mtlr r0; \ 187 180 blr 188 181 ··· 191 182 _GLOBAL(_##API_NAME) \ 192 183 \ 193 184 mflr r0; \ 194 - std r0, 16(r1); \ 185 + std r0, LRSAVE(r1); \ 195 186 \ 196 187 std r4, -8(r1); \ 197 188 std r5, -16(r1); \ 198 - stdu r6, -24(r1); \ 189 + std r6, -24(r1); \ 190 + stdu r1, -STACK_FRAME_MIN_SIZE-24(r1); \ 199 191 \ 200 192 li r11, API_NUMBER; \ 201 193 lv1call; \ 202 194 \ 203 - addi r1, r1, 24; \ 195 + addi r1, r1, STACK_FRAME_MIN_SIZE+24; \ 204 196 ld r11, -8(r1); \ 205 197 std r4, 0(r11); \ 206 198 ld r11, -16(r1); \ ··· 209 199 ld r11, -24(r1); \ 210 200 std r6, 0(r11); \ 211 201 \ 212 - ld r0, 16(r1); \ 202 + ld r0, LRSAVE(r1); \ 213 203 mtlr r0; \ 214 204 blr 215 205 ··· 217 207 _GLOBAL(_##API_NAME) \ 218 208 \ 219 209 mflr r0; \ 220 - std r0, 16(r1); \ 210 + std r0, LRSAVE(r1); \ 221 211 \ 222 212 std r4, -8(r1); \ 223 213 std r5, -16(r1); \ 224 214 std r6, -24(r1); \ 225 - stdu r7, -32(r1); \ 215 + std r7, -32(r1); \ 216 + stdu r1, -STACK_FRAME_MIN_SIZE-32(r1); \ 226 217 \ 227 218 li r11, API_NUMBER; \ 228 219 lv1call; \ 229 220 \ 230 - addi r1, r1, 32; \ 221 + addi r1, r1, STACK_FRAME_MIN_SIZE+32; \ 231 222 ld r11, -8(r1); \ 232 223 std r4, 0(r11); \ 233 224 ld r11, -16(r1); \ ··· 238 227 ld r11, -32(r1); \ 239 228 std r7, 0(r11); \ 240 229 \ 241 - ld r0, 16(r1); \ 230 + ld r0, LRSAVE(r1); \ 242 231 mtlr r0; \ 243 232 blr 244 233 ··· 246 235 _GLOBAL(_##API_NAME) \ 247 236 \ 248 237 mflr r0; \ 249 - std r0, 16(r1); \ 238 + std r0, LRSAVE(r1); \ 250 239 \ 251 240 std r4, -8(r1); \ 252 241 std r5, -16(r1); \ 253 242 std r6, -24(r1); \ 254 243 std r7, -32(r1); \ 255 - stdu r8, -40(r1); \ 244 + std r8, -40(r1); \ 245 + stdu r1, -STACK_FRAME_MIN_SIZE-40(r1); \ 256 246 \ 257 247 li r11, API_NUMBER; \ 258 248 lv1call; \ 259 249 \ 260 - addi r1, r1, 40; \ 250 + addi r1, r1, STACK_FRAME_MIN_SIZE+40; \ 261 251 ld r11, -8(r1); \ 262 252 std r4, 0(r11); \ 263 253 ld r11, -16(r1); \ ··· 270 258 ld r11, -40(r1); \ 271 259 std r8, 0(r11); \ 272 260 \ 273 - ld r0, 16(r1); \ 261 + ld r0, LRSAVE(r1); \ 274 262 mtlr r0; \ 275 263 blr 276 264 ··· 278 266 _GLOBAL(_##API_NAME) \ 279 267 \ 280 268 mflr r0; \ 281 - std r0, 16(r1); \ 269 + std r0, LRSAVE(r1); \ 282 270 \ 283 271 std r4, -8(r1); \ 284 272 std r5, -16(r1); \ 285 273 std r6, -24(r1); \ 286 274 std r7, -32(r1); \ 287 275 std r8, -40(r1); \ 288 - stdu r9, -48(r1); \ 276 + std r9, -48(r1); \ 277 + stdu r1, -STACK_FRAME_MIN_SIZE-48(r1); \ 289 278 \ 290 279 li r11, API_NUMBER; \ 291 280 lv1call; \ 292 281 \ 293 - addi r1, r1, 48; \ 282 + addi r1, r1, STACK_FRAME_MIN_SIZE+48; \ 294 283 ld r11, -8(r1); \ 295 284 std r4, 0(r11); \ 296 285 ld r11, -16(r1); \ ··· 305 292 ld r11, -48(r1); \ 306 293 std r9, 0(r11); \ 307 294 \ 308 - ld r0, 16(r1); \ 295 + ld r0, LRSAVE(r1); \ 309 296 mtlr r0; \ 310 297 blr 311 298 ··· 313 300 _GLOBAL(_##API_NAME) \ 314 301 \ 315 302 mflr r0; \ 316 - std r0, 16(r1); \ 303 + std r0, LRSAVE(r1); \ 317 304 \ 318 305 std r4, -8(r1); \ 319 306 std r5, -16(r1); \ ··· 321 308 std r7, -32(r1); \ 322 309 std r8, -40(r1); \ 323 310 std r9, -48(r1); \ 324 - stdu r10, -56(r1); \ 311 + std r10, -56(r1); \ 312 + stdu r1, -STACK_FRAME_MIN_SIZE-56(r1); \ 325 313 \ 326 314 li r11, API_NUMBER; \ 327 315 lv1call; \ 328 316 \ 329 - addi r1, r1, 56; \ 317 + addi r1, r1, STACK_FRAME_MIN_SIZE+56; \ 330 318 ld r11, -8(r1); \ 331 319 std r4, 0(r11); \ 332 320 ld r11, -16(r1); \ ··· 343 329 ld r11, -56(r1); \ 344 330 std r10, 0(r11); \ 345 331 \ 346 - ld r0, 16(r1); \ 332 + ld r0, LRSAVE(r1); \ 347 333 mtlr r0; \ 348 334 blr 349 335 ··· 351 337 _GLOBAL(_##API_NAME) \ 352 338 \ 353 339 mflr r0; \ 354 - std r0, 16(r1); \ 340 + std r0, LRSAVE(r1); \ 355 341 \ 356 - stdu r5, -8(r1); \ 342 + std r5, -8(r1); \ 343 + stdu r1, -STACK_FRAME_MIN_SIZE-8(r1); \ 357 344 \ 358 345 li r11, API_NUMBER; \ 359 346 lv1call; \ 360 347 \ 361 - addi r1, r1, 8; \ 348 + addi r1, r1, STACK_FRAME_MIN_SIZE+8; \ 362 349 ld r11, -8(r1); \ 363 350 std r4, 0(r11); \ 364 351 \ 365 - ld r0, 16(r1); \ 352 + ld r0, LRSAVE(r1); \ 366 353 mtlr r0; \ 367 354 blr 368 355 ··· 371 356 _GLOBAL(_##API_NAME) \ 372 357 \ 373 358 mflr r0; \ 374 - std r0, 16(r1); \ 359 + std r0, LRSAVE(r1); \ 375 360 \ 376 361 std r5, -8(r1); \ 377 - stdu r6, -16(r1); \ 362 + std r6, -16(r1); \ 363 + stdu r1, -STACK_FRAME_MIN_SIZE-16(r1); \ 378 364 \ 379 365 li r11, API_NUMBER; \ 380 366 lv1call; \ 381 367 \ 382 - addi r1, r1, 16; \ 368 + addi r1, r1, STACK_FRAME_MIN_SIZE+16; \ 383 369 ld r11, -8(r1); \ 384 370 std r4, 0(r11); \ 385 371 ld r11, -16(r1); \ 386 372 std r5, 0(r11); \ 387 373 \ 388 - ld r0, 16(r1); \ 374 + ld r0, LRSAVE(r1); \ 389 375 mtlr r0; \ 390 376 blr 391 377 ··· 394 378 _GLOBAL(_##API_NAME) \ 395 379 \ 396 380 mflr r0; \ 397 - std r0, 16(r1); \ 381 + std r0, LRSAVE(r1); \ 398 382 \ 399 383 std r5, -8(r1); \ 400 384 std r6, -16(r1); \ 401 - stdu r7, -24(r1); \ 385 + std r7, -24(r1); \ 386 + stdu r1, -STACK_FRAME_MIN_SIZE-24(r1); \ 402 387 \ 403 388 li r11, API_NUMBER; \ 404 389 lv1call; \ 405 390 \ 406 - addi r1, r1, 24; \ 391 + addi r1, r1, STACK_FRAME_MIN_SIZE+24; \ 407 392 ld r11, -8(r1); \ 408 393 std r4, 0(r11); \ 409 394 ld r11, -16(r1); \ ··· 412 395 ld r11, -24(r1); \ 413 396 std r6, 0(r11); \ 414 397 \ 415 - ld r0, 16(r1); \ 398 + ld r0, LRSAVE(r1); \ 416 399 mtlr r0; \ 417 400 blr 418 401 ··· 420 403 _GLOBAL(_##API_NAME) \ 421 404 \ 422 405 mflr r0; \ 423 - std r0, 16(r1); \ 406 + std r0, LRSAVE(r1); \ 424 407 \ 425 408 std r5, -8(r1); \ 426 409 std r6, -16(r1); \ 427 410 std r7, -24(r1); \ 428 - stdu r8, -32(r1); \ 411 + std r8, -32(r1); \ 412 + stdu r1, -STACK_FRAME_MIN_SIZE-32(r1); \ 429 413 \ 430 414 li r11, API_NUMBER; \ 431 415 lv1call; \ 432 416 \ 433 - addi r1, r1, 32; \ 417 + addi r1, r1, STACK_FRAME_MIN_SIZE+32;\ 434 418 ld r11, -8(r1); \ 435 419 std r4, 0(r11); \ 436 420 ld r11, -16(r1); \ ··· 441 423 ld r11, -32(r1); \ 442 424 std r7, 0(r11); \ 443 425 \ 444 - ld r0, 16(r1); \ 426 + ld r0, LRSAVE(r1); \ 445 427 mtlr r0; \ 446 428 blr 447 429 ··· 449 431 _GLOBAL(_##API_NAME) \ 450 432 \ 451 433 mflr r0; \ 452 - std r0, 16(r1); \ 434 + std r0, LRSAVE(r1); \ 453 435 \ 454 436 std r5, -8(r1); \ 455 437 std r6, -16(r1); \ 456 438 std r7, -24(r1); \ 457 439 std r8, -32(r1); \ 458 - stdu r9, -40(r1); \ 440 + std r9, -40(r1); \ 441 + stdu r1, -STACK_FRAME_MIN_SIZE-40(r1); \ 459 442 \ 460 443 li r11, API_NUMBER; \ 461 444 lv1call; \ 462 445 \ 463 - addi r1, r1, 40; \ 446 + addi r1, r1, STACK_FRAME_MIN_SIZE+40; \ 464 447 ld r11, -8(r1); \ 465 448 std r4, 0(r11); \ 466 449 ld r11, -16(r1); \ ··· 473 454 ld r11, -40(r1); \ 474 455 std r8, 0(r11); \ 475 456 \ 476 - ld r0, 16(r1); \ 457 + ld r0, LRSAVE(r1); \ 477 458 mtlr r0; \ 478 459 blr 479 460 ··· 481 462 _GLOBAL(_##API_NAME) \ 482 463 \ 483 464 mflr r0; \ 484 - std r0, 16(r1); \ 465 + std r0, LRSAVE(r1); \ 485 466 \ 486 - stdu r6, -8(r1); \ 467 + std r6, -8(r1); \ 468 + stdu r1, -STACK_FRAME_MIN_SIZE-8(r1); \ 487 469 \ 488 470 li r11, API_NUMBER; \ 489 471 lv1call; \ 490 472 \ 491 - addi r1, r1, 8; \ 473 + addi r1, r1, STACK_FRAME_MIN_SIZE+8; \ 492 474 ld r11, -8(r1); \ 493 475 std r4, 0(r11); \ 494 476 \ 495 - ld r0, 16(r1); \ 477 + ld r0, LRSAVE(r1); \ 496 478 mtlr r0; \ 497 479 blr 498 480 ··· 501 481 _GLOBAL(_##API_NAME) \ 502 482 \ 503 483 mflr r0; \ 504 - std r0, 16(r1); \ 484 + std r0, LRSAVE(r1); \ 505 485 \ 506 486 std r6, -8(r1); \ 507 - stdu r7, -16(r1); \ 487 + std r7, -16(r1); \ 488 + stdu r1, -STACK_FRAME_MIN_SIZE-16(r1); \ 508 489 \ 509 490 li r11, API_NUMBER; \ 510 491 lv1call; \ 511 492 \ 512 - addi r1, r1, 16; \ 493 + addi r1, r1, STACK_FRAME_MIN_SIZE+16; \ 513 494 ld r11, -8(r1); \ 514 495 std r4, 0(r11); \ 515 496 ld r11, -16(r1); \ 516 497 std r5, 0(r11); \ 517 498 \ 518 - ld r0, 16(r1); \ 499 + ld r0, LRSAVE(r1); \ 519 500 mtlr r0; \ 520 501 blr 521 502 ··· 524 503 _GLOBAL(_##API_NAME) \ 525 504 \ 526 505 mflr r0; \ 527 - std r0, 16(r1); \ 506 + std r0, LRSAVE(r1); \ 528 507 \ 529 508 std r6, -8(r1); \ 530 509 std r7, -16(r1); \ 531 - stdu r8, -24(r1); \ 510 + std r8, -24(r1); \ 511 + stdu r1, -STACK_FRAME_MIN_SIZE-24(r1); \ 532 512 \ 533 513 li r11, API_NUMBER; \ 534 514 lv1call; \ 535 515 \ 536 - addi r1, r1, 24; \ 516 + addi r1, r1, STACK_FRAME_MIN_SIZE+24; \ 537 517 ld r11, -8(r1); \ 538 518 std r4, 0(r11); \ 539 519 ld r11, -16(r1); \ ··· 542 520 ld r11, -24(r1); \ 543 521 std r6, 0(r11); \ 544 522 \ 545 - ld r0, 16(r1); \ 523 + ld r0, LRSAVE(r1); \ 546 524 mtlr r0; \ 547 525 blr 548 526 ··· 550 528 _GLOBAL(_##API_NAME) \ 551 529 \ 552 530 mflr r0; \ 553 - std r0, 16(r1); \ 531 + std r0, LRSAVE(r1); \ 554 532 \ 555 - stdu r7, -8(r1); \ 533 + std r7, -8(r1); \ 534 + stdu r1, -STACK_FRAME_MIN_SIZE-8(r1); \ 556 535 \ 557 536 li r11, API_NUMBER; \ 558 537 lv1call; \ 559 538 \ 560 - addi r1, r1, 8; \ 539 + addi r1, r1, STACK_FRAME_MIN_SIZE+8; \ 561 540 ld r11, -8(r1); \ 562 541 std r4, 0(r11); \ 563 542 \ 564 - ld r0, 16(r1); \ 543 + ld r0, LRSAVE(r1); \ 565 544 mtlr r0; \ 566 545 blr 567 546 ··· 570 547 _GLOBAL(_##API_NAME) \ 571 548 \ 572 549 mflr r0; \ 573 - std r0, 16(r1); \ 550 + std r0, LRSAVE(r1); \ 574 551 \ 575 552 std r7, -8(r1); \ 576 - stdu r8, -16(r1); \ 553 + std r8, -16(r1); \ 554 + stdu r1, -STACK_FRAME_MIN_SIZE-16(r1); \ 577 555 \ 578 556 li r11, API_NUMBER; \ 579 557 lv1call; \ 580 558 \ 581 - addi r1, r1, 16; \ 559 + addi r1, r1, STACK_FRAME_MIN_SIZE+16; \ 582 560 ld r11, -8(r1); \ 583 561 std r4, 0(r11); \ 584 562 ld r11, -16(r1); \ 585 563 std r5, 0(r11); \ 586 564 \ 587 - ld r0, 16(r1); \ 565 + ld r0, LRSAVE(r1); \ 588 566 mtlr r0; \ 589 567 blr 590 568 ··· 593 569 _GLOBAL(_##API_NAME) \ 594 570 \ 595 571 mflr r0; \ 596 - std r0, 16(r1); \ 572 + std r0, LRSAVE(r1); \ 597 573 \ 598 574 std r7, -8(r1); \ 599 575 std r8, -16(r1); \ 600 - stdu r9, -24(r1); \ 576 + std r9, -24(r1); \ 577 + stdu r1, -STACK_FRAME_MIN_SIZE-24(r1); \ 601 578 \ 602 579 li r11, API_NUMBER; \ 603 580 lv1call; \ 604 581 \ 605 - addi r1, r1, 24; \ 582 + addi r1, r1, STACK_FRAME_MIN_SIZE+24; \ 606 583 ld r11, -8(r1); \ 607 584 std r4, 0(r11); \ 608 585 ld r11, -16(r1); \ ··· 611 586 ld r11, -24(r1); \ 612 587 std r6, 0(r11); \ 613 588 \ 614 - ld r0, 16(r1); \ 589 + ld r0, LRSAVE(r1); \ 615 590 mtlr r0; \ 616 591 blr 617 592 ··· 619 594 _GLOBAL(_##API_NAME) \ 620 595 \ 621 596 mflr r0; \ 622 - std r0, 16(r1); \ 597 + std r0, LRSAVE(r1); \ 623 598 \ 624 - stdu r8, -8(r1); \ 599 + std r8, -8(r1); \ 600 + stdu r1, -STACK_FRAME_MIN_SIZE-8(r1); \ 625 601 \ 626 602 li r11, API_NUMBER; \ 627 603 lv1call; \ 628 604 \ 629 - addi r1, r1, 8; \ 605 + addi r1, r1, STACK_FRAME_MIN_SIZE+8; \ 630 606 ld r11, -8(r1); \ 631 607 std r4, 0(r11); \ 632 608 \ 633 - ld r0, 16(r1); \ 609 + ld r0, LRSAVE(r1); \ 634 610 mtlr r0; \ 635 611 blr 636 612 ··· 639 613 _GLOBAL(_##API_NAME) \ 640 614 \ 641 615 mflr r0; \ 642 - std r0, 16(r1); \ 616 + std r0, LRSAVE(r1); \ 643 617 \ 644 618 std r8, -8(r1); \ 645 - stdu r9, -16(r1); \ 619 + std r9, -16(r1); \ 620 + stdu r1, -STACK_FRAME_MIN_SIZE-16(r1); \ 646 621 \ 647 622 li r11, API_NUMBER; \ 648 623 lv1call; \ 649 624 \ 650 - addi r1, r1, 16; \ 625 + addi r1, r1, STACK_FRAME_MIN_SIZE+16; \ 651 626 ld r11, -8(r1); \ 652 627 std r4, 0(r11); \ 653 628 ld r11, -16(r1); \ 654 629 std r5, 0(r11); \ 655 630 \ 656 - ld r0, 16(r1); \ 631 + ld r0, LRSAVE(r1); \ 657 632 mtlr r0; \ 658 633 blr 659 634 ··· 662 635 _GLOBAL(_##API_NAME) \ 663 636 \ 664 637 mflr r0; \ 665 - std r0, 16(r1); \ 638 + std r0, LRSAVE(r1); \ 666 639 \ 667 640 std r8, -8(r1); \ 668 641 std r9, -16(r1); \ 669 - stdu r10, -24(r1); \ 642 + std r10, -24(r1); \ 643 + stdu r1, -STACK_FRAME_MIN_SIZE-24(r1); \ 670 644 \ 671 645 li r11, API_NUMBER; \ 672 646 lv1call; \ 673 647 \ 674 - addi r1, r1, 24; \ 648 + addi r1, r1, STACK_FRAME_MIN_SIZE+24; \ 675 649 ld r11, -8(r1); \ 676 650 std r4, 0(r11); \ 677 651 ld r11, -16(r1); \ ··· 680 652 ld r11, -24(r1); \ 681 653 std r6, 0(r11); \ 682 654 \ 683 - ld r0, 16(r1); \ 655 + ld r0, LRSAVE(r1); \ 684 656 mtlr r0; \ 685 657 blr 686 658 ··· 688 660 _GLOBAL(_##API_NAME) \ 689 661 \ 690 662 mflr r0; \ 691 - std r0, 16(r1); \ 663 + std r0, LRSAVE(r1); \ 692 664 \ 693 - stdu r9, -8(r1); \ 665 + std r9, -8(r1); \ 666 + stdu r1, -STACK_FRAME_MIN_SIZE-8(r1); \ 694 667 \ 695 668 li r11, API_NUMBER; \ 696 669 lv1call; \ 697 670 \ 698 - addi r1, r1, 8; \ 671 + addi r1, r1, STACK_FRAME_MIN_SIZE+8; \ 699 672 ld r11, -8(r1); \ 700 673 std r4, 0(r11); \ 701 674 \ 702 - ld r0, 16(r1); \ 675 + ld r0, LRSAVE(r1); \ 703 676 mtlr r0; \ 704 677 blr 705 678 ··· 708 679 _GLOBAL(_##API_NAME) \ 709 680 \ 710 681 mflr r0; \ 711 - std r0, 16(r1); \ 682 + std r0, LRSAVE(r1); \ 712 683 \ 713 684 std r9, -8(r1); \ 714 - stdu r10, -16(r1); \ 685 + std r10, -16(r1); \ 686 + stdu r1, -STACK_FRAME_MIN_SIZE-16(r1); \ 715 687 \ 716 688 li r11, API_NUMBER; \ 717 689 lv1call; \ 718 690 \ 719 - addi r1, r1, 16; \ 691 + addi r1, r1, STACK_FRAME_MIN_SIZE+16; \ 720 692 ld r11, -8(r1); \ 721 693 std r4, 0(r11); \ 722 694 ld r11, -16(r1); \ 723 695 std r5, 0(r11); \ 724 696 \ 725 - ld r0, 16(r1); \ 697 + ld r0, LRSAVE(r1); \ 726 698 mtlr r0; \ 727 699 blr 728 700 ··· 731 701 _GLOBAL(_##API_NAME) \ 732 702 \ 733 703 mflr r0; \ 734 - std r0, 16(r1); \ 704 + std r0, LRSAVE(r1); \ 735 705 \ 736 706 std r9, -8(r1); \ 737 - stdu r10, -16(r1); \ 707 + std r10, -16(r1); \ 708 + stdu r1, -STACK_FRAME_MIN_SIZE-16(r1); \ 738 709 \ 739 710 li r11, API_NUMBER; \ 740 711 lv1call; \ 741 712 \ 742 - addi r1, r1, 16; \ 713 + addi r1, r1, STACK_FRAME_MIN_SIZE+16; \ 743 714 ld r11, -8(r1); \ 744 715 std r4, 0(r11); \ 745 716 ld r11, -16(r1); \ 746 717 std r5, 0(r11); \ 747 - ld r11, 48+8*8(r1); \ 718 + ld r11, STK_PARAM_AREA+8*8(r1); \ 748 719 std r6, 0(r11); \ 749 720 \ 750 - ld r0, 16(r1); \ 721 + ld r0, LRSAVE(r1); \ 751 722 mtlr r0; \ 752 723 blr 753 724 ··· 756 725 _GLOBAL(_##API_NAME) \ 757 726 \ 758 727 mflr r0; \ 759 - std r0, 16(r1); \ 728 + std r0, LRSAVE(r1); \ 760 729 \ 761 - stdu r10, -8(r1); \ 730 + std r10, -8(r1); \ 731 + stdu r1, -STACK_FRAME_MIN_SIZE-8(r1); \ 762 732 \ 763 733 li r11, API_NUMBER; \ 764 734 lv1call; \ 765 735 \ 766 - addi r1, r1, 8; \ 736 + addi r1, r1, STACK_FRAME_MIN_SIZE+8; \ 767 737 ld r11, -8(r1); \ 768 738 std r4, 0(r11); \ 769 739 \ 770 - ld r0, 16(r1); \ 740 + ld r0, LRSAVE(r1); \ 771 741 mtlr r0; \ 772 742 blr 773 743 ··· 776 744 _GLOBAL(_##API_NAME) \ 777 745 \ 778 746 mflr r0; \ 779 - std r0, 16(r1); \ 747 + std r0, LRSAVE(r1); \ 780 748 \ 781 - std r10, 48+8*7(r1); \ 749 + std r10, STK_PARAM_AREA+8*7(r1); \ 750 + stdu r1, -STACK_FRAME_MIN_SIZE(r1); \ 782 751 \ 783 752 li r11, API_NUMBER; \ 784 753 lv1call; \ 785 754 \ 786 - ld r11, 48+8*7(r1); \ 755 + addi r1, r1, STACK_FRAME_MIN_SIZE; \ 756 + ld r11, STK_PARAM_AREA+8*7(r1); \ 787 757 std r4, 0(r11); \ 788 - ld r11, 48+8*8(r1); \ 758 + ld r11, STK_PARAM_AREA+8*8(r1); \ 789 759 std r5, 0(r11); \ 790 - ld r11, 48+8*9(r1); \ 760 + ld r11, STK_PARAM_AREA+8*9(r1); \ 791 761 std r6, 0(r11); \ 792 - ld r11, 48+8*10(r1); \ 762 + ld r11, STK_PARAM_AREA+8*10(r1); \ 793 763 std r7, 0(r11); \ 794 - ld r11, 48+8*11(r1); \ 764 + ld r11, STK_PARAM_AREA+8*11(r1); \ 795 765 std r8, 0(r11); \ 796 - ld r11, 48+8*12(r1); \ 766 + ld r11, STK_PARAM_AREA+8*12(r1); \ 797 767 std r9, 0(r11); \ 798 768 \ 799 - ld r0, 16(r1); \ 769 + ld r0, LRSAVE(r1); \ 800 770 mtlr r0; \ 801 771 blr 802 772 ··· 806 772 _GLOBAL(_##API_NAME) \ 807 773 \ 808 774 mflr r0; \ 809 - std r0, 16(r1); \ 775 + std r0, LRSAVE(r1); \ 776 + stdu r1, -STACK_FRAME_MIN_SIZE(r1); \ 810 777 \ 811 778 li r11, API_NUMBER; \ 812 779 lv1call; \ 813 780 \ 814 - ld r11, 48+8*8(r1); \ 781 + addi r1, r1, STACK_FRAME_MIN_SIZE; \ 782 + ld r11, STK_PARAM_AREA+8*8(r1); \ 815 783 std r4, 0(r11); \ 816 784 \ 817 - ld r0, 16(r1); \ 785 + ld r0, LRSAVE(r1); \ 818 786 mtlr r0; \ 819 787 blr 820 788
+2 -2
arch/powerpc/platforms/pseries/ibmebus.c
··· 55 55 .init_name = "ibmebus", 56 56 }; 57 57 58 - struct bus_type ibmebus_bus_type; 58 + const struct bus_type ibmebus_bus_type; 59 59 60 60 /* These devices will automatically be added to the bus during init */ 61 61 static const struct of_device_id ibmebus_matches[] __initconst = { ··· 432 432 return of_device_uevent_modalias(dev, env); 433 433 } 434 434 435 - struct bus_type ibmebus_bus_type = { 435 + const struct bus_type ibmebus_bus_type = { 436 436 .name = "ibmebus", 437 437 .uevent = ibmebus_bus_modalias, 438 438 .bus_groups = ibmbus_bus_groups,
+5 -1
arch/powerpc/platforms/pseries/lparcfg.c
··· 346 346 */ 347 347 static int read_dt_lpar_name(struct seq_file *m) 348 348 { 349 + struct device_node *root = of_find_node_by_path("/"); 349 350 const char *name; 351 + int ret; 350 352 351 - if (of_property_read_string(of_root, "ibm,partition-name", &name)) 353 + ret = of_property_read_string(root, "ibm,partition-name", &name); 354 + of_node_put(root); 355 + if (ret) 352 356 return -ENOENT; 353 357 354 358 seq_printf(m, "partition_name=%s\n", name);
+8 -3
arch/powerpc/platforms/pseries/msi.c
··· 26 26 #define RTAS_CHANGE_MSI_FN 3 27 27 #define RTAS_CHANGE_MSIX_FN 4 28 28 #define RTAS_CHANGE_32MSI_FN 5 29 + #define RTAS_CHANGE_32MSIX_FN 6 29 30 30 31 /* RTAS Helpers */ 31 32 ··· 42 41 seq_num = 1; 43 42 do { 44 43 if (func == RTAS_CHANGE_MSI_FN || func == RTAS_CHANGE_MSIX_FN || 45 - func == RTAS_CHANGE_32MSI_FN) 44 + func == RTAS_CHANGE_32MSI_FN || func == RTAS_CHANGE_32MSIX_FN) 46 45 rc = rtas_call(change_token, 6, 4, rtas_ret, addr, 47 46 BUID_HI(buid), BUID_LO(buid), 48 47 func, num_irqs, seq_num); ··· 407 406 408 407 if (use_32bit_msi_hack && rc > 0) 409 408 rtas_hack_32bit_msi_gen2(pdev); 410 - } else 411 - rc = rtas_change_msi(pdn, RTAS_CHANGE_MSIX_FN, nvec); 409 + } else { 410 + if (pdev->no_64bit_msi) 411 + rc = rtas_change_msi(pdn, RTAS_CHANGE_32MSIX_FN, nvec); 412 + else 413 + rc = rtas_change_msi(pdn, RTAS_CHANGE_MSIX_FN, nvec); 414 + } 412 415 413 416 if (rc != nvec) { 414 417 if (nvec != nvec_in) {
+5 -3
arch/powerpc/platforms/pseries/papr_platform_attributes.c
··· 101 101 esi_buf_size = ESI_HDR_SIZE + (CURR_MAX_ESI_ATTRS * max_esi_attrs); 102 102 103 103 temp_buf = krealloc(buf, esi_buf_size, GFP_KERNEL); 104 - if (temp_buf) 104 + if (temp_buf) { 105 105 buf = temp_buf; 106 - else 107 - return -ENOMEM; 106 + } else { 107 + ret = -ENOMEM; 108 + goto out_buf; 109 + } 108 110 109 111 goto retry; 110 112 }
+2 -4
arch/powerpc/platforms/pseries/papr_scm.c
··· 1521 1521 return rc; 1522 1522 } 1523 1523 1524 - static int papr_scm_remove(struct platform_device *pdev) 1524 + static void papr_scm_remove(struct platform_device *pdev) 1525 1525 { 1526 1526 struct papr_scm_priv *p = platform_get_drvdata(pdev); 1527 1527 ··· 1538 1538 pdev->archdata.priv = NULL; 1539 1539 kfree(p->bus_desc.provider_name); 1540 1540 kfree(p); 1541 - 1542 - return 0; 1543 1541 } 1544 1542 1545 1543 static const struct of_device_id papr_scm_match[] = { ··· 1548 1550 1549 1551 static struct platform_driver papr_scm_driver = { 1550 1552 .probe = papr_scm_probe, 1551 - .remove = papr_scm_remove, 1553 + .remove_new = papr_scm_remove, 1552 1554 .driver = { 1553 1555 .name = "papr_scm", 1554 1556 .of_match_table = papr_scm_match,
+9 -3
arch/powerpc/platforms/pseries/setup.c
··· 1029 1029 return; 1030 1030 } 1031 1031 1032 - if (of_property_read_bool(of_root, "ibm,powervm-partition") || 1033 - of_property_read_bool(of_root, "ibm,fw-net-version")) 1032 + dn = of_find_node_by_path("/"); 1033 + if (of_property_read_bool(dn, "ibm,powervm-partition") || 1034 + of_property_read_bool(dn, "ibm,fw-net-version")) 1034 1035 seq_buf_printf(&ppc_hw_desc, "hv:phyp "); 1036 + of_node_put(dn); 1035 1037 } 1036 1038 1037 1039 /* ··· 1093 1091 1094 1092 static int __init pSeries_probe(void) 1095 1093 { 1096 - if (!of_node_is_type(of_root, "chrp")) 1094 + struct device_node *root = of_find_node_by_path("/"); 1095 + bool ret = of_node_is_type(root, "chrp"); 1096 + 1097 + of_node_put(root); 1098 + if (!ret) 1097 1099 return 0; 1098 1100 1099 1101 /* Cell blades firmware claims to be chrp while it's not. Until this
+35 -26
arch/powerpc/platforms/pseries/vio.c
··· 991 991 static DEVICE_ATTR_RW(cmo_desired); 992 992 static DEVICE_ATTR_RW(cmo_allocs_failed); 993 993 994 - static struct attribute *vio_cmo_dev_attrs[] = { 995 - &dev_attr_name.attr, 996 - &dev_attr_devspec.attr, 997 - &dev_attr_modalias.attr, 998 - &dev_attr_cmo_entitled.attr, 999 - &dev_attr_cmo_allocated.attr, 1000 - &dev_attr_cmo_desired.attr, 1001 - &dev_attr_cmo_allocs_failed.attr, 1002 - NULL, 1003 - }; 1004 - ATTRIBUTE_GROUPS(vio_cmo_dev); 1005 - 1006 994 /* sysfs bus functions and data structures for CMO */ 1007 995 1008 996 #define viobus_cmo_rd_attr(name) \ ··· 1050 1062 }; 1051 1063 ATTRIBUTE_GROUPS(vio_bus); 1052 1064 1053 - static void __init vio_cmo_sysfs_init(void) 1054 - { 1055 - vio_bus_type.dev_groups = vio_cmo_dev_groups; 1056 - vio_bus_type.bus_groups = vio_bus_groups; 1057 - } 1065 + static void __init vio_cmo_sysfs_init(void) { } 1058 1066 #else /* CONFIG_PPC_SMLPAR */ 1059 1067 int vio_cmo_entitlement_update(size_t new_entitlement) { return 0; } 1060 1068 void vio_cmo_set_dev_desired(struct vio_dev *viodev, size_t desired) {} ··· 1568 1584 } 1569 1585 static DEVICE_ATTR_RO(modalias); 1570 1586 1571 - static struct attribute *vio_dev_attrs[] = { 1572 - &dev_attr_name.attr, 1573 - &dev_attr_devspec.attr, 1574 - &dev_attr_modalias.attr, 1575 - NULL, 1576 - }; 1577 - ATTRIBUTE_GROUPS(vio_dev); 1578 - 1579 1587 void vio_unregister_device(struct vio_dev *viodev) 1580 1588 { 1581 1589 device_unregister(&viodev->dev); ··· 1602 1626 return 0; 1603 1627 } 1604 1628 1605 - struct bus_type vio_bus_type = { 1629 + #ifdef CONFIG_PPC_SMLPAR 1630 + static struct attribute *vio_cmo_dev_attrs[] = { 1631 + &dev_attr_name.attr, 1632 + &dev_attr_devspec.attr, 1633 + &dev_attr_modalias.attr, 1634 + &dev_attr_cmo_entitled.attr, 1635 + &dev_attr_cmo_allocated.attr, 1636 + &dev_attr_cmo_desired.attr, 1637 + &dev_attr_cmo_allocs_failed.attr, 1638 + NULL, 1639 + }; 1640 + ATTRIBUTE_GROUPS(vio_cmo_dev); 1641 + 1642 + const struct bus_type vio_bus_type = { 1643 + .name = "vio", 1644 + .dev_groups = vio_cmo_dev_groups, 1645 + .bus_groups = vio_bus_groups, 1646 + .uevent = vio_hotplug, 1647 + .match = vio_bus_match, 1648 + .probe = vio_bus_probe, 1649 + .remove = vio_bus_remove, 1650 + .shutdown = vio_bus_shutdown, 1651 + }; 1652 + #else /* CONFIG_PPC_SMLPAR */ 1653 + static struct attribute *vio_dev_attrs[] = { 1654 + &dev_attr_name.attr, 1655 + &dev_attr_devspec.attr, 1656 + &dev_attr_modalias.attr, 1657 + NULL, 1658 + }; 1659 + ATTRIBUTE_GROUPS(vio_dev); 1660 + 1661 + const struct bus_type vio_bus_type = { 1606 1662 .name = "vio", 1607 1663 .dev_groups = vio_dev_groups, 1608 1664 .uevent = vio_hotplug, ··· 1643 1635 .remove = vio_bus_remove, 1644 1636 .shutdown = vio_bus_shutdown, 1645 1637 }; 1638 + #endif /* CONFIG_PPC_SMLPAR */ 1646 1639 1647 1640 /** 1648 1641 * vio_get_attribute: - get attribute for virtual device
+2 -4
arch/powerpc/sysdev/fsl_msi.c
··· 320 320 return ret; 321 321 } 322 322 323 - static int fsl_of_msi_remove(struct platform_device *ofdev) 323 + static void fsl_of_msi_remove(struct platform_device *ofdev) 324 324 { 325 325 struct fsl_msi *msi = platform_get_drvdata(ofdev); 326 326 int virq, i; ··· 343 343 if ((msi->feature & FSL_PIC_IP_MASK) != FSL_PIC_IP_VMPIC) 344 344 iounmap(msi->msi_regs); 345 345 kfree(msi); 346 - 347 - return 0; 348 346 } 349 347 350 348 static struct lock_class_key fsl_msi_irq_class; ··· 601 603 .of_match_table = fsl_of_msi_ids, 602 604 }, 603 605 .probe = fsl_of_msi_probe, 604 - .remove = fsl_of_msi_remove, 606 + .remove_new = fsl_of_msi_remove, 605 607 }; 606 608 607 609 static __init int fsl_of_msi_init(void)
+1 -1
arch/powerpc/sysdev/mpic.c
··· 49 49 #define DBG(fmt...) 50 50 #endif 51 51 52 - struct bus_type mpic_subsys = { 52 + const struct bus_type mpic_subsys = { 53 53 .name = "mpic", 54 54 .dev_name = "mpic", 55 55 };
+2 -4
arch/powerpc/sysdev/pmi.c
··· 173 173 return rc; 174 174 } 175 175 176 - static int pmi_of_remove(struct platform_device *dev) 176 + static void pmi_of_remove(struct platform_device *dev) 177 177 { 178 178 struct pmi_handler *handler, *tmp; 179 179 ··· 189 189 190 190 kfree(data); 191 191 data = NULL; 192 - 193 - return 0; 194 192 } 195 193 196 194 static struct platform_driver pmi_of_platform_driver = { 197 195 .probe = pmi_of_probe, 198 - .remove = pmi_of_remove, 196 + .remove_new = pmi_of_remove, 199 197 .driver = { 200 198 .name = "pmi", 201 199 .of_match_table = pmi_match,
+2 -4
arch/powerpc/xmon/xmon.c
··· 643 643 touch_nmi_watchdog(); 644 644 } else { 645 645 cmd = 1; 646 - #ifdef CONFIG_SMP 647 646 if (xmon_batch) 648 647 cmd = batch_cmds(regs); 649 - #endif 650 648 if (!locked_down && cmd) 651 649 cmd = cmds(regs); 652 650 if (locked_down || cmd != 0) { ··· 1818 1820 const struct bug_entry *bug; 1819 1821 unsigned long addr; 1820 1822 1821 - if (regs->msr & MSR_PR) 1822 - return; /* not in kernel */ 1823 + if (user_mode(regs)) 1824 + return; 1823 1825 addr = regs->nip; /* address of trap instruction */ 1824 1826 if (!is_kernel_addr(addr)) 1825 1827 return;
+1 -3
drivers/ata/pata_macio.c
··· 1188 1188 return rc; 1189 1189 } 1190 1190 1191 - static int pata_macio_detach(struct macio_dev *mdev) 1191 + static void pata_macio_detach(struct macio_dev *mdev) 1192 1192 { 1193 1193 struct ata_host *host = macio_get_drvdata(mdev); 1194 1194 struct pata_macio_priv *priv = host->private_data; ··· 1203 1203 ata_host_detach(host); 1204 1204 1205 1205 unlock_media_bay(priv->mdev->media_bay); 1206 - 1207 - return 0; 1208 1206 } 1209 1207 1210 1208 #ifdef CONFIG_PM_SLEEP
+6 -4
drivers/macintosh/adb.c
··· 74 74 NULL 75 75 }; 76 76 77 - static struct class *adb_dev_class; 77 + static const struct class adb_dev_class = { 78 + .name = "adb", 79 + }; 78 80 79 81 static struct adb_driver *adb_controller; 80 82 BLOCKING_NOTIFIER_HEAD(adb_client_list); ··· 890 888 return; 891 889 } 892 890 893 - adb_dev_class = class_create("adb"); 894 - if (IS_ERR(adb_dev_class)) 891 + if (class_register(&adb_dev_class)) 895 892 return; 896 - device_create(adb_dev_class, NULL, MKDEV(ADB_MAJOR, 0), NULL, "adb"); 893 + 894 + device_create(&adb_dev_class, NULL, MKDEV(ADB_MAJOR, 0), NULL, "adb"); 897 895 898 896 platform_device_register(&adb_pfdev); 899 897 platform_driver_probe(&adb_pfdrv, adb_dummy_probe);
+1 -1
drivers/macintosh/macio_asic.c
··· 136 136 137 137 extern const struct attribute_group *macio_dev_groups[]; 138 138 139 - struct bus_type macio_bus_type = { 139 + const struct bus_type macio_bus_type = { 140 140 .name = "macio", 141 141 .match = macio_bus_match, 142 142 .uevent = macio_device_modalias,
+1 -3
drivers/macintosh/rack-meter.c
··· 523 523 return rc; 524 524 } 525 525 526 - static int rackmeter_remove(struct macio_dev* mdev) 526 + static void rackmeter_remove(struct macio_dev *mdev) 527 527 { 528 528 struct rackmeter *rm = dev_get_drvdata(&mdev->ofdev.dev); 529 529 ··· 558 558 559 559 /* Get rid of me */ 560 560 kfree(rm); 561 - 562 - return 0; 563 561 } 564 562 565 563 static int rackmeter_shutdown(struct macio_dev* mdev)
+2 -4
drivers/macintosh/therm_windtunnel.c
··· 481 481 return -ENODEV; 482 482 } 483 483 484 - static int 485 - therm_of_remove( struct platform_device *dev ) 484 + static void therm_of_remove(struct platform_device *dev) 486 485 { 487 486 i2c_del_driver( &g4fan_driver ); 488 - return 0; 489 487 } 490 488 491 489 static const struct of_device_id therm_of_match[] = {{ ··· 499 501 .of_match_table = therm_of_match, 500 502 }, 501 503 .probe = therm_of_probe, 502 - .remove = therm_of_remove, 504 + .remove_new = therm_of_remove, 503 505 }; 504 506 505 507 struct apple_thermal_info {
+2 -4
drivers/macintosh/windfarm_pm112.c
··· 662 662 return 0; 663 663 } 664 664 665 - static int wf_pm112_remove(struct platform_device *dev) 665 + static void wf_pm112_remove(struct platform_device *dev) 666 666 { 667 667 wf_unregister_client(&pm112_events); 668 - /* should release all sensors and controls */ 669 - return 0; 670 668 } 671 669 672 670 static struct platform_driver wf_pm112_driver = { 673 671 .probe = wf_pm112_probe, 674 - .remove = wf_pm112_remove, 672 + .remove_new = wf_pm112_remove, 675 673 .driver = { 676 674 .name = "windfarm", 677 675 },
+2 -3
drivers/macintosh/windfarm_pm121.c
··· 992 992 return 0; 993 993 } 994 994 995 - static int pm121_remove(struct platform_device *ddev) 995 + static void pm121_remove(struct platform_device *ddev) 996 996 { 997 997 wf_unregister_client(&pm121_events); 998 - return 0; 999 998 } 1000 999 1001 1000 static struct platform_driver pm121_driver = { 1002 1001 .probe = pm121_probe, 1003 - .remove = pm121_remove, 1002 + .remove_new = pm121_remove, 1004 1003 .driver = { 1005 1004 .name = "windfarm", 1006 1005 .bus = &platform_bus_type,
+2 -5
drivers/macintosh/windfarm_pm72.c
··· 775 775 return 0; 776 776 } 777 777 778 - static int wf_pm72_remove(struct platform_device *dev) 778 + static void wf_pm72_remove(struct platform_device *dev) 779 779 { 780 780 wf_unregister_client(&pm72_events); 781 - 782 - /* should release all sensors and controls */ 783 - return 0; 784 781 } 785 782 786 783 static struct platform_driver wf_pm72_driver = { 787 784 .probe = wf_pm72_probe, 788 - .remove = wf_pm72_remove, 785 + .remove_new = wf_pm72_remove, 789 786 .driver = { 790 787 .name = "windfarm", 791 788 },
+3 -5
drivers/macintosh/windfarm_pm81.c
··· 724 724 return 0; 725 725 } 726 726 727 - static int wf_smu_remove(struct platform_device *ddev) 727 + static void wf_smu_remove(struct platform_device *ddev) 728 728 { 729 729 wf_unregister_client(&wf_smu_events); 730 730 ··· 761 761 /* Destroy control loops state structures */ 762 762 kfree(wf_smu_sys_fans); 763 763 kfree(wf_smu_cpu_fans); 764 - 765 - return 0; 766 764 } 767 765 768 766 static struct platform_driver wf_smu_driver = { 769 - .probe = wf_smu_probe, 770 - .remove = wf_smu_remove, 767 + .probe = wf_smu_probe, 768 + .remove_new = wf_smu_remove, 771 769 .driver = { 772 770 .name = "windfarm", 773 771 },
+3 -5
drivers/macintosh/windfarm_pm91.c
··· 647 647 return 0; 648 648 } 649 649 650 - static int wf_smu_remove(struct platform_device *ddev) 650 + static void wf_smu_remove(struct platform_device *ddev) 651 651 { 652 652 wf_unregister_client(&wf_smu_events); 653 653 ··· 691 691 kfree(wf_smu_slots_fans); 692 692 kfree(wf_smu_drive_fans); 693 693 kfree(wf_smu_cpu_fans); 694 - 695 - return 0; 696 694 } 697 695 698 696 static struct platform_driver wf_smu_driver = { 699 - .probe = wf_smu_probe, 700 - .remove = wf_smu_remove, 697 + .probe = wf_smu_probe, 698 + .remove_new = wf_smu_remove, 701 699 .driver = { 702 700 .name = "windfarm", 703 701 },
+2 -5
drivers/macintosh/windfarm_rm31.c
··· 668 668 return 0; 669 669 } 670 670 671 - static int wf_rm31_remove(struct platform_device *dev) 671 + static void wf_rm31_remove(struct platform_device *dev) 672 672 { 673 673 wf_unregister_client(&rm31_events); 674 - 675 - /* should release all sensors and controls */ 676 - return 0; 677 674 } 678 675 679 676 static struct platform_driver wf_rm31_driver = { 680 677 .probe = wf_rm31_probe, 681 - .remove = wf_rm31_remove, 678 + .remove_new = wf_rm31_remove, 682 679 .driver = { 683 680 .name = "windfarm", 684 681 },
+1 -3
drivers/net/ethernet/apple/bmac.c
··· 1591 1591 } 1592 1592 #endif 1593 1593 1594 - static int bmac_remove(struct macio_dev *mdev) 1594 + static void bmac_remove(struct macio_dev *mdev) 1595 1595 { 1596 1596 struct net_device *dev = macio_get_drvdata(mdev); 1597 1597 struct bmac_data *bp = netdev_priv(dev); ··· 1609 1609 macio_release_resources(mdev); 1610 1610 1611 1611 free_netdev(dev); 1612 - 1613 - return 0; 1614 1612 } 1615 1613 1616 1614 static const struct of_device_id bmac_match[] =
+1 -3
drivers/net/ethernet/apple/mace.c
··· 272 272 return rc; 273 273 } 274 274 275 - static int mace_remove(struct macio_dev *mdev) 275 + static void mace_remove(struct macio_dev *mdev) 276 276 { 277 277 struct net_device *dev = macio_get_drvdata(mdev); 278 278 struct mace_data *mp; ··· 296 296 free_netdev(dev); 297 297 298 298 macio_release_resources(mdev); 299 - 300 - return 0; 301 299 } 302 300 303 301 static void dbdma_reset(volatile struct dbdma_regs __iomem *dma)
+8 -7
drivers/of/base.c
··· 395 395 EXPORT_SYMBOL_GPL(of_device_compatible_match); 396 396 397 397 /** 398 - * of_machine_is_compatible - Test root of device tree for a given compatible value 399 - * @compat: compatible string to look for in root node's compatible property. 398 + * of_machine_compatible_match - Test root of device tree against a compatible array 399 + * @compats: NULL terminated array of compatible strings to look for in root node's compatible property. 400 400 * 401 - * Return: A positive integer if the root node has the given value in its 401 + * Returns true if the root node has any of the given compatible values in its 402 402 * compatible property. 403 403 */ 404 - int of_machine_is_compatible(const char *compat) 404 + bool of_machine_compatible_match(const char *const *compats) 405 405 { 406 406 struct device_node *root; 407 407 int rc = 0; 408 408 409 409 root = of_find_node_by_path("/"); 410 410 if (root) { 411 - rc = of_device_is_compatible(root, compat); 411 + rc = of_device_compatible_match(root, compats); 412 412 of_node_put(root); 413 413 } 414 - return rc; 414 + 415 + return rc != 0; 415 416 } 416 - EXPORT_SYMBOL(of_machine_is_compatible); 417 + EXPORT_SYMBOL(of_machine_compatible_match); 417 418 418 419 static bool __of_device_is_status(const struct device_node *device, 419 420 const char * const*strings)
+1 -4
drivers/scsi/mac53c94.c
··· 508 508 return rc; 509 509 } 510 510 511 - static int mac53c94_remove(struct macio_dev *mdev) 511 + static void mac53c94_remove(struct macio_dev *mdev) 512 512 { 513 513 struct fsc_state *fp = (struct fsc_state *)macio_get_drvdata(mdev); 514 514 struct Scsi_Host *host = fp->host; ··· 526 526 scsi_host_put(host); 527 527 528 528 macio_release_resources(mdev); 529 - 530 - return 0; 531 529 } 532 - 533 530 534 531 static struct of_device_id mac53c94_match[] = 535 532 {
+1 -4
drivers/scsi/mesh.c
··· 1986 1986 return -ENODEV; 1987 1987 } 1988 1988 1989 - static int mesh_remove(struct macio_dev *mdev) 1989 + static void mesh_remove(struct macio_dev *mdev) 1990 1990 { 1991 1991 struct mesh_state *ms = (struct mesh_state *)macio_get_drvdata(mdev); 1992 1992 struct Scsi_Host *mesh_host = ms->host; ··· 2013 2013 macio_release_resources(mdev); 2014 2014 2015 2015 scsi_host_put(mesh_host); 2016 - 2017 - return 0; 2018 2016 } 2019 - 2020 2017 2021 2018 static struct of_device_id mesh_match[] = 2022 2019 {
+2 -5
drivers/tty/serial/pmac_zilog.c
··· 1507 1507 * That one should not be called, macio isn't really a hotswap device, 1508 1508 * we don't expect one of those serial ports to go away... 1509 1509 */ 1510 - static int pmz_detach(struct macio_dev *mdev) 1510 + static void pmz_detach(struct macio_dev *mdev) 1511 1511 { 1512 1512 struct uart_pmac_port *uap = dev_get_drvdata(&mdev->ofdev.dev); 1513 1513 1514 1514 if (!uap) 1515 - return -ENODEV; 1515 + return; 1516 1516 1517 1517 uart_remove_one_port(&pmz_uart_reg, &uap->port); 1518 1518 ··· 1523 1523 dev_set_drvdata(&mdev->ofdev.dev, NULL); 1524 1524 uap->dev = NULL; 1525 1525 uap->port.dev = NULL; 1526 - 1527 - return 0; 1528 1526 } 1529 - 1530 1527 1531 1528 static int pmz_suspend(struct macio_dev *mdev, pm_message_t pm_state) 1532 1529 {
+19 -1
include/linux/of.h
··· 398 398 extern int of_alias_get_id(struct device_node *np, const char *stem); 399 399 extern int of_alias_get_highest_id(const char *stem); 400 400 401 - extern int of_machine_is_compatible(const char *compat); 401 + bool of_machine_compatible_match(const char *const *compats); 402 + 403 + /** 404 + * of_machine_is_compatible - Test root of device tree for a given compatible value 405 + * @compat: compatible string to look for in root node's compatible property. 406 + * 407 + * Return: true if the root node has the given value in its compatible property. 408 + */ 409 + static inline bool of_machine_is_compatible(const char *compat) 410 + { 411 + const char *compats[] = { compat, NULL }; 412 + 413 + return of_machine_compatible_match(compats); 414 + } 402 415 403 416 extern int of_add_property(struct device_node *np, struct property *prop); 404 417 extern int of_remove_property(struct device_node *np, struct property *prop); ··· 816 803 static inline int of_remove_property(struct device_node *np, struct property *prop) 817 804 { 818 805 return 0; 806 + } 807 + 808 + static inline bool of_machine_compatible_match(const char *const *compats) 809 + { 810 + return false; 819 811 } 820 812 821 813 static inline bool of_console_check(const struct device_node *dn, const char *name, int index)
+2
include/uapi/linux/auxvec.h
··· 32 32 #define AT_HWCAP2 26 /* extension of AT_HWCAP */ 33 33 #define AT_RSEQ_FEATURE_SIZE 27 /* rseq supported feature size */ 34 34 #define AT_RSEQ_ALIGN 28 /* rseq allocation alignment */ 35 + #define AT_HWCAP3 29 /* extension of AT_HWCAP */ 36 + #define AT_HWCAP4 30 /* extension of AT_HWCAP */ 35 37 36 38 #define AT_EXECFN 31 /* filename of program */ 37 39
+1 -3
sound/aoa/soundbus/i2sbus/core.c
··· 365 365 return 0; 366 366 } 367 367 368 - static int i2sbus_remove(struct macio_dev* dev) 368 + static void i2sbus_remove(struct macio_dev *dev) 369 369 { 370 370 struct i2sbus_control *control = dev_get_drvdata(&dev->ofdev.dev); 371 371 struct i2sbus_dev *i2sdev, *tmp; 372 372 373 373 list_for_each_entry_safe(i2sdev, tmp, &control->list, item) 374 374 soundbus_remove_one(&i2sdev->sound); 375 - 376 - return 0; 377 375 } 378 376 379 377 #ifdef CONFIG_PM
+12
tools/testing/selftests/powerpc/copyloops/asm/ppc_asm.h
··· 47 47 /* Default to taking the first of any alternative feature sections */ 48 48 test_feature = 1 49 49 50 + #define DCBT_SETUP_STREAMS(from, from_parms, to, to_parms, scratch) \ 51 + lis scratch,0x8000; /* GO=1 */ \ 52 + clrldi scratch,scratch,32; \ 53 + /* setup read stream 0 */ \ 54 + dcbt 0,from,0b01000; /* addr from */ \ 55 + dcbt 0,from_parms,0b01010; /* length and depth from */ \ 56 + /* setup write stream 1 */ \ 57 + dcbtst 0,to,0b01000; /* addr to */ \ 58 + dcbtst 0,to_parms,0b01010; /* length and depth to */ \ 59 + eieio; \ 60 + dcbt 0,scratch,0b01010; /* all streams GO */ 61 + 50 62 #endif /* __SELFTESTS_POWERPC_PPC_ASM_H */