On Wed, Jan 04, 2012 at 02:55:04PM +1100, Jonathan Gray wrote:
> On Mon, Jan 02, 2012 at 04:35:39PM -0500, Loganaden Velvindron wrote:
> > Attaching any CDROM/DVDRIVE causes this error message
> > when mouting a disk.
> > 
> > cd0(pciide0:0:1): timeout
> > type: atapi
> > c_bcount : 2048
> > c_skip : 0
> > 
> > The machine then freezes and a hard reboot is necessary.
> > 
> > This issue has been reported by 2 users in the past:
> > http://archives.neohapsis.com/archives/openbsd/2005-11/0782.html
> > ``
> > > > cd0(pciide0:0:0): timeout
> > > > type: atapi
> > > > c_bcount: 0
> > > > c_skip: 0
> > > > cd0(pciide0:0:0): timeout
> > > > type: atapi
> > > > c_bcount: 32
> > 
> > A workaround was to disable pciide:
> > UKC> disable pciide*
> > 59 pciide* disabled
> > UKC> quit
> > Continuing... 
> > 
> > Looking closely, these problems occur with this variant of the SiS 5513
> > EIDE chipset:
> > pciide0 at pci0 dev 2 function 5 "SiS 5513 EIDE" rev 0x01: 5597/5598: DMA, 
> > chann
> > el 0 wired to compatibility, channel 1 wired to compatibility
> > atapiscsi0 at pciide0 channel 0 drive 1
> > scsibus0 at atapiscsi0: 2 targets
> > cd0 at scsibus0 targ 0 lun 0: <ATAPI, CD-ROM 52X, 172A> ATAPI 5/cdrom 
> > removable
> > cd0(pciide0:0:1): using PIO mode 4, DMA mode 2
> > 
> > By disabling dma, the issue goes away.
> > 
> > Looking at pciide.c shows that there are 2 variants of the 5597/5598:
> > The one with rev 0xd0 which support UDMA and the previous versions
> > with no support for UltraDMA. To be more precise UDMA exists but it's
> > buggy.
> > 
> > It appears that rev 0x01 has a buggy DMA support. Falling back to PIO
> > works fine. The diff disables DMA silently but not enabling DMA capabilities
> > on rev 0x01 of 5597/5598.
> 
> Disabling DMA is quite a large hammer, it seems more likely the timings need
> to be adjusted or some config space io needs to happen.  I can't see any
> revision specific errata in the FreeBSD/Linux code.

Indeed. The driver disables UDMA on drivers less than rev 0xd0.

>From the commit message:
Don't enable UDMA modes for revisions of SiS 5513 < 0xd0
The only revisions I know which don't actually support UDMA are 0x09 and below..
But the only revision I know which does support UDMA is 0xd0 (and presumably
above that)

rev 0x01 supports UDMA and works fine up to now.


pciide0 at pci0 dev 2 function 5 "SiS 5513 EIDE" rev 0x01: 5597/5598: DMA, chann
el 0 wired to compatibility, channel 1 wired to compatibility
atapiscsi0 at pciide0 channel 0 drive 1
scsibus0 at atapiscsi0: 2 targets
cd0 at scsibus0 targ 0 lun 0: <ATAPI, CD-ROM 52X, 172A> ATAPI 5/cdrom removable
cd0(pciide0:0:1): using PIO mode 4, Ultra-DMA mode 2
pciide0: channel 1 ignored (disabled)

I can copy the 5.0 distribution set from the CD.

# mount /dev/cd0a /mnt/
# ls /mnt/
5.0       TRANS.TBL etc
# cp -r /mnt/5.0/ /tmp/
#

I also tested with a hard disk
pciide0 at pci0 dev 2 function 5 "SiS 5513 EIDE" rev 0x01: 5597/5598: DMA, chann
el 0 wired to compatibility, channel 1 wired to compatibility
wd0 at pciide0 channel 0 drive 0: <Hitachi HDS721680PLAT80>
wd0: 16-sector PIO, LBA48, 76319MB, 156301488 sectors
wd0(pciide0:0:0): using PIO mode 4, Ultra-DMA mode 2
pciide0: channel 1 ignored (disabled)

I can copy /usr/src to the mounted disk:

# cp -r /usr/src/ /mnt/temp/
CVS/  sys/
# cp -r /usr/src /mnt/temp/
# ls /mnt/temp/
home src
#

Diff:
Index: src/sys/dev/pci/pciide.c
===================================================================
RCS file: /cvs/src/sys/dev/pci/pciide.c,v
retrieving revision 1.336
diff -u -p -r1.336 pciide.c
--- src/sys/dev/pci/pciide.c    4 Jan 2012 03:38:59 -0000       1.336
+++ src/sys/dev/pci/pciide.c    12 Jan 2012 15:04:57 -0000
@@ -5042,7 +5042,7 @@ sis_chip_map(struct pciide_softc *sc, st
                printf(": %s", sis_hostbr_type_match->name);
        } else {
                printf(": 5597/5598");
-               if (rev >= 0xd0) {
+               if (rev == 0x01 || rev >= 0xd0) {
                        sc->sc_wdcdev.UDMA_cap = 2;
                        sis->sis_type = SIS_TYPE_66;
                } else {

Reply via email to