From f6c55783eed3c758a753b01c9952857af7c2d49a Mon Sep 17 00:00:00 2001 From: leonidk Date: Tue, 29 Apr 2008 15:40:55 +0000 Subject: [PATCH] [TOOLS] bugfix in work with ConnectX HCAs git-svn-id: svn://openib.tc.cornell.edu/gen1@1086 ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86 --- trunk/tools/mtcr/user/mtcr.c | 40 ++++++++++++++++++++++++------------ 1 file changed, 27 insertions(+), 13 deletions(-) diff --git a/trunk/tools/mtcr/user/mtcr.c b/trunk/tools/mtcr/user/mtcr.c index 4b2eeea4..dd808f45 100644 --- a/trunk/tools/mtcr/user/mtcr.c +++ b/trunk/tools/mtcr/user/mtcr.c @@ -235,8 +235,7 @@ int create_mst_names_by_dev_id(USHORT dev_id, int dev_ix, int mask, char *name, } // names generation - for (j=0; jdtype == MST_TAVOR) - *value = __be32_to_cpu(*((volatile unsigned int *)((char *)mf->ptr + offset))); - else - *value = *((volatile unsigned int *)((char *)mf->ptr + offset)); - break; + if (mf->dtype == MST_TAVOR) { + + if (mfi->hermon_wa_slot && mfi->hermon_wa_last_op_write) { + if (hermon_wa_write_confirm_sem(mf, offset) == 0) + return -1; + mfi->hermon_wa_last_op_write = 0; + } + + *value = __be32_to_cpu(*((volatile unsigned int *)((char *)mf->ptr + offset))); + } + else + *value = *((volatile unsigned int *)((char *)mf->ptr + offset)); + DPRINT1(("MTCR:mread4: Tried to access value at offset %x and base addr %p\n", + offset, mf->ptr)); + + break; case MST_PCICONF: { @@ -1008,10 +1018,15 @@ MTCR_API int mwrite4(mfile *mf, unsigned int offset, u_int32_t value) return i2c_master_write_cr(mf, value, offset, 4); #endif - if (mf->dtype == MST_TAVOR) - *((volatile unsigned int *)((char *)mf->ptr + offset)) = __cpu_to_be32(value); - else - *((volatile unsigned int *)((char *)mf->ptr + offset)) = value; + // write the value + if (mf->dtype == MST_TAVOR) { + volatile unsigned int *ptr = (volatile unsigned int *)((char *)mf->ptr + offset); + + *ptr = __cpu_to_be32(value); + mfi->hermon_wa_last_op_write = 1; + } + else + *((volatile unsigned int *)((char *)mf->ptr + offset)) = value; break; case MST_PCICONF: @@ -1205,4 +1220,3 @@ unsigned char mset_i2c_slave(mfile *mf, unsigned char new_i2c_slave) return ret; } - -- 2.41.0