Module Name: src
Committed By: phx
Date: Thu Mar 10 21:11:50 UTC 2011
Modified Files:
src/sys/arch/sandpoint/stand/altboot: brdsetup.c globals.h pci.c
pciide.c stg.c
Log Message:
Make sure the device class is IDE (class 0, subclass 1), before checking
the PCI interface for native/legacy mode. Different subclasses are always
assumed being in native mode. That makes the Acard IDE controller work.
New macros for PCI interface, revision and class.
To generate a diff of this commit:
cvs rdiff -u -r1.7 -r1.8 src/sys/arch/sandpoint/stand/altboot/brdsetup.c
cvs rdiff -u -r1.8 -r1.9 src/sys/arch/sandpoint/stand/altboot/globals.h
cvs rdiff -u -r1.4 -r1.5 src/sys/arch/sandpoint/stand/altboot/pci.c \
src/sys/arch/sandpoint/stand/altboot/pciide.c
cvs rdiff -u -r1.2 -r1.3 src/sys/arch/sandpoint/stand/altboot/stg.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.7 src/sys/arch/sandpoint/stand/altboot/brdsetup.c:1.8
--- src/sys/arch/sandpoint/stand/altboot/brdsetup.c:1.7 Sun Mar 6 18:22:13 2011
+++ src/sys/arch/sandpoint/stand/altboot/brdsetup.c Thu Mar 10 21:11:49 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: brdsetup.c,v 1.7 2011/03/06 18:22:13 phx Exp $ */
+/* $NetBSD: brdsetup.c,v 1.8 2011/03/10 21:11:49 phx Exp $ */
/*-
* Copyright (c) 2008 The NetBSD Foundation, Inc.
@@ -211,7 +211,7 @@
/* VIA 686B southbridge at dev 22 */
brdtype = BRD_ENCOREPP1;
}
- else if ((pcicfgread(dev11, PCI_CLASS_REG) >> 16) == PCI_CLASS_ETH) {
+ else if (PCI_CLASS(pcicfgread(dev11, PCI_CLASS_REG)) == PCI_CLASS_ETH) {
/* ADMtek AN985 (tlp) or RealTek 8169S (re) at dev 11 */
brdtype = BRD_KUROBOX;
}
Index: src/sys/arch/sandpoint/stand/altboot/globals.h
diff -u src/sys/arch/sandpoint/stand/altboot/globals.h:1.8 src/sys/arch/sandpoint/stand/altboot/globals.h:1.9
--- src/sys/arch/sandpoint/stand/altboot/globals.h:1.8 Sun Mar 6 18:22:13 2011
+++ src/sys/arch/sandpoint/stand/altboot/globals.h Thu Mar 10 21:11:49 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: globals.h,v 1.8 2011/03/06 18:22:13 phx Exp $ */
+/* $NetBSD: globals.h,v 1.9 2011/03/10 21:11:49 phx Exp $ */
#ifdef DEBUG
#define DPRINTF(x) printf x
@@ -80,12 +80,16 @@
void pcicfgwrite(unsigned, int, unsigned);
#define PCI_ID_REG 0x00
-#define PCI_COMMAND_STATUS_REG 0x04
#define PCI_VENDOR(id) ((id) & 0xffff)
#define PCI_PRODUCT(id) (((id) >> 16) & 0xffff)
#define PCI_VENDOR_INVALID 0xffff
#define PCI_DEVICE(v,p) ((v) | ((p) << 16))
+#define PCI_COMMAND_STATUS_REG 0x04
#define PCI_CLASS_REG 0x08
+#define PCI_CLASS(v) (((v) >> 16) & 0xffff)
+#define PCI_SUBCLASS(v) (((v) >> 16) & 0xff)
+#define PCI_INTERFACE(v) (((v) & 0xff00) >> 8)
+#define PCI_REVISION(v) ((v) & 0xff)
#define PCI_CLASS_PPB 0x0604
#define PCI_CLASS_ETH 0x0200
#define PCI_CLASS_SCSI 0x0100
Index: src/sys/arch/sandpoint/stand/altboot/pci.c
diff -u src/sys/arch/sandpoint/stand/altboot/pci.c:1.4 src/sys/arch/sandpoint/stand/altboot/pci.c:1.5
--- src/sys/arch/sandpoint/stand/altboot/pci.c:1.4 Mon Feb 14 06:21:29 2011
+++ src/sys/arch/sandpoint/stand/altboot/pci.c Thu Mar 10 21:11:49 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: pci.c,v 1.4 2011/02/14 06:21:29 nisimura Exp $ */
+/* $NetBSD: pci.c,v 1.5 2011/03/10 21:11:49 phx Exp $ */
/*-
* Copyright (c) 2007 The NetBSD Foundation, Inc.
@@ -190,25 +190,26 @@
/* 0x00 */
#ifdef DEBUG
printf("%02d:%02d:%02d:", bus, dev, func);
- val = cfgread(bus, dev, func, 0x00);
+ val = cfgread(bus, dev, func, PCI_ID_REG);
printf(" chip %04x.%04x", val & 0xffff, val>>16);
val = cfgread(bus, dev, func, 0x2c);
printf(" card %04x.%04x", val & 0xffff, val>>16);
- val = cfgread(bus, dev, func, 0x08);
+ val = cfgread(bus, dev, func, PCI_CLASS_REG);
printf(" rev %02x class %02x.%02x.%02x",
- val & 0xff, (val>>24), (val>>16) & 0xff, (val>>8) & 0xff);
- val = cfgread(bus, dev, func, 0x0c);
+ PCI_REVISION(val), (val>>24), (val>>16) & 0xff,
+ PCI_INTERFACE(val));
+ val = cfgread(bus, dev, func, PCI_BHLC_REG);
printf(" hdr %02x\n", (val>>16) & 0xff);
#endif
/* 0x04 */
- val = cfgread(bus, dev, func, 0x04);
+ val = cfgread(bus, dev, func, PCI_COMMAND_STATUS_REG);
val |= 0xffff0107; /* enable IO,MEM,MASTER,SERR */
cfgwrite(bus, dev, func, 0x04, val);
/* 0x0c */
val = 0x80 << 8 | 0x08 /* 32B cache line */;
- cfgwrite(bus, dev, func, 0x0c, val);
+ cfgwrite(bus, dev, func, PCI_BHLC_REG, val);
/* 0x3c */
val = cfgread(bus, dev, func, 0x3c) & ~0xff;
@@ -217,13 +218,13 @@
/* 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)
+ if (PCI_CLASS(val) == PCI_CLASS_IDE && (PCI_INTERFACE(val) & 0x05) == 0)
return 0;
memassign(bus, dev, func);
/* descending toward PCI-PCI bridge */
- if ((cfgread(bus, dev, func, 0x08) >> 16) == PCI_CLASS_PPB) {
+ if ((cfgread(bus, dev, func, PCI_CLASS_REG) >> 16) == PCI_CLASS_PPB) {
unsigned new;
/* 0x18 */
@@ -336,7 +337,7 @@
unsigned class;
class = cfgread(bus, dev, func, PCI_CLASS_REG);
- return ((class >> 16) == (unsigned)data);
+ return PCI_CLASS(class) == (unsigned)data;
}
static int
@@ -352,7 +353,7 @@
if (PCI_VENDOR(pciid) == 0)
continue;
class = cfgread(bus, device, 0, PCI_CLASS_REG);
- if ((class >> 16) == PCI_CLASS_PPB) {
+ if (PCI_CLASS(class) == PCI_CLASS_PPB) {
/* exploring bus beyond PCI-PCI bridge */
index = _pcilookup(bus + 1,
match, data, list, index, limit);
Index: src/sys/arch/sandpoint/stand/altboot/pciide.c
diff -u src/sys/arch/sandpoint/stand/altboot/pciide.c:1.4 src/sys/arch/sandpoint/stand/altboot/pciide.c:1.5
--- src/sys/arch/sandpoint/stand/altboot/pciide.c:1.4 Wed Mar 9 20:35:56 2011
+++ src/sys/arch/sandpoint/stand/altboot/pciide.c Thu Mar 10 21:11:49 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: pciide.c,v 1.4 2011/03/09 20:35:56 phx Exp $ */
+/* $NetBSD: pciide.c,v 1.5 2011/03/10 21:11:49 phx Exp $ */
/*-
* Copyright (c) 2008 The NetBSD Foundation, Inc.
@@ -81,7 +81,8 @@
l->tag = tag;
val = pcicfgread(tag, PCI_CLASS_REG);
- native = ((val >> 8) & 05) != 0;
+ native = PCI_CLASS(val) != PCI_CLASS_IDE ||
+ (PCI_INTERFACE(val) & 05) != 0;
if (native) {
/* native, use BAR 01234 */
l->bar[0] = pciiobase + (pcicfgread(tag, 0x10) &~ 01);
Index: src/sys/arch/sandpoint/stand/altboot/stg.c
diff -u src/sys/arch/sandpoint/stand/altboot/stg.c:1.2 src/sys/arch/sandpoint/stand/altboot/stg.c:1.3
--- src/sys/arch/sandpoint/stand/altboot/stg.c:1.2 Tue Mar 8 19:00:38 2011
+++ src/sys/arch/sandpoint/stand/altboot/stg.c Thu Mar 10 21:11:50 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: stg.c,v 1.2 2011/03/08 19:00:38 phx Exp $ */
+/* $NetBSD: stg.c,v 1.3 2011/03/10 21:11:50 phx Exp $ */
/*-
* Copyright (c) 2011 Frank Wille.
@@ -63,9 +63,7 @@
#define R1_ER_MASK 0x3f0000 /* Rx error indication */
#define STGE_DMACtrl 0x00
-#define DMAC_RxDMAComplete (1U << 3)
#define DMAC_RxDMAPollNow (1U << 4)
-#define DMAC_TxDMAComplete (1U << 11)
#define DMAC_TxDMAPollNow (1U << 12)
#define STGE_TFDListPtrLo 0x10
#define STGE_TFDListPtrHi 0x14
@@ -149,7 +147,7 @@
v = pcicfgread(tag, PCI_ID_REG);
switch (v) {
- case PCI_DEVICE(0x13f0, 0x1023): /* ST1023 */
+ case PCI_DEVICE(0x13f0, 0x1023): /* ST1023, IP1000A */
return 1;
}
return 0;
@@ -257,7 +255,7 @@
CSR_WRITE_4(l, STGE_MACCtrl, 0); /* do IFSSelect(0) first */
macctl = MC_StatisticsDisable | MC_TxEnable | MC_RxEnable;
- if ((pcicfgread(tag, PCI_CLASS_REG) & 0xff) >= 6) {
+ if (PCI_REVISION(pcicfgread(tag, PCI_CLASS_REG)) >= 6) {
/* some workarounds for revisions >= 6 */
CSR_WRITE_2(l, STGE_DebugCtrl,
CSR_READ_2(l, STGE_DebugCtrl) | 0x0200);