[PATCH] mv_sas: OCZ RevoDrive3/zDrive R4 support (completely untested)

Subsystems: pci subsystem, scsi subsystem, the rest

STALE5459d

8 messages, 4 authors, 2011-10-29 · open the first message on its own page

[PATCH] mv_sas: OCZ RevoDrive3/zDrive R4 support (completely untested)

From: Robin H. Johnson <hidden>
Date: 2011-10-08 00:00:42

From: "Robin H. Johnson" <redacted>

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

A friend recently bought a OCZ RevoDrive3 and was surprised by the lack
of Linux support. I glanced at the Windows driver .inf file for the
device, as well as the Windows driver for the zDrive R4, it looks like
rebranded mvsas (mostly based on earlier versions of the Windows driver
that include PCI IDs already found in the mvsas code).

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.

Signed-off-by: Robin H. Johnson <redacted>
---
 drivers/scsi/mvsas/mv_init.c |   10 ++++++++++
 include/linux/pci_ids.h      |    2 ++
 2 files changed, 12 insertions(+), 0 deletions(-)
diff --git a/drivers/scsi/mvsas/mv_init.c b/drivers/scsi/mvsas/mv_init.c
index 4e9af66..babb4a1 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/zDriveR4, 120GB */
+	{ PCI_VDEVICE(OCZ, 0x1022), chip_9485}, /* OCZ RevoDrive3/zDriveR4, ??? */
+	{ PCI_VDEVICE(OCZ, 0x1040), chip_9485}, /* OCZ RevoDrive3/zDriveR4, ??? */
+	{ PCI_VDEVICE(OCZ, 0x1041), chip_9485}, /* OCZ RevoDrive3/zDriveR4, ??? */
+	{ PCI_VDEVICE(OCZ, 0x1042), chip_9485}, /* OCZ RevoDrive3/zDriveR4, ??? */
+	{ PCI_VDEVICE(OCZ, 0x1043), chip_9485}, /* OCZ RevoDrive3/zDriveR4, ??? */
+	{ PCI_VDEVICE(OCZ, 0x1044), chip_9485}, /* OCZ RevoDrive3/zDriveR4, ??? */
+	{ PCI_VDEVICE(OCZ, 0x1080), chip_9485}, /* OCZ RevoDrive3/zDriveR4, ??? */
+	{ PCI_VDEVICE(OCZ, 0x1083), chip_9485}, /* OCZ RevoDrive3/zDriveR4, ??? */
+	{ PCI_VDEVICE(OCZ, 0x1084), chip_9485}, /* OCZ RevoDrive3/zDriveR4, ??? */
 
 	{ }	/* 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

[PATCH] mv_sas: OCZ RevoDrive3 & zDrive R4 support

From: Robin H. Johnson <hidden>
Date: 2011-10-09 03:47:15

From: "Robin H. Johnson" <redacted>

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 <redacted>
Thanks-To: Gordon Pritchard [off-list ref]
---
 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

Re: [PATCH] mv_sas: OCZ RevoDrive3 & zDrive R4 support

From: Robin H. Johnson <hidden>
Date: 2011-10-11 20:50:15

On Sat, Oct 08, 2011 at 08:47:04PM -0700, Robin H. Johnson wrote:
From: "Robin H. Johnson" <redacted>

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.

-- 
Robin Hugh Johnson
Gentoo Linux: Developer, Trustee & Infrastructure Lead
E-Mail     : robbat2@gentoo.org
GnuPG FP   : 11AC BA4F 4778 E3F6 E4ED  F38E B27B 944E 3488 4E85

Re: [PATCH] mv_sas: OCZ RevoDrive3 & zDrive R4 support

From: James Bottomley <James.Bottomley@HansenPartnership.com>
Date: 2011-10-11 20:57:47

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:
quoted
From: "Robin H. Johnson" <redacted>

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


Re: [PATCH] mv_sas: OCZ RevoDrive3 & zDrive R4 support

From: Robin H. Johnson <hidden>
Date: 2011-10-11 21:21:46

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

-- 
Robin Hugh Johnson
Gentoo Linux: Developer, Trustee & Infrastructure Lead
E-Mail     : robbat2@gentoo.org
GnuPG FP   : 11AC BA4F 4778 E3F6 E4ED  F38E B27B 944E 3488 4E85

[PATCH v2/RESEND] mv_sas: OCZ RevoDrive3 & zDrive R4 support

From: Robin H. Johnson <hidden>
Date: 2011-10-24 22:30:14

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 <redacted>
Thanks-To: Gordon Pritchard [off-list ref]
---
 drivers/scsi/mvsas/mv_init.c |   10 ++++++++++
 include/linux/pci_ids.h      |    2 ++
 2 files changed, 12 insertions(+), 0 deletions(-)

Resending for the v3.2 merge window.

I tested it with more than 5TiB of IO, no stability problems detected.

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
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

Re: [PATCH] mv_sas: OCZ RevoDrive3 & zDrive R4 support

From: Arnaud Lacombe <hidden>
Date: 2011-10-26 22:08:37

Hi,

On Sat, Oct 8, 2011 at 11:47 PM, Robin H. Johnson [off-list ref] wrote:
quoted hunk
From: "Robin H. Johnson" <redacted>

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 <redacted>
Thanks-To: Gordon Pritchard [off-list ref]
---
 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/

Re: [PATCH v2/RESEND] mv_sas: OCZ RevoDrive3 & zDrive R4 support

From: Sergei Shtylyov <hidden>
Date: 2011-10-29 14:35:13

Hello.

On 25.10.2011 0:30, Robin H. Johnson wrote:
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<redacted>
Thanks-To: Gordon Pritchard[off-list ref]
[...]
quoted hunk
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
   The vendor ID macros in this file are sorted by the ID value (except Xen, it seems).

WBR. Sergei
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help