Fw: Re: PCI IDE Controller Base Address Register setting

Darmawan Salihun darmawan_salihun at yahoo.com
Wed Jan 5 18:50:31 UTC 2011



--- On Wed, 1/5/11, Darmawan Salihun <darmawan_salihun at yahoo.com> wrote:

> From: Darmawan Salihun <darmawan_salihun at yahoo.com>
> Subject: Re: PCI IDE Controller Base Address Register setting
> To: "Alexander Motin" <mav at FreeBSD.org>
> Date: Wednesday, January 5, 2011, 1:48 PM
> --- On Wed, 1/5/11, Alexander Motin
> <mav at FreeBSD.org>
> wrote:
> 
> > From: Alexander Motin <mav at FreeBSD.org>
> > Subject: Re: PCI IDE Controller Base Address Register
> setting
> > To: "Darmawan Salihun" <darmawan_salihun at yahoo.com>
> > Cc: freebsd-hackers at freebsd.org
> > Date: Wednesday, January 5, 2011, 1:16 PM
> > On 05.01.2011 19:25, Darmawan Salihun
> > wrote:
> > > --- On Wed, 1/5/11, Alexander Motin<mav at FreeBSD.org> > wrote:
> > > 
> > >> From: Alexander Motin<mav at FreeBSD.org>
> > >> Subject: Re: PCI IDE Controller Base Address
> > Register setting
> > >> To: "Darmawan Salihun"<darmawan_salihun at yahoo.com>
> > >> Cc: "John Baldwin"<jhb at freebsd.org>,
> > freebsd-hackers at 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=80
> > >> wire
> > >>> ata0-master: pio=PIO1 wdma=UNSUPPORTED
> > >> udma=UNSUPPORTED cable=40 wire
> > >>> ...
> > >>> ad0: FAILURE setting PIO1 on CS5536 chip
> > >>> ad0: 488MB<STI Flash 6.2.0 Rev
> > 6.2.0>  at
> > >> ata0-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>  at
> > >> ata0-slave UDMA100
> > >>> ...
> > >>> GEOM: newdisk ad1
> > >>> ...
> > >>> ad1: FAILURE - READ_DMA
> > >> status=51<READY,DSC,ERROR>
> > >> error=84<ICRC,ABORTED>  LBA=78132575
> > >>> ad1: FAILURE - READ_DMA
> > >> status=51<READY,DSC,ERROR>
> > >> error=84<ICRC,ABORTED>  LBA=78132591
> > >>> ...
> > >>> ======================
> > >>> I have several questions:
> > >>> 1. How FreeBSD sets the PIO mode on the
> target
> > IDE
> > >> controller?
> > >>> what could've caused it to fail like the
> > message
> > >> above?
> > >> 
> > >> 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.
> > 
> 
> I have done the tests and found that using a different CF
> card which supports PIO4 doesn't produce the same error. 
> It only shows that PIO4 mode is set, but I'm not sure if it
> would work 
> correctly given the fact that the ATA-contoller timing
> registers were 
> not set correctly (from Linux lspci results).
> 
> 
> > >>> 2. It seems to me that setting the
> UDMA100 in
> > the
> > >>> AMD CS5536 IDE controller went just fine
> (in
> > the log
> > >> above).
> > >>> But, FreeBSD fails when it tries to read
> > something
> > >> from the drive.
> > >>> Does it mean the UDMA100 "mode" failed to
> be
> > set
> > >> correctly
> > >>> in 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.
> > 
> 
> I see. I must provide this code in the current BIOS that 
> I'm working with then. I have the datasheets and source
> code 
> but I have yet to succeed in setting the PCI registers in
> the 
> ATA controller inside the CS5536. The "Virtual-PCI"
> approach 
> in this platform is really a big headache.
> 
> > >>> 3. As I'm currently trying to fix the bug
> in
> > the BIOS
> > >> for the particular
> > >>> board used to boot FreeBSD, what would
> you
> > suggest to
> > >> fix 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.
> > 
> 
> Ok. Thanks a lot. 
> 
> -Darmawan
> 
> 
> 
> 
> 


      


More information about the freebsd-hackers mailing list