patch-2.2.10 linux/arch/ppc/kernel/chrp_setup.c
Next file: linux/arch/ppc/kernel/head.S
Previous file: linux/arch/ppc/kernel/chrp_pci.c
Back to the patch index
Back to the overall index
- Lines: 181
- Date:
Fri Jun 4 13:30:47 1999
- Orig file:
v2.2.9/linux/arch/ppc/kernel/chrp_setup.c
- Orig date:
Tue May 11 13:10:28 1999
diff -u --recursive --new-file v2.2.9/linux/arch/ppc/kernel/chrp_setup.c linux/arch/ppc/kernel/chrp_setup.c
@@ -32,6 +32,7 @@
#include <linux/console.h>
#include <linux/pci.h>
#include <linux/openpic.h>
+#include <linux/version.h>
#include <asm/mmu.h>
#include <asm/processor.h>
@@ -64,6 +65,7 @@
unsigned long chrp_get_rtc_time(void);
int chrp_set_rtc_time(unsigned long nowtime);
+unsigned long rtas_event_scan_rate = 0, rtas_event_scan_ct = 0;
void chrp_calibrate_decr(void);
void chrp_time_init(void);
@@ -179,6 +181,7 @@
return len;
}
+#if 0
/*
* Fixes for the National Semiconductor PC78308VUL SuperI/O
*
@@ -228,12 +231,13 @@
/* select logical device 1 (KBC/Mouse) */
sio_fixup_irq("mouse", 1, 12, 2);
}
-
+#endif
__initfunc(void
chrp_setup_arch(unsigned long * memory_start_p, unsigned long * memory_end_p))
{
extern char cmd_line[];
+ struct device_node *device;
/* init to some ~sane value until calibrate_delay() runs */
loops_per_sec = 50000000;
@@ -273,80 +277,73 @@
find_path_device("/"), "platform-open-pic", NULL);
OpenPIC = ioremap((unsigned long)OpenPIC, sizeof(struct OpenPIC));
}
-
+
/*
* Fix the Super I/O configuration
*/
- sio_init();
+ /*sio_init();*/
#ifdef CONFIG_DUMMY_CONSOLE
conswitchp = &dummy_con;
#endif
- /* my starmax 6000 needs this but the longtrail shouldn't do it -- Cort */
- if ( !strncmp("MOT", get_property(find_path_device("/"),
- "model", NULL),3) )
- *memory_start_p = pmac_find_bridges(*memory_start_p, *memory_end_p);
- /*
- * The f50 has a lot of IO space - we need to map some in that
- * isn't covered by the BAT mappings in MMU_init() -- Cort
+ *memory_start_p = pmac_find_bridges(*memory_start_p, *memory_end_p);
+
+ /* Get the event scan rate for the rtas so we know how
+ * often it expects a heartbeat. -- Cort
*/
- if ( !strncmp("F5", get_property(find_path_device("/"),
- "ibm,model-class", NULL),2) )
+ if ( rtas_data )
{
-#if 0
- /*
- * This ugly hack allows us to force ioremap() to
- * create a 1-to-1 mapping for us, even though
- * the address is < ioremap_base. This is necessary
- * since we want our PCI IO space to have contiguous
- * virtual addresses and I think it's worse to have
- * calls to map_page() here.
- * -- Cort
- */
- unsigned long hold = ioremap_base;
- ioremap_base = 0;
- __ioremap(0x90000000, 0x10000000, _PAGE_NO_CACHE);
- ioremap_base = hold;
-#endif
+ struct property *p;
+ device = find_devices("rtas");
+ for ( p = device->properties;
+ strncmp(p->name, "rtas-event-scan-rate", 20) && p ;
+ p = p->next )
+ /* nothing */ ;
+ if ( p && *(unsigned long *)p->value )
+ {
+ rtas_event_scan_rate = (HZ/(*(unsigned long *)p->value)*30)-1;
+ rtas_event_scan_ct = 1;
+ printk("RTAS Event Scan Rate: %lu (%lu jiffies)\n",
+ *(unsigned long *)p->value, rtas_event_scan_rate );
+ }
}
}
void
+chrp_event_scan(void)
+{
+ unsigned char log[1024];
+ if ( rtas_event_scan_rate && (rtas_event_scan_ct-- <= 0) )
+ {
+ call_rtas( "event-scan", 4, 1, NULL, 0x0, 1, __pa(log), 1024 );
+ rtas_event_scan_ct = rtas_event_scan_rate;
+ }
+}
+
+void
chrp_restart(char *cmd)
{
-#if 0
- extern unsigned int rtas_entry, rtas_data, rtas_size;
printk("RTAS system-reboot returned %d\n",
call_rtas("system-reboot", 0, 1, NULL));
- printk("rtas_entry: %08lx rtas_data: %08lx rtas_size: %08lx\n",
- rtas_entry,rtas_data,rtas_size);
for (;;);
-#else
- printk("System Halted\n");
- while(1);
-#endif
}
void
chrp_power_off(void)
{
- /* RTAS doesn't seem to work on Longtrail.
- For now, do it the same way as the PReP. */
-#if 0
- extern unsigned int rtas_entry, rtas_data, rtas_size;
+ /* allow power on only with power button press */
+#define PWR_FIELD(x) (0x8000000000000000 >> ((x)-96))
printk("RTAS power-off returned %d\n",
- call_rtas("power-off", 2, 1, NULL, 0, 0));
- printk("rtas_entry: %08lx rtas_data: %08lx rtas_size: %08lx\n",
- rtas_entry,rtas_data,rtas_size);
+ call_rtas("power-off", 2, 1, NULL,
+ ((PWR_FIELD(96)|PWR_FIELD(97))>>32)&0xffffffff,
+ (PWR_FIELD(96)|PWR_FIELD(97))&0xffffffff));
+#undef PWR_FIELD
for (;;);
-#else
- chrp_restart(NULL);
-#endif
}
void
chrp_halt(void)
{
- chrp_restart(NULL);
+ chrp_power_off();
}
u_int
@@ -668,5 +665,21 @@
ppc_ide_md.ide_init_hwif = chrp_ide_init_hwif_ports;
ppc_ide_md.io_base = _IO_BASE;
-#endif
+#endif
+ /*
+ * Print the banner, then scroll down so boot progress
+ * can be printed. -- Cort
+ */
+ chrp_progress("Linux/PPC "UTS_RELEASE"\n");
+}
+
+void chrp_progress(char *s)
+{
+ extern unsigned int rtas_data;
+
+ if ( (_machine != _MACH_chrp) || !rtas_data )
+ return;
+ call_rtas( "display-character", 1, 1, NULL, '\r' );
+ while ( *s )
+ call_rtas( "display-character", 1, 1, NULL, *s++ );
}
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)