Patchwork mv_sas: OCZ RevoDrive3 & zDrive R4 support

login
register
mail settings
Submitter Robin H. Johnson
Date Oct. 9, 2011, 3:47 a.m.
Message ID <1318132024-12426-1-git-send-email-robbat2@gentoo.org>
Download mbox | patch
Permalink /patch/118571/
State Not Applicable
Delegated to: David Miller
Headers show

Comments

Robin H. Johnson - Oct. 9, 2011, 3:47 a.m.
From: "Robin H. Johnson" <robbat2@gentoo.org>

In the OCZ RevoDrive3/zDrive R4 series, the "OCZ SuperScale Storage
Controller" with "Virtualized Controller Architecture 2.0" really seems
to be a Marvell 88SE9485 part, with OCZ firmware/BIOS.

Developed and tested on OCZ RevoDrive3 120GB [PCI 1b85:1021]

Should work on:
- OCZ RevoDrive3 (2x SandForce 2281)
- OCZ RevoDrive3 X2 (4x SandForce 2281)
- OCZ zDrive R4 CM84 (4x SandForce 2281)
- OCZ zDrive R4 CM88 (8x SandForce 2281)
- OCZ zDrive R4 RM84 (4x SandForce 2582)
- OCZ zDrive R4 RM88 (8x SandForce 2582)

All of this because a friend recently bought a OCZ RevoDrive3 and was
bitten by the lack of Linux support.

Notes from testing:
-------------------
- SMART works.
- VPD Device Identification is "OCZ-REVODRIVE3"
- Thin provisioning/TRIM seems to be implemented as WRITE SAME UNMAP,
  with deterministic (non-zero) read after TRIM, but I'm not sure if it
  works 100% in my testing.
- Some of the tuning in the firmware seems to ensure much better
  performance when in a RAID0 setup than using the two devices
  seperately.

I have not tested booting from the SSD, because all of this was
developed and tested remotely from the actual hardware.

Signed-off-by: Robin H. Johnson <robbat2@gentoo.org>
Thanks-To: Gordon Pritchard <gordp@sfu.ca>
---
 drivers/scsi/mvsas/mv_init.c |   10 ++++++++++
 include/linux/pci_ids.h      |    2 ++
 2 files changed, 12 insertions(+), 0 deletions(-)

 Tested and cleaned up now :-). Please apply.
Robin H. Johnson - Oct. 11, 2011, 8:50 p.m.
On Sat, Oct 08, 2011 at 08:47:04PM -0700, Robin H. Johnson wrote:
> From: "Robin H. Johnson" <robbat2@gentoo.org>
> 
> In the OCZ RevoDrive3/zDrive R4 series, the "OCZ SuperScale Storage
> Controller" with "Virtualized Controller Architecture 2.0" really seems
> to be a Marvell 88SE9485 part, with OCZ firmware/BIOS.
> 
> Developed and tested on OCZ RevoDrive3 120GB [PCI 1b85:1021]

Is there anything blocking getting this ack'd or applied to the SCSI
tree? I've seen no comments from the lists.

I've also posted it on the OCZ Forums, and gotten some users confirming
it works there.
James Bottomley - Oct. 11, 2011, 8:57 p.m.
On Tue, 2011-10-11 at 20:50 +0000, Robin H. Johnson wrote:
> On Sat, Oct 08, 2011 at 08:47:04PM -0700, Robin H. Johnson wrote:
> > From: "Robin H. Johnson" <robbat2@gentoo.org>
> > 
> > In the OCZ RevoDrive3/zDrive R4 series, the "OCZ SuperScale Storage
> > Controller" with "Virtualized Controller Architecture 2.0" really seems
> > to be a Marvell 88SE9485 part, with OCZ firmware/BIOS.
> > 
> > Developed and tested on OCZ RevoDrive3 120GB [PCI 1b85:1021]
> 
> Is there anything blocking getting this ack'd or applied to the SCSI
> tree? I've seen no comments from the lists.
> 
> I've also posted it on the OCZ Forums, and gotten some users confirming
> it works there.

Well, when you put things like

"NOT FOR COMMIT USE; TESTING ONLY; NO WARRANTY; DANGER!"

and

"I constructed this patch for my friend to test, completely blind.
I haven't heard back from him at all yet, but I thought that the wider
community might find it useful for testing as well. I think it _should_
work, just need to figure out what the correct chip variant is."

On the patch it tends to make maintainers exercise extreme caution.
Thus comments from others (preferably successful test reports) or acks
from Marvell or Vertex would be very helpful.

