SATA - wyłaczenie UDMA

Krzysztof Szwaba mailing_ks w kasztanowe.net
Nie, 11 Kwi 2010, 13:36:15 CEST


W jaki sposób można wyłączyć w kontrolerze SATA obsługiwanie UDMA na
jednym z kanałów ?
Mam podłączoną kartę CF PQI x120 na takim kontrolerze
http://allegro.pl/item993329556_ssd_na_sata_cf_microdysk.html
Karta zgłasza się jako obsługująca UDMA

# hdparm -i /dev/sdc

/dev/sdc:

 Model=FLASH CARD, FwRev=20080308, SerialNo=CF0000000000000001E5
 Config={ HardSect NotMFM Removeable DTR>10Mbs nonMagnetic }
 RawCHS=1942/16/63, TrkSize=0, SectSize=576, ECCbytes=4
 BuffType=DualPort, BuffSize=1kB, MaxMultSect=1, MultSect=off
 CurCHS=1942/16/63, CurSects=1957536, LBA=yes, LBAsects=1957536
 IORDY=no, tPIO={min:120,w/IORDY:120}, tDMA={min:120,rec:120}
 PIO modes:  pio0 pio1 pio2 pio3 pio4 
 DMA modes:  mdma0 mdma1 mdma2 
 UDMA modes: udma0 udma1 udma2 udma3 *udma4 
 AdvancedPM=yes: disabled (255)
 Drive conforms to: Unspecified:  ATA/ATAPI-4

 * signifies the current active mode

# hdparm -I /dev/sdc 

/dev/sdc:

CompactFlash ATA device
	Model Number:       FLASH CARD                              
	Serial Number:      CF0000000000000001E5
	Firmware Revision:  20080308
Standards:
	Supported: 4 
	Likely used: 6
Configuration:
	Logical		max	current
	cylinders	1942	1942
	heads		16	16
	sectors/track	63	63
	--
	CHS current addressable sectors:    1957536
	LBA    user addressable sectors:    1957536
	Logical/Physical Sector size:           512 bytes
	device size with M = 1024*1024:         955 MBytes
	device size with M = 1000*1000:        1002 MBytes (1 GB)
	cache/buffer size  = 1 KBytes (type=DualPort)
Capabilities:
	LBA, IORDY(may be)(cannot be disabled)
	Standby timer values: spec'd by Vendor
	R/W multiple sector transfer: Max = 1	Current = 0
	Advanced power management level: disabled
	DMA: mdma0 mdma1 mdma2 udma0 udma1 udma2 *udma3 udma4 
	     Cycle time: min=120ns recommended=120ns
	PIO: pio0 pio1 pio2 pio3 pio4 
	     Cycle time: no flow control=120ns  IORDY flow control=120ns
Commands/features:
	Enabled	Supported:
	   *	SMART feature set
	    	Security Mode feature set
	    	Power Management feature set
	    	WRITE_BUFFER command
	    	READ_BUFFER command
	    	NOP cmd
	    	CFA feature set
	    	Advanced Power Management feature set
	   *	Gen1 signaling speed (1.5Gb/s)
	   *	Host-initiated interface power management
	    	Device-initiated interface power management
	   *	CFA advanced modes: pio5 *pio6 mdma3 *mdma4 
	   *	CFA Power Level 1  (max 500mA)
Security: 
	Master password revision code = 65534
		supported
	not	enabled
	not	locked
	not	frozen
	not	expired: security count
	not	supported: enhanced erase
	2min for SECURITY ERASE UNIT. 
HW reset results:
	CBLID- below Vih
	Device num = 0
Integrity word not set (found 0x0000, expected 0xc3a5)


W rzeczywistości jest to tania karta nie posiadająca kontrolera UDMA.
Wyłączenie w BIOS-ie trybu UDMA (zostawianie tylko MWDMA2) niczego nie
zmieniło, krenel pewnie ignoruje ustawienia w BIOSIE.

Następstwem powyższego są powtarzające się  błędy CRC:

