| Summary: | BIOS drive 0x80 (on atapci0) is misnumbered ata2 | ||
|---|---|---|---|
| Product: | Base System | Reporter: | Adrian Colley <aecolley> |
| Component: | kern | Assignee: | Søren Schmidt <sos> |
| Status: | Closed FIXED | ||
| Severity: | Affects Only Me | ||
| Priority: | Normal | ||
| Version: | 4.6.2-RELEASE | ||
| Hardware: | Any | ||
| OS: | Any | ||
It seems Adrian Colley wrote:
>
> >Number: 42228
> >Category: kern
> >Synopsis: BIOS drive 0x80 (on atapci0) is misnumbered ata2
> >Confidential: no
> >Severity: serious
> >Priority: low
> >Responsible: sos-bugs
> >State: open
> >Quarter:
> >Keywords:
> >Date-Required:
> >Class: change-request
> >Submitter-Id: current-users
> >Arrival-Date: Fri Aug 30 14:40:03 PDT 2002
> >Closed-Date:
> >Last-Modified:
> >Originator: Adrian Colley <aecolley@spamcop.net>
> >Release: FreeBSD 4.6.2-RELEASE i386
> >Organization:
> YKYBHTLW, Inc.
> >Environment:
> System: FreeBSD cornerstone.colley.ie 4.6.2-RELEASE FreeBSD 4.6.2-RELEASE #0: Fri Aug 23 14:09:07 IST 2002 root@:/usr/obj/usr/src/sys/CORNERSTONE i386
> The PCI class/subclass/progif of the RZ-1000 is "01-01-00"
> (meaning IDE storage). ata_pci_add_child
> (/sys/dev/ata/ata-pci.c:342) reserves unit numbers 0 and 1
> (i.e. ata0 & ata1) for "masterdev" devices. Although I do
> not completely understand the significance of "masterdev",
> it appears to depend on certain bits in the progif byte of
> the device's PCI configuration. As the RZ-1000 reports 00
> for progif, it fails the ATA_MASTERDEV test and is given
> ata2. Some attempt is made to allocate an interrupt for
> ata2, but it fails (though this doesn't seem immediately
> relevant).
Could you somehow get the output from a verbose boot with a stock
kernel please ?
The solution is to use it as ata2+3, and just use ad4 as the
main disk (I do this on several older machines, however none
with the RZ1000 controllers). you could also remove the statuc
device numbering which will make the disks start from ad0...
-Søren
State Changed From-To: open->feedback Søren asked for boot -v out put from a GENERIC kernel. Responsible Changed From-To: freebsd-bugs->sos Søren asked for boot -v out put from a GENERIC kernel. This is a boot -v of 4.7-RELEASE after installation on a Intel Plato
motherboard (one 2G disk as master primary channel, one 17G as master on
secondary channel). This problem is also closely related to the i386/43222
bug report.
ok boot -v
SMAP type=01 base=00000000 00000000 len=00000000 0009fc00
SMAP type=01 base=00000000 00100000 len=00000000 02700000
SMAP type=02 base=00000000 fffc0000 len=00000000 00040000
Copyright (c) 1992-2002 The FreeBSD Project.
Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994
The Regents of the University of California. All rights reserved.
FreeBSD 4.7-RELEASE #0: Wed Oct 9 15:08:34 GMT 2002
root@builder.freebsdmall.com:/usr/obj/usr/src/sys/GENERIC
Calibrating clock(s) ... TSC clock: 75176515 Hz, i8254 clock: 1193280 Hz
CLK_USE_I8254_CALIBRATION not specified - using default frequency
Timecounter "i8254" frequency 1193182 Hz
CLK_USE_TSC_CALIBRATION not specified - using old calibration method
CPU: Pentium/P54C (75.17-MHz 586-class CPU)
Origin = "GenuineIntel" Id = 0x525 Stepping = 5
Features=0x1bf<FPU,VME,DE,PSE,TSC,MSR,MCE,CX8>
real memory = 41943040 (40960K bytes)
Physical memory chunk(s):
0x00001000 - 0x0009efff, 647168 bytes (158 pages)
0x00536000 - 0x027f7fff, 36446208 bytes (8898 pages)
config> di pcic0
config> di sn0
config> di lnc0
config> di ie0
config> di fe0
config> di cs0
config> di bt0
config> di aic0
config> di aha0
config> di adv0
config> q
avail memory = 35725312 (34888K bytes)
bios32: Found BIOS32 Service Directory header at 0xc00f0120
bios32: Entry = 0xf13ec (c00f13ec) Rev = 0 Len = 1
pcibios: PCI BIOS entry at 0x13d0
pnpbios: Found PnP BIOS data at 0xc00f0130
pnpbios: Entry = f0000:11c9 Rev = 1.0
Other BIOS signatures found:
ACPI: 00000000
Preloaded elf kernel "kernel" at 0xc050f000.
Preloaded userconfig_script "/boot/kernel.conf" at 0xc050f0a8.
Intel Pentium detected, installing workaround for F00F bug
Creating DISK md0
md0: Malloc disk
Math emulator present
pci_open(1): mode 1 addr port (0x0cf8) is 0x00000000
pci_open(1a): mode1res=0x00000000 (0x80000000)
pci_open(1b): mode1res=0x80000000 (0xff000001)
pci_cfgcheck: device 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
21 22 23 24 25 26 27 28 29 30 31 -- nothing found
pci_open(2): mode 2 enable port (0x0cf8) is 0x00
pci_open(2a): mode2res=0x0e (0x0e)
pci_open(2a): now trying mechanism 2
pci_cfgcheck: device 0 [class=060000] [hdr=00] is there (id=04a38086)
npx0: <math processor> on motherboard
npx0: INT 16 interface
i586_bzero() bandwidth = -1282919104 bytes/sec
bzero() bandwidth = 1626016260 bytes/sec
pcib0: <Host to PCI bridge> on motherboard
found-> vendor=0x8086, dev=0x04a3, revid=0x11
class=06-00-00, hdrtype=0x00, mfdev=0
subordinatebus=0 secondarybus=0
found-> vendor=0x1042, dev=0x1000, revid=0x01
class=01-01-00, hdrtype=0x00, mfdev=0
subordinatebus=0 secondarybus=0
map[10]: type 1, range 32, base 000001f0, size 3
map[14]: type 1, range 32, base 000003f4, size 2
found-> vendor=0x8086, dev=0x0484, revid=0x43
class=00-00-00, hdrtype=0x00, mfdev=0
subordinatebus=0 secondarybus=0
found-> vendor=0x100c, dev=0x3206, revid=0x00
class=03-00-00, hdrtype=0x00, mfdev=0
subordinatebus=0 secondarybus=0
intpin=a, irq=9
map[10]: type 1, range 32, base a0000000, size 24
found-> vendor=0x1000, dev=0x0001, revid=0x23
class=01-00-00, hdrtype=0x00, mfdev=0
subordinatebus=0 secondarybus=0
intpin=a, irq=9
map[10]: type 1, range 32, base 0000fc00, size 8
map[14]: type 1, range 32, base ffbffc00, size 8
found-> vendor=0x10ec, dev=0x8139, revid=0x10
class=02-00-00, hdrtype=0x00, mfdev=0
subordinatebus=0 secondarybus=0
intpin=a, irq=9
map[10]: type 1, range 32, base 0000f800, size 8
map[14]: type 1, range 32, base ffbff800, size 8
pci0: <PCI bus> on pcib0
CPU: (unknown), CPU->Memory posting ON
Warning: Cache parity disabled!
Cache: 256KB writeback, cache clocks=3-2-2-2/4-2-2-2
Cache flags: cache-all byte-control
DRAM: page mode memory clocks=X-4-4-4 (70ns), CAS-wait
CPU->PCI: posting ON, burst mode ON, PCI clocks=2-1-1-1
PCI->Memory: posting ON
Refresh: RAS#Only BurstOf4
atapci0: <RZ 100? ATA controller !WARNING! buggy chip data loss possible>
port 0x3f4-0x3f7,0x1f0-0x1f7 at device 1.0 on pci0
atapci0: Busmastering DMA not supported
atapci0: Busmastering DMA disabled
ata2: iobase=0x01f0 altiobase=0x03f6 bmaddr=0x0000
ata2: mask=03 ostat0=50 ostat2=00
ata2-master: ATAPI 00 00
ata2-slave: ATAPI 00 00
ata2: mask=03 stat0=50 stat1=00
ata2-master: ATA 01 a5
ata2: devices=01
ata2: at 0x1f0 on atapci0
ata2: unable to allocate interrupt
device_probe_and_attach: ata2 attach returned 6
isab0: <Intel 82378IB PCI to ISA bridge> at device 2.0 on pci0
Bus Modes: Bus Park, Resource Lock,
Coprocessor errors enabled
Mouse function enabled
Keyboard controller: 60h,62h,64h,66h
RTC: 70h-77h
Port 92: enabled
isa0: <ISA bus> on isab0
pci0: <Tseng Labs ET4000 W32P graphics accelerator> (vendor=0x100c,
dev=0x3206) at 6.0 irq 9
sym0: <810a> port 0xfc00-0xfcff mem 0xffbffc00-0xffbffcff irq 9 at device
12.0 on pci0
sym0: No NVRAM, ID 7, Fast-10, SE, parity checking
sym0: open drain IRQ line driver
sym0: using LOAD/STORE-based firmware.
rl0: <RealTek 8139 10/100BaseTX> port 0xf800-0xf8ff mem
0xffbff800-0xffbff8ff irq 9 at device 14.0 on pci0
using shared irq9.
rl0: Ethernet address: 00:c0:26:62:b1:c7
miibus0: <MII bus> on rl0
rlphy0: <RealTek internal media interface> on miibus0
rlphy0: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto
bpf: rl0 attached
ex_isa_identify()
Trying Read_Port at 203
Trying Read_Port at 243
Trying Read_Port at 283
Trying Read_Port at 2c3
Trying Read_Port at 303
Trying Read_Port at 343
Trying Read_Port at 383
Trying Read_Port at 3c3
isa_probe_children: disabling PnP devices
isa_probe_children: probing non-PnP devices
orm0: <Option ROMs> at iomem
0xc0000-0xc7fff,0xc8000-0xcbfff,0xed000-0xedfff on isa0
fdc0: <NEC 72065B or clone> at port 0x3f0-0x3f5,0x3f7 irq 6 drq 2 on isa0
fdc0: FIFO enabled, 8 bytes threshold
fd0: <1440-KB 3.5" drive> on fdc0 drive 0
fd1: <1200-KB 5.25" drive> on fdc0 drive 1
ata0 failed to probe at port 0x1f0 irq 14 on isa0
ata1: iobase=0x0170 altiobase=0x0376 bmaddr=0x0000
ata1: mask=03 ostat0=50 ostat2=00
ata1-master: ATAPI 00 00
ata1-slave: ATAPI 00 00
ata1: mask=03 stat0=50 stat1=00
ata1-master: ATA 01 a5
ata1: devices=01
ata1 at port 0x170-0x177,0x376 irq 15 on isa0
adv0: not probed (disabled)
bt0: not probed (disabled)
aha0: not probed (disabled)
aic0: not probed (disabled)
atkbdc0: <Keyboard controller (i8042)> at port 0x60,0x64 on isa0
atkbd0: <AT Keyboard> flags 0x1 irq 1 on atkbdc0
atkbd: the current kbd controller command byte 0065
atkbd: keyboard ID 0x41ab (2)
kbdc: RESET_KBD return code:00fa
kbdc: RESET_KBD status:00aa
kbd0 at atkbd0
kbd0: atkbd0, AT 101/102 (2), config:0x1, flags:0x1d0000
psm0: current command byte:0065
kbdc: TEST_AUX_PORT status:0000
kbdc: RESET_AUX return code:00fa
kbdc: RESET_AUX status:00aa
kbdc: RESET_AUX ID:0000
psm: status 00 02 64
psm: status 00 00 64
psm: status 00 03 64
psm: status 00 03 64
psm: data 08 00 00
psm: data 08 00 00
psm: status 00 02 64
psm0: <PS/2 Mouse> irq 12 on atkbdc0
psm0: model IntelliMouse Explorer, device ID 4-00, 5 buttons
psm0: config:00000000, flags:00000000, packet size:4
psm0: syncmask:08, syncbits:08
vga0: <Generic ISA VGA> at port 0x3c0-0x3df iomem 0xa0000-0xbffff on isa0
fb0: vga0, vga, type:VGA (5), flags:0x7007f
fb0: port:0x3c0-0x3df, crtc:0x3d4, mem:0xa0000 0x20000
fb0: init mode:24, bios mode:3, current mode:24
fb0: window:0xc00b8000 size:32k gran:32k, buf:0 size:32k
VGA parameters upon power-up
50 18 10 00 00 00 03 00 02 67 5f 4f 50 82 55 81
bf 1f 00 4f 0d 0e 00 00 07 80 9c 8e 8f 28 1f 96
b9 a3 ff 00 01 02 03 04 05 14 07 38 39 3a 3b 3c
3d 3e 3f 0c 00 0f 08 00 00 00 00 00 10 0e 00 ff
VGA parameters in BIOS for mode 24
50 18 10 00 10 00 03 00 02 67 5f 4f 50 82 55 81
bf 1f 00 4f 0d 0e 00 00 00 00 9c 8e 8f 28 1f 96
b9 a3 ff 00 01 02 03 04 05 14 07 38 39 3a 3b 3c
3d 3e 3f 0c 00 0f 08 00 00 00 00 00 10 0e 00 ff
EGA/VGA parameters to be used for mode 24
50 18 10 00 10 00 03 00 02 67 5f 4f 50 82 55 81
bf 1f 00 4f 0d 0e 00 00 00 00 9c 8e 8f 28 1f 96
b9 a3 ff 00 01 02 03 04 05 14 07 38 39 3a 3b 3c
3d 3e 3f 0c 00 0f 08 00 00 00 00 00 10 0e 00 ff
sc0: <System console> at flags 0x100 on isa0
sc0: VGA <16 virtual consoles, flags=0x100>
sc0: fb0, kbd0, terminal emulator: sc (syscons terminal)
pcic0: not probed (disabled)
pcic1: not probed (disabled)
sio0: irq maps: 0x41 0x51 0x41 0x41
sio0 at port 0x3f8-0x3ff irq 4 flags 0x10 on isa0
sio0: type 16550A, console
sio1: irq maps: 0x41 0x49 0x41 0x41
sio1 at port 0x2f8-0x2ff irq 3 on isa0
sio1: type 16550A
sio2: not probed (disabled)
sio3: not probed (disabled)
ppc0: parallel port found at 0x378
ppc0: using extended I/O port range
ppc0: ECP SPP ECP+EPP SPP
ppc_detect_fifo: PWord not supported
ppc0: <Parallel port> at port 0x378-0x37f irq 7 on isa0
ppc0: SMC-like chipset (ECP/EPP/PS2/NIBBLE) in COMPATIBLE mode
plip0: <PLIP network interface> on ppbus0
bpf: lp0 attached
lpt0: <Printer> on ppbus0
lpt0: Interrupt-driven port
ppi0: <Parallel I/O> on ppbus0
ed0 failed to probe at port 0x280-0x29f iomem 0xd8000 irq 10 on isa0
fe0: not probed (disabled)
ie0: not probed (disabled)
lnc0: not probed (disabled)
cs0: not probed (disabled)
sn0: not probed (disabled)
isa_probe_children: probing PnP devices
BIOS Geometries:
0:03fe0f3f 0..1022=1023 cylinders, 0..15=16 heads, 1..63=63 sectors
1:03fe0f3f 0..1022=1023 cylinders, 0..15=16 heads, 1..63=63 sectors
0 accounted for
Device configuration finished.
bpf: faith0 attached
bpf: lo0 attached
bpf: ppp0 attached
new masks: bio 688040, tty 63109a, net 67129a
bpf: sl0 attached
Creating DISK ad2
ar: FreeBSD check1 failed
ad2: <FUJITSU MPE3170AT/ED-82-25> ATA-4 disk at ata1-master
ad2: 16289MB (33360580 sectors), 33095 C, 16 H, 63 S, 512 B
ad2: 16 secs/int, 1 depth queue, BIOSPIO
ad2: piomode=4 dmamode=2 udmamode=4 cblid=1
Waiting 15 seconds for SCSI devices to settle
(noperiph:sym0:0:-1:-1): SCSI BUS reset delivered.
(probe6:sym0:0:6:0): INQUIRY. CDB: 12 1 80 0 ff 0
(probe6:sym0:0:6:0): ILLEGAL REQUEST asc:24,0
(probe6:sym0:0:6:0): Invalid field in CDB
Creating DISK cd0
pass0 at sym0 bus 0 target 6 lun 0
pass0: <NEC CD-ROM DRIVE:500 2.6> Removable CD-ROM SCSI-2 device
pass0: 3.300MB/s transfers
Mounting root from ufs:/dev/ad0s1a
Root mount fail(cd0:sym0:0:6:0): READ CD RECORDED CAPACITY. CDB: 25 0 0 0 0
0 0 0 0 0
(cd0:sym0:0:6:0): NOT READY asc:3a,0
(cd0:sym0:0:6:0): Medium not present
cd0 at sym0 bus 0 target 6 lun 0
cd0: <NEC CD-ROM DRIVE:500 2.6> Removable CD-ROM SCSI-2 device
cd0: 3.300MB/s transfers
cd0: Attempt to query device size failed: NOT READY, Medium not present
ed: 6
Manual root filesystem specification:
<fstype>:<device> Mount <device> using filesystem <fstype>
eg. ufs:/dev/da0s1a
? List valid disk boot devices
<empty line> Abort manual input
mountroot>
State Changed From-To: feedback->closed Support for this old buggy chip has change a bit int -current, try that if you dont care for your data ;) I'd strongly suggest getting a PCI based controller to put in there. |
The PCI class/subclass/progif of the RZ-1000 is "01-01-00" (meaning IDE storage). ata_pci_add_child (/sys/dev/ata/ata-pci.c:342) reserves unit numbers 0 and 1 (i.e. ata0 & ata1) for "masterdev" devices. Although I do not completely understand the significance of "masterdev", it appears to depend on certain bits in the progif byte of the device's PCI configuration. As the RZ-1000 reports 00 for progif, it fails the ATA_MASTERDEV test and is given ata2. Some attempt is made to allocate an interrupt for ata2, but it fails (though this doesn't seem immediately relevant). The ata0 device is never recognised. Since it contains the system's only hard-disk drive, no "ad" devices are created. Mounting the root fails, and there is no way to express its location without an "ad0". Fix: My workaround was to fake a progif of 0x81 for the RZ-1000 in /sys/pci/pci.c: This is obviously a hack unacceptable for general use. I have tried using pciconf -w to update the progif register, but it had no effect (I am exposing my lack of knowledge of PCI architecture here). My request is this: introduce some way (userconfig?) to allow the installing user to force such a drive to be recognised as ata0 in spite of its progif. I have no more specific suggestion because I don't know what's possible with the limitations of PCI. Certainly it seems that the stock GENERIC binary is incapable of adapting to this situation without a recompile. Perhaps my machine is just a freak, and should be reporting a progif of 0x81 in the first place. A brief digression on the RZ-1000: although it represents the pinnacle of the Laurel and Hardy style of engineering, it was distributed in many popular doorst^Wdesktop PCs some years ago. Old PCs are my favourite showcase for FreeBSD, because they are demonstrably useful and fast despite user expectations (just don't install KDE or Gnome). The flaws of the RZ-1000 (search for EIDEFLAW.TXT or eidete19.zip), although comic and tragic for the same reasons, can be worked around at a mere 50% loss in advertised performance. My point is that these stupid chips should not be banished to the limbo of "not officially supported" just because they lack fitness for any particular purpose (see /COPYRIGHT). (Yes, I _could_ disable the PCI-IDE controller and redesignate the ISA IDE controller as primary, and move the ribbon cable, thereby sidestepping the whole problem. What's your point?)--VquOg6hMQ5vn7IBDJhYau9TInjd4Mw9mlry6FI1KSu3JrnoK Content-Type: text/plain; name="file.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="file.diff" --- pci.c.orig Fri Aug 30 21:33:21 2002 +++ pci.c Fri Aug 30 21:33:00 2002 @@ -217,6 +217,19 @@ /* PCI to PCI bridges use header type 1 */ if (cfg->baseclass == PCIC_BRIDGE && cfg->subclass == PCIS_BRIDGE_PCI) cfg->hdrtype = 1; +#define AEC_CORNERSTONE_HACK 1 +#ifdef AEC_CORNERSTONE_HACK + /* The RZ1000 identifies as 01-01-00 (storage-ide-normal) even though + * selected as primary IDE in the BIOS. Change its progif so that + * it becomes 01-01-81 (storage-ide-masterdev+modeprim). + */ + if (cfg->baseclass == PCIC_STORAGE && cfg->subclass == PCIS_STORAGE_IDE + && cfg->progif == 0 && cfg->vendor == 0x1042 && cfg->device == 0x1000) + { + cfg->progif = 0x81; + printf("pci.c cornerstone: progif 0 -> 0x%x\n", cfg->progif); + } +#endif /* AEC_CORNERSTONE_HACK */ } /* read config data specific to header type 1 device (PCI to PCI bridge) */ How-To-Repeat: Find a machine with an RZ-1000 at your local landfill. Install PhoenixBIOS on it. Configure PCI-IDE as primary IDE. Attempt to install FreeBSD 4.6.2-RELEASE on it.