diff options
-rw-r--r-- | arch/ia64/sn/kernel/setup.c | 13 | ||||
-rw-r--r-- | arch/ia64/sn/pci/tioca_provider.c | 3 | ||||
-rw-r--r-- | include/asm-ia64/sn/sn_sal.h | 39 |
3 files changed, 19 insertions, 36 deletions
diff --git a/arch/ia64/sn/kernel/setup.c b/arch/ia64/sn/kernel/setup.c index 22e10d282c7f..7c7fe441d623 100644 --- a/arch/ia64/sn/kernel/setup.c +++ b/arch/ia64/sn/kernel/setup.c | |||
@@ -270,7 +270,7 @@ void __init sn_setup(char **cmdline_p) | |||
270 | { | 270 | { |
271 | long status, ticks_per_sec, drift; | 271 | long status, ticks_per_sec, drift; |
272 | int pxm; | 272 | int pxm; |
273 | int major = sn_sal_rev_major(), minor = sn_sal_rev_minor(); | 273 | u32 version = sn_sal_rev(); |
274 | extern void sn_cpu_init(void); | 274 | extern void sn_cpu_init(void); |
275 | 275 | ||
276 | ia64_sn_plat_set_error_handling_features(); | 276 | ia64_sn_plat_set_error_handling_features(); |
@@ -308,22 +308,21 @@ void __init sn_setup(char **cmdline_p) | |||
308 | * support here so we don't have to listen to failed keyboard probe | 308 | * support here so we don't have to listen to failed keyboard probe |
309 | * messages. | 309 | * messages. |
310 | */ | 310 | */ |
311 | if ((major < 2 || (major == 2 && minor <= 9)) && | 311 | if (version <= 0x0209 && acpi_kbd_controller_present) { |
312 | acpi_kbd_controller_present) { | ||
313 | printk(KERN_INFO "Disabling legacy keyboard support as prom " | 312 | printk(KERN_INFO "Disabling legacy keyboard support as prom " |
314 | "is too old and doesn't provide FADT\n"); | 313 | "is too old and doesn't provide FADT\n"); |
315 | acpi_kbd_controller_present = 0; | 314 | acpi_kbd_controller_present = 0; |
316 | } | 315 | } |
317 | 316 | ||
318 | printk("SGI SAL version %x.%02x\n", major, minor); | 317 | printk("SGI SAL version %x.%02x\n", version >> 8, version & 0x00FF); |
319 | 318 | ||
320 | /* | 319 | /* |
321 | * Confirm the SAL we're running on is recent enough... | 320 | * Confirm the SAL we're running on is recent enough... |
322 | */ | 321 | */ |
323 | if ((major < SN_SAL_MIN_MAJOR) || (major == SN_SAL_MIN_MAJOR && | 322 | if (version < SN_SAL_MIN_VERSION) { |
324 | minor < SN_SAL_MIN_MINOR)) { | ||
325 | printk(KERN_ERR "This kernel needs SGI SAL version >= " | 323 | printk(KERN_ERR "This kernel needs SGI SAL version >= " |
326 | "%x.%02x\n", SN_SAL_MIN_MAJOR, SN_SAL_MIN_MINOR); | 324 | "%x.%02x\n", SN_SAL_MIN_VERSION >> 8, |
325 | SN_SAL_MIN_VERSION & 0x00FF); | ||
327 | panic("PROM version too old\n"); | 326 | panic("PROM version too old\n"); |
328 | } | 327 | } |
329 | 328 | ||
diff --git a/arch/ia64/sn/pci/tioca_provider.c b/arch/ia64/sn/pci/tioca_provider.c index 05aa8c2fe9bb..51cc4e63092c 100644 --- a/arch/ia64/sn/pci/tioca_provider.c +++ b/arch/ia64/sn/pci/tioca_provider.c | |||
@@ -589,8 +589,7 @@ tioca_bus_fixup(struct pcibus_bussoft *prom_bussoft) | |||
589 | 589 | ||
590 | /* sanity check prom rev */ | 590 | /* sanity check prom rev */ |
591 | 591 | ||
592 | if (sn_sal_rev_major() < 4 || | 592 | if (sn_sal_rev() < 0x0406) { |
593 | (sn_sal_rev_major() == 4 && sn_sal_rev_minor() < 6)) { | ||
594 | printk | 593 | printk |
595 | (KERN_ERR "%s: SGI prom rev 4.06 or greater required " | 594 | (KERN_ERR "%s: SGI prom rev 4.06 or greater required " |
596 | "for tioca support\n", __FUNCTION__); | 595 | "for tioca support\n", __FUNCTION__); |
diff --git a/include/asm-ia64/sn/sn_sal.h b/include/asm-ia64/sn/sn_sal.h index 1455375d2ce4..27976d223186 100644 --- a/include/asm-ia64/sn/sn_sal.h +++ b/include/asm-ia64/sn/sn_sal.h | |||
@@ -134,43 +134,28 @@ | |||
134 | 134 | ||
135 | #define SN_SAL_FAKE_PROM 0x02009999 | 135 | #define SN_SAL_FAKE_PROM 0x02009999 |
136 | 136 | ||
137 | |||
138 | /** | 137 | /** |
139 | * sn_sal_rev_major - get the major SGI SAL revision number | 138 | * sn_sal_revision - get the SGI SAL revision number |
140 | * | 139 | * |
141 | * The SGI PROM stores its version in sal_[ab]_rev_(major|minor). | 140 | * The SGI PROM stores its version in the sal_[ab]_rev_(major|minor). |
142 | * This routine simply extracts the major value from the | 141 | * This routine simply extracts the major and minor values and |
143 | * @ia64_sal_systab structure constructed by ia64_sal_init(). | 142 | * presents them in a u32 format. |
144 | */ | 143 | * |
145 | static inline int | 144 | * For example, version 4.05 would be represented at 0x0405. |
146 | sn_sal_rev_major(void) | 145 | */ |
146 | static inline u32 | ||
147 | sn_sal_rev(void) | ||
147 | { | 148 | { |
148 | struct ia64_sal_systab *systab = efi.sal_systab; | 149 | struct ia64_sal_systab *systab = efi.sal_systab; |
149 | 150 | ||
150 | return (int)systab->sal_b_rev_major; | 151 | return (u32)(systab->sal_b_rev_major << 8 | systab->sal_b_rev_minor); |
151 | } | ||
152 | |||
153 | /** | ||
154 | * sn_sal_rev_minor - get the minor SGI SAL revision number | ||
155 | * | ||
156 | * The SGI PROM stores its version in sal_[ab]_rev_(major|minor). | ||
157 | * This routine simply extracts the minor value from the | ||
158 | * @ia64_sal_systab structure constructed by ia64_sal_init(). | ||
159 | */ | ||
160 | static inline int | ||
161 | sn_sal_rev_minor(void) | ||
162 | { | ||
163 | struct ia64_sal_systab *systab = efi.sal_systab; | ||
164 | |||
165 | return (int)systab->sal_b_rev_minor; | ||
166 | } | 152 | } |
167 | 153 | ||
168 | /* | 154 | /* |
169 | * Specify the minimum PROM revsion required for this kernel. | 155 | * Specify the minimum PROM revsion required for this kernel. |
170 | * Note that they're stored in hex format... | 156 | * Note that they're stored in hex format... |
171 | */ | 157 | */ |
172 | #define SN_SAL_MIN_MAJOR 0x4 /* SN2 kernels need at least PROM 4.0 */ | 158 | #define SN_SAL_MIN_VERSION 0x0404 |
173 | #define SN_SAL_MIN_MINOR 0x0 | ||
174 | 159 | ||
175 | /* | 160 | /* |
176 | * Returns the master console nasid, if the call fails, return an illegal | 161 | * Returns the master console nasid, if the call fails, return an illegal |