Module Name: src
Committed By: nisimura
Date: Mon Feb 14 06:21:29 UTC 2011
Modified Files:
src/sys/arch/sandpoint/stand/altboot: brdsetup.c globals.h pci.c
Log Message:
- add preliminary Netronics NH230 and NH231 supports.
- assign PCI configuration register 0x3c with IDSEL value by PCI framework,
eliminating most of pcifixup() logic in simple NASes.
To generate a diff of this commit:
cvs rdiff -u -r1.4 -r1.5 src/sys/arch/sandpoint/stand/altboot/brdsetup.c
cvs rdiff -u -r1.5 -r1.6 src/sys/arch/sandpoint/stand/altboot/globals.h
cvs rdiff -u -r1.3 -r1.4 src/sys/arch/sandpoint/stand/altboot/pci.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/arch/sandpoint/stand/altboot/brdsetup.c
diff -u src/sys/arch/sandpoint/stand/altboot/brdsetup.c:1.4 src/sys/arch/sandpoint/stand/altboot/brdsetup.c:1.5
--- src/sys/arch/sandpoint/stand/altboot/brdsetup.c:1.4 Thu Feb 10 13:38:08 2011
+++ src/sys/arch/sandpoint/stand/altboot/brdsetup.c Mon Feb 14 06:21:29 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: brdsetup.c,v 1.4 2011/02/10 13:38:08 nisimura Exp $ */
+/* $NetBSD: brdsetup.c,v 1.5 2011/02/14 06:21:29 nisimura Exp $ */
/*-
* Copyright (c) 2008 The NetBSD Foundation, Inc.
@@ -54,6 +54,7 @@
BRD_DECL(qnap);
BRD_DECL(iomega);
BRD_DECL(dlink);
+BRD_DECL(nhnas);
static struct brdprop brdlist[] = {
{
@@ -62,21 +63,21 @@
BRD_SANDPOINTX3,
0,
"com", 0x3f8, 115200,
- motsetup, motbrdfix, motpcifix },
+ motsetup, motbrdfix, motpcifix, NULL },
{
"encpp1",
"EnCore PP1",
BRD_ENCOREPP1,
0,
"com", 0x3f8, 115200,
- encsetup, encbrdfix, encpcifix },
+ encsetup, encbrdfix, encpcifix, NULL },
{
"kurobox",
"KuroBox",
BRD_KUROBOX,
32768000,
"eumb", 0x4600, 57600,
- kurosetup, kurobrdfix, kuropcifix },
+ kurosetup, kurobrdfix, NULL, NULL },
{
"synology",
"Synology DS",
@@ -84,35 +85,42 @@
33164691, /* from Synology/Linux source */
/* 33168000, XXX better precision? */
"eumb", 0x4500, 115200,
- synosetup, synobrdfix, synopcifix, synoreset },
+ NULL, synobrdfix, NULL, synoreset },
{
"qnap",
"QNAP TS-101",
BRD_QNAPTS101,
0,
"eumb", 0x4500, 115200,
- NULL, NULL, qnappcifix },
+ NULL, qnapbrdfix, NULL, NULL },
{
"iomega",
"IOMEGA StorCenter",
BRD_STORCENTER,
0,
"eumb", 0x4500, 115200,
- NULL, iomegabrdfix, iomegapcifix },
+ NULL, iomegabrdfix, NULL, NULL },
{
"dlink",
"D-Link DSM-G600",
BRD_DLINKDSM,
0,
"eumb", 0x4500, 9600,
- NULL, dlinkbrdfix, dlinkpcifix },
+ NULL, dlinkbrdfix, NULL, NULL },
+ {
+ "nhnas",
+ "Netronics NH230/231",
+ BRD_NH230NAS,
+ 0,
+ "eumb", 0x4500, 9600,
+ NULL, nhnasbrdfix, NULL, NULL },
{
"unknown",
"Unknown board",
BRD_UNKNOWN,
0,
"eumb", 0x4500, 115200,
- NULL, NULL, NULL }, /* must be the last */
+ NULL, NULL, NULL, NULL }, /* must be the last */
};
static struct brdprop *brdprop;
@@ -169,7 +177,7 @@
char *consname;
int consport;
uint32_t extclk;
- unsigned pchb, pcib, val;
+ unsigned pchb, pcib, dev11, dev13, dev15, dev16, val;
extern struct btinfo_memory bi_mem;
extern struct btinfo_console bi_cons;
extern struct btinfo_clock bi_clk;
@@ -190,33 +198,44 @@
extclk = EXT_CLK_FREQ; /* usually 33MHz */
busclock = 0;
+ dev11 = pcimaketag(0, 11, 0);
+ dev13 = pcimaketag(0, 13, 0);
+ dev15 = pcimaketag(0, 15, 0);
+ dev16 = pcimaketag(0, 16, 0);
+
if (pcifinddev(0x10ad, 0x0565, &pcib) == 0) {
+ /* WinBond 553 southbridge at dev 11 */
brdtype = BRD_SANDPOINTX3;
}
else if (pcifinddev(0x1106, 0x0686, &pcib) == 0) {
+ /* VIA 686B southbridge at dev 22 */
brdtype = BRD_ENCOREPP1;
}
- else if ((pcicfgread(pcimaketag(0, 11, 0), PCI_CLASS_REG) >> 16) ==
- PCI_CLASS_ETH) {
- /* tlp (ADMtek AN985) or re (RealTek 8169S) at dev 11 */
+ else if ((pcicfgread(dev11, PCI_CLASS_REG) >> 16) == PCI_CLASS_ETH) {
+ /* ADMtek AN985 (tlp) or RealTek 8169S (re) at dev 11 */
brdtype = BRD_KUROBOX;
}
- else if (PCI_VENDOR(pcicfgread(pcimaketag(0, 15, 0), PCI_ID_REG)) ==
- 0x11ab) { /* PCI_VENDOR_MARVELL */
+ else if (PCI_VENDOR(pcicfgread(dev15, PCI_ID_REG)) == 0x11ab) {
+ /* SKnet/Marvell (sk) at dev 15 */
brdtype = BRD_SYNOLOGY;
}
- else if (PCI_VENDOR(pcicfgread(pcimaketag(0, 15, 0), PCI_ID_REG)) ==
- 0x8086) { /* PCI_VENDOR_INTEL */
+ else if (PCI_VENDOR(pcicfgread(dev15, PCI_ID_REG)) == 0x8086) {
+ /* Intel (wm) at dev 15 */
brdtype = BRD_QNAPTS101;
}
- else if (PCI_VENDOR(pcicfgread(pcimaketag(0, 13, 0), PCI_ID_REG)) ==
- 0x1106) { /* PCI_VENDOR_VIA */
+ else if (PCI_VENDOR(pcicfgread(dev13, PCI_ID_REG)) == 0x1106) {
+ /* VIA 6410 (viaide) at dev 13 */
brdtype = BRD_STORCENTER;
}
- else if (PCI_VENDOR(pcicfgread(pcimaketag(0, 16, 0), PCI_ID_REG)) ==
- 0x1191) { /* PCI_VENDOR_ACARD */
+ else if (PCI_VENDOR(pcicfgread(dev16, PCI_ID_REG)) == 0x1191) {
+ /* ACARD ATP865 (acardide) at dev 16 */
brdtype = BRD_DLINKDSM;
}
+ else if (PCI_VENDOR(pcicfgread(dev16, PCI_ID_REG)) == 0x1283
+ || PCI_VENDOR(pcicfgread(dev16, PCI_ID_REG)) == 0x1095) {
+ /* ITE (iteide) or SiI (satalink) at dev 16 */
+ brdtype = BRD_NH230NAS;
+ }
brdprop = brd_lookup(brdtype);
@@ -320,7 +339,7 @@
void
encbrdfix(struct brdprop *brd)
{
- unsigned ac97, ide, pcib, pmgt, usb12, umot4, val;
+ unsigned ac97, ide, pcib, pmgt, usb12, usb34, val;
/*
* VIA82C686B Southbridge
@@ -334,7 +353,7 @@
pcib = pcimaketag(0, 22, 0);
ide = pcimaketag(0, 22, 1);
usb12 = pcimaketag(0, 22, 2);
- umot4 = pcimaketag(0, 22, 3);
+ usb34 = pcimaketag(0, 22, 3);
pmgt = pcimaketag(0, 22, 4);
ac97 = pcimaketag(0, 22, 5);
@@ -368,15 +387,125 @@
val = pcicfgread(usb12, 0x3c) &~ 0xff;
val |= 11;
pcicfgwrite(usb12, 0x3c, val);
- val = pcicfgread(umot4, 0x3c) &~ 0xff;
+ val = pcicfgread(usb34, 0x3c) &~ 0xff;
val |= 11;
- pcicfgwrite(umot4, 0x3c, val);
+ pcicfgwrite(usb34, 0x3c, val);
val = pcicfgread(ac97, 0x3c) &~ 0xff;
val |= 5;
pcicfgwrite(ac97, 0x3c, val);
}
void
+encpcifix(struct brdprop *brd)
+{
+ unsigned ide, irq, net, pcib, steer, val;
+
+#define STEER(v, b) (((v) & (b)) ? "edge" : "level")
+ pcib = pcimaketag(0, 22, 0);
+ ide = pcimaketag(0, 22, 1);
+ net = pcimaketag(0, 25, 0);
+
+ /*
+ * //// VIA PIRQ ////
+ * 0x57/56/55/54 - Dx CB Ax xS
+ */
+ val = pcicfgread(pcib, 0x54); /* Dx CB Ax xs */
+ steer = val & 0xf;
+ irq = (val >> 12) & 0xf; /* 15:12 */
+ if (irq) {
+ printf("pin A -> irq %d, %s\n",
+ irq, STEER(steer, 0x1));
+ }
+ irq = (val >> 16) & 0xf; /* 19:16 */
+ if (irq) {
+ printf("pin B -> irq %d, %s\n",
+ irq, STEER(steer, 0x2));
+ }
+ irq = (val >> 20) & 0xf; /* 23:20 */
+ if (irq) {
+ printf("pin C -> irq %d, %s\n",
+ irq, STEER(steer, 0x4));
+ }
+ irq = (val >> 28); /* 31:28 */
+ if (irq) {
+ printf("pin D -> irq %d, %s\n",
+ irq, STEER(steer, 0x8));
+ }
+#if 0
+ /*
+ * //// IDE fixup ////
+ * - "native mode" (ide 0x09)
+ * - use primary only (ide 0x40)
+ */
+ /* ide: 0x09 - programming interface; 1000'SsPp */
+ val = pcicfgread(ide, 0x08) & 0xffff00ff;
+ pcicfgwrite(ide, 0x08, val | (0x8f << 8));
+
+ /* ide: 0x10-20 - leave them PCI memory space assigned */
+
+ /* ide: 0x40 - use primary only */
+ val = pcicfgread(ide, 0x40) &~ 03;
+ val |= 02;
+ pcicfgwrite(ide, 0x40, val);
+#else
+ /*
+ * //// IDE fixup ////
+ * - "compatiblity mode" (ide 0x09)
+ * - use primary only (ide 0x40)
+ * - remove PCI pin assignment (ide 0x3d)
+ */
+ /* ide: 0x09 - programming interface; 1000'SsPp */
+ val = pcicfgread(ide, 0x08) & 0xffff00ff;
+ val |= (0x8a << 8);
+ pcicfgwrite(ide, 0x08, val);
+
+ /* ide: 0x10-20 */
+ /*
+ experiment shows writing ide: 0x09 changes these
+ register behaviour. The pcicfgwrite() above writes
+ 0x8a at ide: 0x09 to make sure legacy IDE. Then
+ reading BAR0-3 is to return value 0s even though
+ pcisetup() has written range assignments. Value
+ overwrite makes no effect. Having 0x8f for native
+ PCIIDE doesn't change register values and brings no
+ weirdness.
+ */
+
+ /* ide: 0x40 - use primary only */
+ val = pcicfgread(ide, 0x40) &~ 03;
+ val |= 02;
+ pcicfgwrite(ide, 0x40, val);
+
+ /* ide: 0x3d/3c - turn off PCI pin */
+ val = pcicfgread(ide, 0x3c) & 0xffff00ff;
+ pcicfgwrite(ide, 0x3c, val);
+#endif
+ /*
+ * //// USBx2, audio, and modem fixup ////
+ * - disable USB #0 and #1 (pcib 0x48 and 0x85)
+ * - disable AC97 audio and MC97 modem (pcib 0x85)
+ */
+
+ /* pcib: 0x48 - disable USB #0 at function 2 */
+ val = pcicfgread(pcib, 0x48);
+ pcicfgwrite(pcib, 0x48, val | 04);
+
+ /* pcib: 0x85 - disable USB #1 at function 3 */
+ /* pcib: 0x85 - disable AC97/MC97 at function 5/6 */
+ val = pcicfgread(pcib, 0x84);
+ pcicfgwrite(pcib, 0x84, val | 0x1c00);
+
+ /*
+ * //// fxp fixup ////
+ * - use PCI pin A line 25 (fxp 0x3d/3c)
+ */
+ /* 0x3d/3c - PCI pin/line */
+ val = pcicfgread(net, 0x3c) & 0xffff0000;
+ val |= (('A' - '@') << 8) | 25;
+ pcicfgwrite(net, 0x3c, val);
+}
+
+void
motsetup(struct brdprop *brd)
{
@@ -499,116 +628,6 @@
}
void
-encpcifix(struct brdprop *brd)
-{
- unsigned ide, irq, net, pcib, steer, val;
-
-#define STEER(v, b) (((v) & (b)) ? "edge" : "level")
- pcib = pcimaketag(0, 22, 0);
- ide = pcimaketag(0, 22, 1);
- net = pcimaketag(0, 25, 0);
-
- /*
- * //// VIA PIRQ ////
- * 0x57/56/55/54 - Dx CB Ax xS
- */
- val = pcicfgread(pcib, 0x54); /* Dx CB Ax xs */
- steer = val & 0xf;
- irq = (val >> 12) & 0xf; /* 15:12 */
- if (irq) {
- printf("pin A -> irq %d, %s\n",
- irq, STEER(steer, 0x1));
- }
- irq = (val >> 16) & 0xf; /* 19:16 */
- if (irq) {
- printf("pin B -> irq %d, %s\n",
- irq, STEER(steer, 0x2));
- }
- irq = (val >> 20) & 0xf; /* 23:20 */
- if (irq) {
- printf("pin C -> irq %d, %s\n",
- irq, STEER(steer, 0x4));
- }
- irq = (val >> 28); /* 31:28 */
- if (irq) {
- printf("pin D -> irq %d, %s\n",
- irq, STEER(steer, 0x8));
- }
-#if 0
- /*
- * //// IDE fixup ////
- * - "native mode" (ide 0x09)
- * - use primary only (ide 0x40)
- */
- /* ide: 0x09 - programming interface; 1000'SsPp */
- val = pcicfgread(ide, 0x08) & 0xffff00ff;
- pcicfgwrite(ide, 0x08, val | (0x8f << 8));
-
- /* ide: 0x10-20 - leave them PCI memory space assigned */
-
- /* ide: 0x40 - use primary only */
- val = pcicfgread(ide, 0x40) &~ 03;
- val |= 02;
- pcicfgwrite(ide, 0x40, val);
-#else
- /*
- * //// IDE fixup ////
- * - "compatiblity mode" (ide 0x09)
- * - use primary only (ide 0x40)
- * - remove PCI pin assignment (ide 0x3d)
- */
- /* ide: 0x09 - programming interface; 1000'SsPp */
- val = pcicfgread(ide, 0x08) & 0xffff00ff;
- val |= (0x8a << 8);
- pcicfgwrite(ide, 0x08, val);
-
- /* ide: 0x10-20 */
- /*
- experiment shows writing ide: 0x09 changes these
- register behaviour. The pcicfgwrite() above writes
- 0x8a at ide: 0x09 to make sure legacy IDE. Then
- reading BAR0-3 is to return value 0s even though
- pcisetup() has written range assignments. Value
- overwrite makes no effect. Having 0x8f for native
- PCIIDE doesn't change register values and brings no
- weirdness.
- */
-
- /* ide: 0x40 - use primary only */
- val = pcicfgread(ide, 0x40) &~ 03;
- val |= 02;
- pcicfgwrite(ide, 0x40, val);
-
- /* ide: 0x3d/3c - turn off PCI pin */
- val = pcicfgread(ide, 0x3c) & 0xffff00ff;
- pcicfgwrite(ide, 0x3c, val);
-#endif
- /*
- * //// USBx2, audio, and modem fixup ////
- * - disable USB #0 and #1 (pcib 0x48 and 0x85)
- * - disable AC97 audio and MC97 modem (pcib 0x85)
- */
-
- /* pcib: 0x48 - disable USB #0 at function 2 */
- val = pcicfgread(pcib, 0x48);
- pcicfgwrite(pcib, 0x48, val | 04);
-
- /* pcib: 0x85 - disable USB #1 at function 3 */
- /* pcib: 0x85 - disable AC97/MC97 at function 5/6 */
- val = pcicfgread(pcib, 0x84);
- pcicfgwrite(pcib, 0x84, val | 0x1c00);
-
- /*
- * //// fxp fixup ////
- * - use PCI pin A line 25 (fxp 0x3d/3c)
- */
- /* 0x3d/3c - PCI pin/line */
- val = pcicfgread(net, 0x3c) & 0xffff0000;
- val |= (('A' - '@') << 8) | 25;
- pcicfgwrite(net, 0x3c, val);
-}
-
-void
kurosetup(struct brdprop *brd)
{
@@ -628,44 +647,6 @@
}
void
-kuropcifix(struct brdprop *brd)
-{
- unsigned dsk, net, usb, val;
-
- net = pcimaketag(0, 11, 0);
- val = pcicfgread(net, 0x3c) & 0xffffff00;
- val |= 11;
- pcicfgwrite(net, 0x3c, val);
-
- dsk = pcimaketag(0, 12, 0);
- val = pcicfgread(dsk, 0x3c) & 0xffffff00;
- val |= 12;
- pcicfgwrite(dsk, 0x3c, val);
-
- usb = pcimaketag(0, 14, 0);
- val = pcicfgread(usb, 0x3c) & 0xffffff00;
- val |= 14;
- pcicfgwrite(usb, 0x3c, val);
-
- usb = pcimaketag(0, 14, 1);
- val = pcicfgread(usb, 0x3c) & 0xffffff00;
- val |= 14;
- pcicfgwrite(usb, 0x3c, val);
-
- usb = pcimaketag(0, 14, 2);
- val = pcicfgread(usb, 0x3c) & 0xffffff00;
- val |= 14;
- pcicfgwrite(usb, 0x3c, val);
-}
-
-void
-synosetup(struct brdprop *brd)
-{
-
- /* nothing */
-}
-
-void
synobrdfix(struct brdprop *brd)
{
@@ -675,37 +656,6 @@
}
void
-synopcifix(struct brdprop *brd)
-{
- unsigned dsk, net, usb, val;
-
- dsk = pcimaketag(0, 13, 0);
- val = pcicfgread(dsk, 0x3c) & 0xffffff00;
- val |= 13;
- pcicfgwrite(dsk, 0x3c, val);
-
- usb = pcimaketag(0, 14, 0);
- val = pcicfgread(usb, 0x3c) & 0xffffff00;
- val |= 14;
- pcicfgwrite(usb, 0x3c, val);
-
- usb = pcimaketag(0, 14, 1);
- val = pcicfgread(usb, 0x3c) & 0xffffff00;
- val |= 14;
- pcicfgwrite(usb, 0x3c, val);
-
- usb = pcimaketag(0, 14, 2);
- val = pcicfgread(usb, 0x3c) & 0xffffff00;
- val |= 14;
- pcicfgwrite(usb, 0x3c, val);
-
- net = pcimaketag(0, 15, 0);
- val = pcicfgread(net, 0x3c) & 0xffffff00;
- val |= 15;
- pcicfgwrite(net, 0x3c, val);
-}
-
-void
synoreset()
{
@@ -714,34 +664,10 @@
}
void
-qnappcifix(struct brdprop *brd)
+qnapbrdfix(struct brdprop *brd)
{
- unsigned dsk, net, usb, val;
- dsk = pcimaketag(0, 13, 0);
- val = pcicfgread(dsk, 0x3c) & 0xffffff00;
- val |= 13;
- pcicfgwrite(dsk, 0x3c, val);
-
- usb = pcimaketag(0, 14, 0);
- val = pcicfgread(usb, 0x3c) & 0xffffff00;
- val |= 14;
- pcicfgwrite(usb, 0x3c, val);
-
- usb = pcimaketag(0, 14, 1);
- val = pcicfgread(usb, 0x3c) & 0xffffff00;
- val |= 14;
- pcicfgwrite(usb, 0x3c, val);
-
- usb = pcimaketag(0, 14, 2);
- val = pcicfgread(usb, 0x3c) & 0xffffff00;
- val |= 14;
- pcicfgwrite(usb, 0x3c, val);
-
- net = pcimaketag(0, 15, 0);
- val = pcicfgread(net, 0x3c) & 0xffffff00;
- val |= 15;
- pcicfgwrite(net, 0x3c, val);
+ /* illuminate LEDs */
}
void
@@ -749,37 +675,7 @@
{
init_uart(uart2base, 9600, LCR_8BITS | LCR_PNONE);
-}
-
-void
-iomegapcifix(struct brdprop *brd)
-{
- unsigned dsk, net, usb, val;
-
- dsk = pcimaketag(0, 13, 0);
- val = pcicfgread(dsk, 0x3c) & 0xffffff00;
- val |= 13;
- pcicfgwrite(dsk, 0x3c, val);
-
- usb = pcimaketag(0, 14, 0);
- val = pcicfgread(usb, 0x3c) & 0xffffff00;
- val |= 14;
- pcicfgwrite(usb, 0x3c, val);
-
- usb = pcimaketag(0, 14, 1);
- val = pcicfgread(usb, 0x3c) & 0xffffff00;
- val |= 14;
- pcicfgwrite(usb, 0x3c, val);
-
- usb = pcimaketag(0, 14, 2);
- val = pcicfgread(usb, 0x3c) & 0xffffff00;
- val |= 14;
- pcicfgwrite(usb, 0x3c, val);
-
- net = pcimaketag(0, 15, 0);
- val = pcicfgread(net, 0x3c) & 0xffffff00;
- val |= 15;
- pcicfgwrite(net, 0x3c, val);
+ /* illuminate LEDs */
}
void
@@ -787,37 +683,14 @@
{
init_uart(uart2base, 9600, LCR_8BITS | LCR_PNONE);
+ /* illuminate LEDs */
}
void
-dlinkpcifix(struct brdprop *brd)
+nhnasbrdfix(struct brdprop *brd)
{
- unsigned usb, net, dsk, val;
-
- usb = pcimaketag(0, 14, 0);
- val = pcicfgread(usb, 0x3c) & 0xffffff00;
- val |= 14;
- pcicfgwrite(usb, 0x3c, val);
-
- usb = pcimaketag(0, 14, 1);
- val = pcicfgread(usb, 0x3c) & 0xffffff00;
- val |= 14;
- pcicfgwrite(usb, 0x3c, val);
-
- usb = pcimaketag(0, 14, 2);
- val = pcicfgread(usb, 0x3c) & 0xffffff00;
- val |= 14;
- pcicfgwrite(usb, 0x3c, val);
-
- net = pcimaketag(0, 15, 0);
- val = pcicfgread(net, 0x3c) & 0xffffff00;
- val |= 15;
- pcicfgwrite(net, 0x3c, val);
- dsk = pcimaketag(0, 16, 0);
- val = pcicfgread(dsk, 0x3c) & 0xffffff00;
- val |= 16;
- pcicfgwrite(dsk, 0x3c, val);
+ /* illuminate LEDs */
}
void
Index: src/sys/arch/sandpoint/stand/altboot/globals.h
diff -u src/sys/arch/sandpoint/stand/altboot/globals.h:1.5 src/sys/arch/sandpoint/stand/altboot/globals.h:1.6
--- src/sys/arch/sandpoint/stand/altboot/globals.h:1.5 Thu Feb 10 13:38:08 2011
+++ src/sys/arch/sandpoint/stand/altboot/globals.h Mon Feb 14 06:21:29 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: globals.h,v 1.5 2011/02/10 13:38:08 nisimura Exp $ */
+/* $NetBSD: globals.h,v 1.6 2011/02/14 06:21:29 nisimura Exp $ */
#ifdef DEBUG
#define DPRINTF(x) printf x
@@ -21,6 +21,7 @@
#define BRD_SYNOLOGY 102
#define BRD_STORCENTER 103
#define BRD_DLINKDSM 104
+#define BRD_NH230NAS 105
#define BRD_UNKNOWN -1
struct brdprop {
Index: src/sys/arch/sandpoint/stand/altboot/pci.c
diff -u src/sys/arch/sandpoint/stand/altboot/pci.c:1.3 src/sys/arch/sandpoint/stand/altboot/pci.c:1.4
--- src/sys/arch/sandpoint/stand/altboot/pci.c:1.3 Thu Feb 10 13:38:08 2011
+++ src/sys/arch/sandpoint/stand/altboot/pci.c Mon Feb 14 06:21:29 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: pci.c,v 1.3 2011/02/10 13:38:08 nisimura Exp $ */
+/* $NetBSD: pci.c,v 1.4 2011/02/14 06:21:29 nisimura Exp $ */
/*-
* Copyright (c) 2007 The NetBSD Foundation, Inc.
@@ -210,6 +210,11 @@
val = 0x80 << 8 | 0x08 /* 32B cache line */;
cfgwrite(bus, dev, func, 0x0c, val);
+ /* 0x3c */
+ val = cfgread(bus, dev, func, 0x3c) & ~0xff;
+ val |= dev; /* assign IDSEL */
+ cfgwrite(bus, dev, func, 0x3c, val);
+
/* skip legacy mode IDE controller BAR assignment */
val = cfgread(bus, dev, func, PCI_CLASS_REG);
if ((val >> 16) == PCI_CLASS_IDE && ((val >> 8) & 0x05) == 0)