James



--
To unsubscribe from this list: send the line "unsubscribe linux-ide" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Robin H. Johnson - Oct. 11, 2011, 9:21 p.m.
On Tue, Oct 11, 2011 at 03:57:43PM -0500,  James Bottomley wrote:
> Well, when you put things like
> 
> "NOT FOR COMMIT USE; TESTING ONLY; NO WARRANTY; DANGER!"
> 
> and
> 
> "I constructed this patch for my friend to test, completely blind.
> I haven't heard back from him at all yet, but I thought that the wider
> community might find it useful for testing as well. I think it _should_
> work, just need to figure out what the correct chip variant is."
> 
> On the patch it tends to make maintainers exercise extreme caution.
> Thus comments from others (preferably successful test reports) or acks
> from Marvell or Vertex would be very helpful.
Both of those were on the first version of the patch, when I'd written
the code and not run it at all. After that, I got access to a RevoDrive3
remotely, and run about 5TiB of data through it for testing.

The second version of the patch removed those warnings, and described
some of my testing:
http://thread.gmane.org/gmane.linux.kernel/1200731/focus=50312

Some fio performance numbers:
http://paste.pocoo.org/show/489716/

dmesg/hdparm/smartctl:
http://www.ocztechnologyforum.com/forum/showthread.php?95151-Linux-patch-support-for-RevoDrive3-RevoDrive3-X2-zDrive-R4&p=686054&viewfull=1#post686054
Arnaud Lacombe - Oct. 26, 2011, 10:08 p.m.
Hi,

On Sat, Oct 8, 2011 at 11:47 PM, Robin H. Johnson <robbat2@gentoo.org> wrote:
> From: "Robin H. Johnson" <robbat2@gentoo.org>
>
> In the OCZ RevoDrive3/zDrive R4 series, the "OCZ SuperScale Storage
> Controller" with "Virtualized Controller Architecture 2.0" really seems
> to be a Marvell 88SE9485 part, with OCZ firmware/BIOS.
>
> Developed and tested on OCZ RevoDrive3 120GB [PCI 1b85:1021]
>
> Should work on:
> - OCZ RevoDrive3 (2x SandForce 2281)
> - OCZ RevoDrive3 X2 (4x SandForce 2281)
> - OCZ zDrive R4 CM84 (4x SandForce 2281)
> - OCZ zDrive R4 CM88 (8x SandForce 2281)
> - OCZ zDrive R4 RM84 (4x SandForce 2582)
> - OCZ zDrive R4 RM88 (8x SandForce 2582)
>
> All of this because a friend recently bought a OCZ RevoDrive3 and was
> bitten by the lack of Linux support.
>
> Notes from testing:
> -------------------
> - SMART works.
> - VPD Device Identification is "OCZ-REVODRIVE3"
> - Thin provisioning/TRIM seems to be implemented as WRITE SAME UNMAP,
>  with deterministic (non-zero) read after TRIM, but I'm not sure if it
>  works 100% in my testing.
> - Some of the tuning in the firmware seems to ensure much better
>  performance when in a RAID0 setup than using the two devices
>  seperately.
>
> I have not tested booting from the SSD, because all of this was
> developed and tested remotely from the actual hardware.
>
> Signed-off-by: Robin H. Johnson <robbat2@gentoo.org>
> Thanks-To: Gordon Pritchard <gordp@sfu.ca>
> ---
>  drivers/scsi/mvsas/mv_init.c |   10 ++++++++++
>  include/linux/pci_ids.h      |    2 ++
>  2 files changed, 12 insertions(+), 0 deletions(-)
>
>  Tested and cleaned up now :-). Please apply.
>
> diff --git a/drivers/scsi/mvsas/mv_init.c b/drivers/scsi/mvsas/mv_init.c
> index 4e9af66..b88315a 100644
> --- a/drivers/scsi/mvsas/mv_init.c
> +++ b/drivers/scsi/mvsas/mv_init.c
> @@ -723,6 +723,16 @@ static struct pci_device_id __devinitdata mvs_pci_table[] = {
>                .class_mask     = 0,
>                .driver_data    = chip_9485,
>        },
> +       { PCI_VDEVICE(OCZ, 0x1021), chip_9485}, /* OCZ RevoDrive3 */
> +       { PCI_VDEVICE(OCZ, 0x1022), chip_9485}, /* OCZ RevoDrive3/zDriveR4 (exact model unknown) */
> +       { PCI_VDEVICE(OCZ, 0x1040), chip_9485}, /* OCZ RevoDrive3/zDriveR4 (exact model unknown) */
> +       { PCI_VDEVICE(OCZ, 0x1041), chip_9485}, /* OCZ RevoDrive3/zDriveR4 (exact model unknown) */
> +       { PCI_VDEVICE(OCZ, 0x1042), chip_9485}, /* OCZ RevoDrive3/zDriveR4 (exact model unknown) */
> +       { PCI_VDEVICE(OCZ, 0x1043), chip_9485}, /* OCZ RevoDrive3/zDriveR4 (exact model unknown) */
> +       { PCI_VDEVICE(OCZ, 0x1044), chip_9485}, /* OCZ RevoDrive3/zDriveR4 (exact model unknown) */
> +       { PCI_VDEVICE(OCZ, 0x1080), chip_9485}, /* OCZ RevoDrive3/zDriveR4 (exact model unknown) */
> +       { PCI_VDEVICE(OCZ, 0x1083), chip_9485}, /* OCZ RevoDrive3/zDriveR4 (exact model unknown) */
> +       { PCI_VDEVICE(OCZ, 0x1084), chip_9485}, /* OCZ RevoDrive3/zDriveR4 (exact model unknown) */
>
>        { }     /* terminate list */
>  };
> diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h
> index ae96bbe..3fe46e9 100644
> --- a/include/linux/pci_ids.h
> +++ b/include/linux/pci_ids.h
> @@ -2868,3 +2868,5 @@
>
>  #define PCI_VENDOR_ID_XEN              0x5853
>  #define PCI_DEVICE_ID_XEN_PLATFORM     0x0001
> +
> +#define PCI_VENDOR_ID_OCZ              0x1b85
> --
> 1.7.7
>
Out of curiosity, do you know if the current mvsas driver would
support Marvell 88nv9143 family of chip ?

