Subject: FIX for: Problem with wd driver and Seagate drives (was: Re: NetBSD 3.0_BETA & RAIDframe problems)
To: None <teemu@rinta-aho.org, netbsd-help@netbsd.org,>
From: Dieter <netbsd@sopwith.solgatos.com>
List: netbsd-bugs
Date: 06/15/2005 13:09:38
------- Forwarded Message

> >>> I bought two 200GB Seagate Barracuda 7200.7 SATA discs
> 
> >>> piixide1: Intel 82801EB Serial ATA Controller (rev. 0x02)
> 
> >> (The above sector is at the 128GB mark on the disk... I wonder if
> >> there is something special about that?
> 
> > Its a seagate disk isn't it? Some seagate disks can only access
> > the last 'pre LBA48' sector via LBA48. There is a quirk table
> > in NetBSD, but really NetBSD should try LBA48 on that sector
> > if non LBA48 fails.
> 
> Seagate 7200.8 250 GB SATA connected to a
> satalink0: Silicon Image SATALink 3512 (rev. 0x01)
> Alpha 164lx running NetBSD 2.0.2
> 
> sopwith # dd if=/dev/rwd0c of=/dev/null bs=512 skip=268435000 count=10000
> dd: /dev/rwd0c: Input/output error
> 455+0 records in
> 455+0 records out
> 232960 bytes transferred in 3.730 secs (62455 bytes/sec)
> sopwith # dd if=/dev/rwd0c of=/dev/null bs=512 skip=268435455 count=1  
> dd: /dev/rwd0c: Input/output error
> 0+0 records in
> 0+0 records out
> 0 bytes transferred in 3.536 secs (0 bytes/sec)
> sopwith # dd if=/dev/rwd0c of=/dev/null bs=512 skip=268435456 count=100
> 100+0 records in
> 100+0 records out
> 51200 bytes transferred in 0.057 secs (898245 bytes/sec)
> sopwith # 
> 
> 
> wd0c: error reading fsbn 268435455 (wd0 bn 268435455; cn 266305 tn 0 sn 15), retrying
> wd0: (id not found)
> wd0c: error reading fsbn 268435455 (wd0 bn 268435455; cn 266305 tn 0 sn 15), retrying
> wd0: (id not found)
> wd0c: error reading fsbn 268435455 (wd0 bn 268435455; cn 266305 tn 0 sn 15), retrying
> wd0: (id not found)
> wd0: transfer error, downgrading to Ultra-DMA mode 2
> wd0(satalink0:1:0): using PIO mode 4, Ultra-DMA mode 2 (Ultra/33) (using DMA data transfers)
> wd0c: error reading fsbn 268435455 (wd0 bn 268435455; cn 266305 tn 0 sn 15), retrying
> wd0: (id not found)
> wd0c: error reading fsbn 268435455 (wd0 bn 268435455; cn 266305 tn 0 sn 15), retrying
> wd0: (id not found)
> wd0c: error reading fsbn 268435455 (wd0 bn 268435455; cn 266305 tn 0 sn 15)wd0: (id not found)
> 

------- End of Forwarded Message

This one is so easy, even I can fix it.  :-)

Teemu, try the fix and see if it works for your disks.
I included the string for your disks.
It worked for mine.

What we need is a complete list of drives that need this,
or a more general fix.

===================================================================
RCS file: dev/ata/RCS/wd.c,v
retrieving revision 1.1
diff -c10 -r1.1 dev/ata/wd.c
*** dev/ata/wd.c	2005/06/15 19:39:09	1.1
--- dev/ata/wd.c	2005/06/15 19:42:31
***************
*** 228,247 ****
--- 228,251 ----
  	{ "ST380023AS",
  	  WD_QUIRK_SPLIT_MOD15_WRITE },
  
  	/*
  	 * This seagate drive seems to have issue addressing sector 0xfffffff
  	 * (aka LBA48_THRESHOLD) in LBA mode. The workaround is to force
  	 * LBA48
  	 */
  	{ "ST3200822A",
  	  WD_QUIRK_FORCE_LBA48 },
+ 	{ "ST3200822AS",   /* 7200.7 200 GB SATA */
+ 	  WD_QUIRK_FORCE_LBA48 },
+ 	{ "ST3250823AS",   /* 7200.8 250 GB SATA */
+ 	  WD_QUIRK_FORCE_LBA48 },
  
  	{ NULL,
  	  0 }
  };
  
  static const struct wd_quirk *
  wd_lookup_quirks(const char *name)
  {
  	const struct wd_quirk *wdq;
  	const char *estr;