Skip to content

Commit 39c64c2

Browse files
authored
Merge pull request #1369 from shellysela219/mstreg_syn_gb
show syndrome in case of mstreg failure
2 parents d431e08 + 8162d38 commit 39c64c2

File tree

4 files changed

+60
-4
lines changed

4 files changed

+60
-4
lines changed

include/mtcr_ul/mtcr_com_defs.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -446,6 +446,8 @@ typedef struct icmd_params_t {
446446
u_int32_t dma_size;
447447
int dma_icmd;
448448
mtcr_status_e icmd_ready;
449+
int syndrome;
450+
int syndrome_addr;
449451
} icmd_params;
450452

451453
typedef struct ctx_params_t {

mlxreg/mlxreg_lib/mlxreg_lib.cpp

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -240,8 +240,18 @@ MlxRegLibStatus MlxRegLib::sendRegister(string regName, int method, std::vector<
240240
u_int16_t regId = (u_int16_t)_regAccessMap.find(regName)->second;
241241
int rc;
242242
rc = sendMaccessReg(regId, method, data);
243-
if (rc) {
244-
throw MlxRegException("Failed to send access register: %s", m_err2str((MError)rc));
243+
if (rc)
244+
{
245+
char error_msg[200];
246+
snprintf(error_msg, sizeof(error_msg), "Failed to send access register: %s", m_err2str((MError)rc));
247+
if (_mf->icmd.syndrome)
248+
{
249+
snprintf(error_msg + strlen(error_msg),
250+
sizeof(error_msg) - strlen(error_msg),
251+
" and the syndrome number is: 0x%X",
252+
(_mf->icmd.syndrome));
253+
}
254+
throw MlxRegException(error_msg);
245255
}
246256
return MRLS_SUCCESS;
247257
}
@@ -255,7 +265,16 @@ MlxRegLibStatus MlxRegLib::sendRegister(u_int16_t regId, int method, std::vector
255265
rc = sendMaccessReg(regId, method, data);
256266
if (rc)
257267
{
258-
throw MlxRegException("Failed send access register: %s", m_err2str((MError)rc));
268+
char error_msg[200];
269+
snprintf(error_msg, sizeof(error_msg), "Failed to send access register: %s", m_err2str((MError)rc));
270+
if (_mf->icmd.syndrome)
271+
{
272+
snprintf(error_msg + strlen(error_msg),
273+
sizeof(error_msg) - strlen(error_msg),
274+
" and the syndrome number is: 0x%X",
275+
(_mf->icmd.syndrome));
276+
}
277+
throw MlxRegException(error_msg);
259278
}
260279
return MRLS_SUCCESS;
261280
}

mtcr_ul/fwctrl.c

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -187,13 +187,22 @@ int fwctl_control_access_register(int fd,
187187
memcpy(data_in, data, size_in);
188188
memcpy(&cmd_status, status, sizeof(int));
189189
if (cmd_status) {
190+
u_int32_t syndrome = MLX5_GET(access_register_out, out, syndrome);
191+
mf->icmd.syndrome = syndrome;
192+
FWCTL_DEBUG_PRINT(mf, "FWCTL_IOCTL_CMD_RPC returned error from FW: reg_id=0x%x, method=0x%x, cmd_status=0x%x, syndrome=0x%x\n",
193+
reg_id, method, cmd_status, syndrome);
194+
190195
if (reg_id == mnvda_reg_id) {
191196
*reg_status = translate_cmd_status_to_reg_status(cmd_status);
192197
} else {
193198
*reg_status = return_by_reg_status(cmd_status);
194199
}
200+
FWCTL_DEBUG_PRINT(mf, "Mapped FW cmd_status=0x%x to reg_status=0x%x (%s)\n", cmd_status, *reg_status, m_err2str(*reg_status));
201+
} else {
202+
*reg_status = 0;
203+
mf->icmd.syndrome = 0;
204+
FWCTL_DEBUG_PRINT(mf, "FWCTL_IOCTL_CMD_RPC succeeded: reg_id=0x%x, method=0x%x\n", reg_id, method);
195205
}
196-
197206
FWCTL_DEBUG_PRINT(mf, "register id = 0x%x, command status = 0x%x, reg status code: 0x%x, reg status: %s\n",
198207
reg_id, cmd_status, *reg_status, m_err2str(*reg_status));
199208
out:

mtcr_ul/mtcr_ul_icmd_cif.c

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,11 @@
121121
#define VCR_SEMAPHORE62 0x0 /* semaphore Domain */
122122
#define VCR_CMD_ADDR 0x100000 /* mailbox addr */
123123
#define VCR_CMD_SIZE_ADDR 0x1000 /* mailbox size */
124+
#define VCR_SYNDROME_OFFSET 0x1008
125+
#define SYNDROME_OFFSET 0x3f8
126+
#define SYNDROME_BITOFF 0
127+
#define SYNDROME_BITLEN 24
128+
124129

125130
#define EXT_MBOX_DMA_OFF 0x8
126131

@@ -359,6 +364,15 @@ static MError set_busy_bit(mfile* mf, u_int32_t* reg, int busy_bit_offset)
359364
return MWRITE4_ICMD(mf, mf->icmd.ctrl_addr, *reg);
360365
}
361366

367+
static MError get_syndrome(mfile* mf, u_int32_t* reg, int syndrome_bit_offset, int syndrome_bit_len)
368+
{
369+
DBG_PRINTF("Reading syndrome from addr=0x%x\n", mf->icmd.syndrome_addr);
370+
int rc = MREAD4_ICMD(mf, mf->icmd.syndrome_addr, reg);
371+
CHECK_RC(rc);
372+
373+
return EXTRACT((*reg), syndrome_bit_offset, syndrome_bit_len);
374+
}
375+
362376
static int set_sleep()
363377
{
364378
char* icmd_sleep_env;
@@ -801,6 +815,12 @@ static int icmd_send_command_com(mfile * mf,
801815

802816
/* get status */
803817
ret = translate_status(EXTRACT(reg, STATUS_BITOFF, STATUS_BITLEN));
818+
819+
if (ret != ME_OK)
820+
{
821+
mf->icmd.syndrome = get_syndrome(mf, &reg, SYNDROME_BITOFF, SYNDROME_BITLEN);
822+
}
823+
804824
CHECK_RC_GO_TO(ret, cleanup);
805825

806826
DBG_PRINTF("-D- Reading command from mailbox");
@@ -976,6 +996,7 @@ static int icmd_init_cr(mfile* mf)
976996
u_int32_t cmd_ptr_addr;
977997
u_int32_t reg = 0x0;
978998
u_int32_t hw_id = 0x0;
999+
mf->icmd.syndrome = 0;
9791000

9801001
#ifndef __FreeBSD__
9811002
u_int32_t dev_type = 0;
@@ -1135,6 +1156,8 @@ static int icmd_init_cr(mfile* mf)
11351156

11361157
mf->icmd.cmd_addr = EXTRACT(reg, CMD_PTR_BITOFF, mf->icmd.cmd_ptr_bitlen);
11371158
mf->icmd.ctrl_addr = mf->icmd.cmd_addr + CTRL_OFFSET;
1159+
mf->icmd.syndrome_addr = mf->icmd.cmd_addr + SYNDROME_OFFSET;
1160+
DBG_PRINTF("-D- iCMD syndrom addr: 0x%x\n", mf->icmd.syndrome_addr);
11381161
break;
11391162

11401163
case ME_ICMD_STATUS_CR_FAIL:
@@ -1243,6 +1266,8 @@ static int icmd_init_vcr(mfile* mf)
12431266
mf->icmd.cmd_addr = VCR_CMD_ADDR;
12441267
mf->icmd.ctrl_addr = VCR_CTRL_ADDR;
12451268
mf->icmd.semaphore_addr = VCR_SEMAPHORE62;
1269+
mf->icmd.syndrome_addr = VCR_SYNDROME_OFFSET;
1270+
mf->icmd.syndrome = 0;
12461271
DBG_PRINTF("-D- Getting VCR_CMD_SIZE_ADDR\n");
12471272

12481273
rc = icmd_take_semaphore_com(mf, pid);
@@ -1262,6 +1287,7 @@ static int icmd_init_vcr(mfile* mf)
12621287
mf->icmd.icmd_opened = 1;
12631288
DBG_PRINTF("-D- iCMD command addr: 0x%x\n", mf->icmd.cmd_addr);
12641289
DBG_PRINTF("-D- iCMD ctrl addr: 0x%x\n", mf->icmd.ctrl_addr);
1290+
DBG_PRINTF("-D- iCMD syndrom addr: 0x%x\n", mf->icmd.syndrome_addr);
12651291
DBG_PRINTF("-D- iCMD semaphore addr(semaphore space): 0x%x\n", mf->icmd.semaphore_addr);
12661292
DBG_PRINTF("-D- iCMD max mailbox size: 0x%x size %d\n", mf->icmd.max_cmd_size, size);
12671293
DBG_PRINTF("-D- iCMD stat_cfg_not_done addr: 0x%x:%d\n", mf->icmd.static_cfg_not_done_addr,

0 commit comments

Comments
 (0)