diff options
Diffstat (limited to 'drivers/message/fusion/mptsas.c')
-rw-r--r-- | drivers/message/fusion/mptsas.c | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/drivers/message/fusion/mptsas.c b/drivers/message/fusion/mptsas.c index f66f2203143a..b752a479f6db 100644 --- a/drivers/message/fusion/mptsas.c +++ b/drivers/message/fusion/mptsas.c | |||
@@ -852,6 +852,10 @@ static int mptsas_get_linkerrors(struct sas_phy *phy) | |||
852 | dma_addr_t dma_handle; | 852 | dma_addr_t dma_handle; |
853 | int error; | 853 | int error; |
854 | 854 | ||
855 | /* FIXME: only have link errors on local phys */ | ||
856 | if (!scsi_is_sas_phy_local(phy)) | ||
857 | return -EINVAL; | ||
858 | |||
855 | hdr.PageVersion = MPI_SASPHY1_PAGEVERSION; | 859 | hdr.PageVersion = MPI_SASPHY1_PAGEVERSION; |
856 | hdr.ExtPageLength = 0; | 860 | hdr.ExtPageLength = 0; |
857 | hdr.PageNumber = 1 /* page number 1*/; | 861 | hdr.PageNumber = 1 /* page number 1*/; |
@@ -924,6 +928,10 @@ static int mptsas_phy_reset(struct sas_phy *phy, int hard_reset) | |||
924 | unsigned long timeleft; | 928 | unsigned long timeleft; |
925 | int error = -ERESTARTSYS; | 929 | int error = -ERESTARTSYS; |
926 | 930 | ||
931 | /* FIXME: fusion doesn't allow non-local phy reset */ | ||
932 | if (!scsi_is_sas_phy_local(phy)) | ||
933 | return -EINVAL; | ||
934 | |||
927 | /* not implemented for expanders */ | 935 | /* not implemented for expanders */ |
928 | if (phy->identify.target_port_protocols & SAS_PROTOCOL_SMP) | 936 | if (phy->identify.target_port_protocols & SAS_PROTOCOL_SMP) |
929 | return -ENXIO; | 937 | return -ENXIO; |
@@ -1570,9 +1578,6 @@ static int mptsas_probe_one_phy(struct device *dev, | |||
1570 | 1578 | ||
1571 | if (!phy_info->phy) { | 1579 | if (!phy_info->phy) { |
1572 | 1580 | ||
1573 | if (local) | ||
1574 | phy->local_attached = 1; | ||
1575 | |||
1576 | error = sas_phy_add(phy); | 1581 | error = sas_phy_add(phy); |
1577 | if (error) { | 1582 | if (error) { |
1578 | sas_phy_free(phy); | 1583 | sas_phy_free(phy); |
@@ -1642,14 +1647,18 @@ static int mptsas_probe_one_phy(struct device *dev, | |||
1642 | 1647 | ||
1643 | for (i = 0; i < port_info->num_phys; i++) | 1648 | for (i = 0; i < port_info->num_phys; i++) |
1644 | if (port_info->phy_info[i].identify.sas_address == | 1649 | if (port_info->phy_info[i].identify.sas_address == |
1645 | identify.sas_address) | 1650 | identify.sas_address) { |
1651 | sas_port_mark_backlink(port); | ||
1646 | goto out; | 1652 | goto out; |
1653 | } | ||
1647 | 1654 | ||
1648 | } else if (scsi_is_sas_rphy(parent)) { | 1655 | } else if (scsi_is_sas_rphy(parent)) { |
1649 | struct sas_rphy *parent_rphy = dev_to_rphy(parent); | 1656 | struct sas_rphy *parent_rphy = dev_to_rphy(parent); |
1650 | if (identify.sas_address == | 1657 | if (identify.sas_address == |
1651 | parent_rphy->identify.sas_address) | 1658 | parent_rphy->identify.sas_address) { |
1659 | sas_port_mark_backlink(port); | ||
1652 | goto out; | 1660 | goto out; |
1661 | } | ||
1653 | } | 1662 | } |
1654 | 1663 | ||
1655 | switch (identify.device_type) { | 1664 | switch (identify.device_type) { |