diff options
author | Per Fogelstrom <pefo@cvs.openbsd.org> | 2004-09-22 08:01:59 +0000 |
---|---|---|
committer | Per Fogelstrom <pefo@cvs.openbsd.org> | 2004-09-22 08:01:59 +0000 |
commit | 3c51611a09c0a70d86b9f5cdaf2ea30f99d472d1 (patch) | |
tree | dc2ed6478a75acec0b5442e1e969bc696ee4b7bd | |
parent | 6a3e60c8a63870fa516bda32e6c0b95b85222675 (diff) |
On single SCSI slot O2's the first disk is numbered 2 (the slot number)
by the ARCS Bios. To make the kernel pick up the right sd number offset
the slots if the CPU is a R10K or larger. R10K's and up are those with
single disk slots.
A more correct solution would be to dig down and check the SCSI ID's,
but right now this solutions works OK.
-rw-r--r-- | sys/arch/sgi/sgi/autoconf.c | 8 | ||||
-rw-r--r-- | sys/arch/sgi/sgi/machdep.c | 18 |
2 files changed, 18 insertions, 8 deletions
diff --git a/sys/arch/sgi/sgi/autoconf.c b/sys/arch/sgi/sgi/autoconf.c index 0ed9c6a1b0c..3e3aef9e4c8 100644 --- a/sys/arch/sgi/sgi/autoconf.c +++ b/sys/arch/sgi/sgi/autoconf.c @@ -1,4 +1,4 @@ -/* $OpenBSD: autoconf.c,v 1.5 2004/08/26 13:30:25 pefo Exp $ */ +/* $OpenBSD: autoconf.c,v 1.6 2004/09/22 08:01:58 pefo Exp $ */ /* * Copyright (c) 1996 Per Fogelstrom * Copyright (c) 1995 Theo de Raadt @@ -68,7 +68,7 @@ static int findblkmajor(struct device *); static struct device * getdisk(char *, int, int, dev_t *); struct device *getdevunit(char *, int); struct devmap *boot_findtype(char *); -void makebootdev(const char *cp); +void makebootdev(const char *, int); const char *boot_get_path_component(const char *, char *, int *); /* Struct translating from ARCS to bsd. */ @@ -479,7 +479,7 @@ boot_findtype(char *s) * Boot names look like: 'scsi()disk(n)rdisk()partition(0)/bsd' */ void -makebootdev(const char *bp) +makebootdev(const char *bp, int offs) { char namebuf[256]; const char *cp, *ncp, *ecp, *devname; @@ -497,7 +497,7 @@ makebootdev(const char *bp) devname = dp->dev; break; case DEVMAP_UNIT: - unit = i - 1; + unit = i - 1 + offs; break; case DEVMAP_PART: partition = i; diff --git a/sys/arch/sgi/sgi/machdep.c b/sys/arch/sgi/sgi/machdep.c index cb1a15c8d69..7a014492385 100644 --- a/sys/arch/sgi/sgi/machdep.c +++ b/sys/arch/sgi/sgi/machdep.c @@ -1,4 +1,4 @@ -/* $OpenBSD: machdep.c,v 1.14 2004/09/21 08:55:20 miod Exp $ */ +/* $OpenBSD: machdep.c,v 1.15 2004/09/22 08:01:58 pefo Exp $ */ /* * Copyright (c) 2003-2004 Opsycon AB (www.opsycon.se / www.opsycon.com) @@ -84,7 +84,7 @@ extern struct consdev *cn_tab; extern char kernel_text[]; -extern void makebootdev(const char *); +extern void makebootdev(const char *, int); extern void stacktrace(void); /* the following is used externally (sysctl_hw) */ @@ -123,6 +123,7 @@ int ncpu = 1; /* At least one cpu in the system */ struct user *proc0paddr; struct user *curprocpaddr; int console_ok; /* set when console initialized */ +int bootdriveoffs = 0; int32_t *environment; struct sys_rec sys_config; @@ -220,7 +221,16 @@ mips_init(int argc, int32_t *argv) sys_config.pci_mem[0].bus_base_dma = 0x00000000;/*XXX*/ sys_config.pci_mem[0].bus_reverse = my_endian; sys_config.cpu[0].tlbwired = 2; - sys_config.cpu[0].clock = 200000000; /* Reasonable default */ + sys_config.cpu[0].clock = 180000000; /* Reasonable default */ + + /* R1xK O2's are one disk slot machines. Offset slotno */ + switch ((cp0_get_prid() >> 8) & 0xff) { + case MIPS_R10000: + case MIPS_R12000: + case MIPS_R14000: + bootdriveoffs = -1; + break; + } } else { bios_putstring("Unsupported system!!!\n"); while(1); @@ -279,7 +289,7 @@ mips_init(int argc, int32_t *argv) cp = Bios_GetEnvironmentVariable("OSLoadPartition"); if (cp == NULL) cp = "unknown"; - makebootdev(cp); + makebootdev(cp, bootdriveoffs); /* * Look at arguments passed to us and compute boothowto. |