In an attempt to speed up progress on some of the si3124 bugs that Roger
reported, I've created a workspace with the fixes for:

   6565894 sata drives are not identified by si3124 driver
   6566207 si3124 driver loses interrupts.

I'm attaching a driver which contains these fixes as well as a diff of
the changes I used to produce them.

I don't have access to a si3124 chipset, unfortunately.

Would somebody be able to review these changes and try the new driver on
a si3124 card?

Thanks,

-j

On Tue, Jul 17, 2007 at 02:39:00AM -0700, Nigel Smith wrote:
> You can see the  status of bug here:
> 
> http://bugs.opensolaris.org/view_bug.do?bug_id=6566207
> 
> Unfortunately, it's showing no progress since 20th June.
> 
> This fix really could do to be in place for S10u4 and snv_70.
> Thanks
> Nigel Smith
>  
>  
> This message posted from opensolaris.org
> _______________________________________________
> zfs-discuss mailing list
> zfs-discuss@opensolaris.org
> http://mail.opensolaris.org/mailman/listinfo/zfs-discuss

Attachment: si3124.tar.gz
Description: application/tar-gz

------- usr/src/uts/common/io/sata/adapters/si3124/si3124.c -------

Index: usr/src/uts/common/io/sata/adapters/si3124/si3124.c
--- /ws/onnv-clone/usr/src/uts/common/io/sata/adapters/si3124/si3124.c  Mon Nov 
13 23:20:01 2006
+++ 
/export/johansen/si-fixes/usr/src/uts/common/io/sata/adapters/si3124/si3124.c   
    Tue Jul 17 14:37:17 2007
@@ -22,11 +22,11 @@
 /*
  * Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
  * Use is subject to license terms.
  */
 
-#pragma ident  "@(#)si3124.c   1.4     06/11/14 SMI"
+#pragma ident  "@(#)si3124.c   1.5     07/07/17 SMI"
 
 
 
 /*
  * SiliconImage 3124/3132 sata controller driver
@@ -381,11 +381,11 @@
 
 extern struct mod_ops mod_driverops;
 
 static  struct modldrv modldrv = {
        &mod_driverops, /* driverops */
-       "si3124 driver v1.4",
+       "si3124 driver v1.5",
        &sictl_dev_ops, /* driver ops */
 };
 
 static  struct modlinkage modlinkage = {
        MODREV_1,
@@ -2808,10 +2808,13 @@
                si_portp = si_ctlp->sictl_ports[port];
                mutex_enter(&si_portp->siport_mutex);
 
                /* Clear Port Reset. */
                ddi_put32(si_ctlp->sictl_port_acc_handle,
+                       (uint32_t *)PORT_CONTROL_SET(si_ctlp, port),
+                       PORT_CONTROL_SET_BITS_PORT_RESET);
+               ddi_put32(si_ctlp->sictl_port_acc_handle,
                        (uint32_t *)PORT_CONTROL_CLEAR(si_ctlp, port),
                        PORT_CONTROL_CLEAR_BITS_PORT_RESET);
 
                /*
                 * Arm the interrupts for: Cmd completion, Cmd error,
@@ -3509,16 +3512,16 @@
                        port);
 
                if (port_intr_status & INTR_COMMAND_COMPLETE) {
                        (void) si_intr_command_complete(si_ctlp, si_portp,
                                                        port);
-               }
-
+               } else {
                /* Clear the interrupts */
                ddi_put32(si_ctlp->sictl_port_acc_handle,
                        (uint32_t *)(PORT_INTERRUPT_STATUS(si_ctlp, port)),
                        port_intr_status & INTR_MASK);
+               }
 
                /*
                 * Note that we did not clear the interrupt for command
                 * completion interrupt. Reading of slot_status takes care
                 * of clearing the interrupt for command completion case.
_______________________________________________
zfs-discuss mailing list
zfs-discuss@opensolaris.org
http://mail.opensolaris.org/mailman/listinfo/zfs-discuss

Reply via email to