Commit 1ababe11480d59d75be806804c71fa55d203a5a6
Committed by
Paul Mackerras
1 parent
7a6af5e380
Exists in
master
and in
4 other branches
[PATCH] ppc64: create firmware_has_feature()
Create the firmware_has_feature() inline and move the firmware feature stuff into its own header file. Signed-off-by: Stephen Rothwell <sfr@canb.auug.org.au> Signed-off-by: Paul Mackerras <paulus@samba.org>
Showing 10 changed files with 87 additions and 55 deletions Side-by-side Diff
arch/ppc64/kernel/cputable.c
arch/ppc64/kernel/lparcfg.c
| ... | ... | @@ -29,7 +29,7 @@ |
| 29 | 29 | #include <asm/iSeries/HvLpConfig.h> |
| 30 | 30 | #include <asm/lppaca.h> |
| 31 | 31 | #include <asm/hvcall.h> |
| 32 | -#include <asm/cputable.h> | |
| 32 | +#include <asm/firmware.h> | |
| 33 | 33 | #include <asm/rtas.h> |
| 34 | 34 | #include <asm/system.h> |
| 35 | 35 | #include <asm/time.h> |
| ... | ... | @@ -377,7 +377,7 @@ |
| 377 | 377 | |
| 378 | 378 | partition_active_processors = lparcfg_count_active_processors(); |
| 379 | 379 | |
| 380 | - if (ppc64_firmware_features & FW_FEATURE_SPLPAR) { | |
| 380 | + if (firmware_has_feature(FW_FEATURE_SPLPAR)) { | |
| 381 | 381 | unsigned long h_entitled, h_unallocated; |
| 382 | 382 | unsigned long h_aggregation, h_resource; |
| 383 | 383 | unsigned long pool_idle_time, pool_procs; |
| ... | ... | @@ -571,7 +571,7 @@ |
| 571 | 571 | mode_t mode = S_IRUSR; |
| 572 | 572 | |
| 573 | 573 | /* Allow writing if we have FW_FEATURE_SPLPAR */ |
| 574 | - if (ppc64_firmware_features & FW_FEATURE_SPLPAR) { | |
| 574 | + if (firmware_has_feature(FW_FEATURE_SPLPAR)) { | |
| 575 | 575 | lparcfg_fops.write = lparcfg_write; |
| 576 | 576 | mode |= S_IWUSR; |
| 577 | 577 | } |
arch/ppc64/kernel/pSeries_iommu.c
| ... | ... | @@ -45,6 +45,7 @@ |
| 45 | 45 | #include <asm/plpar_wrappers.h> |
| 46 | 46 | #include <asm/pSeries_reconfig.h> |
| 47 | 47 | #include <asm/systemcfg.h> |
| 48 | +#include <asm/firmware.h> | |
| 48 | 49 | #include "pci.h" |
| 49 | 50 | |
| 50 | 51 | #define DBG(fmt...) |
| ... | ... | @@ -546,7 +547,7 @@ |
| 546 | 547 | } |
| 547 | 548 | |
| 548 | 549 | if (systemcfg->platform & PLATFORM_LPAR) { |
| 549 | - if (ppc64_firmware_features & FW_FEATURE_MULTITCE) { | |
| 550 | + if (firmware_has_feature(FW_FEATURE_MULTITCE)) { | |
| 550 | 551 | ppc_md.tce_build = tce_buildmulti_pSeriesLP; |
| 551 | 552 | ppc_md.tce_free = tce_freemulti_pSeriesLP; |
| 552 | 553 | } else { |
arch/ppc64/kernel/pSeries_setup.c
| ... | ... | @@ -60,7 +60,7 @@ |
| 60 | 60 | #include <asm/nvram.h> |
| 61 | 61 | #include <asm/plpar_wrappers.h> |
| 62 | 62 | #include <asm/xics.h> |
| 63 | -#include <asm/cputable.h> | |
| 63 | +#include <asm/firmware.h> | |
| 64 | 64 | |
| 65 | 65 | #include "i8259.h" |
| 66 | 66 | #include "mpic.h" |
| 67 | 67 | |
| ... | ... | @@ -231,11 +231,11 @@ |
| 231 | 231 | |
| 232 | 232 | pSeries_nvram_init(); |
| 233 | 233 | |
| 234 | - if (ppc64_firmware_features & FW_FEATURE_SPLPAR) | |
| 234 | + if (firmware_has_feature(FW_FEATURE_SPLPAR)) | |
| 235 | 235 | vpa_init(boot_cpuid); |
| 236 | 236 | |
| 237 | 237 | /* Choose an idle loop */ |
| 238 | - if (ppc64_firmware_features & FW_FEATURE_SPLPAR) { | |
| 238 | + if (firmware_has_feature(FW_FEATURE_SPLPAR)) { | |
| 239 | 239 | if (get_paca()->lppaca.shared_proc) { |
| 240 | 240 | printk(KERN_INFO "Using shared processor idle loop\n"); |
| 241 | 241 | ppc_md.idle_loop = pseries_shared_idle; |
arch/ppc64/kernel/pSeries_smp.c
| ... | ... | @@ -41,6 +41,7 @@ |
| 41 | 41 | #include <asm/machdep.h> |
| 42 | 42 | #include <asm/xics.h> |
| 43 | 43 | #include <asm/cputable.h> |
| 44 | +#include <asm/firmware.h> | |
| 44 | 45 | #include <asm/system.h> |
| 45 | 46 | #include <asm/rtas.h> |
| 46 | 47 | #include <asm/plpar_wrappers.h> |
| ... | ... | @@ -326,7 +327,7 @@ |
| 326 | 327 | if (cpu != boot_cpuid) |
| 327 | 328 | xics_setup_cpu(); |
| 328 | 329 | |
| 329 | - if (ppc64_firmware_features & FW_FEATURE_SPLPAR) | |
| 330 | + if (firmware_has_feature(FW_FEATURE_SPLPAR)) | |
| 330 | 331 | vpa_init(cpu); |
| 331 | 332 | |
| 332 | 333 | cpu_clear(cpu, of_spin_map); |
arch/ppc64/kernel/process.c
| ... | ... | @@ -50,6 +50,7 @@ |
| 50 | 50 | #include <asm/machdep.h> |
| 51 | 51 | #include <asm/iSeries/HvCallHpt.h> |
| 52 | 52 | #include <asm/cputable.h> |
| 53 | +#include <asm/firmware.h> | |
| 53 | 54 | #include <asm/sections.h> |
| 54 | 55 | #include <asm/tlbflush.h> |
| 55 | 56 | #include <asm/time.h> |
| ... | ... | @@ -206,7 +207,7 @@ |
| 206 | 207 | /* purr is nothing but processor time base */ |
| 207 | 208 | |
| 208 | 209 | #if defined(CONFIG_PPC_PSERIES) |
| 209 | - if (ppc64_firmware_features & FW_FEATURE_SPLPAR) { | |
| 210 | + if (firmware_has_feature(FW_FEATURE_SPLPAR)) { | |
| 210 | 211 | struct cpu_usage *cu = &__get_cpu_var(cpu_usage_array); |
| 211 | 212 | long unsigned start_tb, current_tb; |
| 212 | 213 | start_tb = old_thread->start_tb; |
arch/ppc64/kernel/sysfs.c
| ... | ... | @@ -13,6 +13,7 @@ |
| 13 | 13 | #include <asm/current.h> |
| 14 | 14 | #include <asm/processor.h> |
| 15 | 15 | #include <asm/cputable.h> |
| 16 | +#include <asm/firmware.h> | |
| 16 | 17 | #include <asm/hvcall.h> |
| 17 | 18 | #include <asm/prom.h> |
| 18 | 19 | #include <asm/systemcfg.h> |
| ... | ... | @@ -154,7 +155,7 @@ |
| 154 | 155 | |
| 155 | 156 | #ifdef CONFIG_PPC_PSERIES |
| 156 | 157 | /* instruct hypervisor to maintain PMCs */ |
| 157 | - if (ppc64_firmware_features & FW_FEATURE_SPLPAR) | |
| 158 | + if (firmware_has_feature(FW_FEATURE_SPLPAR)) | |
| 158 | 159 | get_paca()->lppaca.pmcregs_in_use = 1; |
| 159 | 160 | #endif /* CONFIG_PPC_PSERIES */ |
| 160 | 161 | } |
arch/ppc64/kernel/time.c
| ... | ... | @@ -67,6 +67,7 @@ |
| 67 | 67 | #include <asm/prom.h> |
| 68 | 68 | #include <asm/sections.h> |
| 69 | 69 | #include <asm/systemcfg.h> |
| 70 | +#include <asm/firmware.h> | |
| 70 | 71 | |
| 71 | 72 | u64 jiffies_64 __cacheline_aligned_in_smp = INITIAL_JIFFIES; |
| 72 | 73 | |
| ... | ... | @@ -372,7 +373,7 @@ |
| 372 | 373 | |
| 373 | 374 | /* collect purr register values often, for accurate calculations */ |
| 374 | 375 | #if defined(CONFIG_PPC_PSERIES) |
| 375 | - if (ppc64_firmware_features & FW_FEATURE_SPLPAR) { | |
| 376 | + if (firmware_has_feature(FW_FEATURE_SPLPAR)) { | |
| 376 | 377 | struct cpu_usage *cu = &__get_cpu_var(cpu_usage_array); |
| 377 | 378 | cu->current_tb = mfspr(SPRN_PURR); |
| 378 | 379 | } |
include/asm-ppc64/cputable.h
| ... | ... | @@ -66,44 +66,6 @@ |
| 66 | 66 | return cur_cpu_spec->cpu_features & feature; |
| 67 | 67 | } |
| 68 | 68 | |
| 69 | - | |
| 70 | -/* This is used to identify firmware features which are available | |
| 71 | - * to the kernel. | |
| 72 | - */ | |
| 73 | -extern unsigned long ppc64_firmware_features; | |
| 74 | - | |
| 75 | -/* firmware feature bitmask values */ | |
| 76 | -#define FIRMWARE_MAX_FEATURES 63 | |
| 77 | - | |
| 78 | -#define FW_FEATURE_PFT (1UL<<0) | |
| 79 | -#define FW_FEATURE_TCE (1UL<<1) | |
| 80 | -#define FW_FEATURE_SPRG0 (1UL<<2) | |
| 81 | -#define FW_FEATURE_DABR (1UL<<3) | |
| 82 | -#define FW_FEATURE_COPY (1UL<<4) | |
| 83 | -#define FW_FEATURE_ASR (1UL<<5) | |
| 84 | -#define FW_FEATURE_DEBUG (1UL<<6) | |
| 85 | -#define FW_FEATURE_TERM (1UL<<7) | |
| 86 | -#define FW_FEATURE_PERF (1UL<<8) | |
| 87 | -#define FW_FEATURE_DUMP (1UL<<9) | |
| 88 | -#define FW_FEATURE_INTERRUPT (1UL<<10) | |
| 89 | -#define FW_FEATURE_MIGRATE (1UL<<11) | |
| 90 | -#define FW_FEATURE_PERFMON (1UL<<12) | |
| 91 | -#define FW_FEATURE_CRQ (1UL<<13) | |
| 92 | -#define FW_FEATURE_VIO (1UL<<14) | |
| 93 | -#define FW_FEATURE_RDMA (1UL<<15) | |
| 94 | -#define FW_FEATURE_LLAN (1UL<<16) | |
| 95 | -#define FW_FEATURE_BULK (1UL<<17) | |
| 96 | -#define FW_FEATURE_XDABR (1UL<<18) | |
| 97 | -#define FW_FEATURE_MULTITCE (1UL<<19) | |
| 98 | -#define FW_FEATURE_SPLPAR (1UL<<20) | |
| 99 | - | |
| 100 | -typedef struct { | |
| 101 | - unsigned long val; | |
| 102 | - char * name; | |
| 103 | -} firmware_feature_t; | |
| 104 | - | |
| 105 | -extern firmware_feature_t firmware_features_table[]; | |
| 106 | - | |
| 107 | 69 | #endif /* __ASSEMBLY__ */ |
| 108 | 70 | |
| 109 | 71 | /* CPU kernel features */ |
| 110 | 72 | |
| ... | ... | @@ -140,10 +102,8 @@ |
| 140 | 102 | #define CPU_FTR_MMCRA_SIHV ASM_CONST(0x0000080000000000) |
| 141 | 103 | #define CPU_FTR_CTRL ASM_CONST(0x0000100000000000) |
| 142 | 104 | |
| 143 | -/* Platform firmware features */ | |
| 144 | -#define FW_FTR_ ASM_CONST(0x0000000000000001) | |
| 145 | - | |
| 146 | 105 | #ifndef __ASSEMBLY__ |
| 106 | + | |
| 147 | 107 | #define COMMON_USER_PPC64 (PPC_FEATURE_32 | PPC_FEATURE_64 | \ |
| 148 | 108 | PPC_FEATURE_HAS_FPU | PPC_FEATURE_HAS_MMU) |
| 149 | 109 | |
| 150 | 110 | |
| ... | ... | @@ -156,10 +116,9 @@ |
| 156 | 116 | #define CPU_FTR_PPCAS_ARCH_V2 (CPU_FTR_PPCAS_ARCH_V2_BASE) |
| 157 | 117 | #else |
| 158 | 118 | #define CPU_FTR_PPCAS_ARCH_V2 (CPU_FTR_PPCAS_ARCH_V2_BASE | CPU_FTR_16M_PAGE) |
| 159 | -#endif | |
| 119 | +#endif /* CONFIG_PPC_ISERIES */ | |
| 160 | 120 | |
| 161 | -#define COMMON_PPC64_FW (0) | |
| 162 | -#endif | |
| 121 | +#endif /* __ASSEMBLY */ | |
| 163 | 122 | |
| 164 | 123 | #ifdef __ASSEMBLY__ |
| 165 | 124 |
include/asm-ppc64/firmware.h
| 1 | +/* | |
| 2 | + * include/asm-ppc64/firmware.h | |
| 3 | + * | |
| 4 | + * Extracted from include/asm-ppc64/cputable.h | |
| 5 | + * | |
| 6 | + * Copyright (C) 2001 Ben. Herrenschmidt (benh@kernel.crashing.org) | |
| 7 | + * | |
| 8 | + * Modifications for ppc64: | |
| 9 | + * Copyright (C) 2003 Dave Engebretsen <engebret@us.ibm.com> | |
| 10 | + * | |
| 11 | + * This program is free software; you can redistribute it and/or | |
| 12 | + * modify it under the terms of the GNU General Public License | |
| 13 | + * as published by the Free Software Foundation; either version | |
| 14 | + * 2 of the License, or (at your option) any later version. | |
| 15 | + */ | |
| 16 | +#ifndef __ASM_PPC_FIRMWARE_H | |
| 17 | +#define __ASM_PPC_FIRMWARE_H | |
| 18 | + | |
| 19 | +#ifdef __KERNEL__ | |
| 20 | + | |
| 21 | +#ifndef __ASSEMBLY__ | |
| 22 | + | |
| 23 | +/* firmware feature bitmask values */ | |
| 24 | +#define FIRMWARE_MAX_FEATURES 63 | |
| 25 | + | |
| 26 | +#define FW_FEATURE_PFT (1UL<<0) | |
| 27 | +#define FW_FEATURE_TCE (1UL<<1) | |
| 28 | +#define FW_FEATURE_SPRG0 (1UL<<2) | |
| 29 | +#define FW_FEATURE_DABR (1UL<<3) | |
| 30 | +#define FW_FEATURE_COPY (1UL<<4) | |
| 31 | +#define FW_FEATURE_ASR (1UL<<5) | |
| 32 | +#define FW_FEATURE_DEBUG (1UL<<6) | |
| 33 | +#define FW_FEATURE_TERM (1UL<<7) | |
| 34 | +#define FW_FEATURE_PERF (1UL<<8) | |
| 35 | +#define FW_FEATURE_DUMP (1UL<<9) | |
| 36 | +#define FW_FEATURE_INTERRUPT (1UL<<10) | |
| 37 | +#define FW_FEATURE_MIGRATE (1UL<<11) | |
| 38 | +#define FW_FEATURE_PERFMON (1UL<<12) | |
| 39 | +#define FW_FEATURE_CRQ (1UL<<13) | |
| 40 | +#define FW_FEATURE_VIO (1UL<<14) | |
| 41 | +#define FW_FEATURE_RDMA (1UL<<15) | |
| 42 | +#define FW_FEATURE_LLAN (1UL<<16) | |
| 43 | +#define FW_FEATURE_BULK (1UL<<17) | |
| 44 | +#define FW_FEATURE_XDABR (1UL<<18) | |
| 45 | +#define FW_FEATURE_MULTITCE (1UL<<19) | |
| 46 | +#define FW_FEATURE_SPLPAR (1UL<<20) | |
| 47 | + | |
| 48 | +/* This is used to identify firmware features which are available | |
| 49 | + * to the kernel. | |
| 50 | + */ | |
| 51 | +extern unsigned long ppc64_firmware_features; | |
| 52 | + | |
| 53 | +static inline unsigned long firmware_has_feature(unsigned long feature) | |
| 54 | +{ | |
| 55 | + return ppc64_firmware_features & feature; | |
| 56 | +} | |
| 57 | + | |
| 58 | +typedef struct { | |
| 59 | + unsigned long val; | |
| 60 | + char * name; | |
| 61 | +} firmware_feature_t; | |
| 62 | + | |
| 63 | +extern firmware_feature_t firmware_features_table[]; | |
| 64 | + | |
| 65 | +#endif /* __ASSEMBLY__ */ | |
| 66 | +#endif /* __KERNEL__ */ | |
| 67 | +#endif /* __ASM_PPC_FIRMWARE_H */ |