Re: libata/sata_nv latency on NVIDIA CK804 [was Re: AMD64 X2 lost ticks on PM timer]

Jeff Garzik
2006-03-15T22:34:04Z

Ingo Molnar wrote:
> the patch below is a blind shot into the dark: it turns on MMIO for the
> sata_nv driver. But be careful with it - this turns on a probably
> totally untested mode in the driver and thus may damage your data. (It
> might not even work at all because the driver might not be ready for it
> - Jeff?). I'd suggest to first boot into single-user mode with all
> filesystems readonly mounted.
>
> on the low chance of this patch actually working, the interesting thing
> would be to check whether the latencies occur in MMIO mode too? (if they
> do then please send us the new latency traces too.)
>
> Ingo
>
> ---------
>
> WARNING: this may damage your data. Be careful ...
>
> drivers/scsi/sata_nv.c | 1 +
> 1 files changed, 1 insertion(+)
>
> Index: linux/drivers/scsi/sata_nv.c
> ===================================================================
> --- linux.orig/drivers/scsi/sata_nv.c
> +++ linux/drivers/scsi/sata_nv.c
> @@ -280,6 +280,7 @@ static struct ata_port_info nv_port_info
> .host_flags = ATA_FLAG_SATA |
> /* ATA_FLAG_SATA_RESET | */
> ATA_FLAG_SRST |
> + ATA_FLAG_MMIO |
> ATA_FLAG_NO_LEGACY,

It won't work at all...

You have to stop talking to PCI IDE registers completely (consumes 5 PCI
BARs), and talk exclusively to the MMIO 6th PCI BAR, at non-standard
offsets and a using a proprietary DMA descriptor format [all public now
in that link I just sent].

My main workstation has one:
> 00:08.0 IDE interface: nVidia Corporation CK804 Serial ATA Controller (rev f3) (prog-if 85 [Master SecO PriO])
> Subsystem: Hewlett-Packard Company: Unknown device 1500
> Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B-
> Status: Cap+ 66Mhz+ UDF- FastB2B+ ParErr- DEVSEL=fast >TAbort- <TAbort-
> <MAbort- >SERR- <PERR-
> Latency: 0 (750ns min, 250ns max)
> Interrupt: pin A routed to IRQ 201
> Region 0: I/O ports at 28e0 [size=8]
> Region 1: I/O ports at 2c00 [size=4]
> Region 2: I/O ports at 28e8 [size=8]
> Region 3: I/O ports at 2c04 [size=4]
> Region 4: I/O ports at 28c0 [size=16]
> Region 5: Memory at f2103000 (32-bit, non-prefetchable) [size=4K]

Regards,

Jeff