Skip to content
Snippets Groups Projects
Commit 0bdd340c authored by Linus Torvalds's avatar Linus Torvalds
Browse files
parents 99081049 f478af9d
No related branches found
No related tags found
No related merge requests found
...@@ -410,24 +410,16 @@ efi_init (void) ...@@ -410,24 +410,16 @@ efi_init (void)
efi_config_table_t *config_tables; efi_config_table_t *config_tables;
efi_char16_t *c16; efi_char16_t *c16;
u64 efi_desc_size; u64 efi_desc_size;
char *cp, *end, vendor[100] = "unknown"; char *cp, vendor[100] = "unknown";
extern char saved_command_line[]; extern char saved_command_line[];
int i; int i;
/* it's too early to be able to use the standard kernel command line support... */ /* it's too early to be able to use the standard kernel command line support... */
for (cp = saved_command_line; *cp; ) { for (cp = saved_command_line; *cp; ) {
if (memcmp(cp, "mem=", 4) == 0) { if (memcmp(cp, "mem=", 4) == 0) {
cp += 4; mem_limit = memparse(cp + 4, &cp);
mem_limit = memparse(cp, &end);
if (end != cp)
break;
cp = end;
} else if (memcmp(cp, "max_addr=", 9) == 0) { } else if (memcmp(cp, "max_addr=", 9) == 0) {
cp += 9; max_addr = GRANULEROUNDDOWN(memparse(cp + 9, &cp));
max_addr = GRANULEROUNDDOWN(memparse(cp, &end));
if (end != cp)
break;
cp = end;
} else { } else {
while (*cp != ' ' && *cp) while (*cp != ' ' && *cp)
++cp; ++cp;
...@@ -458,7 +450,7 @@ efi_init (void) ...@@ -458,7 +450,7 @@ efi_init (void)
/* Show what we know for posterity */ /* Show what we know for posterity */
c16 = __va(efi.systab->fw_vendor); c16 = __va(efi.systab->fw_vendor);
if (c16) { if (c16) {
for (i = 0;i < (int) sizeof(vendor) && *c16; ++i) for (i = 0;i < (int) sizeof(vendor) - 1 && *c16; ++i)
vendor[i] = *c16++; vendor[i] = *c16++;
vendor[i] = '\0'; vendor[i] = '\0';
} }
......
...@@ -352,6 +352,7 @@ start_ap: ...@@ -352,6 +352,7 @@ start_ap:
mov ar.rsc=0 // place RSE in enforced lazy mode mov ar.rsc=0 // place RSE in enforced lazy mode
;; ;;
loadrs // clear the dirty partition loadrs // clear the dirty partition
mov IA64_KR(PER_CPU_DATA)=r0 // clear physical per-CPU base
;; ;;
mov ar.bspstore=r2 // establish the new RSE stack mov ar.bspstore=r2 // establish the new RSE stack
;; ;;
......
...@@ -71,6 +71,8 @@ unsigned long __per_cpu_offset[NR_CPUS]; ...@@ -71,6 +71,8 @@ unsigned long __per_cpu_offset[NR_CPUS];
EXPORT_SYMBOL(__per_cpu_offset); EXPORT_SYMBOL(__per_cpu_offset);
#endif #endif
extern void ia64_setup_printk_clock(void);
DEFINE_PER_CPU(struct cpuinfo_ia64, cpu_info); DEFINE_PER_CPU(struct cpuinfo_ia64, cpu_info);
DEFINE_PER_CPU(unsigned long, local_per_cpu_offset); DEFINE_PER_CPU(unsigned long, local_per_cpu_offset);
DEFINE_PER_CPU(unsigned long, ia64_phys_stacked_size_p8); DEFINE_PER_CPU(unsigned long, ia64_phys_stacked_size_p8);
...@@ -445,6 +447,8 @@ setup_arch (char **cmdline_p) ...@@ -445,6 +447,8 @@ setup_arch (char **cmdline_p)
/* process SAL system table: */ /* process SAL system table: */
ia64_sal_init(efi.sal_systab); ia64_sal_init(efi.sal_systab);
ia64_setup_printk_clock();
#ifdef CONFIG_SMP #ifdef CONFIG_SMP
cpu_physical_id(0) = hard_smp_processor_id(); cpu_physical_id(0) = hard_smp_processor_id();
......
...@@ -278,3 +278,30 @@ udelay (unsigned long usecs) ...@@ -278,3 +278,30 @@ udelay (unsigned long usecs)
} }
} }
EXPORT_SYMBOL(udelay); EXPORT_SYMBOL(udelay);
static unsigned long long ia64_itc_printk_clock(void)
{
if (ia64_get_kr(IA64_KR_PER_CPU_DATA))
return sched_clock();
return 0;
}
static unsigned long long ia64_default_printk_clock(void)
{
return (unsigned long long)(jiffies_64 - INITIAL_JIFFIES) *
(1000000000/HZ);
}
unsigned long long (*ia64_printk_clock)(void) = &ia64_default_printk_clock;
unsigned long long printk_clock(void)
{
return ia64_printk_clock();
}
void __init
ia64_setup_printk_clock(void)
{
if (!(sal_platform_features & IA64_SAL_PLATFORM_FEATURE_ITC_DRIFT))
ia64_printk_clock = ia64_itc_printk_clock;
}
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
* License. See the file "COPYING" in the main directory of this archive * License. See the file "COPYING" in the main directory of this archive
* for more details. * for more details.
* *
* Copyright (c) 2000-2004 Silicon Graphics, Inc. All Rights Reserved. * Copyright (c) 2000-2006 Silicon Graphics, Inc. All Rights Reserved.
*/ */
#include <linux/types.h> #include <linux/types.h>
...@@ -137,7 +137,8 @@ int sn_salinfo_platform_oemdata(const u8 *sect_header, u8 **oemdata, u64 *oemdat ...@@ -137,7 +137,8 @@ int sn_salinfo_platform_oemdata(const u8 *sect_header, u8 **oemdata, u64 *oemdat
static int __init sn_salinfo_init(void) static int __init sn_salinfo_init(void)
{ {
salinfo_platform_oemdata = &sn_salinfo_platform_oemdata; if (ia64_platform_is("sn2"))
salinfo_platform_oemdata = &sn_salinfo_platform_oemdata;
return 0; return 0;
} }
......
...@@ -67,6 +67,7 @@ extern unsigned long last_time_offset; ...@@ -67,6 +67,7 @@ extern unsigned long last_time_offset;
extern void (*ia64_mark_idle) (int); extern void (*ia64_mark_idle) (int);
extern void snidle(int); extern void snidle(int);
extern unsigned char acpi_kbd_controller_present; extern unsigned char acpi_kbd_controller_present;
extern unsigned long long (*ia64_printk_clock)(void);
unsigned long sn_rtc_cycles_per_second; unsigned long sn_rtc_cycles_per_second;
EXPORT_SYMBOL(sn_rtc_cycles_per_second); EXPORT_SYMBOL(sn_rtc_cycles_per_second);
...@@ -358,6 +359,16 @@ sn_scan_pcdp(void) ...@@ -358,6 +359,16 @@ sn_scan_pcdp(void)
} }
} }
static unsigned long sn2_rtc_initial;
static unsigned long long ia64_sn2_printk_clock(void)
{
unsigned long rtc_now = rtc_time();
return (rtc_now - sn2_rtc_initial) *
(1000000000 / sn_rtc_cycles_per_second);
}
/** /**
* sn_setup - SN platform setup routine * sn_setup - SN platform setup routine
* @cmdline_p: kernel command line * @cmdline_p: kernel command line
...@@ -372,6 +383,7 @@ void __init sn_setup(char **cmdline_p) ...@@ -372,6 +383,7 @@ void __init sn_setup(char **cmdline_p)
u32 version = sn_sal_rev(); u32 version = sn_sal_rev();
extern void sn_cpu_init(void); extern void sn_cpu_init(void);
sn2_rtc_initial = rtc_time();
ia64_sn_plat_set_error_handling_features(); // obsolete ia64_sn_plat_set_error_handling_features(); // obsolete
ia64_sn_set_os_feature(OSF_MCA_SLV_TO_OS_INIT_SLV); ia64_sn_set_os_feature(OSF_MCA_SLV_TO_OS_INIT_SLV);
ia64_sn_set_os_feature(OSF_FEAT_LOG_SBES); ia64_sn_set_os_feature(OSF_FEAT_LOG_SBES);
...@@ -423,19 +435,6 @@ void __init sn_setup(char **cmdline_p) ...@@ -423,19 +435,6 @@ void __init sn_setup(char **cmdline_p)
*/ */
build_cnode_tables(); build_cnode_tables();
/*
* Old PROMs do not provide an ACPI FADT. Disable legacy keyboard
* support here so we don't have to listen to failed keyboard probe
* messages.
*/
if (version <= 0x0209 && acpi_kbd_controller_present) {
printk(KERN_INFO "Disabling legacy keyboard support as prom "
"is too old and doesn't provide FADT\n");
acpi_kbd_controller_present = 0;
}
printk("SGI SAL version %x.%02x\n", version >> 8, version & 0x00FF);
status = status =
ia64_sal_freq_base(SAL_FREQ_BASE_REALTIME_CLOCK, &ticks_per_sec, ia64_sal_freq_base(SAL_FREQ_BASE_REALTIME_CLOCK, &ticks_per_sec,
&drift); &drift);
...@@ -449,6 +448,21 @@ void __init sn_setup(char **cmdline_p) ...@@ -449,6 +448,21 @@ void __init sn_setup(char **cmdline_p)
platform_intr_list[ACPI_INTERRUPT_CPEI] = IA64_CPE_VECTOR; platform_intr_list[ACPI_INTERRUPT_CPEI] = IA64_CPE_VECTOR;
ia64_printk_clock = ia64_sn2_printk_clock;
/*
* Old PROMs do not provide an ACPI FADT. Disable legacy keyboard
* support here so we don't have to listen to failed keyboard probe
* messages.
*/
if (version <= 0x0209 && acpi_kbd_controller_present) {
printk(KERN_INFO "Disabling legacy keyboard support as prom "
"is too old and doesn't provide FADT\n");
acpi_kbd_controller_present = 0;
}
printk("SGI SAL version %x.%02x\n", version >> 8, version & 0x00FF);
/* /*
* we set the default root device to /dev/hda * we set the default root device to /dev/hda
* to make simulation easy * to make simulation easy
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
* License. See the file "COPYING" in the main directory of this archive * License. See the file "COPYING" in the main directory of this archive
* for more details. * for more details.
* *
* Copyright (C) 2004-2005 Silicon Graphics, Inc. All rights reserved. * Copyright (C) 2004-2006 Silicon Graphics, Inc. All rights reserved.
* *
* SGI Altix topology and hardware performance monitoring API. * SGI Altix topology and hardware performance monitoring API.
* Mark Goodwin <markgw@sgi.com>. * Mark Goodwin <markgw@sgi.com>.
...@@ -973,6 +973,9 @@ static int __devinit sn_hwperf_misc_register_init(void) ...@@ -973,6 +973,9 @@ static int __devinit sn_hwperf_misc_register_init(void)
{ {
int e; int e;
if (!ia64_platform_is("sn2"))
return 0;
sn_hwperf_init(); sn_hwperf_init();
/* /*
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment