On 05.01.2011 19:25, Darmawan Salihun wrote:
--- On Wed, 1/5/11, Alexander Motin<m...@freebsd.org> wrote:From: Alexander Motin<m...@freebsd.org> Subject: Re: PCI IDE Controller Base Address Register setting To: "Darmawan Salihun"<darmawan_sali...@yahoo.com> Cc: "John Baldwin"<j...@freebsd.org>, freebsd-hackers@freebsd.org Date: Wednesday, January 5, 2011, 9:56 AM Darmawan Salihun wrote:I get the following log message upon booting with"boot -Dv":============================== ata0:<ATA channel 0> on atapci0 ata0: reset tp1 mask=03 ostat0=50 ostat1=50 ata0: stat0=0x80 err=0x00 lsb=0x00 msb=0x00 ata0: stat0=0x50 err=0x01 lsb=0x00 msb=0x00 ata0: stat1=0x50 err=0x01 lsb=0x00 msb=0x00 ata0: reset tp2 stat0=50 stat1=50 devices=0x3 ... ata0: Identifying devices: 00000003 ata0: New devices: 00000003 ... ata0-slave: pio=PIO4 wdma=WDMA2 udma=UDMA100 cable=80wireata0-master: pio=PIO1 wdma=UNSUPPORTEDudma=UNSUPPORTED cable=40 wire... ad0: FAILURE setting PIO1 on CS5536 chip ad0: 488MB<STI Flash 6.2.0 Rev 6.2.0> atata0-master BIOSPIO... GEOM: newdisk ad0 ad0: Adaptec check1 failed ad0: LSI(v3) check1 failed ad0: FAILURE - READ status=51<READY,DSC,ERROR>error=c4<ICRC,UNCORRECTABLE,ABORTED> LBA=0... ad1: setting PIO4 on CS5536 chip ad1: setting UDMA100 on CS5536 chip ad1: 38150MB<Seagate ST340014A 3.06> atata0-slave UDMA100... GEOM: newdisk ad1 ... ad1: FAILURE - READ_DMAstatus=51<READY,DSC,ERROR> error=84<ICRC,ABORTED> LBA=78132575ad1: FAILURE - READ_DMAstatus=51<READY,DSC,ERROR> error=84<ICRC,ABORTED> LBA=78132591... ====================== I have several questions: 1. How FreeBSD sets the PIO mode on the target IDEcontroller?what could've caused it to fail like the messageabove? Looking to your messages I would suggest you are running something like FreeBSD 8.0. At that time controller-specific method first set mode on device and then programmed the chip. Most likely this error returned by device. Some very old devices not supporting more then PIO3 may not support mode setting command. Mode setting code was significantly rewritten between 8.0 and 8.1. I would recommend you to take newer version of FreeBSD for experiments.The device is a CF-card. Do I need to add some sort of CFA-specific initialization code to the BIOS?
Some CF devices AFAIR may wish power-up command before they will be able to access media, but I have never seen such ones, suppose it was applicable only to some old microdrives. AFAIR in all other points CF specification only extends ATA without additional requirements.
I'm using FreeBSD 8.0 as the test bed for the log message above. I have FreeBSD 8.1 DVD to do further tests. Will report later.
OK.
2. It seems to me that setting the UDMA100 in the AMD CS5536 IDE controller went just fine (in the logabove).But, FreeBSD fails when it tries to read somethingfrom the drive.Does it mean the UDMA100 "mode" failed to be setcorrectlyin the IDE controller?It can be. For UDMA transfer rate is driven by transmitting side (for reading - by device), but there is always a chance to do something wrong. :) I don't have CS5536 board, so can't be completely sure how correct is the code.Does it require chipset-specific support code on the OS (say a device driver) or setting via PCI Bus Master registers is enough?
There is no standard for setting I/O mode on ATA controllers. Most of vendors have own ways for setting it. Most of controllers have some additional registers, accessible via PCI configuration space. So for most of controllers FreeBSD has specific sub-drivers inside ata(4). If no matching sub-driver found - controller handled as "Generic" and mode setting is assumed to be done by BIOS, but it is a last resort.
3. As I'm currently trying to fix the bug in the BIOSfor the particularboard used to boot FreeBSD, what would you suggest tofix it? Try latest FreeBSD -- 8.2 is now in RC state. Try to disconnect devices one by one. Try to limit initial mode via loader tunables (note that some of them were added not so long ago and may be missing on 8.0).A question about the loader tunable: is it enough to pass it through the "boot" command, similar to the "-Dv" in "boot -Dv"?
You can use `set ...` command at the same loader command line before typing `boot ...`. To make it permanent - you can add wanted options to /boot/loader.conf file.
-- Alexander Motin _______________________________________________ freebsd-hackers@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-hackers To unsubscribe, send any mail to "freebsd-hackers-unsubscr...@freebsd.org"