isci: Don't filter BROADCAST CHANGE primitives
authorTom Jackson <thomas.p.jackson@intel.com>
Fri, 24 Feb 2012 09:38:49 +0000 (09:38 +0000)
committerDan Williams <dan.j.williams@intel.com>
Thu, 17 May 2012 19:27:12 +0000 (12:27 -0700)
Per the SAS spec, several types of BROADCAST CHANGE primitives
must cause re-discovery of the originating expander.
Only the standard BROADCAST CHANGE primitive was being
sent to the LIBSAS layer.  The other BC primitives have been
added to the sci_phy_event_handler()

Signed-off-by: Tom Jackson <thomas.p.jackson@intel.com>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
drivers/scsi/isci/phy.c

index c685ab0..474330f 100644 (file)
@@ -875,12 +875,19 @@ enum sci_status sci_phy_event_handler(struct isci_phy *iphy, u32 event_code)
                        sci_change_state(&iphy->sm, SCI_PHY_STARTING);
                        break;
                case SCU_EVENT_BROADCAST_CHANGE:
+               case SCU_EVENT_BROADCAST_SES:
+               case SCU_EVENT_BROADCAST_RESERVED0:
+               case SCU_EVENT_BROADCAST_RESERVED1:
+               case SCU_EVENT_BROADCAST_EXPANDER:
+               case SCU_EVENT_BROADCAST_AEN:
                        /* Broadcast change received. Notify the port. */
                        if (phy_get_non_dummy_port(iphy) != NULL)
                                sci_port_broadcast_change_received(iphy->owning_port, iphy);
                        else
                                iphy->bcn_received_while_port_unassigned = true;
                        break;
+               case SCU_EVENT_BROADCAST_RESERVED3:
+               case SCU_EVENT_BROADCAST_RESERVED4:
                default:
                        phy_event_warn(iphy, state, event_code);
                        return SCI_FAILURE_INVALID_STATE;