[PATCH] ppc64: introduce FW_FEATURE_ISERIES

Signed-off-by: Stephen Rothwell <sfr@canb.auug.org.au>
Signed-off-by: Paul Mackerras <paulus@samba.org>

authored by

Stephen Rothwell and committed by
Paul Mackerras
aed31351 8d15a3e5

+23 -5
+3
arch/ppc64/kernel/iSeries_setup.c
··· 39 #include <asm/cputable.h> 40 #include <asm/sections.h> 41 #include <asm/iommu.h> 42 43 #include <asm/time.h> 44 #include "iSeries_setup.h" ··· 314 extern unsigned long memory_limit; 315 316 DBG(" -> iSeries_init_early()\n"); 317 318 ppcdbg_initialize(); 319
··· 39 #include <asm/cputable.h> 40 #include <asm/sections.h> 41 #include <asm/iommu.h> 42 + #include <asm/firmware.h> 43 44 #include <asm/time.h> 45 #include "iSeries_setup.h" ··· 313 extern unsigned long memory_limit; 314 315 DBG(" -> iSeries_init_early()\n"); 316 + 317 + ppc64_firmware_features = FW_FEATURE_ISERIES; 318 319 ppcdbg_initialize(); 320
-1
arch/ppc64/kernel/pSeries_lpar.c
··· 52 EXPORT_SYMBOL(plpar_hcall_norets); 53 EXPORT_SYMBOL(plpar_hcall_8arg_2ret); 54 55 - extern void fw_feature_init(void); 56 extern void pSeries_find_serial_port(void); 57 58
··· 52 EXPORT_SYMBOL(plpar_hcall_norets); 53 EXPORT_SYMBOL(plpar_hcall_8arg_2ret); 54 55 extern void pSeries_find_serial_port(void); 56 57
+1 -1
arch/ppc64/kernel/pSeries_setup.c
··· 262 * using contents of device-tree/ibm,hypertas-functions. 263 * Ultimately this functionality may be moved into prom.c prom_init(). 264 */ 265 - void __init fw_feature_init(void) 266 { 267 struct device_node * dn; 268 char * hypertas;
··· 262 * using contents of device-tree/ibm,hypertas-functions. 263 * Ultimately this functionality may be moved into prom.c prom_init(). 264 */ 265 + static void __init fw_feature_init(void) 266 { 267 struct device_node * dn; 268 char * hypertas;
+19 -3
include/asm-ppc64/firmware.h
··· 44 #define FW_FEATURE_XDABR (1UL<<18) 45 #define FW_FEATURE_MULTITCE (1UL<<19) 46 #define FW_FEATURE_SPLPAR (1UL<<20) 47 48 enum { 49 - FW_FEATURE_PSERIES = FW_FEATURE_PFT | FW_FEATURE_TCE | 50 FW_FEATURE_SPRG0 | FW_FEATURE_DABR | FW_FEATURE_COPY | 51 FW_FEATURE_ASR | FW_FEATURE_DEBUG | FW_FEATURE_TERM | 52 FW_FEATURE_PERF | FW_FEATURE_DUMP | FW_FEATURE_INTERRUPT | ··· 55 FW_FEATURE_VIO | FW_FEATURE_RDMA | FW_FEATURE_LLAN | 56 FW_FEATURE_BULK | FW_FEATURE_XDABR | FW_FEATURE_MULTITCE | 57 FW_FEATURE_SPLPAR, 58 FW_FEATURE_POSSIBLE = 59 #ifdef CONFIG_PPC_PSERIES 60 - FW_FEATURE_PSERIES | 61 #endif 62 0, 63 }; 64 65 /* This is used to identify firmware features which are available ··· 83 84 static inline unsigned long firmware_has_feature(unsigned long feature) 85 { 86 - return ppc64_firmware_features & feature & FW_FEATURE_POSSIBLE; 87 } 88 89 #ifdef CONFIG_PPC_PSERIES
··· 44 #define FW_FEATURE_XDABR (1UL<<18) 45 #define FW_FEATURE_MULTITCE (1UL<<19) 46 #define FW_FEATURE_SPLPAR (1UL<<20) 47 + #define FW_FEATURE_ISERIES (1UL<<21) 48 49 enum { 50 + FW_FEATURE_PSERIES_POSSIBLE = FW_FEATURE_PFT | FW_FEATURE_TCE | 51 FW_FEATURE_SPRG0 | FW_FEATURE_DABR | FW_FEATURE_COPY | 52 FW_FEATURE_ASR | FW_FEATURE_DEBUG | FW_FEATURE_TERM | 53 FW_FEATURE_PERF | FW_FEATURE_DUMP | FW_FEATURE_INTERRUPT | ··· 54 FW_FEATURE_VIO | FW_FEATURE_RDMA | FW_FEATURE_LLAN | 55 FW_FEATURE_BULK | FW_FEATURE_XDABR | FW_FEATURE_MULTITCE | 56 FW_FEATURE_SPLPAR, 57 + FW_FEATURE_PSERIES_ALWAYS = 0, 58 + FW_FEATURE_ISERIES_POSSIBLE = FW_FEATURE_ISERIES, 59 + FW_FEATURE_ISERIES_ALWAYS = FW_FEATURE_ISERIES, 60 FW_FEATURE_POSSIBLE = 61 #ifdef CONFIG_PPC_PSERIES 62 + FW_FEATURE_PSERIES_POSSIBLE | 63 + #endif 64 + #ifdef CONFIG_PPC_ISERIES 65 + FW_FEATURE_ISERIES_POSSIBLE | 66 #endif 67 0, 68 + FW_FEATURE_ALWAYS = 69 + #ifdef CONFIG_PPC_PSERIES 70 + FW_FEATURE_PSERIES_ALWAYS & 71 + #endif 72 + #ifdef CONFIG_PPC_ISERIES 73 + FW_FEATURE_ISERIES_ALWAYS & 74 + #endif 75 + FW_FEATURE_POSSIBLE, 76 }; 77 78 /* This is used to identify firmware features which are available ··· 68 69 static inline unsigned long firmware_has_feature(unsigned long feature) 70 { 71 + return (FW_FEATURE_ALWAYS & feature) || 72 + (FW_FEATURE_POSSIBLE & ppc64_firmware_features & feature); 73 } 74 75 #ifdef CONFIG_PPC_PSERIES