|
@@ -1538,8 +1538,8 @@ loop:
|
|
|
while((p = pcimatch(p, 0, 0)) != nil){
|
|
|
if(p->vid == 0x8086 && (p->did & 0xfffc) == 0x2680)
|
|
|
type = Tesb;
|
|
|
- else if(p->vid == 0x8086 && (p->did & 0xfffe) == 0x27c4)
|
|
|
- type = Tich; /* 82801g[bh]m */
|
|
|
+ else if(p->vid == 0x8086 && p->did == 0x27c5)
|
|
|
+ type = Tich; /* 82801g[bh]m; compat mode fails */
|
|
|
else if(p->vid == 0x8086 && (p->did & 0xfeff) == 0x2829)
|
|
|
type = Tich; /* ich8 */
|
|
|
else if(p->vid == 0x8086 && (p->did & 0xfffe) == 0x2922)
|
|
@@ -1549,7 +1549,7 @@ loop:
|
|
|
else
|
|
|
continue;
|
|
|
if(niactlr == NCtlr){
|
|
|
- print("%spnp: too many controllers\n", tname[type]);
|
|
|
+ print("iapnp: %s: too many controllers\n", tname[type]);
|
|
|
break;
|
|
|
}
|
|
|
c = iactlr + niactlr;
|
|
@@ -1561,10 +1561,16 @@ loop:
|
|
|
io = p->mem[Abar].bar & ~0xf;
|
|
|
io = upamalloc(io, p->mem[Abar].size, 0);
|
|
|
if(io == 0){
|
|
|
- print("%s: address %#lux in use did=%x\n",
|
|
|
+ print("%s: address %#lux in use, did %#ux\n",
|
|
|
tname[c->type], io, p->did);
|
|
|
continue;
|
|
|
}
|
|
|
+ /* ugly hack: get this in compatibility mode; see memory.c:271 */
|
|
|
+ if(io == 0x40000000) {
|
|
|
+ print("%s: did %#ux is in non-sata mode. bar %#lux\n",
|
|
|
+ tname[c->type], p->did, p->mem[Abar].bar);
|
|
|
+ continue;
|
|
|
+ }
|
|
|
c->mmio = KADDR(io);
|
|
|
c->lmmio = (ulong*)c->mmio;
|
|
|
if(Intel(c->type) && p->did != 0x2681)
|