staging/rdma/hfi1: Clear the QSFP reset that is asserted on FLR
authorEaswar Hariharan <easwar.hariharan@intel.com>
Sat, 7 Nov 2015 01:06:57 +0000 (20:06 -0500)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 16 Nov 2015 04:02:47 +0000 (20:02 -0800)
The FLR on driver load asserts the QSFP reset pin and the driver does
not deassert it after. This patch allows the external QSFP cable to exit
reset by writing 1 to all the QSFP pins.

Reviewed-by: Dean Luick <dean.luick@intel.com>
Signed-off-by: Easwar Hariharan <easwar.hariharan@intel.com>
Signed-off-by: Jubin John <jubin.john@intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/rdma/hfi1/chip.c

index 4e22477c973945fefc1feb546babd742371786fc..dd2ba2516a66d4ca98a4a6fdabd21850e2945a6f 100644 (file)
@@ -9923,19 +9923,16 @@ static void init_chip(struct hfi1_devdata *dd)
                setextled(dd, 0);
        /*
         * Clear the QSFP reset.
-        * A0 leaves the out lines floating on power on, then on an FLR
-        * enforces a 0 on all out pins.  The driver does not touch
+        * An FLR enforces a 0 on all out pins. The driver does not touch
         * ASIC_QSFPn_OUT otherwise.  This leaves RESET_N low and
-        * anything  plugged constantly in reset, if it pays attention
+        * anything plugged constantly in reset, if it pays attention
         * to RESET_N.
-        * A prime example of this is SiPh. For now, set all pins high.
+        * Prime examples of this are optical cables. Set all pins high.
         * I2CCLK and I2CDAT will change per direction, and INT_N and
         * MODPRS_N are input only and their value is ignored.
         */
-       if (is_a0(dd)) {
-               write_csr(dd, ASIC_QSFP1_OUT, 0x1f);
-               write_csr(dd, ASIC_QSFP2_OUT, 0x1f);
-       }
+       write_csr(dd, ASIC_QSFP1_OUT, 0x1f);
+       write_csr(dd, ASIC_QSFP2_OUT, 0x1f);
 }
 
 static void init_early_variables(struct hfi1_devdata *dd)