[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
periph_target is 0 (Re: boot from secondary IDE drive)
- Subject: periph_target is 0 (Re: boot from secondary IDE drive)
- From: 藤原 誠/ Makoto Fujiwara<makoto@ki.nu>
- To: port-powerpc-ja@jp.netbsd.org
- Date: Sat, 18 Aug 2001 16:17:29 +0900
- Organization: www.ki.nu
- Message-ID: <yfmvgjl25x2.wl@harry.ki.nu>
- In-Reply-To: <yfm7kw359vv.wl@harry.ki.nu>
- References: <yfm7kw359vv.wl@harry.ki.nu>
- Delivered-To: mailing list port-powerpc-ja@jp.netbsd.org
- Mailing-List: contact port-powerpc-ja-help@jp.netbsd.org; run by ezmlm-idx
- User-Agent: Wanderlust/2.6.0 (Twist And Shout) SEMI/1.14.3 (Ushinoya)FLIM/1.14.2 (Yagi-Nishiguchi) APEL/10.3 Emacs/21.0.104(powerpc-apple-netbsdelf1.5W) MULE/5.0 (賢木)
> 千葉市中央区長洲
> 藤原 誠
何とか wd1 で固定で boot-device を見つけるようにして(hard code)
boot すると dmesg が採集出来るようになりました (強引)。
どうも drive 1 というのを拾えていないように思われます(それは当
然な訳ですが)。
sys/dev/scsipi/scsipiconf.h
の中に、次のような行があるのですが、
366 int periph_target; /* target ID (drive # on ATAPI) */
この変数に drive # が入っていないのが問題ということでしょうか。
添付の patch を使って、wd1 に置いた disk から
boot enet:0 /pci@f2000000/pci-bridge@d/mac-io@7/ata-4/disk@1:0
で起動した時の dmesg の一部。後半の wd1 で drive 1 と表示
しているが、それを拾えていない。二回目の periph_target(0) が問題
+----------------------------------------------
| wd0 at wdc0 channel 0 drive 0
| -- addr(1)
| -- p()
|
| -- dv_xname(wd0)
| -- cp (/disk@1)
| -- bp (disk@1:0/netbsd)
|
| -- addr(1) periph_target(0) does not match, returning.
| : <IBM-DPTA-371020>
| wd0: drive supports 16-sector PIO transfers, LBA addressing
| wd0: 9779 MB, 16383 cyl, 16 head, 63 sec, 512 bytes/sect x 20028960 sectors
| wd0: drive supports PIO mode 4, DMA mode 2, Ultra-DMA mode 4 (Ultra/66)
| wd1 at wdc0 channel 0 drive 1
| -- addr(1)
| -- p()
|
| -- dv_xname(wd1)
| -- cp (/disk@1)
| -- bp (disk@1:0/netbsd)
|
| -- addr(1) periph_target(0).
|
| -- addr(1) aa -> aa_channel(0).
| : <ST320420A>
| wd1: drive supports 16-sector PIO transfers, LBA addressing
+----------------------------------------------
もっとも、channel も指定出来るような必要もあるような気もします。
@wdc:channel:drive:partition, つまり disk@0:0:1:0 のような。
---
(藤原)
http://www.ki.nu/software/NetBSD/iBook2/
--- autoconf.c-ooo Sun Jul 22 20:29:47 2001
+++ autoconf.c Sat Aug 18 15:58:26 2001
@@ -142,6 +142,10 @@
*
* The last component may have no address... so append it.
*/
+#if 1
+ printf("\n -- before -- cbootpath(%s)\n -- bootpath(%s)\n -- last(%s)\n",
+ cbootpath,bootpath,last);
+#endif
p = strrchr(cbootpath, '/');
if (p != NULL && strchr(p, '@') == NULL) {
/* Append it. */
@@ -157,6 +161,10 @@
/* XXX Does this belong here, or device_register()? */
if ((p = strrchr(cbootpath, ',')) != NULL)
*p = 0;
+#if 1
+ printf("\n -- after -- cbootpath(%s)\n -- bootpath(%s)\n -- last(%s)\n",
+ cbootpath,bootpath,last);
+#endif
}
#define DEVICE_IS(dev, name) \
@@ -219,6 +227,9 @@
} else
addr = strtoul(p + 1, &p, 16);
+#if 1
+ printf("\n -- addr(%x)\n -- p(%s)\n",(int) addr, p);
+#endif
if (DEVICE_IS(dev->dv_parent, "mainbus")) {
struct confargs *ca = aux;
@@ -262,9 +273,23 @@
return;
} else if (DEVICE_IS(dev->dv_parent, "wdc")) {
struct ata_atapi_attach *aa = aux;
+ struct scsipibus_attach_args *sa = aux;
- if (addr != aa->aa_channel)
+ printf("\n -- dv_xname(%s)\n -- cp (%s)\n -- bp (%s)\n",
+ dev->dv_xname,cp,bp);
+ if (strcmp( dev->dv_xname,"wd1") == 0 ) {
+ printf("\n -- addr(%x) periph_target(%x).\n",
+ (int) addr, sa->sa_periph->periph_target);
+ printf("\n -- addr(%x) aa -> aa_channel(%x).\n",
+ (int) addr, aa->aa_channel);
+ }
+ else {
+ if (addr != sa->sa_periph->periph_target)
+ {
+ printf("\n -- addr(%x) periph_target(%x) does not match, returning.\n",
+ (int) addr, sa->sa_periph->periph_target);
return;
+ }}
} else
return;