IB/hfi1: Preserve external device completed bit
authorDean Luick <dean.luick@intel.com>
Thu, 8 Dec 2016 03:33:40 +0000 (19:33 -0800)
committerDoug Ledford <dledford@redhat.com>
Sun, 11 Dec 2016 20:29:42 +0000 (15:29 -0500)
The driver should not change the external device request
completed bit when not actually doing an external device
request.

Reviewed-by: Easwar Hariharan <easwar.hariharan@intel.com>
Signed-off-by: Dean Luick <dean.luick@intel.com>
Signed-off-by: Dennis Dalessandro <dennis.dalessandro@intel.com>
Signed-off-by: Doug Ledford <dledford@redhat.com>
drivers/infiniband/hw/hfi1/chip.c

index f87d80567572391f0eba026de63a5c754a614440..37d8af50cc13b4ec3a6454d8ddac088df70d167d 100644 (file)
@@ -8488,7 +8488,10 @@ static int do_8051_command(
         */
        if (type == HCMD_WRITE_LCB_CSR) {
                in_data |= ((*out_data) & 0xffffffffffull) << 8;
-               reg = ((((*out_data) >> 40) & 0xff) <<
+               /* must preserve COMPLETED - it is tied to hardware */
+               reg = read_csr(dd, DC_DC8051_CFG_EXT_DEV_0);
+               reg &= DC_DC8051_CFG_EXT_DEV_0_COMPLETED_SMASK;
+               reg |= ((((*out_data) >> 40) & 0xff) <<
                                DC_DC8051_CFG_EXT_DEV_0_RETURN_CODE_SHIFT)
                      | ((((*out_data) >> 48) & 0xffff) <<
                                DC_DC8051_CFG_EXT_DEV_0_RSP_DATA_SHIFT);