From: Jeff Garzik <jeff@garzik.org>
To: Linux IDE mailing list <linux-ide@vger.kernel.org>
Cc: LKML <linux-kernel@vger.kernel.org>,
Jens Axboe <jens.axboe@oracle.com>,
Arjan van de Ven <arjan@infradead.org>,
Linus Torvalds <torvalds@linux-foundation.org>
Subject: Implementing NVMHCI...
Date: Sat, 11 Apr 2009 13:33:47 -0400 [thread overview]
Message-ID: <49E0D47B.9070205@garzik.org> (raw)
Has anybody looked into working on NVMHCI support? It is a new
controller + new command set for direct interaction with non-volatile
memory devices:
http://download.intel.com/standards/nvmhci/spec.pdf
Although NVMHCI is nice from a hardware design perspective, it is a bit
problematic for Linux because
* NVMHCI might be implemented as part of an AHCI controller's
register set, much like how Marvell's AHCI clones implement
a PATA port: with wholly different per-port registers
and DMA data structures, buried inside the standard AHCI
per-port interrupt dispatch mechanism.
Or, NVMHCI might be implemented as its own PCI device,
wholly independent from the AHCI PCI device.
The per-port registers and DMA data structure remain the same,
whether or not it is embedded within AHCI or not.
* NVMHCI introduces a brand new command set, completely
incompatible with ATA or SCSI. Presumably it is tuned
specifically for non-volatile memory.
* The sector size can vary wildly from device to device. There
is no 512-byte legacy to deal with, for a brand new
command set. We should handle this OK, but...... who knows
until you try.
The spec describes the sector size as
"512, 1k, 2k, 4k, 8k, etc." It will be interesting to reach
"etc" territory.
Here is my initial idea:
- Move 95% of ahci.c into libahci.c.
This will make implementation of AHCI-and-more devices like
NVMHCI (AHCI 1.3) and Marvell much easier, while avoiding
the cost of NVMHCI or Marvell support, for those users without
such hardware.
- ahci.c becomes a tiny stub with a pci_device_id match table,
calling functions in libahci.c.
- I can move my libata-dev.git#mv-ahci-pata work, recently refreshed,
into mv-ahci.c.
- nvmhci.c implements the NVMHCI controller standard. Maybe referenced
from ahci.c, or used standalone.
- nvmhci-blk.c implements a block device for NVMHCI-attached devices,
using the new NVMHCI command set.
With a brand new command set, might as well avoid SCSI completely IMO,
and create a brand new block device.
Open questions are...
1) When will we see hardware? This is a feature newly introduced in
AHCI 1.3. AHCI 1.3 spec is public, but I have not seen any machines
yet. http://download.intel.com/technology/serialata/pdf/rev1_3.pdf
My ICH10 box uses AHCI 1.2. dmesg | grep '^ahci'
> ahci 0000:00:1f.2: AHCI 0001.0200 32 slots 6 ports 3 Gbps 0x3f impl SATA mode
> ahci 0000:00:1f.2: flags: 64bit ncq sntf pm led clo pio slum part ems
2) Has anyone else started working on this? All relevant specs are
public on intel.com.
3) Are there major objections to doing this as a native block device (as
opposed to faking SCSI, for example...) ?
Thanks,
Jeff (engaging in some light Saturday reading...)
next reply other threads:[~2009-04-11 17:33 UTC|newest]
Thread overview: 45+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-04-11 17:33 Jeff Garzik [this message]
2009-04-11 19:32 ` Implementing NVMHCI Alan Cox
2009-04-11 19:52 ` Linus Torvalds
2009-04-11 20:21 ` Jeff Garzik
2009-04-11 21:49 ` Grant Grundler
2009-04-11 22:33 ` Linus Torvalds
2009-04-12 5:08 ` Leslie Rhorer
2009-04-11 23:25 ` Alan Cox
2009-04-11 23:51 ` Jeff Garzik
2009-04-12 0:49 ` Linus Torvalds
2009-04-12 1:59 ` Jeff Garzik
2009-04-12 1:15 ` david
2009-04-12 3:13 ` Linus Torvalds
2009-04-12 14:23 ` Mark Lord
2009-04-12 17:29 ` Jeff Garzik
2009-04-11 19:54 ` Jeff Garzik
2009-04-11 21:08 ` John Stoffel
2009-04-11 21:31 ` John Stoffel
[not found] <20090412091228.GA29937@elte.hu>
2009-04-12 15:14 ` Szabolcs Szakacsits
2009-04-12 15:20 ` Alan Cox
2009-04-12 16:15 ` Avi Kivity
2009-04-12 17:11 ` Linus Torvalds
2009-04-13 6:32 ` Avi Kivity
2009-04-13 15:10 ` Linus Torvalds
2009-04-13 15:38 ` James Bottomley
2009-04-14 7:22 ` Andi Kleen
2009-04-14 10:07 ` Avi Kivity
2009-04-14 9:59 ` Avi Kivity
2009-04-14 10:23 ` Jeff Garzik
2009-04-14 10:37 ` Avi Kivity
2009-04-14 11:45 ` Jeff Garzik
2009-04-14 11:58 ` Szabolcs Szakacsits
2009-04-17 22:45 ` H. Peter Anvin
2009-04-14 12:08 ` Avi Kivity
2009-04-14 12:21 ` Jeff Garzik
2009-04-25 8:26 ` Pavel Machek
2009-04-12 15:41 ` Linus Torvalds
2009-04-12 17:02 ` Robert Hancock
2009-04-12 17:20 ` Linus Torvalds
2009-04-12 18:35 ` Robert Hancock
2009-04-13 11:18 ` Avi Kivity
2009-04-12 17:23 ` James Bottomley
[not found] ` <6934efce0904141052j3d4f87cey9fc4b802303aa73b@mail.gmail.com>
2009-04-15 6:37 ` Artem Bityutskiy
2009-04-30 22:51 ` Jörn Engel
2009-04-30 23:36 ` Jeff Garzik
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=49E0D47B.9070205@garzik.org \
--to=jeff@garzik.org \
--cc=arjan@infradead.org \
--cc=jens.axboe@oracle.com \
--cc=linux-ide@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=torvalds@linux-foundation.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).