From 3c51611a09c0a70d86b9f5cdaf2ea30f99d472d1 Mon Sep 17 00:00:00 2001 From: Per Fogelstrom Date: Wed, 22 Sep 2004 08:01:59 +0000 Subject: 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. --- sys/arch/sgi/sgi/autoconf.c | 8 ++++---- sys/arch/sgi/sgi/machdep.c | 18 ++++++++++++++---- 2 files changed, 18 insertions(+), 8 deletions(-) (limited to 'sys') 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. -- cgit v1.2.3