Hi.

On 26.11.2012 20:51, Adam McDougall wrote:
My co-worker ordered a Samsung 840 PRO series SSD for his desktop but we
found 9.0-rel would not probe it and 9.1-rc3 shows some errors.  I got
past the problem with a workaround of disabling AHCI mode in the BIOS
which drops it to IDE mode and it detects fine, although runs a little
slower.  Is there something I can try to make it probe properly in AHCI
mode?  We also tried moving it to the SATA data and power cables from
the working SATA HD so I don't think it is the port or controller
driver.  The same model motherboard from another computer did the same
thing.  Thanks.

dmesg line when it is working:
ada0: <Samsung SSD 840 PRO Series DXM03B0Q> ATA-9 SATA 3.x device

dmesg lines when it is not working: (hand transcribed from a picture)
(aprobe0:ahcich0:0:0): SETFEATURES ENABLE SATA FEATURE. ACB: ef 10 00 00
00 40 00 00 00 00 05 00
(aprobe0:ahcich0:0:0): CAM status: ATA Status Error
(aprobe0:ahcich0:0:0): ATA status: 51 (DRDY SERV ERR), error: 04 (ABRT )
(aprobe0:ahcich0:0:0): RES: 51 04 00 00 00 40 00 00 00 00 00
(aprobe0:ahcich0:0:0): Retrying command
(aprobe0:ahcich0:0:0): SETFEATURES ENABLE SATA FEATURE. ACB: ef 10 00 00
00 40 00 00 00 00 05 00
(aprobe0:ahcich0:0:0): CAM status: ATA Status Error
(aprobe0:ahcich0:0:0): ATA status: 51 (DRDY SERV ERR), error: 04 (ABRT )
(aprobe0:ahcich0:0:0): RES: 51 04 00 00 00 40 00 00 00 00 00
(aprobe0:ahcich0:0:0): Error 5, Retries exhausted

I believe that is SSD's firmware bug. Probably it declares support for SATA Asynchronous Notifications in its IDENTIFY data, but returns error on attempt to enable it. Switching controller to legacy mode disables that functionality and so works as workaround. Patch below should workaround the problem from the OS side:

--- ata_xpt.c   (revision 243561)
+++ ata_xpt.c   (working copy)
@@ -745,6 +745,14 @@ probedone(struct cam_periph *periph, union ccb *do
                        goto noerror;

                /*
+ * Some Samsung SSDs report supported Asynchronous Notification,
+                * but return ABORT on attempt to enable it.
+                */
+               } else if (softc->action == PROBE_SETAN &&
+                   status == CAM_ATA_STATUS_ERROR) {
+                       goto noerror;
+
+               /*
                 * SES and SAF-TE SEPs have different IDENTIFY commands,
* but SATA specification doesn't tell how to identify them.
                 * Until better way found, just try another if first fail.


--
Alexander Motin
_______________________________________________
freebsd-stable@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-stable
To unsubscribe, send any mail to "freebsd-stable-unsubscr...@freebsd.org"

Reply via email to