]> git.karo-electronics.de Git - linux-beck.git/commitdiff
[SCSI] mvsas: fix expander link error
authorXiangliang Yu <yuxiangl@marvell.com>
Thu, 29 Sep 2011 07:32:37 +0000 (00:32 -0700)
committerJames Bottomley <JBottomley@Parallels.com>
Sun, 2 Oct 2011 18:09:18 +0000 (13:09 -0500)
Expanders fail to link when the phy rates are mismatched.

Signed-off-by: Xiangliang Yu <yuxiangl@marvell.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
drivers/scsi/mvsas/mv_sas.c

index f2ac01fd09c002f3ddcba591ef889db247805053..ab2a71fd0fde91cb405061561553eaadec1bdac9 100644 (file)
@@ -396,7 +396,7 @@ static int mvs_task_prep_smp(struct mvs_info *mvi,
        /* generate open address frame hdr (first 12 bytes) */
        /* initiator, SMP, ftype 1h */
        buf_oaf[0] = (1 << 7) | (PROTOCOL_SMP << 4) | 0x01;
-       buf_oaf[1] = dev->linkrate & 0xf;
+       buf_oaf[1] = min(sas_port->linkrate, dev->linkrate) & 0xf;
        *(u16 *)(buf_oaf + 2) = 0xFFFF;         /* SAS SPEC */
        memcpy(buf_oaf + 4, dev->sas_addr, SAS_ADDR_SIZE);
 
@@ -541,7 +541,7 @@ static int mvs_task_prep_ata(struct mvs_info *mvi,
        /* generate open address frame hdr (first 12 bytes) */
        /* initiator, STP, ftype 1h */
        buf_oaf[0] = (1 << 7) | (PROTOCOL_STP << 4) | 0x1;
-       buf_oaf[1] = dev->linkrate & 0xf;
+       buf_oaf[1] = min(sas_port->linkrate, dev->linkrate) & 0xf;
        *(u16 *)(buf_oaf + 2) = cpu_to_be16(mvi_dev->device_id + 1);
        memcpy(buf_oaf + 4, dev->sas_addr, SAS_ADDR_SIZE);
 
@@ -649,7 +649,7 @@ static int mvs_task_prep_ssp(struct mvs_info *mvi,
        /* generate open address frame hdr (first 12 bytes) */
        /* initiator, SSP, ftype 1h */
        buf_oaf[0] = (1 << 7) | (PROTOCOL_SSP << 4) | 0x1;
-       buf_oaf[1] = dev->linkrate & 0xf;
+       buf_oaf[1] = min(sas_port->linkrate, dev->linkrate) & 0xf;
        *(u16 *)(buf_oaf + 2) = cpu_to_be16(mvi_dev->device_id + 1);
        memcpy(buf_oaf + 4, dev->sas_addr, SAS_ADDR_SIZE);