[134732.966636] ata4.00: exception Emask 0x50 SAct 0x0 SErr 0x1280900 action 0x6 frozen
[134732.966650] ata4: SError: { UnrecovData HostInt 10B8B BadCRC TrStaTrns }
[134732.966659] ata4.00: failed command: READ DMA
[134732.966677] ata4.00: cmd c8/00:08:c0:d7:01/00:00:00:00:00/e0 tag 0 dma 4096 in
[134732.966681]          res 40/00:00:00:00:00/00:00:00:00:00/e0 Emask 0x54 (ATA bus error)
[134732.966689] ata4.00: status: { DRDY }
[134732.966704] ata4: hard resetting link
[134733.493363] ata4: SATA link up 1.5 Gbps (SStatus 113 SControl 300)
[134733.513452] ata4.00: configured for UDMA/66
[134733.513462] ata4.00: device reported invalid CHS sector 0
[134733.513480] ata4: EH complete
[134745.372614] ata4.00: exception Emask 0x0 SAct 0x0 SErr 0x0 action 0x6
[134745.372621] ata4.00: BMDMA stat 0x24
[134745.372628] ata4.00: failed command: WRITE DMA
[134745.372642] ata4.00: cmd ca/00:00:00:3d:01/00:00:00:00:00/e0 tag 0 dma 131072 out
[134745.372645]          res 51/84:00:ff:3d:01/00:00:00:00:00/e0 Emask 0x10 (ATA bus error)
[134745.372652] ata4.00: status: { DRDY ERR }
[134745.372656] ata4.00: error: { ICRC ABRT }
[134745.372668] ata4: hard resetting link
[134745.896690] ata4: SATA link up 1.5 Gbps (SStatus 113 SControl 300)
[134745.916784] ata4.00: configured for UDMA/66
[134745.916806] ata4: EH complete
[134763.988311] ata4.00: exception Emask 0x52 SAct 0x0 SErr 0x880d00 action 0x6
[134763.988318] ata4.00: BMDMA stat 0x26
[134763.988325] ata4: SError: { UnrecovData Proto HostInt 10B8B LinkSeq }
[134763.988332] ata4.00: failed command: READ DMA
[134763.988346] ata4.00: cmd c8/00:08:e8:6b:03/00:00:00:00:00/e0 tag 0 dma 4096 in
[134763.988349]          res 50/00:00:e8:6b:03/00:00:00:00:00/e0 Emask 0x72 (host bus error)


Opisywany problem występuje na płycie X7SPA-HF w serwerze SuperServer
5015A-PHF firmy Supermicro 
http://www.supermicro.com/products/system/1U/5015/SYS-5015A-PHF.cfm

# lspci
00:00.0 Host bridge: Intel Corporation Pineview DMI Bridge (rev 02)
00:1a.0 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #4 (rev 02)
00:1a.1 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #5 (rev 02)
00:1a.2 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #6 (rev 02)
00:1a.7 USB Controller: Intel Corporation 82801I (ICH9 Family) USB2 EHCI Controller #2 (rev 02)
00:1c.0 PCI bridge: Intel Corporation 82801I (ICH9 Family) PCI Express Port 1 (rev 02)
00:1c.4 PCI bridge: Intel Corporation 82801I (ICH9 Family) PCI Express Port 5 (rev 02)
00:1c.5 PCI bridge: Intel Corporation 82801I (ICH9 Family) PCI Express Port 6 (rev 02)
00:1d.0 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #1 (rev 02)
00:1d.1 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #2 (rev 02)
00:1d.2 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #3 (rev 02)
00:1d.7 USB Controller: Intel Corporation 82801I (ICH9 Family) USB2 EHCI Controller #1 (rev 02)
00:1e.0 PCI bridge: Intel Corporation 82801 PCI Bridge (rev 92)
00:1f.0 ISA bridge: Intel Corporation 82801IR (ICH9R) LPC Interface Controller (rev 02)
00:1f.2 IDE interface: Intel Corporation 82801IR/IO/IH (ICH9R/DO/DH) 4 port SATA IDE Controller (rev 02)
00:1f.3 SMBus: Intel Corporation 82801I (ICH9 Family) SMBus Controller (rev 02)
00:1f.5 IDE interface: Intel Corporation 82801I (ICH9 Family) 2 port SATA IDE Controller (rev 02)
02:00.0 Ethernet controller: Intel Corporation 82574L Gigabit Network Connection
03:00.0 Ethernet controller: Intel Corporation 82574L Gigabit Network Connection
04:04.0 VGA compatible controller: Matrox Graphics, Inc. MGA G200eW WPCM450 (rev 0a)

Pamiętam, że kiedyś trzeba było wygenerować initrd z modułem kontrolera IDE (PATA) 
 ładowanym z odpowiednim parametrem wymuszającym  wyłączenie UDMA.
Jak to wygląda teraz ?
Korzystam ze sterownika ata_piix ponieważ w trybie ahci nie udało mi się podnieć systemu na karcie CF z 
używanym adapterem.
Czy poleceniem sdparm można wyłączyć tryb UDMA na danym kanale ?

Z góry dziękuję za pomoc.
Krzysztof



Więcej informacji o liście dyskusyjnej pld-users-pl