On Fri, 24 Dec 2021 at 12:23, Shankar Athanikar <shankar.ma@xxxxxxxxxxx> wrote: > > This enhancement covers detailed status register decoding with ERROR/STATUS information when host sends CMD13(with SQS=0) > > Signed-off-by : shankar.ma@xxxxxxxxxxxx > Reviewed-by: mohanraj.v@xxxxxxxxxxx Please add proper names here and fix the S-o-B tag. Additionally, you may run checkpatch to get more formatting details about the patch. > --- > mmc_cmds.c | 65 +++++++++++++++++++++++++++++++++++++++++++++++++++++- > 1 file changed, 64 insertions(+), 1 deletion(-) > > diff --git a/mmc_cmds.c b/mmc_cmds.c > index 5e5e79e..f9f1d52 100644 > --- a/mmc_cmds.c > +++ b/mmc_cmds.c > @@ -848,6 +848,8 @@ int do_status_get(int nargs, char **argv) > __u32 response; > int fd, ret; > char *device; > + const char *str; > + __u8 state; > > if (nargs != 2) { > fprintf(stderr, "Usage: mmc status get </path/to/mmcblkX>\n"); > @@ -869,7 +871,68 @@ int do_status_get(int nargs, char **argv) > } > > printf("SEND_STATUS response: 0x%08x\n", response); > - > + if((response >> 31) & 0x01) printf("ERROR: ADDRESS_OUT_OF_RANGE\n"); Rather than having these magic numbers sprinkled across the code, can you please add defines for them - and use those instead when comparing. Along the lines of what is being done for "R1_SWITCH_ERROR" already. > + if((response >> 30) & 0x01) printf("ERROR: ADDRESS_MISALIGN\n"); > + if((response >> 29) & 0x01) printf("ERROR: BLOCK_LEN_ERROR\n"); > + if((response >> 28) & 0x01) printf("ERROR: ERASE_SEQ_ERROR\n"); > + if((response >> 27) & 0x01) printf("ERROR: ERASE_PARAM_ERROR\n"); > + if((response >> 26) & 0x01) printf("ERROR: WP_VOILATION\n"); > + if((response >> 25) & 0x01) printf("STATUS: DEVICE_IS_LOCKED\n"); > + if((response >> 24) & 0x01) printf("ERROR: LOCK_UNLOCK_IS_FAILED\n"); > + if((response >> 23) & 0x01) printf("ERROR: COM_CRC_ERROR\n"); > + if((response >> 22) & 0x01) printf("ERROR: ILLEGAL_COMMAND\n"); > + if((response >> 21) & 0x01) printf("ERROR: DEVICE_ECC_FAILED\n"); > + if((response >> 20) & 0x01) printf("ERROR: CC_ERROR\n"); > + if((response >> 19) & 0x01) printf("ERROR: ERROR\n"); > + if((response >> 16) & 0x01) printf("ERROR: CID/CSD OVERWRITE\n"); > + if((response >> 15) & 0x01) printf("ERROR: WP_ERASE_SKIP\n"); > + if((response >> 13) & 0x01) printf("ERROR: ERASE_RESET\n"); Please add a newline here. > + state = (response >> 9)& 0xF; > + switch(state) > + { > + case 0: > + str = "IDLE"; > + break; > + case 1: > + str = "READY"; > + break; > + case 2: > + str = "IDENT"; > + break; > + case 3: > + str = "STDBY"; > + break; > + case 4: > + str = "TRANS"; > + break; > + case 5: > + str = "DATA"; > + break; > + case 6: > + str = "RCV"; > + break; > + case 7: > + str = "PRG"; > + break; > + case 8: > + str = " DIS"; Whitespace. > + break; > + case 9: > + str = "BTST"; > + break; > + case 10: > + str = "SLP" ; > + break; > + default: > + printf("Attention : Device state is INVALID: Kindly check the Response\n"); > + goto out_free; > + } Please add a newline here. > + printf("DEVICE STATE: %s\n",str); > + if((response >> 8) & 0x01) printf("STATUS: READY_FOR_DATA\n"); > + if((response >> 7) & 0x01) printf("ERROR: SWITCH_ERROR\n"); > + if((response >> 6) & 0x01) printf("STATUS: EXCEPTION_EVENT\n"); /* Check EXCEPTION_EVENTS_STATUS field to understand what further actions are needed*/ > + if((response >> 5) & 0x01) printf("STATUS: APP_CMD\n"); > +out_free: > close(fd); > return ret; > } > -- > 2.25.1 > Kind regards Uffe