Harry Schmalzbauer
2016-Dec-29 08:35 UTC
ASM1062 AHCI timeouts, ppt(4) BAR aligning [Was: Re: svn commit: r309251 - head/sys/dev/ahci]
Bez?glich Alexander Motin's Nachricht vom 28.11.2016 17:23 (localtime):> Author: mav > Date: Mon Nov 28 16:23:32 2016 > New Revision: 309251 > URL: https://svnweb.freebsd.org/changeset/base/309251 > > Log: > Process port interrupt even is PxIS register is zero. > > ASMedia ASM1062 AHCI chips with some fancy firmware handling PMP inside > seems sometimes forgeting to set bits in PxIS, causing command timeouts. > Removal of this check fixes the issue by the theoretical cost of slightly > higher CPU usage in some odd cases, but this is what Linux does too. > > MFC after: 1 month > > Modified: > head/sys/dev/ahci/ahci.c > > Modified: head/sys/dev/ahci/ahci.c > =============================================================================> --- head/sys/dev/ahci/ahci.c Mon Nov 28 15:14:31 2016 (r309250) > +++ head/sys/dev/ahci/ahci.c Mon Nov 28 16:23:32 2016 (r309251) > @@ -1169,8 +1169,6 @@ ahci_ch_intr(void *arg) > > /* Read interrupt statuses. */ > istatus = ATA_INL(ch->r_mem, AHCI_P_IS); > - if (istatus == 0) > - return; > > mtx_lock(&ch->mtx); > ahci_ch_intr_main(ch, istatus); > @@ -1187,8 +1185,6 @@ ahci_ch_intr_direct(void *arg) > > /* Read interrupt statuses. */ > istatus = ATA_INL(ch->r_mem, AHCI_P_IS); > - if (istatus == 0) > - return; > > mtx_lock(&ch->mtx); > ch->batch = 1;Hello, I'd like to report that this doesn't fix timeouts for me (applied to 11-stable). For example my REV120 works without problems on Intel-AHCI but not on ASM1062-AHCI. Even attaching gives different output. Both look fine at first: # cd0 at ahcich0 bus 0 scbus5 target 0 lun 0 # cd0: <Iomega RRD3 M079> Removable CD-ROM SCSI device # cd0: Serial Number 0C1E4D046E5DFF18 # cd0: 150.000MB/s transfers (SATA 1.x, UDMA5, ATAPI 12bytes, PIO 8192bytes) When attached to the Intel-AHCI, it's followed by + cd0: Attempt to query device size failed: NOT READY, Medium not present while attaching to ASM1062 it reads (!?) - cd0: 0MB (1 0 byte sectors) Then these timeouts occur: ahcich7: Timeout on slot 11 port 0 ahcich7: is 00000000 cs 00000c00 ss 00000000 rs 00000c00 tfd 6051 serr 00000000 cmd 0004cb17 ahcich7: Timeout on slot 24 port 0 ahcich7: is 00000000 cs 01800000 ss 00000000 rs 01800000 tfd 2051 serr 00000000 cmd 0004d817 ahcich7: Timeout on slot 6 port 0 ahcich7: is 00000000 cs 00000060 ss 00000000 rs 00000060 tfd 2051 serr 00000000 cmd 0004c617 ahcich7: Timeout on slot 20 port 0 ahcich7: is 00000000 cs 00180000 ss 00000000 rs 00180000 tfd 2051 serr 00000000 cmd 0004d417 Also IDENT (via camcontrol) "hangs" for 20 seconds, but finally succeeds. Btw: I already found out that extending ppt(4) to support unaligned base address register wouldn't be too easy. Initially I added that ASM1062 card to use it for byhve(8) passthrough. Unfortunately that doesn't work: bhyve: passthru device 6/0/0 BAR 5: base 0xc3e10000 or size 0x200 not page aligned That's the ASM1062: ppt0 at pci0:6:0:0: class=0x010601 card=0x10601b21 chip=0x06121b21 rev=0x01 hdr=0x00 bar [10] = type I/O Port, range 32, base 0x5050, size 8, enabled bar [14] = type I/O Port, range 32, base 0x5040, size 4, enabled bar [18] = type I/O Port, range 32, base 0x5030, size 8, enabled bar [1c] = type I/O Port, range 32, base 0x5020, size 4, enabled bar [20] = type I/O Port, range 32, base 0x5000, size 32, enabled bar [24] = type Memory, range 32, base 0xc3e10000, size 512, enabled Are there any recommendations for AHCI (SATA-PCIe) controller cards/chips that do work (both, for byhve passthrough and also as plain AHCI provider)? Thanks, -harry
Alexander Motin
2016-Dec-29 10:32 UTC
ASM1062 AHCI timeouts, ppt(4) BAR aligning [Was: Re: svn commit: r309251 - head/sys/dev/ahci]
On 29.12.2016 10:35, Harry Schmalzbauer wrote:> I'd like to report that this doesn't fix timeouts for me (applied to > 11-stable). > > For example my REV120 works without problems on Intel-AHCI but not on > ASM1062-AHCI. > Even attaching gives different output. Both look fine at first: > # cd0 at ahcich0 bus 0 scbus5 target 0 lun 0 > # cd0: <Iomega RRD3 M079> Removable CD-ROM SCSI device > # cd0: Serial Number 0C1E4D046E5DFF18 > # cd0: 150.000MB/s transfers (SATA 1.x, UDMA5, ATAPI 12bytes, PIO > 8192bytes) > > When attached to the Intel-AHCI, it's followed by > + cd0: Attempt to query device size failed: NOT READY, Medium not present > while attaching to ASM1062 it reads (!?) > - cd0: 0MB (1 0 byte sectors) > > Then these timeouts occur: > ahcich7: Timeout on slot 11 port 0 > ahcich7: is 00000000 cs 00000c00 ss 00000000 rs 00000c00 tfd 6051 serr > 00000000 cmd 0004cb17 > ahcich7: Timeout on slot 24 port 0 > ahcich7: is 00000000 cs 01800000 ss 00000000 rs 01800000 tfd 2051 serr > 00000000 cmd 0004d817 > ahcich7: Timeout on slot 6 port 0 > ahcich7: is 00000000 cs 00000060 ss 00000000 rs 00000060 tfd 2051 serr > 00000000 cmd 0004c617 > ahcich7: Timeout on slot 20 port 0 > ahcich7: is 00000000 cs 00180000 ss 00000000 rs 00180000 tfd 2051 serr > 00000000 cmd 0004d417 > > Also IDENT (via camcontrol) "hangs" for 20 seconds, but finally succeeds.I think problem may be different in your case. The HBA still reports that command is not completed by the device. Unfortunately I don't have those fancy drives to try, but I'll try to reproduce it with regular CD drive when I get back home after short New Year holidays.> Btw: I already found out that extending ppt(4) to support unaligned base > address register wouldn't be too easy. > Initially I added that ASM1062 card to use it for byhve(8) passthrough. > Unfortunately that doesn't work: > bhyve: passthru device 6/0/0 BAR 5: base 0xc3e10000 or size 0x200 not > page aligned > That's the ASM1062: > ppt0 at pci0:6:0:0: class=0x010601 card=0x10601b21 chip=0x06121b21 > rev=0x01 hdr=0x00 > bar [10] = type I/O Port, range 32, base 0x5050, size 8, enabled > bar [14] = type I/O Port, range 32, base 0x5040, size 4, enabled > bar [18] = type I/O Port, range 32, base 0x5030, size 8, enabled > bar [1c] = type I/O Port, range 32, base 0x5020, size 4, enabled > bar [20] = type I/O Port, range 32, base 0x5000, size 32, enabled > bar [24] = type Memory, range 32, base 0xc3e10000, size 512, enabledI believe it is bhyve bug, since these values are just what hardware reports. BAR size of 512 bytes indeed does not align to 4K, but that is not our problem. :)> Are there any recommendations for AHCI (SATA-PCIe) controller > cards/chips that do work (both, for byhve passthrough and also as plain > AHCI provider)?Please don't mix multiple unrelated questions in one email. There is very little reasonable external AHCI controllers on the market now. I am not sure anything other then Marvell and ASmedia were released at all in last years since 6Gbps SATA came out. Marvell and ASmedia probably worth each other, while later Marvell may be slightly better on functionality (number of ports and FBS PMP support), but they are both desktop products. If you need this in server environment -- think about about SAS adapter like LSI. Or just use on-board Intel AHCI, since they are probably the best om reliability you may get out of SATA. -- Alexander Motin