Thanks,
 - Arnaud

> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at  http://www.tux.org/lkml/
>
--
To unsubscribe from this list: send the line "unsubscribe linux-ide" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Patch

diff --git a/drivers/scsi/mvsas/mv_init.c b/drivers/scsi/mvsas/mv_init.c
index 4e9af66..b88315a 100644
--- a/drivers/scsi/mvsas/mv_init.c
+++ b/drivers/scsi/mvsas/mv_init.c
@@ -723,6 +723,16 @@  static struct pci_device_id __devinitdata mvs_pci_table[] = {
 		.class_mask	= 0,
 		.driver_data	= chip_9485,
 	},
+	{ PCI_VDEVICE(OCZ, 0x1021), chip_9485}, /* OCZ RevoDrive3 */
+	{ PCI_VDEVICE(OCZ, 0x1022), chip_9485}, /* OCZ RevoDrive3/zDriveR4 (exact model unknown) */
+	{ PCI_VDEVICE(OCZ, 0x1040), chip_9485}, /* OCZ RevoDrive3/zDriveR4 (exact model unknown) */
+	{ PCI_VDEVICE(OCZ, 0x1041), chip_9485}, /* OCZ RevoDrive3/zDriveR4 (exact model unknown) */
+	{ PCI_VDEVICE(OCZ, 0x1042), chip_9485}, /* OCZ RevoDrive3/zDriveR4 (exact model unknown) */
+	{ PCI_VDEVICE(OCZ, 0x1043), chip_9485}, /* OCZ RevoDrive3/zDriveR4 (exact model unknown) */
+	{ PCI_VDEVICE(OCZ, 0x1044), chip_9485}, /* OCZ RevoDrive3/zDriveR4 (exact model unknown) */
+	{ PCI_VDEVICE(OCZ, 0x1080), chip_9485}, /* OCZ RevoDrive3/zDriveR4 (exact model unknown) */
+	{ PCI_VDEVICE(OCZ, 0x1083), chip_9485}, /* OCZ RevoDrive3/zDriveR4 (exact model unknown) */
+	{ PCI_VDEVICE(OCZ, 0x1084), chip_9485}, /* OCZ RevoDrive3/zDriveR4 (exact model unknown) */
 
 	{ }	/* terminate list */
 };
diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h
index ae96bbe..3fe46e9 100644
--- a/include/linux/pci_ids.h
+++ b/include/linux/pci_ids.h
@@ -2868,3 +2868,5 @@ 
 
 #define PCI_VENDOR_ID_XEN		0x5853
 #define PCI_DEVICE_ID_XEN_PLATFORM	0x0001
+
+#define PCI_VENDOR_ID_OCZ		0x1b85