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