Pull sn-features into release branch

Tony Luck d67eb16f c85b2a5f

+103 -20
+19 -11
arch/ia64/sn/kernel/setup.c
··· 49 49 #include <asm/sn/clksupport.h> 50 50 #include <asm/sn/sn_sal.h> 51 51 #include <asm/sn/geo.h> 52 + #include <asm/sn/sn_feature_sets.h> 52 53 #include "xtalk/xwidgetdev.h" 53 54 #include "xtalk/hubdev.h" 54 55 #include <asm/sn/klconfig.h> ··· 98 97 int sn_prom_type; /* 0=hardware, 1=medusa/realprom, 2=medusa/fakeprom */ 99 98 100 99 short physical_node_map[MAX_PHYSNODE_ID]; 100 + static unsigned long sn_prom_features[MAX_PROM_FEATURE_SETS]; 101 101 102 102 EXPORT_SYMBOL(physical_node_map); 103 103 ··· 273 271 u32 version = sn_sal_rev(); 274 272 extern void sn_cpu_init(void); 275 273 276 - ia64_sn_plat_set_error_handling_features(); 274 + ia64_sn_plat_set_error_handling_features(); // obsolete 275 + ia64_sn_set_os_feature(OSF_MCA_SLV_TO_OS_INIT_SLV); 276 + ia64_sn_set_os_feature(OSF_FEAT_LOG_SBES); 277 + 277 278 278 279 #if defined(CONFIG_VT) && defined(CONFIG_VGA_CONSOLE) 279 280 /* ··· 318 313 } 319 314 320 315 printk("SGI SAL version %x.%02x\n", version >> 8, version & 0x00FF); 321 - 322 - /* 323 - * Confirm the SAL we're running on is recent enough... 324 - */ 325 - if (version < SN_SAL_MIN_VERSION) { 326 - printk(KERN_ERR "This kernel needs SGI SAL version >= " 327 - "%x.%02x\n", SN_SAL_MIN_VERSION >> 8, 328 - SN_SAL_MIN_VERSION & 0x00FF); 329 - panic("PROM version too old\n"); 330 - } 331 316 332 317 master_nasid = boot_get_nasid(); 333 318 ··· 474 479 */ 475 480 if (nodepdaindr[0] == NULL) 476 481 return; 482 + 483 + for (i = 0; i < MAX_PROM_FEATURE_SETS; i++) 484 + if (ia64_sn_get_prom_feature_set(i, &sn_prom_features[i]) != 0) 485 + break; 477 486 478 487 cpuid = smp_processor_id(); 479 488 cpuphyid = get_sapicid(); ··· 650 651 651 652 return -1; 652 653 } 654 + 655 + int sn_prom_feature_available(int id) 656 + { 657 + if (id >= BITS_PER_LONG * MAX_PROM_FEATURE_SETS) 658 + return 0; 659 + return test_bit(id, sn_prom_features); 660 + } 661 + EXPORT_SYMBOL(sn_prom_feature_available); 662 +
+57
include/asm-ia64/sn/sn_feature_sets.h
··· 1 + #ifndef _ASM_IA64_SN_FEATURE_SETS_H 2 + #define _ASM_IA64_SN_FEATURE_SETS_H 3 + 4 + /* 5 + * SN PROM Features 6 + * 7 + * This file is subject to the terms and conditions of the GNU General Public 8 + * License. See the file "COPYING" in the main directory of this archive 9 + * for more details. 10 + * 11 + * Copyright (c) 2005 Silicon Graphics, Inc. All rights reserved. 12 + */ 13 + 14 + 15 + #include <asm/types.h> 16 + #include <asm/bitops.h> 17 + 18 + /* --------------------- PROM Features -----------------------------*/ 19 + extern int sn_prom_feature_available(int id); 20 + 21 + #define MAX_PROM_FEATURE_SETS 2 22 + 23 + /* 24 + * The following defines features that may or may not be supported by the 25 + * current PROM. The OS uses sn_prom_feature_available(feature) to test for 26 + * the presence of a PROM feature. Down rev (old) PROMs will always test 27 + * "false" for new features. 28 + * 29 + * Use: 30 + * if (sn_prom_feature_available(PRF_FEATURE_XXX)) 31 + * ... 32 + */ 33 + 34 + /* 35 + * Example: feature XXX 36 + */ 37 + #define PRF_FEATURE_XXX 0 38 + 39 + 40 + 41 + /* --------------------- OS Features -------------------------------*/ 42 + 43 + /* 44 + * The following defines OS features that are optionally present in 45 + * the operating system. 46 + * During boot, PROM is notified of these features via a series of calls: 47 + * 48 + * ia64_sn_set_os_feature(feature1); 49 + * 50 + * Once enabled, a feature cannot be disabled. 51 + * 52 + * By default, features are disabled unless explicitly enabled. 53 + */ 54 + #define OSF_MCA_SLV_TO_OS_INIT_SLV 0 55 + #define OSF_FEAT_LOG_SBES 1 56 + 57 + #endif /* _ASM_IA64_SN_FEATURE_SETS_H */
+27 -9
include/asm-ia64/sn/sn_sal.h
··· 80 80 #define SN_SAL_RESERVED_DO_NOT_USE 0x02000062 81 81 #define SN_SAL_IOIF_GET_PCI_TOPOLOGY 0x02000064 82 82 83 + #define SN_SAL_GET_PROM_FEATURE_SET 0x02000065 84 + #define SN_SAL_SET_OS_FEATURE_SET 0x02000066 85 + 83 86 /* 84 87 * Service-specific constants 85 88 */ ··· 121 118 /* 122 119 * Error Handling Features 123 120 */ 124 - #define SAL_ERR_FEAT_MCA_SLV_TO_OS_INIT_SLV 0x1 125 - #define SAL_ERR_FEAT_LOG_SBES 0x2 121 + #define SAL_ERR_FEAT_MCA_SLV_TO_OS_INIT_SLV 0x1 // obsolete 122 + #define SAL_ERR_FEAT_LOG_SBES 0x2 // obsolete 126 123 #define SAL_ERR_FEAT_MFR_OVERRIDE 0x4 127 124 #define SAL_ERR_FEAT_SBE_THRESHOLD 0xffff0000 128 125 ··· 153 150 154 151 return (u32)(systab->sal_b_rev_major << 8 | systab->sal_b_rev_minor); 155 152 } 156 - 157 - /* 158 - * Specify the minimum PROM revsion required for this kernel. 159 - * Note that they're stored in hex format... 160 - */ 161 - #define SN_SAL_MIN_VERSION 0x0404 162 153 163 154 /* 164 155 * Returns the master console nasid, if the call fails, return an illegal ··· 333 336 } 334 337 335 338 /* 336 - * Set Error Handling Features 339 + * Set Error Handling Features (Obsolete) 337 340 */ 338 341 static inline u64 339 342 ia64_sn_plat_set_error_handling_features(void) ··· 1047 1050 struct ia64_sal_retval rv; 1048 1051 SAL_CALL_NOLOCK(rv, SN_SAL_FAKE_PROM, 0, 0, 0, 0, 0, 0, 0); 1049 1052 return (rv.status == 0); 1053 + } 1054 + 1055 + static inline int 1056 + ia64_sn_get_prom_feature_set(int set, unsigned long *feature_set) 1057 + { 1058 + struct ia64_sal_retval rv; 1059 + 1060 + SAL_CALL_NOLOCK(rv, SN_SAL_GET_PROM_FEATURE_SET, set, 0, 0, 0, 0, 0, 0); 1061 + if (rv.status != 0) 1062 + return rv.status; 1063 + *feature_set = rv.v0; 1064 + return 0; 1065 + } 1066 + 1067 + static inline int 1068 + ia64_sn_set_os_feature(int feature) 1069 + { 1070 + struct ia64_sal_retval rv; 1071 + 1072 + SAL_CALL_NOLOCK(rv, SN_SAL_SET_OS_FEATURE_SET, feature, 0, 0, 0, 0, 0, 0); 1073 + return rv.status; 1050 1074 } 1051 1075 1052 1076 #endif /* _ASM_IA64_SN_SN_SAL_H */