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