aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/infiniband/hw/qib/qib_sd7220.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/infiniband/hw/qib/qib_sd7220.c')
-rw-r--r--drivers/infiniband/hw/qib/qib_sd7220.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/drivers/infiniband/hw/qib/qib_sd7220.c b/drivers/infiniband/hw/qib/qib_sd7220.c
index 911205d3d5a0..c72775f27212 100644
--- a/drivers/infiniband/hw/qib/qib_sd7220.c
+++ b/drivers/infiniband/hw/qib/qib_sd7220.c
@@ -259,6 +259,7 @@ static int qib_ibsd_reset(struct qib_devdata *dd, int assert_rst)
259 * it again during startup. 259 * it again during startup.
260 */ 260 */
261 u64 val; 261 u64 val;
262
262 rst_val &= ~(1ULL); 263 rst_val &= ~(1ULL);
263 qib_write_kreg(dd, kr_hwerrmask, 264 qib_write_kreg(dd, kr_hwerrmask,
264 dd->cspec->hwerrmask & 265 dd->cspec->hwerrmask &
@@ -590,6 +591,7 @@ static int epb_access(struct qib_devdata *dd, int sdnum, int claim)
590 * Both should be clear 591 * Both should be clear
591 */ 592 */
592 u64 newval = 0; 593 u64 newval = 0;
594
593 qib_write_kreg(dd, acc, newval); 595 qib_write_kreg(dd, acc, newval);
594 /* First read after write is not trustworthy */ 596 /* First read after write is not trustworthy */
595 pollval = qib_read_kreg32(dd, acc); 597 pollval = qib_read_kreg32(dd, acc);
@@ -601,6 +603,7 @@ static int epb_access(struct qib_devdata *dd, int sdnum, int claim)
601 /* Need to claim */ 603 /* Need to claim */
602 u64 pollval; 604 u64 pollval;
603 u64 newval = EPB_ACC_REQ | oct_sel; 605 u64 newval = EPB_ACC_REQ | oct_sel;
606
604 qib_write_kreg(dd, acc, newval); 607 qib_write_kreg(dd, acc, newval);
605 /* First read after write is not trustworthy */ 608 /* First read after write is not trustworthy */
606 pollval = qib_read_kreg32(dd, acc); 609 pollval = qib_read_kreg32(dd, acc);
@@ -812,6 +815,7 @@ static int qib_sd7220_ram_xfer(struct qib_devdata *dd, int sdnum, u32 loc,
812 if (!sofar) { 815 if (!sofar) {
813 /* Only set address at start of chunk */ 816 /* Only set address at start of chunk */
814 int addrbyte = (addr + sofar) >> 8; 817 int addrbyte = (addr + sofar) >> 8;
818
815 transval = csbit | EPB_MADDRH | addrbyte; 819 transval = csbit | EPB_MADDRH | addrbyte;
816 tries = epb_trans(dd, trans, transval, 820 tries = epb_trans(dd, trans, transval,
817 &transval); 821 &transval);
@@ -922,7 +926,7 @@ qib_sd7220_ib_vfy(struct qib_devdata *dd, const struct firmware *fw)
922 * IRQ not set up at this point in init, so we poll. 926 * IRQ not set up at this point in init, so we poll.
923 */ 927 */
924#define IB_SERDES_TRIM_DONE (1ULL << 11) 928#define IB_SERDES_TRIM_DONE (1ULL << 11)
925#define TRIM_TMO (30) 929#define TRIM_TMO (15)
926 930
927static int qib_sd_trimdone_poll(struct qib_devdata *dd) 931static int qib_sd_trimdone_poll(struct qib_devdata *dd)
928{ 932{
@@ -940,7 +944,7 @@ static int qib_sd_trimdone_poll(struct qib_devdata *dd)
940 ret = 1; 944 ret = 1;
941 break; 945 break;
942 } 946 }
943 msleep(10); 947 msleep(20);
944 } 948 }
945 if (trim_tmo >= TRIM_TMO) { 949 if (trim_tmo >= TRIM_TMO) {
946 qib_dev_err(dd, "No TRIMDONE in %d tries\n", trim_tmo); 950 qib_dev_err(dd, "No TRIMDONE in %d tries\n", trim_tmo);
@@ -1071,6 +1075,7 @@ static int qib_sd_setvals(struct qib_devdata *dd)
1071 dds_reg_map >>= 4; 1075 dds_reg_map >>= 4;
1072 for (midx = 0; midx < DDS_ROWS; ++midx) { 1076 for (midx = 0; midx < DDS_ROWS; ++midx) {
1073 u64 __iomem *daddr = taddr + ((midx << 4) + idx); 1077 u64 __iomem *daddr = taddr + ((midx << 4) + idx);
1078
1074 data = dds_init_vals[midx].reg_vals[idx]; 1079 data = dds_init_vals[midx].reg_vals[idx];
1075 writeq(data, daddr); 1080 writeq(data, daddr);
1076 mmiowb(); 1081 mmiowb();